From bf377298eec859c8b1b24053b209bb6f1040f12b Mon Sep 17 00:00:00 2001 From: Rien Date: Sat, 8 Sep 2018 23:13:35 +0200 Subject: [PATCH 001/462] update showcase list layout --- www/src/views/shared/styles.js | 9 ++++----- www/src/views/shared/thumbnail.js | 10 +++++----- www/src/views/starter-showcase/filtered-showcase.js | 10 +--------- www/src/views/starter-showcase/showcase-list.js | 11 ++--------- 4 files changed, 12 insertions(+), 28 deletions(-) diff --git a/www/src/views/shared/styles.js b/www/src/views/shared/styles.js index 8a76f049df5a7..46a4001becb81 100644 --- a/www/src/views/shared/styles.js +++ b/www/src/views/shared/styles.js @@ -26,16 +26,15 @@ const styles = { display: `flex`, flexWrap: `wrap`, padding: rhythm(3 / 4), - justifyContent: `center`, - [presets.Desktop]: { - justifyContent: `flex-start`, - }, + justifyContent: `space-evenly`, }, showcaseItem: { display: `flex`, flexDirection: `column`, margin: rhythm(3 / 4), - width: 282, + minWidth: 259,//shows 3 items/row on windows > 1200px wide + maxWidth: 350, + flex: `1 0 0`, position: `relative`, }, featuredItem: { diff --git a/www/src/views/shared/thumbnail.js b/www/src/views/shared/thumbnail.js index 8b681b36c337a..fcbd4c750bb0f 100644 --- a/www/src/views/shared/thumbnail.js +++ b/www/src/views/shared/thumbnail.js @@ -10,10 +10,10 @@ const ThumbnailLink = ({ slug, image, title, children }) => { // site showcase if (image.screenshotFile) { - screenshot = image.screenshotFile.childImageSharp.fixed + screenshot = image.screenshotFile.childImageSharp.fluid } else { // starter showcase - screenshot = image.childImageSharp.fixed + screenshot = image.childImageSharp.fluid } return ( @@ -37,7 +37,7 @@ const ThumbnailLink = ({ slug, image, title, children }) => { > {screenshot ? ( {`Screenshot @@ -60,8 +60,8 @@ export default ThumbnailLink export const showcaseThumbnailFragment = graphql` fragment ShowcaseThumbnailFragment_item on ImageSharp { - fixed(width: 282, height: 211) { - ...GatsbyImageSharpFixed_noBase64 + fluid(maxWidth: 350) { + ...GatsbyImageSharpFluid_noBase64 } } ` diff --git a/www/src/views/starter-showcase/filtered-showcase.js b/www/src/views/starter-showcase/filtered-showcase.js index 418d6b7f4f570..1e1bb900c0de9 100644 --- a/www/src/views/starter-showcase/filtered-showcase.js +++ b/www/src/views/starter-showcase/filtered-showcase.js @@ -334,15 +334,7 @@ export default class FilteredShowcase extends Component { +

) : (

diff --git a/packages/gatsby/src/redux/reducers/__tests__/redirects.js b/packages/gatsby/src/redux/reducers/__tests__/redirects.js index 881e63d14c367..0c6e05ad34b86 100644 --- a/packages/gatsby/src/redux/reducers/__tests__/redirects.js +++ b/packages/gatsby/src/redux/reducers/__tests__/redirects.js @@ -12,14 +12,12 @@ describe(`redirects`, () => { let state = reducer(undefined, action) - expect(state).toEqual( - [ - { - fromPath: `/page1`, - toPath: `/page1/`, - }, - ] - ) + expect(state).toEqual([ + { + fromPath: `/page1`, + toPath: `/page1/`, + }, + ]) }) it(`lets you redirect to an external url`, () => { @@ -33,14 +31,12 @@ describe(`redirects`, () => { let state = reducer(undefined, action) - expect(state).toEqual( - [ - { - fromPath: `/page1`, - toPath: `https://example.com`, - }, - ] - ) + expect(state).toEqual([ + { + fromPath: `/page1`, + toPath: `https://example.com`, + }, + ]) }) const protocolArr = [ @@ -50,7 +46,7 @@ describe(`redirects`, () => { [`ftp`, `ftp://example.com`], [`mailto`, `mailto:example@email.com`], ] - + protocolArr.forEach(([protocol, toPath], index) => { it(`lets you redirect using ${protocol}`, () => { const fromPath = `/page${index}` @@ -70,4 +66,4 @@ describe(`redirects`, () => { ]) }) }) -}) \ No newline at end of file +}) diff --git a/packages/gatsby/src/schema/__tests__/infer-graphql-type-test.js b/packages/gatsby/src/schema/__tests__/infer-graphql-type-test.js index 82bdff5d8820d..3a31f22e9ac82 100644 --- a/packages/gatsby/src/schema/__tests__/infer-graphql-type-test.js +++ b/packages/gatsby/src/schema/__tests__/infer-graphql-type-test.js @@ -8,7 +8,10 @@ const path = require(`path`) const normalizePath = require(`normalize-path`) const { clearTypeExampleValues } = require(`../data-tree-utils`) const { typeConflictReporter } = require(`../type-conflict-reporter`) -const { inferObjectStructureFromNodes, clearUnionTypes } = require(`../infer-graphql-type`) +const { + inferObjectStructureFromNodes, + clearUnionTypes, +} = require(`../infer-graphql-type`) const { clearTypeNames } = require(`../create-type-name`) function queryResult(nodes, fragment, { types = [], ignoreFields } = {}) { @@ -734,7 +737,7 @@ describe(`GraphQL type inferance`, () => { it(`Uses same union type for same child node types and key`, () => { const fields = inferObjectStructureFromNodes({ - nodes: [{ test___NODE: [`pet_1`, `child_1`] } ], + nodes: [{ test___NODE: [`pet_1`, `child_1`] }], types, }) const fields2 = inferObjectStructureFromNodes({ @@ -744,7 +747,6 @@ describe(`GraphQL type inferance`, () => { expect(fields.test.type).toEqual(fields2.test.type) }) - it(`Uses a different type for the same child node types with a different key`, () => { const fields = inferObjectStructureFromNodes({ nodes: [{ test___NODE: [`pet_1`, `child_1`] }], @@ -763,7 +765,7 @@ describe(`GraphQL type inferance`, () => { payload: { id: `toy_1`, internal: { type: `Toy` } }, }) const fields = inferObjectStructureFromNodes({ - nodes: [{ test___NODE: [`pet_1`, `child_1`] } ], + nodes: [{ test___NODE: [`pet_1`, `child_1`] }], types, }) const fields2 = inferObjectStructureFromNodes({ @@ -774,7 +776,7 @@ describe(`GraphQL type inferance`, () => { }) it(`Creates a new type after schema updates clear union types`, () => { - const nodes = [{ test___NODE: [`pet_1`, `child_1`] } ] + const nodes = [{ test___NODE: [`pet_1`, `child_1`] }] const fields = inferObjectStructureFromNodes({ nodes, types }) clearUnionTypes() const updatedFields = inferObjectStructureFromNodes({ nodes, types }) @@ -782,7 +784,7 @@ describe(`GraphQL type inferance`, () => { }) it(`Uses a reliable naming convention`, () => { - const nodes = [{ test___NODE: [`pet_1`, `child_1`] } ] + const nodes = [{ test___NODE: [`pet_1`, `child_1`] }] inferObjectStructureFromNodes({ nodes, types }) clearUnionTypes() const updatedFields = inferObjectStructureFromNodes({ nodes, types }) diff --git a/packages/gatsby/src/utils/__tests__/cache.js b/packages/gatsby/src/utils/__tests__/cache.js index fd3cc4fcfb7a2..e5a48038b191c 100644 --- a/packages/gatsby/src/utils/__tests__/cache.js +++ b/packages/gatsby/src/utils/__tests__/cache.js @@ -1,13 +1,19 @@ -jest.mock(`cache-manager`, () => {return { - caching: jest.fn(), - multiCaching: jest.fn().mockImplementation(() => {return { - get: jest.fn(), - set: jest.fn(), - }}), -}}) -jest.mock(`fs-extra`, () => {return { - ensureDirSync: jest.fn(), -}}) +jest.mock(`cache-manager`, () => { + return { + caching: jest.fn(), + multiCaching: jest.fn().mockImplementation(() => { + return { + get: jest.fn(), + set: jest.fn(), + } + }), + } +}) +jest.mock(`fs-extra`, () => { + return { + ensureDirSync: jest.fn(), + } +}) const Cache = require(`../cache`) const fs = require(`fs-extra`) const manager = require(`cache-manager`) @@ -28,14 +34,16 @@ describe(`cache`, () => { const store = { custom: true, } - + new Cache({ store, }).init() - expect(manager.caching).toHaveBeenLastCalledWith(expect.objectContaining({ - store, - })) + expect(manager.caching).toHaveBeenLastCalledWith( + expect.objectContaining({ + store, + }) + ) }) it(`it does not set up cache on instantiation`, () => { @@ -45,11 +53,13 @@ describe(`cache`, () => { it(`uses MAX_SAFE_INTEGER as TTL`, () => { getCache() - expect(manager.caching).toHaveBeenCalledWith(expect.objectContaining({ - options: expect.objectContaining({ - ttl: Number.MAX_SAFE_INTEGER, - }), - })) + expect(manager.caching).toHaveBeenCalledWith( + expect.objectContaining({ + options: expect.objectContaining({ + ttl: Number.MAX_SAFE_INTEGER, + }), + }) + ) }) describe(`init`, () => { @@ -62,7 +72,9 @@ describe(`cache`, () => { const name = `__TEST_CACHE_NAME__` getCache({ name }) - expect(fs.ensureDirSync).toHaveBeenCalledWith(expect.stringContaining(name)) + expect(fs.ensureDirSync).toHaveBeenCalledWith( + expect.stringContaining(name) + ) }) it(`it returns cache instance with get/set methods`, () => { @@ -77,10 +89,13 @@ describe(`cache`, () => { it(`both are promises`, () => { const cache = getCache() - const containsThenMethod = result => expect(result).toEqual(expect.objectContaining({ then: expect.any(Function) })) + const containsThenMethod = result => + expect(result).toEqual( + expect.objectContaining({ then: expect.any(Function) }) + ) containsThenMethod(cache.get(`a`)) containsThenMethod(cache.set(`a`, `b`)) }) }) -}) \ No newline at end of file +}) diff --git a/packages/gatsby/src/utils/__tests__/get-hash-fn.js b/packages/gatsby/src/utils/__tests__/get-hash-fn.js index bb8aff8569129..a816ed65f73ee 100644 --- a/packages/gatsby/src/utils/__tests__/get-hash-fn.js +++ b/packages/gatsby/src/utils/__tests__/get-hash-fn.js @@ -9,7 +9,7 @@ describe(`Test hashing function`, () => { const hash = getHashFn({})(`my input`) try { getHashFn({ cache: new Set([hash]) })(`my input`) - } catch(err) { + } catch (err) { expect(err).toMatchSnapshot() } }) diff --git a/packages/gatsby/src/utils/cache.js b/packages/gatsby/src/utils/cache.js index c93e7cbd1af40..4d005ca26f632 100644 --- a/packages/gatsby/src/utils/cache.js +++ b/packages/gatsby/src/utils/cache.js @@ -7,10 +7,7 @@ const MAX_CACHE_SIZE = 250 const TTL = Number.MAX_SAFE_INTEGER class Cache { - constructor({ - name = `db`, - store = fsStore, - } = {}) { + constructor({ name = `db`, store = fsStore } = {}) { this.name = name this.store = store } diff --git a/packages/gatsby/src/utils/create-content-digest.js b/packages/gatsby/src/utils/create-content-digest.js index e66993db9a478..3f4910ff72a8a 100644 --- a/packages/gatsby/src/utils/create-content-digest.js +++ b/packages/gatsby/src/utils/create-content-digest.js @@ -11,9 +11,9 @@ const createContentDigest = input => { const content = typeof input !== `string` ? JSON.stringify(input) : input return crypto - .createHash(`md5`) - .update(content) - .digest(`hex`) + .createHash(`md5`) + .update(content) + .digest(`hex`) } module.exports = createContentDigest diff --git a/plopfile.js b/plopfile.js index cc48591663a9c..b097fb800de1a 100644 --- a/plopfile.js +++ b/plopfile.js @@ -19,7 +19,7 @@ module.exports = function(plop) { message: `Will this package contain code that runs in a browser, e.g. have a gatsby-browser.js or gatsby-ssr.js file?`, }, ], - actions: (data) => + actions: data => [ { type: `add`, diff --git a/www/src/components/banner.js b/www/src/components/banner.js index 6b5f5b41c3cce..b8b8dd8ca6371 100644 --- a/www/src/components/banner.js +++ b/www/src/components/banner.js @@ -9,7 +9,7 @@ const horizontalPadding = rhythm(1 / 2) const backgroundColor = props => props.background ? props.background : colors.gatsby -const BannerContainer = styled("div")` +const BannerContainer = styled(`div`)` background-color: ${props => backgroundColor(props)}; height: ${presets.bannerHeight}; position: fixed; @@ -19,7 +19,7 @@ const BannerContainer = styled("div")` padding-right: env(safe-area-inset-right); ` -const InnerContainer = styled("div")` +const InnerContainer = styled(`div`)` align-items: center; display: flex; height: ${presets.bannerHeight}; @@ -29,7 +29,7 @@ const InnerContainer = styled("div")` backgroundColor(props)} 96%, transparent)`}; ` -const Content = styled("div")` +const Content = styled(`div`)` color: ${colors.ui.bright}; font-family: ${options.headerFontFamily.join(`,`)}; font-size: ${scale(-1 / 5).fontSize}; @@ -39,7 +39,7 @@ const Content = styled("div")` white-space: nowrap; ` -const Link = styled("a")` +const Link = styled(`a`)` color: #fff; span { display: none; @@ -49,30 +49,28 @@ const Link = styled("a")` } ` -const Banner = ({ children, background }) => { - return ( - - - {children ? ( - {children} - ) : ( - - These are the docs for v2. - {` `} - - View the v1 docs - - {` `} - instead - - - . - - )} - - - ) -} +const Banner = ({ children, background }) => ( + + + {children ? ( + {children} + ) : ( + + These are the docs for v2. + {` `} + + View the v1 docs + + {` `} + instead + + + . + + )} + + +) Banner.propTypes = { children: PropTypes.node, diff --git a/www/src/components/chart.js b/www/src/components/chart.js index 479246923c75f..34a374e659daa 100644 --- a/www/src/components/chart.js +++ b/www/src/components/chart.js @@ -10,25 +10,25 @@ const dateToUTC = date => { } const highchartsOptions = { - colors: ["#fd9800", "#008FD5", "#77AB43", "#663399", "#C4C4C4"], + colors: [`#fd9800`, `#008FD5`, `#77AB43`, `#663399`, `#C4C4C4`], chart: { backgroundColor: null, style: { - fontFamily: "Overpass, sans-serif", + fontFamily: `Overpass, sans-serif`, }, }, title: { style: { - color: "#241236", + color: `#241236`, }, - align: "left", + align: `left`, }, legend: { - align: "left", - verticalAlign: "bottom", + align: `left`, + verticalAlign: `bottom`, }, tooltip: { - backgroundColor: "#FFFFFF", + backgroundColor: `#FFFFFF`, borderRadius: 2, }, credits: { @@ -36,17 +36,17 @@ const highchartsOptions = { }, xAxis: { gridLineWidth: 1, - gridLineColor: "#F3F3F3", - lineColor: "#F3F3F3", - minorGridLineColor: "#F3F3F3", - tickColor: "#F3F3F3", + gridLineColor: `#F3F3F3`, + lineColor: `#F3F3F3`, + minorGridLineColor: `#F3F3F3`, + tickColor: `#F3F3F3`, tickWidth: 1, }, yAxis: { - gridLineColor: "#F3F3F3", - lineColor: "#F3F3F3", - minorGridLineColor: "#F3F3F3", - tickColor: "#F3F3F3", + gridLineColor: `#F3F3F3`, + lineColor: `#F3F3F3`, + minorGridLineColor: `#F3F3F3`, + tickColor: `#F3F3F3`, tickWidth: 1, }, plotOptions: { @@ -61,20 +61,19 @@ const DateChart = props => { const yAxisLabel = props.yAxisLabel || props[`y-axis-label`] const config = { chart: { - type: "spline", - zoomType: "x", + type: `spline`, + zoomType: `x`, }, tooltip: { - pointFormat: - ' {series.name}: {point.y:.2f}%
', + pointFormat: ` {series.name}: {point.y:.2f}%
`, }, title: { text: props.title, }, xAxis: { - type: "datetime", + type: `datetime`, title: { - text: "Date", + text: `Date`, }, }, yAxis: { @@ -85,13 +84,15 @@ const DateChart = props => { format: `{value}%`, }, }, - series: seriesData.map(series => ({ - name: series.name, - data: series.data.map(edge => [ - dateToUTC(edge.date), - 100 * parseFloat(edge.value), - ]), - })), + series: seriesData.map(series => { + return { + name: series.name, + data: series.data.map(edge => [ + dateToUTC(edge.date), + 100 * parseFloat(edge.value), + ]), + } + }), } return (

diff --git a/www/src/components/container.js b/www/src/components/container.js index 9d4a456232537..f4a4b3e2c3011 100644 --- a/www/src/components/container.js +++ b/www/src/components/container.js @@ -5,7 +5,7 @@ import { rhythm, options } from "../utils/typography" const Container = ({ children, - className = "", + className = ``, hasSideBar = true, overrideCSS = {}, }) => ( diff --git a/www/src/components/ecosystem/ecosystem-board.js b/www/src/components/ecosystem/ecosystem-board.js index b54c65f373f36..3c6b2943a3aea 100644 --- a/www/src/components/ecosystem/ecosystem-board.js +++ b/www/src/components/ecosystem/ecosystem-board.js @@ -6,7 +6,7 @@ import EcosystemSection from "./ecosystem-section" import presets, { colors } from "../../utils/presets" -const EcosystemBoardRoot = styled("div")` +const EcosystemBoardRoot = styled(`div`)` display: flex; flex-direction: column; @@ -32,13 +32,13 @@ const EcosystemBoard = ({ subTitle="Featured Plugins" icon={PluginsIcon} links={[ - { label: "Browse Plugins", to: "/plugins/" }, + { label: `Browse Plugins`, to: `/plugins/` }, { - label: "Plugin Authoring", - to: "/docs/plugin-authoring/", + label: `Plugin Authoring`, + to: `/docs/plugin-authoring/`, secondary: true, }, - { label: "Plugin Docs", to: "/docs/plugins/", secondary: true }, + { label: `Plugin Docs`, to: `/docs/plugins/`, secondary: true }, ]} featuredItems={plugins} /> @@ -48,15 +48,15 @@ const EcosystemBoard = ({ subTitle="Featured Starters" icon={StartersIcon} links={[ - { label: "Browse Starters", to: "/starters/" }, - { label: "Starter Docs", to: "/docs/starters/", secondary: true }, + { label: `Browse Starters`, to: `/starters/` }, + { label: `Starter Docs`, to: `/docs/starters/`, secondary: true }, ]} featuredItems={starters} /> ) diff --git a/www/src/components/ecosystem/ecosystem-featured-item.js b/www/src/components/ecosystem/ecosystem-featured-item.js index 77b179343c451..bff9030585493 100644 --- a/www/src/components/ecosystem/ecosystem-featured-item.js +++ b/www/src/components/ecosystem/ecosystem-featured-item.js @@ -12,7 +12,7 @@ import presets, { colors } from "../../utils/presets" const MAX_DESCRIPTION_LENGTH = 100 -const EcosystemFeaturedItemRoot = styled("li")` +const EcosystemFeaturedItemRoot = styled(`li`)` flex-basis: ${props => `calc(100% / ${props.numberOfItems})`}; float: left; margin: 0 2px 0 0; @@ -44,7 +44,7 @@ const BlockLink = styled(Link)` } ` -const Header = styled("header")` +const Header = styled(`header`)` display: flex; justify-content: space-between; h3 { @@ -69,7 +69,7 @@ const Header = styled("header")` } ` -const Digest = styled("div")` +const Digest = styled(`div`)` display: flex; flex-grow: 1; justify-content: space-between; @@ -78,7 +78,7 @@ const Digest = styled("div")` padding: ${rhythm(0.5)} 0 0; ` -const Thumbnail = styled("div")` +const Thumbnail = styled(`div`)` padding-right: ${rhythm(2 / 3)}; margin-top: ${rhythm(1 / 12)}; height: 64px; @@ -88,7 +88,7 @@ const Thumbnail = styled("div")` } ` -const Description = styled("p")` +const Description = styled(`p`)` color: ${colors.gray.lightCopy}; flex-grow: 1; font-size: 0.85rem; diff --git a/www/src/components/ecosystem/ecosystem-featured-items.js b/www/src/components/ecosystem/ecosystem-featured-items.js index 706a95dac4275..8f1f171fe98e6 100644 --- a/www/src/components/ecosystem/ecosystem-featured-items.js +++ b/www/src/components/ecosystem/ecosystem-featured-items.js @@ -8,7 +8,7 @@ import presets, { colors } from "../../utils/presets" import { rhythm, options } from "../../utils/typography" import { scrollbarStyles } from "../../utils/styles" -const EcosystemFeaturedItemsRoot = styled("div")` +const EcosystemFeaturedItemsRoot = styled(`div`)` overflow-x: scroll; margin: ${rhythm(0.1)} -${rhythm(options.blockMarginBottom)}; @@ -22,7 +22,7 @@ const EcosystemFeaturedItemsRoot = styled("div")` } ` -const List = styled("ul")` +const List = styled(`ul`)` display: flex; list-style: none; margin: 0; diff --git a/www/src/components/ecosystem/ecosystem-section.js b/www/src/components/ecosystem/ecosystem-section.js index fd123ad24bdea..6caad8f910444 100644 --- a/www/src/components/ecosystem/ecosystem-section.js +++ b/www/src/components/ecosystem/ecosystem-section.js @@ -8,7 +8,7 @@ import EcosystemFeaturedItems from "./ecosystem-featured-items" import { rhythm, options } from "../../utils/typography" import presets, { colors } from "../../utils/presets" -const EcosystemSectionRoot = styled("section")` +const EcosystemSectionRoot = styled(`section`)` background: #fff; padding: 0 ${rhythm(options.blockMarginBottom)}; margin-bottom: ${rhythm(1 / 2)}; @@ -43,7 +43,7 @@ const EcosystemSectionRoot = styled("section")` text-decoration: none; } ` -const Header = styled("header")` +const Header = styled(`header`)` align-items: flex-start; ${presets.Tablet}: { @@ -53,7 +53,7 @@ const Header = styled("header")` }; ` -const Title = styled("h1")` +const Title = styled(`h1`)` color: ${colors.gatsby}; display: flex; font-size: 1.25rem; @@ -64,12 +64,12 @@ const Title = styled("h1")` margin: 0 0.3rem 0 -0.1rem; } ` -const Icon = styled("span")` +const Icon = styled(`span`)` display: block; width: 32px; height: 32px; ` -const SubTitle = styled("h2")` +const SubTitle = styled(`h2`)` color: ${colors.lilac}; font-size: 0.875rem; font-weight: 300; @@ -78,13 +78,13 @@ const SubTitle = styled("h2")` text-transform: uppercase; ` -const Description = styled("p")` +const Description = styled(`p`)` font-family: ${options.systemFontFamily.join(`,`)}; font-size: 0.8125rem; color: ${colors.gray.lightCopy}; ` -const Actions = styled("div")` +const Actions = styled(`div`)` display: flex; flex-wrap: wrap; margin: -4px 0 ${rhythm(1)}; diff --git a/www/src/components/function-list.js b/www/src/components/function-list.js index 42e8c1966a9c9..2e9d990374dfa 100644 --- a/www/src/components/function-list.js +++ b/www/src/components/function-list.js @@ -96,10 +96,10 @@ export default ({ functions }) => (
{`{${ - ret.type.type === "UnionType" + ret.type.type === `UnionType` ? ret.type.elements .map(el => String(el.name)) - .join("|") + .join(`|`) : ret.type.name }}`} diff --git a/www/src/components/layout/layout-with-heading.js b/www/src/components/layout/layout-with-heading.js index 9f323fe74bf72..737839d91a6e9 100644 --- a/www/src/components/layout/layout-with-heading.js +++ b/www/src/components/layout/layout-with-heading.js @@ -19,7 +19,7 @@ import "../../fonts/Webfonts/futurapt_demiitalic_macroman/stylesheet.css" // Other fonts import "typeface-spectral" -const Content = styled("div")` +const Content = styled(`div`)` padding-top: ${presets.bannerHeight}; padding-bottom: 3.5rem; @@ -59,7 +59,7 @@ const LayoutWithHeading = props => { const { children, location: { pathname }, - pageTitle = "", + pageTitle = ``, pageIcon, } = props @@ -68,7 +68,7 @@ const LayoutWithHeading = props => { return (
- {pageTitle ? `${pageTitle} | GatsbyJS` : "GatsbyJS"} + {pageTitle ? `${pageTitle} | GatsbyJS` : `GatsbyJS`} diff --git a/www/src/components/layout/page-heading.js b/www/src/components/layout/page-heading.js index 3ea9ea4e22843..f5852959f8ebf 100644 --- a/www/src/components/layout/page-heading.js +++ b/www/src/components/layout/page-heading.js @@ -5,7 +5,7 @@ import styled from "react-emotion" import presets, { colors } from "../../utils/presets" import { rhythm, options } from "../../utils/typography" -const PageHeadingContainer = styled("header")` +const PageHeadingContainer = styled(`header`)` padding: ${rhythm(options.blockMarginBottom)}; ${presets.Tablet} { @@ -16,7 +16,7 @@ const PageHeadingContainer = styled("header")` } ` -const H1 = styled("h1")` +const H1 = styled(`h1`)` align-items: center; color: ${colors.lilac}; display: flex; @@ -46,7 +46,7 @@ const H1 = styled("h1")` } ` -const Icon = styled("span")` +const Icon = styled(`span`)` display: block; width: 36px; height: 32px; diff --git a/www/src/components/package-readme.js b/www/src/components/package-readme.js index 9a0db7ceeef73..5ce8f30dfe695 100644 --- a/www/src/components/package-readme.js +++ b/www/src/components/package-readme.js @@ -9,14 +9,7 @@ import MarkdownPageFooter from "../components/markdown-page-footer" import GithubIcon from "react-icons/lib/go/mark-github" const PackageReadMe = props => { - const { - page, - packageName, - excerpt, - html, - githubUrl, - timeToRead, - } = props + const { page, packageName, excerpt, html, githubUrl, timeToRead } = props return ( diff --git a/www/src/pages/ecosystem.js b/www/src/pages/ecosystem.js index 2d62c2cd14f05..a5290bc7a6ad4 100644 --- a/www/src/pages/ecosystem.js +++ b/www/src/pages/ecosystem.js @@ -42,7 +42,7 @@ class EcosystemPage extends Component { const plugins = pluginsData.map(item => item.node) - const pageTitle = "Ecosystem" + const pageTitle = `Ecosystem` const boardIcons = { plugins: PluginsIcon, starters: StartersIcon } return ( diff --git a/www/src/views/starter-library/filtered-starters.js b/www/src/views/starter-library/filtered-starters.js index 5b7d9de7e6dc3..a4176c07d1db3 100644 --- a/www/src/views/starter-library/filtered-starters.js +++ b/www/src/views/starter-library/filtered-starters.js @@ -76,9 +76,9 @@ export default class FilteredStarterLibrary extends Component { ) // stopgap for missing gh data (#8763) - let starters = data.allStartersYaml.edges.filter(({ node: starter }) => { - return starter.fields && starter.fields.starterShowcase - }) + let starters = data.allStartersYaml.edges.filter( + ({ node: starter }) => starter.fields && starter.fields.starterShowcase + ) if (urlState.s.length > 0) { starters = starters.filter(starter => @@ -101,7 +101,7 @@ export default class FilteredStarterLibrary extends Component { return (
- +
diff --git a/www/stylelint.config.js b/www/stylelint.config.js index be82551130a48..04a683827b01e 100644 --- a/www/stylelint.config.js +++ b/www/stylelint.config.js @@ -1,15 +1,15 @@ module.exports = { - processors: ["stylelint-processor-styled-components"], + processors: [`stylelint-processor-styled-components`], extends: [ - "stylelint-config-recommended", - "stylelint-config-styled-components", + `stylelint-config-recommended`, + `stylelint-config-styled-components`, ], rules: { "no-descending-specificity": null, "property-no-unknown": [ true, { - ignoreProperties: ["webkit-font-smoothing"], + ignoreProperties: [`webkit-font-smoothing`], }, ], }, From d5b137edff6c991ab6523616ba535f257f622f74 Mon Sep 17 00:00:00 2001 From: Lipis Date: Tue, 6 Nov 2018 21:35:05 +0200 Subject: [PATCH 212/462] chore: Format assets (#8622) --- CHANGELOG.md | 42 +- .../2018-10-09-hacktoberfest-kickoff/index.md | 2 +- .../2018-10-15-beyond-static-intro/index.md | 14 +- docs/docs/adding-website-functionality.md | 1 - docs/docs/behind-the-scenes.md | 2 +- docs/docs/creating-slugs-for-pages.md | 2 +- docs/docs/deploying-to-aerobatic.md | 1 + docs/docs/deploying-to-heroku.md | 5 + docs/docs/deploying-to-s3-cloudfront.md | 1 + docs/docs/environment-variables.md | 22 +- docs/docs/gatsby-cli.md | 10 +- docs/docs/gatsby-link.md | 1 - docs/docs/linking-between-pages.md | 2 +- docs/docs/node-creation.md | 2 +- docs/docs/node-tracking.md | 7 +- docs/docs/page-creation.md | 2 +- docs/docs/post-css.md | 12 +- docs/docs/query-behind-the-scenes.md | 3 +- docs/docs/query-execution.md | 19 +- docs/docs/query-extraction.md | 2 - docs/docs/schema-connections.md | 15 +- docs/docs/schema-generation.md | 1 - docs/docs/sourcing-from-drupal.md | 5 +- docs/docs/sourcing-from-wordpress.md | 1 + docs/docs/static-folder.md | 26 +- docs/docs/static-vs-normal-queries.md | 5 +- docs/docs/testing.md | 1 + examples/hn/src/css/news.css | 549 +++++++++++++----- .../src/styles/another-page.module.css | 1 - .../src/styles/index.module.css | 2 +- .../src/styles/sass.module.scss | 6 +- examples/using-faker/src/layouts/index.css | 42 +- .../2017-03-09-choropleth-on-d3v4/style.scss | 92 +-- .../style.scss | 92 +-- .../src/components/SiteLinks/style.css | 27 +- .../src/components/SiteNav/style.css | 26 +- .../src/static/css/base.scss | 24 +- .../src/static/fonts/fontawesome/style.css | 27 +- .../src/layouts/layout.css | 42 +- .../src/pages/style.css | 1 - .../using-redirects/src/components/layout.css | 42 +- .../src/components/selected.css | 2 +- examples/using-sass/src/styles/main.scss | 10 +- examples/using-sqip/src/index.css | 2 +- packages/gatsby-cli/README.md | 10 +- packages/gatsby-image/README.md | 2 +- packages/gatsby-plugin-layout/README.md | 6 +- packages/gatsby-plugin-netlify-cms/README.md | 16 +- packages/gatsby-plugin-page-creator/README.md | 2 +- .../README.md | 3 +- .../README.md | 8 +- packages/gatsby-transformer-pdf/README.md | 1 + packages/gatsby-transformer-remark/README.md | 2 +- 53 files changed, 767 insertions(+), 476 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fd0027500fc4c..db68aa37e8580 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,39 +3,41 @@ ## [2.0.0] - 2018-09-13 ### Added + - Improve Gatsby's routing accessibility by integrating @reach/router (#6918) @KyleAMathews - Add new onPreRenderHTML SSR API to manage head components in html.js (#6760) @octalmage -- Improve build speeds on larger sites (HulkSmash!) (#6226) @KyleAMathews -- Add multi-process HTML rendering support(#6417) @KyleAMathews -- Add babel-plugin-macros for custom babel config (#7129) @porfirioribeiro +- Improve build speeds on larger sites (HulkSmash!) (#6226) @KyleAMathews +- Add multi-process HTML rendering support(#6417) @KyleAMathews +- Add babel-plugin-macros for custom babel config (#7129) @porfirioribeiro - Upgrade webpack to v3, improve webpack utils (#3126) @jquense -- Add gatsby-remark-graphviz plugin to render dot (graphviz) code blocks to SVG (#7341) @Moocar +- Add gatsby-remark-graphviz plugin to render dot (graphviz) code blocks to SVG (#7341) @Moocar - Improve support for non-latin language content in gatsby-transformer-remark (#6992) @youngboy - Improve support for Drupal relationships in gatsby-source-drupal (#5020) @pieh -- Add support for extra connection string params in gatsby-source-mongodb (#5972) @lcostea +- Add support for extra connection string params in gatsby-source-mongodb (#5972) @lcostea - Add support for additional options supplied to gatsby-plugin-styled-components (#5240) @nihgwu -- Add guide on debugging the Gatsby build process (#6369) @pieh -- Add docs on unit testing, Cypress, react-testing-library and testing CSS-in-JS (#6678, #6708) @ascorbic, @LeKoArts -- Redesigned docs navigation and expanded docs topics (#6245, #6610) @shannonbux, @fk -- Allow plugins to override core prefetching behavior (#5320) @KyleAMathews -- Add gatsby-codemods package to assist v1 -> v2 transition (#6122) @jquense -- Add gatsby-plugin-layout package to allow use of v1 layout components in v2 (#7204) @pieh -- Add support for service worker caching of prefetched resources in gatsby-plugin-offline (#6566) @kkemple +- Add guide on debugging the Gatsby build process (#6369) @pieh +- Add docs on unit testing, Cypress, react-testing-library and testing CSS-in-JS (#6678, #6708) @ascorbic, @LeKoArts +- Redesigned docs navigation and expanded docs topics (#6245, #6610) @shannonbux, @fk +- Allow plugins to override core prefetching behavior (#5320) @KyleAMathews +- Add gatsby-codemods package to assist v1 -> v2 transition (#6122) @jquense +- Add gatsby-plugin-layout package to allow use of v1 layout components in v2 (#7204) @pieh +- Add support for service worker caching of prefetched resources in gatsby-plugin-offline (#6566) @kkemple - Add critical scripts and links to static file globs in service worker in gatsby-plugin-offline (#6316) @kkemple - Add snapshot testing for gatsby-link (#7090) @alexandernanberg -- Introduce REPL command to gatsby-cli (#7262) @kkemple -- Add support for webpackPrefetch (#5901) @pistachiology +- Introduce REPL command to gatsby-cli (#7262) @kkemple +- Add support for webpackPrefetch (#5901) @pistachiology - Explicitly export graphql tag from Gatsby (#5415) @pieh - Add eslint-loader and eslint configuration (#4893) @kkemple - Improve loading graphql query results ("ludicrous mode!") (#4555) @m-allanson -- Improve error messaging when Gatsby is not installed (#7106) @KyleAMathews -- Improve modifyWebpackConfig error messaging (#7152) @m-allanson +- Improve error messaging when Gatsby is not installed (#7106) @KyleAMathews +- Improve modifyWebpackConfig error messaging (#7152) @m-allanson - Add support for open tracing with zipkin (#6347) @Moocar -- Improve error messaging when plugin can't be loaded (#7023) @KyleAMathews -- Display formatted message for graphql resolver errors (#6142) @pieh -- Improve error formatting on HTML build errors (#6188) @pieh +- Improve error messaging when plugin can't be loaded (#7023) @KyleAMathews +- Display formatted message for graphql resolver errors (#6142) @pieh +- Improve error formatting on HTML build errors (#6188) @pieh ### Fixed + - Fix out of memory error by saving state to after bootstrap is complete (#6636) @KyleAMathews - Fix out of memory error by flattening entry values (#6797) @chuntley - Fix code syntax formatting bug which highlighted keywords in plaintext (#7342) @tryzniak @@ -44,7 +46,7 @@ - Fix service worker bug originating from inlining webpack-runtime (#5540) @KyleAMathews - Fix bug producing duplicates when naming GraphQL queries (#6765) @fusepilot - Fix typo in type annotation (#6288) @sudodoki -- Fix showing 404 page in development (#7140) @KyleAMathews +- Fix showing 404 page in development (#7140) @KyleAMathews - Tighten externals matching to prevent code imports from causing build errors (#7325) @m-allanson ## [1.5.0] - 2017-07-27 diff --git a/docs/blog/2018-10-09-hacktoberfest-kickoff/index.md b/docs/blog/2018-10-09-hacktoberfest-kickoff/index.md index 52fd90112debe..8f4721ab515c8 100644 --- a/docs/blog/2018-10-09-hacktoberfest-kickoff/index.md +++ b/docs/blog/2018-10-09-hacktoberfest-kickoff/index.md @@ -49,7 +49,7 @@ You may also want to check out [the main issue](https://github.com/gatsbyjs/gats Through the month, we’ll be continuously curating and adding “Hacktoberfest” labeled issues targeting many different facets of the Gatsby ecosystem (docs, core, packages, etc). If everything is claimed, don’t worry! More issues are being added regularly. (And of course feel free to peruse [other open issues](https://github.com/gatsbyjs/gatsby/issues) in the queue). This is our first time actively organizing around Hacktoberfest, and we aim to be as responsive and supportive as possible. -If you’re considering contributing to Gatsby for the first time -- or if you've already contributed -- we’re so glad you’re here! +If you’re considering contributing to Gatsby for the first time -- or if you've already contributed -- we’re so glad you’re here! ## Still have questions? diff --git a/docs/blog/2018-10-15-beyond-static-intro/index.md b/docs/blog/2018-10-15-beyond-static-intro/index.md index 144fef5544240..32e787a8e3afa 100644 --- a/docs/blog/2018-10-15-beyond-static-intro/index.md +++ b/docs/blog/2018-10-15-beyond-static-intro/index.md @@ -7,9 +7,9 @@ showImageInArticle: false tags: ["apps", "beyond static", "webinar"] --- -We hear it regularly. Gatsby is for static sites, Next.js (or similar) is for when your data changes regularly and/or you need an "app." This raises a question... what actually _is_ an app? +We hear it regularly. Gatsby is for static sites, Next.js (or similar) is for when your data changes regularly and/or you need an "app." This raises a question... what actually _is_ an app? -If this question interests you, consider attending [the upcoming webinar][webinar] where we'll focus on shedding some light on this very question as well as talk about how to build dynamic web apps with Gatsby. +If this question interests you, consider attending [the upcoming webinar][webinar] where we'll focus on shedding some light on this very question as well as talk about how to build dynamic web apps with Gatsby. Until then, I’d like to offer some brief teasers of some of the content we’ll be discussing during the webinar and some introductory information in _how_ Gatsby enables app development. @@ -19,11 +19,11 @@ Until then, I’d like to offer some brief teasers of some of the content we’l ## What is an app? -It's surprisingly challenging to define what separates an app from a static site. +It's surprisingly challenging to define what separates an app from a static site. -- Authentication? -- Reacting to remote data changes? -- A shopping cart? +- Authentication? +- Reacting to remote data changes? +- A shopping cart? It's surprisingly murky where that line is drawn and why exactly many seem to clearly delineate the two _separate_ concepts. @@ -43,7 +43,7 @@ One of the central ideas of Gatsby is that we statically generate our HTML conte 1. Invoke [ReactDOM.hydrate method][hydrate] to pick up just where we left our static HTML 1. Transfer rendering to the [React reconciler][reconciler] -It's this last phase that bridges the gap between static sites and full-fledged applications. In this phase you can make data calls, authenticate users, and perform all the app-like functionality you desire. +It's this last phase that bridges the gap between static sites and full-fledged applications. In this phase you can make data calls, authenticate users, and perform all the app-like functionality you desire. It's really that easy. diff --git a/docs/docs/adding-website-functionality.md b/docs/docs/adding-website-functionality.md index 0293ed0c93110..d9bb8d498dac5 100644 --- a/docs/docs/adding-website-functionality.md +++ b/docs/docs/adding-website-functionality.md @@ -8,5 +8,4 @@ This is a stub. Help our community expand it. Please use the [Gatsby Style Guide](/docs/gatsby-style-guide/) to ensure your pull request gets accepted. - [[guidelist]] diff --git a/docs/docs/behind-the-scenes.md b/docs/docs/behind-the-scenes.md index 4243e819b35cd..9a2158812c02b 100644 --- a/docs/docs/behind-the-scenes.md +++ b/docs/docs/behind-the-scenes.md @@ -2,7 +2,7 @@ title: Behind the Scenes --- -Curious how Gatsby works under the hood? The pages in this section describe how a Gatsby build works from an internal code/architecture point of view. It should be useful for anyone who needs to work on the internals of Gatsby, or for those who are simply curious how it all works, or perhaps you're a plugin author and need to understand how core works to track down a bug? Come one, come all! +Curious how Gatsby works under the hood? The pages in this section describe how a Gatsby build works from an internal code/architecture point of view. It should be useful for anyone who needs to work on the internals of Gatsby, or for those who are simply curious how it all works, or perhaps you're a plugin author and need to understand how core works to track down a bug? Come one, come all! If you're looking for information on how to _use_ Gatsby to write your own site, or create a plugin, check out the rest of the Gatsby docs. This section is quite low level. diff --git a/docs/docs/creating-slugs-for-pages.md b/docs/docs/creating-slugs-for-pages.md index 2c3b24196ca17..2209b5b1adf98 100644 --- a/docs/docs/creating-slugs-for-pages.md +++ b/docs/docs/creating-slugs-for-pages.md @@ -46,4 +46,4 @@ Open refresh Graph_i_QL, then run this GraphQL query to see all your slugs: } } } -``` \ No newline at end of file +``` diff --git a/docs/docs/deploying-to-aerobatic.md b/docs/docs/deploying-to-aerobatic.md index 0a842e2b1ca45..47fcd4e87dc92 100644 --- a/docs/docs/deploying-to-aerobatic.md +++ b/docs/docs/deploying-to-aerobatic.md @@ -38,4 +38,5 @@ plugins: ``` ## Other resources + - Learn more about Gatsy and Aerobatic on [Aerobatic's site](https://www.aerobatic.com/docs/static-site-generators/#react). diff --git a/docs/docs/deploying-to-heroku.md b/docs/docs/deploying-to-heroku.md index 6c57271b310f5..d0b48ec549dd7 100644 --- a/docs/docs/deploying-to-heroku.md +++ b/docs/docs/deploying-to-heroku.md @@ -1,11 +1,13 @@ --- title: Deploying to Heroku --- + You can use the [heroku buildpack static](https://github.com/heroku/heroku-buildpack-static) to handle the static files of your site. Set the `heroku/node.js` and `heroku-buildpack-static` buildpacks on your application creating an `app.json` file on the root of your project. app.json: + ``` { "buildpacks": [ @@ -24,6 +26,7 @@ Sometimes specifying buildpacks via the `app.json` file doesn’t work. If this Add a `heroku-postbuild` script in your `package.json`: package.json: + ``` { // ... @@ -35,7 +38,9 @@ package.json: // ... } ``` + Finally, add a `static.json` file in the root of your project to define the directory where your static assets will be. You can check all the options for this file in the [heroku-buildpack-static](https://github.com/heroku/heroku-buildpack-static#configuration) configuration. + ``` { "root": "public/", diff --git a/docs/docs/deploying-to-s3-cloudfront.md b/docs/docs/deploying-to-s3-cloudfront.md index 1a79c84f54f45..44fca4aeaec2f 100644 --- a/docs/docs/deploying-to-s3-cloudfront.md +++ b/docs/docs/deploying-to-s3-cloudfront.md @@ -118,6 +118,7 @@ Here, we'll be prompted for what we would like to change about the project confi > To learn more about AWS Amplify, check out the [Getting Started](https://aws-amplify.github.io/media/get_started) page. ## References: + - [Publishing Your Next Gatsby Site to AWS With AWS Amplify](https://www.gatsbyjs.org/blog/2018-08-24-gatsby-aws-hosting/) - [Escalade Sports: From $5000 to $5/month in Hosting With Gatsby](https://www.gatsbyjs.org/blog/2018-06-14-escalade-sports-from-5000-to-5-in-hosting/) - [Deploy your Gatsby.js Site to AWS S3](https://benenewton.com/deploy-your-gatsby-js-site-to-aws-s-3) diff --git a/docs/docs/environment-variables.md b/docs/docs/environment-variables.md index 1decd2ec61f0e..13320285e9296 100644 --- a/docs/docs/environment-variables.md +++ b/docs/docs/environment-variables.md @@ -4,10 +4,10 @@ title: "Environment Variables" ## Environments and Environment Variables -You can provide environment variables to your site to customise it's behaviour in different environments. +You can provide environment variables to your site to customise it's behaviour in different environments. Note that we need to distinguish in this discussion between variables which have been defined in -special places in order to be used in different deployment environments, and true OS-level +special places in order to be used in different deployment environments, and true OS-level environment variables that could be used in, for example, command-line calls. We'll call the former "Project Env Vars" and the latter "OS Env Vars". In both cases we want to be able to access the relavant value of these variable for the environment @@ -15,9 +15,9 @@ we're in. By default gatsby supports only 2 environments: - * If you run `gatsby develop`, then you will be in the 'development' environment. - * If you run `gatsby build` + `gatsby serve`, then you will be in the 'production' environment. - +- If you run `gatsby develop`, then you will be in the 'development' environment. +- If you run `gatsby build` + `gatsby serve`, then you will be in the 'production' environment. + If you want to define other environments then you'll need to do a little more work. See 'Additional Environments' below. ## Accessing Environment Variables in JavaScript @@ -55,12 +55,14 @@ normal ways e.g. by adding environment variables through your hosting/build tool calling Gatsby on the command line. In Linux terminals this can be done with: + ``` MY_ENV_VAR=foo gatsby develop ``` + In Windows it's a little more complex. [Check out this Stack Overflow article for some options](https://stackoverflow.com/questions/1420719/powershell-setting-an-environment-variable-for-a-single-command-only documents some options.) -However, the Project Env Vars that you defined in the `.env.*` files will *NOT* be immediately available +However, the Project Env Vars that you defined in the `.env.*` files will _NOT_ be immediately available in your Node.js scripts. To use those variables, use NPM package [dotenv](https://www.npmjs.com/package/dotenv) to examine the active `.env.*` file and attached those values, It's already a dependency of Gatsby, so you can require it in your `gatsby-config.js` or `gatsby-node.js` like this: @@ -100,8 +102,8 @@ render() { } ``` - ## Reserved Environment Variables: + > You can not override certain environment variables as some are used internally > for optimizations during build @@ -126,9 +128,9 @@ API_URL="http://foo.bar" ``` ```javascript:title=gatsby-config.js -let activeEnv = process.env.ACTIVE_ENV || process.env.NODE_ENV || 'development' +let activeEnv = process.env.ACTIVE_ENV || process.env.NODE_ENV || "development" -console.log(`Using environment config: '${activeEnv}'`); +console.log(`Using environment config: '${activeEnv}'`) require("dotenv").config({ path: `.env.${activeEnv}`, @@ -137,7 +139,7 @@ require("dotenv").config({ module.exports = { siteMetadata: { title: "Gatsby Default Starter", - apiUrl: process.env.GA_TRACKING_ID + apiUrl: process.env.GA_TRACKING_ID, }, plugins: [ { diff --git a/docs/docs/gatsby-cli.md b/docs/docs/gatsby-cli.md index b2090e6912187..c01c44cc7f1ee 100644 --- a/docs/docs/gatsby-cli.md +++ b/docs/docs/gatsby-cli.md @@ -64,11 +64,11 @@ the site for testing. #### Options -| Option | Description | -| :--------------: | ------------------------------------------------------------------------------- | -| `-H`, `--host` | Set host. Defaults to localhost | -| `-p`, `--port` | Set port. Defaults to 8000 | -| `-o`, `--open` | Open the site in your (default) browser for you | +| Option | Description | +| :--------------: | ---------------------------------------------------------------------------------------- | +| `-H`, `--host` | Set host. Defaults to localhost | +| `-p`, `--port` | Set port. Defaults to 8000 | +| `-o`, `--open` | Open the site in your (default) browser for you | | `--prefix-paths` | Serve site with link paths prefixed (if built with pathPrefix in your gatsby-config.js). | ### Info diff --git a/docs/docs/gatsby-link.md b/docs/docs/gatsby-link.md index de8b1daaf3534..81177ecd8507e 100644 --- a/docs/docs/gatsby-link.md +++ b/docs/docs/gatsby-link.md @@ -183,5 +183,4 @@ You can similarly check for file downloads: ) } - ``` diff --git a/docs/docs/linking-between-pages.md b/docs/docs/linking-between-pages.md index c8af9127bfed7..31a0cdf59cfb9 100644 --- a/docs/docs/linking-between-pages.md +++ b/docs/docs/linking-between-pages.md @@ -27,5 +27,5 @@ export default () => ( ## Other resources -- For the complete example of how to link between pages, see [Part One](/tutorial/part-one/#linking-between-pages/) in the Tutorial +- For the complete example of how to link between pages, see [Part One](/tutorial/part-one/#linking-between-pages/) in the Tutorial - Check out more detail on routing in Gatsby in the [API doc for Gatsby Link](/docs/gatsby-link/). diff --git a/docs/docs/node-creation.md b/docs/docs/node-creation.md index f7fdbe6ba6697..6ea9d046f51fe 100644 --- a/docs/docs/node-creation.md +++ b/docs/docs/node-creation.md @@ -53,7 +53,7 @@ Let's say you create the following node by passing it to `createNode` The value for `baz` is itself an object. That value's parent is the top level object. In this case, Gatsby simply saves the top level node as is to redux. It doesn't attempt to extract `baz` into its own node. It does however track the subobject's root NodeID using [Node Tracking](/docs/node-tracking/) -During schema compilation, Gatsby will infer the sub object's type while [creating the gqlType](/docs/schema-gql-type#plain-object-or-value-field). +During schema compilation, Gatsby will infer the sub object's type while [creating the gqlType](/docs/schema-gql-type#plain-object-or-value-field). ## Fresh/stale nodes diff --git a/docs/docs/node-tracking.md b/docs/docs/node-tracking.md index 6a2838ecc97dc..19ce6445790e3 100644 --- a/docs/docs/node-tracking.md +++ b/docs/docs/node-tracking.md @@ -10,15 +10,15 @@ You may see calls to `trackInlineObjectsInRootNode()` and `findRootNodeAncestor( let nodeA = { id: `id2`, internal: { - type: `footype` + type: `footype`, }, foo: { myfile: "blog/my-blog.md", - b: 2 + b: 2, }, bar: 7, parent: `id1`, - baz: [ { x: 8 }, 9 ] + baz: [{ x: 8 }, 9], } ``` @@ -59,4 +59,3 @@ Now, where do we use this information? In 2 places. 1. In the `File` type resolver. It is used to lookup the node's root, which should be of type `File`. We can then use that root node's base directory attribute to create the full path of the resolved field's value, and therefore find the actual `File` node that the string value is describing. See [File GqlType inference](/docs/schema-gql-type/#file-types) for more info. 1. To recursively look up node descriptions in [type-conflict-reporter.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/schema/type-conflict-reporter.js) - diff --git a/docs/docs/page-creation.md b/docs/docs/page-creation.md index 3a145cdf25363..aecc18c3b1185 100644 --- a/docs/docs/page-creation.md +++ b/docs/docs/page-creation.md @@ -14,7 +14,7 @@ The `pages` redux namespace is a map of page `path` to page object. The [pages r ## Update Components redux namespace -The `components` redux namespace is a map of [componentPath](/docs/behind-the-scenes-terminology/#component) (file with React component) to the Component object. A Component object is simply the Page object but with an empty query string (that will be set during [Query Extraction](/docs/query-extraction/#store-queries-in-redux)). +The `components` redux namespace is a map of [componentPath](/docs/behind-the-scenes-terminology/#component) (file with React component) to the Component object. A Component object is simply the Page object but with an empty query string (that will be set during [Query Extraction](/docs/query-extraction/#store-queries-in-redux)). ## onCreatePage API diff --git a/docs/docs/post-css.md b/docs/docs/post-css.md index b1f4234f5826a..3e47f114d1f59 100644 --- a/docs/docs/post-css.md +++ b/docs/docs/post-css.md @@ -10,13 +10,13 @@ This guide assumes that you have a Gatsby project set up. If you need to set up 1. Install the Gatsby plugin [**gatsby-plugin-postcss**](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-postcss). - `npm install --save gatsby-plugin-postcss` +`npm install --save gatsby-plugin-postcss` 2. Include the plugin in your `gatsby-config.js` file. - ```javascript:title=gatsby-config.js - plugins: [`gatsby-plugin-postcss`], - ``` +```javascript:title=gatsby-config.js +plugins: [`gatsby-plugin-postcss`], +``` 3. Write your stylesheets using PostCSS (.css files) and require or import them as normal. @@ -28,7 +28,7 @@ If you need to pass options to PostCSS use the plugins options; see postcss-load @custom-media --med (width <= 50rem); @media (--med) { - a { + a { &:hover { color: color-mod(black alpha(54%)); } @@ -71,4 +71,4 @@ module.exports = () => ({ ### Other resources -* [Introduction to postcss](https://www.smashingmagazine.com/2015/12/introduction-to-postcss/) +- [Introduction to postcss](https://www.smashingmagazine.com/2015/12/introduction-to-postcss/) diff --git a/docs/docs/query-behind-the-scenes.md b/docs/docs/query-behind-the-scenes.md index ef078cf2b729f..de7947cecc466 100644 --- a/docs/docs/query-behind-the-scenes.md +++ b/docs/docs/query-behind-the-scenes.md @@ -2,7 +2,7 @@ title: How Queries Work --- -We're talking about GraphQL queries here. These can be tagged graphql expressions at the bottom of your component source file (e.g [query for Gatsby frontpage](https://github.com/gatsbyjs/gatsby/blob/master/www/src/pages/index.js#L225)), StaticQueries within your components (e.g [showcase site details](https://github.com/gatsbyjs/gatsby/blob/master/www/src/components/showcase-details.js#L103)), or fragments created by plugins (e.g [gatsby-source-contentful](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-source-contentful/src/fragments.js)). +We're talking about GraphQL queries here. These can be tagged graphql expressions at the bottom of your component source file (e.g [query for Gatsby frontpage](https://github.com/gatsbyjs/gatsby/blob/master/www/src/pages/index.js#L225)), StaticQueries within your components (e.g [showcase site details](https://github.com/gatsbyjs/gatsby/blob/master/www/src/components/showcase-details.js#L103)), or fragments created by plugins (e.g [gatsby-source-contentful](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-source-contentful/src/fragments.js)). Note that we are NOT talking about queries involved in the creation of your pages, which is usually performed in your site's gatsby-node.js (e.g [Gatby's website](https://github.com/gatsbyjs/gatsby/blob/master/www/gatsby-node.js#L85)). We're only talking about queries that are tied to particular pages or templates. @@ -10,4 +10,3 @@ Almost all logic to do with queries is in the internal-plugin [query-runner](htt 1. [Query Extraction](/docs/query-extraction/) 2. [Query Execution](/docs/query-execution/) - diff --git a/docs/docs/query-execution.md b/docs/docs/query-execution.md index eb48ba26ecb21..2f8e2b834011a 100644 --- a/docs/docs/query-execution.md +++ b/docs/docs/query-execution.md @@ -15,7 +15,7 @@ Here's an overview of how it all relates: ```dot digraph { compound = true; - + subgraph cluster_other { style = invis; extractQueries [ label = "query-watcher.js", shape = box ]; @@ -23,16 +23,16 @@ digraph { components [ label = "components\l (redux)", shape = cylinder ]; createNode [ label = "CREATE_NODE action", shape = box ]; } - + subgraph cluster_pageQueryRunner { label = "page-query-runner.js" - + dirtyActions [ label = "dirtyActions", shape = cylinder ]; - extractedQueryQ [ label = "queueQueryForPathname()", shape = box ]; + extractedQueryQ [ label = "queueQueryForPathname()", shape = box ]; findIdsWithoutDD [ label = "findIdsWithoutDataDependencies()", shape = box ]; findDirtyActions [ label = "findDirtyActions()", shape = box ]; queryJobs [ label = "runQueriesForPathnames()", shape = box ]; - + extractedQueryQ -> queryJobs; findIdsWithoutDD -> queryJobs; dirtyActions -> findDirtyActions [ weight = 100 ]; @@ -43,15 +43,15 @@ digraph { label = "query-queue.js"; queryQ [ label = "better-queue", shape = box ]; } - + subgraph cluster_queryRunner { label = "query-runner.js" graphqlJs [ label = "graphqlJs(schema, query, context, ...)" ]; result [ label = "Query Result" ]; - + graphqlJs -> result; } - + diskResult [ label = "/public/static/d/${dataPath}", shape = cylinder ]; jsonDataPaths [ label = "jsonDataPaths\l(redux)", shape = cylinder ]; @@ -79,7 +79,7 @@ All queries queued after being extracted (from `query-watcher.js`). ##### Queries without node dependencies -All queries whose component path isn't listed in `componentDataDependencies`. As a recap, in [Schema Generation](/docs/schema-generation/), we showed that all Type resolvers record a dependency between the page whose query we're running and any nodes that were successfully resolved. So, If a component is declared in the `components` redux namespace (occurs during [Page Creation](/docs/page-creation/)), but is *not* contained in `componentDataDependencies`, then by definition, the query has not been run. Therefore we need to run it. Checkout [Page -> Node Dependencies](/docs/page-node-dependencies/) for more info. The code for this step is in [findIdsWithoutDataDependencies](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/internal-plugins/query-runner/page-query-runner.js#L89). +All queries whose component path isn't listed in `componentDataDependencies`. As a recap, in [Schema Generation](/docs/schema-generation/), we showed that all Type resolvers record a dependency between the page whose query we're running and any nodes that were successfully resolved. So, If a component is declared in the `components` redux namespace (occurs during [Page Creation](/docs/page-creation/)), but is _not_ contained in `componentDataDependencies`, then by definition, the query has not been run. Therefore we need to run it. Checkout [Page -> Node Dependencies](/docs/page-node-dependencies/) for more info. The code for this step is in [findIdsWithoutDataDependencies](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/internal-plugins/query-runner/page-query-runner.js#L89). ##### Pages that depend on dirty nodes @@ -132,4 +132,3 @@ As queries are consumed from the queue and executed, their results are saved to For static queries, instead of using the page's jsonName, we just use a hash of the query. Now we need to store the association of the page -> the query result in redux so we can recall it later. This is accomplished via the [json-data-paths](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/redux/reducers/json-data-paths.js) reducer which we invoke by creating a `SET_JSON_DATA_PATH` action with the page's jsonName and the saved dataPath. - diff --git a/docs/docs/query-extraction.md b/docs/docs/query-extraction.md index e62029d37cf18..13291e345f782 100644 --- a/docs/docs/query-extraction.md +++ b/docs/docs/query-extraction.md @@ -80,12 +80,10 @@ digraph { } ``` - #### Queue for execution Now that we've saved our query, we're ready to queue it for execution. Query execution is mainly handled by [page-query-runner.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/internal-plugins/query-runner/page-query-runner.js), so we accomplish this by passing the component's path to `queueQueryForPathname` function. - ```dot digraph { compound = true; diff --git a/docs/docs/schema-connections.md b/docs/docs/schema-connections.md index 3352f130fb17e..4e750e90af31d 100644 --- a/docs/docs/schema-connections.md +++ b/docs/docs/schema-connections.md @@ -22,17 +22,17 @@ Other features covered by schema connections are aggregators and reducers such a ### Connection/Edge -A connection is an abstraction that describes a collection of nodes of a type, and how to query and navigate through them. In the above example query, `allMarkdownRemark` is a Connection Type. Its field `edges` is analogous to `results`. Each Edge points at a `node` (in the collection of all markdownRemark nodes), but it also points to the logical `next` and `previous` nodes, relative to the `node` in the collection (meaningful if you provided a `sort` arg). +A connection is an abstraction that describes a collection of nodes of a type, and how to query and navigate through them. In the above example query, `allMarkdownRemark` is a Connection Type. Its field `edges` is analogous to `results`. Each Edge points at a `node` (in the collection of all markdownRemark nodes), but it also points to the logical `next` and `previous` nodes, relative to the `node` in the collection (meaningful if you provided a `sort` arg). _Fun Fact: This stuff is all based on [relay connections](https://facebook.github.io/relay/graphql/connections.htm) concepts_ -The ConnectionType also defines input args to perform paging using the `skip/limit` pattern. The actual logic for paging is defined in the [graphql-skip-limit](https://www.npmjs.com/package/graphql-skip-limit) library in [arrayconnection.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/graphql-skip-limit/src/connection/arrayconnection.js). It is invoked as the last part of the [run-sift](/docs/schema-sift#5-run-sift-query-on-all-nodes) function. To aid in paging, the ConnectionType also defines a `pageInfo` field with a `hasNextPage` field. +The ConnectionType also defines input args to perform paging using the `skip/limit` pattern. The actual logic for paging is defined in the [graphql-skip-limit](https://www.npmjs.com/package/graphql-skip-limit) library in [arrayconnection.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/graphql-skip-limit/src/connection/arrayconnection.js). It is invoked as the last part of the [run-sift](/docs/schema-sift#5-run-sift-query-on-all-nodes) function. To aid in paging, the ConnectionType also defines a `pageInfo` field with a `hasNextPage` field. The ConnectionType is defined in the [graphql-skip-limit connection.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/graphql-skip-limit/src/connection/connection.js) file. Its construction function takes a Type, and uses it to create a connectionType. E.g passing in `MarkdownRemark` Type would result in a `MarkdownRemarkConnection` type whose `edges` field would be of type `MarkdownRemarkEdge`. ### GroupConnection -A GroupConnection is a Connection with extended functionality. Instead of simply providing the means to access nodes in a collection, it allows you to group those nodes by one of its fields. It _is_ a `Connection` Type itself, but with 3 new fields: `field`, `fieldValue`, and `totalCount`. It adds a new input argument to `ConnectionType` whose value can be any (possibly nested) field on the original type. +A GroupConnection is a Connection with extended functionality. Instead of simply providing the means to access nodes in a collection, it allows you to group those nodes by one of its fields. It _is_ a `Connection` Type itself, but with 3 new fields: `field`, `fieldValue`, and `totalCount`. It adds a new input argument to `ConnectionType` whose value can be any (possibly nested) field on the original type. The creation of the GroupConnection is handled in [build-connection-fields.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/schema/build-connection-fields.js#L57). It's added as the `group` field to the top level type connection. This is most easily shown in the below diagram. @@ -61,8 +61,8 @@ Let's see this in practice. Say we were trying to group all markdown nodes by th frontmatter { title } - }, - }, + } + } } } } @@ -78,7 +78,7 @@ Note, the same enum mechanism is used for creation of `distinct` fields #### Group Resolver -The resolver for the Group type is created in [build-connection-fields.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/schema/build-connection-fields.js#L57). It operates on the result of the core connection query (e.g `allMarkdownRemark`), which is a `Connection` object with edges. From these edges, we retrieve all the nodes (each edge has a `node` field). And now we can use lodash to group those nodes by the fieldname argument (e.g `field: frontmatter___author`). +The resolver for the Group type is created in [build-connection-fields.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/schema/build-connection-fields.js#L57). It operates on the result of the core connection query (e.g `allMarkdownRemark`), which is a `Connection` object with edges. From these edges, we retrieve all the nodes (each edge has a `node` field). And now we can use lodash to group those nodes by the fieldname argument (e.g `field: frontmatter___author`). If sorting was specified ([see below](#sorting)), we sort the groups by fieldname, and then apply any `skip/limit` arguments using the [graphql-skip-limit](https://www.npmjs.com/package/graphql-skip-limit) library. Finally we are ready to fill in our `field`, `fieldValue`, and `totalCount` fields on each group, and we can return our resolved node. @@ -88,11 +88,10 @@ Just like in [gql type input filters](/docs/schema-input-gql), we must generate ### Sorting -A `sort` argument can be added to the `Connection` type (not the `GroupConnection` type). You can sort by any (possibly nested) field in the connection results. These are enums that are created via the same mechanism described in [enum fields](#field-enum-value). Except that the inference of these enums occurs in [infer-graphql-input-type.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/schema/infer-graphql-input-fields.js#L302). +A `sort` argument can be added to the `Connection` type (not the `GroupConnection` type). You can sort by any (possibly nested) field in the connection results. These are enums that are created via the same mechanism described in [enum fields](#field-enum-value). Except that the inference of these enums occurs in [infer-graphql-input-type.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/schema/infer-graphql-input-fields.js#L302). The Sort Input Type itself is created in [build-node-connections.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/schema/build-node-connections.js#L49) and implemented by [create-sort-field.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/schema/create-sort-field.js). The actual sorting occurs in run-sift (below). ### Connection Resolver (sift) Finally, we're ready to define the resolver for our Connection type (in [build-node-connections.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/schema/build-node-connections.js#L65)). This is where we come up with the name `all${type}` (e.g `allMarkdownRemark`) that is so common in Gatsby queries. The resolver is fairly simple. It uses the [sift.js](https://www.npmjs.com/package/sift) library to query across all nodes of the same type in redux. The big difference is that we supply the `connection: true` parameter to `run-sift.js` which is where sorting, and pagination is actually executed. See [Querying with Sift](/docs/schema-sift) for how this actually works. - diff --git a/docs/docs/schema-generation.md b/docs/docs/schema-generation.md index 64fd3549d243a..596b8c969ffd9 100644 --- a/docs/docs/schema-generation.md +++ b/docs/docs/schema-generation.md @@ -62,4 +62,3 @@ Finally, we have everything we need to construct our final Gatsby Type object (k #### 5. Create Connections for each type We've inferred all GraphQL Types, and the ability to query for a single node. But now we need to be able to query for collections of that type (e.g `allMarkdownRemark`). [Schema Connections](/docs/schema-connections/) takes care of that. - diff --git a/docs/docs/sourcing-from-drupal.md b/docs/docs/sourcing-from-drupal.md index 624329c1c93f3..0d0aaf5e69daf 100644 --- a/docs/docs/sourcing-from-drupal.md +++ b/docs/docs/sourcing-from-drupal.md @@ -13,9 +13,11 @@ It only takes a few steps to use Gatsby with Drupal as a headless CMS (also know ## How to implement Drupal + Gatsby ### Quick start + This guide assumes that you have a Gatsby project set up. If you need to set up a project, head to the [Quick Start guide](/docs), then come back. ### gatsby-config.js + Hooking up Gatsby to a new or existing Drupal site takes only a few steps. - Follow the `gatsby-source-drupal` [installation instructions](/packages/gatsby-source-drupal/?=drupal) to add the plugin to your Gatsby site @@ -23,7 +25,6 @@ Hooking up Gatsby to a new or existing Drupal site takes only a few steps. An example of how to include the `gatsby-source-drupal` plugin in your `gatsby-config.js` file: ```javascript:title=gatsby-config.js - module.exports = { siteMetadata: { title: `Gatsby with Drupal`, @@ -83,5 +84,3 @@ Using Gatsby together with Drupal offers a powerful, full-featured, open-source, - Watch [Kyle Mathews’ presentation on Gatsby + Drupal](https://2017.badcamp.net/session/coding-development/beginner/headless-drupal-building-blazing-fast-websites-reactgatsbyjs) - Get started with Robert Ngo’s [Decoupling Drupal with Gatsby tutorial](https://evolvingweb.ca/blog/decoupling-drupal-gatsby) and watch his [Evolving Web 2018 Drupal conference presentation](https://www.youtube.com/watch?v=s5kUJRGDz6I) - Example site that demonstrates [how to build Gatsby sites that pull data from the Drupal CMS](https://github.com/gatsbyjs/gatsby/tree/master/examples/using-drupal). - - diff --git a/docs/docs/sourcing-from-wordpress.md b/docs/docs/sourcing-from-wordpress.md index b84777ad71eee..6751cecae2883 100644 --- a/docs/docs/sourcing-from-wordpress.md +++ b/docs/docs/sourcing-from-wordpress.md @@ -63,6 +63,7 @@ module.exports = { ``` ## Using WordPress data + Once your source plugin is pulling data, you can construct your site pages by implementing the `createPages` API in `gatsby-node.js`. When this is called, your data has already been fetched and is available to query with GraphQL. Gatsby uses [GraphQL at build time](/docs/querying-with-graphql/#how-does-graphql-and-gatsby-work-together); Your source plugin (in this case, `gatsby-source-wordpress`) fetches your data, and Gatsby uses that data to "[automatically _infer_ a GraphQL schema](/docs/querying-with-graphql/#how-does-graphql-and-gatsby-work-together)" that you can query against. The `createPages` API exposes the `graphql` function: diff --git a/docs/docs/static-folder.md b/docs/docs/static-folder.md index bee2d6a7972d3..d15e63ca389c8 100644 --- a/docs/docs/static-folder.md +++ b/docs/docs/static-folder.md @@ -2,30 +2,31 @@ title: Static folder --- -In general, every website needs assets: images, stylesheets, scripts, etc. When using Gatsby, we recommend - [Adding Images, Fonts, and Files](/docs/adding-images-fonts-files/) in JavaScript files, - because of the benefits it provides: +In general, every website needs assets: images, stylesheets, scripts, etc. When using Gatsby, we recommend +[Adding Images, Fonts, and Files](/docs/adding-images-fonts-files/) in JavaScript files, +because of the benefits it provides: - Scripts and stylesheets are minified and bundled together to avoid extra network requests. - Missing files cause compilation errors instead of 404 errors for your users. - Result filenames include content hashes so you don’t need to worry about - browsers caching their old versions. - + browsers caching their old versions. + However, there is an **escape hatch** that you can use to add an asset outside of the module system. ## Adding Assets Outside of the Module System You can create a folder named `static` at the root of your project. Every file - you put into that folder will be copied into the `public` folder. E.g. if you - add a file named `sun.jpg` to the static folder, it'll be copied to - `public/sun.jpg` - +you put into that folder will be copied into the `public` folder. E.g. if you +add a file named `sun.jpg` to the static folder, it'll be copied to +`public/sun.jpg` + ### Referencing your static asset - + In order to reference assets from the `static` folder in your code, you'll need to [import the `withPrefix` helper function from `gatsby`](/docs/gatsby-link/#prefixed-paths-helper): + ```js import { withPrefix } from 'gatsby' @@ -35,8 +36,8 @@ render() { // as described in the “Adding Images, Fonts, and Files” page. return Logo; } -``` - +``` + And make sure you [set `pathPrefix` in your gatsby-config.js](/docs/path-prefix/): @@ -47,7 +48,6 @@ module.exports = { } ``` - ### Downsides Keep in mind the downsides of this approach: diff --git a/docs/docs/static-vs-normal-queries.md b/docs/docs/static-vs-normal-queries.md index fa61accfb30e5..27203ff64dfa1 100644 --- a/docs/docs/static-vs-normal-queries.md +++ b/docs/docs/static-vs-normal-queries.md @@ -34,8 +34,9 @@ TODO: in query-watcher.js/handleQuery, we remove jsonName from dataDependencies. ### Usages - [websocket-manager](TODO). TODO -- [query-watcher](TODO). +- [query-watcher](TODO). + - `getQueriesSnapshot` returns map with snapshot of `state.staticQueryComponents` - handleComponentsWithRemovedQueries. For each staticQueryComponent, if passed in queries doesn't include `staticQueryComponent.componentPath`. TODO: Where is StaticQueryComponent created? TODO: Where is queries passed into `handleComponentsWithRemovedQueries`? - + TODO: Finish above diff --git a/docs/docs/testing.md b/docs/docs/testing.md index 652703047a722..dbc06147cedf5 100644 --- a/docs/docs/testing.md +++ b/docs/docs/testing.md @@ -6,4 +6,5 @@ overview: true [[guidelist]] ## Other resources + - Read the article ["Quality assurance in GatsbyJS projects - linting and testing" by Kalin Chernev](https://kalinchernev.github.io/gatsbyjs-qa-linting-testing/) diff --git a/examples/hn/src/css/news.css b/examples/hn/src/css/news.css index 62375d72c277c..dc629c28120c1 100644 --- a/examples/hn/src/css/news.css +++ b/examples/hn/src/css/news.css @@ -1,173 +1,458 @@ -html { overflow-y: scroll; } -body { font-family:Verdana, Geneva, sans-serif; font-size:10pt; color:#828282; } -td { font-family:Verdana, Geneva, sans-serif; font-size:10pt; color:#828282; } +html { + overflow-y: scroll; +} +body { + font-family: Verdana, Geneva, sans-serif; + font-size: 10pt; + color: #828282; +} +td { + font-family: Verdana, Geneva, sans-serif; + font-size: 10pt; + color: #828282; +} -.admin td { font-family:Verdana, Geneva, sans-serif; font-size:8.5pt; color:#000000; } -.subtext td { font-family:Verdana, Geneva, sans-serif; font-size: 7pt; color:#828282; } +.admin td { + font-family: Verdana, Geneva, sans-serif; + font-size: 8.5pt; + color: #000000; +} +.subtext td { + font-family: Verdana, Geneva, sans-serif; + font-size: 7pt; + color: #828282; +} -input { font-family:monospace; font-size:10pt; color:#000000; } -input[type=\"submit\"] { font-family:Verdana, Geneva, sans-serif; } -textarea { font-family:monospace; font-size:10pt; color:#000000; } +input { + font-family: monospace; + font-size: 10pt; + color: #000000; +} +input[type=\"submit\"] { + font-family: Verdana, Geneva, sans-serif; +} +textarea { + font-family: monospace; + font-size: 10pt; + color: #000000; +} -a:link { color:#000000; text-decoration:none; } -a:visited { color:#828282; text-decoration:none; } +a:link { + color: #000000; + text-decoration: none; +} +a:visited { + color: #828282; + text-decoration: none; +} -.default { font-family:Verdana, Geneva, sans-serif; font-size: 10pt; color:#828282; } -.admin { font-family:Verdana, Geneva, sans-serif; font-size:8.5pt; color:#000000; } -.title { font-family:Verdana, Geneva, sans-serif; font-size: 10pt; color:#828282; } -.subtext { font-family:Verdana, Geneva, sans-serif; font-size: 7pt; color:#828282; } -.yclinks { font-family:Verdana, Geneva, sans-serif; font-size: 8pt; color:#828282; } -.pagetop { font-family:Verdana, Geneva, sans-serif; font-size: 10pt; color:#222222; } -.comhead { font-family:Verdana, Geneva, sans-serif; font-size: 8pt; color:#828282; } -.comment { font-family:Verdana, Geneva, sans-serif; font-size: 9pt; } -.hnname { margin-right: 5px; } +.default { + font-family: Verdana, Geneva, sans-serif; + font-size: 10pt; + color: #828282; +} +.admin { + font-family: Verdana, Geneva, sans-serif; + font-size: 8.5pt; + color: #000000; +} +.title { + font-family: Verdana, Geneva, sans-serif; + font-size: 10pt; + color: #828282; +} +.subtext { + font-family: Verdana, Geneva, sans-serif; + font-size: 7pt; + color: #828282; +} +.yclinks { + font-family: Verdana, Geneva, sans-serif; + font-size: 8pt; + color: #828282; +} +.pagetop { + font-family: Verdana, Geneva, sans-serif; + font-size: 10pt; + color: #222222; +} +.comhead { + font-family: Verdana, Geneva, sans-serif; + font-size: 8pt; + color: #828282; +} +.comment { + font-family: Verdana, Geneva, sans-serif; + font-size: 9pt; +} +.hnname { + margin-right: 5px; +} -.comment a:link, .comment a:visited { text-decoration: underline; } -.noshow { display: none; } -.nosee { visibility: hidden; pointer-events: none; cursor: default } +.comment a:link, +.comment a:visited { + text-decoration: underline; +} +.noshow { + display: none; +} +.nosee { + visibility: hidden; + pointer-events: none; + cursor: default; +} -.c00, .c00 a:link { color:#000000; } -.c5a, .c5a a:link, .c5a a:visited { color:#5a5a5a; } -.c73, .c73 a:link, .c73 a:visited { color:#737373; } -.c82, .c82 a:link, .c82 a:visited { color:#828282; } -.c88, .c88 a:link, .c88 a:visited { color:#888888; } -.c9c, .c9c a:link, .c9c a:visited { color:#9c9c9c; } -.cae, .cae a:link, .cae a:visited { color:#aeaeae; } -.cbe, .cbe a:link, .cbe a:visited { color:#bebebe; } -.cce, .cce a:link, .cce a:visited { color:#cecece; } -.cdd, .cdd a:link, .cdd a:visited { color:#dddddd; } +.c00, +.c00 a:link { + color: #000000; +} +.c5a, +.c5a a:link, +.c5a a:visited { + color: #5a5a5a; +} +.c73, +.c73 a:link, +.c73 a:visited { + color: #737373; +} +.c82, +.c82 a:link, +.c82 a:visited { + color: #828282; +} +.c88, +.c88 a:link, +.c88 a:visited { + color: #888888; +} +.c9c, +.c9c a:link, +.c9c a:visited { + color: #9c9c9c; +} +.cae, +.cae a:link, +.cae a:visited { + color: #aeaeae; +} +.cbe, +.cbe a:link, +.cbe a:visited { + color: #bebebe; +} +.cce, +.cce a:link, +.cce a:visited { + color: #cecece; +} +.cdd, +.cdd a:link, +.cdd a:visited { + color: #dddddd; +} -.pagetop a:visited { color:#000000;} -.topsel a:link, .topsel a:visited { color:#ffffff; } +.pagetop a:visited { + color: #000000; +} +.topsel a:link, +.topsel a:visited { + color: #ffffff; +} -.subtext a:link, .subtext a:visited { color:#828282; } -.subtext a:hover { text-decoration:underline; } +.subtext a:link, +.subtext a:visited { + color: #828282; +} +.subtext a:hover { + text-decoration: underline; +} -.comhead a:link, .subtext a:visited { color:#828282; } -.comhead a:hover { text-decoration:underline; } +.comhead a:link, +.subtext a:visited { + color: #828282; +} +.comhead a:hover { + text-decoration: underline; +} -.default p { margin-top: 8px; margin-bottom: 0px; } +.default p { + margin-top: 8px; + margin-bottom: 0px; +} -.pagebreak {page-break-before:always} +.pagebreak { + page-break-before: always; +} -pre { overflow: auto; padding: 2px; } -pre:hover { overflow:auto } +pre { + overflow: auto; + padding: 2px; +} +pre:hover { + overflow: auto; +} .votearrow { - width: 10px; - height: 10px; - border: 0px; - margin: 3px 2px 6px; - background: url("grayarrow.gif") - no-repeat; + width: 10px; + height: 10px; + border: 0px; + margin: 3px 2px 6px; + background: url("grayarrow.gif") no-repeat; } -@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2) { - .votearrow { background-size: 10px; background-image: url("grayarrow2x.gif"); } +@media only screen and (-webkit-min-device-pixel-ratio: 2), + only screen and (min-device-pixel-ratio: 2) { + .votearrow { + background-size: 10px; + background-image: url("grayarrow2x.gif"); + } } .rotate180 { - -webkit-transform: rotate(180deg); /* Chrome and other webkit browsers */ - -moz-transform: rotate(180deg); /* FF */ - -o-transform: rotate(180deg); /* Opera */ - -ms-transform: rotate(180deg); /* IE9 */ - transform: rotate(180deg); /* W3C complaint browsers */ + -webkit-transform: rotate(180deg); /* Chrome and other webkit browsers */ + -moz-transform: rotate(180deg); /* FF */ + -o-transform: rotate(180deg); /* Opera */ + -ms-transform: rotate(180deg); /* IE9 */ + transform: rotate(180deg); /* W3C complaint browsers */ /* IE8 and below */ filter: progid:DXImageTransform.Microsoft.Matrix(M11=-1, M12=0, M21=0, M22=-1, DX=0, DY=0, SizingMethod='auto expand'); } -#hnmain { width: 85%; } +#hnmain { + width: 85%; +} /* mobile device */ -@media only screen -and (min-width : 300px) -and (max-width : 750px) { - #hnmain { width: 100%; } - body { padding: 0; margin: 0; width: 100%; -webkit-text-size-adjust: none; } - td { height: inherit !important; } - .title, .comment { font-size: inherit; } - span.pagetop { display: block; margin: 3px 5px; font-size: 12px; } - span.pagetop b { display: block; font-size: 15px; } - table.comment-tree .comment a { display: inline-block; max-width: 200px; overflow: hidden; white-space: nowrap; - text-overflow: ellipsis; vertical-align:top; } - img[src='s.gif'][width='40'] { width: 12px; } - img[src='s.gif'][width='80'] { width: 24px; } - img[src='s.gif'][width='120'] { width: 36px; } - img[src='s.gif'][width='160'] { width: 48px; } - img[src='s.gif'][width='200'] { width: 60px; } - img[src='s.gif'][width='240'] { width: 72px; } - img[src='s.gif'][width='280'] { width: 84px; } - img[src='s.gif'][width='320'] { width: 96px; } - img[src='s.gif'][width='360'] { width: 108px; } - img[src='s.gif'][width='400'] { width: 120px; } - img[src='s.gif'][width='440'] { width: 132px; } - img[src='s.gif'][width='480'] { width: 144px; } - img[src='s.gif'][width='520'] { width: 156px; } - img[src='s.gif'][width='560'] { width: 168px; } - img[src='s.gif'][width='600'] { width: 180px; } - img[src='s.gif'][width='640'] { width: 192px; } - img[src='s.gif'][width='680'] { width: 204px; } - img[src='s.gif'][width='720'] { width: 216px; } - img[src='s.gif'][width='760'] { width: 228px; } - img[src='s.gif'][width='800'] { width: 240px; } - img[src='s.gif'][width='840'] { width: 252px; } - .title { font-size: 11pt; line-height: 14pt; } - .subtext { font-size: 9pt; } - .itemlist { padding-right: 5px;} - .votearrow { transform: scale(1.3,1.3); margin-right: 6px; } +@media only screen and (min-width: 300px) and (max-width: 750px) { + #hnmain { + width: 100%; + } + body { + padding: 0; + margin: 0; + width: 100%; + -webkit-text-size-adjust: none; + } + td { + height: inherit !important; + } + .title, + .comment { + font-size: inherit; + } + span.pagetop { + display: block; + margin: 3px 5px; + font-size: 12px; + } + span.pagetop b { + display: block; + font-size: 15px; + } + table.comment-tree .comment a { + display: inline-block; + max-width: 200px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + vertical-align: top; + } + img[src="s.gif"][width="40"] { + width: 12px; + } + img[src="s.gif"][width="80"] { + width: 24px; + } + img[src="s.gif"][width="120"] { + width: 36px; + } + img[src="s.gif"][width="160"] { + width: 48px; + } + img[src="s.gif"][width="200"] { + width: 60px; + } + img[src="s.gif"][width="240"] { + width: 72px; + } + img[src="s.gif"][width="280"] { + width: 84px; + } + img[src="s.gif"][width="320"] { + width: 96px; + } + img[src="s.gif"][width="360"] { + width: 108px; + } + img[src="s.gif"][width="400"] { + width: 120px; + } + img[src="s.gif"][width="440"] { + width: 132px; + } + img[src="s.gif"][width="480"] { + width: 144px; + } + img[src="s.gif"][width="520"] { + width: 156px; + } + img[src="s.gif"][width="560"] { + width: 168px; + } + img[src="s.gif"][width="600"] { + width: 180px; + } + img[src="s.gif"][width="640"] { + width: 192px; + } + img[src="s.gif"][width="680"] { + width: 204px; + } + img[src="s.gif"][width="720"] { + width: 216px; + } + img[src="s.gif"][width="760"] { + width: 228px; + } + img[src="s.gif"][width="800"] { + width: 240px; + } + img[src="s.gif"][width="840"] { + width: 252px; + } + .title { + font-size: 11pt; + line-height: 14pt; + } + .subtext { + font-size: 9pt; + } + .itemlist { + padding-right: 5px; + } + .votearrow { + transform: scale(1.3, 1.3); + margin-right: 6px; + } .votearrow.rotate180 { - -webkit-transform: rotate(180deg) scale(1.3,1.3); /* Chrome and other webkit browsers */ - -moz-transform: rotate(180deg) scale(1.3,1.3); /* FF */ - -o-transform: rotate(180deg) scale(1.3,1.3); /* Opera */ - -ms-transform: rotate(180deg) scale(1.3,1.3); /* IE9 */ - transform: rotate(180deg) scale(1.3,1.3); /* W3C complaint browsers */ + -webkit-transform: rotate(180deg) scale(1.3, 1.3); /* Chrome and other webkit browsers */ + -moz-transform: rotate(180deg) scale(1.3, 1.3); /* FF */ + -o-transform: rotate(180deg) scale(1.3, 1.3); /* Opera */ + -ms-transform: rotate(180deg) scale(1.3, 1.3); /* IE9 */ + transform: rotate(180deg) scale(1.3, 1.3); /* W3C complaint browsers */ + } + .votelinks { + min-width: 18px; + } + .votelinks a { + display: block; + margin-bottom: 9px; + } + input[type="text"], + input[type="number"], + textarea { + font-size: 16px; + width: 90%; } - .votelinks { min-width: 18px; } - .votelinks a { display: block; margin-bottom: 9px; } - input[type='text'], input[type='number'], textarea { font-size: 16px; width: 90%; } } -.comment { max-width: 1215px; overflow: auto } -pre { max-width: 900px; } +.comment { + max-width: 1215px; + overflow: auto; +} +pre { + max-width: 900px; +} -@media only screen and (min-width : 300px) and (max-width : 389px) { - .comment { max-width: 270px; overflow: auto } - pre { max-width: 200px; } +@media only screen and (min-width: 300px) and (max-width: 389px) { + .comment { + max-width: 270px; + overflow: auto; + } + pre { + max-width: 200px; + } } -@media only screen and (min-width : 390px) and (max-width : 509px) { - .comment { max-width: 350px; overflow: auto } - pre { max-width: 260px; } +@media only screen and (min-width: 390px) and (max-width: 509px) { + .comment { + max-width: 350px; + overflow: auto; + } + pre { + max-width: 260px; + } } -@media only screen and (min-width : 510px) and (max-width : 599px) { - .comment { max-width: 460px; overflow: auto } - pre { max-width: 340px; } +@media only screen and (min-width: 510px) and (max-width: 599px) { + .comment { + max-width: 460px; + overflow: auto; + } + pre { + max-width: 340px; + } } -@media only screen and (min-width : 600px) and (max-width : 689px) { - .comment { max-width: 540px; overflow: auto } - pre { max-width: 400px; } +@media only screen and (min-width: 600px) and (max-width: 689px) { + .comment { + max-width: 540px; + overflow: auto; + } + pre { + max-width: 400px; + } } -@media only screen and (min-width : 690px) and (max-width : 809px) { - .comment { max-width: 620px; overflow: auto } - pre { max-width: 460px; } +@media only screen and (min-width: 690px) and (max-width: 809px) { + .comment { + max-width: 620px; + overflow: auto; + } + pre { + max-width: 460px; + } } -@media only screen and (min-width : 810px) and (max-width : 899px) { - .comment { max-width: 730px; overflow: auto } - pre { max-width: 540px; } +@media only screen and (min-width: 810px) and (max-width: 899px) { + .comment { + max-width: 730px; + overflow: auto; + } + pre { + max-width: 540px; + } } -@media only screen and (min-width : 900px) and (max-width : 1079px) { - .comment { max-width: 810px; overflow: auto } - pre { max-width: 600px; } +@media only screen and (min-width: 900px) and (max-width: 1079px) { + .comment { + max-width: 810px; + overflow: auto; + } + pre { + max-width: 600px; + } } -@media only screen and (min-width : 1080px) and (max-width : 1169px) { - .comment { max-width: 970px; overflow: auto } - pre { max-width: 720px; } +@media only screen and (min-width: 1080px) and (max-width: 1169px) { + .comment { + max-width: 970px; + overflow: auto; + } + pre { + max-width: 720px; + } } -@media only screen and (min-width : 1170px) and (max-width : 1259px) { - .comment { max-width: 1050px; overflow: auto } - pre { max-width: 780px; } +@media only screen and (min-width: 1170px) and (max-width: 1259px) { + .comment { + max-width: 1050px; + overflow: auto; + } + pre { + max-width: 780px; + } } -@media only screen and (min-width : 1260px) and (max-width : 1349px) { - .comment { max-width: 1130px; overflow: auto } - pre { max-width: 840px; } +@media only screen and (min-width: 1260px) and (max-width: 1349px) { + .comment { + max-width: 1130px; + overflow: auto; + } + pre { + max-width: 840px; + } } diff --git a/examples/using-css-modules/src/styles/another-page.module.css b/examples/using-css-modules/src/styles/another-page.module.css index 46b9705f6ac90..c6d983ad5f00e 100644 --- a/examples/using-css-modules/src/styles/another-page.module.css +++ b/examples/using-css-modules/src/styles/another-page.module.css @@ -17,4 +17,3 @@ font-size: 4rem; line-height: 1; } - diff --git a/examples/using-css-modules/src/styles/index.module.css b/examples/using-css-modules/src/styles/index.module.css index 6cbf2c9f2a745..59a38de563c24 100644 --- a/examples/using-css-modules/src/styles/index.module.css +++ b/examples/using-css-modules/src/styles/index.module.css @@ -4,7 +4,7 @@ font-size: 3rem; } .subheader { - color: #485B88; + color: #485b88; line-height: 0.7; } diff --git a/examples/using-css-modules/src/styles/sass.module.scss b/examples/using-css-modules/src/styles/sass.module.scss index 8405040e25851..98ce6ea0dce1a 100644 --- a/examples/using-css-modules/src/styles/sass.module.scss +++ b/examples/using-css-modules/src/styles/sass.module.scss @@ -1,4 +1,4 @@ -$pageBackground: #F4FA58; +$pageBackground: #f4fa58; .page { background: $pageBackground; @@ -11,7 +11,7 @@ $pageBackground: #F4FA58; margin-bottom: 1rem; } .link { - background: #FE2E2E; - color: #FBFBEF; + background: #fe2e2e; + color: #fbfbef; font-size: 2rem; } diff --git a/examples/using-faker/src/layouts/index.css b/examples/using-faker/src/layouts/index.css index e485487be9b3e..9e53afc65d0a4 100644 --- a/examples/using-faker/src/layouts/index.css +++ b/examples/using-faker/src/layouts/index.css @@ -60,7 +60,7 @@ dfn { } h1 { font-size: 2em; - margin: .67em 0; + margin: 0.67em 0; } mark { background-color: #ff0; @@ -77,10 +77,10 @@ sup { vertical-align: baseline; } sub { - bottom: -.25em; + bottom: -0.25em; } sup { - top: -.5em; + top: -0.5em; } img { border-style: none; @@ -122,29 +122,29 @@ button, select { text-transform: none; } -[type=reset], -[type=submit], +[type="reset"], +[type="submit"], button, -html [type=button] { +html [type="button"] { -webkit-appearance: button; } -[type=button]::-moz-focus-inner, -[type=reset]::-moz-focus-inner, -[type=submit]::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, button::-moz-focus-inner { border-style: none; padding: 0; } -[type=button]:-moz-focusring, -[type=reset]:-moz-focusring, -[type=submit]:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring, button:-moz-focusring { outline: 1px dotted ButtonText; } fieldset { border: 1px solid silver; margin: 0 2px; - padding: .35em .625em .75em; + padding: 0.35em 0.625em 0.75em; } legend { box-sizing: border-box; @@ -157,26 +157,26 @@ legend { textarea { overflow: auto; } -[type=checkbox], -[type=radio] { +[type="checkbox"], +[type="radio"] { box-sizing: border-box; padding: 0; } -[type=number]::-webkit-inner-spin-button, -[type=number]::-webkit-outer-spin-button { +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { height: auto; } -[type=search] { +[type="search"] { -webkit-appearance: textfield; outline-offset: -2px; } -[type=search]::-webkit-search-cancel-button, -[type=search]::-webkit-search-decoration { +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } ::-webkit-input-placeholder { color: inherit; - opacity: .54; + opacity: 0.54; } ::-webkit-file-upload-button { -webkit-appearance: button; diff --git a/examples/using-javascript-transforms/src/articles/2017-03-09-choropleth-on-d3v4/style.scss b/examples/using-javascript-transforms/src/articles/2017-03-09-choropleth-on-d3v4/style.scss index cc0fb0c5877ad..07ac4808538ba 100644 --- a/examples/using-javascript-transforms/src/articles/2017-03-09-choropleth-on-d3v4/style.scss +++ b/examples/using-javascript-transforms/src/articles/2017-03-09-choropleth-on-d3v4/style.scss @@ -1,46 +1,46 @@ - .state{ - fill: none; - stroke: #a9a9a9; - stroke-width: 1; - } - .state:hover{ - fill-opacity:0.5; - } - #tooltip { - position: absolute; - text-align: center; - padding: 20px; - margin: 10px; - font: 12px sans-serif; - background: lightsteelblue; - border: 1px; - border-radius: 2px; - pointer-events: none; - } - #tooltip h4{ - margin:0; - font-size:14px; - } - #tooltip{ - background:rgba(0,0,0,0.9); - border:1px solid grey; - border-radius:5px; - font-size:12px; - width:auto; - padding:4px; - color:white; - opacity:0; - } - #tooltip table{ - table-layout:fixed; - } - #tooltip tr td{ - padding:0; - margin:0; - } - #tooltip tr td:nth-child(1){ - width:50px; - } - #tooltip tr td:nth-child(2){ - text-align:center; - } \ No newline at end of file +.state { + fill: none; + stroke: #a9a9a9; + stroke-width: 1; +} +.state:hover { + fill-opacity: 0.5; +} +#tooltip { + position: absolute; + text-align: center; + padding: 20px; + margin: 10px; + font: 12px sans-serif; + background: lightsteelblue; + border: 1px; + border-radius: 2px; + pointer-events: none; +} +#tooltip h4 { + margin: 0; + font-size: 14px; +} +#tooltip { + background: rgba(0, 0, 0, 0.9); + border: 1px solid grey; + border-radius: 5px; + font-size: 12px; + width: auto; + padding: 4px; + color: white; + opacity: 0; +} +#tooltip table { + table-layout: fixed; +} +#tooltip tr td { + padding: 0; + margin: 0; +} +#tooltip tr td:nth-child(1) { + width: 50px; +} +#tooltip tr td:nth-child(2) { + text-align: center; +} diff --git a/examples/using-javascript-transforms/src/articles/2017-05-30-choropleth-on-d3v4-alternate/style.scss b/examples/using-javascript-transforms/src/articles/2017-05-30-choropleth-on-d3v4-alternate/style.scss index cc0fb0c5877ad..07ac4808538ba 100644 --- a/examples/using-javascript-transforms/src/articles/2017-05-30-choropleth-on-d3v4-alternate/style.scss +++ b/examples/using-javascript-transforms/src/articles/2017-05-30-choropleth-on-d3v4-alternate/style.scss @@ -1,46 +1,46 @@ - .state{ - fill: none; - stroke: #a9a9a9; - stroke-width: 1; - } - .state:hover{ - fill-opacity:0.5; - } - #tooltip { - position: absolute; - text-align: center; - padding: 20px; - margin: 10px; - font: 12px sans-serif; - background: lightsteelblue; - border: 1px; - border-radius: 2px; - pointer-events: none; - } - #tooltip h4{ - margin:0; - font-size:14px; - } - #tooltip{ - background:rgba(0,0,0,0.9); - border:1px solid grey; - border-radius:5px; - font-size:12px; - width:auto; - padding:4px; - color:white; - opacity:0; - } - #tooltip table{ - table-layout:fixed; - } - #tooltip tr td{ - padding:0; - margin:0; - } - #tooltip tr td:nth-child(1){ - width:50px; - } - #tooltip tr td:nth-child(2){ - text-align:center; - } \ No newline at end of file +.state { + fill: none; + stroke: #a9a9a9; + stroke-width: 1; +} +.state:hover { + fill-opacity: 0.5; +} +#tooltip { + position: absolute; + text-align: center; + padding: 20px; + margin: 10px; + font: 12px sans-serif; + background: lightsteelblue; + border: 1px; + border-radius: 2px; + pointer-events: none; +} +#tooltip h4 { + margin: 0; + font-size: 14px; +} +#tooltip { + background: rgba(0, 0, 0, 0.9); + border: 1px solid grey; + border-radius: 5px; + font-size: 12px; + width: auto; + padding: 4px; + color: white; + opacity: 0; +} +#tooltip table { + table-layout: fixed; +} +#tooltip tr td { + padding: 0; + margin: 0; +} +#tooltip tr td:nth-child(1) { + width: 50px; +} +#tooltip tr td:nth-child(2) { + text-align: center; +} diff --git a/examples/using-javascript-transforms/src/components/SiteLinks/style.css b/examples/using-javascript-transforms/src/components/SiteLinks/style.css index 3edfa16065856..c4a88505f24f1 100644 --- a/examples/using-javascript-transforms/src/components/SiteLinks/style.css +++ b/examples/using-javascript-transforms/src/components/SiteLinks/style.css @@ -1,30 +1,29 @@ - .blog-social { - margin-top: 30px; + margin-top: 30px; } .blog-social ul { - list-style: none; - padding: 0; - margin: 10px 0; - clear: fix-legacy; + list-style: none; + padding: 0; + margin: 10px 0; + clear: fix-legacy; } .blog-social ul > li { - margin-right: 5px; - height: 24px; + margin-right: 5px; + height: 24px; } .blog-social ul > li > a { - border-bottom: 0; + border-bottom: 0; } .blog-social ul > li > a > i { - color: #606060; - font-size: 14px; - line-height: 24px; + color: #606060; + font-size: 14px; + line-height: 24px; } .blog-social ul > li:hover a > i { - color: #444; - font-color: #444; + color: #444; + font-color: #444; } diff --git a/examples/using-javascript-transforms/src/components/SiteNav/style.css b/examples/using-javascript-transforms/src/components/SiteNav/style.css index a4f21298e4c85..dc8f86e995bfb 100644 --- a/examples/using-javascript-transforms/src/components/SiteNav/style.css +++ b/examples/using-javascript-transforms/src/components/SiteNav/style.css @@ -1,24 +1,24 @@ .blog-nav { - margin: 20px 0px 10px; + margin: 20px 0px 10px; } .blog-nav ul { - list-style: none; - padding-left: 0; + list-style: none; + padding-left: 0; } .blog-nav ul li { - margin: 10px 0 10px; + margin: 10px 0 10px; } .blog-nav ul li a { - font-size: 16px; - line-heigh: 26px; - margin-bottom: 26px; - border-bottom: 0; - font-weight: 400; - color: #222; + font-size: 16px; + line-heigh: 26px; + margin-bottom: 26px; + border-bottom: 0; + font-weight: 400; + color: #222; } .blog-nav ul li a.current { - border-bottom: 1px solid; + border-bottom: 1px solid; } .blog-nav ul li a:hover { - border-bottom: 1px solid; -} \ No newline at end of file + border-bottom: 1px solid; +} diff --git a/examples/using-javascript-transforms/src/static/css/base.scss b/examples/using-javascript-transforms/src/static/css/base.scss index aa250277246df..d85726fe55397 100644 --- a/examples/using-javascript-transforms/src/static/css/base.scss +++ b/examples/using-javascript-transforms/src/static/css/base.scss @@ -1,17 +1,17 @@ -@import '~normalize.css'; +@import "~normalize.css"; // Override variables here // You can add new ones or update existing ones: $primary: #ad42f4; -$info: #0060F0; -$success: #14A900; -$warning: #F0B800; -$danger: #E80000; -$text: #5C5C5C; -$body-background: #FFFFFF; -$background: #FFFFFF; -$family-sans-serif: 'Varela Round', sans-serif; -$family-serif: 'Lora', serif; // Add a serif family +$info: #0060f0; +$success: #14a900; +$warning: #f0b800; +$danger: #e80000; +$text: #5c5c5c; +$body-background: #ffffff; +$background: #ffffff; +$family-sans-serif: "Varela Round", sans-serif; +$family-serif: "Lora", serif; // Add a serif family -@import '~bulma'; -@import '~prismjs/themes/prism-coy'; +@import "~bulma"; +@import "~prismjs/themes/prism-coy"; diff --git a/examples/using-javascript-transforms/src/static/fonts/fontawesome/style.css b/examples/using-javascript-transforms/src/static/fonts/fontawesome/style.css index 92fad1608ab0f..948401931a3b7 100644 --- a/examples/using-javascript-transforms/src/static/fonts/fontawesome/style.css +++ b/examples/using-javascript-transforms/src/static/fonts/fontawesome/style.css @@ -6,9 +6,14 @@ /* FONT PATH * -------------------------- */ @font-face { - font-family: 'FontAwesome'; - src: url('./fontawesome-webfont.eot?v=4.5.0'); - src: url('./fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'), url('./fontawesome-webfont.woff2?v=4.5.0') format('woff2'), url('./fontawesome-webfont.woff?v=4.5.0') format('woff'), url('./fontawesome-webfont.ttf?v=4.5.0') format('truetype'), url('./fontawesome-webfont.svg?v=4.5.0') format('svg'); + font-family: "FontAwesome"; + src: url("./fontawesome-webfont.eot?v=4.5.0"); + src: url("./fontawesome-webfont.eot?#iefix&v=4.5.0") + format("embedded-opentype"), + url("./fontawesome-webfont.woff2?v=4.5.0") format("woff2"), + url("./fontawesome-webfont.woff?v=4.5.0") format("woff"), + url("./fontawesome-webfont.ttf?v=4.5.0") format("truetype"), + url("./fontawesome-webfont.svg?v=4.5.0") format("svg"); font-weight: normal; font-style: normal; } @@ -73,9 +78,9 @@ } .fa-border { - padding: .2em .25em .15em; + padding: 0.2em 0.25em 0.15em; border: solid 0.08em #eeeeee; - border-radius: .1em; + border-radius: 0.1em; } .fa-pull-left { @@ -87,11 +92,11 @@ } .fa.fa-pull-left { - margin-right: .3em; + margin-right: 0.3em; } .fa.fa-pull-right { - margin-left: .3em; + margin-left: 0.3em; } /* Deprecated as of 4.4.0 */ @@ -104,11 +109,11 @@ } .fa.pull-left { - margin-right: .3em; + margin-right: 0.3em; } .fa.pull-right { - margin-left: .3em; + margin-left: 0.3em; } .fa-spin { @@ -131,7 +136,6 @@ -webkit-transform: rotate(359deg); transform: rotate(359deg); } - } @keyframes fa-spin { @@ -144,7 +148,6 @@ -webkit-transform: rotate(359deg); transform: rotate(359deg); } - } .fa-rotate-90 { @@ -2728,4 +2731,4 @@ .fa-percent:before { content: "\f295"; -} \ No newline at end of file +} diff --git a/examples/using-page-transitions/src/layouts/layout.css b/examples/using-page-transitions/src/layouts/layout.css index e485487be9b3e..9e53afc65d0a4 100644 --- a/examples/using-page-transitions/src/layouts/layout.css +++ b/examples/using-page-transitions/src/layouts/layout.css @@ -60,7 +60,7 @@ dfn { } h1 { font-size: 2em; - margin: .67em 0; + margin: 0.67em 0; } mark { background-color: #ff0; @@ -77,10 +77,10 @@ sup { vertical-align: baseline; } sub { - bottom: -.25em; + bottom: -0.25em; } sup { - top: -.5em; + top: -0.5em; } img { border-style: none; @@ -122,29 +122,29 @@ button, select { text-transform: none; } -[type=reset], -[type=submit], +[type="reset"], +[type="submit"], button, -html [type=button] { +html [type="button"] { -webkit-appearance: button; } -[type=button]::-moz-focus-inner, -[type=reset]::-moz-focus-inner, -[type=submit]::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, button::-moz-focus-inner { border-style: none; padding: 0; } -[type=button]:-moz-focusring, -[type=reset]:-moz-focusring, -[type=submit]:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring, button:-moz-focusring { outline: 1px dotted ButtonText; } fieldset { border: 1px solid silver; margin: 0 2px; - padding: .35em .625em .75em; + padding: 0.35em 0.625em 0.75em; } legend { box-sizing: border-box; @@ -157,26 +157,26 @@ legend { textarea { overflow: auto; } -[type=checkbox], -[type=radio] { +[type="checkbox"], +[type="radio"] { box-sizing: border-box; padding: 0; } -[type=number]::-webkit-inner-spin-button, -[type=number]::-webkit-outer-spin-button { +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { height: auto; } -[type=search] { +[type="search"] { -webkit-appearance: textfield; outline-offset: -2px; } -[type=search]::-webkit-search-cancel-button, -[type=search]::-webkit-search-decoration { +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } ::-webkit-input-placeholder { color: inherit; - opacity: .54; + opacity: 0.54; } ::-webkit-file-upload-button { -webkit-appearance: button; diff --git a/examples/using-prefetching-preloading-modules/src/pages/style.css b/examples/using-prefetching-preloading-modules/src/pages/style.css index 51bed5f448ab2..dd3e5e4536d46 100644 --- a/examples/using-prefetching-preloading-modules/src/pages/style.css +++ b/examples/using-prefetching-preloading-modules/src/pages/style.css @@ -1,4 +1,3 @@ - .changeable-title { color: red; } diff --git a/examples/using-redirects/src/components/layout.css b/examples/using-redirects/src/components/layout.css index e485487be9b3e..9e53afc65d0a4 100644 --- a/examples/using-redirects/src/components/layout.css +++ b/examples/using-redirects/src/components/layout.css @@ -60,7 +60,7 @@ dfn { } h1 { font-size: 2em; - margin: .67em 0; + margin: 0.67em 0; } mark { background-color: #ff0; @@ -77,10 +77,10 @@ sup { vertical-align: baseline; } sub { - bottom: -.25em; + bottom: -0.25em; } sup { - top: -.5em; + top: -0.5em; } img { border-style: none; @@ -122,29 +122,29 @@ button, select { text-transform: none; } -[type=reset], -[type=submit], +[type="reset"], +[type="submit"], button, -html [type=button] { +html [type="button"] { -webkit-appearance: button; } -[type=button]::-moz-focus-inner, -[type=reset]::-moz-focus-inner, -[type=submit]::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, button::-moz-focus-inner { border-style: none; padding: 0; } -[type=button]:-moz-focusring, -[type=reset]:-moz-focusring, -[type=submit]:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring, button:-moz-focusring { outline: 1px dotted ButtonText; } fieldset { border: 1px solid silver; margin: 0 2px; - padding: .35em .625em .75em; + padding: 0.35em 0.625em 0.75em; } legend { box-sizing: border-box; @@ -157,26 +157,26 @@ legend { textarea { overflow: auto; } -[type=checkbox], -[type=radio] { +[type="checkbox"], +[type="radio"] { box-sizing: border-box; padding: 0; } -[type=number]::-webkit-inner-spin-button, -[type=number]::-webkit-outer-spin-button { +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { height: auto; } -[type=search] { +[type="search"] { -webkit-appearance: textfield; outline-offset: -2px; } -[type=search]::-webkit-search-cancel-button, -[type=search]::-webkit-search-decoration { +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } ::-webkit-input-placeholder { color: inherit; - opacity: .54; + opacity: 0.54; } ::-webkit-file-upload-button { -webkit-appearance: button; diff --git a/examples/using-redirects/src/components/selected.css b/examples/using-redirects/src/components/selected.css index 35c16bb4295e6..35105a1aeb59b 100644 --- a/examples/using-redirects/src/components/selected.css +++ b/examples/using-redirects/src/components/selected.css @@ -1,3 +1,3 @@ .selected { color: #396; -} \ No newline at end of file +} diff --git a/examples/using-sass/src/styles/main.scss b/examples/using-sass/src/styles/main.scss index 50174a0e93dfa..7a3ad97a84ff2 100644 --- a/examples/using-sass/src/styles/main.scss +++ b/examples/using-sass/src/styles/main.scss @@ -1,14 +1,16 @@ -@import '~tachyons-sass/tachyons.scss'; -@import 'variables'; +@import "~tachyons-sass/tachyons.scss"; +@import "variables"; -@mixin borderRadius ($radius: 5px) { +@mixin borderRadius($radius: 5px) { -webkit-border-radius: $radius; -moz-border-radius: $radius; border-radius: $radius; } .sass-nav-example { - li { display: inline-block; } + li { + display: inline-block; + } a { @include borderRadius(3px); diff --git a/examples/using-sqip/src/index.css b/examples/using-sqip/src/index.css index ecf76f6cf7163..27acefbd1314f 100644 --- a/examples/using-sqip/src/index.css +++ b/examples/using-sqip/src/index.css @@ -680,5 +680,5 @@ blockquote p { text-align: center; font-size: 1.4vw; /* Hate me or not, Comic Sans is a great fit here */ - font-family: "Comic Sans MS", cursive, sans-serif; + font-family: 'Comic Sans MS', cursive, sans-serif; } diff --git a/packages/gatsby-cli/README.md b/packages/gatsby-cli/README.md index 36eda9d8abbba..f213583f1904f 100644 --- a/packages/gatsby-cli/README.md +++ b/packages/gatsby-cli/README.md @@ -60,11 +60,11 @@ the site for testing. #### Options -| Option | Description | -| :--------------: | ------------------------------------------------------------------------------- | -| `-H`, `--host` | Set host. Defaults to localhost | -| `-p`, `--port` | Set port. Defaults to 8000 | -| `-o`, `--open` | Open the site in your (default) browser for you | +| Option | Description | +| :--------------: | ---------------------------------------------------------------------------------------- | +| `-H`, `--host` | Set host. Defaults to localhost | +| `-p`, `--port` | Set port. Defaults to 8000 | +| `-o`, `--open` | Open the site in your (default) browser for you | | `--prefix-paths` | Serve site with link paths prefixed (if built with pathPrefix in your gatsby-config.js). | ### Info diff --git a/packages/gatsby-image/README.md b/packages/gatsby-image/README.md index d3dca4c586139..0bd96a6188a74 100644 --- a/packages/gatsby-image/README.md +++ b/packages/gatsby-image/README.md @@ -262,7 +262,7 @@ prop. e.g. `` ## `gatsby-image` props | Name | Type | Description | -| -----------------------| ------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| ---------------------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------- | | `fixed` | `object` | Data returned from the `fixed` query | | `fluid` | `object` | Data returned from the `fluid` query | | `fadeIn` | `bool` | Defaults to fading in the image on load | diff --git a/packages/gatsby-plugin-layout/README.md b/packages/gatsby-plugin-layout/README.md index 4962f8c465570..3cc4d347fd8aa 100644 --- a/packages/gatsby-plugin-layout/README.md +++ b/packages/gatsby-plugin-layout/README.md @@ -201,11 +201,9 @@ And then in `src/layouts/index.js`: ```js export default ({ children, pageContext }) => { - if (pageContext.layout === 'special') { + if (pageContext.layout === "special") { return {children} } - return ( - {children} - ) + return {children} } ``` diff --git a/packages/gatsby-plugin-netlify-cms/README.md b/packages/gatsby-plugin-netlify-cms/README.md index d8c45056f3a0e..bcc27f6da35fd 100644 --- a/packages/gatsby-plugin-netlify-cms/README.md +++ b/packages/gatsby-plugin-netlify-cms/README.md @@ -73,7 +73,7 @@ The js module might look like this: * extension registration methods, such as `registerWidget` and * `registerPreviewTemplate`. */ -import CMS from 'netlify-cms' +import CMS from "netlify-cms" /** * Any imported styles will automatically be applied to the editor preview @@ -81,16 +81,16 @@ import CMS from 'netlify-cms' * All of the example imports below would result in styles being applied to the * preview pane. */ -import 'module-that-imports-styles.js' -import 'styles.scss' -import '../other-styles.css' +import "module-that-imports-styles.js" +import "styles.scss" +import "../other-styles.css" /** * Let's say you've created widget and preview components for a custom image * gallery widget in separate files: */ -import ImageGalleryWidget from './image-gallery-widget.js' -import ImageGalleryPreview from './image-gallery-preview.js' +import ImageGalleryWidget from "./image-gallery-widget.js" +import ImageGalleryPreview from "./image-gallery-preview.js" /** * Register the imported widget: @@ -118,7 +118,7 @@ plugins: [ The js module might look like this: ```javascript -import CMS, { init } from 'netlify-cms' +import CMS, { init } from "netlify-cms" /** * Optionally pass in a config object. This object will be merged into `config.yml` if it exists @@ -127,7 +127,7 @@ import CMS, { init } from 'netlify-cms' init({ config: { backend: { - name: 'git-gateway', + name: "git-gateway", }, }, }) diff --git a/packages/gatsby-plugin-page-creator/README.md b/packages/gatsby-plugin-page-creator/README.md index 407fb075bc0b1..25214ff2d5a9e 100644 --- a/packages/gatsby-plugin-page-creator/README.md +++ b/packages/gatsby-plugin-page-creator/README.md @@ -3,7 +3,7 @@ Gatsby plugin that automatically creates pages from React components in specified directories. Gatsby includes this plugin automatically in all sites for creating pages from components in `src/pages`. -With this plugin, *any* file that lives in the `src/pages` folder (or subfolders) will be expected to export a React Component to generate a Page. The following files are automatically excluded: +With this plugin, _any_ file that lives in the `src/pages` folder (or subfolders) will be expected to export a React Component to generate a Page. The following files are automatically excluded: - `template-*` - `__tests__/*` diff --git a/packages/gatsby-plugin-remove-trailing-slashes/README.md b/packages/gatsby-plugin-remove-trailing-slashes/README.md index 569d30f7f137f..dcdf024bb71cf 100644 --- a/packages/gatsby-plugin-remove-trailing-slashes/README.md +++ b/packages/gatsby-plugin-remove-trailing-slashes/README.md @@ -4,6 +4,7 @@ This plugin removes trailing slashes from your project's paths. For example, `yoursite.com/about/` becomes `yoursite.com/about`. ## Important considerations + This plugin is intended to remove trailing slashes from paths generated by Gatsby itself. This however does not prevent the resolution of pages that have trailing slashes, due to the way browsers are built to interpret URLs as paths. @@ -17,6 +18,7 @@ This is an important factor when relying on path driven logic, such as in the us For example, if the current route is `/about`, the component `` wouldn't match because of the slash. #### Netlify Trailing Slashes + [Netlify](https://www.netlify.com) users should also take into account that that the service will match paths to redirect rules regardless of whether or not they contain a trailing slash, potentially causing infinite redirect loops and unexpected behaviours. This can be negated through the use of their Pretty URL feature, which rewrites URLs to pretty URLs. @@ -24,7 +26,6 @@ This can be negated through the use of their Pretty URL feature, which rewrites Please see the Netlify docs for more information: [https://www.netlify.com/docs/redirects/#trailing-slash](https://www.netlify.com/docs/redirects/#trailing-slash) - ## Usage Install: diff --git a/packages/gatsby-transformer-javascript-frontmatter/README.md b/packages/gatsby-transformer-javascript-frontmatter/README.md index 85cd6be85bede..cbcd0ea4e2be3 100644 --- a/packages/gatsby-transformer-javascript-frontmatter/README.md +++ b/packages/gatsby-transformer-javascript-frontmatter/README.md @@ -18,11 +18,11 @@ module.exports = { resolve: `gatsby-source-filesystem`, options: { name: `pages`, - path: `${__dirname}/src/pages/` - } + path: `${__dirname}/src/pages/`, + }, }, - 'gatsby-transformer-javascript-frontmatter' - ] + "gatsby-transformer-javascript-frontmatter", + ], } ``` diff --git a/packages/gatsby-transformer-pdf/README.md b/packages/gatsby-transformer-pdf/README.md index 541c82276231e..ca2d08f6d94d5 100644 --- a/packages/gatsby-transformer-pdf/README.md +++ b/packages/gatsby-transformer-pdf/README.md @@ -39,6 +39,7 @@ Then you'll be able to query the textual content of your pdfs files like: } } ``` + Which would return: ```javascript diff --git a/packages/gatsby-transformer-remark/README.md b/packages/gatsby-transformer-remark/README.md index 8be95e939140d..3faa7bc117e14 100644 --- a/packages/gatsby-transformer-remark/README.md +++ b/packages/gatsby-transformer-remark/README.md @@ -83,7 +83,7 @@ By default the tableOfContents is using the field `slug` to generate URLs. You c ### Excerpt length -By default, excerpts have a maximum length of 140 characters. You can change the default using the ```pruneLength``` argument. For example, if you need 500 characters, you can specify: +By default, excerpts have a maximum length of 140 characters. You can change the default using the `pruneLength` argument. For example, if you need 500 characters, you can specify: ```graphql { From 7625e8ee5d20498dce9433b1632b424cbf0399f6 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Tue, 6 Nov 2018 21:08:23 +0100 Subject: [PATCH 213/462] chore: manual eslint fixes (#9750) * gatsbygram: consistent return * using-faker: fix linting * using-gatsby-source-graphql: import graphql from gatsby * using-remark-copy-linked-files: consistent return * gatsby-source-contentful: no-self-assign * cache-dir: consistent return, unused vars * add-npm-owner: re-add missing imports * fix www linting * gatsbygram: remove unused lifecycle methods * return null instead of fragment --- examples/gatsbygram/src/layouts/index.js | 29 ----------- examples/gatsbygram/utils/download-file.js | 9 ++-- examples/using-faker/src/pages/index.js | 4 +- .../components/BlogPost.js | 1 + examples/using-gatsby-source-graphql/index.js | 1 + .../pages/index.js | 1 + .../src/pages/index.js | 8 ++-- .../gatsby-source-contentful/src/normalize.js | 2 - .../gatsby/cache-dir/load-directly-or-404.js | 5 +- packages/gatsby/cache-dir/navigation.js | 2 +- packages/gatsby/cache-dir/prefetch.js | 1 + scripts/add-npm-owner/index.js | 2 + www/gatsby-node.js | 9 +--- .../components/ecosystem/ecosystem-board.js | 2 +- www/src/components/evaluation-cell.js | 2 +- .../components/layout/layout-with-heading.js | 4 +- .../components/page-with-plugin-searchbar.js | 2 +- www/src/views/community/community-header.js | 48 +++++++++---------- .../starter-library/filtered-starters.js | 2 +- www/src/views/starter-library/starter-list.js | 2 +- 20 files changed, 55 insertions(+), 81 deletions(-) diff --git a/examples/gatsbygram/src/layouts/index.js b/examples/gatsbygram/src/layouts/index.js index 270c231a1f633..6f6f1276bc955 100644 --- a/examples/gatsbygram/src/layouts/index.js +++ b/examples/gatsbygram/src/layouts/index.js @@ -22,35 +22,6 @@ class Layout extends React.Component { isModal: PropTypes.bool, } - componentDidMount() { - // Create references to html/body elements - // this.htmlElement = document.querySelector(`html`) - // this.bodyElement = document.querySelector(`body`) - // // Cache the window width. - // windowWidth = window.innerWidth - } - componentWillReceiveProps(nextProps) { - // if we're changing to a non-homepage page, put things in - // a modal (unless we're on mobile). - // if (windowWidth > 750) { - // // Freeze the background from scrolling. - // this.htmlElement.style.overflow = `hidden` - // this.bodyElement.style.overflow = `hidden` - // // Always set overflow-y to scroll so the scrollbar stays visible avoiding - // // weird jumping. - // this.htmlElement.style.overflowY = `scroll` - // } else { - // // Otherwise we're navigating back home so delete old home so the - // // modal can be destroyed. - // delete this.modalBackgroundChildren - // this.htmlElement.style.overflow = `visible` - // this.bodyElement.style.overflow = `visible` - // // Always set overflow-y to scroll so the scrollbar stays visible avoiding - // // weird jumping. - // this.htmlElement.style.overflowY = `scroll` - // } - } - render() { const { location } = this.props let isModal = false diff --git a/examples/gatsbygram/utils/download-file.js b/examples/gatsbygram/utils/download-file.js index 33532f7a00220..f9a525a7ac9e6 100644 --- a/examples/gatsbygram/utils/download-file.js +++ b/examples/gatsbygram/utils/download-file.js @@ -8,7 +8,8 @@ module.exports = function(url, dest, cb) { // verify response code sendReq.on(`response`, function(response) { if (response.statusCode !== 200) { - return cb(`Response status was ` + response.statusCode) + cb(`Response status was ` + response.statusCode) + return } }) @@ -17,7 +18,8 @@ module.exports = function(url, dest, cb) { fs.unlink(dest) if (cb) { - return cb(err.message) + cb(err.message) + return } }) @@ -33,7 +35,8 @@ module.exports = function(url, dest, cb) { // Delete the file async. (But we don't check the result) if (cb) { - return cb(err.message) + cb(err.message) + return } }) } diff --git a/examples/using-faker/src/pages/index.js b/examples/using-faker/src/pages/index.js index 06cb537c9ebfa..ff169420466d3 100644 --- a/examples/using-faker/src/pages/index.js +++ b/examples/using-faker/src/pages/index.js @@ -1,5 +1,5 @@ import React from "react" -import { Link, graphql } from "gatsby" +import { graphql } from "gatsby" import "./index.css" const IndexPage = ({ data }) => ( @@ -26,7 +26,7 @@ const IndexPage = ({ data }) => (

Worked at

{data.allCompanyData.edges.map(({ node }) => ( -
+
{node.company.companyName}
{node.company.companySuffix}
diff --git a/examples/using-gatsby-source-graphql/components/BlogPost.js b/examples/using-gatsby-source-graphql/components/BlogPost.js index 61b7b48421732..17d6c286f6a47 100644 --- a/examples/using-gatsby-source-graphql/components/BlogPost.js +++ b/examples/using-gatsby-source-graphql/components/BlogPost.js @@ -1,4 +1,5 @@ import React from "react" +import { graphql } from "gatsby" import ReactMarkdown from "react-markdown" import dateformat from "dateformat" diff --git a/examples/using-gatsby-source-graphql/index.js b/examples/using-gatsby-source-graphql/index.js index 18d87159154ed..0cdefa3767293 100644 --- a/examples/using-gatsby-source-graphql/index.js +++ b/examples/using-gatsby-source-graphql/index.js @@ -1,4 +1,5 @@ import React from "react" +import { graphql } from "gatsby" import { makeBlogPath } from "../utils" import dateformat from "dateformat" diff --git a/examples/using-gatsby-source-graphql/pages/index.js b/examples/using-gatsby-source-graphql/pages/index.js index 18d87159154ed..0cdefa3767293 100644 --- a/examples/using-gatsby-source-graphql/pages/index.js +++ b/examples/using-gatsby-source-graphql/pages/index.js @@ -1,4 +1,5 @@ import React from "react" +import { graphql } from "gatsby" import { makeBlogPath } from "../utils" import dateformat from "dateformat" diff --git a/examples/using-remark-copy-linked-files/src/pages/index.js b/examples/using-remark-copy-linked-files/src/pages/index.js index 6776ddabfce4e..2924521ef3a6f 100644 --- a/examples/using-remark-copy-linked-files/src/pages/index.js +++ b/examples/using-remark-copy-linked-files/src/pages/index.js @@ -18,8 +18,9 @@ class BlogIndex extends React.Component { - {posts.map(post => { - if (post.node.frontmatter.path !== `/404/`) { + {posts + .filter(post => post.node.frontmatter.path !== `/404/`) + .map(post => { const title = get(post, `node.frontmatter.title`) || post.node.path return (
@@ -39,8 +40,7 @@ class BlogIndex extends React.Component {

) - } - })} + })}
) } diff --git a/packages/gatsby-source-contentful/src/normalize.js b/packages/gatsby-source-contentful/src/normalize.js index b58e6bb97ba3d..bc40d002aa198 100644 --- a/packages/gatsby-source-contentful/src/normalize.js +++ b/packages/gatsby-source-contentful/src/normalize.js @@ -377,8 +377,6 @@ exports.createContentTypeNodes = ({ if (entryItemFieldKey.split(`___`).length > 1) { return } - - entryItemFields[entryItemFieldKey] = entryItemFields[entryItemFieldKey] }) // Replace text fields with text nodes so we can process their markdown diff --git a/packages/gatsby/cache-dir/load-directly-or-404.js b/packages/gatsby/cache-dir/load-directly-or-404.js index f195385ea27f3..f232c3f55c114 100644 --- a/packages/gatsby/cache-dir/load-directly-or-404.js +++ b/packages/gatsby/cache-dir/load-directly-or-404.js @@ -36,7 +36,10 @@ export function getRedirectUrl(path) { export default function(resources, path, replaceOnSuccess = false) { return new Promise((resolve, reject) => { const url = getRedirectUrl(path) - if (!url) return reject(url) + if (!url) { + reject(url) + return + } // Always navigate directly if a custom 404 page doesn't exist. if (!resources) { diff --git a/packages/gatsby/cache-dir/navigation.js b/packages/gatsby/cache-dir/navigation.js index fadd1c7685076..3eb6728c45298 100644 --- a/packages/gatsby/cache-dir/navigation.js +++ b/packages/gatsby/cache-dir/navigation.js @@ -1,6 +1,6 @@ import React from "react" import PropTypes from "prop-types" -import loader, { setApiRunnerForLoader } from "./loader" +import loader from "./loader" import redirects from "./redirects.json" import { apiRunner } from "./api-runner-browser" import emitter from "./emitter" diff --git a/packages/gatsby/cache-dir/prefetch.js b/packages/gatsby/cache-dir/prefetch.js index 182864e155b3c..82c119ccb5a43 100644 --- a/packages/gatsby/cache-dir/prefetch.js +++ b/packages/gatsby/cache-dir/prefetch.js @@ -10,6 +10,7 @@ const support = function(feature) { } catch (err) { return false } + return false } const linkPrefetchStrategy = function(url) { if (typeof document === `undefined`) { diff --git a/scripts/add-npm-owner/index.js b/scripts/add-npm-owner/index.js index 318f44a0c5739..7ecf3d0bcb561 100644 --- a/scripts/add-npm-owner/index.js +++ b/scripts/add-npm-owner/index.js @@ -1,4 +1,6 @@ #!/usr/bin/env node +const util = require(`util`) +const exec = util.promisify(require(`child_process`).exec) const argv = require(`yargs`) .command(`$0 `, `Add new owner to gatsby packages`) .help().argv diff --git a/www/gatsby-node.js b/www/gatsby-node.js index 08f984d0bde01..4298e77f17010 100644 --- a/www/gatsby-node.js +++ b/www/gatsby-node.js @@ -619,6 +619,7 @@ exports.onCreateNode = ({ node, actions, getNode, reporter }) => { createNodeField({ node, name: `slug`, value: slug }) } // end Community/Creators Pages + return null } exports.onCreatePage = ({ page, actions }) => { @@ -641,11 +642,3 @@ exports.onPostBuild = () => { `./public/gatsbygram.mp4` ) } - -// limited logging for debug purposes -let limitlogcount = 0 -function log(max) { - return function(...args) { - if (limitlogcount++ < max) console.log(...args) - } -} diff --git a/www/src/components/ecosystem/ecosystem-board.js b/www/src/components/ecosystem/ecosystem-board.js index 3c6b2943a3aea..a5f3f31cb4872 100644 --- a/www/src/components/ecosystem/ecosystem-board.js +++ b/www/src/components/ecosystem/ecosystem-board.js @@ -4,7 +4,7 @@ import styled from "react-emotion" import EcosystemSection from "./ecosystem-section" -import presets, { colors } from "../../utils/presets" +import presets from "../../utils/presets" const EcosystemBoardRoot = styled(`div`)` display: flex; diff --git a/www/src/components/evaluation-cell.js b/www/src/components/evaluation-cell.js index 284cf55e3571e..d972c39d65775 100644 --- a/www/src/components/evaluation-cell.js +++ b/www/src/components/evaluation-cell.js @@ -1,4 +1,4 @@ -import React, { Component } from "react" +import React from "react" import { rhythm } from "../utils/typography" import presets, { colors } from "../utils/presets" diff --git a/www/src/components/layout/layout-with-heading.js b/www/src/components/layout/layout-with-heading.js index 737839d91a6e9..4f14129dee7ab 100644 --- a/www/src/components/layout/layout-with-heading.js +++ b/www/src/components/layout/layout-with-heading.js @@ -2,14 +2,14 @@ import React from "react" import PropTypes from "prop-types" import Helmet from "react-helmet" import { SkipNavLink } from "@reach/skip-nav" -import styled, { css } from "react-emotion" +import styled from "react-emotion" import Banner from "../banner" import PageHeading from "./page-heading" import Navigation from "../navigation" import MobileNavigation from "../navigation-mobile" -import presets, { colors } from "../../utils/presets" +import presets from "../../utils/presets" // Import Futura PT typeface import "../../fonts/Webfonts/futurapt_book_macroman/stylesheet.css" diff --git a/www/src/components/page-with-plugin-searchbar.js b/www/src/components/page-with-plugin-searchbar.js index c98854804861f..f7a7bdb2eb4b4 100644 --- a/www/src/components/page-with-plugin-searchbar.js +++ b/www/src/components/page-with-plugin-searchbar.js @@ -1,4 +1,4 @@ -import React, { Component, Fragment } from "react" +import React, { Fragment } from "react" import PluginSearchBar from "./plugin-searchbar-body" import { rhythm } from "../utils/typography" import presets, { colors } from "../utils/presets" diff --git a/www/src/views/community/community-header.js b/www/src/views/community/community-header.js index f9874fcd163cf..58c7e3cde77db 100644 --- a/www/src/views/community/community-header.js +++ b/www/src/views/community/community-header.js @@ -6,33 +6,33 @@ import Checkmark from "./check.svg" import Button from "../../components/button" import ArrowForwardIcon from "react-icons/lib/md/arrow-forward" -const CommunityHeaderLink = ({ linkTo, children }) => ( -
  • - - {children} - -
  • -) +// const CommunityHeaderLink = ({ linkTo, children }) => ( +//
  • +// +// {children} +// +//
  • +// ) class CommunityHeader extends Component { render() { - const { forHire, hiring, submissionText } = this.props + const { /*forHire, hiring,*/ submissionText } = this.props return (
    this.props.setURLState({ s: value }) render() { - const { data, urlState, setURLState } = this.props + const { data, urlState } = this.props const { setFiltersCategory, setFiltersDependency, diff --git a/www/src/views/starter-library/starter-list.js b/www/src/views/starter-library/starter-list.js index 7cce21bc2015b..128d2a4dc14a7 100644 --- a/www/src/views/starter-library/starter-list.js +++ b/www/src/views/starter-library/starter-list.js @@ -57,7 +57,6 @@ const StartersList = ({ urlState, starters, count, sortRecent }) => { const { description, gatsbyMajorVersion, - gatsbyDependencies, name, githubFullName, lastUpdated, @@ -171,6 +170,7 @@ const StartersList = ({ urlState, starters, count, sortRecent }) => {
    ) } + return null } export default StartersList From a053293fb0080ee8999f64bccbac53ee072db0c5 Mon Sep 17 00:00:00 2001 From: Callum Macdonald Date: Tue, 6 Nov 2018 22:27:38 +0100 Subject: [PATCH 214/462] Extend the docs on `sourceNodes` (#9564) * Extend the docs on `sourceNodes`. Expanding the docs to be a bit more verbose and explain in more depth what this API does. Based on a discussion with @pieh. * Update api-node-docs.js --- packages/gatsby/src/utils/api-node-docs.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/gatsby/src/utils/api-node-docs.js b/packages/gatsby/src/utils/api-node-docs.js index c1d9c447e0701..b58e414b757ac 100644 --- a/packages/gatsby/src/utils/api-node-docs.js +++ b/packages/gatsby/src/utils/api-node-docs.js @@ -78,7 +78,12 @@ exports.createPages = true exports.createPagesStatefully = true /** - * Extension point to tell plugins to source nodes. + * Extension point to tell plugins to source nodes. This API is called during + * the Gatsby bootstrap sequence. Source plugins use this hook to create nodes. + * This API is called exactly once per plugin (and once for your site's + * `gatsby-config.js` file). If you define this hook in `gatsby-node.js` it + * will be called exactly once after all of your source plugins have finished + * creating nodes. * * See also the documentation for [`createNode`](/docs/actions/#createNode). * @example From 19f3d5a70cc857229e1360ecef486dbbba0093fc Mon Sep 17 00:00:00 2001 From: Jonas Gierer Date: Wed, 7 Nov 2018 00:12:17 +0100 Subject: [PATCH 215/462] docs: Fix nonsensical sentence in project structure docs (#9763) --- docs/docs/gatsby-project-structure.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/gatsby-project-structure.md b/docs/docs/gatsby-project-structure.md index e6d202b777d3e..16e3b74a52778 100644 --- a/docs/docs/gatsby-project-structure.md +++ b/docs/docs/gatsby-project-structure.md @@ -31,7 +31,7 @@ Inside a Gatsby project, you may see some or all of the following folders and fi - **`/src`** This directory will contain all of the code related to what you will see on the front-end of your site (what you see in the browser), like your site header, or a page template. “Src” is a convention for “source code”. - **`/pages`** Components under src/pages become pages automatically with paths based on their file name. Check out the [pages docs](/docs/recipes/#creating-pages) for more detail. - - **`/templates`** By convention, templates used across multiple pages are Contains templates for programmatically creating pages. Check out the [templates docs](/docs/building-with-components/#page-template-components) for more detail. + - **`/templates`** Contains templates for programmatically creating pages. Check out the [templates docs](/docs/building-with-components/#page-template-components) for more detail. - **`html.js`** For custom configuration of default .cache/default_html.js. Check out the [custom html docs](/docs/custom-html/) for more detail. - **`/static`** If you put a file into the static folder, it will not be processed by Webpack. Instead it will be copied into the public folder untouched. Check out the [assets docs](https://www.gatsbyjs.org/docs/adding-images-fonts-files/#adding-assets-outside-of-the-module-system) for more detail. From 7902ab850102ffb08b1ab53f51602969b90a1764 Mon Sep 17 00:00:00 2001 From: Lennart Date: Wed, 7 Nov 2018 09:26:03 +0100 Subject: [PATCH 216/462] Gatsby on Linux + WSL (#9384) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Soo in March this year @spences10 opened this PR: https://github.com/gatsbyjs/gatsby/issues/4139 But it never got added to the sidebar 😛 Therefore I added unknowingly this PR: https://github.com/gatsbyjs/gatsby/pull/8876 ----------- This PR exposes the Linux doc to the sidebar and puts a link to this doc on the windows doc. --- docs/docs/gatsby-on-linux.md | 6 ++++-- docs/docs/gatsby-on-windows.md | 2 ++ www/src/data/sidebars/doc-links.yaml | 2 ++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/docs/gatsby-on-linux.md b/docs/docs/gatsby-on-linux.md index 1b379c98d24f6..c8589d8720b15 100644 --- a/docs/docs/gatsby-on-linux.md +++ b/docs/docs/gatsby-on-linux.md @@ -4,7 +4,9 @@ title: Gatsby on Linux # Linux -TODO +> This is a TODO. Help our community expand it. + +> Please use the [Gatsby Style Guide](/docs/gatsby-style-guide/) to ensure your pull request gets accepted. ## Windows Subsystem Linux (WSL) @@ -56,7 +58,7 @@ sudo apt install git sudo apt install libpng-dev ``` -Or to install all at the same time and approve (y) all installs: +Or to install all at the same time and approve `(y)` all installs: ```sh sudo apt update && sudo apt -y upgrade && sudo apt install build-essential && sudo apt install git && sudo apt install libpng-dev diff --git a/docs/docs/gatsby-on-windows.md b/docs/docs/gatsby-on-windows.md index 205a79f935d4c..2d6f58ce6c458 100644 --- a/docs/docs/gatsby-on-windows.md +++ b/docs/docs/gatsby-on-windows.md @@ -88,3 +88,5 @@ Sharp uses a c library, libvips. If you are having issues while installing Sharp ## Windows Subsystem for Linux If the installation of dependencies or developing on Windows in general gives you headaches, Windows 10 provides a great alternative: [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/about). It lets you run most command-line tools, utilities, and applications in a GNU/Linux environment directly on Windows, unmodified, without the overhead of a virtual machine. In the above scenario you would download e.g. Ubuntu, open the terminal, [install Node](https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions), and run `sudo apt-get install build-essential` in the terminal — and the compilation works way more reliable. Please note that you have to delete any existing `node_modules` folder in your project and re-install the dependencies in your WSL environment. + +You can also visit [Gatsby on Linux](/docs/gatsby-on-linux/) to learn more. diff --git a/www/src/data/sidebars/doc-links.yaml b/www/src/data/sidebars/doc-links.yaml index 85fc45652e937..42248e219ea4b 100644 --- a/www/src/data/sidebars/doc-links.yaml +++ b/www/src/data/sidebars/doc-links.yaml @@ -15,6 +15,8 @@ link: /docs/browser-support/ - title: Gatsby on Windows link: /docs/gatsby-on-windows/ + - title: Gatsby on Linux + link: /docs/gatsby-on-linux/ - title: Deploying & hosting link: /docs/deploying-and-hosting/ items: From c80f7b88c0c38815d0779c72f0b58a83f67bb01f Mon Sep 17 00:00:00 2001 From: Christopher Biscardi Date: Wed, 7 Nov 2018 00:29:09 -0800 Subject: [PATCH 217/462] Change theme spec to match plugin spec (#9663) This changes `__experimentalThemes` from the following ``` __experimentalThemes: [['theme-name', optionsObject]] ``` to match the plugins spec ``` __experimentalThemes: [{ resolve: 'theme-name', options: {} }] ``` * This is to reduce the number of user-visible config styles. * There will be a future change to be fully compatible with the [load plugins](https://github.com/gatsbyjs/gatsby/blob/390803c8f679e53d398d40b9535c1a8784380a48/packages/gatsby/src/bootstrap/load-plugins/load.js#L37-L85) functionality (defines a `themes/` directory for local themes and handles absolute paths, etc). This change is meant to match the plugins API spec superficially so that the blogpost #9517 doesn't have syntax incompatible with the future. --- packages/gatsby/src/bootstrap/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/gatsby/src/bootstrap/index.js b/packages/gatsby/src/bootstrap/index.js index a302452d098fc..be70a8c16b8b1 100644 --- a/packages/gatsby/src/bootstrap/index.js +++ b/packages/gatsby/src/bootstrap/index.js @@ -80,7 +80,9 @@ module.exports = async (args: BootstrapArgs) => { if (config && config.__experimentalThemes) { const themesConfig = await Promise.mapSeries( config.__experimentalThemes, - async ([themeName, themeConfig]) => { + async plugin => { + const themeName = plugin.resolve || plugin + const themeConfig = plugin.options || {} const theme = await preferDefault( getConfigFile(themeName, `gatsby-config`) ) From d944be38c265ff7a0b66ed672900bb8b086be598 Mon Sep 17 00:00:00 2001 From: Amberley Date: Wed, 7 Nov 2018 06:21:35 -0600 Subject: [PATCH 218/462] feat(www): add webinar link/banner (#9767) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * change banner text to promote webinar * add link to v1 docs in migration guide * Fix quotation marks * Rm „fallback“ banner content, mark prop as required --- docs/docs/migrating-from-v1-to-v2.md | 2 ++ www/src/components/banner.js | 21 ++------------------- www/src/components/layout.js | 22 ++++++---------------- 3 files changed, 10 insertions(+), 35 deletions(-) diff --git a/docs/docs/migrating-from-v1-to-v2.md b/docs/docs/migrating-from-v1-to-v2.md index 1fe177159a31e..546a34a6cc17c 100644 --- a/docs/docs/migrating-from-v1-to-v2.md +++ b/docs/docs/migrating-from-v1-to-v2.md @@ -2,6 +2,8 @@ title: Migrating from v1 to v2 --- +Looking for the v1 docs? [Find them here](https://v1.gatsbyjs.org/). + > This document is a work in progress. Have you upgraded your site and run into something that's not covered here? [Add your changes on GitHub](https://github.com/gatsbyjs/gatsby/edit/master/docs/docs/migrating-from-v1-to-v2.md)! ## Introduction diff --git a/www/src/components/banner.js b/www/src/components/banner.js index b8b8dd8ca6371..fb06c1029233f 100644 --- a/www/src/components/banner.js +++ b/www/src/components/banner.js @@ -51,29 +51,12 @@ const Link = styled(`a`)` const Banner = ({ children, background }) => ( - - {children ? ( - {children} - ) : ( - - These are the docs for v2. - {` `} - - View the v1 docs - - {` `} - instead - - - . - - )} - + {children && {children}} ) Banner.propTypes = { - children: PropTypes.node, + children: PropTypes.node.isRequired, background: PropTypes.any, } diff --git a/www/src/components/layout.js b/www/src/components/layout.js index beff9ecfb47b4..463c5dd90bc5c 100644 --- a/www/src/components/layout.js +++ b/www/src/components/layout.js @@ -150,28 +150,18 @@ class DefaultLayout extends React.Component { Skip to main content - These are the docs for v2. - {` `} - View the v1 docs - - {` `} - instead - + Register now - . + {` for “Rise of the Content Mesh: Webcast with Contentful and Gatsby”.`}
    Date: Wed, 7 Nov 2018 15:53:08 +0100 Subject: [PATCH 219/462] fix(www): remove unused (#9780) We will be getting those for a while :( (as PR that remove usage was used on branch before the linting change). This currently fails linting, because `Link` is defined but not used --- www/src/components/banner.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/www/src/components/banner.js b/www/src/components/banner.js index fb06c1029233f..9dc812acb01da 100644 --- a/www/src/components/banner.js +++ b/www/src/components/banner.js @@ -39,16 +39,6 @@ const Content = styled(`div`)` white-space: nowrap; ` -const Link = styled(`a`)` - color: #fff; - span { - display: none; - ${presets.Mobile} { - display: inline; - } - } -` - const Banner = ({ children, background }) => ( {children && {children}} From 92593af7e1e62bd93d9b4edb63e3afc28a7565ef Mon Sep 17 00:00:00 2001 From: greg lobinski <32480082+greglobinski@users.noreply.github.com> Date: Wed, 7 Nov 2018 16:39:44 +0100 Subject: [PATCH 220/462] feat(www): add 'lead' animation to the Ecosystem horizontal scrollers (#9606) * feat(www): add lead scroll to horizontal scrollers feat(www): setup IntersectionObserver feat(www): add initial lead animation to horizontal scrollers on Ecosystem page fix(www): remove intersection-observer polyfill fix(www): change fake scrolling to 'only left' ver fix(www): make 'fake scroll' not fake * fix(www): add code formating * fix(www): add code formating and fix eslint errors * fix(www): add small delay for lead animation * fix(www): decrease dalay to 250ms * refactor(www): refactor easy function * fix(www): revert to overriden proper Ecosystem board texts * fix(www): remove unused CSS style --- .../components/ecosystem/ecosystem-board.js | 152 +++++++++++++----- .../ecosystem/ecosystem-featured-items.js | 3 +- 2 files changed, 113 insertions(+), 42 deletions(-) diff --git a/www/src/components/ecosystem/ecosystem-board.js b/www/src/components/ecosystem/ecosystem-board.js index a5f3f31cb4872..3f9f528ee530d 100644 --- a/www/src/components/ecosystem/ecosystem-board.js +++ b/www/src/components/ecosystem/ecosystem-board.js @@ -1,4 +1,4 @@ -import React from "react" +import React, { Component } from "react" import PropTypes from "prop-types" import styled from "react-emotion" @@ -20,46 +20,116 @@ const EcosystemBoardRoot = styled(`div`)` } ` -const EcosystemBoard = ({ - icons: { plugins: PluginsIcon, starters: StartersIcon }, - starters, - plugins, -}) => ( - - - - - -) +class EcosystemBoard extends Component { + observer + observerTargets = [] + + componentDidMount() { + if (typeof window.IntersectionObserver !== `undefined`) { + this.setupObserver() + } + } + + componentWillUnmount() { + if (typeof window.IntersectionObserver !== `undefined`) { + this.observerTargets.forEach(target => this.observer.unobserve(target)) + } + } + + setupObserver = () => { + const options = { rootMargin: `0px`, threshold: [1] } + this.observer = new IntersectionObserver(this.handleIntersect, options) + this.observerTargets = Array.from( + document.querySelectorAll(`.featuredItems`) + ) + + this.observerTargets.forEach(target => this.observer.observe(target)) + } + + handleIntersect = (entries, observer) => { + entries.forEach(entry => { + const target = entry.target + + if (entry.intersectionRatio > 0) { + setTimeout( + () => this.turnOnLeadScroll({ target, duration: 1000, distance: 20 }), + 250 + ) + this.observer.unobserve(target) + } + }) + } + + turnOnLeadScroll = ({ target, duration, distance }) => { + let startTime = null + + function animation(currentTime) { + if (startTime === null) { + startTime = currentTime + } + + const timeElapsed = currentTime - startTime + const getDistanceToScroll = ease(timeElapsed, 0, distance, duration) + + target.scroll({ top: 0, left: getDistanceToScroll }) + + if (timeElapsed < duration) { + requestAnimationFrame(animation) + } + } + + function ease(t, b, c, d) { + return -c * (t /= d) * (t - 2) + b + } + + requestAnimationFrame(animation) + } + + render() { + const { + icons: { plugins: PluginsIcon, starters: StartersIcon }, + starters, + plugins, + } = this.props + + return ( + + + + + + ) + } +} EcosystemBoard.propTypes = { icons: PropTypes.object, diff --git a/www/src/components/ecosystem/ecosystem-featured-items.js b/www/src/components/ecosystem/ecosystem-featured-items.js index 8f1f171fe98e6..e8198d7468503 100644 --- a/www/src/components/ecosystem/ecosystem-featured-items.js +++ b/www/src/components/ecosystem/ecosystem-featured-items.js @@ -11,6 +11,7 @@ import { scrollbarStyles } from "../../utils/styles" const EcosystemFeaturedItemsRoot = styled(`div`)` overflow-x: scroll; margin: ${rhythm(0.1)} -${rhythm(options.blockMarginBottom)}; + -webkit-overflow-scrolling: touch; ${presets.Tablet} { border-top: 1px solid ${colors.gray.superLight}; @@ -37,7 +38,7 @@ const List = styled(`ul`)` ` const EcosystemFeaturedItems = ({ items }) => ( - + {items.map(item => { const { slug } = item From 983b970285e01c5831ddc5318f28f9121badb2f3 Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Wed, 7 Nov 2018 12:04:25 -0800 Subject: [PATCH 221/462] feat(blog): add gatsby for apps post (#9746) * chore: create folder * docs: add gatsby for apps post * docs(blog): add gatsby for apps blog post * chore: update * chore: remove old post * chore: add content * chore: add bullet points (google apps messed formatting up) * docs: hopefully finish blog post * chore: remove image * chore: remove comma * chore: address feedback * chore: add top level header --- .../images/app-shell-web-apps.gif | Bin 0 -> 94141 bytes .../images/dynamic-data-fetching.gif | Bin 0 -> 47053 bytes .../images/gatsby-mail-app-shell.gif | Bin 0 -> 180461 bytes .../images/gatsby-mail.png | Bin 0 -> 103554 bytes .../images/gmail.png | Bin 0 -> 318033 bytes .../images/twitter.png | Bin 0 -> 548202 bytes .../images/what-if-i-told-you.jpg | Bin 0 -> 56081 bytes docs/blog/2018-11-07-gatsby-for-apps/index.md | 254 ++++++++++++++++++ docs/blog/author.yaml | 4 +- docs/blog/avatars/dustin-schau.jpeg | Bin 19102 -> 0 bytes docs/blog/avatars/dustin-schau.png | Bin 0 -> 23858 bytes 11 files changed, 256 insertions(+), 2 deletions(-) create mode 100644 docs/blog/2018-11-07-gatsby-for-apps/images/app-shell-web-apps.gif create mode 100644 docs/blog/2018-11-07-gatsby-for-apps/images/dynamic-data-fetching.gif create mode 100644 docs/blog/2018-11-07-gatsby-for-apps/images/gatsby-mail-app-shell.gif create mode 100644 docs/blog/2018-11-07-gatsby-for-apps/images/gatsby-mail.png create mode 100644 docs/blog/2018-11-07-gatsby-for-apps/images/gmail.png create mode 100644 docs/blog/2018-11-07-gatsby-for-apps/images/twitter.png create mode 100644 docs/blog/2018-11-07-gatsby-for-apps/images/what-if-i-told-you.jpg create mode 100644 docs/blog/2018-11-07-gatsby-for-apps/index.md delete mode 100644 docs/blog/avatars/dustin-schau.jpeg create mode 100644 docs/blog/avatars/dustin-schau.png diff --git a/docs/blog/2018-11-07-gatsby-for-apps/images/app-shell-web-apps.gif b/docs/blog/2018-11-07-gatsby-for-apps/images/app-shell-web-apps.gif new file mode 100644 index 0000000000000000000000000000000000000000..228ff16a9846e28b51d79f1ffdc7afe2df9febe3 GIT binary patch literal 94141 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�yt$fE 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

    Fw#3lJv4hoYXZ-zZBJVX8;v`3ph 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 F?_UU5s}leK literal 0 HcmV?d00001 diff --git a/docs/blog/2018-11-07-gatsby-for-apps/images/dynamic-data-fetching.gif b/docs/blog/2018-11-07-gatsby-for-apps/images/dynamic-data-fetching.gif new file mode 100644 index 0000000000000000000000000000000000000000..af99d83b1c14cdf162f3eca7a73bf5580df6243d GIT binary patch literal 47053 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 GDgF<`M!Q%5 literal 0 HcmV?d00001 diff --git a/docs/blog/2018-11-07-gatsby-for-apps/images/gatsby-mail-app-shell.gif b/docs/blog/2018-11-07-gatsby-for-apps/images/gatsby-mail-app-shell.gif new file mode 100644 index 0000000000000000000000000000000000000000..f624f43f8c96f0427cdf466832198529cadde834 GIT binary patch literal 180461 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 literal 0 HcmV?d00001 diff --git a/docs/blog/2018-11-07-gatsby-for-apps/images/gmail.png b/docs/blog/2018-11-07-gatsby-for-apps/images/gmail.png new file mode 100644 index 0000000000000000000000000000000000000000..560ad1ade24ac1866a736d69c6c7325b4568c409 GIT binary patch literal 318033 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

    Xw{w!55$2iSn^3&9dqfh2fNnq| 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 z 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

    t0>FP~18gx{Qq-;z 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 XJV>qo@6Zh^4ET8?t0Ge&WeWXYuf%ay literal 0 HcmV?d00001 diff --git a/docs/blog/2018-11-07-gatsby-for-apps/images/twitter.png b/docs/blog/2018-11-07-gatsby-for-apps/images/twitter.png new file mode 100644 index 0000000000000000000000000000000000000000..0b6fa08a35bfad578344e1d174e8322016bcda9c GIT binary patch literal 548202 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

    yjepW%sGz7ao?P}O2 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

    qM(SZC<2NULbC~#0xEof*=mtXa0qC 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

    MFSG?plCoY(N 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

    UOClI)+5Zjhh8L()Rb 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

    x<3$8&M#TS%EfIW_94}&d)>9d7P0QuJxm! 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 literal 0 HcmV?d00001 diff --git a/docs/blog/2018-11-07-gatsby-for-apps/images/what-if-i-told-you.jpg b/docs/blog/2018-11-07-gatsby-for-apps/images/what-if-i-told-you.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e373b15af887bbae9cc3133a0dde5cc870758f1 GIT binary patch literal 56081 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 literal 0 HcmV?d00001 diff --git a/docs/blog/2018-11-07-gatsby-for-apps/index.md b/docs/blog/2018-11-07-gatsby-for-apps/index.md new file mode 100644 index 0000000000000..97b4d192e6da3 --- /dev/null +++ b/docs/blog/2018-11-07-gatsby-for-apps/index.md @@ -0,0 +1,254 @@ +--- +title: Gatsby for Apps +date: 2018-11-07 +author: Dustin Schau +tags: + - apps + - web apps + - applications + - beyond static +excerpt: Gatsby is great for not only static sites but also traditional web applications. Using Gatsby enables the benefits of both static and web applications so you don't have to sacrifice the advantages of one approach to reap the benefits of the other. +--- + +Gatsby is great for static sites. You probably know this! It’s equally great for web applications. You may not know this. Gatsby is great for building web experiences that leverage the benefits of both so called static sites and web applications -- simultaneously. You don't have to sacrifice the advantages of one approach to reap the benefits of the other. + + + +In this post, we'll go into some of the use cases that make for a compelling web application, such as dynamic data fetching, user authentication, and detail _why_ Gatsby is an excellent choice for building web applications. + +We'll take a look at a classic web application -- Gmail -- which we rebuilt in Gatsby as a demo of how Gatsby can create engaging, modern web applications. + +To begin, what even _is_ an application, anyways? + +> Note: +> +> If you haven't already, consider checking out ["Beyond Static: Building Dynamic Apps with Gatsby"][beyond-static] where many ideas in this blog post are presented in a video/webinar format. + +## What is an application? + +I've previously attempted the [surprisingly difficult task][whats-an-app] of defining what consititutes a traditional web application. In an effort to not re-hash all the work there, I think there are several, key features that indicate a more app-like experience: + +- dynamic data fetching +- user authentication and authenticated client-only routes +- client-side JS interactions + +Of course, a web app isn't some checklist wherein _each_ of these functionalities are required to indicate an app-like experience. Rather, I think it's easier to _see_ an example of a web application -- one that encapsulates several of these functionalities -- to form a mental model of the type of web app that Gatsby can build. + +For me there are two key examples that are at the forefront of my mental model of what constitutes a modern web application... Gmail and Twitter. + +### Gmail + +[![Gmail interface](./images/gmail.png)][gmail] + +Gmail served as an early proof of concept that proved out two, key functional wins: + +1. Client-side JavaScript can power an app-like experience, and +1. a JavaScript application (running in your browser) can compare favorably to traditional, native applications for desktop and mobile + +The impact of these wins can’t be understated. Gmail _proved_ that a native, app-like experience is not only possible for end users, but that it can even be preferable and more convenient than the native experience. We'll revisit to this trusty Gmail web application example in due time. + +Next up, is Twitter, for slightly different reasons. + +### Twitter (Progressive Web Application) + +[![Twitter interface](./images/twitter.png)][twitter-lite] + +Twitter is another key example of my mental model for what an application _is_ (and can be!) because it both: + +- illustrates some of the power of the modern web experience, and +- uses some great performance optimizations and smart engineering practices to serve up an engaging, fast, app-like experience + +In particular, I find the following functionalities of Twitter as key markers for a separate kind of application: + +- Aggressive data caching and fast page navigation with service workers +- Integration of the [PRPL pattern][prpl] (**P**ush, **R**ender, **P**re-cache, and **L**azy load) +- The illustration of the [App Shell][app-shell] pattern to speed up repeat visits and show a maximally visually complete page + +These _modern_ concepts, coupled together, are key for the value of Twitter's approach to an app-like experience. Twitter engineers were able to strip down the core Twitter experience and deliver a blazing-fast modern web application utilizing some great engineering techniques and patterns, that many users like even more than the full experience. To learn more about these techniques, check out this great [case study][case-study] from Google and Addy Osmani. + +These two web applications will serve as key foundational pieces to keep in mind as the discussion shifts to Gatsby for web applications. + +## Gatsby is for Applications + +![Morpheus Matrix What if I told you](./images/what-if-i-told-you.jpg) + +What if I told you... that building a Gatsby website enables all of these traditional web-app like functionalities because a Gatsby "static site" is an application? + +Every Gatsby application isn't merely static. It's _as much_ static HTML rendered up-front, as possible. Client-side JavaScript (via React!) takes over as the enginge for dynamic application functionality. A quick overview of Gatsby's general build process is effective to illustrate the concept. + +1. Inject pages with data (from [GraphQL][gatsby-graphql] or even [unstructured data outside of GraphQL][gatsby-unstructured]) +1. Use the [ReactDOMServer.renderToString][react-dom-render-to-string] API to invoke server-side APIs to render React components to _HTML_ files +1. Inject a runtime and helpers (like a router!) to enable app functionality + - Gatsby _produces_ a [create-react-app][create-react-app] like experience once this runtime takes over + +To illustrate the concept, let's start with a classic example... we need to fetch some data at _run-time_ rather than build-time. + +```jsx:title=src/pages/messages.js +import React from "react" + +import Layout from "../compoents/layout" + +class Messages extends React.Component { + constructor(props) { + super(props) + + this.state = { + messages: [], + } + } + + // note: this is a simplified example without error handling, authentication, etc. + async componentDidMount() { + const messages = await fetch(`/api/some-url-to-get-messages`).then( + response => response.json() + ) + + this.setState({ + messages, + }) + } + + render() { + const { messages } = this.state + return ( + + {messages.length === 0 ? ( +

    Loading messages…

    + ) : ( +
      + {messages.map(message => ( +
    • {message.text}
    • + ))} +
    + )} + + ) + } +} + +export default Messages +``` + +All we've done here is implement the [`componentDidMount`][cdm] lifecycle method, which will fire off a request to some REST API to retrieve some data (messages!) from a remote API. At _runtime_ our application is now fetching data, dynamically. This illustrates the effectiveness of the Gatsby + React _runtime_ and how a Gatsby application is essentially a hydrated create-react-app like experience. [React lifecycle methods][react-lifecycle-methods] are fully supported to implement whatever dynamic interaction is required, like data fetching in this example! + +Consider the following animation, which mimics the end user experience. In effect, we've statically generated non-dynamic pieces (e.g. header, sidebar, etc.) and we then request additional data, on demand! + +![Loading dynamic data animation](./images/dynamic-data-fetching.gif) + +However--this is a fairly contrived, perhaps not completely real-world example. What if that REST API [requires authentication][authentication-tutorial]? What if we want [client-only routes][client-only-routes], e.g. deep linking to a specific message? You better believe it's possible! GraphQL at build time and run time? Yup! + +The central idea I want to clarify is that typically app-like features are not only _possible_ with Gatsby, but intuitive and easy to implement due to the dynamic runtime enabled in every Gatsby application. It's _just_ React. + +Gatsby is for building dynamic, web applications, just as it is for building static sites. At this point, this has become clear. Gatsby can be used for many of the traditional cases for web applications, including authentication, client-only routes, dynamic data fetching, and more. + +However, what hasn't been made clear is _why_ you'd reach for Gatsby as opposed to other solutions. + +## _Why_ Gatsby for Apps? + +### Built-in Performance Optimizations + +If we revisit some of the benefits that Gatsby provides, minimally: + +- Static rendering of React components and co-located data to static HTML +- Optimizing data, images, etc. for blazing-fast performance +- Internalizing performance patterns and best practices like [PRPL][prpl], route-based code splitting, etc. + +Each of these are worthy of far more detail, but suffice to say these are _great_ functionalities that you want not only in your _static_ site, but also in your application. + +These performance optimizations aren't opt-in; they're enabled, by default. As new performance techniques and optimizations gain popularity, we can internalize these just as we have for these others optimizations. These optimizations can then be made available to your end users merely by upgrading your version of Gatsby, in much the same way tooling improvements are available by upgrading [create-react-app][create-react-app]. + +### Plugins and the Gatsby Ecosystem + +One of the key benefits of Gatsby is its highly modular architecture. Need a plugin for [sourcing data from Wordpress][gatsby-source-wordpress]? Sure, seems reasonable. Need to [transform yaml data][gatsby-transformer-yaml] into a usable, JavaScript object? Yeah, why not! Want to [stitch in a remote GraphQL API][gatsby-source-graphql] and inject the data at _build_ time? Oh, you're fancy! Want to load optimized, responsive, blur-in images? Yep. + +Let's take a look at that image functionality provided by one of our components, `gatsby-image`, in slightly more detail. + +#### `gatsby-image` + +Certainly one of my favorite components that Gatsby provides and maintains is `gatsby-image`. This component gives excellent image rendering capabilities, along with image optimizations enabled by plugins like [`gatsby-plugin-sharp`][gatsby-plugin-sharp]. These two techniques, along with the GraphQL API made available to any Gatsby application, vastly simplifies the developer experience of serving optimized images, providing a number of features, including: + +- Resizing large images to an optimized size for your design + - aka banish the practice of 5Mb above-the-fold hero images to the shadow realm +- Generate multiple, mobile-friendly images using `srcset` to serve _just_ what your user's device needs +- Lazy load images with a blur-up technique--even using [traced SVGs][traced-svg] + +`gatsby-image` is incredible. If you haven't yet integrated its capabilities into your application, I'd highly recommend taking a look! Check out our recently redesigned [Using Gatsby Image][using-gatsby-image] example to learn more and see some live examples. Use `gatsby-image`, your users will thank you. + +The power of these components and plugins is immense. In a similar way that reusable components have been incredibly valuable and successful for the growth of the React ecosystem, so to are plugins and ecosystem valuable for Gatsby applications. Why waste cycles reinventing these plugins and components when you can re-use and leverage the power of our open-source ecosystem? Using these plugins and components means more time to spend on building out your Gatsby application. Check out [our vast plugin library][gatsby-plugins] if you haven't already! + +Next: let's compare and contrast the end user experience of fetching authenticated data between Gatsby and a server-rendered application. + +### The App Shell + +In merely adding the [`gatsby-plugin-offline`][gatsby-plugin-offline] plugin, we enable a fully-featured, progressive web application that works offline and creates an app shell by registering a service worker. An app shell is essentially separate components of your application (e.g. header, footer, sidebar, etc.) that are instantly available from a service worker while dynamic content is fetched in the background. This creates a great end-user experience, as the application is able to visually populate instantly as data loads into place in the background. + +If we consider this approach, the technique looks like the following: + +1. Render as much content, as possible, up front (e.g. the app shell) +1. Make async data requests to load disparate pieces, e.g. load page content from an API, particularly an API with authentication + +Let’s compare this approach with the server-rendered approach. Consider an authenticated API call for this example. This API call is used to populate page data before it's sent (as HTML) to the end user. We're forced to defer loading for the entire page and the bottleneck of the API response, rather than serving the app shell as dynamic data loads in the background. + +Consider the following animation to clarify this example. On the left, an application using a service worker and an app shell, e.g. a Gatsby application. On the right, a server-rendered application that waits until the API call has resolved to serve the _entire_ page all at once. + +![App shell vs. server side rendered](./images/app-shell-web-apps.gif) + +The benefits of this approach are clear. Loading an application shell gives end users the impression that the page is loading more quickly, even if in comparing the two approaches, both effectively load _all_ the data after the same amount of time. This gives your users the best of both worlds... the appearance and feeling of being blazing fast and _actually_ being blazing fast with the optimizations you get with Gatsby out of the box. + +To unify all these concepts, I've assembled a demo application revisiting our old friend Gmail. This demo illustrates that rich web applications are not only _possible_ in Gatsby, but that Gatsby is a great choice to build these types of applications. + +## Introducing... Gatsby Mail! (For demo purposes only!) + +[![Gatsby Mail - an example app demoing web app functionality](./images/gatsby-mail.png)][gatsby-mail-app] + +[Gatsby Mail][gatsby-mail-app] encapsulates some of the concepts and themes I've been hitting upon, particularly: + +1. Gmail, Twitter, et al, are key exemplars of rich, web app experiences +1. Gatsby provides components, plugins, etc. for delivering great experiences; use them! +1. Gatsby is an excellent choice for building web applications + +Additionally, Gatsby Mail shows some specific web application functionality, such as: + +- Static rendering coupled with fetching dynamic data with the client runtime +- Authentication and client-only routes +- Non-authenticated routes, e.g. a landing page (using the [React Context][react-context] API) +- GraphQL at build time and _run time_ utilizing a remote GraphQL API and [apollo-boost][apollo-boost], and +- loading an app shell with `gatsby-plugin-offline` (check out the "Fast 3G" example below!) + +and even a light/dark theme, because why not! You can see all of these concepts unify to form this great end-user experience in the below example with a simulated fast 3G connection. The app shell (header, footer, etc.) loads into place _instantly_ as the dynamic content is fetched (from the remote GraphQL API!) in the background. + +![App Shell with Gatsby Mail](./images/gatsby-mail-app-shell.gif) + +Check out the [Github repo][gatsby-mail-repo] to learn more about how it was built and adopt some of the techniques as you build your next great Gatsby web **application**. + +We can't wait to see what you build. + +[beyond-static]: https://www.gatsbyjs.com/build-web-apps-webinar +[whats-an-app]: /blog/2018-10-15-beyond-static-intro/#what-is-an-app +[gmail]: https://gmail.com +[twitter-lite]: https://m.twitter.com +[prpl]: https://developers.google.com/web/fundamentals/performance/prpl-pattern/ +[app-shell]: https://developers.google.com/web/fundamentals/architecture/app-shell +[case-study]: https://developers.google.com/web/showcase/2017/twitter +[gatsby-graphql]: /docs/querying-with-graphql/ +[gatsby-unstructured-data]: /docs/using-unstructured-data/ +[authentication-data]: /docs/authentication-tutorial/ +[client-only-routes]: /docs/building-apps-with-gatsby/#client-only-routes--user-authentication +[create-react-app]: https://facebook.github.io/create-react-app/ +[react-dom-render-to-string]: https://reactjs.org/docs/react-dom-server.html#rendertostring +[cdm]: https://reactjs.org/docs/react-component.html#componentdidmount +[prpl]: https://developers.google.com/web/fundamentals/performance/prpl-pattern/ +[react-context]: https://reactjs.org/docs/context.html +[react-lifecycle-methods]: https://reactjs.org/docs/state-and-lifecycle.html +[gatsby-unstructured]: /blog/2018-10-25-unstructured-data/ +[authentication-tutorial]: /docs/authentication-tutorial/ +[using-gatsby-image]: https://using-gatsby-image.gatsbyjs.org/ +[traced-svg]: https://using-gatsby-image.gatsbyjs.org/traced-svg/ +[gatsby-plugin-offline]: /packages/gatsby-plugin-offline/ +[gatsby-plugin-sharp]: /packages/gatsby-plugin-sharp/ +[gatsby-source-graphql]: /packages/gatsby-source-graphql/ +[gatsby-source-wordpress]: /packages/gatsby-source-wordpress/ +[gatsby-transformer-yaml]: /packages/gatsby-transformer-yaml/ +[gatsby-plugins]: /plugins +[gatsby-mail-app]: https://gatsby-mail.netlify.com +[gatsby-mail-repo]: https://github.com/dschau/gatsby-mail diff --git a/docs/blog/author.yaml b/docs/blog/author.yaml index 9917544a6fffb..70b1ad499caec 100644 --- a/docs/blog/author.yaml +++ b/docs/blog/author.yaml @@ -3,8 +3,8 @@ avatar: avatars/kyle-mathews.jpeg twitter: "@kylemathews" - id: Dustin Schau - bio: Software Engineer @ GatsbyJS. Likes all things front-end, and travel. And other things too. Blogs at blog.dustinschau.com. - avatar: avatars/dustin-schau.jpeg + bio: Software Engineer @ GatsbyJS. Likes all things JavaScript, and travel. Doesn't totally suck 👋 + avatar: avatars/dustin-schau.png twitter: "@schaudustin" - id: Kostas Bariotis bio: Senior full stack engineer, @devitconf & @skgnodejs co-organizer, http://devastation.tv host, creator of http://janitr.net & others diff --git a/docs/blog/avatars/dustin-schau.jpeg b/docs/blog/avatars/dustin-schau.jpeg deleted file mode 100644 index aa096083a7ca48621f31170d56cd18e6f290718f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19102 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 diff --git a/docs/blog/avatars/dustin-schau.png b/docs/blog/avatars/dustin-schau.png new file mode 100644 index 0000000000000000000000000000000000000000..00de52699babbbfc6682f69a292826e5b88758f1 GIT binary patch literal 23858 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 Date: Wed, 7 Nov 2018 21:11:33 +0100 Subject: [PATCH 222/462] fix(www): update banner children in layout-with-heading (#9794) --- www/src/components/layout.js | 1 + www/src/components/layout/layout-with-heading.js | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/www/src/components/layout.js b/www/src/components/layout.js index 463c5dd90bc5c..6ff8e916a43b0 100644 --- a/www/src/components/layout.js +++ b/www/src/components/layout.js @@ -150,6 +150,7 @@ class DefaultLayout extends React.Component { Skip to main content + {/* !!! If you change the children of Banner remember to do the same in layout/layout-with-heading.js */}
    { Skip to main content - + + + Register now + + {` for “Rise of the Content Mesh: Webcast with Contentful and Gatsby”.`} + From 29ec3443b87d69d3c887df62e20a3703b6844980 Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Wed, 7 Nov 2018 12:26:01 -0800 Subject: [PATCH 223/462] Update index.md --- docs/blog/2018-11-07-gatsby-for-apps/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/blog/2018-11-07-gatsby-for-apps/index.md b/docs/blog/2018-11-07-gatsby-for-apps/index.md index 97b4d192e6da3..240d96cbf2096 100644 --- a/docs/blog/2018-11-07-gatsby-for-apps/index.md +++ b/docs/blog/2018-11-07-gatsby-for-apps/index.md @@ -86,7 +86,7 @@ To illustrate the concept, let's start with a classic example... we need to fetc ```jsx:title=src/pages/messages.js import React from "react" -import Layout from "../compoents/layout" +import Layout from "../components/layout" class Messages extends React.Component { constructor(props) { From f676252876851fe5f9cd8bf4fd279cdf10b6a393 Mon Sep 17 00:00:00 2001 From: Jake Lumetta Date: Wed, 7 Nov 2018 16:29:12 -0600 Subject: [PATCH 224/462] Adding link for better accessibility (#9786) --- docs/blog/2018-2-3-sites-with-headless-cms/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/blog/2018-2-3-sites-with-headless-cms/index.md b/docs/blog/2018-2-3-sites-with-headless-cms/index.md index bc326ac980ec2..9b1c3991d0f77 100644 --- a/docs/blog/2018-2-3-sites-with-headless-cms/index.md +++ b/docs/blog/2018-2-3-sites-with-headless-cms/index.md @@ -73,7 +73,7 @@ Their sleek design impressed me: the left hand side bar and onboarding process w ### ButterCMS -I've read that ButterCMS is particularly good for blogs, and after seeing how easy it is to add metadata and SEO title / metadescription to blog posts, it makes sense why this might be the case. Sometimes there were more clicks than necessary when saving things. And sometimes the jargon in this environment threw me off. Like “object”? What is that? It’s basically a category of content. So, if I’m going to create a lot of event descriptions, the event titles will be one object, the event description, another object, etc. It's an unfamiliar and abstract word for someone new to headless CMSs. +I've read that [ButterCMS](https://buttercms.com) is particularly good for blogs, and after seeing how easy it is to add metadata and SEO title / metadescription to blog posts, it makes sense why this might be the case. Sometimes there were more clicks than necessary when saving things. And sometimes the jargon in this environment threw me off. Like “object”? What is that? It’s basically a category of content. So, if I’m going to create a lot of event descriptions, the event titles will be one object, the event description, another object, etc. It's an unfamiliar and abstract word for someone new to headless CMSs. ### Built.io (Contentstack) From 03ed407efade352a0594bfbc4f8c7bd3e9a5ed0b Mon Sep 17 00:00:00 2001 From: shawn wang Date: Wed, 7 Nov 2018 14:55:07 -0800 Subject: [PATCH 225/462] Update starters.yml to add jamstack-hackathon-starter (#9762) as it says on the tin :) --- docs/starters.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/starters.yml b/docs/starters.yml index 41ca6d1fef86f..cc92f11db9257 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -1138,3 +1138,14 @@ - Storybook v4 support - Styled Components v4 support - Styled Reset, ESLint, Netlify Conf +- url: https://jamstack-hackathon-starter.netlify.com/ + repo: https://github.com/sw-yx/jamstack-hackathon-starter + description: A JAMstack app with authenticated routes, static marketing pages, etc. with Gatsby, Netlify Identity, and Netlify Functions + tags: + - Netlify Identity + - Netlify Functions + - Client-side App + features: + - Netlify Identity + - Netlify Functions + - Static Marketing pages and Dynamic Client-side Authenticated App pages From 18dd91d11506dafbe93833fc36a968bf8c15db0c Mon Sep 17 00:00:00 2001 From: Robin Cussol Date: Wed, 7 Nov 2018 23:57:34 +0100 Subject: [PATCH 226/462] Update unit-testing.md (#9795) Fixes issue #9766 --- docs/docs/unit-testing.md | 51 +++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/docs/docs/unit-testing.md b/docs/docs/unit-testing.md index d6954b73fb5f6..25e8b198b733f 100644 --- a/docs/docs/unit-testing.md +++ b/docs/docs/unit-testing.md @@ -60,32 +60,28 @@ const babelOptions = { module.exports = require("babel-jest").createTransformer(babelOptions) ``` -Back to the Jest config, you can see the next option is `testRegex`. This is the -pattern telling Jest which files contain tests. The pattern above matches any -`.js` file inside a `__tests__` directory, or any file elsewhere with the -extension `.test.js` or `.spec.js`. You are telling Jest to ignore any tests in -the `node_modules` or `.cache` directories. - -The `moduleNameMapper` section works a bit like webpack rules, and tells Jest -how to handle imports. You are mainly concerned here with mocking static file -imports, which Jest can't handle. A mock is a dummy module that is used instead -of the real module inside tests. It is good when you have something that you -can't or don't want to test. You can mock anything, and here you are mocking -assets rather than code. For stylesheets you need to use the package -`identity-obj-proxy`. For all other assets you need to use a manual mock called -`fileMock.js`. You need to create this yourself. The convention is to create a -directory called `__mocks__` in the root directory for this. Note the pair of -double underscores in the name. +Back to the Jest config, you can see the next option is `moduleNameMapper`. This +section works a bit like webpack rules, and tells Jest how to handle imports. +You are mainly concerned here with mocking static file imports, which Jest can't +handle. A mock is a dummy module that is used instead of the real module inside +tests. It is good when you have something that you can't or don't want to test. +You can mock anything, and here you are mocking assets rather than code. For +stylesheets you need to use the package `identity-obj-proxy`. For all other assets +you need to use a manual mock called `fileMock.js`. You need to create this yourself. +The convention is to create a directory called `__mocks__` in the root directory +for this. Note the pair of double underscores in the name. ```js:title=__mocks__/fileMock.js module.exports = "test-file-stub" ``` -The next config setting is `transformIgnorePatterns`. This is very important, -and is different from what you'll find in other Jest guides. The reason that you -need this is because Gastby includes un-transpiled ES6 code. By default Jest -doesn't try to transform code inside `node_modules`, so you will get an error -like this: +The next config setting is `testPathIgnorePatterns`. You are telling Jest to ignore +any tests in the `node_modules` or `.cache` directories. + +The next option is very important, and is different from what you'll find in other +Jest guides. The reason that you need `transformIgnorePatterns` is because Gastby +includes un-transpiled ES6 code. By default Jest doesn't try to transform code +inside `node_modules`, so you will get an error like this: ``` /my-blog/node_modules/gatsby/cache-dir/gatsby-browser-entry.js:1 @@ -274,6 +270,19 @@ module.exports = { } ``` +You may notice that two other options, `testRegex` and `moduleFileExtensions`, +have been added. Option `testRegex` is the pattern telling Jest which files +contain tests. The pattern above matches any `.js`, `.jsx`, `.ts` or `.tsx` +file inside a `__tests__` directory, or any file elsewhere with the extension +`.test.js`, `.test.jsx`, `.test.ts`, `.test.tsx`, or `.spec.js`, `.spec.jsx`, +`.spec.ts`, `.spec.tsx`. + +Option `moduleFileExtensions` is needed when working with TypeScript. +The only thing it is doing is telling Jest which file extensions you can +import in your files without making precise the file extension. By default, +it works with `js`, `json`, `jsx`, `node` file extensions so we just need +to add `ts` and `tsx`. You can read more about it in [Jest's documentation](https://jestjs.io/docs/en/configuration.html#modulefileextensions-array-string). + ## Other resources If you need to make changes to your Babel config, you can edit the config in From 830ec51aad138ffd182f51843587a063b0bd0741 Mon Sep 17 00:00:00 2001 From: Jake Lumetta Date: Wed, 7 Nov 2018 17:03:27 -0600 Subject: [PATCH 227/462] Adds ButterCMS to source list of CMS systems (#9784) One of two changes for https://github.com/gatsbyjs/gatsby/issues/9757 Second change will be a complete guide for ButterCMS. I'll open a new PR for that. --- docs/docs/headless-cms.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/docs/headless-cms.md b/docs/docs/headless-cms.md index d429256d56fdc..c95271f40228b 100644 --- a/docs/docs/headless-cms.md +++ b/docs/docs/headless-cms.md @@ -17,6 +17,7 @@ The guides in this section will walk through the process of setting up content s Other CMS systems you can connect to include: +- [ButterCMS](https://www.gatsbyjs.org/packages/gatsby-source-buttercms/?=gatsby-source-) - [Shopify](https://www.gatsbyjs.org/packages/gatsby-source-shopify/?=gatsby-source-) - [Contentstack](https://www.gatsbyjs.org/packages/gatsby-source-contentstack/?=gatsby-source-) - [Ghost](https://www.gatsbyjs.org/packages/gatsby-source-ghost/?=gatsby-source-) From e2fdb87e126a7940774571337baa6c8f5a651742 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Thu, 8 Nov 2018 00:06:26 +0100 Subject: [PATCH 228/462] fix: linting check on azure/appveyor (#9781) seems like current (bit whacky) patterns don't play nice on windows for some reason, let's try different ones note - there is currently unrelated lint error in `www` so linting should fail - but it should have 1 error instead of thousands of errors on azure/appveyor - with this https://github.com/gatsbyjs/gatsby/pull/9780 should be clear --- .gitattributes | 1 + .prettierignore | 7 ++++--- CHANGELOG.md | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.gitattributes b/.gitattributes index fbb7edfd979e4..a0e422d6c6037 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,4 @@ **/*.js.snap text eol=lf **/__testfixtures__/** text eol=lf **/__tests__/fixtures/** text eol=lf +**/*.md text eol=lf \ No newline at end of file diff --git a/.prettierignore b/.prettierignore index ae05c8a5219b7..7f203c8406704 100644 --- a/.prettierignore +++ b/.prettierignore @@ -16,9 +16,10 @@ www/public **/.cache # ignore built packages -packages/*/*.js -packages/gatsby/cache-dir/commonjs -packages/gatsby/dist +packages/**/*.js +!packages/gatsby/cache-dir/**/*.js +!packages/*/src/**/*.js +packages/gatsby/cache-dir/commonjs/**/*.js # fixtures **/__testfixtures__/** diff --git a/CHANGELOG.md b/CHANGELOG.md index db68aa37e8580..6394bb224f1d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -535,7 +535,7 @@ API changes: - The default layout component should be at `layouts/index.js` not `layouts/default.js` https://github.com/gatsbyjs/gatsby/pull/940#issuecomment-300537162 -- `this.props.children` in layout components is now a _function_ +- `this.props.children` in layout components is now a function https://github.com/gatsbyjs/gatsby/pull/940#issuecomment-300878300 - Change the default port for serve-build to 9000 - Change the path to GraphiQL to `/___graphql` From f032cebe9926c5f57cb04a651cd9b036f3e798df Mon Sep 17 00:00:00 2001 From: jafaircl Date: Wed, 7 Nov 2018 18:11:47 -0500 Subject: [PATCH 229/462] feat: pass pathname to replaceRenderer and onPreRenderHTML SSR APIs (#9792) --- packages/gatsby/cache-dir/static-entry.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/gatsby/cache-dir/static-entry.js b/packages/gatsby/cache-dir/static-entry.js index db6747a5074b3..5013c0a179860 100644 --- a/packages/gatsby/cache-dir/static-entry.js +++ b/packages/gatsby/cache-dir/static-entry.js @@ -180,6 +180,8 @@ export default (pagePath, callback) => { setPreBodyComponents, setPostBodyComponents, setBodyProps, + pathname: pagePath, + pathPrefix: __PATH_PREFIX__, }) // If no one stepped up, we'll handle it. @@ -366,6 +368,8 @@ export default (pagePath, callback) => { replacePreBodyComponents, getPostBodyComponents, replacePostBodyComponents, + pathname: pagePath, + pathPrefix: __PATH_PREFIX__, }) const html = `${renderToStaticMarkup( From 8b1b89b743a8ef462edd37e39692dca432207694 Mon Sep 17 00:00:00 2001 From: Lennart Date: Thu, 8 Nov 2018 01:47:27 +0100 Subject: [PATCH 230/462] feat(www): Re-Organize tags on starters.yml (#9699) - Added "Headless CMS" to entries appropriately - Removed minor tags that create extra noise (Recompose, Prettier, Lint-Staged, TSLint, Tags) and removed them or put them into "Linting". Especially considering that almost all starters have ESLint and Prettier. "Linting" would mean for me that this starter is especially focused on that or has something fancy - Removed invalid Styling tag --- docs/starters.yml | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/docs/starters.yml b/docs/starters.yml index cc92f11db9257..69b413726f9c3 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -52,6 +52,7 @@ tags: - Blog - Contentful + - Headless CMS features: - Based on the Gatsby Starter Blog - Includes Contentful Delivery API for production build @@ -181,6 +182,7 @@ description: n/a tags: - Styling:Bulma + - Storybook features: - Storybook for developing components in isolation - Bulma and Sass support for styling @@ -234,6 +236,7 @@ tags: - i18n - Contentful + - Headless CMS features: - Localization (Multilanguage) - Dynamic content from Contentful CMS @@ -243,6 +246,7 @@ description: n/a tags: - DatoCMS + - Headless CMS features: - Simple portfolio to quick start a site with DatoCMS - Contents and media from DatoCMS @@ -354,6 +358,7 @@ description: A starter template to build amazing static websites with Gatsby, Contentful and Netlify tags: - Contentful + - Headless CMS - Blog - Netlify Form - Styling:CSS-in-JS @@ -532,6 +537,7 @@ tags: - Portfolio - Prismic + - Headless CMS - Styling:CSS-in-JS - Onepage - PWA @@ -597,6 +603,7 @@ tags: - PWA - GraphCMS + - Headless CMS - Apollo Client - Styling:Material - Netlify Identity @@ -795,6 +802,7 @@ description: Contentful and TypeScript starter based on default starter. tags: - Contentful + - Headless CMS - TypeScript - Styling:CSS-in-JS features: @@ -850,7 +858,6 @@ description: Gatsby v2 Starter with i18n using react-intl and more cool features. tags: - Styling:CSS-in-JS - - Recompose - i18n - react-intl - Formik @@ -868,6 +875,7 @@ tags: - Styling:CSS-in-JS - Contentful + - Headless CMS - Portfolio features: - Gatsby v2 @@ -897,6 +905,7 @@ description: A simple starter to display Contentful data in Gatsby, ready to deploy on Netlify. Comes with a detailed article detailing the process. tags: - Contentful + - Headless CMS - Markdown - Styling:CSS-in-JS features: @@ -911,6 +920,7 @@ description: Blog that utilizes the power of the Cosmic JS headless CMS for easy content management tags: - Cosmic JS + - Headless CMS - Blog features: - Uses the Cosmic JS Gatsby source plugin @@ -919,6 +929,7 @@ description: Simple Gatsby starter connected to the Cosmic JS headless CMS for easy content management tags: - Cosmic JS + - Headless CMS features: - Uses the Cosmic JS Gatsby source plugin - url: https://www.gatsby-typescript-template.com/ @@ -926,9 +937,7 @@ description: This is a standard starter with Typescript, TSLint, Prettier, Lint-Staged(Husky) and Sass tags: - TypeScript - - TSLint - - Prettier - - Lint-Staged + - Linting - Styling:SCSS features: - Category and Tag for post @@ -963,7 +972,6 @@ - Styling:CSS-in-JS - Linting - Markdown - - Prettier - SEO features: - Page Transitions @@ -984,6 +992,7 @@ description: A typography-heavy & light-themed Gatsby Starter which uses the Headless CMS Prismic. tags: - Prismic + - Headless CMS - Styling:CSS-in-JS - SEO - Blog @@ -1046,7 +1055,7 @@ tags: - Portfolio - SEO - - Styling:Styled Components + - Styling:CSS-in-JS features: - Features a custom, accessible lightbox with gatsby-image - Styled with styled-components using CSS Grid @@ -1077,7 +1086,7 @@ description: Blog Template X Contentful, Twitter and Facebook style tags: - Blog - - Tags + - Styling:SCSS features: - GatsbyJS v2, faster than faster - Not just Contentful content source, you can use any database From b7992fbf4a70aefcb6363d94713449953ff24eae Mon Sep 17 00:00:00 2001 From: mackie Date: Wed, 7 Nov 2018 17:23:18 -0800 Subject: [PATCH 231/462] fix(gatsby-source-contentful): fix structured content fields (#9768) --- packages/gatsby-source-contentful/src/normalize.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/packages/gatsby-source-contentful/src/normalize.js b/packages/gatsby-source-contentful/src/normalize.js index bc40d002aa198..4fa6e58ec7409 100644 --- a/packages/gatsby-source-contentful/src/normalize.js +++ b/packages/gatsby-source-contentful/src/normalize.js @@ -193,13 +193,7 @@ function prepareTextNode(node, key, text, createNode, createNodeId) { return textNode } -function prepareStructuredTextNode( - node, - key, - content, - createNode, - createNodeId -) { +function prepareStructuredTextNode(node, key, content, createNodeId) { const str = JSON.stringify(content) const structuredTextNode = { ...content, From 6c18a848d181848a4caa511a4c2c7fd727ea48ab Mon Sep 17 00:00:00 2001 From: Anthony Marcar Date: Thu, 8 Nov 2018 12:25:05 +1100 Subject: [PATCH 232/462] chore: refactor run-sift (#9764) * refactor run-sift * update yarn.lock --- packages/gatsby/src/redux/run-sift.js | 479 ++++++++++++++------------ yarn.lock | 12 +- 2 files changed, 267 insertions(+), 224 deletions(-) diff --git a/packages/gatsby/src/redux/run-sift.js b/packages/gatsby/src/redux/run-sift.js index 9fefcb2666e57..558c7f9d48769 100644 --- a/packages/gatsby/src/redux/run-sift.js +++ b/packages/gatsby/src/redux/run-sift.js @@ -18,100 +18,78 @@ const enhancedNodeCacheId = ({ node, args }) => }) : null -function awaitSiftField(fields, node, k) { - const field = fields[k] - if (field.resolve) { - return field.resolve( - node, - {}, - {}, - { - fieldName: k, - } - ) - } else if (node[k] !== undefined) { - return node[k] - } - - return undefined -} - const nodesCache = new Map() -/** - * Filters a list of nodes using mongodb-like syntax. - * - * @param args raw graphql query filter as an object - * @param nodes The nodes array to run sift over - * @param type gqlType - * @param typeName - * @param firstOnly true if you want to return only the first result - * found. This will return a collection of size 1. Not a single - * element - * @returns Collection of results. Collection will be limited to size - * if `firstOnly` is true - */ -module.exports = ({ queryArgs, gqlType, firstOnly = false }: Object) => { - // Clone args as for some reason graphql-js removes the constructor - // from nested objects which breaks a check in sift.js. - const clonedArgs = JSON.parse(JSON.stringify(queryArgs)) - - // this caching can be removed if we move to loki +function loadNodes(type) { let nodes - if (process.env.NODE_ENV === `production` && nodesCache.has(gqlType.name)) { - nodes = nodesCache.get(gqlType.name) + // this caching can be removed if we move to loki + if (process.env.NODE_ENV === `production` && nodesCache.has(type)) { + nodes = nodesCache.get(type) } else { - nodes = getNodesByType(gqlType.name) - nodesCache.set(gqlType.name, nodes) + nodes = getNodesByType(type) + nodesCache.set(type, nodes) } + return nodes +} - const siftifyArgs = object => { - const newObject = {} - _.each(object, (v, k) => { - if (_.isPlainObject(v)) { - if (k === `elemMatch`) { - k = `$elemMatch` - } - newObject[k] = siftifyArgs(v) - } else { - // Compile regex first. - if (k === `regex`) { - newObject[`$regex`] = prepareRegex(v) - } else if (k === `glob`) { - const Minimatch = require(`minimatch`).Minimatch - const mm = new Minimatch(v) - newObject[`$regex`] = mm.makeRe() - } else { - newObject[`$${k}`] = v - } - } - }) - return newObject - } +///////////////////////////////////////////////////////////////////// +// Parse filter +///////////////////////////////////////////////////////////////////// - // Build an object that excludes the innermost leafs, - // this avoids including { eq: x } when resolving fields. - function extractFieldsToSift(prekey, key, preobj, obj, val) { - if (_.isPlainObject(val)) { - _.forEach((val: any), (v, k) => { - if (k === `elemMatch`) { - // elemMatch is operator for arrays and not field we want to prepare - // so we need to skip it - extractFieldsToSift(prekey, key, preobj, obj, v) - return - } - preobj[prekey] = obj - extractFieldsToSift(key, k, obj, {}, v) - }) +function siftifyArgs(object) { + const newObject = {} + _.each(object, (v, k) => { + if (_.isPlainObject(v)) { + if (k === `elemMatch`) { + k = `$elemMatch` + } + newObject[k] = siftifyArgs(v) } else { - preobj[prekey] = true + // Compile regex first. + if (k === `regex`) { + newObject[`$regex`] = prepareRegex(v) + } else if (k === `glob`) { + const Minimatch = require(`minimatch`).Minimatch + const mm = new Minimatch(v) + newObject[`$regex`] = mm.makeRe() + } else { + newObject[`$${k}`] = v + } } + }) + return newObject +} + +// Build an object that excludes the innermost leafs, +// this avoids including { eq: x } when resolving fields. +function extractFieldsToSift(prekey, key, preobj, obj, val) { + if (_.isPlainObject(val)) { + _.forEach((val: any), (v, k) => { + if (k === `elemMatch`) { + // elemMatch is operator for arrays and not field we want to prepare + // so we need to skip it + extractFieldsToSift(prekey, key, preobj, obj, v) + return + } + preobj[prekey] = obj + extractFieldsToSift(key, k, obj, {}, v) + }) + } else { + preobj[prekey] = true } +} +/** + * Parse filter and returns an object with two fields: + * - siftArgs: the filter in a format that sift understands + * - fieldsToSift: filter with operate leaves (e.g { eq: 3 }) + * removed. Used later to resolve all filter fields + */ +function parseFilter(filter) { const siftArgs = [] const fieldsToSift = {} - if (clonedArgs.filter) { - _.each(clonedArgs.filter, (v, k) => { + if (filter) { + _.each(filter, (v, k) => { // Ignore connection and sorting args. if (_.includes([`skip`, `limit`, `sort`], k)) return @@ -123,68 +101,212 @@ module.exports = ({ queryArgs, gqlType, firstOnly = false }: Object) => { extractFieldsToSift(``, k, {}, fieldsToSift, v) }) } + return { siftArgs, fieldsToSift } +} - // Resolves every field used in the node. - function resolveRecursive(node, siftFieldsObj, gqFields) { - return Promise.all( - _.keys(siftFieldsObj).map(k => - Promise.resolve(awaitSiftField(gqFields, node, k)) - .then(v => { - const innerSift = siftFieldsObj[k] - const innerGqConfig = gqFields[k] - if ( - _.isObject(innerSift) && - v != null && - innerGqConfig && - innerGqConfig.type +///////////////////////////////////////////////////////////////////// +// Resolve nodes +///////////////////////////////////////////////////////////////////// + +function isEqId(firstOnly, fieldsToSift, siftArgs) { + return ( + firstOnly && + Object.keys(fieldsToSift).length === 1 && + Object.keys(fieldsToSift)[0] === `id` && + Object.keys(siftArgs[0].id).length === 1 && + Object.keys(siftArgs[0].id)[0] === `$eq` + ) +} + +function awaitSiftField(fields, node, k) { + const field = fields[k] + if (field.resolve) { + return field.resolve( + node, + {}, + {}, + { + fieldName: k, + } + ) + } else if (node[k] !== undefined) { + return node[k] + } + + return undefined +} + +// Resolves every field used in the node. +function resolveRecursive(node, siftFieldsObj, gqFields) { + return Promise.all( + _.keys(siftFieldsObj).map(k => + Promise.resolve(awaitSiftField(gqFields, node, k)) + .then(v => { + const innerSift = siftFieldsObj[k] + const innerGqConfig = gqFields[k] + if ( + _.isObject(innerSift) && + v != null && + innerGqConfig && + innerGqConfig.type + ) { + if (_.isFunction(innerGqConfig.type.getFields)) { + // this is single object + return resolveRecursive( + v, + innerSift, + innerGqConfig.type.getFields() + ) + } else if ( + _.isArray(v) && + innerGqConfig.type.ofType && + _.isFunction(innerGqConfig.type.ofType.getFields) ) { - if (_.isFunction(innerGqConfig.type.getFields)) { - // this is single object - return resolveRecursive( - v, - innerSift, - innerGqConfig.type.getFields() - ) - } else if ( - _.isArray(v) && - innerGqConfig.type.ofType && - _.isFunction(innerGqConfig.type.ofType.getFields) - ) { - // this is array - return Promise.all( - v.map(item => - resolveRecursive( - item, - innerSift, - innerGqConfig.type.ofType.getFields() - ) + // this is array + return Promise.all( + v.map(item => + resolveRecursive( + item, + innerSift, + innerGqConfig.type.ofType.getFields() ) ) - } + ) } + } + + return v + }) + .then(v => [k, v]) + ) + ).then(resolvedFields => { + const myNode = { + ...node, + } + resolvedFields.forEach(([k, v]) => (myNode[k] = v)) + return myNode + }) +} + +function resolveNodes(nodes, typeName, firstOnly, fieldsToSift, gqlFields) { + const nodesCacheKey = JSON.stringify({ + // typeName + count being the same is a pretty good + // indication that the nodes are the same. + typeName, + firstOnly, + nodesLength: nodes.length, + ...fieldsToSift, + }) + if ( + process.env.NODE_ENV === `production` && + resolvedNodesCache.has(nodesCacheKey) + ) { + return Promise.resolve(resolvedNodesCache.get(nodesCacheKey)) + } else { + return Promise.all( + nodes.map(node => { + const cacheKey = enhancedNodeCacheId({ + node, + args: fieldsToSift, + }) + if (cacheKey && enhancedNodeCache.has(cacheKey)) { + return Promise.resolve(enhancedNodeCache.get(cacheKey)) + } else if (cacheKey && enhancedNodePromiseCache.has(cacheKey)) { + return enhancedNodePromiseCache.get(cacheKey) + } - return v + const enhancedNodeGenerationPromise = new Promise(resolve => { + resolveRecursive(node, fieldsToSift, gqlFields).then(resolvedNode => { + trackInlineObjectsInRootNode(resolvedNode) + if (cacheKey) { + enhancedNodeCache.set(cacheKey, resolvedNode) + } + resolve(resolvedNode) }) - .then(v => [k, v]) - ) - ).then(resolvedFields => { - const myNode = { - ...node, - } - resolvedFields.forEach(([k, v]) => (myNode[k] = v)) - return myNode + }) + enhancedNodePromiseCache.set(cacheKey, enhancedNodeGenerationPromise) + return enhancedNodeGenerationPromise + }) + ).then(resolvedNodes => { + resolvedNodesCache.set(nodesCacheKey, resolvedNodes) + return resolvedNodes }) } +} + +///////////////////////////////////////////////////////////////////// +// Run Sift +///////////////////////////////////////////////////////////////////// + +function handleFirst(siftArgs, nodes) { + const index = _.isEmpty(siftArgs) + ? 0 + : sift.indexOf( + { + $and: siftArgs, + }, + nodes + ) + + if (index !== -1) { + return [nodes[index]] + } else { + return [] + } +} + +function handleMany(siftArgs, nodes, sort) { + let result = _.isEmpty(siftArgs) + ? nodes + : sift( + { + $and: siftArgs, + }, + nodes + ) + + if (!result || !result.length) return null + + // Sort results. + if (sort) { + // create functions that return the item to compare on + // uses _.get so nested fields can be retrieved + const convertedFields = sort.fields + .map(field => field.replace(/___/g, `.`)) + .map(field => v => _.get(v, field)) + + result = _.orderBy(result, convertedFields, sort.order) + } + return result +} + +/** + * Filters a list of nodes using mongodb-like syntax. + * + * @param args raw graphql query filter as an object + * @param nodes The nodes array to run sift over (Optional + * will load itself if not present) + * @param type gqlType. Created in build-node-types + * @param firstOnly true if you want to return only the first result + * found. This will return a collection of size 1. Not a single + * element + * @returns Collection of results. Collection will be limited to size + * if `firstOnly` is true + */ +module.exports = (args: Object) => { + const { queryArgs, gqlType, firstOnly = false } = args + // Clone args as for some reason graphql-js removes the constructor + // from nested objects which breaks a check in sift.js. + const clonedArgs = JSON.parse(JSON.stringify(queryArgs)) + + // If nodes weren't provided, then load them from the DB + const nodes = args.nodes || loadNodes(gqlType.name) + + const { siftArgs, fieldsToSift } = parseFilter(clonedArgs.filter) // If the the query for single node only has a filter for an "id" // using "eq" operator, then we'll just grab that ID and return it. - if ( - firstOnly && - Object.keys(fieldsToSift).length === 1 && - Object.keys(fieldsToSift)[0] === `id` && - Object.keys(siftArgs[0].id).length === 1 && - Object.keys(siftArgs[0].id)[0] === `$eq` - ) { + if (isEqId(firstOnly, fieldsToSift, siftArgs)) { return resolveRecursive( getNode(siftArgs[0].id[`$eq`]), fieldsToSift, @@ -192,94 +314,17 @@ module.exports = ({ queryArgs, gqlType, firstOnly = false }: Object) => { ).then(node => (node ? [node] : [])) } - const nodesPromise = () => { - const nodesCacheKey = JSON.stringify({ - // typeName + count being the same is a pretty good - // indication that the nodes are the same. - typeName: gqlType.name, - firstOnly, - nodesLength: nodes.length, - ...fieldsToSift, - }) - if ( - process.env.NODE_ENV === `production` && - resolvedNodesCache.has(nodesCacheKey) - ) { - return Promise.resolve(resolvedNodesCache.get(nodesCacheKey)) - } else { - return Promise.all( - nodes.map(node => { - const cacheKey = enhancedNodeCacheId({ - node, - args: fieldsToSift, - }) - if (cacheKey && enhancedNodeCache.has(cacheKey)) { - return Promise.resolve(enhancedNodeCache.get(cacheKey)) - } else if (cacheKey && enhancedNodePromiseCache.has(cacheKey)) { - return enhancedNodePromiseCache.get(cacheKey) - } - - const enhancedNodeGenerationPromise = new Promise(resolve => { - resolveRecursive(node, fieldsToSift, gqlType.getFields()).then( - resolvedNode => { - trackInlineObjectsInRootNode(resolvedNode) - if (cacheKey) { - enhancedNodeCache.set(cacheKey, resolvedNode) - } - resolve(resolvedNode) - } - ) - }) - enhancedNodePromiseCache.set(cacheKey, enhancedNodeGenerationPromise) - return enhancedNodeGenerationPromise - }) - ).then(resolvedNodes => { - resolvedNodesCache.set(nodesCacheKey, resolvedNodes) - return resolvedNodes - }) - } - } - const tempPromise = nodesPromise().then(myNodes => { + return resolveNodes( + nodes, + gqlType.name, + firstOnly, + fieldsToSift, + gqlType.getFields() + ).then(resolvedNodes => { if (firstOnly) { - const index = _.isEmpty(siftArgs) - ? 0 - : sift.indexOf( - { - $and: siftArgs, - }, - myNodes - ) - - if (index !== -1) { - return [myNodes[index]] - } else { - return [] - } + return handleFirst(siftArgs, resolvedNodes) } else { - let result = _.isEmpty(siftArgs) - ? myNodes - : sift( - { - $and: siftArgs, - }, - myNodes - ) - - if (!result || !result.length) return null - - // Sort results. - if (clonedArgs.sort) { - // create functions that return the item to compare on - // uses _.get so nested fields can be retrieved - const convertedFields = clonedArgs.sort.fields - .map(field => field.replace(/___/g, `.`)) - .map(field => v => _.get(v, field)) - - result = _.orderBy(result, convertedFields, clonedArgs.sort.order) - } - return result + return handleMany(siftArgs, resolvedNodes, clonedArgs.sort) } }) - - return tempPromise } diff --git a/yarn.lock b/yarn.lock index 389886b55b1c7..8a0b3ae8e7707 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2957,13 +2957,6 @@ babel-plugin-lodash@^3.2.11: lodash "^4.17.10" require-package-name "^2.0.1" -babel-plugin-macros@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.4.0.tgz#6c5f9836e1f6c0a9743b3bab4af29f73e437e544" - integrity sha512-flIBfrqAdHWn+4l2cS/4jZEyl+m5EaBHVzTb0aOF+eu/zR7E41/MoCFHPhDNL8Wzq1nyelnXeT+vcL2byFLSZw== - dependencies: - cosmiconfig "^5.0.5" - babel-plugin-macros@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.4.2.tgz#21b1a2e82e2130403c5ff785cba6548e9b644b28" @@ -11509,6 +11502,11 @@ json-stable-stringify@^1.0.0: dependencies: jsonify "~0.0.0" +json-stream-stringify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/json-stream-stringify/-/json-stream-stringify-2.0.1.tgz#8bc0e65ff94567d9010e14c27c043a951cb14939" + integrity sha512-5XymtJXPmzRWZ1UdLQQQXbjHV/E7NAanSClikEqORbkZKOYLSYLNHqRuooyju9W90kJUzknFhX2xvWn4cHluHQ== + json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" From f9714a5646523bc728586e3692190507ad68e6c1 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Thu, 8 Nov 2018 02:36:04 +0100 Subject: [PATCH 233/462] chore(release): Publish - gatsby-cli@2.4.5 - gatsby-codemods@1.0.7 - gatsby-dev-cli@2.4.7 - gatsby-image@2.0.20 - gatsby-plugin-catch-links@2.0.7 - gatsby-plugin-cxs@2.0.2 - gatsby-plugin-google-gtag@1.0.4 - gatsby-plugin-layout@1.0.8 - gatsby-plugin-manifest@2.0.8 - gatsby-plugin-netlify-cms@3.0.7 - gatsby-plugin-netlify@2.0.4 - gatsby-plugin-offline@2.0.13 - gatsby-plugin-page-creator@2.0.4 - gatsby-plugin-remove-trailing-slashes@2.0.5 - gatsby-plugin-sass@2.0.4 - gatsby-remark-autolink-headers@2.0.11 - gatsby-source-contentful@2.0.13 - gatsby-source-drupal@3.0.8 - gatsby-source-filesystem@2.0.8 - gatsby-source-mongodb@2.0.8 - gatsby-source-wordpress@3.0.13 - gatsby-transformer-csv@2.0.4 - gatsby-transformer-javascript-frontmatter@2.0.4 - gatsby-transformer-pdf@1.0.14 - gatsby-transformer-remark@2.1.12 - gatsby-transformer-screenshot@2.0.7 - gatsby-transformer-xml@2.0.4 - gatsby-transformer-yaml@2.1.5 - gatsby@2.0.41 --- packages/gatsby-cli/CHANGELOG.md | 6 ++++++ packages/gatsby-cli/package.json | 2 +- packages/gatsby-codemods/CHANGELOG.md | 6 ++++++ packages/gatsby-codemods/package.json | 2 +- packages/gatsby-dev-cli/CHANGELOG.md | 6 ++++++ packages/gatsby-dev-cli/package.json | 2 +- packages/gatsby-image/CHANGELOG.md | 6 ++++++ packages/gatsby-image/package.json | 2 +- packages/gatsby-plugin-catch-links/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-catch-links/package.json | 2 +- packages/gatsby-plugin-cxs/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-cxs/package.json | 2 +- packages/gatsby-plugin-google-gtag/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-google-gtag/package.json | 2 +- packages/gatsby-plugin-layout/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-layout/package.json | 2 +- packages/gatsby-plugin-manifest/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-manifest/package.json | 2 +- packages/gatsby-plugin-netlify-cms/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-netlify-cms/package.json | 2 +- packages/gatsby-plugin-netlify/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-netlify/package.json | 2 +- packages/gatsby-plugin-offline/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-offline/package.json | 2 +- packages/gatsby-plugin-page-creator/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-page-creator/package.json | 2 +- .../gatsby-plugin-remove-trailing-slashes/CHANGELOG.md | 6 ++++++ .../gatsby-plugin-remove-trailing-slashes/package.json | 2 +- packages/gatsby-plugin-sass/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-sass/package.json | 2 +- packages/gatsby-remark-autolink-headers/CHANGELOG.md | 6 ++++++ packages/gatsby-remark-autolink-headers/package.json | 2 +- packages/gatsby-source-contentful/CHANGELOG.md | 8 ++++++++ packages/gatsby-source-contentful/package.json | 2 +- packages/gatsby-source-drupal/CHANGELOG.md | 6 ++++++ packages/gatsby-source-drupal/package.json | 4 ++-- packages/gatsby-source-filesystem/CHANGELOG.md | 6 ++++++ packages/gatsby-source-filesystem/package.json | 2 +- packages/gatsby-source-mongodb/CHANGELOG.md | 6 ++++++ packages/gatsby-source-mongodb/package.json | 2 +- packages/gatsby-source-wordpress/CHANGELOG.md | 6 ++++++ packages/gatsby-source-wordpress/package.json | 4 ++-- packages/gatsby-transformer-csv/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-csv/package.json | 2 +- .../CHANGELOG.md | 6 ++++++ .../package.json | 2 +- packages/gatsby-transformer-pdf/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-pdf/package.json | 2 +- packages/gatsby-transformer-remark/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-remark/package.json | 2 +- packages/gatsby-transformer-screenshot/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-screenshot/package.json | 2 +- packages/gatsby-transformer-xml/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-xml/package.json | 2 +- packages/gatsby-transformer-yaml/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-yaml/package.json | 2 +- packages/gatsby/CHANGELOG.md | 8 ++++++++ packages/gatsby/package.json | 6 +++--- 58 files changed, 211 insertions(+), 33 deletions(-) diff --git a/packages/gatsby-cli/CHANGELOG.md b/packages/gatsby-cli/CHANGELOG.md index f90de39efd24c..13162eff1d2ea 100644 --- a/packages/gatsby-cli/CHANGELOG.md +++ b/packages/gatsby-cli/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.4.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-cli/compare/gatsby-cli@2.4.4...gatsby-cli@2.4.5) (2018-11-08) + +**Note:** Version bump only for package gatsby-cli + ## [2.4.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-cli/compare/gatsby-cli@2.4.3...gatsby-cli@2.4.4) (2018-10-29) diff --git a/packages/gatsby-cli/package.json b/packages/gatsby-cli/package.json index 9ea4b19eeeeda..f955444270293 100644 --- a/packages/gatsby-cli/package.json +++ b/packages/gatsby-cli/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-cli", "description": "Gatsby command-line interface for creating new sites and running Gatsby commands", - "version": "2.4.4", + "version": "2.4.5", "author": "Kyle Mathews ", "bin": { "gatsby": "lib/index.js" diff --git a/packages/gatsby-codemods/CHANGELOG.md b/packages/gatsby-codemods/CHANGELOG.md index ffb9f792ddf19..296e4580db86b 100644 --- a/packages/gatsby-codemods/CHANGELOG.md +++ b/packages/gatsby-codemods/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [1.0.7](https://github.com/gatsbyjs/gatsby/compare/gatsby-codemods@1.0.6...gatsby-codemods@1.0.7) (2018-11-08) + +**Note:** Version bump only for package gatsby-codemods + ## [1.0.6](https://github.com/gatsbyjs/gatsby/compare/gatsby-codemods@1.0.5...gatsby-codemods@1.0.6) (2018-10-29) diff --git a/packages/gatsby-codemods/package.json b/packages/gatsby-codemods/package.json index 5873723961569..e37a911ca9b5d 100644 --- a/packages/gatsby-codemods/package.json +++ b/packages/gatsby-codemods/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-codemods", - "version": "1.0.6", + "version": "1.0.7", "description": "A collection of codemod scripts for use with JSCodeshift that help migrate to newer versions of Gatsby.", "main": "index.js", "scripts": { diff --git a/packages/gatsby-dev-cli/CHANGELOG.md b/packages/gatsby-dev-cli/CHANGELOG.md index 4a285c1009ea2..aa49b3f7d4059 100644 --- a/packages/gatsby-dev-cli/CHANGELOG.md +++ b/packages/gatsby-dev-cli/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.4.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-dev-cli/compare/gatsby-dev-cli@2.4.6...gatsby-dev-cli@2.4.7) (2018-11-08) + +**Note:** Version bump only for package gatsby-dev-cli + ## [2.4.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-dev-cli/compare/gatsby-dev-cli@2.4.5...gatsby-dev-cli@2.4.6) (2018-10-29) diff --git a/packages/gatsby-dev-cli/package.json b/packages/gatsby-dev-cli/package.json index 9fc5863cc16c1..63cdad2de7039 100644 --- a/packages/gatsby-dev-cli/package.json +++ b/packages/gatsby-dev-cli/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-dev-cli", "description": "CLI helpers for contributors working on Gatsby", - "version": "2.4.6", + "version": "2.4.7", "author": "Kyle Mathews ", "bin": { "gatsby-dev": "./dist/index.js" diff --git a/packages/gatsby-image/CHANGELOG.md b/packages/gatsby-image/CHANGELOG.md index a5c65e9f1f331..d6a6876a4d5a7 100644 --- a/packages/gatsby-image/CHANGELOG.md +++ b/packages/gatsby-image/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.20](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-image/compare/gatsby-image@2.0.19...gatsby-image@2.0.20) (2018-11-08) + +**Note:** Version bump only for package gatsby-image + ## [2.0.19](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-image/compare/gatsby-image@2.0.18...gatsby-image@2.0.19) (2018-10-30) diff --git a/packages/gatsby-image/package.json b/packages/gatsby-image/package.json index c85bc092f7bbc..7fc44eb582712 100644 --- a/packages/gatsby-image/package.json +++ b/packages/gatsby-image/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-image", "description": "Lazy-loading React image component with optional support for the blur-up effect.", - "version": "2.0.19", + "version": "2.0.20", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-catch-links/CHANGELOG.md b/packages/gatsby-plugin-catch-links/CHANGELOG.md index 81aa81c877552..9d0ea65802a6a 100644 --- a/packages/gatsby-plugin-catch-links/CHANGELOG.md +++ b/packages/gatsby-plugin-catch-links/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/compare/gatsby-plugin-catch-links@2.0.6...gatsby-plugin-catch-links@2.0.7) (2018-11-08) + +**Note:** Version bump only for package gatsby-plugin-catch-links + ## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/compare/gatsby-plugin-catch-links@2.0.5...gatsby-plugin-catch-links@2.0.6) (2018-10-29) diff --git a/packages/gatsby-plugin-catch-links/package.json b/packages/gatsby-plugin-catch-links/package.json index 3c749a1ffc813..6e80616ba2894 100644 --- a/packages/gatsby-plugin-catch-links/package.json +++ b/packages/gatsby-plugin-catch-links/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-catch-links", "description": "Intercepts local links from markdown and other non-react pages and does a client-side pushState to avoid the browser having to refresh the page.", - "version": "2.0.6", + "version": "2.0.7", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-cxs/CHANGELOG.md b/packages/gatsby-plugin-cxs/CHANGELOG.md index c74e153b0c68b..40d7ad8189f59 100644 --- a/packages/gatsby-plugin-cxs/CHANGELOG.md +++ b/packages/gatsby-plugin-cxs/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-cxs/compare/gatsby-plugin-cxs@2.0.1...gatsby-plugin-cxs@2.0.2) (2018-11-08) + +**Note:** Version bump only for package gatsby-plugin-cxs + ## [2.0.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-cxs/compare/gatsby-plugin-cxs@1.0.1...gatsby-plugin-cxs@2.0.1) (2018-11-02) diff --git a/packages/gatsby-plugin-cxs/package.json b/packages/gatsby-plugin-cxs/package.json index 937741a80c704..dd1db8ebed19d 100644 --- a/packages/gatsby-plugin-cxs/package.json +++ b/packages/gatsby-plugin-cxs/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-cxs", "description": "Gatsby plugin to add SSR support for ctx", - "version": "2.0.1", + "version": "2.0.2", "author": "Chen-Tai Hou ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-google-gtag/CHANGELOG.md b/packages/gatsby-plugin-google-gtag/CHANGELOG.md index 8ac3e26576ca0..f6838f763619b 100644 --- a/packages/gatsby-plugin-google-gtag/CHANGELOG.md +++ b/packages/gatsby-plugin-google-gtag/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [1.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag/compare/gatsby-plugin-google-gtag@1.0.3...gatsby-plugin-google-gtag@1.0.4) (2018-11-08) + +**Note:** Version bump only for package gatsby-plugin-google-gtag + ## [1.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag/compare/gatsby-plugin-google-gtag@1.0.2...gatsby-plugin-google-gtag@1.0.3) (2018-11-01) diff --git a/packages/gatsby-plugin-google-gtag/package.json b/packages/gatsby-plugin-google-gtag/package.json index 42690ea1a5339..a999374d7f44e 100644 --- a/packages/gatsby-plugin-google-gtag/package.json +++ b/packages/gatsby-plugin-google-gtag/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-google-gtag", "description": "Gatsby plugin to add google gtag onto a site", - "version": "1.0.3", + "version": "1.0.4", "author": "Tyler Buchea ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-layout/CHANGELOG.md b/packages/gatsby-plugin-layout/CHANGELOG.md index 8fd44f309e658..d1865b0cd4df4 100644 --- a/packages/gatsby-plugin-layout/CHANGELOG.md +++ b/packages/gatsby-plugin-layout/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [1.0.8](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-layout@1.0.7...gatsby-plugin-layout@1.0.8) (2018-11-08) + +**Note:** Version bump only for package gatsby-plugin-layout + ## [1.0.7](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-layout@1.0.6...gatsby-plugin-layout@1.0.7) (2018-11-05) diff --git a/packages/gatsby-plugin-layout/package.json b/packages/gatsby-plugin-layout/package.json index bb0f5de53e446..ce3303e305070 100644 --- a/packages/gatsby-plugin-layout/package.json +++ b/packages/gatsby-plugin-layout/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-plugin-layout", - "version": "1.0.7", + "version": "1.0.8", "description": "Reimplements the behavior of layout components in gatsby@1, which was removed in version 2.", "main": "index.js", "scripts": { diff --git a/packages/gatsby-plugin-manifest/CHANGELOG.md b/packages/gatsby-plugin-manifest/CHANGELOG.md index 76605c2b13502..ed0a0b5bc54b0 100644 --- a/packages/gatsby-plugin-manifest/CHANGELOG.md +++ b/packages/gatsby-plugin-manifest/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-manifest/compare/gatsby-plugin-manifest@2.0.7...gatsby-plugin-manifest@2.0.8) (2018-11-08) + +**Note:** Version bump only for package gatsby-plugin-manifest + ## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-manifest/compare/gatsby-plugin-manifest@2.0.6...gatsby-plugin-manifest@2.0.7) (2018-10-29) diff --git a/packages/gatsby-plugin-manifest/package.json b/packages/gatsby-plugin-manifest/package.json index 0288b8935c340..59053ac0fe831 100644 --- a/packages/gatsby-plugin-manifest/package.json +++ b/packages/gatsby-plugin-manifest/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-manifest", "description": "Gatsby plugin which adds a manifest.webmanifest to make sites progressive web apps", - "version": "2.0.7", + "version": "2.0.8", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-netlify-cms/CHANGELOG.md b/packages/gatsby-plugin-netlify-cms/CHANGELOG.md index 38fa051e2f9c3..01a1be2817672 100644 --- a/packages/gatsby-plugin-netlify-cms/CHANGELOG.md +++ b/packages/gatsby-plugin-netlify-cms/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify-cms/compare/gatsby-plugin-netlify-cms@3.0.6...gatsby-plugin-netlify-cms@3.0.7) (2018-11-08) + +**Note:** Version bump only for package gatsby-plugin-netlify-cms + ## [3.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify-cms/compare/gatsby-plugin-netlify-cms@3.0.5...gatsby-plugin-netlify-cms@3.0.6) (2018-11-06) diff --git a/packages/gatsby-plugin-netlify-cms/package.json b/packages/gatsby-plugin-netlify-cms/package.json index a66668c571ee3..795f8babcbb79 100644 --- a/packages/gatsby-plugin-netlify-cms/package.json +++ b/packages/gatsby-plugin-netlify-cms/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-netlify-cms", "description": "A Gatsby plugin which generates the Netlify CMS single page app", - "version": "3.0.6", + "version": "3.0.7", "author": "Shawn Erquhart ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-netlify/CHANGELOG.md b/packages/gatsby-plugin-netlify/CHANGELOG.md index 91b9d1de0fdb1..783e9bf9ad45c 100644 --- a/packages/gatsby-plugin-netlify/CHANGELOG.md +++ b/packages/gatsby-plugin-netlify/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify/compare/gatsby-plugin-netlify@2.0.3...gatsby-plugin-netlify@2.0.4) (2018-11-08) + +**Note:** Version bump only for package gatsby-plugin-netlify + ## [2.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify/compare/gatsby-plugin-netlify@2.0.2...gatsby-plugin-netlify@2.0.3) (2018-10-29) diff --git a/packages/gatsby-plugin-netlify/package.json b/packages/gatsby-plugin-netlify/package.json index 8cc6664b20eda..b471661d96411 100644 --- a/packages/gatsby-plugin-netlify/package.json +++ b/packages/gatsby-plugin-netlify/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-netlify", "description": "A Gatsby plugin which generates a _headers file for netlify", - "version": "2.0.3", + "version": "2.0.4", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-offline/CHANGELOG.md b/packages/gatsby-plugin-offline/CHANGELOG.md index 37c4dbfed009d..174f6dda38434 100644 --- a/packages/gatsby-plugin-offline/CHANGELOG.md +++ b/packages/gatsby-plugin-offline/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.13](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/compare/gatsby-plugin-offline@2.0.12...gatsby-plugin-offline@2.0.13) (2018-11-08) + +**Note:** Version bump only for package gatsby-plugin-offline + ## [2.0.12](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/compare/gatsby-plugin-offline@2.0.11...gatsby-plugin-offline@2.0.12) (2018-11-05) diff --git a/packages/gatsby-plugin-offline/package.json b/packages/gatsby-plugin-offline/package.json index 592e33587ac88..3a51bd18b2e96 100644 --- a/packages/gatsby-plugin-offline/package.json +++ b/packages/gatsby-plugin-offline/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-offline", "description": "Gatsby plugin which sets up a site to be able to run offline", - "version": "2.0.12", + "version": "2.0.13", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-page-creator/CHANGELOG.md b/packages/gatsby-plugin-page-creator/CHANGELOG.md index 23e69ec08514f..d7f0507be067a 100644 --- a/packages/gatsby-plugin-page-creator/CHANGELOG.md +++ b/packages/gatsby-plugin-page-creator/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.4](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-page-creator@2.0.3...gatsby-plugin-page-creator@2.0.4) (2018-11-08) + +**Note:** Version bump only for package gatsby-plugin-page-creator + ## [2.0.3](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-page-creator@2.0.2...gatsby-plugin-page-creator@2.0.3) (2018-11-06) diff --git a/packages/gatsby-plugin-page-creator/package.json b/packages/gatsby-plugin-page-creator/package.json index 59fdb68559683..7a62d2296fff0 100644 --- a/packages/gatsby-plugin-page-creator/package.json +++ b/packages/gatsby-plugin-page-creator/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-plugin-page-creator", - "version": "2.0.3", + "version": "2.0.4", "description": "Gatsby plugin that automatically creates pages from React components in specified directories", "main": "index.js", "scripts": { diff --git a/packages/gatsby-plugin-remove-trailing-slashes/CHANGELOG.md b/packages/gatsby-plugin-remove-trailing-slashes/CHANGELOG.md index cf6bf0fcd9a95..f1c43a6e452f1 100644 --- a/packages/gatsby-plugin-remove-trailing-slashes/CHANGELOG.md +++ b/packages/gatsby-plugin-remove-trailing-slashes/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-remove-trailing-slashes/compare/gatsby-plugin-remove-trailing-slashes@2.0.4...gatsby-plugin-remove-trailing-slashes@2.0.5) (2018-11-08) + +**Note:** Version bump only for package gatsby-plugin-remove-trailing-slashes + ## [2.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-remove-trailing-slashes/compare/gatsby-plugin-remove-trailing-slashes@2.0.3...gatsby-plugin-remove-trailing-slashes@2.0.4) (2018-10-29) diff --git a/packages/gatsby-plugin-remove-trailing-slashes/package.json b/packages/gatsby-plugin-remove-trailing-slashes/package.json index bcaf45ce29e75..df2470770ab00 100644 --- a/packages/gatsby-plugin-remove-trailing-slashes/package.json +++ b/packages/gatsby-plugin-remove-trailing-slashes/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-remove-trailing-slashes", "description": "Removes trailing slashes from your project's paths. For example, yoursite.com/about/ becomes yoursite.com/about", - "version": "2.0.4", + "version": "2.0.5", "author": "scott.eckenthal@gmail.com", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-sass/CHANGELOG.md b/packages/gatsby-plugin-sass/CHANGELOG.md index 4021734bef333..920dd52b509c8 100644 --- a/packages/gatsby-plugin-sass/CHANGELOG.md +++ b/packages/gatsby-plugin-sass/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sass/compare/gatsby-plugin-sass@2.0.3...gatsby-plugin-sass@2.0.4) (2018-11-08) + +**Note:** Version bump only for package gatsby-plugin-sass + ## [2.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sass/compare/gatsby-plugin-sass@2.0.2...gatsby-plugin-sass@2.0.3) (2018-11-01) diff --git a/packages/gatsby-plugin-sass/package.json b/packages/gatsby-plugin-sass/package.json index b96df27246a8f..a9ea0a625499e 100644 --- a/packages/gatsby-plugin-sass/package.json +++ b/packages/gatsby-plugin-sass/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-sass", "description": "Gatsby plugin to handle scss/sass files", - "version": "2.0.3", + "version": "2.0.4", "author": "Daniel Farrell ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-remark-autolink-headers/CHANGELOG.md b/packages/gatsby-remark-autolink-headers/CHANGELOG.md index f8a82c6c8d52a..7928cf3a49cfd 100644 --- a/packages/gatsby-remark-autolink-headers/CHANGELOG.md +++ b/packages/gatsby-remark-autolink-headers/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.11](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-autolink-headers/compare/gatsby-remark-autolink-headers@2.0.10...gatsby-remark-autolink-headers@2.0.11) (2018-11-08) + +**Note:** Version bump only for package gatsby-remark-autolink-headers + ## [2.0.10](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-autolink-headers/compare/gatsby-remark-autolink-headers@2.0.9...gatsby-remark-autolink-headers@2.0.10) (2018-11-02) diff --git a/packages/gatsby-remark-autolink-headers/package.json b/packages/gatsby-remark-autolink-headers/package.json index 541105a456f43..76c6f92a11971 100644 --- a/packages/gatsby-remark-autolink-headers/package.json +++ b/packages/gatsby-remark-autolink-headers/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-autolink-headers", "description": "Gatsby plugin to autolink headers in markdown processed by Remark", - "version": "2.0.10", + "version": "2.0.11", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-source-contentful/CHANGELOG.md b/packages/gatsby-source-contentful/CHANGELOG.md index d74e5501ec3f2..f5d69bcdffd1e 100644 --- a/packages/gatsby-source-contentful/CHANGELOG.md +++ b/packages/gatsby-source-contentful/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.13](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful/compare/gatsby-source-contentful@2.0.12...gatsby-source-contentful@2.0.13) (2018-11-08) + +### Bug Fixes + +- **gatsby-source-contentful:** fix structured content fields ([#9768](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful/issues/9768)) ([b7992fb](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful/commit/b7992fb)) + ## [2.0.12](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful/compare/gatsby-source-contentful@2.0.11...gatsby-source-contentful@2.0.12) (2018-11-06) diff --git a/packages/gatsby-source-contentful/package.json b/packages/gatsby-source-contentful/package.json index 5059cb26e3992..eaf5701a0be98 100644 --- a/packages/gatsby-source-contentful/package.json +++ b/packages/gatsby-source-contentful/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-contentful", "description": "Gatsby source plugin for building websites using the Contentful CMS as a data source", - "version": "2.0.12", + "version": "2.0.13", "author": "Marcus Ericsson (mericsson.com)", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-source-drupal/CHANGELOG.md b/packages/gatsby-source-drupal/CHANGELOG.md index 47141ed47792b..458505d6f85ef 100644 --- a/packages/gatsby-source-drupal/CHANGELOG.md +++ b/packages/gatsby-source-drupal/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-drupal/compare/gatsby-source-drupal@3.0.7...gatsby-source-drupal@3.0.8) (2018-11-08) + +**Note:** Version bump only for package gatsby-source-drupal + ## [3.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-drupal/compare/gatsby-source-drupal@3.0.6...gatsby-source-drupal@3.0.7) (2018-11-01) diff --git a/packages/gatsby-source-drupal/package.json b/packages/gatsby-source-drupal/package.json index edda2d5d2d578..ef2347b458a3a 100644 --- a/packages/gatsby-source-drupal/package.json +++ b/packages/gatsby-source-drupal/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-drupal", "description": "Gatsby source plugin for building websites using the Drupal CMS as a data source", - "version": "3.0.7", + "version": "3.0.8", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -10,7 +10,7 @@ "@babel/runtime": "^7.0.0", "axios": "^0.18.0", "bluebird": "^3.5.0", - "gatsby-source-filesystem": "^2.0.7", + "gatsby-source-filesystem": "^2.0.8", "lodash": "^4.17.10" }, "devDependencies": { diff --git a/packages/gatsby-source-filesystem/CHANGELOG.md b/packages/gatsby-source-filesystem/CHANGELOG.md index 49d7a52417190..98658143015bd 100644 --- a/packages/gatsby-source-filesystem/CHANGELOG.md +++ b/packages/gatsby-source-filesystem/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-filesystem/compare/gatsby-source-filesystem@2.0.7...gatsby-source-filesystem@2.0.8) (2018-11-08) + +**Note:** Version bump only for package gatsby-source-filesystem + ## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-filesystem/compare/gatsby-source-filesystem@2.0.6...gatsby-source-filesystem@2.0.7) (2018-11-01) diff --git a/packages/gatsby-source-filesystem/package.json b/packages/gatsby-source-filesystem/package.json index 14d4eabd7bdee..d0d12c54bd679 100644 --- a/packages/gatsby-source-filesystem/package.json +++ b/packages/gatsby-source-filesystem/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-filesystem", "description": "Gatsby plugin which parses files within a directory for further parsing by other plugins", - "version": "2.0.7", + "version": "2.0.8", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-source-mongodb/CHANGELOG.md b/packages/gatsby-source-mongodb/CHANGELOG.md index a11e853fdfee5..88233aa426e8b 100644 --- a/packages/gatsby-source-mongodb/CHANGELOG.md +++ b/packages/gatsby-source-mongodb/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-mongodb/compare/gatsby-source-mongodb@2.0.7...gatsby-source-mongodb@2.0.8) (2018-11-08) + +**Note:** Version bump only for package gatsby-source-mongodb + ## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-mongodb/compare/gatsby-source-mongodb@2.0.6...gatsby-source-mongodb@2.0.7) (2018-11-01) diff --git a/packages/gatsby-source-mongodb/package.json b/packages/gatsby-source-mongodb/package.json index 19218e846b260..454aa275a2c37 100644 --- a/packages/gatsby-source-mongodb/package.json +++ b/packages/gatsby-source-mongodb/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-mongodb", "description": "Source plugin for pulling data into Gatsby from MongoDB collections", - "version": "2.0.7", + "version": "2.0.8", "author": "jhermans85@hotmail.com", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-source-wordpress/CHANGELOG.md b/packages/gatsby-source-wordpress/CHANGELOG.md index f2fba246cec21..b65863e5e3402 100644 --- a/packages/gatsby-source-wordpress/CHANGELOG.md +++ b/packages/gatsby-source-wordpress/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.13](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-wordpress/compare/gatsby-source-wordpress@3.0.12...gatsby-source-wordpress@3.0.13) (2018-11-08) + +**Note:** Version bump only for package gatsby-source-wordpress + ## [3.0.12](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-wordpress/compare/gatsby-source-wordpress@3.0.11...gatsby-source-wordpress@3.0.12) (2018-11-05) diff --git a/packages/gatsby-source-wordpress/package.json b/packages/gatsby-source-wordpress/package.json index 1152e69c7f6fc..aff4d6cbd0553 100644 --- a/packages/gatsby-source-wordpress/package.json +++ b/packages/gatsby-source-wordpress/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-wordpress", "description": "Gatsby source plugin for building websites using the Wordpress CMS as a data source.", - "version": "3.0.12", + "version": "3.0.13", "author": "Sebastien Fichot ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "bluebird": "^3.5.0", "deep-map": "^1.5.0", "deep-map-keys": "^1.2.0", - "gatsby-source-filesystem": "^2.0.7", + "gatsby-source-filesystem": "^2.0.8", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.10", "minimatch": "^3.0.4", diff --git a/packages/gatsby-transformer-csv/CHANGELOG.md b/packages/gatsby-transformer-csv/CHANGELOG.md index 6e27fe6384f05..75a8dbaa3ac93 100644 --- a/packages/gatsby-transformer-csv/CHANGELOG.md +++ b/packages/gatsby-transformer-csv/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-csv/compare/gatsby-transformer-csv@2.0.3...gatsby-transformer-csv@2.0.4) (2018-11-08) + +**Note:** Version bump only for package gatsby-transformer-csv + ## [2.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-csv/compare/gatsby-transformer-csv@2.0.2...gatsby-transformer-csv@2.0.3) (2018-10-29) diff --git a/packages/gatsby-transformer-csv/package.json b/packages/gatsby-transformer-csv/package.json index 190aa6d2ac9c6..4e8933f55d89d 100644 --- a/packages/gatsby-transformer-csv/package.json +++ b/packages/gatsby-transformer-csv/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-csv", "description": "Gatsby transformer plugin for CSV files", - "version": "2.0.3", + "version": "2.0.4", "author": "Sonal Saldanha ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-transformer-javascript-frontmatter/CHANGELOG.md b/packages/gatsby-transformer-javascript-frontmatter/CHANGELOG.md index 74daa1b7b143a..19acf3868991f 100644 --- a/packages/gatsby-transformer-javascript-frontmatter/CHANGELOG.md +++ b/packages/gatsby-transformer-javascript-frontmatter/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-javascript-frontmatter/compare/gatsby-transformer-javascript-frontmatter@2.0.3...gatsby-transformer-javascript-frontmatter@2.0.4) (2018-11-08) + +**Note:** Version bump only for package gatsby-transformer-javascript-frontmatter + ## [2.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-javascript-frontmatter/compare/gatsby-transformer-javascript-frontmatter@2.0.2...gatsby-transformer-javascript-frontmatter@2.0.3) (2018-10-29) diff --git a/packages/gatsby-transformer-javascript-frontmatter/package.json b/packages/gatsby-transformer-javascript-frontmatter/package.json index 05510d4bc8d25..091e1cdaef1ba 100644 --- a/packages/gatsby-transformer-javascript-frontmatter/package.json +++ b/packages/gatsby-transformer-javascript-frontmatter/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-javascript-frontmatter", "description": "Gatsby transformer plugin for JavaScript to extract exports.frontmatter statically.", - "version": "2.0.3", + "version": "2.0.4", "author": "Jacob Bolda ", "dependencies": { "@babel/parser": "^7.0.0", diff --git a/packages/gatsby-transformer-pdf/CHANGELOG.md b/packages/gatsby-transformer-pdf/CHANGELOG.md index 32607e82244f4..647311d8710e0 100644 --- a/packages/gatsby-transformer-pdf/CHANGELOG.md +++ b/packages/gatsby-transformer-pdf/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [1.0.14](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-pdf/compare/gatsby-transformer-pdf@1.0.13...gatsby-transformer-pdf@1.0.14) (2018-11-08) + +**Note:** Version bump only for package gatsby-transformer-pdf + ## [1.0.13](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-pdf/compare/gatsby-transformer-pdf@1.0.12...gatsby-transformer-pdf@1.0.13) (2018-10-29) diff --git a/packages/gatsby-transformer-pdf/package.json b/packages/gatsby-transformer-pdf/package.json index 0b4d75c928ccd..8acdb3347f108 100644 --- a/packages/gatsby-transformer-pdf/package.json +++ b/packages/gatsby-transformer-pdf/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-pdf", "description": "Gatsby transformer plugin for pdf files", - "version": "1.0.13", + "version": "1.0.14", "author": "Alex Munoz ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-transformer-remark/CHANGELOG.md b/packages/gatsby-transformer-remark/CHANGELOG.md index bc155d977fcc4..87d29139a2c8b 100644 --- a/packages/gatsby-transformer-remark/CHANGELOG.md +++ b/packages/gatsby-transformer-remark/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.1.12](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-remark/compare/gatsby-transformer-remark@2.1.11...gatsby-transformer-remark@2.1.12) (2018-11-08) + +**Note:** Version bump only for package gatsby-transformer-remark + ## [2.1.11](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-remark/compare/gatsby-transformer-remark@2.1.10...gatsby-transformer-remark@2.1.11) (2018-10-29) diff --git a/packages/gatsby-transformer-remark/package.json b/packages/gatsby-transformer-remark/package.json index 4f657a13251d7..4ba183e1d53d6 100644 --- a/packages/gatsby-transformer-remark/package.json +++ b/packages/gatsby-transformer-remark/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-remark", "description": "Gatsby transformer plugin for Markdown using the Remark library and ecosystem", - "version": "2.1.11", + "version": "2.1.12", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-transformer-screenshot/CHANGELOG.md b/packages/gatsby-transformer-screenshot/CHANGELOG.md index fcb30a693a643..958557f133b3c 100644 --- a/packages/gatsby-transformer-screenshot/CHANGELOG.md +++ b/packages/gatsby-transformer-screenshot/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-screenshot/compare/gatsby-transformer-screenshot@2.0.6...gatsby-transformer-screenshot@2.0.7) (2018-11-08) + +**Note:** Version bump only for package gatsby-transformer-screenshot + ## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-screenshot/compare/gatsby-transformer-screenshot@2.0.5...gatsby-transformer-screenshot@2.0.6) (2018-10-29) diff --git a/packages/gatsby-transformer-screenshot/package.json b/packages/gatsby-transformer-screenshot/package.json index e598cc9a486d5..92b3cca9a6149 100644 --- a/packages/gatsby-transformer-screenshot/package.json +++ b/packages/gatsby-transformer-screenshot/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-screenshot", "description": "Gatsby transformer plugin that uses AWS Lambda to take screenshots of websites", - "version": "2.0.6", + "version": "2.0.7", "author": "David Beckley ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-transformer-xml/CHANGELOG.md b/packages/gatsby-transformer-xml/CHANGELOG.md index 3b9a873f384ed..6580a92d1af51 100644 --- a/packages/gatsby-transformer-xml/CHANGELOG.md +++ b/packages/gatsby-transformer-xml/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-xml/compare/gatsby-transformer-xml@2.0.3...gatsby-transformer-xml@2.0.4) (2018-11-08) + +**Note:** Version bump only for package gatsby-transformer-xml + ## [2.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-xml/compare/gatsby-transformer-xml@2.0.2...gatsby-transformer-xml@2.0.3) (2018-10-29) diff --git a/packages/gatsby-transformer-xml/package.json b/packages/gatsby-transformer-xml/package.json index b69e32a8e1667..0f6a0a0cc958d 100644 --- a/packages/gatsby-transformer-xml/package.json +++ b/packages/gatsby-transformer-xml/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-xml", "description": "Gatsby plugin for parsing XML files. It supports also attributes", - "version": "2.0.3", + "version": "2.0.4", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-transformer-yaml/CHANGELOG.md b/packages/gatsby-transformer-yaml/CHANGELOG.md index d90af4a8df284..e5b89c658d304 100644 --- a/packages/gatsby-transformer-yaml/CHANGELOG.md +++ b/packages/gatsby-transformer-yaml/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.1.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-yaml/compare/gatsby-transformer-yaml@2.1.4...gatsby-transformer-yaml@2.1.5) (2018-11-08) + +**Note:** Version bump only for package gatsby-transformer-yaml + ## [2.1.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-yaml/compare/gatsby-transformer-yaml@2.1.3...gatsby-transformer-yaml@2.1.4) (2018-10-29) diff --git a/packages/gatsby-transformer-yaml/package.json b/packages/gatsby-transformer-yaml/package.json index 17b6dae74bb78..6883d5028ed87 100644 --- a/packages/gatsby-transformer-yaml/package.json +++ b/packages/gatsby-transformer-yaml/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-yaml", "description": "Gatsby transformer plugin for yaml", - "version": "2.1.4", + "version": "2.1.5", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 4ee09e39d39cb..d6151e97f1593 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.41](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.40...gatsby@2.0.41) (2018-11-08) + +### Features + +- pass pathname to replaceRenderer and onPreRenderHTML SSR APIs ([#9792](https://github.com/gatsbyjs/gatsby/issues/9792)) ([f032ceb](https://github.com/gatsbyjs/gatsby/commit/f032ceb)) + ## [2.0.40](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.39...gatsby@2.0.40) (2018-11-06) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index c86dbe6893b72..12140ecac6bbe 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.40", + "version": "2.0.41", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" @@ -58,9 +58,9 @@ "flat": "^4.0.0", "friendly-errors-webpack-plugin": "^1.6.1", "fs-extra": "^5.0.0", - "gatsby-cli": "^2.4.4", + "gatsby-cli": "^2.4.5", "gatsby-link": "^2.0.6", - "gatsby-plugin-page-creator": "^2.0.3", + "gatsby-plugin-page-creator": "^2.0.4", "gatsby-react-router-scroll": "^2.0.1", "glob": "^7.1.1", "graphql": "^0.13.2", From a6abb70a0254c2742d539e8a83b2517f3a4d85de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Chrastina?= Date: Thu, 8 Nov 2018 14:20:42 +0100 Subject: [PATCH 234/462] fix(starters): update Kentico Cloud naming conventions (#9813) Adjusting feature list according to the [renaming of modular content elements to linked items](https://developer.kenticocloud.com/v1/reference#linked-content). --- docs/starters.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/starters.yml b/docs/starters.yml index 69b413726f9c3..27d55732bdf2b 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -1132,8 +1132,8 @@ - Gatsby v2 support - Content item <-> content type relationships - Language variants relationships - - Modular content elements relationships - - Modular content relationships in rich text + - Linked items elements relationships + - Content items in Rich text elements relationships - Reverse link relationships - url: https://gatsby-starter-storybook.netlify.com/ repo: https://github.com/markoradak/gatsby-starter-storybook From c4b92837fa519cc8845df380e11f4378242eebea Mon Sep 17 00:00:00 2001 From: Arun Kumar Date: Thu, 8 Nov 2018 18:59:17 +0530 Subject: [PATCH 235/462] fix: use relative HMR path (#9734) Construct webpack hmr path relative to the request origin path to prevent url construction issues when accessing from local ip or any other ip that may be mapped to the dev server. This PR makes following changes to `getHmrPath()` method in `packages/gatsby/src/utils/webpack.config.js` - Always use the relative path `/` - Getting rid of manual url construction with protocol, hosts, ports etc as the relative path will automatically take care of this construction --- packages/gatsby/src/utils/webpack.config.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/gatsby/src/utils/webpack.config.js b/packages/gatsby/src/utils/webpack.config.js index 6aa29a3771d13..eee70b89c9aef 100644 --- a/packages/gatsby/src/utils/webpack.config.js +++ b/packages/gatsby/src/utils/webpack.config.js @@ -71,10 +71,8 @@ module.exports = async ( } function getHmrPath() { - let hmrBasePath = `${program.ssl ? `https` : `http`}://${ - program.host - }:${webpackPort}/` - + // ref: https://github.com/gatsbyjs/gatsby/issues/8348 + let hmrBasePath = `/` const hmrSuffix = `__webpack_hmr&reload=true&overlay=false` if (process.env.GATSBY_WEBPACK_PUBLICPATH) { From a48174dfc09823242d971b001d9dbc58eb5811dc Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Thu, 8 Nov 2018 14:33:41 +0100 Subject: [PATCH 236/462] chore(release): Publish - gatsby@2.0.42 --- packages/gatsby/CHANGELOG.md | 8 ++++++++ packages/gatsby/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index d6151e97f1593..654bb77acc9ff 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.42](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.41...gatsby@2.0.42) (2018-11-08) + +### Bug Fixes + +- use relative HMR path ([#9734](https://github.com/gatsbyjs/gatsby/issues/9734)) ([c4b9283](https://github.com/gatsbyjs/gatsby/commit/c4b9283)) + ## [2.0.41](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.40...gatsby@2.0.41) (2018-11-08) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 12140ecac6bbe..852e80d6f94fc 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.41", + "version": "2.0.42", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From e9d1b80c99bf3e59053cf52628813048bf491995 Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 8 Nov 2018 08:56:24 -0800 Subject: [PATCH 237/462] Remove explicit link to default starter We only added it to the v2 site in order to add the `#v2` at the end so we forgot to clean things up again after --- www/src/pages/docs/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/www/src/pages/docs/index.js b/www/src/pages/docs/index.js index 0eab3104b3b6d..923e7e14437a3 100644 --- a/www/src/pages/docs/index.js +++ b/www/src/pages/docs/index.js @@ -43,7 +43,6 @@ class IndexRoute extends React.Component {
                         
                           gatsby new gatsby-site
    -                      https://github.com/gatsbyjs/gatsby-starter-default
                         
                       
    From ada11ae18557adcc6d6d9607822f9d97da443320 Mon Sep 17 00:00:00 2001 From: Marco Valsecchi Date: Thu, 8 Nov 2018 18:36:44 +0100 Subject: [PATCH 238/462] docs(gatsby-plugin-google-gtag): fix opt out snippet (#9819) --- packages/gatsby-plugin-google-gtag/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby-plugin-google-gtag/README.md b/packages/gatsby-plugin-google-gtag/README.md index 25dae2e70a3e0..7b9f3ce846691 100644 --- a/packages/gatsby-plugin-google-gtag/README.md +++ b/packages/gatsby-plugin-google-gtag/README.md @@ -105,7 +105,7 @@ document.cookie.indexOf(disableStr + "=true") > -1 && (window[disableStr] = !0) If your visitors should be able to set an Opt-Out-Cookie (No future tracking) you can set a link e.g. in your imprint as follows: -`Deactive Google Tracking` +`Deactive Google Tracking` ## The "pluginConfig.respectDNT" option From 0bc76c23d2f22ce59919eaf898c7910e03a89057 Mon Sep 17 00:00:00 2001 From: Andrew Wilson <5093707+andwilson@users.noreply.github.com> Date: Thu, 8 Nov 2018 11:20:55 -0800 Subject: [PATCH 239/462] Added acclimate.io consulting website to showcase (#9820) --- docs/sites.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index 40474b467884c..59f1e7e57a5a5 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3281,3 +3281,15 @@ built_by: Bellhops, Inc. built_by_url: https://www.getbellhops.com/ featured: false +- title: Acclimate Consulting + main_url: https://www.acclimate.io/ + url: https://www.acclimate.io/ + description: >- + Acclimate is a consulting firm that puts organizations back in control with data-driven strategies and full-stack applications. + categories: + - AI + - Technology + - Consulting + built_by: Andrew Wilson + built_by_url: https://github.com/andwilson + featured: false From c7b10f137ccebf3852dc3746c7a7dbd581c02128 Mon Sep 17 00:00:00 2001 From: Osmond van Hemert Date: Thu, 8 Nov 2018 22:02:13 +0100 Subject: [PATCH 240/462] fix: link to creator showcase on submit page (#9822) Fixes broken link on the [Submit to Creator Showcase](https://www.gatsbyjs.org/docs/submit-to-creator-showcase/) page, just below the title. Closes #9761 --- docs/docs/submit-to-creator-showcase.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/submit-to-creator-showcase.md b/docs/docs/submit-to-creator-showcase.md index 2577c0e1abee7..56cea36fdd5e7 100644 --- a/docs/docs/submit-to-creator-showcase.md +++ b/docs/docs/submit-to-creator-showcase.md @@ -2,7 +2,7 @@ title: Submit to Creator Showcase --- -Want to be a part of the [Creator Showcase](link TBA)? Follow these instructions. +Want to be a part of the [Creator Showcase](/showcase)? Follow these instructions. ## Steps From c2c50a88eb6e4b5cc3ec6a98911d500c3728c42e Mon Sep 17 00:00:00 2001 From: Anthony Marcar Date: Fri, 9 Nov 2018 08:34:54 +1100 Subject: [PATCH 241/462] refactor(gatsby): Page dependency resolver (#9732) Anywhere in Gatsby where a graphql resolver returns a node, we need to declare a dependency from the node to the page `context.path`. This code is littered throughout `schema`. Eventually, it would be great to figure out an alternative way to declare these dependencies, since causing side effects in query resolvers isn't ideal, but in the mean time, this PR cleans up the code a bit by introducing a resolver middleware called `pageDependencyResolver`. It executes a given resolver and then creates a page dependency. Another alternative would be to use [graphql-middleware](https://github.com/prisma/graphql-middleware) to run this on all field resolvers. Perhaps another day. --- .../src/redux/actions/add-page-dependency.js | 4 +- packages/gatsby/src/redux/nodes.js | 2 +- .../__tests__/build-node-connections-test.js | 14 ++-- .../schema/__tests__/build-node-types-test.js | 16 ++--- .../__tests__/page-dependency-resolver.js | 10 +++ .../src/schema/build-node-connections.js | 2 +- .../gatsby/src/schema/build-node-types.js | 69 +++++-------------- .../gatsby/src/schema/infer-graphql-type.js | 49 +++++-------- .../src/schema/page-dependency-resolver.js | 36 ++++++++++ packages/gatsby/src/schema/types/type-file.js | 20 ++---- 10 files changed, 99 insertions(+), 123 deletions(-) create mode 100644 packages/gatsby/src/schema/__tests__/page-dependency-resolver.js create mode 100644 packages/gatsby/src/schema/page-dependency-resolver.js diff --git a/packages/gatsby/src/redux/actions/add-page-dependency.js b/packages/gatsby/src/redux/actions/add-page-dependency.js index d971edb4faafa..89d72454472d8 100644 --- a/packages/gatsby/src/redux/actions/add-page-dependency.js +++ b/packages/gatsby/src/redux/actions/add-page-dependency.js @@ -3,7 +3,7 @@ const _ = require(`lodash`) const { store } = require(`../`) const { actions } = require(`../actions.js`) -exports.createPageDependency = ({ path, nodeId, connection }) => { +function createPageDependency({ path, nodeId, connection }) { const state = store.getState() // Check that the dependencies aren't already recorded so we @@ -36,3 +36,5 @@ exports.createPageDependency = ({ path, nodeId, connection }) => { const action = actions.createPageDependency({ path, nodeId, connection }) store.dispatch(action) } + +module.exports = createPageDependency diff --git a/packages/gatsby/src/redux/nodes.js b/packages/gatsby/src/redux/nodes.js index ad182cb8d406d..05e937019e132 100644 --- a/packages/gatsby/src/redux/nodes.js +++ b/packages/gatsby/src/redux/nodes.js @@ -84,7 +84,7 @@ exports.loadNodeContent = node => { * @returns {Object} node */ exports.getNodeAndSavePathDependency = (id, path) => { - const { createPageDependency } = require(`./actions/add-page-dependency`) + const createPageDependency = require(`./actions/add-page-dependency`) const node = getNode(id) createPageDependency({ path, nodeId: id }) return node diff --git a/packages/gatsby/src/schema/__tests__/build-node-connections-test.js b/packages/gatsby/src/schema/__tests__/build-node-connections-test.js index 8661baab85004..9f063e48a062e 100644 --- a/packages/gatsby/src/schema/__tests__/build-node-connections-test.js +++ b/packages/gatsby/src/schema/__tests__/build-node-connections-test.js @@ -1,17 +1,11 @@ const { graphql, GraphQLObjectType, GraphQLSchema } = require(`graphql`) const _ = require(`lodash`) -const buildNodeTypes = require(`../build-node-types`) -const buildNodeConnections = require(`../build-node-connections`) -jest.mock(`../../redux/actions/add-page-dependency`, () => { - return { - createPageDependency: jest.fn(), - } -}) +const createPageDependency = require(`../../redux/actions/add-page-dependency`) +jest.mock(`../../redux/actions/add-page-dependency`) -const { - createPageDependency, -} = require(`../../redux/actions/add-page-dependency`) +const buildNodeTypes = require(`../build-node-types`) +const buildNodeConnections = require(`../build-node-connections`) describe(`build-node-connections`, () => { let schema, store, types, connections diff --git a/packages/gatsby/src/schema/__tests__/build-node-types-test.js b/packages/gatsby/src/schema/__tests__/build-node-types-test.js index 597ca19f86908..af5fab9374af5 100644 --- a/packages/gatsby/src/schema/__tests__/build-node-types-test.js +++ b/packages/gatsby/src/schema/__tests__/build-node-types-test.js @@ -1,17 +1,9 @@ const { graphql, GraphQLObjectType, GraphQLSchema } = require(`graphql`) const _ = require(`lodash`) +const createPageDependency = require(`../../redux/actions/add-page-dependency`) +jest.mock(`../../redux/actions/add-page-dependency`) const buildNodeTypes = require(`../build-node-types`) -jest.mock(`../../redux/actions/add-page-dependency`, () => { - return { - createPageDependency: jest.fn(), - } -}) - -const { - createPageDependency, -} = require(`../../redux/actions/add-page-dependency`) - describe(`build-node-types`, () => { let schema, store, types @@ -155,5 +147,9 @@ describe(`build-node-types`, () => { path: `foo`, nodeId: `p1`, }) + expect(createPageDependency).toHaveBeenCalledWith({ + path: `foo`, + nodeId: `r1`, + }) }) }) diff --git a/packages/gatsby/src/schema/__tests__/page-dependency-resolver.js b/packages/gatsby/src/schema/__tests__/page-dependency-resolver.js new file mode 100644 index 0000000000000..49f33a770cd94 --- /dev/null +++ b/packages/gatsby/src/schema/__tests__/page-dependency-resolver.js @@ -0,0 +1,10 @@ +const pageDependencyResolver = require(`../page-dependency-resolver`) + +describe(`page-dependency-resolver`, () => { + it(`should handle nulls in results`, async () => { + const innerResolver = () => [null] + const resolver = pageDependencyResolver(innerResolver) + const result = await resolver({}, {}) + expect(result).toEqual([null]) + }) +}) diff --git a/packages/gatsby/src/schema/build-node-connections.js b/packages/gatsby/src/schema/build-node-connections.js index d9ab1f6b0c2a6..b9459c3b67fd0 100644 --- a/packages/gatsby/src/schema/build-node-connections.js +++ b/packages/gatsby/src/schema/build-node-connections.js @@ -10,7 +10,7 @@ const { } = require(`./infer-graphql-input-fields-from-fields`) const createSortField = require(`./create-sort-field`) const buildConnectionFields = require(`./build-connection-fields`) -const { createPageDependency } = require(`../redux/actions/add-page-dependency`) +const createPageDependency = require(`../redux/actions/add-page-dependency`) const { connectionFromArray } = require(`graphql-skip-limit`) const { runQuery } = require(`../db/nodes`) diff --git a/packages/gatsby/src/schema/build-node-types.js b/packages/gatsby/src/schema/build-node-types.js index 3b1f4cbd1e8dc..92b230e8d22bc 100644 --- a/packages/gatsby/src/schema/build-node-types.js +++ b/packages/gatsby/src/schema/build-node-types.js @@ -17,12 +17,8 @@ const { inferInputObjectStructureFromNodes, } = require(`./infer-graphql-input-fields`) const { nodeInterface } = require(`./node-interface`) -const { - getNodes, - getNode, - getNodeAndSavePathDependency, -} = require(`../db/nodes`) -const { createPageDependency } = require(`../redux/actions/add-page-dependency`) +const { getNodes, getNode } = require(`../db/nodes`) +const pageDependencyResolver = require(`./page-dependency-resolver`) const { setFileNodeRootType } = require(`./types/type-file`) const { clearTypeExampleValues } = require(`./data-tree-utils`) const { runQuery } = require(`../db/nodes`) @@ -57,16 +53,12 @@ module.exports = async ({ parentSpan }) => { parent: { type: nodeInterface, description: `The parent of this node.`, - resolve(node, a, context) { - return getNodeAndSavePathDependency(node.parent, context.path) - }, + resolve: pageDependencyResolver(node => getNode(node.parent)), }, children: { type: new GraphQLList(nodeInterface), description: `The children of this node.`, - resolve(node, a, { path }) { - return node.children.map(id => getNodeAndSavePathDependency(id, path)) - }, + resolve: pageDependencyResolver(node => node.children.map(getNode)), }, } @@ -90,44 +82,21 @@ module.exports = async ({ parentSpan }) => { defaultNodeFields[_.camelCase(`children ${childNodeType}`)] = { type: new GraphQLList(processedTypes[childNodeType].nodeObjectType), description: `The children of this node of type ${childNodeType}`, - resolve(node, a, { path }) { - const filteredNodes = node.children - .map(id => getNode(id)) - .filter( - ({ internal }) => _.camelCase(internal.type) === childNodeType - ) - - // Add dependencies for the path - filteredNodes.forEach(n => - createPageDependency({ - path, - nodeId: n.id, - }) - ) - return filteredNodes - }, + resolve: pageDependencyResolver(node => + node.children + .map(getNode) + .filter(node => _.camelCase(node.internal.type) === childNodeType) + ), } } else { defaultNodeFields[_.camelCase(`child ${childNodeType}`)] = { type: processedTypes[childNodeType].nodeObjectType, description: `The child of this node of type ${childNodeType}`, - resolve(node, a, { path }) { - const childNode = node.children - .map(id => getNode(id)) - .find( - ({ internal }) => _.camelCase(internal.type) === childNodeType - ) - - if (childNode) { - // Add dependencies for the path - createPageDependency({ - path, - nodeId: childNode.id, - }) - return childNode - } - return null - }, + resolve: pageDependencyResolver(node => + node.children + .map(getNode) + .find(node => _.camelCase(node.internal.type) === childNodeType) + ), } } }) @@ -190,8 +159,7 @@ module.exports = async ({ parentSpan }) => { name: typeName, type: gqlType, args: filterFields, - async resolve(a, queryArgs, context) { - const path = context.path ? context.path : `` + resolve: pageDependencyResolver(async (a, queryArgs) => { if (!_.isObject(queryArgs)) { queryArgs = {} } @@ -207,14 +175,11 @@ module.exports = async ({ parentSpan }) => { }) if (results.length > 0) { - const result = results[0] - const nodeId = result.id - createPageDependency({ path, nodeId }) - return result + return results[0] } else { return null } - }, + }), }, } diff --git a/packages/gatsby/src/schema/infer-graphql-type.js b/packages/gatsby/src/schema/infer-graphql-type.js index 955df13c4db26..df32260b360df 100644 --- a/packages/gatsby/src/schema/infer-graphql-type.js +++ b/packages/gatsby/src/schema/infer-graphql-type.js @@ -14,7 +14,7 @@ const { oneLine } = require(`common-tags`) const { store } = require(`../redux`) const { getNode, getNodes, getNodesByType } = require(`../db/nodes`) -const { createPageDependency } = require(`../redux/actions/add-page-dependency`) +const pageDependencyResolver = require(`./page-dependency-resolver`) const createTypeName = require(`./create-type-name`) const createKey = require(`./create-key`) const { @@ -153,30 +153,20 @@ function inferFromMapping( return null } - const findNode = (fieldValue, path) => { - const linkedNode = _.find( - getNodesByType(linkedType), - n => _.get(n, linkedField) === fieldValue - ) - if (linkedNode) { - createPageDependency({ path, nodeId: linkedNode.id }) - return linkedNode - } - return null - } + const findNode = fieldValue => + getNodesByType(linkedType).find(n => _.get(n, linkedField) === fieldValue) if (_.isArray(value)) { return { type: new GraphQLList(matchedTypes[0].nodeObjectType), - resolve: (node, a, b, { fieldName }) => { + resolve: pageDependencyResolver((node, a, b, { fieldName }) => { const fieldValue = node[fieldName] - if (fieldValue) { - return fieldValue.map(value => findNode(value, b.path)) + return fieldValue.map(findNode) } else { return null } - }, + }), } } @@ -194,21 +184,20 @@ function inferFromMapping( } } +function findLinkedNodeByField(linkedField, value) { + getNodes().find(n => n[linkedField] === value) +} + export function findLinkedNode(value, linkedField, path) { let linkedNode // If the field doesn't link to the id, use that for searching. if (linkedField) { - linkedNode = getNodes().find(n => n[linkedField] === value) + linkedNode = findLinkedNodeByField(linkedField, value) // Else the field is linking to the node's id, the default. } else { linkedNode = getNode(value) } - - if (linkedNode) { - if (path) createPageDependency({ path, nodeId: linkedNode.id }) - return linkedNode - } - return null + return linkedNode } function inferFromFieldName(value, selector, types): GraphQLFieldConfig<*, *> { @@ -249,7 +238,7 @@ function inferFromFieldName(value, selector, types): GraphQLFieldConfig<*, *> { types.find(type => type.name === node.internal.type) if (isArray) { - const linkedNodes = value.map(v => findLinkedNode(v)) + const linkedNodes = value.map(getNode) linkedNodes.forEach(node => validateLinkedNode(node)) const fields = linkedNodes.map(node => findNodeType(node)) fields.forEach((field, i) => validateField(linkedNodes[i], field)) @@ -304,15 +293,9 @@ function inferFromFieldName(value, selector, types): GraphQLFieldConfig<*, *> { validateField(linkedNode, field) return { type: field.nodeObjectType, - resolve: (node, a, b = {}) => { - let fieldValue = node[key] - if (fieldValue) { - const result = findLinkedNode(fieldValue, linkedField, b.path) - return result - } else { - return null - } - }, + resolve: pageDependencyResolver(node => + findLinkedNode(node[key], linkedField) + ), } } diff --git a/packages/gatsby/src/schema/page-dependency-resolver.js b/packages/gatsby/src/schema/page-dependency-resolver.js new file mode 100644 index 0000000000000..b98ef80a9204a --- /dev/null +++ b/packages/gatsby/src/schema/page-dependency-resolver.js @@ -0,0 +1,36 @@ +const _ = require(`lodash`) +const createPageDependency = require(`../redux/actions/add-page-dependency`) + +/** + * A Graphql resolver middleware that runs `resolver` and creates a + * page dependency with the returned node. + * + * @param resolver A graphql resolver. A function that take arguments + * (node, args, context, info) and return a node + * @returns A new graphql resolver + */ +function pageDependencyResolver(resolver) { + return async (node, args, context = {}, info = {}) => { + const { path } = context + const result = await resolver(node, args, context, info) + + // Call createPageDependency on each result + if (path) { + const asArray = _.isArray(result) ? result : [result] + for (const node of asArray) { + if (node) { + // using module.exports here so it can be mocked + createPageDependency({ + path, + nodeId: node.id, + }) + } + } + } + + // Finally return the found node + return result + } +} + +module.exports = pageDependencyResolver diff --git a/packages/gatsby/src/schema/types/type-file.js b/packages/gatsby/src/schema/types/type-file.js index 585821830c9cc..24c5c6c7cd47e 100644 --- a/packages/gatsby/src/schema/types/type-file.js +++ b/packages/gatsby/src/schema/types/type-file.js @@ -8,9 +8,7 @@ const systemPath = require(`path`) const { getNodesByType } = require(`../../db/nodes`) const { findRootNodeAncestor } = require(`../../db/node-tracking`) -const { - createPageDependency, -} = require(`../../redux/actions/add-page-dependency`) +const pageDependencyResolver = require(`../page-dependency-resolver`) const { joinPath } = require(`../../utils/path`) let type, listType @@ -132,7 +130,7 @@ function createType(fileNodeRootType, isArray) { return Object.freeze({ type: isArray ? new GraphQLList(fileNodeRootType) : fileNodeRootType, - resolve: (node, args, { path }, { fieldName }) => { + resolve: pageDependencyResolver((node, args, context, { fieldName }) => { let fieldValue = node[fieldName] if (!fieldValue) { @@ -151,15 +149,7 @@ function createType(fileNodeRootType, isArray) { getNodesByType(`File`), n => n.absolutePath === fileLinkPath ) - if (linkedFileNode) { - createPageDependency({ - path, - nodeId: linkedFileNode.id, - }) - return linkedFileNode - } else { - return null - } + return linkedFileNode } // Find the File node for this node (we assume the node is something @@ -168,11 +158,11 @@ function createType(fileNodeRootType, isArray) { // Find the linked File node(s) if (isArray) { - return fieldValue.map(relativePath => findLinkedFileNode(relativePath)) + return fieldValue.map(findLinkedFileNode) } else { return findLinkedFileNode(fieldValue) } - }, + }), }) } From ab60b49c5495642025a33bd3c862d08082b1b5e3 Mon Sep 17 00:00:00 2001 From: Noah Tye Date: Thu, 8 Nov 2018 13:46:15 -0800 Subject: [PATCH 242/462] Add missing title markup. (#9823) While reading the tutorial doc, I noticed one line that appeared to be missing the title markup. --- docs/tutorial/part-two/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial/part-two/index.md b/docs/tutorial/part-two/index.md index b79cbec502ba2..3ce7e59be5a41 100644 --- a/docs/tutorial/part-two/index.md +++ b/docs/tutorial/part-two/index.md @@ -317,7 +317,7 @@ React in general). Gatsby works out of the box with CSS Modules. -Build a page using CSS Modules. +### Build a page using CSS Modules. First, create a new `Container` component. Create a new directory at `src/components` and then, in this new directory, create a file named From 726a7fea1be10d2fce1b7a8e98c1b6fb16f5505a Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Thu, 8 Nov 2018 22:57:19 +0100 Subject: [PATCH 243/462] chore(release): Publish - gatsby-plugin-google-gtag@1.0.5 - gatsby@2.0.43 --- packages/gatsby-plugin-google-gtag/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-google-gtag/package.json | 2 +- packages/gatsby/CHANGELOG.md | 6 ++++++ packages/gatsby/package.json | 2 +- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/gatsby-plugin-google-gtag/CHANGELOG.md b/packages/gatsby-plugin-google-gtag/CHANGELOG.md index f6838f763619b..3330c234c17df 100644 --- a/packages/gatsby-plugin-google-gtag/CHANGELOG.md +++ b/packages/gatsby-plugin-google-gtag/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [1.0.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag/compare/gatsby-plugin-google-gtag@1.0.4...gatsby-plugin-google-gtag@1.0.5) (2018-11-08) + +**Note:** Version bump only for package gatsby-plugin-google-gtag + ## [1.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag/compare/gatsby-plugin-google-gtag@1.0.3...gatsby-plugin-google-gtag@1.0.4) (2018-11-08) diff --git a/packages/gatsby-plugin-google-gtag/package.json b/packages/gatsby-plugin-google-gtag/package.json index a999374d7f44e..d01e3d24f7a6e 100644 --- a/packages/gatsby-plugin-google-gtag/package.json +++ b/packages/gatsby-plugin-google-gtag/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-google-gtag", "description": "Gatsby plugin to add google gtag onto a site", - "version": "1.0.4", + "version": "1.0.5", "author": "Tyler Buchea ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 654bb77acc9ff..5431d5c093cf7 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.43](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.42...gatsby@2.0.43) (2018-11-08) + +**Note:** Version bump only for package gatsby + ## [2.0.42](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.41...gatsby@2.0.42) (2018-11-08) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 852e80d6f94fc..750acff805fda 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.42", + "version": "2.0.43", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From f54ada452c1d4b0f2a3a0f4291a85dd69e970628 Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Thu, 8 Nov 2018 14:07:02 -0800 Subject: [PATCH 244/462] fix(blog): minor tweaks to gatsby for web apps (#9824) --- docs/blog/2018-11-07-gatsby-for-apps/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/blog/2018-11-07-gatsby-for-apps/index.md b/docs/blog/2018-11-07-gatsby-for-apps/index.md index 240d96cbf2096..8c12eb78195cb 100644 --- a/docs/blog/2018-11-07-gatsby-for-apps/index.md +++ b/docs/blog/2018-11-07-gatsby-for-apps/index.md @@ -45,7 +45,7 @@ Gmail served as an early proof of concept that proved out two, key functional wi 1. Client-side JavaScript can power an app-like experience, and 1. a JavaScript application (running in your browser) can compare favorably to traditional, native applications for desktop and mobile -The impact of these wins can’t be understated. Gmail _proved_ that a native, app-like experience is not only possible for end users, but that it can even be preferable and more convenient than the native experience. We'll revisit to this trusty Gmail web application example in due time. +The impact of these wins can’t be understated. Gmail _proved_ that a native, app-like experience is not only possible for end users, but that it can even be preferable and more convenient than the native experience. We'll revisit this trusty Gmail web application example in due time. Next up, is Twitter, for slightly different reasons. @@ -252,3 +252,4 @@ We can't wait to see what you build. [gatsby-plugins]: /plugins [gatsby-mail-app]: https://gatsby-mail.netlify.com [gatsby-mail-repo]: https://github.com/dschau/gatsby-mail +[apollo-boost]: https://github.com/apollographql/apollo-client/tree/master/packages/apollo-boost From 4538ff32cad3bedbc14ea81c34acab9fc52422aa Mon Sep 17 00:00:00 2001 From: Jason Liquorish Date: Fri, 9 Nov 2018 00:16:12 +0000 Subject: [PATCH 245/462] fix(gatsby-plugin-catch-links): handle SVGAnimatedString href values (#9829) Updates `gatsby-plugin-catch-links` to handle SVG anchors. Fixes #9816 --- packages/gatsby-plugin-catch-links/src/catch-links.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/gatsby-plugin-catch-links/src/catch-links.js b/packages/gatsby-plugin-catch-links/src/catch-links.js index ea96ca0667d28..d60a4cc3fde20 100644 --- a/packages/gatsby-plugin-catch-links/src/catch-links.js +++ b/packages/gatsby-plugin-catch-links/src/catch-links.js @@ -119,6 +119,9 @@ export const routeThroughBrowserOrApp = hrefHandler => event => { // in React. Creating a new anchor element to ensure host value is present const destination = document.createElement(`a`) destination.href = clickedAnchor.href + if (clickedAnchor.href instanceof SVGAnimatedString) { + destination.href = clickedAnchor.href.animVal + } // In IE, the default port is included in the anchor host but excluded from // the location host. This affects the ability to directly compare From cc592b4cfef5148fc64df5ca8789acd81fdfcf2b Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Thu, 8 Nov 2018 16:16:40 -0800 Subject: [PATCH 246/462] chore(release): Publish - gatsby-plugin-catch-links@2.0.8 --- packages/gatsby-plugin-catch-links/CHANGELOG.md | 12 ++++++++++++ packages/gatsby-plugin-catch-links/package.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/gatsby-plugin-catch-links/CHANGELOG.md b/packages/gatsby-plugin-catch-links/CHANGELOG.md index 9d0ea65802a6a..05b8f009e5f9f 100644 --- a/packages/gatsby-plugin-catch-links/CHANGELOG.md +++ b/packages/gatsby-plugin-catch-links/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/compare/gatsby-plugin-catch-links@2.0.7...gatsby-plugin-catch-links@2.0.8) (2018-11-09) + + +### Bug Fixes + +* **gatsby-plugin-catch-links:** handle SVGAnimatedString href values ([#9829](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/issues/9829)) ([4538ff3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/commit/4538ff3)), closes [#9816](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/issues/9816) + + + + + ## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/compare/gatsby-plugin-catch-links@2.0.6...gatsby-plugin-catch-links@2.0.7) (2018-11-08) diff --git a/packages/gatsby-plugin-catch-links/package.json b/packages/gatsby-plugin-catch-links/package.json index 6e80616ba2894..ad932a455f56a 100644 --- a/packages/gatsby-plugin-catch-links/package.json +++ b/packages/gatsby-plugin-catch-links/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-catch-links", "description": "Intercepts local links from markdown and other non-react pages and does a client-side pushState to avoid the browser having to refresh the page.", - "version": "2.0.7", + "version": "2.0.8", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" From 3d1512ebd70dab24b40819590bf4b977003390b0 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Fri, 9 Nov 2018 03:03:08 +0100 Subject: [PATCH 247/462] chore: restore version script (#9830) better safe than sorry --- package.json | 1 + packages/gatsby-plugin-catch-links/CHANGELOG.md | 8 ++------ 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 61cec6ec68b89..753bcb6a017c5 100644 --- a/package.json +++ b/package.json @@ -81,6 +81,7 @@ "test:update": "jest --updateSnapshot", "test:watch": "jest --watch", "test:integration": "jest --config=integration-tests/jest.config.js", + "version": "prettier --write \"**/CHANGELOG.md\"", "watch": "lerna run watch --no-sort --stream --concurrency 999" }, "workspaces": [ diff --git a/packages/gatsby-plugin-catch-links/CHANGELOG.md b/packages/gatsby-plugin-catch-links/CHANGELOG.md index 05b8f009e5f9f..b25dc77da7352 100644 --- a/packages/gatsby-plugin-catch-links/CHANGELOG.md +++ b/packages/gatsby-plugin-catch-links/CHANGELOG.md @@ -4,16 +4,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. -## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/compare/gatsby-plugin-catch-links@2.0.7...gatsby-plugin-catch-links@2.0.8) (2018-11-09) +## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/compare/gatsby-plugin-catch-links@2.0.7...gatsby-plugin-catch-links@2.0.8) (2018-11-09) ### Bug Fixes -* **gatsby-plugin-catch-links:** handle SVGAnimatedString href values ([#9829](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/issues/9829)) ([4538ff3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/commit/4538ff3)), closes [#9816](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/issues/9816) - - - - +- **gatsby-plugin-catch-links:** handle SVGAnimatedString href values ([#9829](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/issues/9829)) ([4538ff3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/commit/4538ff3)), closes [#9816](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/issues/9816) From 7e3227a3762aa72e5bac95467d779dd55ac5e3ab Mon Sep 17 00:00:00 2001 From: Ajay NS Date: Fri, 9 Nov 2018 14:55:10 +0900 Subject: [PATCH 248/462] Add gatsby-starter-plone to Starters library (#9832) --- docs/starters.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/starters.yml b/docs/starters.yml index 27d55732bdf2b..a436bae66574a 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -1158,3 +1158,17 @@ - Netlify Identity - Netlify Functions - Static Marketing pages and Dynamic Client-side Authenticated App pages +- url: https://collective.github.io/gatsby-starter-plone/ + repo: https://github.com/collective/gatsby-starter-plone + description: A Gatsby starter template to build static sites using Plone as the content source + tags: + - Plone + - Headless CMS + - SEO + - Progressive Web App + features: + - Creates 1-1 copy of source Plone site + - Auto generated navigation and breadcrumbs + - Progressive Web App features + - Optimized for performance + - Minimal UI and Styling From 2cd7bfad261b6e13ba8233a3f2a3836cd3cd1ce2 Mon Sep 17 00:00:00 2001 From: Konstantinos Leimonis <1969742+leimonio@users.noreply.github.com> Date: Fri, 9 Nov 2018 13:24:36 +0000 Subject: [PATCH 249/462] feat: show GraphQL compile errors in browser overlay (#6247) This approach to displaying GraphQL compilation errors in the browser console utilizes the WebSocket connecting node running gatsby package responsible for executing GraphQL queries and the cache loaded and used on the browser side (thanks @pieh for helping in this). #5234 --- packages/gatsby/cache-dir/__tests__/.babelrc | 42 +------------ .../__tests__/error-overlay-handler.js | 59 +++++++++++++++++++ .../cache-dir/__tests__/minimal-config.js | 2 + .../gatsby/cache-dir/error-overlay-handler.js | 41 +++++++++++++ packages/gatsby/cache-dir/root.js | 23 ++------ packages/gatsby/cache-dir/socketIo.js | 11 +++- .../query-runner/query-compiler.js | 22 +++++-- .../query-runner/query-runner.js | 5 +- .../gatsby/src/utils/websocket-manager.js | 25 +++++++- 9 files changed, 162 insertions(+), 68 deletions(-) create mode 100644 packages/gatsby/cache-dir/__tests__/error-overlay-handler.js create mode 100644 packages/gatsby/cache-dir/error-overlay-handler.js diff --git a/packages/gatsby/cache-dir/__tests__/.babelrc b/packages/gatsby/cache-dir/__tests__/.babelrc index bde1b665cf99c..b1ff77b727284 100644 --- a/packages/gatsby/cache-dir/__tests__/.babelrc +++ b/packages/gatsby/cache-dir/__tests__/.babelrc @@ -1,41 +1,5 @@ { - babelrc: false, - presets: [ - [ - "@babel/preset-env", - { - loose: true, - modules: false, - useBuiltIns: "usage", - shippedProposals: true, - targets: { - browsers: [">0.25%", "not dead"], - }, - }, - ], - [ - "@babel/preset-react", - { - useBuiltIns: true, - pragma: "React.createElement", - }, - ], - ], - plugins: [ - [ - "@babel/plugin-proposal-class-properties", - { - loose: true, - }, - ], - "@babel/plugin-syntax-dynamic-import", - [ - "@babel/plugin-transform-runtime", - { - helpers: true, - regenerator: true, - corejs: false, - }, - ], - ], + "presets": [ + ["babel-preset-gatsby"] + ] } diff --git a/packages/gatsby/cache-dir/__tests__/error-overlay-handler.js b/packages/gatsby/cache-dir/__tests__/error-overlay-handler.js new file mode 100644 index 0000000000000..088793742e9e4 --- /dev/null +++ b/packages/gatsby/cache-dir/__tests__/error-overlay-handler.js @@ -0,0 +1,59 @@ +import "@babel/polyfill" +const { + reportError, + clearError, + errorMap, +} = require(`../error-overlay-handler`) + +import * as ErrorOverlay from "react-error-overlay" + +jest.mock(`react-error-overlay`, () => { + return { + reportBuildError: jest.fn(), + dismissBuildError: jest.fn(), + startReportingRuntimeErrors: jest.fn(), + setEditorHandler: jest.fn(), + } +}) + +beforeEach(() => { + ErrorOverlay.reportBuildError.mockClear() + ErrorOverlay.dismissBuildError.mockClear() +}) + +describe(`errorOverlayHandler`, () => { + describe(`clearError()`, () => { + beforeEach(() => { + reportError(`foo`, `error`) + reportError(`bar`, `error`) + }) + afterAll(() => { + clearError(`foo`) + clearError(`bar`) + }) + it(`should clear specific error type`, () => { + expect(Object.keys(errorMap)).toHaveLength(2) + clearError(`foo`) + expect(Object.keys(errorMap)).toHaveLength(1) + expect(ErrorOverlay.dismissBuildError).not.toHaveBeenCalled() + }) + + it(`should call ErrorOverlay to dismiss build errors`, () => { + clearError(`foo`) + clearError(`bar`) + expect(ErrorOverlay.dismissBuildError).toHaveBeenCalled() + }) + }) + describe(`reportErrorOverlay()`, () => { + it(`should not add error if it's empty and not call ErrorOverlay`, () => { + reportError(`foo`, null) + expect(Object.keys(errorMap)).toHaveLength(0) + expect(ErrorOverlay.reportBuildError).not.toHaveBeenCalled() + }) + it(`should add error if it has a truthy value and call ErrorOverlay`, () => { + reportError(`foo`, `bar`) + expect(Object.keys(errorMap)).toHaveLength(1) + expect(ErrorOverlay.reportBuildError).toHaveBeenCalled() + }) + }) +}) diff --git a/packages/gatsby/cache-dir/__tests__/minimal-config.js b/packages/gatsby/cache-dir/__tests__/minimal-config.js index e81b3421a7c2e..7f7f7c9d59529 100644 --- a/packages/gatsby/cache-dir/__tests__/minimal-config.js +++ b/packages/gatsby/cache-dir/__tests__/minimal-config.js @@ -9,6 +9,8 @@ it( path.join(__dirname, `..`), `--config-file`, path.join(__dirname, `.babelrc`), + `--ignore`, + `**/__tests__`, ] const spawn = child.spawn(process.execPath, args) diff --git a/packages/gatsby/cache-dir/error-overlay-handler.js b/packages/gatsby/cache-dir/error-overlay-handler.js new file mode 100644 index 0000000000000..038156789e0f0 --- /dev/null +++ b/packages/gatsby/cache-dir/error-overlay-handler.js @@ -0,0 +1,41 @@ +import * as ErrorOverlay from "react-error-overlay" + +// Report runtime errors +ErrorOverlay.startReportingRuntimeErrors({ + onError: () => {}, + filename: `/commons.js`, +}) +ErrorOverlay.setEditorHandler(errorLocation => + window.fetch( + `/__open-stack-frame-in-editor?fileName=` + + window.encodeURIComponent(errorLocation.fileName) + + `&lineNumber=` + + window.encodeURIComponent(errorLocation.lineNumber || 1) + ) +) + +const errorMap = {} + +const handleErrorOverlay = () => { + const errors = Object.values(errorMap) + if (errors.length > 0) { + const errorMsg = errors.join(`\n\n`) + ErrorOverlay.reportBuildError(errorMsg) + } else { + ErrorOverlay.dismissBuildError() + } +} + +export const clearError = errorID => { + delete errorMap[errorID] + handleErrorOverlay() +} + +export const reportError = (errorID, error) => { + if (error) { + errorMap[errorID] = error + } + handleErrorOverlay() +} + +export { errorMap } diff --git a/packages/gatsby/cache-dir/root.js b/packages/gatsby/cache-dir/root.js index 40e4e6d87d81e..927c97add7841 100644 --- a/packages/gatsby/cache-dir/root.js +++ b/packages/gatsby/cache-dir/root.js @@ -13,34 +13,21 @@ import loader from "./loader" import JSONStore from "./json-store" import EnsureResources from "./ensure-resources" -import * as ErrorOverlay from "react-error-overlay" - -// Report runtime errors -ErrorOverlay.startReportingRuntimeErrors({ - onError: () => {}, - filename: `/commons.js`, -}) -ErrorOverlay.setEditorHandler(errorLocation => - window.fetch( - `/__open-stack-frame-in-editor?fileName=` + - window.encodeURIComponent(errorLocation.fileName) + - `&lineNumber=` + - window.encodeURIComponent(errorLocation.lineNumber || 1) - ) -) +import { reportError, clearError } from "./error-overlay-handler" if (window.__webpack_hot_middleware_reporter__ !== undefined) { + const overlayErrorID = `webpack` // Report build errors window.__webpack_hot_middleware_reporter__.useCustomOverlay({ showProblems(type, obj) { if (type !== `errors`) { - ErrorOverlay.dismissBuildError() + clearError(overlayErrorID) return } - ErrorOverlay.reportBuildError(obj[0]) + reportError(overlayErrorID, obj[0]) }, clear() { - ErrorOverlay.dismissBuildError() + clearError(overlayErrorID) }, }) } diff --git a/packages/gatsby/cache-dir/socketIo.js b/packages/gatsby/cache-dir/socketIo.js index 799b08cb2abe7..978f7db8966d1 100644 --- a/packages/gatsby/cache-dir/socketIo.js +++ b/packages/gatsby/cache-dir/socketIo.js @@ -1,3 +1,5 @@ +import { reportError, clearError } from "./error-overlay-handler" + let socket = null let staticQueryData = {} @@ -29,14 +31,19 @@ export default function socketIo() { [msg.payload.id]: msg.payload.result, } } - } - if (msg.type === `pageQueryResult`) { + } else if (msg.type === `pageQueryResult`) { if (didDataChange(msg, pageQueryData)) { pageQueryData = { ...pageQueryData, [msg.payload.id]: msg.payload.result, } } + } else if (msg.type === `overlayError`) { + if (msg.payload.message) { + reportError(msg.payload.id, msg.payload.message) + } else { + clearError(msg.payload.id) + } } if (msg.type && msg.payload) { ___emitter.emit(msg.type, msg.payload) diff --git a/packages/gatsby/src/internal-plugins/query-runner/query-compiler.js b/packages/gatsby/src/internal-plugins/query-runner/query-compiler.js index 6821940280239..e37e85e3829ab 100644 --- a/packages/gatsby/src/internal-plugins/query-runner/query-compiler.js +++ b/packages/gatsby/src/internal-plugins/query-runner/query-compiler.js @@ -20,6 +20,7 @@ import { multipleRootQueriesError, } from "./graphql-errors" import report from "gatsby-cli/lib/reporter" +const websocketManager = require(`../../utils/websocket-manager`) import type { DocumentNode, GraphQLSchema } from "graphql" @@ -60,9 +61,13 @@ const validationRules = [ VariablesInAllowedPositionRule, ] +let lastRunHadErrors = null +const overlayErrorID = `graphql-compiler` + class Runner { baseDir: string schema: GraphQLSchema + errors: string[] fragmentsDir: string constructor(baseDir: string, fragmentsDir: string, schema: GraphQLSchema) { @@ -72,10 +77,11 @@ class Runner { } reportError(message) { - if (process.env.NODE_ENV === `production`) { - report.panic(`${report.format.red(`GraphQL Error`)} ${message}`) - } else { - report.log(`${report.format.red(`GraphQL Error`)} ${message}`) + const queryErrorMessage = `${report.format.red(`GraphQL Error`)} ${message}` + report.panicOnBuild(queryErrorMessage) + if (process.env.gatsby_executing_command === `develop`) { + websocketManager.emitError(overlayErrorID, queryErrorMessage) + lastRunHadErrors = true } } @@ -200,6 +206,14 @@ class Runner { compiledNodes.set(filePath, query) }) + if ( + process.env.gatsby_executing_command === `develop` && + lastRunHadErrors + ) { + websocketManager.emitError(overlayErrorID, null) + lastRunHadErrors = false + } + return compiledNodes } } diff --git a/packages/gatsby/src/internal-plugins/query-runner/query-runner.js b/packages/gatsby/src/internal-plugins/query-runner/query-runner.js index c8b40a52b4118..1e3197efc43f4 100644 --- a/packages/gatsby/src/internal-plugins/query-runner/query-runner.js +++ b/packages/gatsby/src/internal-plugins/query-runner/query-runner.js @@ -32,7 +32,6 @@ module.exports = async (queryJob: QueryJob, component: Any) => { // Run query let result - // Nothing to do if the query doesn't exist. if (!queryJob.query || queryJob.query === ``) { result = {} @@ -97,9 +96,7 @@ ${formatErrorDetails(errorDetails)}`) dataPath = queryJob.hash } - const programType = program._[0] - - if (programType === `develop`) { + if (process.env.gatsby_executing_command === `develop`) { if (queryJob.isPage) { websocketManager.emitPageData({ result, diff --git a/packages/gatsby/src/utils/websocket-manager.js b/packages/gatsby/src/utils/websocket-manager.js index 4441d2a7cf825..483b063593aac 100644 --- a/packages/gatsby/src/utils/websocket-manager.js +++ b/packages/gatsby/src/utils/websocket-manager.js @@ -92,6 +92,7 @@ const getRoomNameFromPath = (path: string): string => `path-${path}` class WebsocketManager { pageResults: QueryResultsMap staticQueryResults: QueryResultsMap + errors: Map isInitialised: boolean activePaths: Set programDir: string @@ -101,6 +102,7 @@ class WebsocketManager { this.activePaths = new Set() this.pageResults = new Map() this.staticQueryResults = new Map() + this.errors = new Map() this.websocket this.programDir @@ -108,6 +110,7 @@ class WebsocketManager { this.getSocket = this.getSocket.bind(this) this.emitPageData = this.emitPageData.bind(this) this.emitStaticQueryData = this.emitStaticQueryData.bind(this) + this.emitError = this.emitError.bind(this) } init({ server, directory }) { @@ -133,6 +136,15 @@ class WebsocketManager { payload: result, }) }) + this.errors.forEach((message, errorID) => { + this.websocket.send({ + type: `overlayError`, + payload: { + id: errorID, + message, + }, + }) + }) const leaveRoom = path => { s.leave(getRoomNameFromPath(path)) @@ -194,10 +206,21 @@ class WebsocketManager { } emitPageData(data: QueryResult) { + this.pageResults.set(data.id, data) if (this.isInitialised) { this.websocket.send({ type: `pageQueryResult`, payload: data }) } - this.pageResults.set(data.id, data) + } + emitError(id: string, message?: string) { + if (message) { + this.errors.set(id, message) + } else { + this.errors.delete(id) + } + + if (this.isInitialised) { + this.websocket.send({ type: `overlayError`, payload: { id, message } }) + } } } From fc06ee9d95de52f3d5acfb60bfa369765064a7d2 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Fri, 9 Nov 2018 14:27:57 +0100 Subject: [PATCH 250/462] chore(release): Publish - gatsby@2.0.44 --- packages/gatsby/CHANGELOG.md | 8 ++++++++ packages/gatsby/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 5431d5c093cf7..3ee5f2c603eda 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.44](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.43...gatsby@2.0.44) (2018-11-09) + +### Features + +- show GraphQL compile errors in browser overlay ([#6247](https://github.com/gatsbyjs/gatsby/issues/6247)) ([2cd7bfa](https://github.com/gatsbyjs/gatsby/commit/2cd7bfa)), closes [#5234](https://github.com/gatsbyjs/gatsby/issues/5234) + ## [2.0.43](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.42...gatsby@2.0.43) (2018-11-08) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 750acff805fda..e4a0b15612b21 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.43", + "version": "2.0.44", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From 4064e3519001187ac8904f6dcd9a062f785d408e Mon Sep 17 00:00:00 2001 From: Amberley Date: Fri, 9 Nov 2018 12:46:28 -0600 Subject: [PATCH 251/462] feat(starters): Filter v2 by default (#9739) * Filter for v2 starters by default. #7900 * WIP * fix reset all filters issue * move out default search option * wip * refactor to use render prop * fix filtersApplied for metadata * pr refactor * linting --- packages/gatsby-plugin-google-gtag/README.md | 2 +- www/src/utils/reach-router-state-manager.js | 76 ++++++++++++------- .../starter-library/filtered-starters.js | 6 +- www/src/views/starter-library/index.js | 27 +++++-- 4 files changed, 73 insertions(+), 38 deletions(-) diff --git a/packages/gatsby-plugin-google-gtag/README.md b/packages/gatsby-plugin-google-gtag/README.md index 7b9f3ce846691..02e9cc8f8efe3 100644 --- a/packages/gatsby-plugin-google-gtag/README.md +++ b/packages/gatsby-plugin-google-gtag/README.md @@ -74,7 +74,7 @@ To use it, simply import it and use it like you would the `` element e.g. import React from "react" import { OutboundLink } from "gatsby-plugin-google-gtag" -export default () => ( +export default () => {
    Visit the Google Global Site Tag plugin page! diff --git a/www/src/utils/reach-router-state-manager.js b/www/src/utils/reach-router-state-manager.js index 5a1926d93ff07..9b820b6216e0b 100644 --- a/www/src/utils/reach-router-state-manager.js +++ b/www/src/utils/reach-router-state-manager.js @@ -1,33 +1,55 @@ -import React from "react" +import React, { Component, Fragment } from "react" import queryString from "query-string" import { navigate } from "@reach/router" -// manage your state entirely within the router, so that it's copiable -// https://gist.github.com/sw-yx/efd9ee71669413bca6a895d87e30742f - -export default defaultURLState => Component => props => { - const { location } = props - const urlState = { ...defaultURLState, ...queryString.parse(location.search) } - const setURLState = newState => { - const finalState = { ...urlState, ...newState } // merge with existing urlstate - Object.keys(finalState).forEach(function(k) { - if ( - // Don't save some state values if it meets the conditions below. - !finalState[k] || // falsy - finalState[k] === `` || // string - (Array.isArray(finalState[k]) && !finalState[k].length) || // array - finalState[k] === defaultURLState[k] // same as default state, unnecessary - ) { - delete finalState[k] // Drop query params with new values = falsy +const emptySearchState = { s: ``, c: [], d: [], v: [], sort: `recent` } +class RRSM extends Component { + state = emptySearchState + + static defaultProps = { + defaultSearchState: {}, + } + + setUrlState = newState => { + const finalState = { ...this.state, ...newState } + // update RSSM state + this.setState({ ...finalState }) + + // sync url to RSSM + const params = Object.keys(finalState).reduce((merged, key) => { + // right now the sort behavior is default, it doesn't show in the url + if (finalState[key] && key !== `sort`) { + merged[key] = finalState[key] } - }) - return navigate(`${location.pathname}?${queryString.stringify(finalState)}`) + return merged + }, {}) + + return navigate(`${location.pathname}?${queryString.stringify(params)}`) + } + + componentDidMount() { + const urlState = queryString.parse(location.search) + + // if urlState is empty, default to v2 + if (Object.keys(urlState).length === 0) { + return this.setUrlState(this.props.defaultSearchState) + } + + // otherwise, set to urlState + return this.setUrlState(urlState) + } + + render() { + const { render } = this.props + return ( + + {render({ + setURLState: this.setUrlState, + urlState: this.state, + })} + + ) } - return ( - - ) } + +export default RRSM diff --git a/www/src/views/starter-library/filtered-starters.js b/www/src/views/starter-library/filtered-starters.js index 0e8dc7ee2d406..304c667c07d9f 100644 --- a/www/src/views/starter-library/filtered-starters.js +++ b/www/src/views/starter-library/filtered-starters.js @@ -27,8 +27,9 @@ export default class FilteredStarterLibrary extends Component { state = { sitesToShow: 12, } - setFiltersCategory = filtersCategory => + setFiltersCategory = filtersCategory => { this.props.setURLState({ c: Array.from(filtersCategory) }) + } setFiltersDependency = filtersDependency => this.props.setURLState({ d: Array.from(filtersDependency) }) setFiltersVersion = filtersVersion => @@ -37,8 +38,7 @@ export default class FilteredStarterLibrary extends Component { this.props.setURLState({ sort: this.props.urlState.sort === `recent` ? `stars` : `recent`, }) - resetFilters = () => - this.props.setURLState({ c: null, d: null, v: null, s: `` }) + resetFilters = () => this.props.setURLState({ c: [], d: [], v: [], s: `` }) showMoreSites = starters => { let showAll = this.state.sitesToShow + 15 > starters.length ? starters.length : false diff --git a/www/src/views/starter-library/index.js b/www/src/views/starter-library/index.js index 40d449dce9ece..5217530824de1 100644 --- a/www/src/views/starter-library/index.js +++ b/www/src/views/starter-library/index.js @@ -2,6 +2,7 @@ import React, { Component } from "react" import Helmet from "react-helmet" import Layout from "../../components/layout" import RRSM from "../../utils/reach-router-state-manager" +import queryString from "query-string" import FilteredStarters from "./filtered-starters" @@ -11,13 +12,16 @@ class StarterLibraryPage extends Component { return JSON.stringify(this.props) !== JSON.stringify(nextProps) } render() { - const { location, urlState } = this.props + const { location } = this.props + const urlState = queryString.parse(location.search) + const filtersApplied = - urlState.s !== `` + urlState.s !== undefined ? urlState.s // if theres a search term : urlState.d && !Array.isArray(urlState.d) ? urlState.d // if theres a single dependency - : `Showcase` // if no search term or single dependency + : `Library` // if no search term or single dependency + return ( @@ -39,12 +43,21 @@ class StarterLibraryPage extends Component { - + ( + + )} + defaultSearchState={{ v: [`2`] }} + /> ) } } -export default RRSM({ s: ``, c: [], d: [], v: [], sort: `recent` })( - StarterLibraryPage -) +export default StarterLibraryPage From 9b7dc7cf4425a5ebb34c67020f42665cc21b5bca Mon Sep 17 00:00:00 2001 From: Josh Branchaud Date: Fri, 9 Nov 2018 13:56:09 -0600 Subject: [PATCH 252/462] feat(docs): add programmatically creating pages (#9069) * Add guide for programmatically creating pages closes #8841 * Add an Other Resources section * Address comments from review (@pieh) * activate docs sidebar link --- ...programmatically-create-pages-from-data.md | 114 +++++++++++++++++- www/src/data/sidebars/doc-links.yaml | 2 +- 2 files changed, 112 insertions(+), 4 deletions(-) diff --git a/docs/docs/programmatically-create-pages-from-data.md b/docs/docs/programmatically-create-pages-from-data.md index d04c327f971ed..decb71d82738f 100644 --- a/docs/docs/programmatically-create-pages-from-data.md +++ b/docs/docs/programmatically-create-pages-from-data.md @@ -2,7 +2,115 @@ title: Programmatically create pages from data --- -This is a stub. Help our community expand it. +Gatsby and its ecosystem of plugins provide all kinds of data through a +GraphQL interface. This guide will show how that data can be used to +programmatically create pages. -Please use the [Gatsby Style Guide](/docs/gatsby-style-guide/) to ensure your -pull request gets accepted. +### Prerequisites + +Though you can use any data source you'd like, this guide will show how to +create pages from markdown files (following after the example introduced in +[earlier guides](https://www.gatsbyjs.org/docs/adding-markdown-pages/)). + +### Creating Pages + +The Gatsby Node API provides the +[`createPages`](https://www.gatsbyjs.org/docs/node-apis/#createPages) +extension point which we'll use to add pages. This function will give us +access to the +[`createPage`](https://www.gatsbyjs.org/docs/actions/#createPage) action +which is at the core of programmatically creating a page. + +```javascript{17-25}:title=gatsby-node.js +exports.createPages = ({ graphql, actions }) => { + const { createPage } = actions; + return new Promise((resolve, reject) => { + graphql(` + { + allMarkdownRemark { + edges { + node { + fields { + slug + } + } + } + } + } + `).then(result => { + result.data.allMarkdownRemark.edges.forEach(({ node }) => { + createPage({ + path: node.fields.slug, + component: path.resolve(`./src/templates/blog-post.js`), + context: { + slug: node.fields.slug, + }, + }); + }); + resolve(); + }); + }); +}; +``` + +For each page we want to create we must specify the `path` for visiting that +page, the `component` template used to render that page, and any `context` +we need in the component for rendering. The `context` parameter is +_optional_ though often times it will include a unique identifier that can +be used to query for associated data that will be rendered to the page. + +### Specifying A Template + +The `createPage` action required that we specify the `component` template +that will be used to render the page. Here is an example of what the +referenced template could look like: + +```javascript:title=gatsby-node.js +import React from 'react'; +import { graphql } from 'gatsby'; +import Layout from '../components/layout'; + +export default ({ data }) => { + const post = data.markdownRemark; + return ( + +
    +

    + {post.frontmatter.title} +

    +
    +
    + + ); +}; + +export const query = graphql` + query($slug: String!) { + markdownRemark(fields: { slug: { eq: $slug } }) { + html + frontmatter { + title + } + } + } +`; +``` + +Notice that the `slug` value we specified in the `createPage` context is +used in the template's GraphQL query. As a result we can provide the `title` +and `html` from the matching `markdownRemark` record to our component. The +context is also available as the `pageContext` prop in the template +component itself. + +### Not Just Markdown + +The +[`gatsby-transformer-remark`](https://www.gatsbyjs.org/packages/gatsby-transformer-remark/) +plugin is just one of a multitude of Gatsby plugins that can provide data +through the GraphQL interface. Any of that data can be used to +programmatically create pages. + +### Other Resources + +- [Example Repository](https://github.com/jbranchaud/gatsby-programmatic-pages) +- [Using Unstructured Data](https://www.gatsbyjs.org/docs/using-unstructured-data/) diff --git a/www/src/data/sidebars/doc-links.yaml b/www/src/data/sidebars/doc-links.yaml index 42248e219ea4b..5ec3e6a889ddd 100644 --- a/www/src/data/sidebars/doc-links.yaml +++ b/www/src/data/sidebars/doc-links.yaml @@ -121,7 +121,7 @@ link: /docs/using-fragments/ - title: Creating slugs for pages link: /docs/creating-slugs-for-pages/ - - title: Programmatically create pages from data* + - title: Programmatically create pages from data link: /docs/programmatically-create-pages-from-data/ - title: Plugins link: /docs/plugins/ From b605ade81cfd5714546432712682f06425025f7b Mon Sep 17 00:00:00 2001 From: Valeriy Date: Fri, 9 Nov 2018 23:45:52 +0300 Subject: [PATCH 253/462] fix: handle development proxy exceptions and show some context (#9839) Closes #6771 --- packages/gatsby/src/commands/develop.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/gatsby/src/commands/develop.js b/packages/gatsby/src/commands/develop.js index 9a82f1c6663b4..afce9058d0980 100644 --- a/packages/gatsby/src/commands/develop.js +++ b/packages/gatsby/src/commands/develop.js @@ -155,7 +155,18 @@ async function startServer(program) { const { prefix, url } = proxy app.use(`${prefix}/*`, (req, res) => { const proxiedUrl = url + req.originalUrl - req.pipe(request(proxiedUrl)).pipe(res) + req + .pipe( + request(proxiedUrl).on(`error`, err => { + const message = `Error when trying to proxy request "${ + req.originalUrl + }" to "${proxiedUrl}"` + + report.error(message, err) + res.status(500).end() + }) + ) + .pipe(res) }) } From 1858365bc306c164784bf164b0b5a148001feec0 Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Fri, 9 Nov 2018 22:05:52 +0100 Subject: [PATCH 254/462] chore(gatsby): Remove unneeded react-hot-loader/patch entry (#9695) The patch entry should no longer be necessary (after v4 I think), so I should be safe to remove it. https://github.com/gaearon/react-hot-loader#no-patch-required --- packages/gatsby/src/utils/webpack.config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/gatsby/src/utils/webpack.config.js b/packages/gatsby/src/utils/webpack.config.js index eee70b89c9aef..6e6d60f7de3fa 100644 --- a/packages/gatsby/src/utils/webpack.config.js +++ b/packages/gatsby/src/utils/webpack.config.js @@ -142,7 +142,6 @@ module.exports = async ( case `develop`: return { commons: [ - require.resolve(`react-hot-loader/patch`), `${require.resolve( `webpack-hot-middleware/client` )}?path=${getHmrPath()}`, From 7e1ce17e29224cd8780f0467fc890a790e57a8f1 Mon Sep 17 00:00:00 2001 From: ariella Date: Fri, 9 Nov 2018 13:07:36 -0800 Subject: [PATCH 255/462] docs: small typo fix for example in doc/environment-variables.md (#9838) minor typo fix --- docs/docs/environment-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/environment-variables.md b/docs/docs/environment-variables.md index 13320285e9296..26f3a25cfa745 100644 --- a/docs/docs/environment-variables.md +++ b/docs/docs/environment-variables.md @@ -139,7 +139,7 @@ require("dotenv").config({ module.exports = { siteMetadata: { title: "Gatsby Default Starter", - apiUrl: process.env.GA_TRACKING_ID, + apiUrl: process.env.API_URL, }, plugins: [ { From e42d72870a2e62ae1ce8ae111e644a6d6f390326 Mon Sep 17 00:00:00 2001 From: Kristin Baumann Date: Fri, 9 Nov 2018 22:10:45 +0100 Subject: [PATCH 256/462] docs: Added a blog post to the "Awesome Gatsby" list (#9840) I added a blog post about deploying a static Gatsby app to Heroku to the list of Gatsby tutorials. --- docs/docs/awesome-gatsby.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/docs/awesome-gatsby.md b/docs/docs/awesome-gatsby.md index a80a74ba34036..246a0db47cf7b 100644 --- a/docs/docs/awesome-gatsby.md +++ b/docs/docs/awesome-gatsby.md @@ -62,6 +62,7 @@ See the [list of official and community plugins](/docs/plugins/) - [Upgrade-Guide: Gatsby v2 (German)](https://www.lekoarts.de/blog/upgrade-guide-gatsby-v-2/) - [How I made my portfolio website blazing fast with Gatsby](https://medium.freecodecamp.org/how-i-made-my-portfolio-website-blazing-fast-with-gatsby-82ccddc2f671) - [JAMstack Basics: How to Create a Gatsby Starter with Contentful and Deploy to Netlify](https://itnext.io/jamstack-basics-how-to-create-a-gatsby-starter-with-contentful-and-deploy-to-netlify-846354cc74bc) +- [How to deploy a static Gatsby app to Heroku](https://medium.freecodecamp.org/how-to-deploy-a-static-gatsby-app-to-heroku-3362e3ecda0f) ## Other resources From be746b98fb6bcb1f6a03c959e182cc3c03a0bd27 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Fri, 9 Nov 2018 22:12:02 +0100 Subject: [PATCH 257/462] www: move dotenv to gatsby-config so it can be used with GATSBY_SCREENSHOT_PLACEHOLDER (#9851) --- ...programmatically-create-pages-from-data.md | 32 +++++++++---------- .../gatsby-transformer-screenshot/README.md | 2 +- www/gatsby-config.js | 4 +++ www/gatsby-node.js | 4 --- 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/docs/docs/programmatically-create-pages-from-data.md b/docs/docs/programmatically-create-pages-from-data.md index decb71d82738f..d59d9d7aa1910 100644 --- a/docs/docs/programmatically-create-pages-from-data.md +++ b/docs/docs/programmatically-create-pages-from-data.md @@ -23,7 +23,7 @@ which is at the core of programmatically creating a page. ```javascript{17-25}:title=gatsby-node.js exports.createPages = ({ graphql, actions }) => { - const { createPage } = actions; + const { createPage } = actions return new Promise((resolve, reject) => { graphql(` { @@ -45,12 +45,12 @@ exports.createPages = ({ graphql, actions }) => { context: { slug: node.fields.slug, }, - }); - }); - resolve(); - }); - }); -}; + }) + }) + resolve() + }) + }) +} ``` For each page we want to create we must specify the `path` for visiting that @@ -66,23 +66,21 @@ that will be used to render the page. Here is an example of what the referenced template could look like: ```javascript:title=gatsby-node.js -import React from 'react'; -import { graphql } from 'gatsby'; -import Layout from '../components/layout'; +import React from "react" +import { graphql } from "gatsby" +import Layout from "../components/layout" export default ({ data }) => { - const post = data.markdownRemark; + const post = data.markdownRemark return (
    -

    - {post.frontmatter.title} -

    +

    {post.frontmatter.title}

    - ); -}; + ) +} export const query = graphql` query($slug: String!) { @@ -93,7 +91,7 @@ export const query = graphql` } } } -`; +` ``` Notice that the `slug` value we specified in the `createPage` context is diff --git a/packages/gatsby-transformer-screenshot/README.md b/packages/gatsby-transformer-screenshot/README.md index 6c12a40cc642e..aa26df3766def 100644 --- a/packages/gatsby-transformer-screenshot/README.md +++ b/packages/gatsby-transformer-screenshot/README.md @@ -94,7 +94,7 @@ You can use placeholder image by setting `GATSBY_SCREENSHOT_PLACEHOLDER` environ GATSBY_SCREENSHOT_PLACEHOLDER=true gatsby develop ``` -or by adding it to `.env.development` file in root of your project: +or by using [`dotenv`](https://www.gatsbyjs.org/docs/environment-variables/#server-side-nodejs) in your `gatsby-config.js` and adding `GATSBY_SCREENSHOT_PLACEHOLDER` to `.env.development` file in root of your project: ```shell:title=.env.development GATSBY_SCREENSHOT_PLACEHOLDER=true diff --git a/www/gatsby-config.js b/www/gatsby-config.js index 5b0832d050244..603ac7d4ce155 100644 --- a/www/gatsby-config.js +++ b/www/gatsby-config.js @@ -1,3 +1,7 @@ +require(`dotenv`).config({ + path: `.env.${process.env.NODE_ENV}`, +}) + module.exports = { siteMetadata: { title: `GatsbyJS`, diff --git a/www/gatsby-node.js b/www/gatsby-node.js index 4298e77f17010..c9645b5bf9041 100644 --- a/www/gatsby-node.js +++ b/www/gatsby-node.js @@ -13,10 +13,6 @@ const moment = require(`moment`) let ecosystemFeaturedItems -require(`dotenv`).config({ - path: `.env.${process.env.NODE_ENV}`, -}) - if ( process.env.gatsby_executing_command === `build` && !process.env.GITHUB_API_TOKEN From e1c2004c6f64dd5f7d86c784f8767ad3c6a263b1 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Fri, 9 Nov 2018 22:24:39 +0100 Subject: [PATCH 258/462] docs(gatsby-plugin-google-gtag): fix OutboundLink code snippet --- packages/gatsby-plugin-google-gtag/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby-plugin-google-gtag/README.md b/packages/gatsby-plugin-google-gtag/README.md index 02e9cc8f8efe3..7b9f3ce846691 100644 --- a/packages/gatsby-plugin-google-gtag/README.md +++ b/packages/gatsby-plugin-google-gtag/README.md @@ -74,7 +74,7 @@ To use it, simply import it and use it like you would the `
    ` element e.g. import React from "react" import { OutboundLink } from "gatsby-plugin-google-gtag" -export default () => { +export default () => (
    Visit the Google Global Site Tag plugin page! From 69e13d3ecdb5e19ffa1e67beee07458ce786e8a0 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Fri, 9 Nov 2018 22:26:25 +0100 Subject: [PATCH 259/462] chore(release): Publish - gatsby-transformer-screenshot@2.0.8 - gatsby@2.0.45 --- packages/gatsby-transformer-screenshot/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-screenshot/package.json | 2 +- packages/gatsby/CHANGELOG.md | 8 ++++++++ packages/gatsby/package.json | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/gatsby-transformer-screenshot/CHANGELOG.md b/packages/gatsby-transformer-screenshot/CHANGELOG.md index 958557f133b3c..f9cdfb9d6c211 100644 --- a/packages/gatsby-transformer-screenshot/CHANGELOG.md +++ b/packages/gatsby-transformer-screenshot/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-screenshot/compare/gatsby-transformer-screenshot@2.0.7...gatsby-transformer-screenshot@2.0.8) (2018-11-09) + +**Note:** Version bump only for package gatsby-transformer-screenshot + ## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-screenshot/compare/gatsby-transformer-screenshot@2.0.6...gatsby-transformer-screenshot@2.0.7) (2018-11-08) diff --git a/packages/gatsby-transformer-screenshot/package.json b/packages/gatsby-transformer-screenshot/package.json index 92b3cca9a6149..875ba5fe4d527 100644 --- a/packages/gatsby-transformer-screenshot/package.json +++ b/packages/gatsby-transformer-screenshot/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-screenshot", "description": "Gatsby transformer plugin that uses AWS Lambda to take screenshots of websites", - "version": "2.0.7", + "version": "2.0.8", "author": "David Beckley ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 3ee5f2c603eda..429dc61adf975 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.45](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.44...gatsby@2.0.45) (2018-11-09) + +### Bug Fixes + +- handle development proxy exceptions and show some context ([#9839](https://github.com/gatsbyjs/gatsby/issues/9839)) ([b605ade](https://github.com/gatsbyjs/gatsby/commit/b605ade)), closes [#6771](https://github.com/gatsbyjs/gatsby/issues/6771) + ## [2.0.44](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.43...gatsby@2.0.44) (2018-11-09) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index e4a0b15612b21..be2639520872c 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.44", + "version": "2.0.45", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From 7d6766834bf3e67dba120336912528a79a253edd Mon Sep 17 00:00:00 2001 From: Christopher <39032787+MrRobotjs@users.noreply.github.com> Date: Fri, 9 Nov 2018 18:46:34 -0800 Subject: [PATCH 260/462] Updated dead links (#9853) - Updated dead link "/audit-with-lighthouse/" to "/docs/audit-with-lighthouse/" - Updated dead link "/add-a-manifest-file/" to "/docs/add-a-manifest-file/" --- docs/docs/add-offline-support-with-a-service-worker.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/add-offline-support-with-a-service-worker.md b/docs/docs/add-offline-support-with-a-service-worker.md index ce99c53bdbdfa..eb7438ff92231 100644 --- a/docs/docs/add-offline-support-with-a-service-worker.md +++ b/docs/docs/add-offline-support-with-a-service-worker.md @@ -2,9 +2,9 @@ title: Add Offline Support with a Service Worker --- -If you've run an [audit with Lighthouse](/audit-with-lighthouse/), you may have noticed a lackluster score in the "Progressive Web App" category. Let's address how you can improve that score. +If you've run an [audit with Lighthouse](/docs/audit-with-lighthouse/), you may have noticed a lackluster score in the "Progressive Web App" category. Let's address how you can improve that score. -1. You can [add a manifest file](/add-a-manifest-file/). Ensure that the manifest plugin is listed _before_ the offline plugin so that the offline plugin can cache the created `manifest.webmanifest`. +1. You can [add a manifest file](/docs/add-a-manifest-file/). Ensure that the manifest plugin is listed _before_ the offline plugin so that the offline plugin can cache the created `manifest.webmanifest`. 2. You can also add offline support, since another requirement for a website to qualify as a PWA is the use of a [service worker](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API). [Gatsby's offline plugin](/packages/gatsby-plugin-offline/) makes a Gatsby site work offline--and makes it more resistant to bad network conditions--by creating a service worker for your site. ### What is a service worker From 7cbb3ab1f4865279970f4f3c91ce16c0f3ed30ce Mon Sep 17 00:00:00 2001 From: Lennart Date: Sat, 10 Nov 2018 13:09:27 +0100 Subject: [PATCH 261/462] fix(www): Change Plone starter entry (#9855) `PWA` is the right tag --- docs/starters.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/starters.yml b/docs/starters.yml index a436bae66574a..2996f7b717f7a 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -1165,7 +1165,7 @@ - Plone - Headless CMS - SEO - - Progressive Web App + - PWA features: - Creates 1-1 copy of source Plone site - Auto generated navigation and breadcrumbs From 0b9d65678914132f35c0979ec17edf8cebf7e276 Mon Sep 17 00:00:00 2001 From: Asko Soukka Date: Sat, 10 Nov 2018 14:53:25 +0200 Subject: [PATCH 262/462] feat(gatsby-plugin-manifest): add option to generate apple-touch-icons links (#7256) Fixes #5887 /cc @seaneking @moonmeister I'd like to have gatsby-plugin-manifest to generate apple-touch-icon meta tags (links) for me. Would it be simple enough to generate tags under the same rules as for favicon (only when the icon is being generated by the plugin)? This has been required to be a new major release, but is that v2 (still in beta) or v3? The initial commit https://github.com/datakurre/gatsby/commit/4cf3ba4e3f76d6fd6fef888f1e92895ba999f006 should be the smallest possible change, but I'd probably like to move the code in a separate module where `withPrefix` is passed as a function argument and could be mocked in tests and make them simpler. * [x] discussion * [x] tests * [x] docs update? --- packages/gatsby-plugin-manifest/README.md | 237 ++++++++++-------- .../__snapshots__/gatsby-ssr.js.snap | 102 ++++++++ .../src/__tests__/gatsby-node.js | 35 +++ .../src/__tests__/gatsby-ssr.js | 71 ++++++ .../gatsby-plugin-manifest/src/gatsby-node.js | 5 +- .../gatsby-plugin-manifest/src/gatsby-ssr.js | 39 ++- 6 files changed, 368 insertions(+), 121 deletions(-) create mode 100644 packages/gatsby-plugin-manifest/src/__tests__/__snapshots__/gatsby-ssr.js.snap create mode 100644 packages/gatsby-plugin-manifest/src/__tests__/gatsby-ssr.js diff --git a/packages/gatsby-plugin-manifest/README.md b/packages/gatsby-plugin-manifest/README.md index e98e19c0cb46f..a526d42a739a7 100644 --- a/packages/gatsby-plugin-manifest/README.md +++ b/packages/gatsby-plugin-manifest/README.md @@ -15,7 +15,7 @@ If you're using this plugin together with [`gatsby-plugin-offline`](https://www. this plugin should be listed _before_ the offline plugin so that it can cache the created manifest.webmanifest. -If you use the "automatic mode" (described below), this plugin will also add a favicon link to your html pages. +If you use the "automatic mode" or "hybrid mode" (described below), this plugin will also add a favicon link. ## Install @@ -33,70 +33,71 @@ There are three modes in which icon generation can function: automatic, hybrid, ### Automatic mode -In the automatic mode, you are responsible for defining the entire web app manifest except for the icons portion. You only provide a high resolution source icon. The icons themselves and the needed config will be generated at build time. See the example below: - -```javascript -// In your gatsby-config.js -plugins: [ - { - resolve: `gatsby-plugin-manifest`, - options: { - name: `GatsbyJS`, - short_name: `GatsbyJS`, - start_url: `/`, - background_color: `#f7f0eb`, - theme_color: `#a2466c`, - display: `minimal-ui`, - icon: `src/images/icon.png`, // This path is relative to the root of the site. +In the automatic mode, you are responsible for defining the entire web app manifest except for the icons portion. You only provide a high resolution source icon. The icons themselves and the needed config will be generated at build time. See the example `gatsby-config.js` below: + +```javascript:title=gatsby-config.js +module.exports = { + plugins: [ + { + resolve: `gatsby-plugin-manifest`, + options: { + name: `GatsbyJS`, + short_name: `GatsbyJS`, + start_url: `/`, + background_color: `#f7f0eb`, + theme_color: `#a2466c`, + display: `minimal-ui`, + icon: `src/images/icon.png`, // This path is relative to the root of the site. + }, }, - }, -] + ], +} ``` When in automatic mode the following json array is injected into the manifest configuration you provide and the icons are generated from it. The source icon you provide should be at least as big as the largest icon being generated. -```javascript -;[ +```json +[ { - src: `icons/icon-48x48.png`, - sizes: `48x48`, - type: `image/png`, + "src": "icons/icon-48x48.png", + "sizes": "48x48", + "type": "image/png" }, { - src: `icons/icon-72x72.png`, - sizes: `72x72`, - type: `image/png`, + "src": "icons/icon-72x72.png", + "sizes": "72x72", + "type": "image/png" }, { - src: `icons/icon-96x96.png`, - sizes: `96x96`, - type: `image/png`, + "src": "icons/icon-96x96.png", + "sizes": "96x96", + "type": "image/png" }, { - src: `icons/icon-144x144.png`, - sizes: `144x144`, - type: `image/png`, + "src": "icons/icon-144x144.png", + "sizes": "144x144", + "type": "image/png" }, { - src: `icons/icon-192x192.png`, - sizes: `192x192`, - type: `image/png`, + "src": "icons/icon-192x192.png", + "sizes": "192x192", + "type": "image/png" }, { - src: `icons/icon-256x256.png`, - sizes: `256x256`, - type: `image/png`, + "src": "icons/icon-256x256.png", + "sizes": "256x256", + "type": "image/png" }, { - src: `icons/icon-384x384.png`, - sizes: `384x384`, - type: `image/png`, + "src": "icons/icon-384x384.png", + "sizes": "384x384", + "type": "image/png" }, { - src: `icons/icon-512x512.png`, - sizes: `512x512`, - type: `image/png`, - }, + "src": "icons/icon-512x512.png", + "sizes": "512x512", + "type": "image/png" + } ] ``` @@ -104,73 +105,99 @@ The automatic mode is the easiest option for most people. ### Hybrid mode -However, if you want to include more or fewer sizes, then the hybrid option is for you. Like automatic mode, you should include a high resolution icon to generate smaller icons from. But unlike automatic mode, you provide the `icons` array config and icons are generated based on the sizes defined in your config. Here's an example: - -```javascript -// In your gatsby-config.js -plugins: [ - { - resolve: `gatsby-plugin-manifest`, - options: { - name: `GatsbyJS`, - short_name: `GatsbyJS`, - start_url: `/`, - background_color: `#f7f0eb`, - theme_color: `#a2466c`, - display: `minimal-ui`, - icon: `src/images/icon.png`, // This path is relative to the root of the site. - icons: [ - { - src: `/favicons/android-chrome-192x192.png`, - sizes: `192x192`, - type: `image/png`, - }, - { - src: `/favicons/android-chrome-512x512.png`, - sizes: `512x512`, - type: `image/png`, - }, - ], +However, if you want to include more or fewer sizes, then the hybrid option is for you. Like automatic mode, you should include a high resolution icon to generate smaller icons from. But unlike automatic mode, you provide the `icons` array config and icons are generated based on the sizes defined in your config. Here's an example `gatsby-config.js`: + +```javascript:title=gatsby-config.js +module.exports = { + plugins: [ + { + resolve: `gatsby-plugin-manifest`, + options: { + name: `GatsbyJS`, + short_name: `GatsbyJS`, + start_url: `/`, + background_color: `#f7f0eb`, + theme_color: `#a2466c`, + display: `minimal-ui`, + icon: `src/images/icon.png`, // This path is relative to the root of the site. + icons: [ + { + src: `/favicons/android-chrome-192x192.png`, + sizes: `192x192`, + type: `image/png`, + }, + { + src: `/favicons/android-chrome-512x512.png`, + sizes: `512x512`, + type: `image/png`, + }, + ], + }, }, - }, -] + ], +} ``` The hybrid option allows the most flexibility while still not requiring you to create most icons sizes manually. ### Manual mode -In the manual mode, you are responsible for defining the entire web app manifest and providing the defined icons in the static directory. Only icons you provide will be available. There is no automatic resizing done for you. See the example below: +In the manual mode, you are responsible for defining the entire web app manifest and providing the defined icons in the static directory. Only icons you provide will be available. There is no automatic resizing done for you. See the example `gatsby-config.js` below: + +```javascript:title=gatsby-config.js +module.exports = { + plugins: [ + { + resolve: `gatsby-plugin-manifest`, + options: { + name: `GatsbyJS`, + short_name: `GatsbyJS`, + start_url: `/`, + background_color: `#f7f0eb`, + theme_color: `#a2466c`, + display: `minimal-ui`, + icons: [ + { + // Everything in /static will be copied to an equivalent + // directory in /public during development and build, so + // assuming your favicons are in /favicons, + // you can reference them here + src: `/favicons/android-chrome-192x192.png`, + sizes: `192x192`, + type: `image/png`, + }, + { + src: `/favicons/android-chrome-512x512.png`, + sizes: `512x512`, + type: `image/png`, + }, + ], + }, + }, + ], +} +``` -```javascript -// In your gatsby-config.js -plugins: [ - { - resolve: `gatsby-plugin-manifest`, - options: { - name: `GatsbyJS`, - short_name: `GatsbyJS`, - start_url: `/`, - background_color: `#f7f0eb`, - theme_color: `#a2466c`, - display: `minimal-ui`, - icons: [ - { - // Everything in /static will be copied to an equivalent - // directory in /public during development and build, so - // assuming your favicons are in /favicons, - // you can reference them here - src: `/favicons/android-chrome-192x192.png`, - sizes: `192x192`, - type: `image/png`, - }, - { - src: `/favicons/android-chrome-512x512.png`, - sizes: `512x512`, - type: `image/png`, - }, - ], +## Legacy `apple-touch-icon` links + +iOS 11.3 added support for webmanifest spec, so this plugin doesn't add `apple-touch-icon` links to `` by default. If you need or want to support older version of iOS you can set `legacy` option to `true` in plugin configuration: + +```javascript:title=gatsby-config.js +module.exports = { + plugins: [ + { + resolve: `gatsby-plugin-manifest`, + options: { + name: `GatsbyJS`, + short_name: `GatsbyJS`, + start_url: `/`, + background_color: `#f7f0eb`, + theme_color: `#a2466c`, + display: `minimal-ui`, + icon: `src/images/icon.png`, // This path is relative to the root of the site. + legacy: true, // this will add apple-touch-icon links to + }, }, - }, -] + ], +} ``` diff --git a/packages/gatsby-plugin-manifest/src/__tests__/__snapshots__/gatsby-ssr.js.snap b/packages/gatsby-plugin-manifest/src/__tests__/__snapshots__/gatsby-ssr.js.snap new file mode 100644 index 0000000000000..b35baa328e7c9 --- /dev/null +++ b/packages/gatsby-plugin-manifest/src/__tests__/__snapshots__/gatsby-ssr.js.snap @@ -0,0 +1,102 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`gatsby-plugin-manifest Adds "shortcut icon" and "manifest" links and "theme_color" meta tag to head 1`] = ` +Array [ + , + , + , +] +`; + +exports[`gatsby-plugin-manifest Creates legacy apple touch links if opted in Using default set of icons 1`] = ` +Array [ + , + , + , + , + , + , + , + , + , + , + , +] +`; + +exports[`gatsby-plugin-manifest Creates legacy apple touch links if opted in Using user specified list of icons 1`] = ` +Array [ + , + , + , + , + , +] +`; diff --git a/packages/gatsby-plugin-manifest/src/__tests__/gatsby-node.js b/packages/gatsby-plugin-manifest/src/__tests__/gatsby-node.js index b1b478a28e7a9..b3ac1c1b66d7d 100644 --- a/packages/gatsby-plugin-manifest/src/__tests__/gatsby-node.js +++ b/packages/gatsby-plugin-manifest/src/__tests__/gatsby-node.js @@ -10,6 +10,10 @@ const path = require(`path`) const { onPostBootstrap } = require(`../gatsby-node`) describe(`Test plugin manifest options`, () => { + beforeEach(() => { + fs.writeFileSync.mockReset() + }) + it(`correctly works with default parameters`, async () => { await onPostBootstrap([], { name: `GatsbyJS`, @@ -23,6 +27,7 @@ describe(`Test plugin manifest options`, () => { expect(filePath).toEqual(path.join(`public`, `manifest.webmanifest`)) expect(contents).toMatchSnapshot() }) + it(`fails on non existing icon`, done => { fs.statSync.mockReturnValueOnce({ isFile: () => false }) onPostBootstrap([], { @@ -45,4 +50,34 @@ describe(`Test plugin manifest options`, () => { done() }) }) + + it(`doesn't write extra properties to manifest`, async () => { + const manifestOptions = { + name: `GatsbyJS`, + short_name: `GatsbyJS`, + start_url: `/`, + background_color: `#f7f0eb`, + theme_color: `#a2466c`, + display: `minimal-ui`, + icons: [ + { + src: `icons/icon-48x48.png`, + sizes: `48x48`, + type: `image/png`, + }, + ], + } + const pluginSpecificOptions = { + icon: undefined, + legacy: true, + plugins: [], + } + await onPostBootstrap([], { + ...manifestOptions, + ...pluginSpecificOptions, + }) + + const content = JSON.parse(fs.writeFileSync.mock.calls[0][1]) + expect(content).toEqual(manifestOptions) + }) }) diff --git a/packages/gatsby-plugin-manifest/src/__tests__/gatsby-ssr.js b/packages/gatsby-plugin-manifest/src/__tests__/gatsby-ssr.js new file mode 100644 index 0000000000000..1b578fec00ee2 --- /dev/null +++ b/packages/gatsby-plugin-manifest/src/__tests__/gatsby-ssr.js @@ -0,0 +1,71 @@ +// const { shallow } = require(`enzyme`) +const { onRenderBody } = require(`../gatsby-ssr`) + +let headComponents +const setHeadComponents = args => (headComponents = headComponents.concat(args)) + +const ssrArgs = { + setHeadComponents, +} + +describe(`gatsby-plugin-manifest`, () => { + beforeEach(() => { + global.__PATH_PREFIX__ = `` + headComponents = [] + }) + + it(`Adds "shortcut icon" and "manifest" links and "theme_color" meta tag to head`, () => { + onRenderBody(ssrArgs, { icon: true, theme_color: `#000000` }) + expect(headComponents).toMatchSnapshot() + }) + + describe(`Creates legacy apple touch links if opted in`, () => { + it(`Using default set of icons`, () => { + onRenderBody(ssrArgs, { + icon: true, + theme_color: `#000000`, + legacy: true, + }) + expect(headComponents).toMatchSnapshot() + }) + + it(`Using user specified list of icons`, () => { + onRenderBody(ssrArgs, { + icon: true, + theme_color: `#000000`, + legacy: true, + icons: [ + { + src: `/favicons/android-chrome-48x48.png`, + sizes: `48x48`, + type: `image/png`, + }, + { + src: `/favicons/android-chrome-512x512.png`, + sizes: `512x512`, + type: `image/png`, + }, + ], + }) + expect(headComponents).toMatchSnapshot() + }) + }) + + it(`Creates href attributes using pathPrefix`, () => { + global.__PATH_PREFIX__ = `/path-prefix` + + onRenderBody(ssrArgs, { + icon: true, + theme_color: `#000000`, + legacy: true, + }) + + headComponents + .filter(component => component.type === `link`) + .forEach(component => { + expect(component.props.href).toEqual( + expect.stringMatching(/^\/path-prefix\//) + ) + }) + }) +}) diff --git a/packages/gatsby-plugin-manifest/src/gatsby-node.js b/packages/gatsby-plugin-manifest/src/gatsby-node.js index 9f23cd5b09678..5d26997e93b3b 100644 --- a/packages/gatsby-plugin-manifest/src/gatsby-node.js +++ b/packages/gatsby-plugin-manifest/src/gatsby-node.js @@ -20,12 +20,11 @@ function generateIcons(icons, srcIcon) { exports.onPostBootstrap = (args, pluginOptions) => new Promise((resolve, reject) => { - const { icon } = pluginOptions - const manifest = { ...pluginOptions } + const { icon, ...manifest } = pluginOptions // Delete options we won't pass to the manifest.webmanifest. delete manifest.plugins - delete manifest.icon + delete manifest.legacy // If icons are not manually defined, use the default icon set. if (!manifest.icons) { diff --git a/packages/gatsby-plugin-manifest/src/gatsby-ssr.js b/packages/gatsby-plugin-manifest/src/gatsby-ssr.js index 65952e21f4362..8f01b191883cb 100644 --- a/packages/gatsby-plugin-manifest/src/gatsby-ssr.js +++ b/packages/gatsby-plugin-manifest/src/gatsby-ssr.js @@ -1,25 +1,25 @@ import React from "react" import { withPrefix } from "gatsby" +import { defaultIcons } from "./common.js" exports.onRenderBody = ({ setHeadComponents }, pluginOptions) => { + const icons = pluginOptions.icons || defaultIcons + // If icons were generated, also add a favicon link. if (pluginOptions.icon) { - let favicon = `/icons/icon-48x48.png` + let favicon = icons && icons.length ? icons[0].src : null - // The icon path could be different in hybrid mode - // this takes the first one of the possible icons - if (pluginOptions.icons && pluginOptions.icons.length) { - favicon = pluginOptions.icons[0].src + if (favicon) { + setHeadComponents([ + , + ]) } - - setHeadComponents([ - , - ]) } + setHeadComponents([ { content={pluginOptions.theme_color} />, ]) + + if (pluginOptions.legacy) { + setHeadComponents( + icons.map(icon => ( + + )) + ) + } } From c725e00471f02082601051ff16ea2152b74d1e21 Mon Sep 17 00:00:00 2001 From: Tyler Barnes Date: Sat, 10 Nov 2018 04:54:47 -0800 Subject: [PATCH 263/462] docs: add example for disableCorePrefetching (#9852) This closes #9827 --- packages/gatsby/src/utils/api-browser-docs.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/gatsby/src/utils/api-browser-docs.js b/packages/gatsby/src/utils/api-browser-docs.js index 5dc51b9b9b187..c1067056b5c6b 100644 --- a/packages/gatsby/src/utils/api-browser-docs.js +++ b/packages/gatsby/src/utils/api-browser-docs.js @@ -176,6 +176,8 @@ exports.onPostPrefetchPathname = true /** * Plugins can take over prefetching logic. If they do, they should call this * to disable the now duplicate core prefetching logic. + * @example + * exports.disableCorePrefetching = () => true */ exports.disableCorePrefetching = true From 6642ac517da5d3a85c6645fdd069a4fc2563fafc Mon Sep 17 00:00:00 2001 From: Christopher Biscardi Date: Sat, 10 Nov 2018 17:22:53 -0800 Subject: [PATCH 264/462] docs: introducing gatsby themes (#9517) Introduce gatsby themes to make people aware that the feature is experimentally merged and progressing. --- .../index.md | 171 ++++++++++++++++++ docs/blog/author.yaml | 4 + docs/blog/avatars/chris-biscardi.png | Bin 0 -> 320492 bytes 3 files changed, 175 insertions(+) create mode 100644 docs/blog/2018-10-26-introducing-gatsby-themes/index.md create mode 100644 docs/blog/avatars/chris-biscardi.png diff --git a/docs/blog/2018-10-26-introducing-gatsby-themes/index.md b/docs/blog/2018-10-26-introducing-gatsby-themes/index.md new file mode 100644 index 0000000000000..9ca827e52a4bf --- /dev/null +++ b/docs/blog/2018-10-26-introducing-gatsby-themes/index.md @@ -0,0 +1,171 @@ +--- +title: Introducing Gatsby Themes +date: 2018-10-26 +author: Chris Biscardi +excerpt: "Scaling the production of Gatsby sites" +tags: ["themes", "architecture"] +--- + +Gatsby is a powerful platform for building marketing sites, blogs, +ecommerce frontends, and more. You can source data from static files +and any number of content management systems. You can process images, +add support for our favorite styling technique, transform markdown, +and just about anything else you can imagine. + +At its core, a Gatsby site is a combination of functionality centered +around a single config file, `gatsby-config.js`. This config file +controls an assortment of site metadata, data type mapping, and most +importantly, plugins. Plugins contain large amounts of customizable +functionality for turning markdown into pages, processing components +into documentation, and even processing images. + +## Scaling Gatsby + +Creating a single Gatsby site works super well. The power of +`gatsby-config.js`, plugins, and more coalesce to make the experience a +breeze. However, what if you want to re-use this configuration on our +next site? Sure, you could clone a boilerplate each time, but that gets +old, quickly. Wouldn't it be great if you could re-use our +gatsby-config.js across projects? That's where starters come in. + +### Improving Reusability with Starters + +One way to create more sites with similar functionality faster is to +use starters. Starters are basically whole Gatsby sites that can be +scaffolded through the gatsby CLI. This helps you start your project +by cloning the boilerplate, installing dependencies, and clearing Git +history. The community around Gatsby has built a lot of different +starters for various use cases including blogging, working with +material design, and documentation. + +The problem with starters is that they're one-offs. Starters are +boilerplate projects that begin to diverge immediately from upstream +and have no easy way of updating when changes are made +upstream. There's another approach to boilerplate that has become +popular in recent years that fixes some problems with the boilerplate +approach such as updating with upstream. One such project is +[`create-react-app`](https://facebook.github.io/create-react-app/). In +the Gatsby world, you can improve on starters similarly with themes. + +### Truly Reusable Themes in Gatsby + +If a single `gatsby-config.js` encodes the functionality of a whole Gatsby +site, then if you can +[compose](https://medium.com/javascript-scene/master-the-javascript-interview-what-is-function-composition-20dfb109a1a0) +the `gatsby-config.js` data structure together you have the base for +themes. You can encode portions of our gatsby-config as themes and +re-use them across sites. This is a big deal because you can have a +theme config (or multiple configs) that composes together with the +custom config (for the current site). Upgrading the underlying theme +does not undo the customizations, meaning you get upstream +improvements to the theme without a difficult manual upgrade process. + +## Why Themes? + +Defining themes as the base composition unit of Gatsby sites allows us to start +solving a variety of use cases. For example, when a site gets built as +part of a wider product offering it's often the case that one team +will build out a suite of functionality, including branding elements, +and the other teams will mostly consume this functionality. Themes +allow us to distribute this functionality as an npm package and allow +the customization of various branding elements through our +`gatsby-config.js`. + +## Mechanics of Theming + +At a base level, theming combines the `gatsby-config.js` of the +theme with the `gatsby-config.js` of your site. Since it's an experimental +feature, you use an experimental namespace to declare themes in +the config. + +```js +module.exports = { + __experimentalThemes: [ + { + resolve: "gatsby-theme-blog", + options: {}, + }, + ], +} +``` + +Themes often need to be parameterized for various reasons, such as +changing the base url for subsections of a site or applying branding +variables. You can do this through the theme options if you define our +theme's gatsby-config as a function that returns an object. + +```js +module.exports = { + __experimentalThemes: [ + { + resolve: "gatsby-theme-blog", + options: { + some: "value", + }, + }, + ], +} +``` + +Themes also function as plugins and any config passed into the theme +in your `gatsby-config.js` will also be passed to your theme's `gatsby-*.js` +files as plugin options. This allows themes to override any settings +inherited from the theme's own plugin declarations or apply gatsby +lifecycle hooks such as [`onCreatePage`](/docs/node-apis/#onCreatePage). + +Check out the theme examples in this multi-package repo for more +examples of using and building themes: https://github.com/ChristopherBiscardi/gatsby-theme-examples. + +## Next Steps + +### Sub Themes and Overriding + +This is just the first step and it enables us to experiment with +further improvements in userland before merging them into +core. Sub-theming, for example, is a critical part of a theming +ecosystem that is currently missing from Gatsby. Overriding theme +elements is possible on a coarse level right now in userland. If, for +example, a theme defines a set of pages using +[`createPage`](/docs/actions/#createPage) you can define a helper +function that will look for the page component first in the user's +site and then fall back to the theme's default implementation. + +```js +const withThemePath = relativePath => { + let pathResolvedPath = path.resolve(relativePath) + let finalPath = pathResolvedPath + + try { + // check if the user's site has the file + require.resolve(pathResolvedPath) + } catch (e) { + // if the user hasn't implemented the file, + finalPath = require.resolve(relativePath) + } + + return finalPath +} +``` + +Then in our theme's `createPage` call, you simply use the helper to let +the user optionally override the default component. + +```title:gatsby-node.js +createPage({ + path: post.node.fields.slug, + component: withThemePath('./src/templates/blog-post.js') +}) +``` + +This doesn't allow us to make more granular overrides of different +components, but it does allow us to replace the rendering of pages and +other whole elements. Component Shadowing, a more granular method of +overriding, is already in the works. + +If you want to be involved in the development of theming for Gatsby, +join the Spectrum community for [Gatsby +themes](https://spectrum.chat/gatsby-themes/general?thread=1e02db45-9f2e-4c0a-b42e-a4d4e4d519a8). + +I'll also be talking about theming Gatsby at [Gatsby +Days](https://www.eventbrite.com/e/gatsby-days-tickets-51837151315) on +Dec 7th covering how Gatsby got here and where theming is going next. diff --git a/docs/blog/author.yaml b/docs/blog/author.yaml index 70b1ad499caec..c669db86e3b75 100644 --- a/docs/blog/author.yaml +++ b/docs/blog/author.yaml @@ -177,3 +177,7 @@ avatar: avatars/michael-holtzman.jpg twitter: "@mikelax" bio: nyc • tech • I build things 🚀 & learn things 📖 +- id: Chris Biscardi + bio: Early stage software product consultant. React*, Go, GraphQL, Containers, k8s. + avatar: avatars/chris-biscardi.png + twitter: "@chrisbiscardi" diff --git a/docs/blog/avatars/chris-biscardi.png b/docs/blog/avatars/chris-biscardi.png new file mode 100644 index 0000000000000000000000000000000000000000..4aee3c92004e42959a6e127aa3f838570ee8ff04 GIT binary patch literal 320492 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
  • 7#wuneHmBXDryd&f`oO4sbomR;ZSRWK2# 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 Date: Sun, 11 Nov 2018 11:50:38 -0800 Subject: [PATCH 265/462] alter chris blog post date (#9870) --- .../index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/blog/{2018-10-26-introducing-gatsby-themes => 2018-11-11-introducing-gatsby-themes}/index.md (99%) diff --git a/docs/blog/2018-10-26-introducing-gatsby-themes/index.md b/docs/blog/2018-11-11-introducing-gatsby-themes/index.md similarity index 99% rename from docs/blog/2018-10-26-introducing-gatsby-themes/index.md rename to docs/blog/2018-11-11-introducing-gatsby-themes/index.md index 9ca827e52a4bf..8f1b1a0ac9868 100644 --- a/docs/blog/2018-10-26-introducing-gatsby-themes/index.md +++ b/docs/blog/2018-11-11-introducing-gatsby-themes/index.md @@ -1,6 +1,6 @@ --- title: Introducing Gatsby Themes -date: 2018-10-26 +date: 2018-11-11 author: Chris Biscardi excerpt: "Scaling the production of Gatsby sites" tags: ["themes", "architecture"] From cfa3ce046ba3d4bd4a8d9417d13de75c3ba42028 Mon Sep 17 00:00:00 2001 From: Kristin Baumann Date: Mon, 12 Nov 2018 00:53:58 +0100 Subject: [PATCH 266/462] docs: updated install hint for gatsby-plugin-typography (#9865) Added typography and react-typography to the gatsby-plugin-typography install note, because these two peer dependencies need to be installed as well. Same as on the package overview [here](https://www.gatsbyjs.org/packages/gatsby-plugin-typography/). --- docs/docs/typography-js.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/typography-js.md b/docs/docs/typography-js.md index cfa185cee1715..aac85e3c9b795 100644 --- a/docs/docs/typography-js.md +++ b/docs/docs/typography-js.md @@ -10,7 +10,7 @@ Typography.js is a JavaScript library that enables you to define and explore the Gatsby has the plugin `gatsby-plugin-typography` to assist with introducting Typography.js library into your project. -You can install the plugin into your project by running the command `npm install gatsby-plugin-typography --save` +You can install the plugin and its peer dependencies into your project by running the command `npm install gatsby-plugin-typography react-typography typography --save` After the installation of the plugin has completed, navigate to your `gatsby-config.js` file located in the root of your project's directory and add the plugin to the configuration: From a013334960a406cc3c12fd89791deb7b801e20a4 Mon Sep 17 00:00:00 2001 From: Yuki Takemoto Date: Mon, 12 Nov 2018 08:55:05 +0900 Subject: [PATCH 267/462] fix(showcase): update showcase entry (#9860) My site is already added to showcase. I published the source code so I added information. --- docs/sites.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/sites.yml b/docs/sites.yml index 59f1e7e57a5a5..ac053f107461e 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -1299,13 +1299,17 @@ categories: - Blog - Portfolio -- title: mottox2 blog +- title: MOTTO x MOTTO main_url: "https://mottox2.com" url: "https://mottox2.com" + source_url: "https://github.com/mottox2/website" + description: Web developer / UI Desinger in Tokyo Japan. featured: false categories: - Blog - Portfolio + built_by: mottox2 + built_by_url: "https://mottox2.com" - title: Pride of the Meadows main_url: "https://www.prideofthemeadows.com/" url: "https://www.prideofthemeadows.com/" From 88fffb551c5fbe2269f8b5d8a0048fe62b0899a5 Mon Sep 17 00:00:00 2001 From: Yuki Takemoto Date: Mon, 12 Nov 2018 08:56:25 +0900 Subject: [PATCH 268/462] fix(gatsby-source-contentful): Remove unused argument (#9866) I found a unused argument(`createnode`) so I removed. --- packages/gatsby-source-contentful/src/normalize.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/gatsby-source-contentful/src/normalize.js b/packages/gatsby-source-contentful/src/normalize.js index 4fa6e58ec7409..18b5929820b61 100644 --- a/packages/gatsby-source-contentful/src/normalize.js +++ b/packages/gatsby-source-contentful/src/normalize.js @@ -173,7 +173,7 @@ exports.buildForeignReferenceMap = ({ return foreignReferenceMap } -function prepareTextNode(node, key, text, createNode, createNodeId) { +function prepareTextNode(node, key, text, createNodeId) { const str = _.isString(text) ? text : ` ` const textNode = { id: createNodeId(`${node.id}${key}TextNode`), @@ -393,7 +393,6 @@ exports.createContentTypeNodes = ({ entryNode, entryItemFieldKey, entryItemFields[entryItemFieldKey], - createNode, createNodeId ) From d4b75619e10acbe6ca4c7cb54cea6e72673167d7 Mon Sep 17 00:00:00 2001 From: Migsar Date: Mon, 12 Nov 2018 06:12:46 +0000 Subject: [PATCH 269/462] Update programmatically-create-pages-from-data.md (#9873) Update the file title for templates/blog-post.js block code. --- docs/docs/programmatically-create-pages-from-data.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/programmatically-create-pages-from-data.md b/docs/docs/programmatically-create-pages-from-data.md index d59d9d7aa1910..eb9323d538494 100644 --- a/docs/docs/programmatically-create-pages-from-data.md +++ b/docs/docs/programmatically-create-pages-from-data.md @@ -65,7 +65,7 @@ The `createPage` action required that we specify the `component` template that will be used to render the page. Here is an example of what the referenced template could look like: -```javascript:title=gatsby-node.js +```javascript:title=blog-post.js import React from "react" import { graphql } from "gatsby" import Layout from "../components/layout" From 015194c797ed0ad37d23ad85d5605d97b69271c7 Mon Sep 17 00:00:00 2001 From: Malcolm Kee Date: Mon, 12 Nov 2018 16:34:05 +0800 Subject: [PATCH 270/462] Draft for Sourcing from Private APIs (#9772) My first draft for the docs. Appreciate feedback if there is anything that is incorrect, can be improved or additional content that could be added. --- docs/docs/sourcing-from-private-apis.md | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/docs/docs/sourcing-from-private-apis.md b/docs/docs/sourcing-from-private-apis.md index dc36662a8dc66..aa711b6b8634e 100644 --- a/docs/docs/sourcing-from-private-apis.md +++ b/docs/docs/sourcing-from-private-apis.md @@ -2,7 +2,25 @@ title: Sourcing from Private APIs --- -This is a stub. Help our community expand it. +Gatsby allows you to pull data from headless CMSs, databases, SaaS services, public API, and your private APIs. -Please use the [Gatsby Style Guide](/docs/gatsby-style-guide/) to ensure your -pull request gets accepted. +From the Gatsby perspective, there is no difference between sourcing from a public or private API. The only difference is the availability of the API to Gatsby to query the data. + +There are 3 approaches that you can use to source data from your private API: + +1. If your private API is a GraphQL API, you can use [`gatsby-source-graphql`](https://www.gatsbyjs.org/packages/gatsby-source-graphql/). +2. If your private API is not a GraphQL API and you are new to GraphQL, treat the data as unstructured data and fetch it during build time, as described by the guide "[Using unstructured data](/docs/using-unstructured-data/)". However, as highlighted in the guide, this approach comes with some tradeoffs. +3. Create a source plugin, as described in the tutorial "[Source plugin tutorial](/docs/source-plugin-tutorial/)". + +### Other considerations + +1. If the data of your private API is updated very frequently or the expectation of the site is to be updated in real-time, it may make more sense to query the data directly during runtime. + +2. If you can source the data through a plugin, consider that as an alternative to sourcing via the API. For instance, if you have access to the MongoDB database that stores the data, [`gatsby-source-mongodb`](/https://www.gatsbyjs.org/packages/gatsby-source-mongodb/) will be handy. Browse the [Gatsby Plugin Library](https://www.gatsbyjs.org/plugins/) to see what plugins that you could utilize. + +3. Depending on your build process and the availability of your private API, you may need to make other adjustments accordingly. + + - If your private API is only available within your company network, then you would need to expose the private API to your CI server that runs the build, else you would need to run the gatsby build in your own computer. + - You may also need to configure the endpoints of the API differently for development or production. Refer the [environment variables](/docs/environment-variables/) guide to learn how to do that. + +4. To ensure your site does not show outdated data, you may want to setup an automated process to trigger the process to rebuild your site whenever the data is updated. For instance, if you host your site in Netlify, you can [make a request for its webhook to trigger a new build](https://www.netlify.com/docs/webhooks/). From fb2df844def3ead377068808c01bd1ae2db9aca0 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Mon, 12 Nov 2018 13:57:09 +0100 Subject: [PATCH 271/462] www: fix wordpress features column (#9883) fix wordpress column in feature comparison page: ref https://github.com/gatsbyjs/gatsby/issues/2444#issuecomment-437857057 --- www/src/components/evaluation-table.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/src/components/evaluation-table.js b/www/src/components/evaluation-table.js index 98fe42b909349..20ed160b85ab1 100644 --- a/www/src/components/evaluation-table.js +++ b/www/src/components/evaluation-table.js @@ -43,7 +43,7 @@ class EvaluationTable extends Component { , ] } - const headers = [`Feature`, `Gatsby`, `Jekyll`, `Wordpress`, `Squarespace`] + const headers = [`Feature`, `Gatsby`, `Jekyll`, `WordPress`, `Squarespace`] const renderCell = (text, column) => { switch (column) { case 0: { From f83fc1626117c824c1663a1547ce502fe3d134b8 Mon Sep 17 00:00:00 2001 From: Ty Hopp Date: Mon, 12 Nov 2018 14:20:49 +0100 Subject: [PATCH 272/462] feat(showcase): add Flyright to the Gatsby site showcase (#9856) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi all, we built our company site with Gatsby, Contentful and Netlify! Thanks for building such an amazing ecosystem ❤️ --- docs/sites.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index ac053f107461e..d2ae6082a6c33 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3297,3 +3297,14 @@ built_by: Andrew Wilson built_by_url: https://github.com/andwilson featured: false +- title: Flyright + url: https://flyright.co/ + main_url: https://flyright.co/ + description: >- + Flyright curates everything you need for international travel in one tidy place 💜 + categories: + - Technology + - App + built_by: Ty Hopp + built_by_url: https://github.com/tyhopp + featured: false From f78c610f603745370df81dc042cdbcc6f37fdc46 Mon Sep 17 00:00:00 2001 From: Gregory Gubarev Date: Mon, 12 Nov 2018 17:31:29 +0400 Subject: [PATCH 273/462] docs: Improved markdown/Syntax Highlighting (#9869) Syntax Highlighting --- docs/docs/working-with-images.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/docs/working-with-images.md b/docs/docs/working-with-images.md index b10a5e33d25cd..4c8027dffa8cb 100644 --- a/docs/docs/working-with-images.md +++ b/docs/docs/working-with-images.md @@ -22,7 +22,7 @@ You can also use arguments in your query to specify exact, minimum, and maximum This example is for an image gallery where images stretch when the page is resized. It uses the `fluid` method and the fluid fragment to grab the right data to use in `gatsby-image` component and arguments to set the maximum width as 400px and maximum height as 250px. -```jsx +```js export const query = graphql` query { fileName: file(relativePath: { eq: "images/myimage.jpg" }) { @@ -49,8 +49,8 @@ export const query = graphql` Here is an image component that uses the query from the previous example: -``` - +```jsx + ``` ## Using Fragments To Standardize Formatting @@ -59,34 +59,34 @@ What if you have a bunch of images and you want them all to use the same formatt A custom fragment is an easy way to standardize formatting and re-use it on multiple images: -``` +```js export const squareImage = graphql` -fragment squareImage on File { - childImageSharp { - fluid(maxWidth: 200, maxHeight: 200) { - ...GatsbyImageSharpFluid - } + fragment squareImage on File { + childImageSharp { + fluid(maxWidth: 200, maxHeight: 200) { + ...GatsbyImageSharpFluid } -} -`; + } + } +` ``` The fragment can then be referenced in the image query: -``` +```js export const query = graphql` query { - image1:file(relativePath: { eq: "images/image1.jpg" }) { + image1: file(relativePath: { eq: "images/image1.jpg" }) { ...squareImage } - image2:file(relativePath: { eq: "images/image2.jpg" }) { + image2: file(relativePath: { eq: "images/image2.jpg" }) { ...squareImage } - image3:file(relativePath: { eq: "images/image3.jpg" }) { + image3: file(relativePath: { eq: "images/image3.jpg" }) { ...squareImage } } -`; +` ``` From 66fa7564f20da0bb7593b2a2de5cdb6a54a0ca29 Mon Sep 17 00:00:00 2001 From: Anthony Marcar Date: Tue, 13 Nov 2018 00:41:32 +1100 Subject: [PATCH 274/462] chore: Refactor build node connections (#9803) Another refactoring! The plus side of all these is more readable code (hopefully), but they're mostly to ease the loki integration. This one renames a lot of the vars/functions in `build-node-connections` so they're consistent with the actual graphql types and field class names as per https://graphql.org/graphql-js/type/#graphqlobjecttype Another benefit of this refactor is the ability to create types (connections in this case) one by one instead of having to do them as a whole batch. This will be eventually needed for incremental builds Update: I slipped a refactor to `build-node-types` in as well. --- packages/gatsby/src/bootstrap/index.js | 4 +- .../__tests__/build-node-connections-test.js | 6 +- .../schema/__tests__/build-node-types-test.js | 112 +++++- .../infer-graphql-input-type-test.js | 83 +---- .../src/schema/build-node-connections.js | 138 ++++--- .../gatsby/src/schema/build-node-types.js | 342 +++++++++++------- packages/gatsby/src/schema/index.js | 23 +- 7 files changed, 422 insertions(+), 286 deletions(-) diff --git a/packages/gatsby/src/bootstrap/index.js b/packages/gatsby/src/bootstrap/index.js index be70a8c16b8b1..08b5393150eb2 100644 --- a/packages/gatsby/src/bootstrap/index.js +++ b/packages/gatsby/src/bootstrap/index.js @@ -351,7 +351,7 @@ module.exports = async (args: BootstrapArgs) => { parentSpan: bootstrapSpan, }) activity.start() - await require(`../schema`)({ parentSpan: activity.span }) + await require(`../schema`).build({ parentSpan: activity.span }) activity.end() // Collect resolvable extensions and attach to program. @@ -414,7 +414,7 @@ module.exports = async (args: BootstrapArgs) => { parentSpan: bootstrapSpan, }) activity.start() - await require(`../schema`)({ parentSpan: activity.span }) + await require(`../schema`).build({ parentSpan: activity.span }) activity.end() require(`../schema/type-conflict-reporter`).printConflicts() diff --git a/packages/gatsby/src/schema/__tests__/build-node-connections-test.js b/packages/gatsby/src/schema/__tests__/build-node-connections-test.js index 9f063e48a062e..f92ad69a82d37 100644 --- a/packages/gatsby/src/schema/__tests__/build-node-connections-test.js +++ b/packages/gatsby/src/schema/__tests__/build-node-connections-test.js @@ -1,11 +1,9 @@ const { graphql, GraphQLObjectType, GraphQLSchema } = require(`graphql`) const _ = require(`lodash`) - const createPageDependency = require(`../../redux/actions/add-page-dependency`) jest.mock(`../../redux/actions/add-page-dependency`) - const buildNodeTypes = require(`../build-node-types`) -const buildNodeConnections = require(`../build-node-connections`) +const nodeConnections = require(`../build-node-connections`) describe(`build-node-connections`, () => { let schema, store, types, connections @@ -51,7 +49,7 @@ describe(`build-node-connections`, () => { ].forEach(n => store.dispatch({ type: `CREATE_NODE`, payload: n })) types = await buildNodeTypes({}) - connections = await buildNodeConnections(_.values(types)) + connections = await nodeConnections.buildAll(_.values(types)) schema = new GraphQLSchema({ query: new GraphQLObjectType({ diff --git a/packages/gatsby/src/schema/__tests__/build-node-types-test.js b/packages/gatsby/src/schema/__tests__/build-node-types-test.js index af5fab9374af5..3edbc5eb5d67e 100644 --- a/packages/gatsby/src/schema/__tests__/build-node-types-test.js +++ b/packages/gatsby/src/schema/__tests__/build-node-types-test.js @@ -1,5 +1,14 @@ -const { graphql, GraphQLObjectType, GraphQLSchema } = require(`graphql`) +const { + graphql, + GraphQLObjectType, + GraphQLSchema, + GraphQLString, +} = require(`graphql`) const _ = require(`lodash`) + +jest.mock(`../../utils/api-runner-node`) +const apiRunnerNode = require(`../../utils/api-runner-node`) + const createPageDependency = require(`../../redux/actions/add-page-dependency`) jest.mock(`../../redux/actions/add-page-dependency`) const buildNodeTypes = require(`../build-node-types`) @@ -15,6 +24,20 @@ describe(`build-node-types`, () => { } beforeEach(async () => { + createPageDependency.mockClear() + const apiRunnerResponse = [ + { + pluginField: { + type: GraphQLString, + description: `test description`, + resolve: parent => { + console.log(`in resolver: ${parent}`) + return `pluginFieldValue` + }, + }, + }, + ] + apiRunnerNode.mockImplementation(() => apiRunnerResponse) ;({ store } = require(`../../redux`)) store.dispatch({ type: `DELETE_CACHE` }) ;[ @@ -130,7 +153,69 @@ describe(`build-node-types`, () => { expect(parent.childRelative.id).toEqual(`r1`) }) - it(`should create page dependency`, async () => { + it(`should handle plugin fields`, async () => { + const result = await runQuery( + ` + { + parent(id: { eq: "p1" }) { + pluginField + } + } + ` + ) + expect(result.parent.pluginField).toEqual(`pluginFieldValue`) + }) + + it(`should create root query type page dependency`, async () => { + await runQuery(` { parent(id: { eq: "p1" }) { id } } `) + + expect(createPageDependency).toHaveBeenCalledWith({ + path: `foo`, + nodeId: `p1`, + }) + }) + + it(`should create children page dependency`, async () => { + await runQuery( + ` + { + parent { + children { id } + } + } + ` + ) + expect(createPageDependency).toHaveBeenCalledWith({ + path: `foo`, + nodeId: `c1`, + }) + expect(createPageDependency).toHaveBeenCalledWith({ + path: `foo`, + nodeId: `c2`, + }) + expect(createPageDependency).toHaveBeenCalledWith({ + path: `foo`, + nodeId: `r1`, + }) + }) + + it(`should create parent page dependency`, async () => { + await runQuery( + ` + { + child(id: { eq: "c1" }) { + parent { id } + } + } + ` + ) + expect(createPageDependency).toHaveBeenCalledWith({ + path: `foo`, + nodeId: `p1`, + }) + }) + + it(`should create childX page dependency`, async () => { await runQuery( ` { @@ -145,11 +230,30 @@ describe(`build-node-types`, () => { expect(createPageDependency).toHaveBeenCalledWith({ path: `foo`, - nodeId: `p1`, + nodeId: `r1`, }) + }) + + it(`should create childrenX page dependency`, async () => { + await runQuery( + ` + { + parent(id: { eq: "p1" }) { + childrenChild { # lol + id + } + } + } + ` + ) + expect(createPageDependency).toHaveBeenCalledWith({ path: `foo`, - nodeId: `r1`, + nodeId: `c1`, + }) + expect(createPageDependency).toHaveBeenCalledWith({ + path: `foo`, + nodeId: `c2`, }) }) }) diff --git a/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js b/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js index 62903a0f0c3ac..a9926b3a4e33d 100644 --- a/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js +++ b/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js @@ -1,25 +1,16 @@ const _ = require(`lodash`) -const { - graphql, - GraphQLString, - GraphQLObjectType, - GraphQLSchema, - GraphQLInputObjectType, -} = require(`graphql`) -const { connectionArgs, connectionDefinitions } = require(`graphql-skip-limit`) - -const { runQuery } = require(`../../db/nodes`) +const { graphql, GraphQLString, GraphQLObjectType } = require(`graphql`) + const { inferObjectStructureFromNodes } = require(`../infer-graphql-type`) -const buildConnectionFields = require(`../build-connection-fields`) +const nodeConnections = require(`../build-node-connections`) +const { buildNodesSchema } = require(`../index`) const { inferInputObjectStructureFromNodes, } = require(`../infer-graphql-input-fields`) -const createSortField = require(`../create-sort-field`) const { getExampleValues, clearTypeExampleValues, } = require(`../data-tree-utils`) -const { connectionFromArray } = require(`graphql-skip-limit`) let mockNodes jest.unmock(`../../db/nodes`) @@ -28,67 +19,21 @@ nodesDb.getNodesByType = () => mockNodes function queryResult(nodes, query, { types = [] } = {}) { mockNodes = nodes - const nodeType = new GraphQLObjectType({ - name: `Test`, + const nodeObjectType = new GraphQLObjectType({ + name: `Node`, fields: inferObjectStructureFromNodes({ nodes, - types: [{ name: `Test` }, ...types], + types: [{ name: `Node` }, ...types], }), }) - - const { connectionType: nodeConnection } = connectionDefinitions({ - nodeType, - connectionFields: () => - buildConnectionFields({ - name, - nodes, - nodeObjectType: nodeType, - }), - }) - - const { sort, inferredFields } = inferInputObjectStructureFromNodes({ + const processedType = { nodes, - typeName: `test`, - }) - const schema = new GraphQLSchema({ - query: new GraphQLObjectType({ - name: `RootQueryType`, - fields: () => { - return { - allNode: { - name: `nodeConnection`, - type: nodeConnection, - args: { - ...connectionArgs, - sort: createSortField(`RootQueryType`, sort), - filter: { - type: new GraphQLInputObjectType({ - name: _.camelCase(`filter test`), - description: `Filter connection on its fields`, - fields: () => inferredFields, - }), - }, - }, - async resolve(nvi, queryArgs) { - const results = await runQuery({ - queryArgs, - firstOnly: false, - gqlType: nodeType, - }) - if (results.length > 0) { - const connection = connectionFromArray(results, queryArgs) - connection.totalCount = results.length - return connection - } else { - return null - } - }, - }, - } - }, - }), - }) - + name: `Node`, + nodeObjectType, + fieldsFromPlugins: [], + } + const fields = nodeConnections.buildFieldConfigMap(processedType) + const schema = buildNodesSchema(fields) return graphql(schema, query) } diff --git a/packages/gatsby/src/schema/build-node-connections.js b/packages/gatsby/src/schema/build-node-connections.js index b9459c3b67fd0..5bbd2d44888a2 100644 --- a/packages/gatsby/src/schema/build-node-connections.js +++ b/packages/gatsby/src/schema/build-node-connections.js @@ -8,7 +8,7 @@ const { const { inferInputObjectStructureFromFields, } = require(`./infer-graphql-input-fields-from-fields`) -const createSortField = require(`./create-sort-field`) +const buildSortArg = require(`./create-sort-field`) const buildConnectionFields = require(`./build-connection-fields`) const createPageDependency = require(`../redux/actions/add-page-dependency`) const { connectionFromArray } = require(`graphql-skip-limit`) @@ -32,70 +32,90 @@ function handleQueryResult({ results, queryArgs, path }) { } } -module.exports = (types: any) => { - const connections = {} - - _.each(types, (type /* , fieldName*/) => { - // Don't create a connection for the Site node since there can only be one - // of them. - if (type.name === `Site`) { - return +function buildResolver(gqlType) { + return async (object, queryArgs, b, { rootValue }) => { + let path + if (typeof rootValue !== `undefined`) { + path = rootValue.path } - const nodes = type.nodes - const typeName = `${type.name}Connection` - const { connectionType: typeConnection } = connectionDefinitions({ - nodeType: type.nodeObjectType, - connectionFields: () => buildConnectionFields(type), + const results = await runQuery({ + queryArgs, + firstOnly: false, + gqlType, }) + return handleQueryResult({ results, queryArgs, path }) + } +} - const inferredInputFieldsFromNodes = inferInputObjectStructureFromNodes({ - nodes, - typeName, - }) +function buildFilterArg(typeName, filterFields) { + return { + type: new GraphQLInputObjectType({ + name: _.camelCase(`filter ${typeName}`), + description: `Filter connection on its fields`, + fields: () => filterFields, + }), + } +} - const inferredInputFieldsFromPlugins = inferInputObjectStructureFromFields({ - fields: type.fieldsFromPlugins, - typeName, - }) +function buildFieldConfig(processedType) { + const { nodes, nodeObjectType } = processedType + const typeName = `${processedType.name}Connection` + const { connectionType: outputType } = connectionDefinitions({ + nodeType: nodeObjectType, + connectionFields: () => buildConnectionFields(processedType), + }) - const filterFields = _.merge( - {}, - inferredInputFieldsFromNodes.inferredFields, - inferredInputFieldsFromPlugins.inferredFields - ) - const sortNames = inferredInputFieldsFromNodes.sort.concat( - inferredInputFieldsFromPlugins.sort - ) - const sort = createSortField(typeName, sortNames) + const inferredInputFieldsFromNodes = inferInputObjectStructureFromNodes({ + nodes, + typeName, + }) - connections[_.camelCase(`all ${type.name}`)] = { - type: typeConnection, - description: `Connection to all ${type.name} nodes`, - args: { - ...connectionArgs, - sort, - filter: { - type: new GraphQLInputObjectType({ - name: _.camelCase(`filter ${type.name}`), - description: `Filter connection on its fields`, - fields: () => filterFields, - }), - }, - }, - async resolve(object, queryArgs, b, { rootValue }) { - let path - if (typeof rootValue !== `undefined`) { - path = rootValue.path - } - const results = await runQuery({ - queryArgs, - firstOnly: false, - gqlType: type.node.type, - }) - return handleQueryResult({ results, queryArgs, path }) - }, - } + const inferredInputFieldsFromPlugins = inferInputObjectStructureFromFields({ + fields: processedType.fieldsFromPlugins, + typeName, }) - return connections + const filterFields = _.merge( + {}, + inferredInputFieldsFromNodes.inferredFields, + inferredInputFieldsFromPlugins.inferredFields + ) + const sortNames = inferredInputFieldsFromNodes.sort.concat( + inferredInputFieldsFromPlugins.sort + ) + + const argsMap = { + ...connectionArgs, + sort: buildSortArg(typeName, sortNames), + filter: buildFilterArg(processedType.name, filterFields), + } + + return { + type: outputType, + description: `Connection to all ${processedType.name} nodes`, + args: argsMap, + resolve: buildResolver(nodeObjectType), + } +} + +function buildFieldConfigMap(processedType) { + const fieldName = _.camelCase(`all ${processedType.name}`) + const fieldConfig = buildFieldConfig(processedType) + return { [fieldName]: fieldConfig } +} + +function fieldConfigReducer(fieldConfigMap, type) { + return Object.assign(fieldConfigMap, buildFieldConfigMap(type)) +} + +function buildAll(processedTypes) { + return processedTypes + .filter(type => type.name !== `Site`) + .reduce(fieldConfigReducer, {}) +} + +module.exports = { + buildFieldConfig, + buildFieldConfigMap, + buildAll, } diff --git a/packages/gatsby/src/schema/build-node-types.js b/packages/gatsby/src/schema/build-node-types.js index 92b230e8d22bc..6376251882d24 100644 --- a/packages/gatsby/src/schema/build-node-types.js +++ b/packages/gatsby/src/schema/build-node-types.js @@ -29,170 +29,234 @@ type TypeMap = { [typeName: string]: ProcessedNodeType, } -module.exports = async ({ parentSpan }) => { - const spanArgs = parentSpan ? { childOf: parentSpan } : {} - const span = tracer.startSpan(`build schema`, spanArgs) +const defaultNodeFields = { + id: { + type: new GraphQLNonNull(GraphQLID), + description: `The id of this node.`, + }, + parent: { + type: nodeInterface, + description: `The parent of this node.`, + resolve: pageDependencyResolver(node => getNode(node.parent)), + }, + children: { + type: new GraphQLList(nodeInterface), + description: `The children of this node.`, + resolve: pageDependencyResolver(node => node.children.map(getNode)), + }, +} - const types = _.groupBy( - getNodes().filter(node => node.internal && !node.internal.ignoreType), - node => node.internal.type +function groupChildNodesByType(nodes) { + return _(nodes) + .flatMap(node => node.children.map(getNode)) + .groupBy( + node => (node.internal ? _.camelCase(node.internal.type) : undefined) + ) + .value() +} + +function nodeIsOfType(typeName) { + return node => _.camelCase(node.internal.type) === typeName +} + +function makeChildrenResolver(typeName) { + return node => node.children.map(getNode).filter(nodeIsOfType(typeName)) +} + +function buildChildrenFieldConfigMap(typeName, nodeObjectType) { + const fieldName = _.camelCase(`children ${typeName}`) + const fieldConfig = { + type: new GraphQLList(nodeObjectType), + description: `The children of this node of type ${typeName}`, + resolve: pageDependencyResolver(makeChildrenResolver(typeName)), + } + return { [fieldName]: fieldConfig } +} + +function makeChildResolver(typeName) { + return node => node.children.map(getNode).find(nodeIsOfType(typeName)) +} + +function buildChildFieldConfigMap(typeName, nodeObjectType) { + const fieldName = _.camelCase(`child ${typeName}`) + const fieldConfig = { + type: nodeObjectType, + description: `The child of this node of type ${typeName}`, + resolve: pageDependencyResolver(makeChildResolver(typeName)), + } + return { [fieldName]: fieldConfig } +} + +function inferChildFieldConfigMap(type, typeName, processedTypes) { + const { nodeObjectType } = processedTypes[typeName] + // Does this child type have one child per parent or multiple? + const maxChildCount = _.maxBy( + _.values(_.groupBy(type, c => c.parent)), + g => g.length + ).length + + if (maxChildCount > 1) { + return buildChildrenFieldConfigMap(typeName, nodeObjectType) + } else { + return buildChildFieldConfigMap(typeName, nodeObjectType) + } +} + +function inferChildFields(nodes, processedTypes) { + // Create children fields for each type of children e.g. + // "childrenMarkdownRemark". + const childNodesByType = groupChildNodesByType(nodes) + + const configMaps = _.map(childNodesByType, (type, typeName) => + inferChildFieldConfigMap(type, typeName, processedTypes) ) - const processedTypes: TypeMap = {} + return _.assign.apply(null, [{}, ...configMaps]) +} - clearTypeExampleValues() +function inferFields({ nodes, pluginFields, processedTypes }) { + // Create children fields for each type of children e.g. + // "childrenMarkdownRemark". + const childFields = inferChildFields(nodes, processedTypes) - // Reset stored File type to not point to outdated type definition - setFileNodeRootType(null) + const inferredFields = inferObjectStructureFromNodes({ + nodes, + types: _.values(processedTypes), + ignoreFields: Object.keys(pluginFields), + }) - function createNodeFields(type: ProcessedNodeType) { - const defaultNodeFields = { - id: { - type: new GraphQLNonNull(GraphQLID), - description: `The id of this node.`, - }, - parent: { - type: nodeInterface, - description: `The parent of this node.`, - resolve: pageDependencyResolver(node => getNode(node.parent)), - }, - children: { - type: new GraphQLList(nodeInterface), - description: `The children of this node.`, - resolve: pageDependencyResolver(node => node.children.map(getNode)), - }, - } + return { + ...defaultNodeFields, + ...childFields, + ...inferredFields, + ...pluginFields, + } +} - // Create children fields for each type of children e.g. - // "childrenMarkdownRemark". - const childNodesByType = _(type.nodes) - .flatMap(({ children }) => children.map(getNode)) - .groupBy( - node => (node.internal ? _.camelCase(node.internal.type) : undefined) - ) - .value() - - Object.keys(childNodesByType).forEach(childNodeType => { - // Does this child type have one child per parent or multiple? - const maxChildCount = _.maxBy( - _.values(_.groupBy(childNodesByType[childNodeType], c => c.parent)), - g => g.length - ).length - - if (maxChildCount > 1) { - defaultNodeFields[_.camelCase(`children ${childNodeType}`)] = { - type: new GraphQLList(processedTypes[childNodeType].nodeObjectType), - description: `The children of this node of type ${childNodeType}`, - resolve: pageDependencyResolver(node => - node.children - .map(getNode) - .filter(node => _.camelCase(node.internal.type) === childNodeType) - ), - } - } else { - defaultNodeFields[_.camelCase(`child ${childNodeType}`)] = { - type: processedTypes[childNodeType].nodeObjectType, - description: `The child of this node of type ${childNodeType}`, - resolve: pageDependencyResolver(node => - node.children - .map(getNode) - .find(node => _.camelCase(node.internal.type) === childNodeType) - ), - } - } - }) +function buildResolver(gqlType) { + return async (a, queryArgs) => { + if (!_.isObject(queryArgs)) { + queryArgs = {} + } - const inferredFields = inferObjectStructureFromNodes({ - nodes: type.nodes, - types: _.values(processedTypes), - ignoreFields: Object.keys(type.fieldsFromPlugins), + const results = await runQuery({ + queryArgs: { + filter: { + ...queryArgs, + }, + }, + firstOnly: true, + gqlType, }) - return { - ...defaultNodeFields, - ...inferredFields, - ...type.fieldsFromPlugins, + if (results.length > 0) { + return results[0] + } else { + return null } } +} - async function createType(nodes, typeName) { - const intermediateType = {} +function buildNodeObjectType({ + typeName, + nodes, + pluginFields, + processedTypes, +}) { + return new GraphQLObjectType({ + name: typeName, + description: `Node of type ${typeName}`, + interfaces: [nodeInterface], + fields: () => inferFields({ nodes, pluginFields, processedTypes }), + isTypeOf: value => value.internal.type === typeName, + }) +} - intermediateType.name = typeName - intermediateType.nodes = nodes +async function buildProcessedType(nodes, typeName, processedTypes, span) { + const intermediateType = {} - const fieldsFromPlugins = await apiRunner(`setFieldsOnGraphQLNodeType`, { - type: intermediateType, - traceId: `initial-setFieldsOnGraphQLNodeType`, - parentSpan: span, - }) + intermediateType.name = typeName + intermediateType.nodes = nodes - const mergedFieldsFromPlugins = _.merge(...fieldsFromPlugins) + const pluginFields = await apiRunner(`setFieldsOnGraphQLNodeType`, { + type: intermediateType, + traceId: `initial-setFieldsOnGraphQLNodeType`, + parentSpan: span, + }) - const inferredInputFieldsFromPlugins = inferInputObjectStructureFromFields({ - fields: mergedFieldsFromPlugins, - }) + const mergedFieldsFromPlugins = _.merge(...pluginFields) + + const pluginInputFields = inferInputObjectStructureFromFields({ + fields: mergedFieldsFromPlugins, + }) - const gqlType = new GraphQLObjectType({ + const gqlType = buildNodeObjectType({ + typeName, + nodes, + pluginFields: mergedFieldsFromPlugins, + processedTypes, + }) + + const nodeInputFields = inferInputObjectStructureFromNodes({ + nodes, + typeName, + }) + + const filterFields = _.merge( + {}, + nodeInputFields.inferredFields, + pluginInputFields.inferredFields + ) + + return { + ...intermediateType, + fieldsFromPlugins: mergedFieldsFromPlugins, + nodeObjectType: gqlType, + node: { name: typeName, - description: `Node of type ${typeName}`, - interfaces: [nodeInterface], - fields: () => createNodeFields(proccesedType), - isTypeOf: value => value.internal.type === typeName, - }) + type: gqlType, + args: filterFields, + resolve: pageDependencyResolver(buildResolver(gqlType)), + }, + } +} - const inferedInputFields = inferInputObjectStructureFromNodes({ - nodes, - typeName, - }) +function groupNodesByType(nodes) { + return _.groupBy( + nodes.filter(node => node.internal && !node.internal.ignoreType), + node => node.internal.type + ) +} - const filterFields = _.merge( - {}, - inferedInputFields.inferredFields, - inferredInputFieldsFromPlugins.inferredFields - ) +module.exports = async ({ parentSpan }) => { + const spanArgs = parentSpan ? { childOf: parentSpan } : {} + const span = tracer.startSpan(`build schema`, spanArgs) - const proccesedType: ProcessedNodeType = { - ...intermediateType, - fieldsFromPlugins: mergedFieldsFromPlugins, - nodeObjectType: gqlType, - node: { - name: typeName, - type: gqlType, - args: filterFields, - resolve: pageDependencyResolver(async (a, queryArgs) => { - if (!_.isObject(queryArgs)) { - queryArgs = {} - } - - const results = await runQuery({ - queryArgs: { - filter: { - ...queryArgs, - }, - }, - firstOnly: true, - gqlType, - }) - - if (results.length > 0) { - return results[0] - } else { - return null - } - }), - }, - } + const types = groupNodesByType(getNodes()) + const processedTypes: TypeMap = {} - processedTypes[_.camelCase(typeName)] = proccesedType + clearTypeExampleValues() - // Special case to construct linked file type used by type inferring - if (typeName === `File`) { - setFileNodeRootType(gqlType) - } - } + // Reset stored File type to not point to outdated type definition + setFileNodeRootType(null) // Create node types and node fields for nodes that have a resolve function. - await Promise.all(_.map(types, createType)) + await Promise.all( + _.map(types, async (nodes, typeName) => { + const fieldName = _.camelCase(typeName) + const processedType = await buildProcessedType( + nodes, + typeName, + processedTypes, + span + ) + processedTypes[fieldName] = processedType + // Special case to construct linked file type used by type inferring + if (typeName === `File`) { + setFileNodeRootType(processedType.nodeObjectType) + } + return + }) + ) span.finish() diff --git a/packages/gatsby/src/schema/index.js b/packages/gatsby/src/schema/index.js index c2dff9b04f086..99ba20836be44 100644 --- a/packages/gatsby/src/schema/index.js +++ b/packages/gatsby/src/schema/index.js @@ -4,15 +4,25 @@ const { GraphQLSchema, GraphQLObjectType } = require(`graphql`) const { mergeSchemas } = require(`graphql-tools`) const buildNodeTypes = require(`./build-node-types`) -const buildNodeConnections = require(`./build-node-connections`) +const nodeConnections = require(`./build-node-connections`) const { store } = require(`../redux`) const invariant = require(`invariant`) const { clearUnionTypes } = require(`./infer-graphql-type`) -module.exports = async ({ parentSpan }) => { +function buildNodesSchema(fields) { + return new GraphQLSchema({ + query: new GraphQLObjectType({ + name: `RootQueryType`, + fields, + }), + }) +} +module.exports.buildNodesSchema = buildNodesSchema + +module.exports.build = async ({ parentSpan }) => { clearUnionTypes() const typesGQL = await buildNodeTypes({ parentSpan }) - const connections = buildNodeConnections(_.values(typesGQL)) + const connections = nodeConnections.buildAll(_.values(typesGQL)) // Pull off just the graphql node from each type object. const nodes = _.mapValues(typesGQL, `node`) @@ -22,12 +32,7 @@ module.exports = async ({ parentSpan }) => { const thirdPartySchemas = store.getState().thirdPartySchemas || [] - const gatsbySchema = new GraphQLSchema({ - query: new GraphQLObjectType({ - name: `RootQueryType`, - fields: { ...connections, ...nodes }, - }), - }) + const gatsbySchema = buildNodesSchema({ ...connections, ...nodes }) const schema = mergeSchemas({ schemas: [gatsbySchema, ...thirdPartySchemas], From ad142af473fc8dc8555a5cf23a0dfca42fcbbe90 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Mon, 12 Nov 2018 15:13:28 +0100 Subject: [PATCH 275/462] chore(release): Publish - gatsby-plugin-manifest@2.0.9 - gatsby-source-contentful@2.0.14 - gatsby@2.0.46 --- packages/gatsby-plugin-manifest/CHANGELOG.md | 8 ++++++++ packages/gatsby-plugin-manifest/package.json | 2 +- packages/gatsby-source-contentful/CHANGELOG.md | 8 ++++++++ packages/gatsby-source-contentful/package.json | 2 +- packages/gatsby/CHANGELOG.md | 6 ++++++ packages/gatsby/package.json | 2 +- 6 files changed, 25 insertions(+), 3 deletions(-) diff --git a/packages/gatsby-plugin-manifest/CHANGELOG.md b/packages/gatsby-plugin-manifest/CHANGELOG.md index ed0a0b5bc54b0..0e3cb72c012fa 100644 --- a/packages/gatsby-plugin-manifest/CHANGELOG.md +++ b/packages/gatsby-plugin-manifest/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.9](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-manifest/compare/gatsby-plugin-manifest@2.0.8...gatsby-plugin-manifest@2.0.9) (2018-11-12) + +### Features + +- **gatsby-plugin-manifest:** add option to generate apple-touch-icons links ([#7256](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-manifest/issues/7256)) ([0b9d656](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-manifest/commit/0b9d656)), closes [#5887](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-manifest/issues/5887) + ## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-manifest/compare/gatsby-plugin-manifest@2.0.7...gatsby-plugin-manifest@2.0.8) (2018-11-08) diff --git a/packages/gatsby-plugin-manifest/package.json b/packages/gatsby-plugin-manifest/package.json index 59053ac0fe831..8f55f85a558a3 100644 --- a/packages/gatsby-plugin-manifest/package.json +++ b/packages/gatsby-plugin-manifest/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-manifest", "description": "Gatsby plugin which adds a manifest.webmanifest to make sites progressive web apps", - "version": "2.0.8", + "version": "2.0.9", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-source-contentful/CHANGELOG.md b/packages/gatsby-source-contentful/CHANGELOG.md index f5d69bcdffd1e..3657cc4565d08 100644 --- a/packages/gatsby-source-contentful/CHANGELOG.md +++ b/packages/gatsby-source-contentful/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.14](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful/compare/gatsby-source-contentful@2.0.13...gatsby-source-contentful@2.0.14) (2018-11-12) + +### Bug Fixes + +- **gatsby-source-contentful:** Remove unused argument ([#9866](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful/issues/9866)) ([88fffb5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful/commit/88fffb5)) + ## [2.0.13](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful/compare/gatsby-source-contentful@2.0.12...gatsby-source-contentful@2.0.13) (2018-11-08) diff --git a/packages/gatsby-source-contentful/package.json b/packages/gatsby-source-contentful/package.json index eaf5701a0be98..4da5510b3794d 100644 --- a/packages/gatsby-source-contentful/package.json +++ b/packages/gatsby-source-contentful/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-contentful", "description": "Gatsby source plugin for building websites using the Contentful CMS as a data source", - "version": "2.0.13", + "version": "2.0.14", "author": "Marcus Ericsson (mericsson.com)", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 429dc61adf975..08f2c97e92e8f 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.46](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.45...gatsby@2.0.46) (2018-11-12) + +**Note:** Version bump only for package gatsby + ## [2.0.45](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.44...gatsby@2.0.45) (2018-11-09) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index be2639520872c..c57c4d29ffc28 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.45", + "version": "2.0.46", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From 8f32dd6e2497fd49f20e8e800517b722c66179ee Mon Sep 17 00:00:00 2001 From: Robin Cussol Date: Mon, 12 Nov 2018 16:20:51 +0100 Subject: [PATCH 276/462] Improving unit-testing.md (#9825) Following [suggestions](https://github.com/gatsbyjs/gatsby/pull/9795#issuecomment-436809926) from @shannonbux to improve `unit-testing.md` further --- docs/docs/unit-testing.md | 70 +++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 29 deletions(-) diff --git a/docs/docs/unit-testing.md b/docs/docs/unit-testing.md index 25e8b198b733f..45dd419a2b97a 100644 --- a/docs/docs/unit-testing.md +++ b/docs/docs/unit-testing.md @@ -15,8 +15,10 @@ which was created by Facebook. While Jest is a general purpose JavaScript unit testing framework, it has lots of features that make it work particularly well with React. -For this guide, you will be starting with `gatsby-starter-blog`, but the -concepts should be the same or very similar for your site. +_Note: For this guide, you will be starting with `gatsby-starter-blog`, but the +concepts should be the same or very similar for your site._ + +### 1. Installing dependencies First you need to install Jest and some more required packages. You need to install Babel 7 as it's required by Jest. @@ -25,6 +27,8 @@ install Babel 7 as it's required by Jest. npm install --save-dev jest babel-jest react-test-renderer identity-obj-proxy 'babel-core@^7.0.0-0' @babel/core babel-preset-gatsby ``` +### 2. Creating a configuration file for Jest + Because Gatsby handles its own Babel configuration, you will need to manually tell Jest to use `babel-jest`. The easiest way to do this is to add a `jest.config.js`. You can set up some useful defaults at the same time: @@ -47,10 +51,12 @@ module.exports = { } ``` -The `transform` section tells Jest that all `js` or `jsx` files need to be -transformed using a `jest-preprocess.js` file in the project root. Go ahead and -create this file now. This is where you set up your Babel config. You can start -with a minimal config. +Let's go over the content of this configuration file: + +- The `transform` section tells Jest that all `js` or `jsx` files need to be + transformed using a `jest-preprocess.js` file in the project root. Go ahead and + create this file now. This is where you set up your Babel config. You can start + with the following minimal config: ```js:title=jest-preprocess.js const babelOptions = { @@ -60,28 +66,28 @@ const babelOptions = { module.exports = require("babel-jest").createTransformer(babelOptions) ``` -Back to the Jest config, you can see the next option is `moduleNameMapper`. This -section works a bit like webpack rules, and tells Jest how to handle imports. -You are mainly concerned here with mocking static file imports, which Jest can't -handle. A mock is a dummy module that is used instead of the real module inside -tests. It is good when you have something that you can't or don't want to test. -You can mock anything, and here you are mocking assets rather than code. For -stylesheets you need to use the package `identity-obj-proxy`. For all other assets -you need to use a manual mock called `fileMock.js`. You need to create this yourself. -The convention is to create a directory called `__mocks__` in the root directory -for this. Note the pair of double underscores in the name. +- The next option is `moduleNameMapper`. This + section works a bit like webpack rules, and tells Jest how to handle imports. + You are mainly concerned here with mocking static file imports, which Jest can't + handle. A mock is a dummy module that is used instead of the real module inside + tests. It is good when you have something that you can't or don't want to test. + You can mock anything, and here you are mocking assets rather than code. For + stylesheets you need to use the package `identity-obj-proxy`. For all other assets + you need to use a manual mock called `fileMock.js`. You need to create this yourself. + The convention is to create a directory called `__mocks__` in the root directory + for this. Note the pair of double underscores in the name. ```js:title=__mocks__/fileMock.js module.exports = "test-file-stub" ``` -The next config setting is `testPathIgnorePatterns`. You are telling Jest to ignore -any tests in the `node_modules` or `.cache` directories. +- The next config setting is `testPathIgnorePatterns`. You are telling Jest to ignore + any tests in the `node_modules` or `.cache` directories. -The next option is very important, and is different from what you'll find in other -Jest guides. The reason that you need `transformIgnorePatterns` is because Gastby -includes un-transpiled ES6 code. By default Jest doesn't try to transform code -inside `node_modules`, so you will get an error like this: +- The next option is very important, and is different from what you'll find in other + Jest guides. The reason that you need `transformIgnorePatterns` is because Gastby + includes un-transpiled ES6 code. By default Jest doesn't try to transform code + inside `node_modules`, so you will get an error like this: ``` /my-blog/node_modules/gatsby/cache-dir/gatsby-browser-entry.js:1 @@ -94,17 +100,17 @@ This is because `gatsby-browser-entry.js` isn't being transpiled before running in Jest. You can fix this by changing the default `transformIgnorePatterns` to exclude the `gatsby` module. -The `globals` section sets `__PATH_PREFIX__`, which is usually set by Gatsby, -and which some components need. +- The `globals` section sets `__PATH_PREFIX__`, which is usually set by Gatsby, + and which some components need. -You need to set `testURL` to a valid URL, because some DOM APIs such as -`localStorage` are unhappy with the default (`about:blank`). +- You need to set `testURL` to a valid URL, because some DOM APIs such as + `localStorage` are unhappy with the default (`about:blank`). > Note: if you're using Jest 23.5.0 or later, `testURL` will default to `http://localhost` so you can skip this setting. -There's one more global that you need to set, but as it's a function you can't -set it here in the JSON. The `setupFiles` array lets you list files that will be -included before all tests are run, so it's perfect for this. +- There's one more global that you need to set, but as it's a function you can't + set it here in the JSON. The `setupFiles` array lets you list files that will be + included before all tests are run, so it's perfect for this. ```js:title=loadershim.js global.___loader = { @@ -112,6 +118,10 @@ global.___loader = { } ``` +### 3. Useful mocks to complete your testing environment + +#### Mocking `gastby` + Finally it's a good idea to mock the `gatsby` module itself. This may not be needed at first, but will make things a lot easier if you want to test components that use `Link` or GraphQL. @@ -135,6 +145,8 @@ module.exports = { This mocks the `graphql()` function, `Link` component, and `StaticQuery` component. +#### Mocking `location` from `Router` + One more issue that you may encounter is that some components expect to be able to use the `location` prop that is passed in by `Router`. You can fix this by manually passing in the prop: From 542f4f86b492c0339d89e3f7d98832224464485a Mon Sep 17 00:00:00 2001 From: Lennart Date: Mon, 12 Nov 2018 16:53:09 +0100 Subject: [PATCH 277/462] feat(www): Additional Netlify information in Prismic guide (#9886) A bit more information in the Netlify part. --- docs/docs/sourcing-from-prismic.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/docs/sourcing-from-prismic.md b/docs/docs/sourcing-from-prismic.md index c79735d0922b0..2a45cf30cb146 100644 --- a/docs/docs/sourcing-from-prismic.md +++ b/docs/docs/sourcing-from-prismic.md @@ -155,11 +155,11 @@ export const pageQuery = graphql` ## Deploying to Netlify -Netlify is able to automatically start builds on pushes to a repository and accepts [webhooks](https://www.netlify.com/docs/webhooks/) to do so. Fortunately, Prismic can [trigger webhook](https://user-guides.prismic.io/webhooks/webhooks) URLs when publishing content. With those features set up, new content will automatically appear on your Netlify site. +Earlier you defined an `API_KEY` environment variable for the source plugin. Netlify can set [build environment variables](https://www.netlify.com/docs/continuous-deployment/#build-environment-variables), too. Go to your site and enter the `API_KEY` variable under `Settings → Build & deploy`. This way the source plugin gets the access token passed on the build. -Setup your Netlify project and afterwards go to the `Build hooks` setting at `Settings → Build & deploy`. You'll receive a URL of the format `https://api.netlify.com/build_hooks/-randomstring-` after clicking `Add build hook`. +Netlify is able to automatically start builds on pushes to a repository and accepts [webhooks](https://www.netlify.com/docs/webhooks/) to do so. Fortunately, Prismic can [trigger webhook](https://user-guides.prismic.io/webhooks/webhooks) URLs when publishing content. With those features set up, new content will automatically appear on your Netlify site. -On your Prismic project, visit the `Webhooks` setting and insert the copied URL into the respective field. Confirm with `Add this webhook`. Everytime you publish a new document, Netlify will re-build your site. +Setup your Netlify project and afterwards go to the `Build hooks` setting at `Settings → Build & deploy`. You'll receive a URL of the format `https://api.netlify.com/build_hooks/-randomstring-` after clicking `Add build hook`. On your Prismic project, visit the `Webhooks` setting and insert the copied URL into the respective field. Confirm with `Add this webhook`. Everytime you publish a new document, Netlify will re-build your site. ## Adding more features From d11cf5fb4ec8f3f5ddc65fb822aa0b153c1c0a2d Mon Sep 17 00:00:00 2001 From: Alvis Tang Date: Mon, 12 Nov 2018 16:25:42 +0000 Subject: [PATCH 278/462] chore(gatsby): update Redux to v4 (#8296) ## Summary Redux 4 has been released for a while. Shall we update the dependency? I've already tested the change in my fork and nothing is breaking. ### Motivation Redux 4 has updated its TypeScript bindings. Personally, I prefer the new version much. Putting it aside, Redux 4 has es modules support and dropped its dependency on `lodash`. Hence, it can make the bundle smaller. close #8265 --- packages/gatsby/package.json | 2 +- yarn.lock | 23 ++++++++--------------- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index c57c4d29ffc28..0a45a8af8ef15 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -99,7 +99,7 @@ "react-dev-utils": "^4.2.1", "react-error-overlay": "^3.0.0", "react-hot-loader": "^4.1.0", - "redux": "^3.6.0", + "redux": "^4.0.0", "relay-compiler": "1.5.0", "request": "^2.85.0", "shallow-compare": "^1.2.2", diff --git a/yarn.lock b/yarn.lock index 8a0b3ae8e7707..855492d6c5d6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12010,11 +12010,6 @@ lockfile@^1.0.4: dependencies: signal-exit "^3.0.2" -lodash-es@^4.2.1: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.11.tgz#145ab4a7ac5c5e52a3531fb4f310255a152b4be0" - integrity sha512-DHb1ub+rMjjrxqlB3H56/6MXtm1lSksDp2rA2cNWjG8mlDUYFhUj3Di2Zn5IwSU87xLv8tNIQ7sSwE/YOX/D/Q== - lodash-webpack-plugin@^0.11.5: version "0.11.5" resolved "https://registry.yarnpkg.com/lodash-webpack-plugin/-/lodash-webpack-plugin-0.11.5.tgz#c4bd064b4f561c3f823fa5982bdeb12c475390b9" @@ -12369,7 +12364,7 @@ longest@^1.0.0, longest@^1.0.1: resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -15957,15 +15952,13 @@ reduce@^1.0.1: dependencies: object-keys "~1.0.0" -redux@^3.6.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" - integrity sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A== +redux@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.1.tgz#436cae6cc40fbe4727689d7c8fae44808f1bfef5" + integrity sha512-R7bAtSkk7nY6O/OYMVR9RiBI+XghjF9rlbl5806HJbQph0LJVHZrU5oaO4q70eUKiqMRqm4y07KLTlMZ2BlVmg== dependencies: - lodash "^4.2.1" - lodash-es "^4.2.1" - loose-envify "^1.1.0" - symbol-observable "^1.0.3" + loose-envify "^1.4.0" + symbol-observable "^1.2.0" reflect-metadata@^0.1.2: version "0.1.12" @@ -18184,7 +18177,7 @@ symbol-observable@1.0.1: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= -symbol-observable@^1.0.3, symbol-observable@^1.1.0: +symbol-observable@^1.1.0, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== From 741f5789c114d5aad23c98c43795ea95d2c7869c Mon Sep 17 00:00:00 2001 From: Gregory Date: Mon, 12 Nov 2018 22:20:08 +0400 Subject: [PATCH 279/462] Improved markdown (#9888) Improved markdown - for correct displaying link --- docs/blog/2018-08-09-swag-store/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/blog/2018-08-09-swag-store/index.md b/docs/blog/2018-08-09-swag-store/index.md index b0731645f8987..5479741a4ff71 100644 --- a/docs/blog/2018-08-09-swag-store/index.md +++ b/docs/blog/2018-08-09-swag-store/index.md @@ -78,3 +78,4 @@ Thanks for being part of the open source community! 💪💜 [auth0]: https://auth0.com/ [invite]: https://github.com/gatsbyjs/peril-gatsbyjs/blob/master/org/invite-collaborator.ts [peril]: https://github.com/danger/peril +[contribute]: /docs/how-to-contribute/ From a414aea0c919c8679ba9b8a0edcc767feaef2508 Mon Sep 17 00:00:00 2001 From: Amberley Date: Mon, 12 Nov 2018 12:38:28 -0600 Subject: [PATCH 280/462] feat(showcase): Add Vets Who Code to showcase (#9887) * Add Vets Who Code to showcase * yaml error --- docs/sites.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index d2ae6082a6c33..02ce49189f494 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3308,3 +3308,12 @@ built_by: Ty Hopp built_by_url: https://github.com/tyhopp featured: false +- title: Vets Who Code + url: https://vetswhocode.io/ + main_url: https://vetswhocode.io/ + description: >- + VetsWhoCode is a non-profit organization dedicated to training military veterans & giving them the skills they need transition into tech careers. + categories: + - Technology + - Nonprofit + featured: false From 8f7e3aa92795a09a19e44508d73e6a2eeaf52475 Mon Sep 17 00:00:00 2001 From: Tobias Lundgren Date: Mon, 12 Nov 2018 22:46:21 +0100 Subject: [PATCH 281/462] Fix broken link in README for gatsby-plugin-react-helmet (#9891) --- packages/gatsby-plugin-react-helmet/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby-plugin-react-helmet/README.md b/packages/gatsby-plugin-react-helmet/README.md index 2fb669d9c76f5..e737bcfc33948 100644 --- a/packages/gatsby-plugin-react-helmet/README.md +++ b/packages/gatsby-plugin-react-helmet/README.md @@ -26,4 +26,4 @@ plugins: [`gatsby-plugin-react-helmet`] ## Examples - [GatsbyJS.org](https://github.com/gatsbyjs/gatsby/blob/master/www/src/components/layout.js) -- [Jason Lengstorf personal website](https://github.com/jlengstorf/lengstorf.com/blob/master/src/components/SEO.js) +- [Jason Lengstorf personal website](https://github.com/jlengstorf/lengstorf.com/blob/master/src/components/SEO/SEO.js) From faf6894a4fd63c77e9049ae238998899f2bf58a4 Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Mon, 12 Nov 2018 16:05:05 -0600 Subject: [PATCH 282/462] chore(release): Publish - gatsby-plugin-react-helmet@3.0.2 - gatsby@2.0.47 --- packages/gatsby-plugin-react-helmet/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-react-helmet/package.json | 2 +- packages/gatsby/CHANGELOG.md | 6 ++++++ packages/gatsby/package.json | 2 +- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/gatsby-plugin-react-helmet/CHANGELOG.md b/packages/gatsby-plugin-react-helmet/CHANGELOG.md index c1f85606f77d5..6b98505892aa2 100644 --- a/packages/gatsby-plugin-react-helmet/CHANGELOG.md +++ b/packages/gatsby-plugin-react-helmet/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-react-helmet/compare/gatsby-plugin-react-helmet@3.0.1...gatsby-plugin-react-helmet@3.0.2) (2018-11-12) + +**Note:** Version bump only for package gatsby-plugin-react-helmet + ## [3.0.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-react-helmet/compare/gatsby-plugin-react-helmet@3.0.0...gatsby-plugin-react-helmet@3.0.1) (2018-10-29) diff --git a/packages/gatsby-plugin-react-helmet/package.json b/packages/gatsby-plugin-react-helmet/package.json index 5194ca30e5a28..fd481df3eff9d 100644 --- a/packages/gatsby-plugin-react-helmet/package.json +++ b/packages/gatsby-plugin-react-helmet/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-react-helmet", "description": "Manage document head data with react-helmet. Provides drop-in server rendering support for Gatsby.", - "version": "3.0.1", + "version": "3.0.2", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 08f2c97e92e8f..2d229163e8b42 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.47](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.46...gatsby@2.0.47) (2018-11-12) + +**Note:** Version bump only for package gatsby + ## [2.0.46](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.45...gatsby@2.0.46) (2018-11-12) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 0a45a8af8ef15..d4827418ea144 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.46", + "version": "2.0.47", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From 3fe628739fc7a715e596ccb315df8ca82f567510 Mon Sep 17 00:00:00 2001 From: Thomas Lent Date: Mon, 12 Nov 2018 17:09:55 -0500 Subject: [PATCH 283/462] Improvements to tutorial part zero (#9522) * Improved headers and clarity in tutorial part zero * Further simplify headings * Improve Git section * Improve the summary * Add optional link explaining git * Remove other reference to learn about git * Fix titles and links to match new headings * Clarify that git only needs to be installed to use Gatsby * Mention that the git handbook also explains Github * Revert "Fix titles and links to match new headings" This reverts commit 511bc37813b866104e2934026d5f9330d36cb5e2. * Revert the headings back to having verbs * Reword references to Gatsby CLI to make it clear it is not the only Gatsby CLI * Change 'Create a Gatsby site' heading back * Fix title to match heading * Clarify git sentence * Add missing space --- docs/tutorial/part-zero/index.md | 52 ++++++++++++----------- www/src/data/sidebars/tutorial-links.yaml | 8 ++-- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/docs/tutorial/part-zero/index.md b/docs/tutorial/part-zero/index.md index 996e600960f18..e8d5e9f8d0dcd 100644 --- a/docs/tutorial/part-zero/index.md +++ b/docs/tutorial/part-zero/index.md @@ -3,7 +3,7 @@ title: Set Up Your Development Environment typora-copy-images-to: ./ --- -Before you start to code, you’ll need to familiarize with some core web technologies, and make sure that you have installed all required software tools. +Before you start building your first Gatsby site, you’ll need to familiarize yourself with some core web technologies and make sure that you have installed all required software tools. ## Overview of core technologies @@ -17,7 +17,7 @@ It’s not necessary to be an expert with these already — if you’re not, don > 💡 (Optional!) For a comprehensive introduction to what a website is--including an intro to HTML and CSS--check out “[**Building your first web page**](https://learn.shayhowe.com/html-css/building-your-first-web-page/)”. It’s a great place to start learning about the web. For a more hands-on introduction to [**HTML**](https://www.codecademy.com/learn/learn-html), [**CSS**](https://www.codecademy.com/learn/learn-css), and [**JavaScript**](https://www.codecademy.com/learn/introduction-to-javascript), check out the tutorials from Codecademy. [**React**](https://reactjs.org/tutorial/tutorial.html) and [**GraphQL**](http://graphql.org/graphql-js/) also have their own introductory tutorials. -## Familiarize with command line +## Familiarize yourself with the command line The command line is a text-based interface used to run commands on your computer. You’ll also often see it referred to as the terminal. In this tutorial we’ll use both interchangeably. It’s a lot like using the Finder on a Mac or Explorer on Windows. Finder and Explorer are examples of graphical user interfaces (GUI). The command line is a powerful, text-based way to interact with your computer. @@ -27,13 +27,13 @@ Take a moment to locate and open up the command line interface (CLI) for your co ## Install Node.js -Node.js is an environment that can run JavaScript code. Gatsby is built with Node.js. To get up and running with Gatsby, you’ll need to have a recent version installed on your computer. +Node.js is an environment that can run JavaScript code outside of a web browser. Gatsby is built with Node.js. To get up and running with Gatsby, you’ll need to have a recent version installed on your computer. ### ⌚ Download Node.js Visit the [**Node.js site**](https://nodejs.org/) and follow the instructions to download and install the recommended version for your operating system. Once you have followed the installation steps, make sure everything was installed properly: -### ✋ Check your Node.js installation +### Check your Node.js installation 1. Open up your terminal. 2. Run `node --version`. (If you’re new to the command line, “run `command`” means “type `node --version` in the command prompt, and hit the Enter key”. From here on, this is what we mean by “run `command`”). @@ -43,7 +43,7 @@ The output of each of those commands should be a version number. Your versions m ![Check node and npm versions in terminal](01-node-npm-versions.png) -## Familiarize with npm +## Familiarize yourself with npm npm is a JavaScript package manager. A package is a module of code that you can choose to include in your projects. If you just downloaded and installed Node.js, npm was installed with it! @@ -57,15 +57,19 @@ npm has three distinct components: the npm website, the npm registry, and the np ## Install Git -Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. When you install a Gatsby "starter" site, Gatsby uses Git behind the scenes to download and install the required files for your starter. +Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. When you install a Gatsby "starter" site, Gatsby uses Git behind the scenes to download and install the required files for your starter. You will need to have Git installed to set up your first Gatsby site. -If your system does not have Git installed, install it from the [**Git downloads page**](https://git-scm.com/downloads). +The steps to download and install Git depend on your operating system. Follow the guide for your system: -## Install the Gatsby CLI +- [Install Git on macOS](https://www.atlassian.com/git/tutorials/install-git#mac-os-x) +- [Install Git on Windows](https://www.atlassian.com/git/tutorials/install-git#windows) +- [Install Git on Linux](https://www.atlassian.com/git/tutorials/install-git#linux) -The Gatsby CLI tool lets you quickly create new Gatsby-powered sites and run commands for developing Gatsby sites. It is a published npm package. You can install the Gatsby CLI from the npm registry, using the npm CLI. +> 💡 You will not need to know Git to complete this tutorial, but it is a very useful tool. If you are interested in learning more about version control, Git, and Github, check out Github's [Git Handbook](https://guides.github.com/introduction/git-handbook/). -### ✋ Install the Gatsby CLI tool +## Install Gatsby CLI + +The Gatsby CLI tool lets you quickly create new Gatsby-powered sites and run commands for developing Gatsby sites. It is a published npm package. You can install Gatsby CLI from the npm registry, using the npm CLI. 1. Navigate to the terminal. 2. Run `npm install --global gatsby-cli`. @@ -78,11 +82,11 @@ A couple of different things are happening here. npm install --global gatsby-cli ``` -- We’re using the npm CLI to install the Gatsby CLI. `npm install` is the command used to install packages. -- When installing npm packages, you can install them globally or in a specific project. (We’ll learn about the latter, later). The `--global` flag signals that we want the first option, to install globally. This means our package will be available to us on our computer, outside of the context of a specific project. +- You're using the npm CLI to install Gatsby CLI. `npm install` is the command used to install packages. +- When installing npm packages, you can install them globally or in a specific project. (You’ll learn about the latter, later). The `--global` flag signals that we want the first option to install globally. This means your package will be available to you on your computer, outside of the context of a specific project. - `gatsby-cli` is the exact name our desired package is registered with on the [**npm registry**](https://www.npmjs.com/package/gatsby-cli). -### ✋ Check your Gatsby CLI installation +### Check your Gatsby CLI installation 1. Open up your terminal. 2. Run `gatsby --version`. @@ -92,11 +96,9 @@ npm install --global gatsby-cli If successfully installed, running `gatsby --version` should return a version number and running `gatsby --help` will show different commands available to you using the `gatsby-cli` tool. -## Create a site - -Now you can use the gatsby-cli tool to create your first Gatsby site. Using the tool, you can use “starters” (partially built sites with some default configuration) to help you get moving faster on creating a certain type of site. The “Hello World” starter you’ll be using here is a starter with the bare essentials needed for a [Gatsby](/) site. +## Create a Gatsby site -### ✋ Create a Gatsby site +Now you are ready to use Gatsby CLI tool to create your first Gatsby site. Using the tool, you can download “starters” (partially built sites with some default configuration) to help you get moving faster on creating a certain type of site. The “Hello World” starter you’ll be using here is a starter with the bare essentials needed for a Gatsby site. 1. Open up your terminal. 2. Run `gatsby new hello-world https://github.com/gatsbyjs/gatsby-starter-hello-world`. (_Note: Depending on your download speed, the amount of time this takes will vary. For brevity's sake, the gif below was paused during part of the install_). @@ -117,7 +119,7 @@ gatsby new hello-world https://github.com/gatsbyjs/gatsby-starter-hello-world - Starting with `gatsby` says, ‘hey, we want to use the gatsby-cli tool!’. - `new` is a gatsby command to create a new Gatsby project. - Here, `hello-world` is an arbitrary title — you could pick anything. The CLI tool will place the code for your new site in a new folder called “hello-world”. -- Lastly, the GitHub URL specified points to a code repository that holds the starter code you want to use. If you aren't familiar yet with Git and GitHub, you can [learn more here](https://try.github.io/). +- Lastly, the GitHub URL specified points to a code repository that holds the starter code you want to use. ```bash cd hello-world @@ -131,7 +133,7 @@ gatsby develop - This command starts a development server. You will be able to see and interact with your new site in a development environment — local (on your computer, not published to the internet). -### ✋ View your site locally +### View your site locally Open up a new tab in your browser and navigate to [**http://localhost:8000**](http://localhost:8000/). @@ -147,11 +149,11 @@ You’ll be able to visit the site locally at [**_http://localhost:8000_**](http A code editor is a program designed specifically for editing computer code. There are many great ones out there. If you haven't worked with a code editor before, we recommend the editor used throughout this tutorial -- [**VS Code**](https://code.visualstudio.com/). -### ✋ Download VS Code +### Download VS Code -Visit the [VS Code site](https://code.visualstudio.com/#alt-downloads) and download the version appropriate for your platform. +Gatsby documentation sometimes includes screenshots of code editors; these screenshots show the VS Code editor, so if you don't have a preferred code editor yet, using VS Code will make sure that your screen looks just like the screenshots in the tutorial and docs. If you choose to use VS Code, visit the [VS Code site](https://code.visualstudio.com/#alt-downloads) and download the version appropriate for your platform. -### ✋ Install Prettier plugin +### Install the Prettier plugin We also recommend using [Prettier](https://github.com/prettier/prettier) -- Prettier is a tool that helps format your code, keeping it consistent and helping to avoid errors. @@ -167,9 +169,11 @@ You can use Prettier directly in your editor using the [Prettier VS Code plugin] To summarize, in this section you: -- Installed and learned about Node.js and the npm CLI tool -- Installed and learned about the Gatsby CLI tool +- Learned about web technologies used with Gatsby (HTML, CSS, JavaScript, React, and GraphQL) +- Learned about the command line and how to use it +- Installed and learned about Node.js and the npm CLI tool, the version control system Git, and the Gatsby CLI tool - Generated a new Gatsby site using the Gatsby CLI tool +- Ran the Gatsby development server and visited your site locally - Downloaded a code editor - Installed a code formatter called Prettier diff --git a/www/src/data/sidebars/tutorial-links.yaml b/www/src/data/sidebars/tutorial-links.yaml index 88320790de294..5a95f7bf9b04e 100644 --- a/www/src/data/sidebars/tutorial-links.yaml +++ b/www/src/data/sidebars/tutorial-links.yaml @@ -8,16 +8,16 @@ items: - title: Overview of core technologies link: /tutorial/part-zero/#overview-of-core-technologies - - title: Familiarize with command line - link: /tutorial/part-zero/#familiarize-with-command-line + - title: Familiarize with the command line + link: /tutorial/part-zero/#familiarize-with-the-command-line - title: Install Node.js link: /tutorial/part-zero/#install-nodejs - title: Familiarize with npm link: /tutorial/part-zero/#familiarize-with-npm - title: Install Git link: /tutorial/part-zero/#install-git - - title: Install the Gatsby CLI - link: /tutorial/part-zero/#install-the-gatsby-cli + - title: Install Gatsby CLI + link: /tutorial/part-zero/#install-gatsby-cli - title: Create a Gatsby site link: /tutorial/part-zero/#create-a-site - title: Set up a code editor From 30059542e98f9c8241b0cc3869687e3281a28299 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Tue, 13 Nov 2018 13:15:43 +0100 Subject: [PATCH 284/462] Revert json-stream-stringify to serialize redux state (#9896) current implementation of using `json-stream-stringify` is causing a lot of problems and I think this should be reverted - see https://github.com/gatsbyjs/gatsby/pull/9370#issuecomment-435950494 shortly put - this does help with not getting OOM, but it essentially make `.cache/redux-state.json` to not work at all --- packages/gatsby/package.json | 2 +- packages/gatsby/src/redux/index.js | 21 ++++++--------------- yarn.lock | 13 ++++++++----- 3 files changed, 15 insertions(+), 21 deletions(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index d4827418ea144..959b981ccfb05 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -75,7 +75,7 @@ "jest-worker": "^23.2.0", "joi": "12.x.x", "json-loader": "^0.5.7", - "json-stream-stringify": "^2.0.1", + "json-stringify-safe": "^5.0.1", "kebab-hash": "^0.1.2", "lodash": "^4.17.10", "md5": "^2.2.1", diff --git a/packages/gatsby/src/redux/index.js b/packages/gatsby/src/redux/index.js index 4cf0bd23d3cbb..203b0438aac81 100644 --- a/packages/gatsby/src/redux/index.js +++ b/packages/gatsby/src/redux/index.js @@ -2,7 +2,7 @@ const Redux = require(`redux`) const _ = require(`lodash`) const fs = require(`fs`) const mitt = require(`mitt`) -const stringify = require(`json-stream-stringify`) +const stringify = require(`json-stringify-safe`) // Create event emitter for actions const emitter = mitt() @@ -78,21 +78,12 @@ const saveState = state => { ) pickedState.components = mapToObject(pickedState.components) pickedState.nodes = mapToObject(pickedState.nodes) - - const writeStream = fs.createWriteStream( - `${process.cwd()}/.cache/redux-state.json` + const stringified = stringify(pickedState, null, 2) + fs.writeFile( + `${process.cwd()}/.cache/redux-state.json`, + stringified, + () => {} ) - - new stringify(pickedState, null, 2, true) - .pipe(writeStream) - .on(`finish`, () => { - writeStream.destroy() - writeStream.end() - }) - .on(`error`, () => { - writeStream.destroy() - writeStream.end() - }) } const saveStateDebounced = _.debounce(saveState, 1000) diff --git a/yarn.lock b/yarn.lock index 855492d6c5d6b..c92b95afbc1ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2965,6 +2965,14 @@ babel-plugin-macros@^2.4.2: cosmiconfig "^5.0.5" resolve "^1.8.1" +babel-plugin-macros@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.4.2.tgz#21b1a2e82e2130403c5ff785cba6548e9b644b28" + integrity sha512-NBVpEWN4OQ/bHnu1fyDaAaTPAjnhXCEPqr1RwqxrU7b6tZ2hypp+zX4hlNfmVGfClD5c3Sl6Hfj5TJNF5VG5aA== + dependencies: + cosmiconfig "^5.0.5" + resolve "^1.8.1" + babel-plugin-react-css-modules@^3.2.1: version "3.4.2" resolved "https://registry.yarnpkg.com/babel-plugin-react-css-modules/-/babel-plugin-react-css-modules-3.4.2.tgz#4c1db8d4bc8b2973f6c689da7dbd56b0cb8f099c" @@ -11502,11 +11510,6 @@ json-stable-stringify@^1.0.0: dependencies: jsonify "~0.0.0" -json-stream-stringify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/json-stream-stringify/-/json-stream-stringify-2.0.1.tgz#8bc0e65ff94567d9010e14c27c043a951cb14939" - integrity sha512-5XymtJXPmzRWZ1UdLQQQXbjHV/E7NAanSClikEqORbkZKOYLSYLNHqRuooyju9W90kJUzknFhX2xvWn4cHluHQ== - json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" From 8cd74320f7f5063731e019cccd8822dc435a91fe Mon Sep 17 00:00:00 2001 From: Gerald Pape Date: Tue, 13 Nov 2018 13:18:37 +0100 Subject: [PATCH 285/462] fix(gatsby-plugin-offline): Sync docs with actual defaults being used (#9903) I've noticed the Readme of gatsby-plugin-offline is out of sync with the actual defaults from its gatsby-node.js. This commit fixes this by copying the options object from gatsby/packages/gatsby-plugin-offline/src/gatsby-node.js into this Readme. --- packages/gatsby-plugin-offline/README.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/gatsby-plugin-offline/README.md b/packages/gatsby-plugin-offline/README.md index 0ba71cf91163e..09493aff2882e 100644 --- a/packages/gatsby-plugin-offline/README.md +++ b/packages/gatsby-plugin-offline/README.md @@ -33,12 +33,11 @@ const options = { globDirectory: rootDir, globPatterns, modifyUrlPrefix: { - rootDir: ``, // If `pathPrefix` is configured by user, we should replace // the default prefix with `pathPrefix`. - "": args.pathPrefix || ``, + "/": `${pathPrefix}/`, }, - navigateFallback: `/offline-plugin-app-shell-fallback/index.html`, + navigateFallback: `${pathPrefix}/offline-plugin-app-shell-fallback/index.html`, // Only match URLs without extensions or the query `no-cache=1`. // So example.com/about/ will pass but // example.com/about/?no-cache=1 and @@ -47,17 +46,22 @@ const options = { // URLs and not any files hosted on the site. // // Regex based on http://stackoverflow.com/a/18017805 - navigateFallbackWhitelist: [/^[^?]*([^.?]{5}|\.html)(\?.*)?$/], + navigateFallbackWhitelist: [/^([^.?]*|[^?]*\.([^.?]{5,}|html))(\?.*)?$/], navigateFallbackBlacklist: [/\?(.+&)?no-cache=1$/], cacheId: `gatsby-plugin-offline`, - // Don't cache-bust JS files and anything in the static directory - dontCacheBustUrlsMatching: /(.*js$|\/static\/)/, + // Don't cache-bust JS or CSS files, and anything in the static directory + dontCacheBustUrlsMatching: /(.*\.js$|.*\.css$|\/static\/)/, runtimeCaching: [ { // Add runtime caching of various page resources. urlPattern: /\.(?:png|jpg|jpeg|webp|svg|gif|tiff|js|woff|woff2|json|css)$/, handler: `staleWhileRevalidate`, }, + { + // Use the Network First handler for external resources + urlPattern: /^https?:/, + handler: `networkFirst`, + }, ], skipWaiting: true, clientsClaim: true, From 4762719f8458d40b1098c7688f15f99a7247ec59 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Tue, 13 Nov 2018 13:31:56 +0100 Subject: [PATCH 286/462] chore(release): Publish - gatsby-plugin-offline@2.0.14 - gatsby@2.0.48 --- packages/gatsby-plugin-offline/CHANGELOG.md | 8 ++++++++ packages/gatsby-plugin-offline/package.json | 2 +- packages/gatsby/CHANGELOG.md | 6 ++++++ packages/gatsby/package.json | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/gatsby-plugin-offline/CHANGELOG.md b/packages/gatsby-plugin-offline/CHANGELOG.md index 174f6dda38434..e8f8bcd4a5433 100644 --- a/packages/gatsby-plugin-offline/CHANGELOG.md +++ b/packages/gatsby-plugin-offline/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.14](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/compare/gatsby-plugin-offline@2.0.13...gatsby-plugin-offline@2.0.14) (2018-11-13) + +### Bug Fixes + +- **gatsby-plugin-offline:** Sync docs with actual defaults being used ([#9903](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/issues/9903)) ([8cd7432](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/commit/8cd7432)) + ## [2.0.13](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/compare/gatsby-plugin-offline@2.0.12...gatsby-plugin-offline@2.0.13) (2018-11-08) diff --git a/packages/gatsby-plugin-offline/package.json b/packages/gatsby-plugin-offline/package.json index 3a51bd18b2e96..651fa79bbba89 100644 --- a/packages/gatsby-plugin-offline/package.json +++ b/packages/gatsby-plugin-offline/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-offline", "description": "Gatsby plugin which sets up a site to be able to run offline", - "version": "2.0.13", + "version": "2.0.14", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 2d229163e8b42..2a740291e117a 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.48](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.47...gatsby@2.0.48) (2018-11-13) + +**Note:** Version bump only for package gatsby + ## [2.0.47](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.46...gatsby@2.0.47) (2018-11-12) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 959b981ccfb05..a759d7c2b3116 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.47", + "version": "2.0.48", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From 8aa5081b843c97087866aa184f066364dcc7adc6 Mon Sep 17 00:00:00 2001 From: Justin Formentin <40323577+justinformentin@users.noreply.github.com> Date: Tue, 13 Nov 2018 08:40:05 -0500 Subject: [PATCH 287/462] feat(starters): add Gatsby-Tutorial-Starter (#9798) Updated starters.yml by adding Gatsby-Tutorial-Starters. --- docs/starters.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/docs/starters.yml b/docs/starters.yml index 2996f7b717f7a..55aa914a268b2 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -1172,3 +1172,34 @@ - Progressive Web App features - Optimized for performance - Minimal UI and Styling +- url: https://gatsby-tutorial-starter.netlify.com/ + repo: https://github.com/justinformentin/gatsby-v2-tutorial-starter + description: Simple, modern desgined blog with post lists, tags, and easily customizable code. + tags: + - Blog + - Linting + - PWA + - SEO + - Styling:CSS-in-JS + - Markdown + features: + - Blog post listing with image, summary, date, and tags. + - Post Tags + - Post List Filtering + - Typography.js + - Emotion styling + - Syntax Highlighting in Code Blocks + - Gatsby Image + - Fully Responsive + - Offline Support + - Web App Manifest + - SEO + - PWA + - Sitemap generation + - Schema.org JSON-LD + - CircleCI Integration + - Codeclimate Integration + - Google Analytics + - Twitter and OpenGraph Tags + - ESLint + - Prettier Code Styling From e81dd09b6fecad1929fd25dd0f80370ed7cd5f62 Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Tue, 13 Nov 2018 09:49:56 -0600 Subject: [PATCH 288/462] fix: prevent packages that haven't been published from failing (#9169) Simple change that will let us run `yarn run publish` even if packages don't exist. --- scripts/get-unowned-packages/index.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/scripts/get-unowned-packages/index.js b/scripts/get-unowned-packages/index.js index 028f83646daa0..cc6e8e6e925fe 100644 --- a/scripts/get-unowned-packages/index.js +++ b/scripts/get-unowned-packages/index.js @@ -3,11 +3,13 @@ const PackageGraph = require(`@lerna/package-graph`) const filterPackages = require(`@lerna/filter-packages`) const util = require(`util`) const path = require(`path`) -const exec = util.promisify(require(`child_process`).exec) +const { exec, execSync } = require(`child_process`) + +const execP = util.promisify(exec) const getPackagesWithReadWriteAccess = async user => { const cmd = `npm access ls-packages ${user}` - const { stdout } = await exec(cmd) + const { stdout } = await execP(cmd) const permissions = JSON.parse(stdout) return Object.entries(permissions).reduce((lookup, [pkgName, access]) => { if (access === `read-write`) { @@ -36,7 +38,7 @@ module.exports = function getUnownedPackages({ // infer user from npm whoami // set registry because yarn run hijacks registry if (!user) { - user = await exec(`npm whoami --registry https://registry.npmjs.org`) + user = await execP(`npm whoami --registry https://registry.npmjs.org`) .then(({ stdout }) => stdout.trim()) .catch(() => process.exit(1)) } @@ -44,7 +46,18 @@ module.exports = function getUnownedPackages({ const alreadyOwnedPackages = await getPackagesWithReadWriteAccess(user) const publicGatsbyPackagesWithoutAccess = publicGatsbyPackages.filter( - pkg => !alreadyOwnedPackages[pkg.name] + pkg => { + if (alreadyOwnedPackages[pkg.name]) { + return false + } + + try { + return !execSync(`npm view ${pkg.name} version`, { stdio: `pipe` }) + .stderr + } catch (e) { + return false + } + } ) return { From 16e516e0567e523d30b98904d34003e56e85ffd0 Mon Sep 17 00:00:00 2001 From: Dylan Perkins <34049984+dyllper@users.noreply.github.com> Date: Tue, 13 Nov 2018 10:32:22 -0600 Subject: [PATCH 289/462] fix(www): Fix "Starters" share button alignment, allow closing of share menu by clicking outside of it (#9620) --- www/src/components/share-menu.js | 32 ++++++++++++++ www/src/views/starter/meta.js | 74 ++++++++++++++++++-------------- 2 files changed, 74 insertions(+), 32 deletions(-) diff --git a/www/src/components/share-menu.js b/www/src/components/share-menu.js index bbbdca2fa87b5..fd7dc037977f1 100644 --- a/www/src/components/share-menu.js +++ b/www/src/components/share-menu.js @@ -23,6 +23,36 @@ class ShareMenu extends React.Component { open: false, } this.shareMenu = this.shareMenu.bind(this) + this.clickOutsideShareMenu = this.clickOutsideShareMenu.bind(this) + this.setShareBtnRef = this.setShareBtnRef.bind(this) + this.setShareMenuRef = this.setShareMenuRef.bind(this) + } + + componentDidMount() { + document.addEventListener(`mousedown`, this.clickOutsideShareMenu) + } + + componentWillUnmount() { + document.removeEventListener(`mousedown`, this.clickOutsideShareMenu) + } + + setShareBtnRef(node) { + this.shareBtnref = node + } + + setShareMenuRef(node) { + this.shareMenuRef = node + } + + clickOutsideShareMenu(event) { + const { open } = this.state + if ( + open && + !this.shareBtnref.contains(event.target) && + !this.shareMenuRef.contains(event.target) + ) { + this.shareMenu() + } } shareMenu() { @@ -46,6 +76,7 @@ class ShareMenu extends React.Component { color: styles[theme].textColor, cursor: `pointer`, }} + ref={this.setShareBtnRef} > @@ -57,6 +88,7 @@ class ShareMenu extends React.Component { left: `auto`, right: 0, }} + ref={this.setShareMenuRef} > ( display: `flex`, flexWrap: `nowrap`, flexGrow: 1, - justifyContent: `space-between`, borderBottom: `1px solid ${colors.ui.light}`, paddingBottom: rhythm(2 / 4), [presets.Phablet]: { @@ -122,42 +121,53 @@ const Meta = ({ starter, repoName, imageSharp, demo }) => ( zIndex: 1, }} > - - + + {` Visit demo `} + + - {` Visit demo `} - - +
  • From e86d1416dadab61d6fd01eac5a8d378f2291d2f1 Mon Sep 17 00:00:00 2001 From: David Corbacho Date: Tue, 13 Nov 2018 18:55:45 +0200 Subject: [PATCH 290/462] feat(gatsby-source-drupal): add support for Drupal JSON API 2.x File URI format (#9835) Description of the issue https://github.com/gatsbyjs/gatsby/issues/9834 (If this approach is correct, I could add a test for this case) --- .../src/__tests__/fixtures/file.json | 12 +++++++++ .../src/__tests__/index.js | 26 +++++++++++++++++-- .../gatsby-source-drupal/src/gatsby-node.js | 7 ++++- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/packages/gatsby-source-drupal/src/__tests__/fixtures/file.json b/packages/gatsby-source-drupal/src/__tests__/fixtures/file.json index 8ef9a2d4b02fa..007fa233cba06 100644 --- a/packages/gatsby-source-drupal/src/__tests__/fixtures/file.json +++ b/packages/gatsby-source-drupal/src/__tests__/fixtures/file.json @@ -9,6 +9,18 @@ "filename": "main-image.png", "url": "/sites/default/files/main-image.png" } + }, + { + "type": "file--file", + "id": "file-2", + "attributes": { + "id": 2, + "uuid": "file-2", + "filename": "secondary-image.png", + "uri": { + "url" : "/sites/default/files/secondary-image.png" + } + } } ], "links": {} diff --git a/packages/gatsby-source-drupal/src/__tests__/index.js b/packages/gatsby-source-drupal/src/__tests__/index.js index c3bcf397d4e0e..fb03dff298712 100644 --- a/packages/gatsby-source-drupal/src/__tests__/index.js +++ b/packages/gatsby-source-drupal/src/__tests__/index.js @@ -12,11 +12,19 @@ jest.mock(`axios`, () => { } }) +jest.mock(`gatsby-source-filesystem`, () => { + return { + createRemoteFileNode: jest.fn(), + } +}) +const { createRemoteFileNode } = require(`gatsby-source-filesystem`) + const { sourceNodes } = require(`../gatsby-node`) describe(`gatsby-source-drupal`, () => { const nodes = {} const createNodeId = id => `generated-id-${id}` + const baseUrl = `http://fixture` beforeAll(async () => { const args = { @@ -26,12 +34,13 @@ describe(`gatsby-source-drupal`, () => { }, } - await sourceNodes(args, { baseUrl: `http://fixture` }) + await sourceNodes(args, { baseUrl }) }) it(`Generates nodes`, () => { expect(Object.keys(nodes).length).not.toEqual(0) expect(nodes[createNodeId(`file-1`)]).toBeDefined() + expect(nodes[createNodeId(`file-2`)]).toBeDefined() expect(nodes[createNodeId(`tag-1`)]).toBeDefined() expect(nodes[createNodeId(`tag-2`)]).toBeDefined() expect(nodes[createNodeId(`article-1`)]).toBeDefined() @@ -97,5 +106,18 @@ describe(`gatsby-source-drupal`, () => { ).toEqual(expect.arrayContaining([createNodeId(`article-1`)])) }) - // TO-DO: add tests for fetching files + it(`Download files`, () => { + const urls = [ + `/sites/default/files/main-image.png`, + `/sites/default/files/secondary-image.png`, + ].map(fileUrl => new URL(fileUrl, baseUrl).href) + + urls.forEach(url => { + expect(createRemoteFileNode).toBeCalledWith( + expect.objectContaining({ + url, + }) + ) + }) + }) }) diff --git a/packages/gatsby-source-drupal/src/gatsby-node.js b/packages/gatsby-source-drupal/src/gatsby-node.js index 7ec314f68c989..217fe331f50f5 100644 --- a/packages/gatsby-source-drupal/src/gatsby-node.js +++ b/packages/gatsby-source-drupal/src/gatsby-node.js @@ -187,8 +187,13 @@ exports.sourceNodes = async ( node.internal.type === `file__file` ) { try { + let fileUrl = node.url + if (typeof node.uri === `object`) { + // Support JSON API 2.x file URI format https://www.drupal.org/node/2982209 + fileUrl = node.uri.url + } // Resolve w/ baseUrl if node.uri isn't absolute. - const url = new URL(node.url, baseUrl) + const url = new URL(fileUrl, baseUrl) fileNode = await createRemoteFileNode({ url: url.href, store, From 7bd7bbc19a765ca233ebbdb8fa4602d44f974cb7 Mon Sep 17 00:00:00 2001 From: Jaime Rios Date: Tue, 13 Nov 2018 16:23:01 -0600 Subject: [PATCH 291/462] Updated link to Jason Lengstorf's personal website. (#9910) The link is now directed where it is supposed to --- docs/docs/seo.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/docs/seo.md b/docs/docs/seo.md index 8413803fcaf10..d01ac42024973 100644 --- a/docs/docs/seo.md +++ b/docs/docs/seo.md @@ -25,4 +25,5 @@ A common way to add metadata to pages is to add [react-helmet](https://github.co Some examples using react-helmet: - [Official GatsbyJS.org site](https://github.com/gatsbyjs/gatsby/blob/master/www/src/components/layout.js) -- [Jason Lengstorf's personal website](https://github.com/jlengstorf/lengstorf.com/blob/master/src/components/SEO.js) +- [Jason Lengstorf's personal website](https://github.com/jlengstorf/lengstorf.com/blob/master/src/components/SEO/SEO.js) +- [Gatsby Mail](https://github.com/DSchau/gatsby-mail/blob/master/src/components/meta.js) From ac1a48501abbc6b29e1afe8b0acff2662ca92d8c Mon Sep 17 00:00:00 2001 From: jishnubn <44518356+jishnubn@users.noreply.github.com> Date: Wed, 14 Nov 2018 17:34:07 +0530 Subject: [PATCH 292/462] feat(showcase): add Patreon Blog and Full Beaker sites (#9916) --- docs/sites.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index 02ce49189f494..c90add6534a78 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3317,3 +3317,19 @@ - Technology - Nonprofit featured: false +- title: Patreon Blog + url: https://blog.patreon.com/ + main_url: https://blog.patreon.com/ + description: >- + Official blog of Patreon.com + categories: + - Blog + featured: false +- title: Full Beaker + url: https://fullbeaker.com/ + main_url: https://fullbeaker.com/ + description: >- + Full Beaker provides independent advice online about careers and home ownership, and connect anyone who asks with companies that can help them. + categories: + - Consulting + featured: false From 15b08c2a5cd42ddb1124c24c4a8069c0e6995307 Mon Sep 17 00:00:00 2001 From: Alex Vivero Date: Wed, 14 Nov 2018 08:17:26 -0500 Subject: [PATCH 293/462] feat(starters): add gatsby-redux-starter by @AVivero (#9771) ## PR description: - Add new gatsby starter that provides multiple technologies out of the box, like Redux, Sass and Bootstrap, gatsby-redux-starter by @AVivero. --- docs/starters.yml | 16 ++++++++++++++++ yarn.lock | 8 -------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/docs/starters.yml b/docs/starters.yml index 55aa914a268b2..b93132430c339 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -1203,3 +1203,19 @@ - Twitter and OpenGraph Tags - ESLint - Prettier Code Styling +- url: https://avivero.github.io/gatsby-redux-starter/ + repo: https://github.com/AVivero/gatsby-redux-starter + description: Gatsby starter site with Redux, Sass, Bootstrap, Css Modules and Material Icons + tags: + - Redux + - Styling:SCSS + - Styling:Bootstrap + - Styling:Material + - Linting + features: + - Gatsby v2 support + - Redux support + - Sass support + - Bootstrap v4 support + - Css Modules support + - ESLint, Prettier diff --git a/yarn.lock b/yarn.lock index c92b95afbc1ec..3404d92419ea6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2965,14 +2965,6 @@ babel-plugin-macros@^2.4.2: cosmiconfig "^5.0.5" resolve "^1.8.1" -babel-plugin-macros@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.4.2.tgz#21b1a2e82e2130403c5ff785cba6548e9b644b28" - integrity sha512-NBVpEWN4OQ/bHnu1fyDaAaTPAjnhXCEPqr1RwqxrU7b6tZ2hypp+zX4hlNfmVGfClD5c3Sl6Hfj5TJNF5VG5aA== - dependencies: - cosmiconfig "^5.0.5" - resolve "^1.8.1" - babel-plugin-react-css-modules@^3.2.1: version "3.4.2" resolved "https://registry.yarnpkg.com/babel-plugin-react-css-modules/-/babel-plugin-react-css-modules-3.4.2.tgz#4c1db8d4bc8b2973f6c689da7dbd56b0cb8f099c" From 766ea4c47fe7aefb5802d0db34acfaddf6d92cd7 Mon Sep 17 00:00:00 2001 From: greg lobinski <32480082+greglobinski@users.noreply.github.com> Date: Wed, 14 Nov 2018 18:19:26 +0100 Subject: [PATCH 294/462] feat(www): add Ecosystem section to Homepage (#9783) * feat(www): add Ecosystem section to Homepage feat(www): homepage WIP wip feat(www): finish sections style for mobile feat(www): add Ecosystsem featured items to Hompage feat(www): homepage ecosystem section styling WIP feat(www): add arrow to action button * fix(www): fix code formating * fix(www): fix code formating and eslint errors * fix(www): fix hovering effect on Featured Item * fix(www): fix hovering effect sequel * fix(www): fix hover bug * fix(www): update texts (intro & link labels) * feat(www): add scroller observer to Home page * refactor(www): use imported scrollers observer * fix(www): change link labes on Ecosystem page * fix(www): fix some small style issues * refactor(www): refator combineEcosystemFeaturedItems and reorder some css properties * refactor(www): remove width setting from scroller container * fix(www): update featured starters * fix(www): update featured starters * refactor(www): add starter/plugins colors to the palette * fix(www): remove unused props * fix(www): fix color value in the palette --- www/gatsby-node.js | 2 +- www/src/assets/ecosystem.svg | 2 +- www/src/components/button.js | 2 + www/src/components/cards.js | 1 + .../components/ecosystem/ecosystem-board.js | 70 +----- .../ecosystem/ecosystem-featured-item.js | 34 ++- .../ecosystem/ecosystem-featured-items.js | 36 +-- .../components/ecosystem/ecosystem-section.js | 72 +++--- .../components/homepage/homepage-ecosystem.js | 221 ++++++++++++++++++ .../components/homepage/homepage-section.js | 145 ++++++++++++ www/src/data/ecosystem/featured-items.yaml | 4 +- www/src/pages/index.js | 128 ++++++++-- www/src/utils/colors.js | 5 + www/src/utils/scrollers-observer.js | 60 +++++ www/src/utils/styles.js | 1 + 15 files changed, 641 insertions(+), 142 deletions(-) create mode 100644 www/src/components/homepage/homepage-ecosystem.js create mode 100644 www/src/components/homepage/homepage-section.js create mode 100644 www/src/utils/scrollers-observer.js diff --git a/www/gatsby-node.js b/www/gatsby-node.js index c9645b5bf9041..a274256641e24 100644 --- a/www/gatsby-node.js +++ b/www/gatsby-node.js @@ -620,7 +620,7 @@ exports.onCreateNode = ({ node, actions, getNode, reporter }) => { exports.onCreatePage = ({ page, actions }) => { // add lists of featured items to Ecosystem page - if (page.path === `/ecosystem/`) { + if (page.path === `/ecosystem/` || page.path === `/`) { const { createPage, deletePage } = actions const oldPage = Object.assign({}, page) diff --git a/www/src/assets/ecosystem.svg b/www/src/assets/ecosystem.svg index d3ff6c233c86a..b62de54f963ff 100644 --- a/www/src/assets/ecosystem.svg +++ b/www/src/assets/ecosystem.svg @@ -1,4 +1,4 @@ - + diff --git a/www/src/components/button.js b/www/src/components/button.js index 2779adf82a25c..7cdc5983fafd9 100644 --- a/www/src/components/button.js +++ b/www/src/components/button.js @@ -18,6 +18,7 @@ const Button = ({ small, tiny, secondary, + ondark, ...rest }) => { const Tag = components[tag || `link`] @@ -36,6 +37,7 @@ const Button = ({ ...(large && buttonStyles.large), ...(small && buttonStyles.small), ...(tiny && buttonStyles.tiny), + ...(ondark && buttonStyles.ondark), }, } diff --git a/www/src/components/cards.js b/www/src/components/cards.js index cc906fb7aa4de..a76cb36a3f0c5 100644 --- a/www/src/components/cards.js +++ b/www/src/components/cards.js @@ -11,6 +11,7 @@ const Cards = ({ children }) => ( borderRadius: presets.radiusLg, boxShadow: `0 5px 20px rgba(25, 17, 34, 0.1)`, transform: `translateZ(0)`, + width: `100%`, }} > {children} diff --git a/www/src/components/ecosystem/ecosystem-board.js b/www/src/components/ecosystem/ecosystem-board.js index 3f9f528ee530d..0e0b6c0b8d6c7 100644 --- a/www/src/components/ecosystem/ecosystem-board.js +++ b/www/src/components/ecosystem/ecosystem-board.js @@ -5,6 +5,10 @@ import styled from "react-emotion" import EcosystemSection from "./ecosystem-section" import presets from "../../utils/presets" +import { + setupScrollersObserver, + unobserveScrollers, +} from "../../utils/scrollers-observer" const EcosystemBoardRoot = styled(`div`)` display: flex; @@ -21,68 +25,12 @@ const EcosystemBoardRoot = styled(`div`)` ` class EcosystemBoard extends Component { - observer - observerTargets = [] - componentDidMount() { - if (typeof window.IntersectionObserver !== `undefined`) { - this.setupObserver() - } + setupScrollersObserver() } componentWillUnmount() { - if (typeof window.IntersectionObserver !== `undefined`) { - this.observerTargets.forEach(target => this.observer.unobserve(target)) - } - } - - setupObserver = () => { - const options = { rootMargin: `0px`, threshold: [1] } - this.observer = new IntersectionObserver(this.handleIntersect, options) - this.observerTargets = Array.from( - document.querySelectorAll(`.featuredItems`) - ) - - this.observerTargets.forEach(target => this.observer.observe(target)) - } - - handleIntersect = (entries, observer) => { - entries.forEach(entry => { - const target = entry.target - - if (entry.intersectionRatio > 0) { - setTimeout( - () => this.turnOnLeadScroll({ target, duration: 1000, distance: 20 }), - 250 - ) - this.observer.unobserve(target) - } - }) - } - - turnOnLeadScroll = ({ target, duration, distance }) => { - let startTime = null - - function animation(currentTime) { - if (startTime === null) { - startTime = currentTime - } - - const timeElapsed = currentTime - startTime - const getDistanceToScroll = ease(timeElapsed, 0, distance, duration) - - target.scroll({ top: 0, left: getDistanceToScroll }) - - if (timeElapsed < duration) { - requestAnimationFrame(animation) - } - } - - function ease(t, b, c, d) { - return -c * (t /= d) * (t - 2) + b - } - - requestAnimationFrame(animation) + unobserveScrollers() } render() { @@ -102,11 +50,11 @@ class EcosystemBoard extends Component { links={[ { label: `Browse Plugins`, to: `/plugins/` }, { - label: `Plugin Authoring`, + label: `Creating Plugins`, to: `/docs/plugin-authoring/`, secondary: true, }, - { label: `Plugin Docs`, to: `/docs/plugins/`, secondary: true }, + { label: `Using Plugins`, to: `/docs/plugins/`, secondary: true }, ]} featuredItems={plugins} /> @@ -117,7 +65,7 @@ class EcosystemBoard extends Component { icon={StartersIcon} links={[ { label: `Browse Starters`, to: `/starters/` }, - { label: `Starter Docs`, to: `/docs/starters/`, secondary: true }, + { label: `Using Starters`, to: `/docs/starters/`, secondary: true }, ]} featuredItems={starters} /> diff --git a/www/src/components/ecosystem/ecosystem-featured-item.js b/www/src/components/ecosystem/ecosystem-featured-item.js index bff9030585493..535837e77b2fb 100644 --- a/www/src/components/ecosystem/ecosystem-featured-item.js +++ b/www/src/components/ecosystem/ecosystem-featured-item.js @@ -13,20 +13,26 @@ import presets, { colors } from "../../utils/presets" const MAX_DESCRIPTION_LENGTH = 100 const EcosystemFeaturedItemRoot = styled(`li`)` - flex-basis: ${props => `calc(100% / ${props.numberOfItems})`}; - float: left; + width: 85vw; margin: 0 2px 0 0; padding: 5px; + :last-child { + margin-right: 0; + } + ${presets.Tablet} { - padding: 0; border-bottom: 1px solid ${colors.gray.superLight}; + margin: 0; + padding: 0; + width: auto; } ` -const BlockLink = styled(Link)` +export const BlockLink = styled(Link)` + background: #fff; border-radius: ${presets.radiusLg}px; - box-shadow: 0 1px 8px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.1); display: flex; flex-direction: column; height: 100%; @@ -37,7 +43,9 @@ const BlockLink = styled(Link)` box-shadow: none; transition: all ${presets.animation.speedDefault} ${presets.animation.curveDefault}; + } + ${presets.Desktop} { :hover { background: ${colors.ui.whisper}; } @@ -45,8 +53,10 @@ const BlockLink = styled(Link)` ` const Header = styled(`header`)` + align-items: flex-start; display: flex; justify-content: space-between; + h3 { color: ${colors.gatsbyDark}; font-size: 1rem; @@ -54,11 +64,12 @@ const Header = styled(`header`)` } span { + align-items: center; color: ${colors.lilac}; display: flex; - align-items: center; font-size: 0.8125rem; font-family: ${options.systemFontFamily.join(`,`)}; + padding-left: 5px; svg { fill: ${colors.gray.light}; @@ -72,16 +83,15 @@ const Header = styled(`header`)` const Digest = styled(`div`)` display: flex; flex-grow: 1; - justify-content: space-between; - height: 100%; font-family: ${options.systemFontFamily.join(`,`)}; + justify-content: space-between; padding: ${rhythm(0.5)} 0 0; ` const Thumbnail = styled(`div`)` + height: 64px; padding-right: ${rhythm(2 / 3)}; margin-top: ${rhythm(1 / 12)}; - height: 64px; img { border: 1px solid ${colors.gray.superLight}; @@ -95,7 +105,7 @@ const Description = styled(`p`)` margin: 0; ` -const EcosystemFeaturedItem = ({ item, numberOfItems }) => { +const EcosystemFeaturedItem = ({ item, className }) => { const { slug, name, @@ -114,7 +124,7 @@ const EcosystemFeaturedItem = ({ item, numberOfItems }) => { } return ( - +

    {name}

    @@ -145,7 +155,7 @@ const EcosystemFeaturedItem = ({ item, numberOfItems }) => { EcosystemFeaturedItem.propTypes = { item: PropTypes.object.isRequired, - numberOfItems: PropTypes.number.isRequired, + className: PropTypes.string, } export default EcosystemFeaturedItem diff --git a/www/src/components/ecosystem/ecosystem-featured-items.js b/www/src/components/ecosystem/ecosystem-featured-items.js index e8198d7468503..aa8c822090737 100644 --- a/www/src/components/ecosystem/ecosystem-featured-items.js +++ b/www/src/components/ecosystem/ecosystem-featured-items.js @@ -2,17 +2,18 @@ import React from "react" import PropTypes from "prop-types" import styled from "react-emotion" -import EcosystemFeaturedItem from "./ecosystem-featured-item" - import presets, { colors } from "../../utils/presets" import { rhythm, options } from "../../utils/typography" import { scrollbarStyles } from "../../utils/styles" +import { SCROLLER_CLASSNAME } from "../../utils/scrollers-observer" -const EcosystemFeaturedItemsRoot = styled(`div`)` +export const EcosystemFeaturedItemsRootBase = styled(`div`)` overflow-x: scroll; margin: ${rhythm(0.1)} -${rhythm(options.blockMarginBottom)}; -webkit-overflow-scrolling: touch; +` +const EcosystemFeaturedItemsRoot = styled(EcosystemFeaturedItemsRootBase)` ${presets.Tablet} { border-top: 1px solid ${colors.gray.superLight}; margin-top: ${rhythm(0.4)}; @@ -23,13 +24,14 @@ const EcosystemFeaturedItemsRoot = styled(`div`)` } ` -const List = styled(`ul`)` - display: flex; +export const ListBase = styled(`ul`)` + display: inline-flex; list-style: none; margin: 0; padding: 0 calc(${rhythm(options.blockMarginBottom)} - 5px) 4px; - width: ${props => `calc(80vw * ${props.numberOfItems})`}; +` +const List = styled(ListBase)` ${presets.Tablet} { flex-direction: column; padding: 0; @@ -37,25 +39,25 @@ const List = styled(`ul`)` } ` -const EcosystemFeaturedItems = ({ items }) => ( - - +const EcosystemFeaturedItems = ({ + items, + itemComponent: Item, + className = ``, +}) => ( + + {items.map(item => { const { slug } = item - return ( - - ) + return })} ) EcosystemFeaturedItems.propTypes = { - items: PropTypes.array, + items: PropTypes.array.isRequired, + itemComponent: PropTypes.func.isRequired, + className: PropTypes.string, } export default EcosystemFeaturedItems diff --git a/www/src/components/ecosystem/ecosystem-section.js b/www/src/components/ecosystem/ecosystem-section.js index 6caad8f910444..147212014581e 100644 --- a/www/src/components/ecosystem/ecosystem-section.js +++ b/www/src/components/ecosystem/ecosystem-section.js @@ -4,6 +4,7 @@ import styled from "react-emotion" import Button from "../button" import EcosystemFeaturedItems from "./ecosystem-featured-items" +import EcosystemFeaturedItem from "./ecosystem-featured-item" import { rhythm, options } from "../../utils/typography" import presets, { colors } from "../../utils/presets" @@ -17,13 +18,13 @@ const EcosystemSectionRoot = styled(`section`)` box-shadow: 0 1px 8px rgba(0, 0, 0, 0.2); border-radius: ${presets.radiusLg}px; display: flex; + flex-basis: calc(50% - 20px); flex-direction: column; flex-grow: 0; margin: 0 10px 20px; + max-height: 60vh; padding: ${rhythm(options.blockMarginBottom)}; padding-bottom: 0; - flex-basis: calc(50% - 20px); - max-height: 60vh; :last-child { flex-grow: 1; @@ -36,6 +37,7 @@ const EcosystemSectionRoot = styled(`section`)` :last-child { align-self: flex-start; + padding-bottom: ${rhythm(options.blockMarginBottom)}; } } @@ -43,51 +45,52 @@ const EcosystemSectionRoot = styled(`section`)` text-decoration: none; } ` -const Header = styled(`header`)` - align-items: flex-start; - ${presets.Tablet}: { - padding: ${rhythm(1)}; - padding: 10px; - background: yellow; - }; +export const Header = styled(`header`)` + align-items: flex-start; ` const Title = styled(`h1`)` + align-items: center; color: ${colors.gatsby}; display: flex; font-size: 1.25rem; + line-height: 1; margin: 0; - padding-bottom: ${rhythm(0.5)}; + margin-bottom: ${rhythm(0.25)}; + min-height: 32px; span { margin: 0 0.3rem 0 -0.1rem; } ` + const Icon = styled(`span`)` display: block; - width: 32px; height: 32px; + width: 32px; ` + const SubTitle = styled(`h2`)` color: ${colors.lilac}; font-size: 0.875rem; font-weight: 300; letter-spacing: 0.05em; margin: 0; + margin-top: ${rhythm(1)}; text-transform: uppercase; ` const Description = styled(`p`)` + color: ${colors.gray.lightCopy}; font-family: ${options.systemFontFamily.join(`,`)}; font-size: 0.8125rem; - color: ${colors.gray.lightCopy}; ` const Actions = styled(`div`)` display: flex; flex-wrap: wrap; - margin: -4px 0 ${rhythm(1)}; + margin-top: -${rhythm(1 / 4)}; > a { margin: 4px 8px 4px 0; @@ -101,33 +104,35 @@ const EcosysteSection = ({ icon, links, featuredItems, + className, }) => ( - +
    - - - {icon && <Icon dangerouslySetInnerHTML={{ __html: icon }} />} - <span>{title}</span> - - {description} - - {links.map((item, idx) => { - const { to, label, secondary } = item - - return ( - - ) - })} - - + + {icon && <Icon dangerouslySetInnerHTML={{ __html: icon }} />} + <span>{title}</span> + + {description} + + {links.map((item, idx) => { + const { to, label, secondary } = item + + return ( + + ) + })} + {subTitle && {subTitle}}
    {featuredItems && featuredItems.length > 0 && ( - + )}
    ) @@ -135,6 +140,7 @@ const EcosysteSection = ({ EcosysteSection.propTypes = { title: PropTypes.string.isRequired, description: PropTypes.string.isRequired, + className: PropTypes.string, subTitle: PropTypes.string, icon: PropTypes.string, links: PropTypes.array, diff --git a/www/src/components/homepage/homepage-ecosystem.js b/www/src/components/homepage/homepage-ecosystem.js new file mode 100644 index 0000000000000..981ade872c3f4 --- /dev/null +++ b/www/src/components/homepage/homepage-ecosystem.js @@ -0,0 +1,221 @@ +import React from "react" +import PropTypes from "prop-types" +import styled from "react-emotion" + +import ArrowForwardIcon from "react-icons/lib/md/arrow-forward" + +import HomepageSection from "./homepage-section" +import EcosystemSection from "../ecosystem/ecosystem-section" +import { + EcosystemFeaturedItemsRootBase, + ListBase as EcosystemFeaturedItemsListBase, +} from "../ecosystem/ecosystem-featured-items" +import EcosystemFeaturedItem, { + BlockLink as FeaturedItemBlockLink, +} from "../ecosystem/ecosystem-featured-item" + +import { EcosystemIcon } from "../../assets/mobile-nav-icons" +import { PluginsIcon, StartersIcon } from "../../assets/ecosystem-icons" + +import { rhythm, options } from "../../utils/typography" +import presets, { colors } from "../../utils/presets" + +import { SCROLLER_CLASSNAME } from "../../utils/scrollers-observer" + +const Sections = styled(`div`)` + display: flex; + flex-direction: column; + + ${presets.Tablet} { + flex-direction: row; + margin: 0 -8px; + } + + ${presets.Desktop} { + margin: 0 1.5rem 0 2.5rem; + } +` + +const Section = styled(EcosystemSection)` + box-shadow: 0 1px 8px rgba(0, 0, 0, 0.2); + border-radius: ${presets.radiusLg}px; + margin-bottom: ${rhythm(presets.gutters.default / 2)}; + padding: ${rhythm(options.blockMarginBottom)}; + + ${presets.Tablet} { + margin: 0 8px 0px; + padding: ${rhythm(options.blockMarginBottom)}; + + :last-child { + align-self: stretch; + } + } +` + +const SubTitle = styled(`h3`)` + color: ${colors.lemon}; + font-size: 1.2rem; + margin-top: 2rem; + + ${presets.Tablet} { + margin-left: 3rem; + } + + ${presets.Desktop} { + margin-left: 6rem; + } +` + +const FeaturedItems = styled(EcosystemFeaturedItemsRootBase)` + margin: 0 -${rhythm(presets.gutters.default / 2)}; + + ${presets.Desktop} { + margin: 0; + margin-left: calc(3rem - (${rhythm(options.blockMarginBottom)})); + margin-right: 1rem; + overflow-x: auto; + } + + ${presets.Hd} { + margin-right: 3rem; + } +` + +const FeaturedItemsList = styled(EcosystemFeaturedItemsListBase)` + padding: 0 calc(${rhythm(options.blockMarginBottom)} - 7px) 0; + + ${presets.Desktop} { + flex-wrap: wrap; + margin: 0; + width: 100%; + } +` + +const FeaturedItem = styled(EcosystemFeaturedItem)` + margin: 0 6px 6px 0; + + ${presets.Tablet} { + border-bottom: none; + margin: 0 6px 6px 0; + padding: 5px; + width: 320px; + } + + ${presets.Desktop} { + flex-basis: 30%; + + :nth-child(4) { + margin-left: 8%; + } + } + + ${FeaturedItemBlockLink} { + padding-left: calc(${rhythm(3 / 4)} + 1.1rem); + position: relative; + + /* this ovveride the .main-body a style*/ + box-shadow: none; + font-weight: normal; + + ${presets.Tablet} { + border-radius: ${presets.radiusLg}px; + } + + ${presets.Desktop} { + :hover { + background: ${colors.ui.whisper}; + } + } + + :before { + background: ${props => + props.item.type === `Starter` ? colors.skyLight : colors.accentLight}; + border-radius: ${presets.radiusLg}px 0 0 ${presets.radiusLg}px; + bottom: 0; + content: ""; + left: 0; + position: absolute; + top: 0; + width: 1.1rem; + } + + :after { + bottom: 0; + content: "${props => props.item.type}"; + color: ${props => + props.item.type === `Starter` ? colors.skyDark : colors.accentDark}; + font-family: ${options.headerFontFamily.join(`,`)}; + font-size: 0.8rem; + left: 0; + letter-spacing: 0.05em; + position: absolute; + transform: rotate(-90deg) translate(-0.5em, -0); + transform-origin: top left; + } + } +` + +const HomepageEcosystem = ({ featuredItems }) => ( + + +
    + +
    +
    + + Some of our recent favorites + + + {featuredItems.map(item => { + const { slug } = item + return + })} + + + +) + +HomepageEcosystem.propTypes = { + featuredItems: PropTypes.array.isRequired, +} + +export default HomepageEcosystem diff --git a/www/src/components/homepage/homepage-section.js b/www/src/components/homepage/homepage-section.js new file mode 100644 index 0000000000000..04f02b86be6e2 --- /dev/null +++ b/www/src/components/homepage/homepage-section.js @@ -0,0 +1,145 @@ +import React from "react" +import PropTypes from "prop-types" +import styled from "react-emotion" + +import Button from "../button" + +import { rhythm, options } from "../../utils/typography" +import { vP } from "../gutters" +import presets, { colors } from "../../utils/presets" + +const ICON_SIZE = `32px` + +const HomepageSectionRoot = styled(`section`)` + background: ${props => (props.inverse ? colors.gatsby : `#fff`)}; + color: ${props => (props.inverse ? colors.ui.light : colors.gatsbyDark)}; + margin: 0 -${rhythm(presets.gutters.default / 2)}; + padding: ${rhythm(2)} ${rhythm(presets.gutters.default / 2)}; + width: calc(100% + ${rhythm(presets.gutters.default)}); + + ${presets.Hd} { + margin: 0 -${vP}; + width: calc(100% + (${vP} * 2)); + } + + ${presets.VHd} { + padding: ${rhythm(2)} 5%; + } +` +const Header = styled(`header`)` + ${presets.Tablet} { + margin-left: 3rem; + max-width: 30rem; + } + + ${presets.Desktop} { + margin-left: 6rem; + } +` + +const Name = styled(`h3`)` + align-items: center; + color: ${props => (props.inverse ? colors.ui.light : colors.lilac)}; + display: flex; + font-size: 1rem; + font-weight: normal; + margin: 0; + margin-left: calc(${ICON_SIZE} * -0.2); + margin-bottom: 0.5em; + + ${presets.Tablet} { + margin-left: calc(${ICON_SIZE} * -1.2); + } +` + +const Icon = styled(`span`)` + display: block; + + ${presets.Tablet} { + margin-right: calc(${ICON_SIZE} / 5); + } + + svg { + height: ${ICON_SIZE}; + stroke: ${props => (props.inverse ? colors.ui.light : colors.lilac)}; + width: ${ICON_SIZE}; + } +` + +const Title = styled(`h1`)` + color: ${props => (props.inverse ? colors.lemon : colors.gatsby)}; + font-size: 1.75rem; + margin: 0; + margin-bottom: 0.5em; +` + +const Introduction = styled(`p`)` + color: ${props => (props.inverse ? colors.ui.light : colors.gatsbyDark)}; + font-size: 1.125rem; + font-family: ${options.headerFontFamily.join(`,`)}; + margin-bottom: 0; +` + +const Actions = styled(`div`)` + display: flex; + flex-wrap: wrap; + margin-top: -${rhythm(1 / 4)}; + + > a { + margin: ${rhythm(1.2)} 0 ${rhythm(1.5)}; + } +` + +const HomepageSection = ({ + children, + sectionName, + sectionIcon, + title, + introduction, + inverseStyle, + links, +}) => ( + +
    + {sectionName && ( + + {sectionIcon && ( + + )} + {sectionName} + + )} + {title && {title}} + {introduction && ( + {introduction} + )} + + {links.map((item, idx) => { + const { to, label, icon: Icon } = item + + return ( + + ) + })} + +
    + {children} +
    +) + +HomepageSection.propTypes = { + children: PropTypes.node.isRequired, + sectionName: PropTypes.string, + sectionIcon: PropTypes.string, + title: PropTypes.string, + introduction: PropTypes.string, + links: PropTypes.array, + inverseStyle: PropTypes.bool, +} + +export default HomepageSection diff --git a/www/src/data/ecosystem/featured-items.yaml b/www/src/data/ecosystem/featured-items.yaml index 77bdd0084b273..4e72292b07302 100644 --- a/www/src/data/ecosystem/featured-items.yaml +++ b/www/src/data/ecosystem/featured-items.yaml @@ -2,9 +2,9 @@ starters: - "/gatsby-starter-blog/" - "/gatsby-starter-netlify-cms/" - - "/gatsby-advanced-blog/" - "/gatsby-advanced-starter/" - - "/gatsby-starter-lumen/" + - "/gatsby-starter-default/" + - "/gatsby-material-starter/" # use name to pick a plugin plugins: - gatsby-plugin-react-helmet diff --git a/www/src/pages/index.js b/www/src/pages/index.js index 9c7d63c64edb6..620134ea78c2d 100644 --- a/www/src/pages/index.js +++ b/www/src/pages/index.js @@ -19,10 +19,73 @@ import FuturaParagraph from "../components/futura-paragraph" import Button from "../components/button" import TechWithIcon from "../components/tech-with-icon" import EmailCaptureForm from "../components/email-capture-form" +import HomepageEcosystem from "../components/homepage/homepage-ecosystem" +import { + setupScrollersObserver, + unobserveScrollers, +} from "../utils/scrollers-observer" class IndexRoute extends React.Component { + componentDidMount() { + setupScrollersObserver() + } + + componentWillUnmount() { + unobserveScrollers() + } + + combineEcosystemFeaturedItems = ({ starters, plugins, numFeatured = 3 }) => + new Array(numFeatured) + .fill(undefined) + .reduce( + (merged, _, index) => merged.concat([starters[index], plugins[index]]), + [] + ) + render() { - const blogPosts = this.props.data.allMarkdownRemark + const { + data: { + allMarkdownRemark: blogPosts, + allStartersYaml: { edges: startersData }, + allNpmPackage: { edges: pluginsData }, + }, + } = this.props + + const starters = startersData.map(item => { + const { + node: { + fields: { + starterShowcase: { slug, name, description, stars }, + }, + childScreenshot: { + screenshotFile: { + childImageSharp: { fixed: thumbnail }, + }, + }, + }, + } = item + + return { + slug: `/starters${slug}`, + name, + description, + stars, + thumbnail, + type: `Starter`, + } + }) + + const plugins = pluginsData.map(item => { + item.node.type = `Plugin` + + return item.node + }) + + const ecosystemFeaturedItems = this.combineEcosystemFeaturedItems({ + plugins, + starters, + }) + return ( @@ -48,10 +111,7 @@ class IndexRoute extends React.Component { padding: rhythm(presets.gutters.default / 2), flex: `0 0 100%`, maxWidth: `100%`, - [presets.Hd]: { - padding: vP, - paddingTop: 0, - }, + [presets.Hd]: { padding: vP, paddingTop: 0 }, }} >
    - -

    Curious yet?

    @@ -161,14 +219,16 @@ class IndexRoute extends React.Component {
    + + + +
    Latest from the Gatsby blog @@ -229,7 +287,10 @@ class IndexRoute extends React.Component { export default IndexRoute export const pageQuery = graphql` - query { + query IndexRouteQuery( + $featuredStarters: [String]! + $featuredPlugins: [String]! + ) { file(relativePath: { eq: "gatsby-explanation.png" }) { childImageSharp { fluid(maxWidth: 870) { @@ -254,5 +315,42 @@ export const pageQuery = graphql` } } } + allStartersYaml( + filter: { + fields: { starterShowcase: { slug: { in: $featuredStarters } } } + } + ) { + edges { + node { + fields { + starterShowcase { + slug + description + stars + name + } + } + childScreenshot { + screenshotFile { + childImageSharp { + fixed(width: 64, height: 64) { + ...GatsbyImageSharpFixed_noBase64 + } + } + } + } + } + } + } + allNpmPackage(filter: { name: { in: $featuredPlugins } }) { + edges { + node { + slug + name + description + humanDownloadsLast30Days + } + } + } } ` diff --git a/www/src/utils/colors.js b/www/src/utils/colors.js index a017c93397289..e814a01573a84 100644 --- a/www/src/utils/colors.js +++ b/www/src/utils/colors.js @@ -5,6 +5,7 @@ const colors = { // @see https://www.figma.com/file/J6IYJEtdRmwJQOrcZ2DfvxDD/Gatsby gatsby: `#663399`, // was #744c9e gatsbyDark: `#442266`, + lemon: `#ffdf37`, lilac: `#8c65b3`, lavender: `#b190d5`, wisteria: `#ccb2e5`, @@ -13,6 +14,10 @@ const colors = { accent: `#ffb238`, // "Mustard", success: `#37b635`, warning: `#ec1818`, + accentLight: `#ffeccd`, + accentDark: `#9e6100`, + skyLight: `#dcfffd`, + skyDark: `#0a75c2`, ui: { border: `#ede7f3`, bright: `#e0d6eb`, diff --git a/www/src/utils/scrollers-observer.js b/www/src/utils/scrollers-observer.js new file mode 100644 index 0000000000000..8be840f568e68 --- /dev/null +++ b/www/src/utils/scrollers-observer.js @@ -0,0 +1,60 @@ +let observer +let scrollers = [] + +export const SCROLLER_CLASSNAME = `scrollerWithLead` + +export const setupScrollersObserver = () => { + if (typeof window.IntersectionObserver !== `undefined`) { + const options = { rootMargin: `0px`, threshold: [1] } + observer = new IntersectionObserver(handleIntersect, options) + + scrollers = Array.from(document.querySelectorAll(`.${SCROLLER_CLASSNAME}`)) + + scrollers.forEach(scroller => observer.observe(scroller)) + } +} + +export const unobserveScrollers = () => { + if (typeof window.IntersectionObserver !== `undefined`) { + scrollers.forEach(scroller => observer.unobserve(scroller)) + } +} + +const handleIntersect = (entries, observer) => { + entries.forEach(entry => { + const target = entry.target + + if (entry.intersectionRatio > 0.5) { + setTimeout( + () => turnOnLeadScroll({ target, duration: 1000, distance: 20 }), + 250 + ) + observer.unobserve(target) + } + }) +} + +const turnOnLeadScroll = ({ target, duration, distance }) => { + let startTime = null + + function animation(currentTime) { + if (startTime === null) { + startTime = currentTime + } + + const timeElapsed = currentTime - startTime + const getDistanceToScroll = ease(timeElapsed, 0, distance, duration) + + target.scroll({ top: 0, left: getDistanceToScroll }) + + if (timeElapsed < duration) { + requestAnimationFrame(animation) + } + } + + function ease(t, b, c, d) { + return -c * (t /= d) * (t - 2) + b + } + + requestAnimationFrame(animation) +} diff --git a/www/src/utils/styles.js b/www/src/utils/styles.js index 6464761c265b0..8b63f90ae5ee2 100644 --- a/www/src/utils/styles.js +++ b/www/src/utils/styles.js @@ -107,6 +107,7 @@ export const buttonStyles = { padding: `${rhythm(1 / 5)} ${rhythm(1 / 3)}`, }, }, + ondark: { border: `1px solid ${colors.ui.light}` }, } export const svgStyles = { From e9f2a6f24f26da540365493c1b8b9a4aa01f5d16 Mon Sep 17 00:00:00 2001 From: Tobias Lundgren Date: Wed, 14 Nov 2018 20:24:03 +0100 Subject: [PATCH 295/462] fix(docs): update broken links with working links (#9912) --- README.md | 2 +- .../index.md | 2 +- .../index.md | 2 -- .../index.md | 2 +- .../index.md | 2 +- .../index.md | 2 +- docs/blog/2018-08-09-swag-store/index.md | 2 +- .../blog/2018-1-18-strapi-and-gatsby/index.md | 2 +- .../index.md | 2 +- .../index.md | 2 +- .../index.md | 2 +- .../2018-2-6-choosing-a-back-end/index.md | 2 +- docs/docs/gatsby-style-guide.md | 8 +++--- docs/docs/headless-cms.md | 26 +++++++++---------- docs/docs/migrating-from-v1-to-v2.md | 2 +- docs/docs/sourcing-from-private-apis.md | 2 +- docs/docs/webpack-and-ssr.md | 2 +- packages/gatsby-plugin-layout/README.md | 2 +- packages/gatsby-source-wordpress/README.md | 8 +++--- packages/gatsby/README.md | 2 +- 20 files changed, 37 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index b9b642f61efe1..9d832acf6f370 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Downloads per month on npm. - + PRs welcome!

    diff --git a/docs/blog/2018-01-22-getting-started-gatsby-and-wordpress/index.md b/docs/blog/2018-01-22-getting-started-gatsby-and-wordpress/index.md index 0e5f147481179..9ec033331e168 100644 --- a/docs/blog/2018-01-22-getting-started-gatsby-and-wordpress/index.md +++ b/docs/blog/2018-01-22-getting-started-gatsby-and-wordpress/index.md @@ -140,4 +140,4 @@ While this isn't a tutorial -- more a guided walkthrough of me familiarizing and 2. Gatsby makes heavy use of [plugins](/docs/plugins/) — both official and community — for a lot of things, from one that implements [Google Analytics](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-analytics), to one that adds [GitHub's accessibility error scanner](https://github.com/alampros/gatsby-plugin-accessibilityjs) to all pages. 3. Read through some of the source code. I particularly enjoyed reading through [the bootstrap process](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/bootstrap/index.js). (It's beautifully commented). 4. Gatsby.js is a static Progressive Web App (PWA) generator, but to be PWA friendly (at least according to the [Lighthouse PWA audit](https://developers.google.com/web/tools/lighthouse/)), look into two plugins: `gatsby-plugin-manifest` and `gatsby-plugin-offline`. -5. I did end up [deploying with Netlify](/docs/deploy-gatsby/#netlify), and I'm super happy with it. (A [previous post](/blog/2017-12-06-gatsby-plus-contentful-plus-netlify/#solution-netlify--gatsby) discussed Netlify a bit more, if you're interested). +5. I did end up [deploying with Netlify](/docs/deploying-to-netlify), and I'm super happy with it. (A [previous post](/blog/2017-12-06-gatsby-plus-contentful-plus-netlify/#solution-netlify--gatsby) discussed Netlify a bit more, if you're interested). diff --git a/docs/blog/2018-02-16-bright-future-for-the-web/index.md b/docs/blog/2018-02-16-bright-future-for-the-web/index.md index 0f206624e428b..0b398af2f2859 100644 --- a/docs/blog/2018-02-16-bright-future-for-the-web/index.md +++ b/docs/blog/2018-02-16-bright-future-for-the-web/index.md @@ -35,5 +35,3 @@ The final piece of the puzzle was determining where to host the website. I had r After a little over a month of tinkering on the design during nights and weekends I had a fully functional website ready to be launched. During this process I learned a fair bit of how to code with React and the Gatsby community seemed genuinely nice and happy to help me to learn. The final product was a website that felt like it belonged in 2018 while still allowing my wife to easily update content with no assistance. Not only that the website was immensely faster than the previous WordPress version, served over HTTPS, utilized a CDN and cost me $0 dollars a month thanks to the extremely generous free tiers offered by Netlify and Contentful. 😍 If you are currently on the fence about static site generators or the JAMstack in general there has never been a better time to jump in. In my humble opinion with these tools it has finally reached the level of maturity to not just be feasible for client work but actually pretty darn amazing. - -For those interested the source code for the website I built is available on GitHub: https://github.com/ryanwiemer/knw diff --git a/docs/blog/2018-06-14-escalade-sports-from-5000-to-5-in-hosting/index.md b/docs/blog/2018-06-14-escalade-sports-from-5000-to-5-in-hosting/index.md index 1da15601a7292..02298cd665539 100644 --- a/docs/blog/2018-06-14-escalade-sports-from-5000-to-5-in-hosting/index.md +++ b/docs/blog/2018-06-14-escalade-sports-from-5000-to-5-in-hosting/index.md @@ -42,7 +42,7 @@ Working with another developer, a photographer, and a graphic designer, he found “Almost all the code we used in prototyping went into production,” says Rose. “Especially back in the Drupal days, that was just not going to happen. -Another unexpected benefit was the cost reduction of hosting static content, instead of running PHP servers. After migrating to Gatsby, Rose moved the cajunbowfishing.com website hosting over to [Netlify](www.netlify.com). +Another unexpected benefit was the cost reduction of hosting static content, instead of running PHP servers. After migrating to Gatsby, Rose moved the cajunbowfishing.com website hosting over to [Netlify](https://www.netlify.com). “Our bill went from $5,000 a month to $5,” he says. diff --git a/docs/blog/2018-06-18-moving-from-create-react-app-to-gatsby-js/index.md b/docs/blog/2018-06-18-moving-from-create-react-app-to-gatsby-js/index.md index 5033f3f04ee52..cc9baf6fb31ba 100644 --- a/docs/blog/2018-06-18-moving-from-create-react-app-to-gatsby-js/index.md +++ b/docs/blog/2018-06-18-moving-from-create-react-app-to-gatsby-js/index.md @@ -265,7 +265,7 @@ I will not go in depth with how to manage state with React since there are a lot ![server-2160321 1280](https://images.ctfassets.net/4x6byznv2pet/2xjoMXpIKoAwAM4sqeOCcA/721945e76b4b5861476a9ce8781a326c/server-2160321_1280.jpg) -Since Gatsby builds "static" files you can host them on tons of services. One of my favourites is [Netlify](https://www.netlify.com/). There is also [AWS S3](https://aws.amazon.com/s3/) and more, see the [deploying Gatsby documentation](/docs/deploy-gatsby/) for examples. +Since Gatsby builds "static" files you can host them on tons of services. One of my favourites is [Netlify](https://www.netlify.com/). There is also [AWS S3](https://aws.amazon.com/s3/) and more, see the [deploying Gatsby documentation](/docs/deploying-and-hosting/) for examples. ## Resources diff --git a/docs/blog/2018-07-07-the-gatsby-plugin-page-creator/index.md b/docs/blog/2018-07-07-the-gatsby-plugin-page-creator/index.md index 0dcee9305c807..5b3f000135e1e 100644 --- a/docs/blog/2018-07-07-the-gatsby-plugin-page-creator/index.md +++ b/docs/blog/2018-07-07-the-gatsby-plugin-page-creator/index.md @@ -19,7 +19,7 @@ Here's how it all got started. The goal with [Gatsby Manor](https://gatsbymanor. is to create professional designed Gatsby starters to give your site a clean, modern look the moment you create a new project. While creating our newest starter -[gatsby-starter-eventually](https://gatsbymanor.com/demo/eventually), +[gatsby-starter-eventually](https://github.com/gatsbymanor/gatsby-starter-eventually), I wanted to organize the directory structure of the project to better fit my workflow. diff --git a/docs/blog/2018-08-09-swag-store/index.md b/docs/blog/2018-08-09-swag-store/index.md index 5479741a4ff71..1a2dad0d77206 100644 --- a/docs/blog/2018-08-09-swag-store/index.md +++ b/docs/blog/2018-08-09-swag-store/index.md @@ -76,6 +76,6 @@ Thanks for being part of the open source community! 💪💜 [shopify]: https://www.shopify.com/ [js-buy-sdk]: https://shopify.github.io/js-buy-sdk/ [auth0]: https://auth0.com/ -[invite]: https://github.com/gatsbyjs/peril-gatsbyjs/blob/master/org/invite-collaborator.ts +[invite]: https://github.com/gatsbyjs/peril-gatsbyjs/blob/master/rules/invite-collaborator.ts [peril]: https://github.com/danger/peril [contribute]: /docs/how-to-contribute/ diff --git a/docs/blog/2018-1-18-strapi-and-gatsby/index.md b/docs/blog/2018-1-18-strapi-and-gatsby/index.md index 2c6f8df7e556e..1bc5be969336b 100644 --- a/docs/blog/2018-1-18-strapi-and-gatsby/index.md +++ b/docs/blog/2018-1-18-strapi-and-gatsby/index.md @@ -596,7 +596,7 @@ Since the content is managed by Strapi, the authors can write article through a Feel free to continue this project to discover both Gatsby and Strapi advantages. Here are some features you can add: list of authors, article's categories, and comment system with the Strapi API or Disqus. You can also create other kind of websites (e-commerce shop, corporate website, etc.). -When your project is achieved, you will probably want to deploy it. The static website generated by Gatsby can [easily be published on storage providers](https://www.gatsbyjs.org/docs/deploy-gatsby/): Netlify, S3/Cloudfront, GitHub pages, GitLab pages, Heroku, etc. The Strapi API is nothing else than a simple Node.js API, so it can be hosted on Heroku or any Linux instance that has Node.js installed. +When your project is achieved, you will probably want to deploy it. The static website generated by Gatsby can [easily be published on storage providers](https://www.gatsbyjs.org/docs/deploying-and-hosting): Netlify, S3/Cloudfront, GitHub pages, GitLab pages, Heroku, etc. The Strapi API is nothing else than a simple Node.js API, so it can be hosted on Heroku or any Linux instance that has Node.js installed. The [code source of this tutorial is available on GitHub](https://github.com/strapi/strapi-examples/tree/master/gatsby-strapi-tutorial). To see it live, clone the repository, run `npm run setup`, start the Strapi server (`cd api && strapi start`) and the Gatsby server (`cd blog && npm run develop`). diff --git a/docs/blog/2018-10-04-journey-to-the-content-mesh/index.md b/docs/blog/2018-10-04-journey-to-the-content-mesh/index.md index f4d834d9fb339..f3811dc677eff 100644 --- a/docs/blog/2018-10-04-journey-to-the-content-mesh/index.md +++ b/docs/blog/2018-10-04-journey-to-the-content-mesh/index.md @@ -65,7 +65,7 @@ In Part 3, [The Rise of Modern Web Development](/blog/2018-10-11-rise-of-modern- In Part 4, [Why Mobile Performance is Crucial](/blog/2018-10-16-why-mobile-performance-is-crucial), we’ll discuss the ROI of site speed, explore two modern, complementary trends for improving web performance and how website teams can get the best of both out of the box. -In our conclusion, [Creating Compelling Experiences](/blog/2018-10-18-creating-compelling-experiences), we’ll discuss a step-by-step approach for choosing a content architecture, modern development environment, a performance strategy -- and most importantly, choosing a "content mesh" that makes all the other choices easy. We’ll also explore how one clear option -- Gatsby -- emerges as the most feature-complete of any content mesh alternatives. +In our conclusion, [Creating Compelling Experiences](/blog/2018-10-18-creating-compelling-content-experiences), we’ll discuss a step-by-step approach for choosing a content architecture, modern development environment, a performance strategy -- and most importantly, choosing a "content mesh" that makes all the other choices easy. We’ll also explore how one clear option -- Gatsby -- emerges as the most feature-complete of any content mesh alternatives. ## The Modern Website Landscape diff --git a/docs/blog/2018-10-12-uptick-docs-contributions-hacktoberfest/index.md b/docs/blog/2018-10-12-uptick-docs-contributions-hacktoberfest/index.md index 502e022d0167c..f2dad1839eb13 100644 --- a/docs/blog/2018-10-12-uptick-docs-contributions-hacktoberfest/index.md +++ b/docs/blog/2018-10-12-uptick-docs-contributions-hacktoberfest/index.md @@ -33,7 +33,7 @@ Here is a summary of the “docs decision tree,” a tool we’ll use to make de A doc qualifies to be in the .org site if it: -1. Deals with a piece of Gatsby-maintained software (e.g. pertains to code in the [Gatsby OSS repository](www.github.com/gatsbyjs/gatsby)), a core dependency of the code in the Gatsby OSS repo, or a third-party software that works well with Gatsby and is in high demand +1. Deals with a piece of Gatsby-maintained software (e.g. pertains to code in the [Gatsby OSS repository](https://www.github.com/gatsbyjs/gatsby)), a core dependency of the code in the Gatsby OSS repo, or a third-party software that works well with Gatsby and is in high demand > **Yes** --> Belongs in the docs (to make sure we don’t have to maintain docs about core dependencies and third-party software, we will focus on linking to their docs as much as possible) diff --git a/docs/blog/2018-10-16-why-mobile-performance-is-crucial/index.md b/docs/blog/2018-10-16-why-mobile-performance-is-crucial/index.md index 6251889f86897..cb6a47cc3d678 100644 --- a/docs/blog/2018-10-16-why-mobile-performance-is-crucial/index.md +++ b/docs/blog/2018-10-16-why-mobile-performance-is-crucial/index.md @@ -112,7 +112,7 @@ For example, if you use a CDN to serve 3MB Javascript bundles, your site is stil
    - Part of a network request waterfall chart for a typical enterprise website (adobe.com). The full waterfall chart is three times longer. + Part of a network request waterfall chart for a typical enterprise website (adobe.com). The full waterfall chart is three times longer.
    diff --git a/docs/blog/2018-2-6-choosing-a-back-end/index.md b/docs/blog/2018-2-6-choosing-a-back-end/index.md index 88ad2e079fccb..b2ebceeade133 100644 --- a/docs/blog/2018-2-6-choosing-a-back-end/index.md +++ b/docs/blog/2018-2-6-choosing-a-back-end/index.md @@ -33,7 +33,7 @@ You build your site. You’ve got your Sass, you’ve got your Markdown files (o Now we need a system to manage and deliver our content in a nice API (instructed by our GraphQL of course). And there’s a whole bunch of them about. To help us out, Gatsby has plugins that cater to some Headless CMS like the WordPress API, Contentful, Cockpit, Prismic and NetlifyCMS - which Gatsby actually has a guide for. I’ll be going through a few of these to see which one might be more useful for this small project, and going forward. -> After posting this, I heard some really good thing about [GraphCMS](https://graphcms.com/) - It’s designed to work with GraphQL inherently and they have a [Gatsby Starter Project](https://github.com/GraphCMS/graphcms-examples/tree/master/gatsby-source-plugin-blog) example to check out. +> After posting this, I heard some really good thing about [GraphCMS](https://graphcms.com/) - It’s designed to work with GraphQL inherently and they have a [Gatsby Starter Project](https://github.com/GraphCMS/graphcms-examples/tree/master/current/gatsby-source-plugin-blog) example to check out. Firstly, though, why do we want a Headless CMS and a JAMstack for the project? There are a few reasons most people use them, and some that are down to personal preference: diff --git a/docs/docs/gatsby-style-guide.md b/docs/docs/gatsby-style-guide.md index 9ad359167c620..77042e33f6e06 100644 --- a/docs/docs/gatsby-style-guide.md +++ b/docs/docs/gatsby-style-guide.md @@ -41,7 +41,7 @@ topic to write about it--this entire website is open source, so even if you make If you’d like to help by writing an article, find a stub article in the Gatsby Docs (with a grey instead of black title in the sidebar of the Docs), write the article, then -[open a pull request (PR)](/how-to-contribute/#contributing-to-the-documentation) in the Gatsby GitHub repo to replace the stub with your article. +[open a pull request (PR)](/docs/how-to-contribute/#contributing-to-the-documentation) in the Gatsby GitHub repo to replace the stub with your article. If you can't find a stub about the topic you'd like to write about, you can open a PR in GitHub that creates the stub and includes your draft article. Feel free to ask questions in the PR comments if you're not sure where to put a new article in the directory structure. @@ -52,13 +52,13 @@ Before you begin writing, make sure to read the rest of this style guide. Docs can cover a broad range of topics. Please see the following examples: -- [guides](/add-404-page/) -- [guide overviews](/styling/) +- [guides](/docs/add-404-page/) +- [guide overviews](/docs/styling/) - [tutorials](/tutorial/part-one/) - [plugin READme](/packages/gatsby-source-filesystem/) - [starter READme](https://github.com/gatsbyjs/gatsby-starter-default) -Please see the [Docs templates](docs/templates/) for guidelines on how to format the above kinds of documents. +Please see the [Docs templates](/docs/templates/) for guidelines on how to format the above kinds of documents. ## Writing process diff --git a/docs/docs/headless-cms.md b/docs/docs/headless-cms.md index c95271f40228b..22233f4e18696 100644 --- a/docs/docs/headless-cms.md +++ b/docs/docs/headless-cms.md @@ -17,19 +17,19 @@ The guides in this section will walk through the process of setting up content s Other CMS systems you can connect to include: -- [ButterCMS](https://www.gatsbyjs.org/packages/gatsby-source-buttercms/?=gatsby-source-) -- [Shopify](https://www.gatsbyjs.org/packages/gatsby-source-shopify/?=gatsby-source-) -- [Contentstack](https://www.gatsbyjs.org/packages/gatsby-source-contentstack/?=gatsby-source-) -- [Ghost](https://www.gatsbyjs.org/packages/gatsby-source-ghost/?=gatsby-source-) -- [Prismic](https://www.gatsbyjs.org/packages/gatsby-source-prismic/?=gatsby-source-) -- [Strapi](https://www.gatsbyjs.org/packages/gatsby-source-strapi/?=gatsby-source-) -- [Directus](https://www.gatsbyjs.org/packages/gatsby-source-directus/?=gatsby-source-) -- [Cockpit](https://www.gatsbyjs.org/packages/gatsby-plugin-cockpit/?=gatsby-source-) -- [GraphCMS](https://www.gatsbyjs.org/packages/gatsby-source-graphcms-beta-patch/?=gatsby-source-) -- [CraftCMS](https://www.gatsbyjs.org/packages/gatsby-source-craftcms/?=gatsby-source-) -- [DatoCMS](https://www.gatsbyjs.org/packages/gatsby-source-datocms/?=gatsby-source-) -- [Storyblok](https://www.gatsbyjs.org/packages/gatsby-source-storyblok/?=gatsby-source-) -- [Kentico Cloud](https://www.gatsbyjs.org/packages/gatsby-source-kentico-cloud/?=gatsby-source-) +- [ButterCMS](https://www.gatsbyjs.org/packages/gatsby-source-buttercms) +- [Shopify](https://www.gatsbyjs.org/packages/gatsby-source-shopify) +- [Contentstack](https://www.gatsbyjs.org/packages/gatsby-source-contentstack) +- [Ghost](https://www.gatsbyjs.org/packages/gatsby-source-ghost) +- [Prismic](https://www.gatsbyjs.org/packages/gatsby-source-prismic) +- [Strapi](https://www.gatsbyjs.org/packages/gatsby-source-strapi) +- [Directus](https://www.gatsbyjs.org/packages/gatsby-source-directus) +- [Cockpit](https://www.gatsbyjs.org/packages/gatsby-plugin-cockpit) +- [GraphCMS](https://www.gatsbyjs.org/packages/gatsby-source-graphcms-beta-patch) +- [CraftCMS](https://www.gatsbyjs.org/packages/gatsby-source-craftcms) +- [DatoCMS](https://www.gatsbyjs.org/packages/gatsby-source-datocms) +- [Storyblok](https://www.gatsbyjs.org/packages/gatsby-source-storyblok) +- [Kentico Cloud](https://www.gatsbyjs.org/packages/gatsby-source-kentico-cloud) ## How to add new guides to this section diff --git a/docs/docs/migrating-from-v1-to-v2.md b/docs/docs/migrating-from-v1-to-v2.md index 546a34a6cc17c..1c0a6fe34ba1f 100644 --- a/docs/docs/migrating-from-v1-to-v2.md +++ b/docs/docs/migrating-from-v1-to-v2.md @@ -733,7 +733,7 @@ exports.onCreateWebpackConfig = ({ getConfig, actions }) => { } ``` -If you're using a preprocessor, you can pass in CSS Loader options when configuring [`gatsby-plugin-sass`](/packages/gatsby-plugin-sass/README.md#how-to-use) or [`gatsby-plugin-less`](/packages/gatsby-plugin-less/README.md#how-to-use): +If you're using a preprocessor, you can pass in CSS Loader options when configuring [`gatsby-plugin-sass`](/packages/gatsby-plugin-sass/#how-to-use) or [`gatsby-plugin-less`](/packages/gatsby-plugin-less/#how-to-use): ```javascript // in gatsby-config.js diff --git a/docs/docs/sourcing-from-private-apis.md b/docs/docs/sourcing-from-private-apis.md index aa711b6b8634e..3e86793efcc92 100644 --- a/docs/docs/sourcing-from-private-apis.md +++ b/docs/docs/sourcing-from-private-apis.md @@ -16,7 +16,7 @@ There are 3 approaches that you can use to source data from your private API: 1. If the data of your private API is updated very frequently or the expectation of the site is to be updated in real-time, it may make more sense to query the data directly during runtime. -2. If you can source the data through a plugin, consider that as an alternative to sourcing via the API. For instance, if you have access to the MongoDB database that stores the data, [`gatsby-source-mongodb`](/https://www.gatsbyjs.org/packages/gatsby-source-mongodb/) will be handy. Browse the [Gatsby Plugin Library](https://www.gatsbyjs.org/plugins/) to see what plugins that you could utilize. +2. If you can source the data through a plugin, consider that as an alternative to sourcing via the API. For instance, if you have access to the MongoDB database that stores the data, [`gatsby-source-mongodb`](https://www.gatsbyjs.org/packages/gatsby-source-mongodb/) will be handy. Browse the [Gatsby Plugin Library](https://www.gatsbyjs.org/plugins/) to see what plugins that you could utilize. 3. Depending on your build process and the availability of your private API, you may need to make other adjustments accordingly. diff --git a/docs/docs/webpack-and-ssr.md b/docs/docs/webpack-and-ssr.md index f3f47b9f34568..b092b6e3a77e3 100644 --- a/docs/docs/webpack-and-ssr.md +++ b/docs/docs/webpack-and-ssr.md @@ -10,6 +10,6 @@ The next stages of the build lean heavily on webpack for code optimization and c All the files required by webpack are in your site's `.cache` directory. This is empty when you initialize a new project and can be safely deleted. Gatsby creates and fills it over the course of a build. -At the start of the build, Gatsby [copies all files](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/bootstrap/index.js#L191) in [gatsby/cache-dir](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby/cache-dir) into your `.cache` directory. This includes things like [static-entry.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/cache-dir/static-entry.jsO) and [production-app.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/cache-dir/production-app.js) that you'll read about in the next sections. Essentially, all files that are needed by Gatsby to run in the browser, or to generate HTML, are included in `cache-dir`. +At the start of the build, Gatsby [copies all files](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/src/bootstrap/index.js#L191) in [gatsby/cache-dir](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby/cache-dir) into your `.cache` directory. This includes things like [static-entry.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/cache-dir/static-entry.js) and [production-app.js](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby/cache-dir/production-app.js) that you'll read about in the next sections. Essentially, all files that are needed by Gatsby to run in the browser, or to generate HTML, are included in `cache-dir`. Since Webpack doesn't know about Redux, we also need to create files that contain all the page data that was built up during bootstrap. And these all need to be placed in `.cache` as well. This is what the previous [Write Out Pages](/docs/write-pages/) section dealt with. diff --git a/packages/gatsby-plugin-layout/README.md b/packages/gatsby-plugin-layout/README.md index 3cc4d347fd8aa..5f32b61705b46 100644 --- a/packages/gatsby-plugin-layout/README.md +++ b/packages/gatsby-plugin-layout/README.md @@ -50,7 +50,7 @@ module.exports = { There are a few scenarios where it makes sense to reimplement the V1 layout handling: -1. You have a large or complex V1 site and [refactoring to the new layout component](https://v2--gatsbyjs.netlify.com/docs/migrating-from-v1-to-v2/#update-layout-component) is not feasible +1. You have a large or complex V1 site and [refactoring to the new layout component](https://www.gatsbyjs.org/docs/migrating-from-v1-to-v2/#remove-or-refactor-layout-components) is not feasible 2. Your site uses page transitions or other transitions that break if the layout component is unmounted and remounted when routes change 3. Your site attaches global state in the layout that doesn't persist if the component is unmounted and remounted diff --git a/packages/gatsby-source-wordpress/README.md b/packages/gatsby-source-wordpress/README.md index 27a305fcd620b..811ff5aa2608c 100644 --- a/packages/gatsby-source-wordpress/README.md +++ b/packages/gatsby-source-wordpress/README.md @@ -11,7 +11,7 @@ An example site for this plugin is available. ## Features -- Pulls data from self-hosted WordPress sites, or sites hosted on [https://wordpress.com](wordpress.com) +- Pulls data from self-hosted WordPress sites, or sites hosted on [WordPress.com](https://wordpress.com) - Should work with any number of posts (tested on a site with 900 posts) - Can authenticate to wordpress.com's API using OAuth 2 so media can be queried - Easily create responsive images in Gatsby from WordPress images. See [image @@ -62,7 +62,7 @@ module.exports = { // If your site is hosted on wordpress.org, then set this to false. hostingWPCOM: false, // If useACF is true, then the source plugin will try to import the Wordpress ACF Plugin contents. - // This feature is untested for sites hosted on Wordpress.com. + // This feature is untested for sites hosted on wordpress.com. // Defaults to true. useACF: true, // Include specific ACF Option Pages that have a set post ID @@ -82,7 +82,7 @@ module.exports = { // If hostingWPCOM is true then you will need to communicate with wordpress.com API // in order to do that you need to create an app (of type Web) at https://developer.wordpress.com/apps/ // then add your clientId, clientSecret, username, and password here - // Learn about environment variables: https://gatsby.app/env-vars + // Learn about environment variables: https://www.gatsbyjs.org/docs/environment-variables wpcom_app_clientSecret: process.env.WORDPRESS_CLIENT_SECRET, wpcom_app_clientId: "54793", wpcom_user: "gatsbyjswpexample@gmail.com", @@ -918,4 +918,4 @@ process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" ``` [dotenv]: https://github.com/motdotla/dotenv -[envvars]: https://gatsby.app/env-vars +[envvars]: https://www.gatsbyjs.org/docs/environment-variables diff --git a/packages/gatsby/README.md b/packages/gatsby/README.md index 2813de58a22d3..3d128838580cd 100644 --- a/packages/gatsby/README.md +++ b/packages/gatsby/README.md @@ -27,7 +27,7 @@ Downloads per month on npm. - + PRs welcome!

    From 7c826a17219053421a85a75038474843f581e026 Mon Sep 17 00:00:00 2001 From: David Bailey <4248177+davidbailey00@users.noreply.github.com> Date: Wed, 14 Nov 2018 20:22:14 +0000 Subject: [PATCH 296/462] fix(gatsby-plugin-offline): fix certain resources being cached excessively (#9923) Fixes #9415 This PR leverages Workbox's automatic caching when a resource is fetched, by creating a `` prefetch element for each resource. This means we don't have to worry about whether the resource can be fetched with CORS or not, since the browser handles it automatically. I've also changed the runtime caching RegExps so that only paths with certain extensions are cached, but 3rd party resources with these extensions can now be cached. --- packages/gatsby-plugin-offline/README.md | 21 ++++++++----- .../src/gatsby-browser.js | 19 ++++++++---- .../gatsby-plugin-offline/src/gatsby-node.js | 21 ++++++++----- .../gatsby-plugin-offline/src/sw-append.js | 30 +------------------ 4 files changed, 42 insertions(+), 49 deletions(-) diff --git a/packages/gatsby-plugin-offline/README.md b/packages/gatsby-plugin-offline/README.md index 09493aff2882e..809cc3b41db64 100644 --- a/packages/gatsby-plugin-offline/README.md +++ b/packages/gatsby-plugin-offline/README.md @@ -49,18 +49,25 @@ const options = { navigateFallbackWhitelist: [/^([^.?]*|[^?]*\.([^.?]{5,}|html))(\?.*)?$/], navigateFallbackBlacklist: [/\?(.+&)?no-cache=1$/], cacheId: `gatsby-plugin-offline`, - // Don't cache-bust JS or CSS files, and anything in the static directory - dontCacheBustUrlsMatching: /(.*\.js$|.*\.css$|\/static\/)/, + // Don't cache-bust JS or CSS files, and anything in the static directory, + // since these files have unique URLs and their contents will never change + dontCacheBustUrlsMatching: /(\.js$|\.css$|\/static\/)/, runtimeCaching: [ { - // Add runtime caching of various page resources. - urlPattern: /\.(?:png|jpg|jpeg|webp|svg|gif|tiff|js|woff|woff2|json|css)$/, + // Use cacheFirst since these don't need to be revalidated (same RegExp + // and same reason as above) + urlPattern: /(\.js$|\.css$|\/static\/)/, + handler: `cacheFirst`, + }, + { + // Add runtime caching of various other page resources + urlPattern: /^https?:.*\.(png|jpg|jpeg|webp|svg|gif|tiff|js|woff|woff2|json|css)$/, handler: `staleWhileRevalidate`, }, { - // Use the Network First handler for external resources - urlPattern: /^https?:/, - handler: `networkFirst`, + // Google Fonts CSS (doesn't end in .css so we need to specify it) + urlPattern: /^https?:\/\/fonts\.googleapis\.com\/css/, + handler: `staleWhileRevalidate`, }, ], skipWaiting: true, diff --git a/packages/gatsby-plugin-offline/src/gatsby-browser.js b/packages/gatsby-plugin-offline/src/gatsby-browser.js index 318efddceac57..0f5749e483eb9 100644 --- a/packages/gatsby-plugin-offline/src/gatsby-browser.js +++ b/packages/gatsby-plugin-offline/src/gatsby-browser.js @@ -21,13 +21,12 @@ exports.onServiceWorkerActive = ({ // grab nodes from head of document const nodes = document.querySelectorAll(` head > script[src], - head > link[as=script], - head > link[rel=stylesheet], + head > link[href], head > style[data-href] `) // get all resource URLs - const resources = [].slice + const headerResources = [].slice .call(nodes) .map(node => node.src || node.href || node.getAttribute(`data-href`)) @@ -40,8 +39,16 @@ exports.onServiceWorkerActive = ({ ) ) - serviceWorker.active.postMessage({ - api: `gatsby-runtime-cache`, - resources: [...resources, ...prefetchedResources], + const resources = [...headerResources, ...prefetchedResources] + resources.forEach(resource => { + // Create a prefetch link for each resource, so Workbox runtime-caches them + const link = document.createElement(`link`) + link.rel = `prefetch` + link.href = resource + + link.onload = link.remove + link.onerror = link.remove + + document.head.appendChild(link) }) } diff --git a/packages/gatsby-plugin-offline/src/gatsby-node.js b/packages/gatsby-plugin-offline/src/gatsby-node.js index a9f4419e93d21..892e99eb953dc 100644 --- a/packages/gatsby-plugin-offline/src/gatsby-node.js +++ b/packages/gatsby-plugin-offline/src/gatsby-node.js @@ -91,18 +91,25 @@ exports.onPostBuild = (args, pluginOptions) => { navigateFallbackWhitelist: [/^([^.?]*|[^?]*\.([^.?]{5,}|html))(\?.*)?$/], navigateFallbackBlacklist: [/\?(.+&)?no-cache=1$/], cacheId: `gatsby-plugin-offline`, - // Don't cache-bust JS or CSS files, and anything in the static directory - dontCacheBustUrlsMatching: /(.*\.js$|.*\.css$|\/static\/)/, + // Don't cache-bust JS or CSS files, and anything in the static directory, + // since these files have unique URLs and their contents will never change + dontCacheBustUrlsMatching: /(\.js$|\.css$|\/static\/)/, runtimeCaching: [ { - // Add runtime caching of various page resources. - urlPattern: /\.(?:png|jpg|jpeg|webp|svg|gif|tiff|js|woff|woff2|json|css)$/, + // Use cacheFirst since these don't need to be revalidated (same RegExp + // and same reason as above) + urlPattern: /(\.js$|\.css$|\/static\/)/, + handler: `cacheFirst`, + }, + { + // Add runtime caching of various other page resources + urlPattern: /^https?:.*\.(png|jpg|jpeg|webp|svg|gif|tiff|js|woff|woff2|json|css)$/, handler: `staleWhileRevalidate`, }, { - // Use the Network First handler for external resources - urlPattern: /^https?:/, - handler: `networkFirst`, + // Google Fonts CSS (doesn't end in .css so we need to specify it) + urlPattern: /^https?:\/\/fonts\.googleapis\.com\/css/, + handler: `staleWhileRevalidate`, }, ], skipWaiting: true, diff --git a/packages/gatsby-plugin-offline/src/sw-append.js b/packages/gatsby-plugin-offline/src/sw-append.js index a578d3708a9e9..172f1ae6a468c 100644 --- a/packages/gatsby-plugin-offline/src/sw-append.js +++ b/packages/gatsby-plugin-offline/src/sw-append.js @@ -1,29 +1 @@ -/* global workbox */ - -self.addEventListener(`message`, event => { - const { api } = event.data - if (api === `gatsby-runtime-cache`) { - const { resources } = event.data - const cacheName = workbox.core.cacheNames.runtime - - event.waitUntil( - caches.open(cacheName).then(cache => - Promise.all( - resources.map(resource => { - let request - - // Some external resources don't allow - // CORS so get an opaque response - if (resource.match(/^https?:/)) { - request = fetch(resource, { mode: `no-cors` }) - } else { - request = fetch(resource) - } - - return request.then(response => cache.put(resource, response)) - }) - ) - ) - ) - } -}) +// noop From 41ed9421797bc111fd3627bccd604cab29dcd5ff Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Wed, 14 Nov 2018 14:23:26 -0600 Subject: [PATCH 297/462] chore(release): Publish - gatsby-plugin-layout@1.0.9 - gatsby-plugin-offline@2.0.15 - gatsby-source-drupal@3.0.9 - gatsby-source-wordpress@3.0.14 - gatsby@2.0.49 --- packages/gatsby-plugin-layout/CHANGELOG.md | 8 ++++++++ packages/gatsby-plugin-layout/package.json | 2 +- packages/gatsby-plugin-offline/CHANGELOG.md | 8 ++++++++ packages/gatsby-plugin-offline/package.json | 2 +- packages/gatsby-source-drupal/CHANGELOG.md | 8 ++++++++ packages/gatsby-source-drupal/package.json | 2 +- packages/gatsby-source-wordpress/CHANGELOG.md | 8 ++++++++ packages/gatsby-source-wordpress/package.json | 2 +- packages/gatsby/CHANGELOG.md | 8 ++++++++ packages/gatsby/package.json | 2 +- 10 files changed, 45 insertions(+), 5 deletions(-) diff --git a/packages/gatsby-plugin-layout/CHANGELOG.md b/packages/gatsby-plugin-layout/CHANGELOG.md index d1865b0cd4df4..1611616e79d65 100644 --- a/packages/gatsby-plugin-layout/CHANGELOG.md +++ b/packages/gatsby-plugin-layout/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [1.0.9](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-layout@1.0.8...gatsby-plugin-layout@1.0.9) (2018-11-14) + +### Bug Fixes + +- **docs:** update broken links with working links ([#9912](https://github.com/gatsbyjs/gatsby/issues/9912)) ([e9f2a6f](https://github.com/gatsbyjs/gatsby/commit/e9f2a6f)) + ## [1.0.8](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-layout@1.0.7...gatsby-plugin-layout@1.0.8) (2018-11-08) diff --git a/packages/gatsby-plugin-layout/package.json b/packages/gatsby-plugin-layout/package.json index ce3303e305070..2122ed8b765a4 100644 --- a/packages/gatsby-plugin-layout/package.json +++ b/packages/gatsby-plugin-layout/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-plugin-layout", - "version": "1.0.8", + "version": "1.0.9", "description": "Reimplements the behavior of layout components in gatsby@1, which was removed in version 2.", "main": "index.js", "scripts": { diff --git a/packages/gatsby-plugin-offline/CHANGELOG.md b/packages/gatsby-plugin-offline/CHANGELOG.md index e8f8bcd4a5433..d37552eb1851c 100644 --- a/packages/gatsby-plugin-offline/CHANGELOG.md +++ b/packages/gatsby-plugin-offline/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.15](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/compare/gatsby-plugin-offline@2.0.14...gatsby-plugin-offline@2.0.15) (2018-11-14) + +### Bug Fixes + +- **gatsby-plugin-offline:** fix certain resources being cached excessively ([#9923](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/issues/9923)) ([7c826a1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/commit/7c826a1)), closes [#9415](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/issues/9415) + ## [2.0.14](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/compare/gatsby-plugin-offline@2.0.13...gatsby-plugin-offline@2.0.14) (2018-11-13) diff --git a/packages/gatsby-plugin-offline/package.json b/packages/gatsby-plugin-offline/package.json index 651fa79bbba89..6471db1d46af5 100644 --- a/packages/gatsby-plugin-offline/package.json +++ b/packages/gatsby-plugin-offline/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-offline", "description": "Gatsby plugin which sets up a site to be able to run offline", - "version": "2.0.14", + "version": "2.0.15", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-source-drupal/CHANGELOG.md b/packages/gatsby-source-drupal/CHANGELOG.md index 458505d6f85ef..f5bb92aa8b7cc 100644 --- a/packages/gatsby-source-drupal/CHANGELOG.md +++ b/packages/gatsby-source-drupal/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.9](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-drupal/compare/gatsby-source-drupal@3.0.8...gatsby-source-drupal@3.0.9) (2018-11-14) + +### Features + +- **gatsby-source-drupal:** add support for Drupal JSON API 2.x File URI format ([#9835](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-drupal/issues/9835)) ([e86d141](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-drupal/commit/e86d141)) + ## [3.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-drupal/compare/gatsby-source-drupal@3.0.7...gatsby-source-drupal@3.0.8) (2018-11-08) diff --git a/packages/gatsby-source-drupal/package.json b/packages/gatsby-source-drupal/package.json index ef2347b458a3a..c30b7ae9206e6 100644 --- a/packages/gatsby-source-drupal/package.json +++ b/packages/gatsby-source-drupal/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-drupal", "description": "Gatsby source plugin for building websites using the Drupal CMS as a data source", - "version": "3.0.8", + "version": "3.0.9", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-source-wordpress/CHANGELOG.md b/packages/gatsby-source-wordpress/CHANGELOG.md index b65863e5e3402..a26776330abae 100644 --- a/packages/gatsby-source-wordpress/CHANGELOG.md +++ b/packages/gatsby-source-wordpress/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.14](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-wordpress/compare/gatsby-source-wordpress@3.0.13...gatsby-source-wordpress@3.0.14) (2018-11-14) + +### Bug Fixes + +- **docs:** update broken links with working links ([#9912](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-wordpress/issues/9912)) ([e9f2a6f](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-wordpress/commit/e9f2a6f)) + ## [3.0.13](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-wordpress/compare/gatsby-source-wordpress@3.0.12...gatsby-source-wordpress@3.0.13) (2018-11-08) diff --git a/packages/gatsby-source-wordpress/package.json b/packages/gatsby-source-wordpress/package.json index aff4d6cbd0553..bb0e02840f6c6 100644 --- a/packages/gatsby-source-wordpress/package.json +++ b/packages/gatsby-source-wordpress/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-wordpress", "description": "Gatsby source plugin for building websites using the Wordpress CMS as a data source.", - "version": "3.0.13", + "version": "3.0.14", "author": "Sebastien Fichot ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 2a740291e117a..2534b3dc62069 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.49](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.48...gatsby@2.0.49) (2018-11-14) + +### Bug Fixes + +- **docs:** update broken links with working links ([#9912](https://github.com/gatsbyjs/gatsby/issues/9912)) ([e9f2a6f](https://github.com/gatsbyjs/gatsby/commit/e9f2a6f)) + ## [2.0.48](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.47...gatsby@2.0.48) (2018-11-13) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index a759d7c2b3116..fc0dfad487bba 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.48", + "version": "2.0.49", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From fc38707c53e4fa5181874c3626e9f572acf5017b Mon Sep 17 00:00:00 2001 From: Cameron Rison Date: Wed, 14 Nov 2018 16:04:01 -0600 Subject: [PATCH 298/462] Adding an entry for https://citywideholdup.org (#9929) --- docs/sites.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index c90add6534a78..fe067b2c64a8b 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3333,3 +3333,16 @@ categories: - Consulting featured: false +- title: Citywide Holdup + url: https://citywideholdup.org/ + main_url: https://citywideholdup.org/ + source_url: https://github.com/killakam3084/citywide-site + description: >- + Citywide Holdup is an annual fundraising event held around early November in the city of Austin, TX hosted by the Texas Wranglers benefitting Easter Seals of Central Texas, a non-profit organization that provides exceptional services, education, outreach and advocacy so that people with disabilities can live, learn, work and play in our communities. + categories: + - Fundraising + - Nonprofit + - Event + built_by: Cameron Rison + built_by_url: https://github.com/killakam3084 + featured: false From 0f0feac9c7ebb1b18208bbbc584f3cddc5f31a72 Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Wed, 14 Nov 2018 17:38:35 -0600 Subject: [PATCH 299/462] fix(gatsby): correctly pick up browserslist overrides (#9669) * fix: start ironing out browserslist issues * chore: make linter happy * chore: change to expected shape * refactor: move browserslist functionality into gatsby core --- .../src/__tests__/index.js | 7 ++--- packages/babel-preset-gatsby/src/index.js | 22 ++++++------- packages/gatsby/src/bootstrap/index.js | 6 +++- packages/gatsby/src/commands/build.js | 1 - .../load-babel-config/gatsby-node.js | 13 ++++++-- .../src/utils/__tests__/browserslist.js | 31 +++++++++++++++++++ .../gatsby/src/utils/babel-loader-helpers.js | 12 ++++--- packages/gatsby/src/utils/browserslist.js | 31 +++++++++++++++++++ 8 files changed, 97 insertions(+), 26 deletions(-) create mode 100644 packages/gatsby/src/utils/__tests__/browserslist.js create mode 100644 packages/gatsby/src/utils/browserslist.js diff --git a/packages/babel-preset-gatsby/src/__tests__/index.js b/packages/babel-preset-gatsby/src/__tests__/index.js index 407cf86d6e852..850c68d9c9502 100644 --- a/packages/babel-preset-gatsby/src/__tests__/index.js +++ b/packages/babel-preset-gatsby/src/__tests__/index.js @@ -101,8 +101,9 @@ it(`Specifies proper presets and plugins for build-html stage`, () => { }) it(`Allows to configure browser targets`, () => { + const targets = `last 1 version` const { presets } = preset(null, { - targets: { browsers: [`last 1 version`] }, + targets, }) expect(presets[0]).toEqual([ @@ -111,9 +112,7 @@ it(`Allows to configure browser targets`, () => { loose: true, modules: false, useBuiltIns: `usage`, - targets: { - browsers: [`last 1 version`], - }, + targets, }, ]) }) diff --git a/packages/babel-preset-gatsby/src/index.js b/packages/babel-preset-gatsby/src/index.js index 0877ad29401c5..3b69a0974c5ae 100644 --- a/packages/babel-preset-gatsby/src/index.js +++ b/packages/babel-preset-gatsby/src/index.js @@ -1,6 +1,6 @@ const path = require(`path`) -const r = m => require.resolve(m) +const resolve = m => require.resolve(m) const loadCachedConfig = () => { let pluginBabelConfig = {} @@ -13,7 +13,7 @@ const loadCachedConfig = () => { return pluginBabelConfig } -function preset(context, options = {}) { +module.exports = function preset(_, options = {}) { let { targets = null } = options const pluginBabelConfig = loadCachedConfig() @@ -25,16 +25,14 @@ function preset(context, options = {}) { node: `current`, } } else { - targets = { - browsers: pluginBabelConfig.browserslist, - } + targets = pluginBabelConfig.browserslist } } return { presets: [ [ - r(`@babel/preset-env`), + resolve(`@babel/preset-env`), { loose: true, modules: stage === `test` ? `commonjs` : false, @@ -43,7 +41,7 @@ function preset(context, options = {}) { }, ], [ - r(`@babel/preset-react`), + resolve(`@babel/preset-react`), { useBuiltIns: true, pragma: `React.createElement`, @@ -53,15 +51,15 @@ function preset(context, options = {}) { ], plugins: [ [ - r(`@babel/plugin-proposal-class-properties`), + resolve(`@babel/plugin-proposal-class-properties`), { loose: true, }, ], - r(`babel-plugin-macros`), - r(`@babel/plugin-syntax-dynamic-import`), + resolve(`babel-plugin-macros`), + resolve(`@babel/plugin-syntax-dynamic-import`), [ - r(`@babel/plugin-transform-runtime`), + resolve(`@babel/plugin-transform-runtime`), { helpers: true, regenerator: true, @@ -70,5 +68,3 @@ function preset(context, options = {}) { ], } } - -module.exports = preset diff --git a/packages/gatsby/src/bootstrap/index.js b/packages/gatsby/src/bootstrap/index.js index 08b5393150eb2..e60ce6796ec5f 100644 --- a/packages/gatsby/src/bootstrap/index.js +++ b/packages/gatsby/src/bootstrap/index.js @@ -12,6 +12,7 @@ const Promise = require(`bluebird`) const apiRunnerNode = require(`../utils/api-runner-node`) const mergeGatsbyConfig = require(`../utils/merge-gatsby-config`) +const getBrowserslist = require(`../utils/browserslist`) const { graphql } = require(`graphql`) const { store, emitter } = require(`../redux`) const loadPlugins = require(`./load-plugins`) @@ -56,10 +57,13 @@ module.exports = async (args: BootstrapArgs) => { // and invokes Gatsby API based on actions. require(`../redux/plugin-runner`) + const directory = slash(args.directory) + const program = { ...args, + browserslist: getBrowserslist(directory), // Fix program directory path for windows env. - directory: slash(args.directory), + directory, } store.dispatch({ diff --git a/packages/gatsby/src/commands/build.js b/packages/gatsby/src/commands/build.js index 3ed36006c0df9..6c69c009a85d4 100644 --- a/packages/gatsby/src/commands/build.js +++ b/packages/gatsby/src/commands/build.js @@ -17,7 +17,6 @@ function reportFailure(msg, err: Error) { type BuildArgs = { directory: string, sitePackageJson: object, - browserslist: string[], prefixPaths: boolean, noUglify: boolean, openTracingConfigFile: string, diff --git a/packages/gatsby/src/internal-plugins/load-babel-config/gatsby-node.js b/packages/gatsby/src/internal-plugins/load-babel-config/gatsby-node.js index 6a6af7af6d9e9..5f0cf62307ef6 100644 --- a/packages/gatsby/src/internal-plugins/load-babel-config/gatsby-node.js +++ b/packages/gatsby/src/internal-plugins/load-babel-config/gatsby-node.js @@ -21,8 +21,15 @@ exports.onPreBootstrap = async ({ store }) => { await apiRunnerNode(`onCreateBabelConfig`, { stage: `build-html`, }) - const babelrcState = store.getState().babelrc - babelrcState.browserslist = browserslist - const babelState = JSON.stringify(babelrcState.stages, null, 4) + + const babelState = JSON.stringify( + { + ...store.getState().babelrc, + browserslist, + }, + null, + 2 + ) + await fs.writeFile(directoryPath(`.cache/babelState.json`), babelState) } diff --git a/packages/gatsby/src/utils/__tests__/browserslist.js b/packages/gatsby/src/utils/__tests__/browserslist.js new file mode 100644 index 0000000000000..f0f794516bee5 --- /dev/null +++ b/packages/gatsby/src/utils/__tests__/browserslist.js @@ -0,0 +1,31 @@ +jest.mock(`browserslist/node`, () => { + return { + findConfig: jest.fn(), + } +}) +const path = require(`path`) +const getBrowsersList = require(`../browserslist`) +const { findConfig: mockedFindConfig } = require(`browserslist/node`) + +const BASE = path.resolve(`.`) + +describe(`browserslist`, () => { + it(`prefers returned browserslist results`, () => { + const defaults = [`IE 11`] + mockedFindConfig.mockReturnValueOnce({ + defaults, + }) + + const list = getBrowsersList(BASE) + + expect(list).toEqual(defaults) + }) + + it(`falls back to defaults`, () => { + mockedFindConfig.mockReturnValueOnce(undefined) + + const list = getBrowsersList(BASE) + + expect(list).toEqual([`>0.25%`, `not dead`]) + }) +}) diff --git a/packages/gatsby/src/utils/babel-loader-helpers.js b/packages/gatsby/src/utils/babel-loader-helpers.js index 4ce5b6b3c98c3..8d7b9ea837494 100644 --- a/packages/gatsby/src/utils/babel-loader-helpers.js +++ b/packages/gatsby/src/utils/babel-loader-helpers.js @@ -2,7 +2,11 @@ const path = require(`path`) const _ = require(`lodash`) const loadCachedConfig = () => { - let pluginBabelConfig = { test: { plugins: [], presets: [] } } + let pluginBabelConfig = { + stages: { + test: { plugins: [], presets: [] }, + }, + } if (process.env.NODE_ENV !== `test`) { pluginBabelConfig = require(path.join( process.cwd(), @@ -15,7 +19,7 @@ const loadCachedConfig = () => { const getCustomOptions = () => { const pluginBabelConfig = loadCachedConfig() const stage = process.env.GATSBY_BUILD_STAGE || `test` - return pluginBabelConfig[stage].options + return pluginBabelConfig.stages[stage].options } const prepareOptions = (babel, resolve = require.resolve) => { @@ -59,14 +63,14 @@ const prepareOptions = (babel, resolve = require.resolve) => { // Go through babel state and create config items for presets/plugins from. const reduxPlugins = [] const reduxPresets = [] - pluginBabelConfig[stage].plugins.forEach(plugin => { + pluginBabelConfig.stages[stage].plugins.forEach(plugin => { reduxPlugins.push( babel.createConfigItem([resolve(plugin.name), plugin.options], { type: `plugin`, }) ) }) - pluginBabelConfig[stage].presets.forEach(preset => { + pluginBabelConfig.stages[stage].presets.forEach(preset => { reduxPresets.push( babel.createConfigItem([resolve(preset.name), preset.options], { type: `preset`, diff --git a/packages/gatsby/src/utils/browserslist.js b/packages/gatsby/src/utils/browserslist.js new file mode 100644 index 0000000000000..590acc73d39aa --- /dev/null +++ b/packages/gatsby/src/utils/browserslist.js @@ -0,0 +1,31 @@ +const path = require(`path`) +const browserslist = require(`browserslist/node`) + +function installedGatsbyVersion(directory) { + try { + const { version } = require(path.join( + directory, + `node_modules`, + `gatsby`, + `package.json` + )) + return parseInt(version.split(`.`)[0], 10) + } catch (e) { + return undefined + } +} + +module.exports = function getBrowsersList(directory) { + const fallback = + installedGatsbyVersion(directory) === 1 + ? [`>1%`, `last 2 versions`, `IE >= 9`] + : [`>0.25%`, `not dead`] + + const config = browserslist.findConfig(directory) + + if (config && config.defaults) { + return config.defaults + } + + return fallback +} From 6e388bfb3ecae86e1b2ed195dbb0b87b0d92105b Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Wed, 14 Nov 2018 23:02:56 -0800 Subject: [PATCH 300/462] chore(release): Publish - babel-preset-gatsby@0.1.4 - gatsby@2.0.50 --- packages/babel-preset-gatsby/CHANGELOG.md | 8 ++++++++ packages/babel-preset-gatsby/package.json | 2 +- packages/gatsby/CHANGELOG.md | 8 ++++++++ packages/gatsby/package.json | 4 ++-- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/babel-preset-gatsby/CHANGELOG.md b/packages/babel-preset-gatsby/CHANGELOG.md index 0c1795bd022c7..44e88fdf2b9df 100644 --- a/packages/babel-preset-gatsby/CHANGELOG.md +++ b/packages/babel-preset-gatsby/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [0.1.4](https://github.com/gatsbyjs/gatsby/compare/babel-preset-gatsby@0.1.3...babel-preset-gatsby@0.1.4) (2018-11-15) + +### Bug Fixes + +- **gatsby:** correctly pick up browserslist overrides ([#9669](https://github.com/gatsbyjs/gatsby/issues/9669)) ([0f0feac](https://github.com/gatsbyjs/gatsby/commit/0f0feac)) + ## [0.1.3](https://github.com/gatsbyjs/gatsby/compare/babel-preset-gatsby@0.1.2...babel-preset-gatsby@0.1.3) (2018-11-05) diff --git a/packages/babel-preset-gatsby/package.json b/packages/babel-preset-gatsby/package.json index 3d4eee298e4a9..b34558f8fc231 100644 --- a/packages/babel-preset-gatsby/package.json +++ b/packages/babel-preset-gatsby/package.json @@ -1,6 +1,6 @@ { "name": "babel-preset-gatsby", - "version": "0.1.3", + "version": "0.1.4", "author": "Philipp Spiess ", "dependencies": { "@babel/plugin-proposal-class-properties": "^7.0.0", diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 2534b3dc62069..1a04301168b77 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.50](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.49...gatsby@2.0.50) (2018-11-15) + +### Bug Fixes + +- **gatsby:** correctly pick up browserslist overrides ([#9669](https://github.com/gatsbyjs/gatsby/issues/9669)) ([0f0feac](https://github.com/gatsbyjs/gatsby/commit/0f0feac)) + ## [2.0.49](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.48...gatsby@2.0.49) (2018-11-14) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index fc0dfad487bba..7bf530c33794e 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.49", + "version": "2.0.50", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" @@ -24,7 +24,7 @@ "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dynamic-import-node": "^1.2.0", "babel-plugin-remove-graphql-queries": "^2.5.1", - "babel-preset-gatsby": "^0.1.3", + "babel-preset-gatsby": "^0.1.4", "better-queue": "^3.8.6", "bluebird": "^3.5.0", "cache-manager": "^2.9.0", From a75c641d3414f5ca5ca1b93e7fffcc6a2ae61914 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Mahieu?= Date: Thu, 15 Nov 2018 14:21:01 +0100 Subject: [PATCH 301/462] fix(gatsby-plugin-styled-components): fix global styles pollution (#9943) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix #9922 `ServerStyleSheet` should be specific to each pages in order to not pollutes the other. Theses changes removes the "global" stylesheet and use the `pathname` for identify each pages. --- Just a quick note for my first PR here: thanks to every contributors for this fantastic project! 👍 --- .../src/gatsby-ssr.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/gatsby-plugin-styled-components/src/gatsby-ssr.js b/packages/gatsby-plugin-styled-components/src/gatsby-ssr.js index 837e62479801b..7a8d2bb306e33 100644 --- a/packages/gatsby-plugin-styled-components/src/gatsby-ssr.js +++ b/packages/gatsby-plugin-styled-components/src/gatsby-ssr.js @@ -1,13 +1,19 @@ import React from "react" import { ServerStyleSheet, StyleSheetManager } from "styled-components" -const sheet = new ServerStyleSheet() +const sheetByPathname = new Map() // eslint-disable-next-line react/prop-types,react/display-name -exports.wrapRootElement = ({ element }) => ( - {element} -) +exports.wrapRootElement = ({ element, pathname }) => { + const sheet = new ServerStyleSheet() + sheetByPathname.set(pathname, sheet) + return {element} +} -exports.onRenderBody = ({ setHeadComponents }) => { - setHeadComponents([sheet.getStyleElement()]) +exports.onRenderBody = ({ setHeadComponents, pathname }) => { + const sheet = sheetByPathname.get(pathname) + if (sheet) { + setHeadComponents([sheet.getStyleElement()]) + sheetByPathname.delete(pathname) + } } From 19fc4ca724b9bd3cb7b02e2f36c0028512b32ca4 Mon Sep 17 00:00:00 2001 From: Aadi Bajpai Date: Thu, 15 Nov 2018 18:52:03 +0530 Subject: [PATCH 302/462] readme: add total npm downloads badge (#9926) The total figure is much higher (6 million) than the monthly rate and quite a lot more impactful. So, it should make for a better listing on the readme :) --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 9d832acf6f370..dc44f0ceeeb77 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,9 @@ Downloads per month on npm. + + Total downloads on npm. + PRs welcome! From a441468670c8f510ddce8b9f19b179a1ae6b35ed Mon Sep 17 00:00:00 2001 From: Michael Fix Date: Thu, 15 Nov 2018 05:24:00 -0800 Subject: [PATCH 303/462] feat(showcase): add Dawn Labs site (#9931) Add Dawn Labs' site to the showcase --- docs/sites.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index fe067b2c64a8b..f77a8702325a6 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3346,3 +3346,13 @@ built_by: Cameron Rison built_by_url: https://github.com/killakam3084 featured: false +- title: Dawn Labs + url: https://dawnlabs.io + main_url: https://dawnlabs.io + description: >- + Thoughtful products for inspired teams. With a holistic approach to engineering and design, we partner with startups and enterprises to build for the digital era. + categories: + - Technology + - Agency + - Web Development + featured: false From 1e8f665523534aac11110fac15b67746ef9cc18d Mon Sep 17 00:00:00 2001 From: Marco Valsecchi Date: Thu, 15 Nov 2018 14:52:59 +0100 Subject: [PATCH 304/462] fix(gatsby-plugin-google-gtag): disable default pageview tracking (#9842) The default behavior of the `config` snippet is to send a pageview automatically; this is in contrast with the `exclude` option and the plugin tracks, on page load, even the excluded pages. This PR solve also the double pageview hits on page load too: the first is made by the default behavior and the second one by the `onRouteUpdate` event. --- .../gatsby-plugin-google-gtag/src/gatsby-ssr.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/gatsby-plugin-google-gtag/src/gatsby-ssr.js b/packages/gatsby-plugin-google-gtag/src/gatsby-ssr.js index 98ba382375d1c..748ca8ed0dc05 100644 --- a/packages/gatsby-plugin-google-gtag/src/gatsby-ssr.js +++ b/packages/gatsby-plugin-google-gtag/src/gatsby-ssr.js @@ -7,6 +7,13 @@ exports.onRenderBody = ( ) => { if (process.env.NODE_ENV !== `production`) return null + const gtagConfig = pluginOptions.gtagConfig || {} + + // Prevent duplicate or excluded pageview events being emitted on initial load of page by the `config` command + // https://developers.google.com/analytics/devguides/collection/gtagjs/#disable_pageview_tracking + + gtagConfig.send_page_view = false + const firstTrackingId = pluginOptions.trackingIds && pluginOptions.trackingIds.length ? pluginOptions.trackingIds[0] @@ -31,8 +38,8 @@ exports.onRenderBody = ( : `` } ${ - typeof pluginOptions.gtagConfig.anonymize_ip !== `undefined` && - pluginOptions.gtagConfig.anonymize_ip === true + typeof gtagConfig.anonymize_ip !== `undefined` && + gtagConfig.anonymize_ip === true ? `function gaOptout(){document.cookie=disableStr+'=true; expires=Thu, 31 Dec 2099 23:59:59 UTC;path=/',window[disableStr]=!0}var gaProperty='${firstTrackingId}',disableStr='ga-disable-'+gaProperty;document.cookie.indexOf(disableStr+'=true')>-1&&(window[disableStr]=!0);` : `` } @@ -49,9 +56,7 @@ exports.onRenderBody = ( ${pluginOptions.trackingIds .map( trackingId => - `gtag('config', '${trackingId}', ${JSON.stringify( - pluginOptions.gtagConfig || {} - )});` + `gtag('config', '${trackingId}', ${JSON.stringify(gtagConfig)});` ) .join(``)} } From 4fd97706ff1e5114c16a78e56c7ebd4dbdf8649e Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Thu, 15 Nov 2018 15:06:24 +0100 Subject: [PATCH 305/462] chore(release): Publish - gatsby-plugin-google-gtag@1.0.6 - gatsby-plugin-styled-components@3.0.2 --- packages/gatsby-plugin-google-gtag/CHANGELOG.md | 12 ++++++++++++ packages/gatsby-plugin-google-gtag/package.json | 2 +- .../gatsby-plugin-styled-components/CHANGELOG.md | 8 ++++++++ .../gatsby-plugin-styled-components/package.json | 2 +- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/gatsby-plugin-google-gtag/CHANGELOG.md b/packages/gatsby-plugin-google-gtag/CHANGELOG.md index 3330c234c17df..b9dd079488841 100644 --- a/packages/gatsby-plugin-google-gtag/CHANGELOG.md +++ b/packages/gatsby-plugin-google-gtag/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [1.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag/compare/gatsby-plugin-google-gtag@1.0.5...gatsby-plugin-google-gtag@1.0.6) (2018-11-15) + +### Bug Fixes + +- **gatsby-plugin-google-gtag:** disable default pageview tracking ([#9842](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag/issues/9842)) ([1e8f665](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag/commit/1e8f665)) + +### Features + +- **starters:** Filter v2 by default ([#9739](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag/issues/9739)) ([4064e35](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag/commit/4064e35)), closes [#7900](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag/issues/7900) + ## [1.0.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag/compare/gatsby-plugin-google-gtag@1.0.4...gatsby-plugin-google-gtag@1.0.5) (2018-11-08) diff --git a/packages/gatsby-plugin-google-gtag/package.json b/packages/gatsby-plugin-google-gtag/package.json index d01e3d24f7a6e..bee94d162bd49 100644 --- a/packages/gatsby-plugin-google-gtag/package.json +++ b/packages/gatsby-plugin-google-gtag/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-google-gtag", "description": "Gatsby plugin to add google gtag onto a site", - "version": "1.0.5", + "version": "1.0.6", "author": "Tyler Buchea ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-styled-components/CHANGELOG.md b/packages/gatsby-plugin-styled-components/CHANGELOG.md index cfee00f9361a6..4f6c99bcd018b 100644 --- a/packages/gatsby-plugin-styled-components/CHANGELOG.md +++ b/packages/gatsby-plugin-styled-components/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-components/compare/gatsby-plugin-styled-components@3.0.1...gatsby-plugin-styled-components@3.0.2) (2018-11-15) + +### Bug Fixes + +- **gatsby-plugin-styled-components:** fix global styles pollution ([#9943](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-components/issues/9943)) ([a75c641](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-components/commit/a75c641)), closes [#9922](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-components/issues/9922) + ## [3.0.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-components/compare/gatsby-plugin-styled-components@3.0.0...gatsby-plugin-styled-components@3.0.1) (2018-10-29) diff --git a/packages/gatsby-plugin-styled-components/package.json b/packages/gatsby-plugin-styled-components/package.json index 74e2e732cff2c..b3ef8e3bfa72d 100644 --- a/packages/gatsby-plugin-styled-components/package.json +++ b/packages/gatsby-plugin-styled-components/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-styled-components", "description": "Gatsby plugin to add support for styled components", - "version": "3.0.1", + "version": "3.0.2", "author": "Guten Ye ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" From 9280fd70a787bd462d899c654f57eaa7a589c67c Mon Sep 17 00:00:00 2001 From: Matthieu Auger Date: Thu, 15 Nov 2018 15:43:37 +0100 Subject: [PATCH 306/462] fix(gatsby-plugin-netlify): do not cache service worker file on Netlify (#9680) Related to https://www.netlify.com/blog/2018/06/28/5-pro-tips-and-plugins-for-optimizing-your-gatsby---netlify-site/#4-get-your-service-workers-um-working Recommandation is not to cache service worker file : https://github.com/w3c/ServiceWorker/issues/893 --- packages/gatsby-plugin-netlify/src/constants.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/gatsby-plugin-netlify/src/constants.js b/packages/gatsby-plugin-netlify/src/constants.js index 88ad51b7fbc9c..cfcc302f9fd01 100644 --- a/packages/gatsby-plugin-netlify/src/constants.js +++ b/packages/gatsby-plugin-netlify/src/constants.js @@ -26,6 +26,7 @@ export const SECURITY_HEADERS = { export const CACHING_HEADERS = { "/static/*": [`Cache-Control: public, max-age=31536000, immutable`], + "/sw.js": [`Cache-Control: no-cache`], } export const LINK_REGEX = /^(Link: <\/)(.+)(>;.+)/ From 8c90c50109e320fe4c2cc0f2999a69c5edf58b02 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Thu, 15 Nov 2018 15:46:38 +0100 Subject: [PATCH 307/462] chore(release): Publish - gatsby-plugin-netlify@2.0.5 --- packages/gatsby-plugin-netlify/CHANGELOG.md | 8 ++++++++ packages/gatsby-plugin-netlify/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/gatsby-plugin-netlify/CHANGELOG.md b/packages/gatsby-plugin-netlify/CHANGELOG.md index 783e9bf9ad45c..48bc63f339bc3 100644 --- a/packages/gatsby-plugin-netlify/CHANGELOG.md +++ b/packages/gatsby-plugin-netlify/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify/compare/gatsby-plugin-netlify@2.0.4...gatsby-plugin-netlify@2.0.5) (2018-11-15) + +### Bug Fixes + +- **gatsby-plugin-netlify:** do not cache service worker file on Netlify ([#9680](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify/issues/9680)) ([9280fd7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify/commit/9280fd7)), closes [/www.netlify.com/blog/2018/06/28/5-pro-tips-and-plugins-for-optimizing-your-gatsby---netlify-site/#4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify/issues/4) + ## [2.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify/compare/gatsby-plugin-netlify@2.0.3...gatsby-plugin-netlify@2.0.4) (2018-11-08) diff --git a/packages/gatsby-plugin-netlify/package.json b/packages/gatsby-plugin-netlify/package.json index b471661d96411..3106caf968e10 100644 --- a/packages/gatsby-plugin-netlify/package.json +++ b/packages/gatsby-plugin-netlify/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-netlify", "description": "A Gatsby plugin which generates a _headers file for netlify", - "version": "2.0.4", + "version": "2.0.5", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" From 9bc33fbaceb294c6aaf0520d5249766b6a86c181 Mon Sep 17 00:00:00 2001 From: Duncan Heron Date: Thu, 15 Nov 2018 16:04:30 +0000 Subject: [PATCH 308/462] Fixes example syntax for unit testing (#9949) removes unnecessary closing bracket in code example --- docs/docs/unit-testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/unit-testing.md b/docs/docs/unit-testing.md index 45dd419a2b97a..2585cf14f51f6 100644 --- a/docs/docs/unit-testing.md +++ b/docs/docs/unit-testing.md @@ -164,7 +164,7 @@ describe("BlogIndex", () => { const tree = renderer.create().toJSON() expect(tree).toMatchSnapshot() - })) + }) }) ``` From 3a54b7f06bbb28376f161a6d1647bb62a1908438 Mon Sep 17 00:00:00 2001 From: Eghan Date: Thu, 15 Nov 2018 09:11:51 -0800 Subject: [PATCH 309/462] slight semantic change for clarity (#9934) Removed "However, the " from the Project Env Vars description, it seems to reference the prior paragraph and is even less clear on the formatted .org doc page. While seemingly minor, as a newcomer I read it as an extension of the Windows related paragraph, and it caused some confusion. --- docs/docs/environment-variables.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/environment-variables.md b/docs/docs/environment-variables.md index 26f3a25cfa745..617d2fd01a202 100644 --- a/docs/docs/environment-variables.md +++ b/docs/docs/environment-variables.md @@ -60,9 +60,9 @@ In Linux terminals this can be done with: MY_ENV_VAR=foo gatsby develop ``` -In Windows it's a little more complex. [Check out this Stack Overflow article for some options](https://stackoverflow.com/questions/1420719/powershell-setting-an-environment-variable-for-a-single-command-only documents some options.) +In Windows it's a little more complex. [Check out this Stack Overflow article for some options](https://stackoverflow.com/questions/1420719/powershell-setting-an-environment-variable-for-a-single-command-only) -However, the Project Env Vars that you defined in the `.env.*` files will _NOT_ be immediately available +Project environment variables that you defined in the `.env.*` files will _NOT_ be immediately available in your Node.js scripts. To use those variables, use NPM package [dotenv](https://www.npmjs.com/package/dotenv) to examine the active `.env.*` file and attached those values, It's already a dependency of Gatsby, so you can require it in your `gatsby-config.js` or `gatsby-node.js` like this: From bc577ef63ee53f7df4342725d6cf8b6aedb1ad8d Mon Sep 17 00:00:00 2001 From: Xiaoru Li Date: Thu, 15 Nov 2018 20:53:11 +0100 Subject: [PATCH 310/462] chore(gatsby-remark-katex): move katex to peer dep and update version (#9946) [Katex 0.10.0](https://github.com/KaTeX/KaTeX/releases/tag/v0.10.0) introduced tons of new features and fixes. I also updated the testing snapshots. :) --- packages/gatsby-remark-katex/README.md | 2 +- packages/gatsby-remark-katex/package.json | 3 ++- .../src/__tests__/__snapshots__/index.js.snap | 6 +++--- yarn.lock | 12 ------------ 4 files changed, 6 insertions(+), 17 deletions(-) diff --git a/packages/gatsby-remark-katex/README.md b/packages/gatsby-remark-katex/README.md index bb7724b42fe74..c63c17956c986 100644 --- a/packages/gatsby-remark-katex/README.md +++ b/packages/gatsby-remark-katex/README.md @@ -5,7 +5,7 @@ ## Install -`npm install --save gatsby-transformer-remark gatsby-remark-katex` +`npm install --save gatsby-transformer-remark gatsby-remark-katex katex` ## How to use diff --git a/packages/gatsby-remark-katex/package.json b/packages/gatsby-remark-katex/package.json index 262c9d9dbc2dd..36f54f3600f42 100644 --- a/packages/gatsby-remark-katex/package.json +++ b/packages/gatsby-remark-katex/package.json @@ -8,7 +8,6 @@ }, "dependencies": { "@babel/runtime": "^7.0.0", - "katex": "^0.9.0", "remark-math": "^1.0.3", "unist-util-visit": "^1.3.0" }, @@ -16,6 +15,7 @@ "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", "babel-preset-gatsby-package": "^0.1.2", + "katex": ">=0.10.0 <1.0.0", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-katex#readme", @@ -28,6 +28,7 @@ "license": "MIT", "main": "index.js", "peerDependencies": { + "katex": ">=0.10.0 <1.0.0", "gatsby": ">2.0.0-alpha" }, "repository": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-katex", diff --git a/packages/gatsby-remark-katex/src/__tests__/__snapshots__/index.js.snap b/packages/gatsby-remark-katex/src/__tests__/__snapshots__/index.js.snap index 3b0092f66bbfb..3fa00a4fbd4cf 100644 --- a/packages/gatsby-remark-katex/src/__tests__/__snapshots__/index.js.snap +++ b/packages/gatsby-remark-katex/src/__tests__/__snapshots__/index.js.snap @@ -32,7 +32,7 @@ Object { }, }, "type": "html", - "value": "a2+b2=c2a^2 + b^2 = c^2a2+b2=c2", + "value": "a2+b2=c2a^2 + b^2 = c^2a2+b2=c2", }, ], "position": Position { @@ -99,7 +99,7 @@ Object { }, }, "type": "html", - "value": "a2+b2=c2a^2 + b^2 = c^2a2+b2=c2", + "value": "a2+b2=c2a^2 + b^2 = c^2a2+b2=c2", }, ], "position": Position { @@ -167,7 +167,7 @@ Object { }, }, "type": "html", - "value": "a2+b2=c2a^2 + b^2 = c^2a2+b2=c2", + "value": "a2+b2=c2a^2 + b^2 = c^2a2+b2=c2", }, ], "position": Object { diff --git a/yarn.lock b/yarn.lock index 3404d92419ea6..9b250571cc37b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11584,13 +11584,6 @@ jws@^3.1.4, jws@^3.1.5: jwa "^1.1.5" safe-buffer "^5.0.1" -katex@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/katex/-/katex-0.9.0.tgz#26a7d082c21d53725422d2d71da9b2d8455fbd4a" - integrity sha512-lp3x90LT1tDZBW2tjLheJ98wmRMRjUHwk4QpaswT9bhqoQZ+XA4cPcjcQBxgOQNwaOSt6ZeL/a6GKQ1of3LFxQ== - dependencies: - match-at "^0.1.1" - kebab-case@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/kebab-case/-/kebab-case-1.0.0.tgz#3f9e4990adcad0c686c0e701f7645868f75f91eb" @@ -12541,11 +12534,6 @@ markdown-table@^1.1.0: resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.2.tgz#c78db948fa879903a41bce522e3b96f801c63786" integrity sha512-NcWuJFHDA8V3wkDgR/j4+gZx+YQwstPgfQDV8ndUeWWzta3dnDTBxpVzqS9lkmJAuV5YX35lmyojl6HO5JXAgw== -match-at@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/match-at/-/match-at-0.1.1.tgz#25d040d291777704d5e6556bbb79230ec2de0540" - integrity sha512-h4Yd392z9mST+dzc+yjuybOGFNOZjmXIPKWjxBd1Bb23r4SmDOsk2NYCU2BMUBGbSpZqwVsZYNq26QS3xfaT3Q== - matcher@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/matcher/-/matcher-1.1.1.tgz#51d8301e138f840982b338b116bb0c09af62c1c2" From b134861ae672db649013f6bbaac110a48764d64f Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Thu, 15 Nov 2018 13:54:19 -0600 Subject: [PATCH 311/462] chore(release): Publish - gatsby-remark-katex@3.0.0 --- packages/gatsby-remark-katex/CHANGELOG.md | 6 ++++++ packages/gatsby-remark-katex/package.json | 10 +++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/gatsby-remark-katex/CHANGELOG.md b/packages/gatsby-remark-katex/CHANGELOG.md index 87b37f46bd45a..752ef05d750c5 100644 --- a/packages/gatsby-remark-katex/CHANGELOG.md +++ b/packages/gatsby-remark-katex/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +# [3.0.0](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-katex/compare/gatsby-remark-katex@2.0.6...gatsby-remark-katex@3.0.0) (2018-11-15) + +**Note:** Version bump only for package gatsby-remark-katex + ## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-katex/compare/gatsby-remark-katex@2.0.5...gatsby-remark-katex@2.0.6) (2018-10-29) diff --git a/packages/gatsby-remark-katex/package.json b/packages/gatsby-remark-katex/package.json index 36f54f3600f42..33634e6f5dc22 100644 --- a/packages/gatsby-remark-katex/package.json +++ b/packages/gatsby-remark-katex/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-katex", "description": "Transform math nodes to html markup", - "version": "2.0.6", + "version": "3.0.0", "author": "Jeffrey Xiao ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -15,8 +15,8 @@ "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", "babel-preset-gatsby-package": "^0.1.2", - "katex": ">=0.10.0 <1.0.0", - "cross-env": "^5.1.4" + "cross-env": "^5.1.4", + "katex": ">=0.10.0 <1.0.0" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-katex#readme", "keywords": [ @@ -28,8 +28,8 @@ "license": "MIT", "main": "index.js", "peerDependencies": { - "katex": ">=0.10.0 <1.0.0", - "gatsby": ">2.0.0-alpha" + "gatsby": ">2.0.0-alpha", + "katex": ">=0.10.0 <1.0.0" }, "repository": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-katex", "scripts": { From bc04df26d852e8c7a7fe2f5644209ebeaae3ddff Mon Sep 17 00:00:00 2001 From: Michael Shilman Date: Fri, 16 Nov 2018 04:56:42 +0800 Subject: [PATCH 312/462] Update getstorybook instructions for SB4 release (#9854) --- docs/docs/visual-testing-with-storybook.md | 8 +++++--- yarn.lock | 7 +++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/docs/visual-testing-with-storybook.md b/docs/docs/visual-testing-with-storybook.md index a9e9b31b0503a..d3e7e51a31b85 100644 --- a/docs/docs/visual-testing-with-storybook.md +++ b/docs/docs/visual-testing-with-storybook.md @@ -17,14 +17,16 @@ To set up Storybook you need to install dependencies and do some custom configur npm install -g @storybook/cli ``` -Once the CLI is installed, the next step is to run the `getstorybook` command that is now available from the root directory of your Gatsby project. +Once the CLI is installed, the next step is to run the `sb init` command that is now available from the root directory of your Gatsby project. ```sh cd my-awesome-gatsby-project -getstorybook +sb init ``` -The `getstorybook` command will then bootstrap the basic config necessary to run Storybook for a React project. However, since this is for a Gatsby project, you need to update the default Storybook configuration a bit so that you don't get errors when trying to use Gatsby specific components inside of the stories. +> Note that if you're running a recent version of `npm` (5.2.0+) you can run the following single command instead: `npx -p @storybook/cli sb init`, which is the recommended method by Storybook. This doesn't install the CLI on your machine, thereby ensuring you're always running the latest version of the CLI. + +The `sb init` command boostraps the basic config necessary to run Storybook for a React project. However, since this is for a Gatsby project, you need to update the default Storybook configuration a bit so that you don't get errors when trying to use Gatsby specific components inside of the stories. To update your Storybook config open `.storybook/config.js` and add the following before the `configure` method at the bottom of the file. diff --git a/yarn.lock b/yarn.lock index 9b250571cc37b..ea7da8fc28962 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11584,6 +11584,13 @@ jws@^3.1.4, jws@^3.1.5: jwa "^1.1.5" safe-buffer "^5.0.1" +"katex@>=0.10.0 <1.0.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.10.0.tgz#da562e5d0d5cc3aa602e27af8a9b8710bfbce765" + integrity sha512-/WRvx+L1eVBrLwX7QzKU1dQuaGnE7E8hDvx3VWfZh9HbMiCfsKWJNnYZ0S8ZMDAfAyDSofdyXIrH/hujF1fYXg== + dependencies: + commander "^2.16.0" + kebab-case@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/kebab-case/-/kebab-case-1.0.0.tgz#3f9e4990adcad0c686c0e701f7645868f75f91eb" From dc52ea3e35e9886ff4d5b423a2f468e0d79fe57d Mon Sep 17 00:00:00 2001 From: Tien Pham Date: Fri, 16 Nov 2018 09:15:19 +0200 Subject: [PATCH 313/462] docs(examples.usingremark): Typo fix (#9965) --- examples/using-remark/src/pages/2017-11-14---excerpts/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/using-remark/src/pages/2017-11-14---excerpts/index.md b/examples/using-remark/src/pages/2017-11-14---excerpts/index.md index 8b45a1eb9c5cb..f93f0a2462bb4 100644 --- a/examples/using-remark/src/pages/2017-11-14---excerpts/index.md +++ b/examples/using-remark/src/pages/2017-11-14---excerpts/index.md @@ -22,7 +22,7 @@ tags: } ``` -You can also manually mark in your markdown where to stop excerpting—similar to Jekyl. `gatsby-transformer-remark` uses [gray-matter](https://github.com/jonschlinkert/gray-matter) to parse markdown frontmatter, so you can specify an `excerpt_separator`, as well as any of the other options mentioned [here](https://github.com/jonschlinkert/gray-matter#options), in the `gatsby-config.js` file. +You can also manually mark in your markdown where to stop excerpting—similar to Jekyll. `gatsby-transformer-remark` uses [gray-matter](https://github.com/jonschlinkert/gray-matter) to parse markdown frontmatter, so you can specify an `excerpt_separator`, as well as any of the other options mentioned [here](https://github.com/jonschlinkert/gray-matter#options), in the `gatsby-config.js` file. ```json { From c7018455f9006fb26102aae1f854e0cf5877f29a Mon Sep 17 00:00:00 2001 From: Tien Pham Date: Fri, 16 Nov 2018 09:16:08 +0200 Subject: [PATCH 314/462] docs(schema-input-gql): Typo fix (#9966) --- docs/docs/schema-input-gql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/schema-input-gql.md b/docs/docs/schema-input-gql.md index 7b6780f4d5cab..985572dbdabbf 100644 --- a/docs/docs/schema-input-gql.md +++ b/docs/docs/schema-input-gql.md @@ -54,7 +54,7 @@ If the key is a foreign key reference (ends in `___NODE`), then we find the fiel ### Inferring input filters from plugin fields -Plugins themselves have the opportunity to create custom fields that apply to ALL nodes of a particular type, as opposed to having to expicitly add the field on every node creation. An example would be `markdownRemark` which adds a `wordcount` field to each node automatically. This section deals with the generation of input filters so that we can query by these fields as well. E.g: +Plugins themselves have the opportunity to create custom fields that apply to ALL nodes of a particular type, as opposed to having to explicitly add the field on every node creation. An example would be `markdownRemark` which adds a `wordcount` field to each node automatically. This section deals with the generation of input filters so that we can query by these fields as well. E.g: ```graphql { From 7e17cfda911f959bb60ecc06d652ad065e36e39a Mon Sep 17 00:00:00 2001 From: Jonas Gierer Date: Fri, 16 Nov 2018 08:20:59 +0100 Subject: [PATCH 315/462] docs: Add "Babel Plugin Macros" guide (#9963) * Add "Babel Plugin Macros" guide * Run Prettier * Update babel-plugin-macros.md --- docs/docs/babel-plugin-macros.md | 60 ++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 3 deletions(-) diff --git a/docs/docs/babel-plugin-macros.md b/docs/docs/babel-plugin-macros.md index 4c1474f0d6d6e..5c9a28a1546c9 100644 --- a/docs/docs/babel-plugin-macros.md +++ b/docs/docs/babel-plugin-macros.md @@ -2,7 +2,61 @@ title: Babel Plugin Macros --- -This is a stub. Help our community expand it. +Gatsby includes a powerful new way of applying compile-time code +transformations, +[Babel macros](https://github.com/kentcdodds/babel-plugin-macros)! Macros are +like Babel plugins, but instead of adding them to your `.babelrc`, you import them in +the file you want to use them. This has two big advantages: -Please use the [Gatsby Style Guide](/docs/gatsby-style-guide/) to ensure your -pull request gets accepted. +- No confusion about where a non-standard syntax is coming from. Macros are + explicitly imported wherever they are used. +- No configuration files. Macros are included directly in your code as needed. + +Like Babel plugins, macros run only at compile time. They are not included in +the public JavaScript bundle. As such, macros have no effect on your code code +beyond the transformations they apply. + +## Installing macros + +Just like plugins, many macros are published as npm packages. By convention, +they are named by their function, followed by `.macro`. + +For example, [`preval.macro`](https://www.npmjs.com/package/preval.macro) is a +macro that pre-evaluates JavaScript code. You can install it by running: + +```bash +npm install --save-dev preval.macro +``` + +Some macros are instead included in larger packages. To install and use them, +refer to their documentation. + +## Using macros + +To use an installed macro, import it in your code like so: + +```javascript +import preval from "preval.macro" +``` + +You can then use the imported variable however the macro's documentation says. +`preval.macro` is used as a template literal tag: + +```javascript{2} +import preval from "preval.macro" +const x = preval`module.exports = 1` +``` + +When building your project with `gatsby develop` or `gatsby build`, this code +will be transformed into: + +```javascript +const x = 1 +``` + +## Discovering available macros + +Take a look at the +[Awesome babel macros](https://github.com/jgierer12/awesome-babel-macros) +list to find available macros you can use. Additionally, this list contains +helpful resources for using macros and developing them yourself. From bb348d3bda93e2323c239b188b76eedbe53042b8 Mon Sep 17 00:00:00 2001 From: Muhammad Muhajir Date: Fri, 16 Nov 2018 14:21:39 +0700 Subject: [PATCH 316/462] Add gatsby-starter-redux-firebase (#9962) * Add gatsby-starter-redux-firebase * Update starters.yml --- docs/starters.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/starters.yml b/docs/starters.yml index b93132430c339..87be1abd5d1cf 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -37,6 +37,17 @@ - Eslint Airbnb without semicolon and without .jsx extension - Offline support - Web App Manifest +- url: https://gatsby-starter-redux-firebase.netlify.com/ + repo: https://github.com/muhajirframe/gatsby-starter-redux-firebase + description: A Gatsby + Redux + Firebase Starter. With Authentication + tags: + - Styling:None + - Firebase + - Client-side App + features: + - Eslint Airbnb without semicolon and without .jsx extension + - Firebase + - Web App Manifest - url: https://dschau.github.io/gatsby-blog-starter-kit/ repo: https://github.com/dschau/gatsby-blog-starter-kit description: n/a @@ -1045,6 +1056,7 @@ tags: - Styling:None - Firebase + - Client-side App features: - Eslint Airbnb without semicolon and without .jsx extension - Firebase From cb7395432dd623022602f9cf077ea1fad2307662 Mon Sep 17 00:00:00 2001 From: Mike Riley Date: Fri, 16 Nov 2018 00:22:53 -0700 Subject: [PATCH 317/462] Update sites.yml (#9958) --- docs/sites.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index f77a8702325a6..d954ca99db1fa 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3356,3 +3356,24 @@ - Agency - Web Development featured: false +- title: COOP by Ryder + url: https://coop.com/ + main_url: https://coop.com/ + description: > + COOP is a platform that connects fleet managers that have idle vehicles to businesses that are looking to rent vehicles. COOP simplifies the process and paperwork required to safely share vehicles between business owners. + categories: + - Marketing + - Asset Sharing + built_by: Crispin Porter Bogusky + built_by_url: http://www.cpbgroup.com/ + featured: false +- title: Domino's Paving for Pizza + url: https://www.pavingforpizza.com/ + main_url: https://www.pavingforpizza.com/ + description: > + Nominate your town for a chance to have your rough drive home from Domino's fixed to pizza perfection. + categories: + - Marketing + built_by: Crispin Porter Bogusky + built_by_url: http://www.cpbgroup.com/ + featured: false From 5c489968c6ebc456e63d1e99d45b33d88529174f Mon Sep 17 00:00:00 2001 From: Tyler Buchea Date: Thu, 15 Nov 2018 23:25:15 -0800 Subject: [PATCH 318/462] Update README.md (#9955) I'm adding this in response to #9436 which brings up some of the confusion in the community around gtag.js vs anlaytics.js this PR hopes to clarify some of this confusion at the top of the README where no one can miss it. --- packages/gatsby-plugin-google-gtag/README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/gatsby-plugin-google-gtag/README.md b/packages/gatsby-plugin-google-gtag/README.md index 7b9f3ce846691..ed9a137afead3 100644 --- a/packages/gatsby-plugin-google-gtag/README.md +++ b/packages/gatsby-plugin-google-gtag/README.md @@ -2,6 +2,14 @@ Easily add Google Global Site Tag to your Gatsby site. +> The global site tag (gtag.js) is a JavaScript tagging framework and API that allows you to send event data to Google Analytics, Google Ads, Campaign Manager, Display & Video 360, and Search Ads 360. + +Global site tag (gtag.js) is meant to combine multiple Google tagging systems and can replace older ones such as [analytics.js](https://developers.google.com/analytics/devguides/collection/analyticsjs/) ([gatsby-plugin-google-analytics](https://www.gatsbyjs.org/packages/gatsby-plugin-google-analytics/)). + +For more general information on gtag you can read Google's official documentation on the subject: https://developers.google.com/gtagjs/. + +If you're migrating from analytics.js (gatsby-plugin-google-analytics) you can read about the subtle API differences in more depth at: https://developers.google.com/analytics/devguides/collection/gtagjs/migration. + ## Install `npm install --save gatsby-plugin-google-gtag` From a42088fe9ba3692c1bb9f957b604f78cdd6f0d3b Mon Sep 17 00:00:00 2001 From: Amberley Date: Fri, 16 Nov 2018 01:25:46 -0600 Subject: [PATCH 319/462] Ecosystem homepage copy tweak (#9953) --- www/src/components/homepage/homepage-ecosystem.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/src/components/homepage/homepage-ecosystem.js b/www/src/components/homepage/homepage-ecosystem.js index 981ade872c3f4..5e5656e434a15 100644 --- a/www/src/components/homepage/homepage-ecosystem.js +++ b/www/src/components/homepage/homepage-ecosystem.js @@ -160,7 +160,7 @@ const HomepageEcosystem = ({ featuredItems }) => ( sectionName="Ecosystem" sectionIcon={EcosystemIcon} title="Plugins & Starters" - introduction="With over 527 plugins, 86 starters, and dozens of tutorials, the Gatsby ecosystem has tools to help you build your Gatsby projects." + introduction="We have the tools to help you build for the web." links={[ { label: `Explore the Gatsby Ecosystem`, From 44db2f70967fd4408a86590899038c9f16eb4e5d Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Thu, 15 Nov 2018 23:27:13 -0800 Subject: [PATCH 320/462] Link to gatsby-plugin-layout from the "Life after Layouts" blog post (#9933) /cc @jlengstorf --- docs/blog/2018-06-08-life-after-layouts/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/blog/2018-06-08-life-after-layouts/index.md b/docs/blog/2018-06-08-life-after-layouts/index.md index e0863dbc5f72b..59b3d739bf2ea 100644 --- a/docs/blog/2018-06-08-life-after-layouts/index.md +++ b/docs/blog/2018-06-08-life-after-layouts/index.md @@ -8,6 +8,8 @@ So the Gatsby V2 beta is out, and Gatsby's [layout components are going away](ht This article will dive into the Gatsby V2's approach to layouts, talk about what changed and why, and walk through the migration process to get your existing projects updated to V2. +If you still need the v1 layout behavior, checkout [gatsby-plugin-layout](/packages/gatsby-plugin-layout/). + ## What changed? In Gatsby V1, layouts were a special kind of component that automagically wrapped generated page components. They were stored in `src/layouts/`, and received a prop called `children` that needed to be executed as a function. From efcf32cb26f68ff049cacb04ef131548617d074e Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Fri, 16 Nov 2018 13:58:37 +0100 Subject: [PATCH 321/462] chore: format --- packages/gatsby-plugin-google-gtag/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby-plugin-google-gtag/README.md b/packages/gatsby-plugin-google-gtag/README.md index ed9a137afead3..109dade4e43da 100644 --- a/packages/gatsby-plugin-google-gtag/README.md +++ b/packages/gatsby-plugin-google-gtag/README.md @@ -8,7 +8,7 @@ Global site tag (gtag.js) is meant to combine multiple Google tagging systems an For more general information on gtag you can read Google's official documentation on the subject: https://developers.google.com/gtagjs/. -If you're migrating from analytics.js (gatsby-plugin-google-analytics) you can read about the subtle API differences in more depth at: https://developers.google.com/analytics/devguides/collection/gtagjs/migration. +If you're migrating from analytics.js (gatsby-plugin-google-analytics) you can read about the subtle API differences in more depth at: https://developers.google.com/analytics/devguides/collection/gtagjs/migration. ## Install From 270d0f9df032afd2be7827efebe1e11ebb2632c1 Mon Sep 17 00:00:00 2001 From: misacorn <35432501+misacorn@users.noreply.github.com> Date: Fri, 16 Nov 2018 15:00:16 +0200 Subject: [PATCH 322/462] docs(production-app): Typo fix (#9970) `nagivation` => `navigation` --- docs/docs/production-app.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/production-app.md b/docs/docs/production-app.md index 6aa409c64483d..f1671e32103ec 100644 --- a/docs/docs/production-app.md +++ b/docs/docs/production-app.md @@ -68,7 +68,7 @@ This is a separate bundle for each page. The mechanics for how these are split o ## production-app.js -This is the entrypoint to webpack that outputs `app-[contenthash].js` bundle. It is responsible for nagivation and page loading once the initial HTML has been loaded. +This is the entrypoint to webpack that outputs `app-[contenthash].js` bundle. It is responsible for navigation and page loading once the initial HTML has been loaded. ### First load From bddc1609d751116aed97a2995c70ec0fd10cd9d6 Mon Sep 17 00:00:00 2001 From: misacorn <35432501+misacorn@users.noreply.github.com> Date: Fri, 16 Nov 2018 15:00:53 +0200 Subject: [PATCH 323/462] docs(visual-testing-with-storybook): Typo fix (#9969) --- docs/docs/visual-testing-with-storybook.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/visual-testing-with-storybook.md b/docs/docs/visual-testing-with-storybook.md index d3e7e51a31b85..a5a06c6ee6af8 100644 --- a/docs/docs/visual-testing-with-storybook.md +++ b/docs/docs/visual-testing-with-storybook.md @@ -26,7 +26,7 @@ sb init > Note that if you're running a recent version of `npm` (5.2.0+) you can run the following single command instead: `npx -p @storybook/cli sb init`, which is the recommended method by Storybook. This doesn't install the CLI on your machine, thereby ensuring you're always running the latest version of the CLI. -The `sb init` command boostraps the basic config necessary to run Storybook for a React project. However, since this is for a Gatsby project, you need to update the default Storybook configuration a bit so that you don't get errors when trying to use Gatsby specific components inside of the stories. +The `sb init` command bootstraps the basic config necessary to run Storybook for a React project. However, since this is for a Gatsby project, you need to update the default Storybook configuration a bit so that you don't get errors when trying to use Gatsby specific components inside of the stories. To update your Storybook config open `.storybook/config.js` and add the following before the `configure` method at the bottom of the file. From ad36d859b8497e3ab72179ded00f2210b499bcd6 Mon Sep 17 00:00:00 2001 From: Ricky de Laveaga Date: Fri, 16 Nov 2018 05:04:07 -0800 Subject: [PATCH 324/462] tidy using-gatsby-source-graphql example (#9968) Minor cleanup: - repair links in readme and index pointing to plugins/ instead of packages/ - add fitting name and description in package.json in style of using-gatsby-image: https://github.com/gatsbyjs/gatsby/blob/44db2f70967fd4408a86590899038c9f16eb4e5d/examples/using-gatsby-image/package.json#L2-L4 - babel-eslint to ^8.2.2 to remedy various compile errors in yarn and this more informative npm error: ```bash npm WARN eslint-config-react-app@3.0.0-next.66cc7a90 requires a peer of babel-eslint@^8.2.2 but none is installed. You must install peer dependencies yourself. ``` ...seems like we might could go higher: https://github.com/babel/babel-eslint/releases ...but this fixes the issues and allows me to build the example in yarn 1.12.3 and npm 6.4.1 on node 10.13.0. --- examples/using-gatsby-source-graphql/README.md | 2 +- examples/using-gatsby-source-graphql/package.json | 6 +++--- examples/using-gatsby-source-graphql/src/pages/index.js | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/using-gatsby-source-graphql/README.md b/examples/using-gatsby-source-graphql/README.md index a55787da1f37a..bbc4a55e65455 100644 --- a/examples/using-gatsby-source-graphql/README.md +++ b/examples/using-gatsby-source-graphql/README.md @@ -2,7 +2,7 @@ Simple gatsby site that displays blog with data inside GraphCMS. -Built using [gatsby-source-graphql](https://www.gatsbyjs.org/plugins/gatsby-source-graphql). +Built using [gatsby-source-graphql](https://www.gatsbyjs.org/packages/gatsby-source-graphql/). diff --git a/examples/using-gatsby-source-graphql/package.json b/examples/using-gatsby-source-graphql/package.json index fade81918c970..ff7d95803d60f 100644 --- a/examples/using-gatsby-source-graphql/package.json +++ b/examples/using-gatsby-source-graphql/package.json @@ -1,6 +1,6 @@ { - "name": "gatsby-starter-hello-world", - "description": "Gatsby hello world starter", + "name": "using-gatsby-source-graphql", + "description": "Gatsby example site using gatsby-source-graphql", "license": "MIT", "scripts": { "develop": "gatsby develop", @@ -18,7 +18,7 @@ "react-markdown": "^3.3.4" }, "devDependencies": { - "babel-eslint": "8.2.1", + "babel-eslint": "^8.2.2", "eslint": "^4.19.1", "eslint-config-google": "^0.9.1", "eslint-config-prettier": "^2.9.0", diff --git a/examples/using-gatsby-source-graphql/src/pages/index.js b/examples/using-gatsby-source-graphql/src/pages/index.js index 01d76fe4340c8..7c4e8c22581e4 100644 --- a/examples/using-gatsby-source-graphql/src/pages/index.js +++ b/examples/using-gatsby-source-graphql/src/pages/index.js @@ -7,7 +7,7 @@ export default ({ data }) => (

    My Gatsby Blog

    - + Using gatsby-source-graphql

    From e2081344463616b6add9fed4c4dec7a37eae217a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gatis=20=C5=A0pats?= Date: Fri, 16 Nov 2018 15:04:55 +0200 Subject: [PATCH 325/462] feat(gatsby-source-drupal): add basicauth support (#9848) I have a business case where we need to build gatsby page from drupal webiste that is protected by basicauth (Basic access authentication). Since axios already supports it I slightly modified the gatsby-source-drupal code to enable it. Please see if you can implement this feature as proposed in this PR or similar manner. --- examples/using-drupal/package.json | 2 +- packages/gatsby-source-drupal/README.md | 45 +++++++++++++++---- .../gatsby-source-drupal/src/gatsby-node.js | 6 +-- 3 files changed, 41 insertions(+), 12 deletions(-) diff --git a/examples/using-drupal/package.json b/examples/using-drupal/package.json index f5e42adee0f6c..7a71600deac77 100644 --- a/examples/using-drupal/package.json +++ b/examples/using-drupal/package.json @@ -12,7 +12,7 @@ "gatsby-plugin-offline": "^2.0.5", "gatsby-plugin-sharp": "^2.0.5", "gatsby-plugin-typography": "^2.2.0", - "gatsby-source-drupal": "^2.2.0", + "gatsby-source-drupal": "^3.0.9", "gatsby-transformer-sharp": "^2.1.1", "glamor": "^2.20.40", "gray-percentage": "^2.0.0", diff --git a/packages/gatsby-source-drupal/README.md b/packages/gatsby-source-drupal/README.md index 02c09dbcf620d..56e5313a32b67 100644 --- a/packages/gatsby-source-drupal/README.md +++ b/packages/gatsby-source-drupal/README.md @@ -21,15 +21,41 @@ been used since jsonapi version `8.x-1.0-alpha4`. ```javascript // In your gatsby-config.js -plugins: [ - { - resolve: `gatsby-source-drupal`, - options: { - baseUrl: `https://live-contentacms.pantheonsite.io/`, - apiBase: `api`, // optional, defaults to `jsonapi` +module.exports = { + plugins: [ + { + resolve: `gatsby-source-drupal`, + options: { + baseUrl: `https://live-contentacms.pantheonsite.io/`, + apiBase: `api`, // optional, defaults to `jsonapi` + }, }, - }, -] + ], +} +``` + +### Basic Auth + +You can use `basicAuth` option if your site is protected by basicauth. +First, you need a way to pass environment variables to the build process, so secrets and other secured data aren't committed to source control. We recommend using [`dotenv`][dotenv] which will then expose environment variables. [Read more about dotenv and using environment variables here][envvars]. Then we can _use_ these environment variables and configure our plugin. + +```javascript +// In your gatsby-config.js +module.exports = { + plugins: [ + { + resolve: `gatsby-source-drupal`, + options: { + baseUrl: `https://live-contentacms.pantheonsite.io/`, + apiBase: `api`, // optional, defaults to `jsonapi` + basicAuth: { + username: process.env.BASIC_AUTH_USERNAME, + password: process.env.BASIC_AUTH_PASSWORD, + }, + }, + }, + ], +} ``` ## How to query @@ -49,3 +75,6 @@ You can query nodes created from Drupal like the following: } } ``` + +[dotenv]: https://github.com/motdotla/dotenv +[envvars]: https://www.gatsbyjs.org/docs/environment-variables diff --git a/packages/gatsby-source-drupal/src/gatsby-node.js b/packages/gatsby-source-drupal/src/gatsby-node.js index 217fe331f50f5..7ca564a6b3659 100644 --- a/packages/gatsby-source-drupal/src/gatsby-node.js +++ b/packages/gatsby-source-drupal/src/gatsby-node.js @@ -14,7 +14,7 @@ const createContentDigest = obj => exports.sourceNodes = async ( { actions, getNode, hasNodeChanged, store, cache, createNodeId }, - { baseUrl, apiBase } + { baseUrl, apiBase, basicAuth } ) => { const { createNode } = actions @@ -40,7 +40,7 @@ exports.sourceNodes = async ( // .lastFetched // } - const data = await axios.get(`${baseUrl}/${apiBase}`) + const data = await axios.get(`${baseUrl}/${apiBase}`, { auth: basicAuth }) const allData = await Promise.all( _.map(data.data.links, async (url, type) => { if (type === `self`) return @@ -54,7 +54,7 @@ exports.sourceNodes = async ( let d try { - d = await axios.get(url) + d = await axios.get(url, { auth: basicAuth }) } catch (error) { if (error.response && error.response.status == 405) { // The endpoint doesn't support the GET method, so just skip it. From 34d3f0a61fc096f826adce4c24ca0ab2982d1a2c Mon Sep 17 00:00:00 2001 From: Selwyn Date: Fri, 16 Nov 2018 14:07:33 +0100 Subject: [PATCH 326/462] docs: Add notice about StaticQuery only working with JSX (#9960) * Add notice about StaticQuery only working with JSX * Update docs/docs/static-query.md Co-Authored-By: Siilwyn --- docs/docs/static-query.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/docs/static-query.md b/docs/docs/static-query.md index 9071cea7ca18b..9b0a6f30c243d 100644 --- a/docs/docs/static-query.md +++ b/docs/docs/static-query.md @@ -91,3 +91,4 @@ StaticQuery can do most of the things that page query can, including fragments. - page queries can accept variables (via `pageContext`) but can only be added to _page_ components - StaticQuery does not accept variables (hence the name "static"), but can be used in _any_ component, including pages +- StaticQuery does not work with raw React.createElement calls; please use JSX, e.g. `` From a10b83d5d8f3a12fe730b9cae3a58afafb5a2ea7 Mon Sep 17 00:00:00 2001 From: Tal Perry Date: Fri, 16 Nov 2018 14:13:07 +0100 Subject: [PATCH 327/462] docs(gatsby-plugin-google-gtag): clarify that this plugin is inactive in dev (#9497) In reference to #9436 @tylerbuchea --- packages/gatsby-plugin-google-gtag/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/gatsby-plugin-google-gtag/README.md b/packages/gatsby-plugin-google-gtag/README.md index 109dade4e43da..bc52e6c5b0e24 100644 --- a/packages/gatsby-plugin-google-gtag/README.md +++ b/packages/gatsby-plugin-google-gtag/README.md @@ -10,6 +10,8 @@ For more general information on gtag you can read Google's official documentatio If you're migrating from analytics.js (gatsby-plugin-google-analytics) you can read about the subtle API differences in more depth at: https://developers.google.com/analytics/devguides/collection/gtagjs/migration. +NOTE: This plugin only works in production mode! To test your Global Site Tag is installed and firing events correctly run: gatsby build && gatsby serve. + ## Install `npm install --save gatsby-plugin-google-gtag` From 298145443b06ab1f8e76c7d76fafd122285b537c Mon Sep 17 00:00:00 2001 From: Jonas Gierer Date: Fri, 16 Nov 2018 14:28:26 +0100 Subject: [PATCH 328/462] docs: Un-mark "Bable Plugin Macros" guide as stub (#9973) Sorry, didn't realize this had to be updated manually... Related to #9963 --- www/src/data/sidebars/doc-links.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/src/data/sidebars/doc-links.yaml b/www/src/data/sidebars/doc-links.yaml index 5ec3e6a889ddd..a000b142d512f 100644 --- a/www/src/data/sidebars/doc-links.yaml +++ b/www/src/data/sidebars/doc-links.yaml @@ -43,7 +43,7 @@ items: - title: Babel.js link: /docs/babel/ - - title: Babel plugin macros* + - title: Babel plugin macros link: /docs/babel-plugin-macros/ - title: Custom webpack config link: /docs/add-custom-webpack-config/ From 96d6c7833328963927d93b00ad972629c0136df8 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Fri, 16 Nov 2018 14:36:24 +0100 Subject: [PATCH 329/462] chore(release): Publish - gatsby-plugin-google-gtag@1.0.7 - gatsby-source-drupal@3.0.10 --- packages/gatsby-plugin-google-gtag/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-google-gtag/package.json | 2 +- packages/gatsby-source-drupal/CHANGELOG.md | 8 ++++++++ packages/gatsby-source-drupal/package.json | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/gatsby-plugin-google-gtag/CHANGELOG.md b/packages/gatsby-plugin-google-gtag/CHANGELOG.md index b9dd079488841..28c56e37f7d99 100644 --- a/packages/gatsby-plugin-google-gtag/CHANGELOG.md +++ b/packages/gatsby-plugin-google-gtag/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [1.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag/compare/gatsby-plugin-google-gtag@1.0.6...gatsby-plugin-google-gtag@1.0.7) (2018-11-16) + +**Note:** Version bump only for package gatsby-plugin-google-gtag + ## [1.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag/compare/gatsby-plugin-google-gtag@1.0.5...gatsby-plugin-google-gtag@1.0.6) (2018-11-15) diff --git a/packages/gatsby-plugin-google-gtag/package.json b/packages/gatsby-plugin-google-gtag/package.json index bee94d162bd49..645beaf407549 100644 --- a/packages/gatsby-plugin-google-gtag/package.json +++ b/packages/gatsby-plugin-google-gtag/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-google-gtag", "description": "Gatsby plugin to add google gtag onto a site", - "version": "1.0.6", + "version": "1.0.7", "author": "Tyler Buchea ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-source-drupal/CHANGELOG.md b/packages/gatsby-source-drupal/CHANGELOG.md index f5bb92aa8b7cc..af478c6a8c65a 100644 --- a/packages/gatsby-source-drupal/CHANGELOG.md +++ b/packages/gatsby-source-drupal/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.10](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-drupal/compare/gatsby-source-drupal@3.0.9...gatsby-source-drupal@3.0.10) (2018-11-16) + +### Features + +- **gatsby-source-drupal:** add basicauth support ([#9848](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-drupal/issues/9848)) ([e208134](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-drupal/commit/e208134)) + ## [3.0.9](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-drupal/compare/gatsby-source-drupal@3.0.8...gatsby-source-drupal@3.0.9) (2018-11-14) diff --git a/packages/gatsby-source-drupal/package.json b/packages/gatsby-source-drupal/package.json index c30b7ae9206e6..fc6bc0128269f 100644 --- a/packages/gatsby-source-drupal/package.json +++ b/packages/gatsby-source-drupal/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-drupal", "description": "Gatsby source plugin for building websites using the Drupal CMS as a data source", - "version": "3.0.9", + "version": "3.0.10", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" From 295661e3a34474373a28b4586fd3bf2d8e4ac923 Mon Sep 17 00:00:00 2001 From: Henry Kehlmann Date: Fri, 16 Nov 2018 15:59:00 +0200 Subject: [PATCH 330/462] feat(showcase): add Propapanda's site to showcase (#9974) Add [Propapanda's](https://propapanda.eu/) site to showcase --- docs/sites.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index d954ca99db1fa..b295b23a14ba5 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3377,3 +3377,17 @@ built_by: Crispin Porter Bogusky built_by_url: http://www.cpbgroup.com/ featured: false +- title: Propapanda + url: https://propapanda.eu/ + main_url: https://propapanda.eu/ + description: > + Is a creative production house based in Tallinn, Estonia. We produce music videos, commercials, films and campaigns – from scratch to finish. + categories: + - Cinema + - Video + - Portfolio + - Agency + - Media + built_by: Henry Kehlmann + built_by_url: https://github.com/madhenry/ + featured: false From ae48a7fbe1168db0f8ec7e06b5e34eb074d4feb5 Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Fri, 16 Nov 2018 09:00:25 -0600 Subject: [PATCH 331/462] ci: update config to exclude docs/blog test running (#9952) This will also hide the status check. The general idea is that any PR whose branch starts with docs/, docs, blog/, or blog (e.g. docs-some-update, docs/some-update, etc.) will not run e2e tests. This seems pretty safe, and it's effectively opt-in. Unfortunately, we can't really enforce this standard, so it's more relying on the community to open up correct branch names, but if nothing else, it's valuable for us :shrug: --- .circleci/config.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3e558e7577c54..0ed8284f6f95f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -40,6 +40,13 @@ aliases: ignore: - master + ignore_docs: &ignore_docs + filters: + branches: + ignore: + - /docs.+/ + - /blog.+/ + test_template: &test_template steps: - checkout @@ -52,6 +59,7 @@ aliases: e2e-test-workflow: &e2e-test-workflow <<: *ignore_master + <<: *ignore_docs requires: - bootstrap @@ -156,15 +164,19 @@ workflows: - bootstrap - lint - unit_tests_node6: + <<: *ignore_docs requires: - bootstrap - unit_tests_node8: + <<: *ignore_docs requires: - bootstrap - unit_tests_node10: + <<: *ignore_docs requires: - bootstrap - - integration_tests + - integration_tests: + <<: *ignore_docs - e2e_tests_gatsbygram: <<: *e2e-test-workflow - e2e_tests_path-prefix: From e83dbc6e695104745c6c8184a761a6b3477f392f Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Fri, 16 Nov 2018 10:42:26 -0600 Subject: [PATCH 332/462] docs(blog): add a case study for youfit (#9951) This adds a case study concerning Youfit's usage of Gatsby :muscle: cc @lindawatkins --- .../2018-11-16-youfit-case-study/index.md | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 docs/blog/2018-11-16-youfit-case-study/index.md diff --git a/docs/blog/2018-11-16-youfit-case-study/index.md b/docs/blog/2018-11-16-youfit-case-study/index.md new file mode 100644 index 0000000000000..336b8d880ac8e --- /dev/null +++ b/docs/blog/2018-11-16-youfit-case-study/index.md @@ -0,0 +1,55 @@ +--- +title: Youfit uses Gatsby to increase lead generation by 60% +date: 2018-11-16 +author: Linda Watkins +tags: + - case study +--- + +We talked with Zach Muha, Director of Digital Marketing at [Youfit Health Clubs][youfit-health-clubs], about his experience with Gatsby and why he decided to use it for a website rebuild. Zach is in charge of managing SEO, UX, SEM, display ads, social channels, email marketing, CRM and the Youfit app- not a small job! +About Youfit Health Clubs +Youfit Health Clubs are redefining how people approach health by creating an inclusive, affordable gym environment that welcomes everyone. Founded in 2008 by Rick Berks, Youfit has more than 100 locations across 14 states. + +As with many websites, Youfit depends on the site to attract new customers. But a slow site led to a 60% bounce rate on the initial page load, which meant Youfit was losing potential customers. When the website was slow or site visitors couldn’t find the gym closest to their location, they lost interest. + +So Zach and the Youfit team decided they needed a website rebuild to optimize the site, decrease page load times, improve mobile accessibility, and increase lead conversion rates. They decided to use Gatsby for the rebuild due to its proven track record of building blazing fast sites which ended up increasing their lead conversion rate by 60%! + +## Slow page loads mean lost customers + +Youfit needed to find a way to decrease page load times (some page loads took up to 22 seconds!), decrease the bounce rate, and optimize the site for mobile. The later was most important, given the sheer number of users tapping in strictly via their phones. In addition, Google’s algorithm changes, which gives lower page rankings to poor performing sites, meant Youfit was showing up lower and lower on the page for organic search results. A significant portion of their site traffic comes from new visitors and these issues were causing them to bail before they even had a chance to see who Youfit really was AND miss the opportunity to fill out a form for a free trial. + +Youfit also wanted to optimize their location pages, which are customized based on the user’s geographic location. When a user visits the Youfit website, they have the option to name their specific location by zip code to find the Youfit gym that’s closest to them. Once the input is received, a customized page loads to show the specific Youfit location, hours, address, and amenity details that location offers. After the site rebuild, these location pages were built automatically and quickly, decreasing load times and improving the end user experience. These are some of the most critical pages for Youfit when it comes to search engine optimization because many people search for gyms close to where they live or work. Having the Youfit location pages show up in organic search results helps them reach more potential customers and improvement on these pages was critical to generating more leads. + +## Why Gatsby? + +As with many websites, Youfit depends on the site to attract new customers. But a slow site was dragging them down. The more time it takes for pages to load, the higher the bounce rate, which meant Youfit was losing potential sales. This was when Zach knew he needed to turn things around. + +Zach understands the digital landscape is always evolving, forcing teams and companies to learn and adjust or get left behind. When considering a website rebuild, Zach needed a solution that would help them achieve their main business objective - to generate more leads. They needed a fresh site, optimized for mobile with a stellar user experience and blazing fast page loads that captured leads. + +Zach chose Gatsby based on a recommendation from [64labs][64-labs], a mobile web development agency. They recommended Gatsby for the website rebuild because Gatsby is already optimized for performance. They knew a Gatsby website would provide incredibly fast pages load times and mobile optimization, resulting in a better user experience and increased lead generation. + +## From slow to go! + +After the website rebuild, the Youfit site was blazing fast. Navigating the site feels seamless as Gatsby pre-fetches links depending on where the user is on the page, so that the next page is ready to go even before the user clicks on the link. And due to better SEO, Youfit location pages now show up in organic search results which was needed to reach more potential customers, and improvement on these pages was critical to turning website visitors into leads. + +Youfit measured each page’s speed post-launch and with the initial page load, the load time was _at least cut in half_! Since the relaunch of the website, they’ve also experienced: + +- 22% increase in organic traffic +- 50%+ increase in accessibility score, causing their Google search rank to climb +- An immediate 10% decrease in bounce rate, with exponential improvements projected in the near future +- 60% increase in lead conversion rates as more people signed up for a free trial + +Prior to the website rebuild, Youfit viewed their website as an “add-on” because the team did not see it as critical to the success of the company. But now that they are experiencing first-hand the benefits of Gatsby, their website has become a primary channel for lead generation. + +## Final Thoughts + +Zach and the Youfit team were happy with the results, amazed by the fast page load times, and would use Gatsby again for future projects. + +> We are very happy with the results so far, especially the 60% increase in leads. The website went from a burden to a strategic tool we use to capture leads and generate ROI. +> +> - Zach Muha + +By using Gatsby, Youfit significantly increased their organic traffic, lead capture and ROI. Youfit also laid the foundation for long-term success by improving their Google ranking and making their site mobile friendly. This enabled Youfit to focus on what it does best: making proactive wellness more accessible to all. + +[youfit-health-clubs]: https://www.youfit.com/ +[64-labs]: http://www.64labs.com/ From fb7abb5f4065fc7734c43d6257134c81eec63bfe Mon Sep 17 00:00:00 2001 From: Amberley Date: Fri, 16 Nov 2018 14:56:10 -0600 Subject: [PATCH 333/462] Change banner text, add outbound link tracking (#9990) * change banner text, add outbound link tracking * linting --- www/src/components/layout.js | 9 +++++---- www/src/components/layout/layout-with-heading.js | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/www/src/components/layout.js b/www/src/components/layout.js index 6ff8e916a43b0..75b5d9ff02c17 100644 --- a/www/src/components/layout.js +++ b/www/src/components/layout.js @@ -1,6 +1,7 @@ import React from "react" import Modal from "react-modal" import { SkipNavLink } from "@reach/skip-nav" +import { OutboundLink } from "gatsby-plugin-google-analytics" import MdClose from "react-icons/lib/md/close" import { navigate, PageRenderer } from "gatsby" import presets, { colors } from "../utils/presets" @@ -151,7 +152,7 @@ class DefaultLayout extends React.Component { Skip to main content {/* !!! If you change the children of Banner remember to do the same in layout/layout-with-heading.js */} - - Register now - - {` for “Rise of the Content Mesh: Webcast with Contentful and Gatsby”.`} + Watch + + {`: “Rise of the Content Mesh: Webcast with Contentful and Gatsby”.`}
    { Skip to main content - { }, }} > - Register now - - {` for “Rise of the Content Mesh: Webcast with Contentful and Gatsby”.`} + Watch + + {`: “Rise of the Content Mesh: Webcast with Contentful and Gatsby”.`} From e3a213be4fe7e19a685a97c61b35c26bd529ffdf Mon Sep 17 00:00:00 2001 From: Tien Pham Date: Sat, 17 Nov 2018 19:35:48 +0200 Subject: [PATCH 334/462] docs(environment-variables): Fix typo (#9999) `relavant` => `relevant` --- docs/docs/environment-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/environment-variables.md b/docs/docs/environment-variables.md index 617d2fd01a202..9d002b096f75b 100644 --- a/docs/docs/environment-variables.md +++ b/docs/docs/environment-variables.md @@ -10,7 +10,7 @@ Note that we need to distinguish in this discussion between variables which have special places in order to be used in different deployment environments, and true OS-level environment variables that could be used in, for example, command-line calls. We'll call the former "Project Env Vars" and the latter "OS Env Vars". -In both cases we want to be able to access the relavant value of these variable for the environment +In both cases we want to be able to access the relevant value of these variable for the environment we're in. By default gatsby supports only 2 environments: From 6ff091d67559860e3952a43cd34f6169528a3170 Mon Sep 17 00:00:00 2001 From: Tien Pham Date: Sat, 17 Nov 2018 19:36:24 +0200 Subject: [PATCH 335/462] docs(gatsby-first-beta-release): Fix (#10000) `infastructure` => `infrastructure` --- docs/blog/gatsby-first-beta-release.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/blog/gatsby-first-beta-release.md b/docs/blog/gatsby-first-beta-release.md index 53e094748c62e..4dc6a37f1ecb2 100644 --- a/docs/blog/gatsby-first-beta-release.md +++ b/docs/blog/gatsby-first-beta-release.md @@ -66,7 +66,7 @@ individuals and companies. - [X-Team](https://x-team.com/) - [Contentful](https://www.contentful.com/) -### Our open source hosting/testing infastructure providers +### Our open source hosting/testing infrastructure providers It'd be impossible to write open source code without the generous support of these infrastructure providers. From 20015c2effb722a4a606a9fccd4ef2c9767b9357 Mon Sep 17 00:00:00 2001 From: Tien Pham Date: Sat, 17 Nov 2018 19:36:45 +0200 Subject: [PATCH 336/462] docs(blog): Fix (#10001) some `entires` had photos => some `entries` had photos --- .../index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/blog/2018-1-25-building-a-site-with-react-and-contentful/index.md b/docs/blog/2018-1-25-building-a-site-with-react-and-contentful/index.md index de5d10c68bbf7..a000a98945e1b 100644 --- a/docs/blog/2018-1-25-building-a-site-with-react-and-contentful/index.md +++ b/docs/blog/2018-1-25-building-a-site-with-react-and-contentful/index.md @@ -164,7 +164,7 @@ query PhotoQuery { ## More complex pages -The list of Tricks & Commands presented a complex challenge because not all entries on Contentful included the same content. For example, we got errors if we tried to query for a photo since some entires had photos and some did not. +The list of Tricks & Commands presented a complex challenge because not all entries on Contentful included the same content. For example, we got errors if we tried to query for a photo since some entries had photos and some did not. Because each entry was inconsistent, my friends helped me figure out a way to use JS to make sure we only requested a photo to be printed IF the photo existed. And if a particular entry didn't have a photo, the computer could forgive it (just this once). Here is the code from that page: From ef9d18e5cf61c6b1788efd4256ae374b6fbcdb14 Mon Sep 17 00:00:00 2001 From: Nicolas Goutay Date: Sat, 17 Nov 2018 18:39:27 +0100 Subject: [PATCH 337/462] =?UTF-8?q?feat(showcase):=20add=20=E2=80=9CJAMsta?= =?UTF-8?q?ck.paris=E2=80=9D=20to=20showcase=20(#9998)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Uses [Gatsby Source Meetup](https://github.com/phacks/gatsby-source-meetup) to gather Meetup.com information 😊 ![image](https://user-images.githubusercontent.com/2587348/48662868-b05ae980-ea88-11e8-8385-b2466fa7a4e5.png) --- docs/sites.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index b295b23a14ba5..af478dac8ddd3 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3391,3 +3391,14 @@ built_by: Henry Kehlmann built_by_url: https://github.com/madhenry/ featured: false +- title: JAMstack.paris + url: https://jamstack.paris/ + main_url: https://jamstack.paris/ + source_url: https://github.com/JAMstack-paris/jamstack.paris + description: > + JAMstack-focused, bi-monthly meetup in Paris + categories: + - Web Development + built_by: Matthieu Auger & Nicolas Goutay + built_by_url: https://github.com/JAMstack-paris + featured: false From 4428363ad217dd9e2ce9ef18de3a41c19a732c09 Mon Sep 17 00:00:00 2001 From: Vipin Kumar Rawat Date: Sat, 17 Nov 2018 23:13:23 +0530 Subject: [PATCH 338/462] feat(showcase): add amazing DexWallet to the gatsby showcase (#9989) * Added amazing DexWallet to the gatsby showcase * Update sites.yml * Update sites.yml --- docs/sites.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index af478dac8ddd3..67066350b7aec 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3402,3 +3402,17 @@ built_by: Matthieu Auger & Nicolas Goutay built_by_url: https://github.com/JAMstack-paris featured: false +- title: DexWallet - The only Wallet you need by Dexlab + main_url: "https://www.dexwallet.io/" + url: "https://www.dexwallet.io/" + source_url: "https://github.com/dexlab-io/DexWallet-website" + featured: false + description: >- + DexWallet is a secure, multi-chain, mobile wallet with an upcoming one-click exchange for mobile. + categories: + - Blockchain + - App + - Open Source + - React Native + built_by: DexLab + built_by_url: "https://github.com/dexlab-io" From e0c9d746c869cb4108e0317788744287710e5ed3 Mon Sep 17 00:00:00 2001 From: Steven Natera Date: Sun, 18 Nov 2018 12:14:52 -0500 Subject: [PATCH 339/462] fix dead links (#10010) --- .../index.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/blog/2018-02-09-announcing-gatsby-manor-themes-for-gatsbyjs/index.md b/docs/blog/2018-02-09-announcing-gatsby-manor-themes-for-gatsbyjs/index.md index c079424948d93..9d379e88121db 100644 --- a/docs/blog/2018-02-09-announcing-gatsby-manor-themes-for-gatsbyjs/index.md +++ b/docs/blog/2018-02-09-announcing-gatsby-manor-themes-for-gatsbyjs/index.md @@ -6,10 +6,10 @@ author: "Steven Natera" tags: ["themes"] --- -I am proud to announce [Gatsby Manor](https://www.gatsbymanor.com/), a gallery +I am proud to announce [Gatsby Manor](https://landing.gatsbymanor.com/news/gatsbymanor-live), a gallery of themes for Gatsby. After 5 months of development, Gatsby Manor is now in public alpha. Check out our -[themes](https://www.gatsbymanor.com/themes) then use our [getting started](https://www.gatsbymanor.com/docs/quick-start/getting-started) guide to +[themes](https://landing.gatsbymanor.com/news/gatsbymanor-live) then use our [getting started](https://landing.gatsbymanor.com/news/gatsbymanor-live) guide to kickstart your Gatsby project. ## Overview @@ -17,7 +17,7 @@ kickstart your Gatsby project. Gatsby Manor is built on top of Gatsby to provide a painless way of building websites with reusable React components we call themes. We even have a cleverly named npm module for theme management called -[Jay](https://github.com/gatsbymanor/gatsby-jay) 😄. +[Jay](https://landing.gatsbymanor.com/news/gatsbymanor-live) 😄. With Jay you can download a theme from our collection, and mount it as a default theme. Styles are applied instantly without server restarts or additional lines @@ -26,7 +26,7 @@ of code. Because of React, interactivity is supported out of the box. Want to switch themes? No problem. Jay can archive themes for later use in a themes folder in your local directory. Edit and swap themes as often as you want and Jay will manage the process. Want to learn more? Read our -[docs](https://www.gatsbymanor.com/docs/cli/)! +[docs](https://landing.gatsbymanor.com/news/gatsbymanor-live)! ## How it all started @@ -76,13 +76,13 @@ months later, Gatsby Manor was born. Gatsby Manor is in public alpha stage. There are plenty of [GitHub](https://github.com/gatsbymanor) contributions to go around. To get -started, try out a Gatsby Manor theme using our tutorial on [getting started](https://www.gatsbymanor.com/docs/quick-start/getting-started). Open an +started, try out a Gatsby Manor theme using our tutorial on [getting started](https://landing.gatsbymanor.com/news/gatsbymanor-live). Open an issue if you see an area of improvement. Follow and send us positive vibes on Twitter using [@TheGatsbyManor](https://twitter.com/TheGatsbyManor). -TL;DR [Gatsby Manor](https://www.gatsbymanor.com/) is a place to get themes for -your Gatsby project. Use our [getting started](https://www.gatsbymanor.com/docs/quick-start/getting-started) tutorial to use -a [theme](https://www.gatsbymanor.com/themes) in your Gatsby project today. +TL;DR [Gatsby Manor](https://landing.gatsbymanor.com/news/gatsbymanor-live) is a place to get themes for +your Gatsby project. Use our [getting started](https://landing.gatsbymanor.com/news/gatsbymanor-live) tutorial to use +a [theme](https://landing.gatsbymanor.com/news/gatsbymanor-live) in your Gatsby project today. Cheers! 🎉🎊 From c268745bf0804b0ef1dd78dd3bc59428222a3429 Mon Sep 17 00:00:00 2001 From: Michael Uloth Date: Sun, 18 Nov 2018 14:55:40 -0500 Subject: [PATCH 340/462] Update sites.yml (#10014) Added two portfolio websites. --- docs/sites.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index 67066350b7aec..93f7db2c3a3f4 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3416,3 +3416,23 @@ - React Native built_by: DexLab built_by_url: "https://github.com/dexlab-io" +- title: Kings Valley Paving + url: https://kingsvalleypaving.com + main_url: https://kingsvalleypaving.com + description: > + Kings Valley Paving is an asphalt, paving and concrete company serving the commercial, residential and industrial sectors in the Greater Toronto Area. + categories: + - Marketing, Construction, Paving + built_by: Michael Uloth + built_by_url: https://www.michaeluloth.com + featured: false +- title: Peter Barrett + url: https://www.peterbarrett.ca + main_url: https://www.peterbarrett.ca + description: > + Peter Barrett is a Canadian baritone from Newfoundland and Labrador who performs opera and concert repertoire in Canada, the U.S. and around the world. + categories: + - Portfolio, Music + built_by: Michael Uloth + built_by_url: https://www.michaeluloth.com + featured: false From d4fd507d35af3ad06b5a8ca5b63398080c2ae224 Mon Sep 17 00:00:00 2001 From: Burak Tokak Date: Mon, 19 Nov 2018 15:02:37 +0300 Subject: [PATCH 341/462] docs: use PRPL pattern doc link (#10004) Hey, just noticed the term PRPL pattern in "SEO with Gatsby", turns out we actually have another doc page about that. --- docs/docs/seo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/seo.md b/docs/docs/seo.md index d01ac42024973..eaa53c02eee2d 100644 --- a/docs/docs/seo.md +++ b/docs/docs/seo.md @@ -12,7 +12,7 @@ Because Gatsby pages are server-rendered, all the page content is available to G ### Speed boost -Gatsby's many built-in performance optimizations, such as rendering to static files, progressive image loading, and the PRPL pattern—all help your site be lightning-fast by default. +Gatsby's many built-in performance optimizations, such as rendering to static files, progressive image loading, and the [PRPL pattern](/docs/prpl-pattern/)—all help your site be lightning-fast by default. Starting in January 2018, Google [rewards faster sites with a bump in search rankings](https://searchengineland.com/google-speed-update-page-speed-will-become-ranking-factor-mobile-search-289904). From 073bbe835181181f29c2df15a088e44b4ddc6a16 Mon Sep 17 00:00:00 2001 From: Benjamin Lannon Date: Mon, 19 Nov 2018 07:06:42 -0500 Subject: [PATCH 342/462] feat(showcase): add VS Code Rocks to site showcase (#10003) I added my blog [VS Code Rocks](https://vscode.rocks) to the site showcase --- docs/sites.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index 93f7db2c3a3f4..843ce5d39c735 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3436,3 +3436,16 @@ built_by: Michael Uloth built_by_url: https://www.michaeluloth.com featured: false +- title: VS Code Rocks + main_url: "https://vscode.rocks" + url: "https://vscode.rocks" + source_url: "https://github.com/lannonbr/vscode-rocks" + featured: false + description: > + VS Code Rocks is a place for weekly news on the newest features and updates to Visual Studio Code as well as trending extensions and neat tricks to continually improve your VS Code skills. + categories: + - Open Source + - Blog + - Web Development + built_by: Benjamin Lannon + built_by_url: "https://github.com/lannonbr" From de6f98ac2a1715c1f8b827f5f91edbaad7bb9b49 Mon Sep 17 00:00:00 2001 From: Burak Tokak Date: Mon, 19 Nov 2018 21:56:44 +0300 Subject: [PATCH 343/462] Fix codeblock not rendering on markdown (#10005) * Fix codeblock not rendering on markdown * Update local-https.md --- docs/docs/local-https.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/docs/local-https.md b/docs/docs/local-https.md index f65f677819f94..53c9dd16ed98d 100644 --- a/docs/docs/local-https.md +++ b/docs/docs/local-https.md @@ -44,7 +44,11 @@ If you need to use a custom https setup, you can pass the `--https`, `--key-file - `--cert-file` [relative path to ssl certificate file] - `--key-file` [relative path to ssl key file] - $ gatsby develop --https --key-file ../relative/path/to/key.key --cert-file ../relative/path/to/cert.crt +See the example command: + +```bash +$ gatsby develop --https --key-file ../relative/path/to/key.key --cert-file ../relative/path/to/cert.crt +``` in most cases, the `--https` passed by itself is easier and more convenient to get local https. From 769932ba6a6198e8be52627b794ad2eaa802b2bd Mon Sep 17 00:00:00 2001 From: Kyle Mathews Date: Mon, 19 Nov 2018 12:52:46 -0700 Subject: [PATCH 344/462] Add particle (#10031) --- docs/sites.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index 843ce5d39c735..2fc5982f1d89c 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3449,3 +3449,11 @@ - Web Development built_by: Benjamin Lannon built_by_url: "https://github.com/lannonbr" +- title: Particle + main_url: "https://www.particle.io" + url: "https://www.particle.io" + featured: false + description: Particle is a fully-integrated IoT platform that offers everything you need to deploy an IoT product. + categories: + - Marketing + - IOT From 8061e3b04653192b32ebe8746bf41d3cd9e6f040 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Mon, 19 Nov 2018 21:36:36 +0100 Subject: [PATCH 345/462] fix: avoid leaking defined env vars when trying to access not defined env vars (#10030) * fix: avoid leaking defined env vars when trying to access not defined env vars * test: add some testing for env var usage and leaking * add some comments to .env.production - it normally shouldn't be commited to repo --- e2e-tests/production-runtime/.env.production | 5 +++ .../production-runtime/__tests__/env-vars.js | 32 +++++++++++++++++++ .../cypress/integration/production.js | 8 +++++ e2e-tests/production-runtime/package.json | 3 +- .../production-runtime/src/pages/env-vars.js | 29 +++++++++++++++++ packages/gatsby/src/utils/webpack.config.js | 14 ++++++-- 6 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 e2e-tests/production-runtime/.env.production create mode 100644 e2e-tests/production-runtime/__tests__/env-vars.js create mode 100644 e2e-tests/production-runtime/src/pages/env-vars.js diff --git a/e2e-tests/production-runtime/.env.production b/e2e-tests/production-runtime/.env.production new file mode 100644 index 0000000000000..b4b96fe5c9c50 --- /dev/null +++ b/e2e-tests/production-runtime/.env.production @@ -0,0 +1,5 @@ +# This file is commited to repo only to validate that env vars are available +# to use in frontend and don't leak if not used (secrets used in Node). +# You should NOT commit `.env` files to your repository for production sites. +EXISTING_VAR=foo bar +VERY_SECRET_VAR=it's a secret diff --git a/e2e-tests/production-runtime/__tests__/env-vars.js b/e2e-tests/production-runtime/__tests__/env-vars.js new file mode 100644 index 0000000000000..00de3acd24b4f --- /dev/null +++ b/e2e-tests/production-runtime/__tests__/env-vars.js @@ -0,0 +1,32 @@ +const { exec } = require(`child_process`) + +const grepJSFilesFor = str => + new Promise(resolve => { + const grep = exec(`grep -r "${str}" ./public/*.js`) + + grep.stdout.on(`data`, () => { + resolve(true) + return + }) + + grep.on(`close`, () => { + resolve(false) + return + }) + }) + +const checkLeakedEnvVar = async () => { + const isLeaked = + (await grepJSFilesFor(`VERY_SECRET_VAR`)) || + (await grepJSFilesFor(`it's a secret`)) + + if (isLeaked) { + console.error(`Error: VERY_SECRET_VAR found in bundle`) + process.exit(1) + } else { + console.log(`Success: VERY_SECRET_VAR not found in bundle`) + process.exit(0) + } +} + +checkLeakedEnvVar() diff --git a/e2e-tests/production-runtime/cypress/integration/production.js b/e2e-tests/production-runtime/cypress/integration/production.js index 1050897e9af41..ddff30c7859b1 100644 --- a/e2e-tests/production-runtime/cypress/integration/production.js +++ b/e2e-tests/production-runtime/cypress/integration/production.js @@ -71,4 +71,12 @@ describe(`Production build tests`, () => { .getTestElement(`404`) .should(`exist`) }) + + it(`Uses env vars`, () => { + cy.visit(`/env-vars`).waitForAPI(`onRouteUpdate`) + + cy.getTestElement(`process.env`).contains(`{}`) + cy.getTestElement(`process.env.EXISTING_VAR`).contains(`"foo bar"`) + cy.getTestElement(`process.env.NOT_EXISTING_VAR`).should(`be.empty`) + }) }) diff --git a/e2e-tests/production-runtime/package.json b/e2e-tests/production-runtime/package.json index 49594e179cd0e..937217f8e0720 100644 --- a/e2e-tests/production-runtime/package.json +++ b/e2e-tests/production-runtime/package.json @@ -21,7 +21,8 @@ "build": "gatsby build", "develop": "gatsby develop", "format": "prettier --write '**/*.js'", - "test": "npm run build && npm run start-server-and-test", + "test": "npm run build && npm run start-server-and-test && npm run test-env-vars", + "test-env-vars": " node __tests__/env-vars.js", "start-server-and-test": "start-server-and-test serve http://localhost:9000 cy:run", "serve": "gatsby serve", "cy:open": "cypress open", diff --git a/e2e-tests/production-runtime/src/pages/env-vars.js b/e2e-tests/production-runtime/src/pages/env-vars.js new file mode 100644 index 0000000000000..e4beb1b0d888a --- /dev/null +++ b/e2e-tests/production-runtime/src/pages/env-vars.js @@ -0,0 +1,29 @@ +import React from 'react' + +import Layout from '../components/layout' + +const UseEnv = ({ heading, envVar }) => ( + +

    {heading}

    +
    +      {JSON.stringify(envVar)}
    +    
    +
    +) + +const SecondPage = () => ( + +

    Using env vars

    + + + +
    +) + +export default SecondPage diff --git a/packages/gatsby/src/utils/webpack.config.js b/packages/gatsby/src/utils/webpack.config.js index 6e6d60f7de3fa..e8c6695d4c6c3 100644 --- a/packages/gatsby/src/utils/webpack.config.js +++ b/packages/gatsby/src/utils/webpack.config.js @@ -67,7 +67,17 @@ module.exports = async ( envObject.PUBLIC_DIR = JSON.stringify(`${process.cwd()}/public`) envObject.BUILD_STAGE = JSON.stringify(stage) - return Object.assign(envObject, gatsbyVarObject) + const mergedEnvVars = Object.assign(envObject, gatsbyVarObject) + + return Object.keys(mergedEnvVars).reduce( + (acc, key) => { + acc[`process.env.${key}`] = mergedEnvVars[key] + return acc + }, + { + "process.env": JSON.stringify({}), + } + ) } function getHmrPath() { @@ -172,7 +182,7 @@ module.exports = async ( // Add a few global variables. Set NODE_ENV to production (enables // optimizations for React) and what the link prefix is (__PATH_PREFIX__). plugins.define({ - "process.env": processEnv(stage, `development`), + ...processEnv(stage, `development`), __PATH_PREFIX__: JSON.stringify( program.prefixPaths ? store.getState().config.pathPrefix : `` ), From b36c5182eed558786cd6fcca03fd28fb2f48a695 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Mon, 19 Nov 2018 21:55:11 +0100 Subject: [PATCH 346/462] chore(release): Publish - gatsby@2.0.51 --- packages/gatsby/CHANGELOG.md | 8 ++++++++ packages/gatsby/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 1a04301168b77..c1eb11bd6373f 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.51](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.50...gatsby@2.0.51) (2018-11-19) + +### Bug Fixes + +- avoid leaking defined env vars when trying to access not defined env vars ([#10030](https://github.com/gatsbyjs/gatsby/issues/10030)) ([8061e3b](https://github.com/gatsbyjs/gatsby/commit/8061e3b)) + ## [2.0.50](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.49...gatsby@2.0.50) (2018-11-15) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 7bf530c33794e..d40dcca6efaeb 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.50", + "version": "2.0.51", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From 1d2a9be6adb24761f123f8c13f4fffc2e167d98b Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Mon, 19 Nov 2018 21:58:25 +0100 Subject: [PATCH 347/462] fix: prefix graphql type names with underscore if it starts with number (#10007) if object or array is under field that starts with number it will cause graphql to fail with: ``` Error: Names must match /^[_a-zA-Z][_a-zA-Z0-9]*$/ but "6E0F4D382F504Ac5837DF8B7C8618485_2" does not. ``` to workaround it - prefix type name with `_` if it starts with number fixes #9950 /cc @phonoman --- .../src/schema/__tests__/infer-graphql-type-test.js | 7 +++++++ packages/gatsby/src/schema/create-type-name.js | 12 +++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/gatsby/src/schema/__tests__/infer-graphql-type-test.js b/packages/gatsby/src/schema/__tests__/infer-graphql-type-test.js index 3a31f22e9ac82..28444eda7e2a7 100644 --- a/packages/gatsby/src/schema/__tests__/infer-graphql-type-test.js +++ b/packages/gatsby/src/schema/__tests__/infer-graphql-type-test.js @@ -87,6 +87,9 @@ describe(`GraphQL type inferance`, () => { "with-hyphen": 2, "with resolver": `1012-11-01`, 123: 42, + 456: { + testingTypeNameCreation: true, + }, aBoolean: true, externalUrl: `https://example.com/awesome.jpg`, domain: `pizza.com`, @@ -242,6 +245,9 @@ describe(`GraphQL type inferance`, () => { with_hyphen with_resolver(formatString:"DD.MM.YYYY") _123 + _456 { + testingTypeNameCreation + } ` ) @@ -254,6 +260,7 @@ describe(`GraphQL type inferance`, () => { expect(result.data.listNode[0].with_resolver).toEqual(`01.11.1012`) expect(result.data.listNode[0]._123).toEqual(42) expect(result.data.listNode[1]._123).toEqual(24) + expect(result.data.listNode[0]._456).toEqual(nodes[0][`456`]) }) describe(`Handles dates`, () => { diff --git a/packages/gatsby/src/schema/create-type-name.js b/packages/gatsby/src/schema/create-type-name.js index 90a2dfbf75773..2e01af34658e6 100644 --- a/packages/gatsby/src/schema/create-type-name.js +++ b/packages/gatsby/src/schema/create-type-name.js @@ -2,8 +2,18 @@ const _ = require(`lodash`) const seenNames = new Map() +const typeNameRestriction = /^[_a-zA-Z][_a-zA-Z0-9]*$/ + module.exports = function createTypeName(name) { - const cameledName = _.camelCase(name) + let cameledName = _.camelCase(name) + + // camelCasing will ensure that name is build from just alphanumeric + // characters, but we still need to ensure that type name + // doesn't start with number (graphql resitriction) + if (!cameledName.match(typeNameRestriction)) { + cameledName = `_` + cameledName + } + if (seenNames.has(cameledName)) { seenNames.set(cameledName, seenNames.get(cameledName) + 1) return `${cameledName}_${seenNames.get(cameledName)}` From 50dba02ec20aacb77903457f4071653b4ea5b0d9 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Mon, 19 Nov 2018 22:01:15 +0100 Subject: [PATCH 348/462] chore(release): Publish - gatsby@2.0.52 --- packages/gatsby/CHANGELOG.md | 8 ++++++++ packages/gatsby/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index c1eb11bd6373f..6dba2652bc1f0 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.52](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.51...gatsby@2.0.52) (2018-11-19) + +### Bug Fixes + +- prefix graphql type names with underscore if it starts with number ([#10007](https://github.com/gatsbyjs/gatsby/issues/10007)) ([1d2a9be](https://github.com/gatsbyjs/gatsby/commit/1d2a9be)), closes [#9950](https://github.com/gatsbyjs/gatsby/issues/9950) + ## [2.0.51](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.50...gatsby@2.0.51) (2018-11-19) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index d40dcca6efaeb..a8b40ca2bb452 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.51", + "version": "2.0.52", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From 8656baef8c092c73510cdab7abd497031cf12f90 Mon Sep 17 00:00:00 2001 From: Dan Shai Date: Tue, 20 Nov 2018 14:08:37 +0200 Subject: [PATCH 349/462] feat(starter): Added gatsbyv2-scientific-blog-machine-learnin starter (#9993) Starter for Machine learning and scientific writing --- docs/starters.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/starters.yml b/docs/starters.yml index 87be1abd5d1cf..898f36643bdfe 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -1231,3 +1231,20 @@ - Bootstrap v4 support - Css Modules support - ESLint, Prettier +- url: https://danshai.github.io/gatsbyv2-scientific-blog-machine-learning/ + repo: https://github.com/DanShai/gatsbyv2-scientific-blog-machine-learning + description: Machine learning ready and scientific blog starter + tags: + - Blog + - Katex + - Tensorflow + - CSV + - Graph + - Linting + - Chart.js + features: + - Write easly your scientific blog with katex and publish your research + - Machine learning ready with tensorflowjs + - Manipulate csv data + - draw with graph mermaid + - display charts with chartjs From 681f3ddf181e3ccb2b9d937c948b90b33fc07bfa Mon Sep 17 00:00:00 2001 From: Greg Borelly Date: Tue, 20 Nov 2018 10:10:57 -0500 Subject: [PATCH 350/462] Adding Narcan, ritual, truebill, smartling, clearme to showcase. (#10018) * Adding Narcan, ritual, truebill, smartling, clearme to showcase. * removing extra / * new line * Fixing indentantion * Changing titles --- docs/sites.yml | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index 2fc5982f1d89c..56428475751d6 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3436,6 +3436,56 @@ built_by: Michael Uloth built_by_url: https://www.michaeluloth.com featured: false +- title: NARCAN + main_url: https://www.narcan.com + url: https://www.narcan.com + description: > + NARCAN Nasal Spray is the first and only FDA-approved nasal form of naloxone for the emergency treatment of a known or suspected opioid overdose. + categories: + - Healthcare + built_by: NARCAN + built_by_url: https://www.narcan.com + featured: false +- title: Ritual + main_url: https://ritual.com + url: https://ritual.com + description: > + Ritual started with a simple question, what exactly is in women's multivitamins? This is the story of what happened when our founder Kat started searching for answers — the story of Ritual. + categories: + - Healthcare + built_by: Ritual + built_by_url: https://ritual.com + featured: false +- title: Truebill + main_url: https://www.truebill.com + url: https://www.truebill.com + description: > + Truebill empowers you to take control of your money. + categories: + - Finance + built_by: Truebill + built_by_url: https://www.truebill.com + featured: false +- title: Smartling + main_url: https://www.smartling.com + url: https://www.smartling.com + description: > + Smartling enables you to automate, manage, and professionally translate content so that you can do more with less. + categories: + - Marketing + built_by: Smartling + built_by_url: https://www.smartling.com + featured: false +- title: Clear + main_url: https://www.clearme.com + url: https://www.clearme.com + description: > + At clear, we’re working toward a future where you are your ID, enabling you to lead an unstoppable life. + categories: + - Security + built_by: Clear + built_by_url: https://www.clearme.com + featured: false - title: VS Code Rocks main_url: "https://vscode.rocks" url: "https://vscode.rocks" From 313190b7674b16bc1ad59c241f2dc53e43f31676 Mon Sep 17 00:00:00 2001 From: Bay Phillips Date: Tue, 20 Nov 2018 11:11:21 -0500 Subject: [PATCH 351/462] fix(gatsby-remark-images-contentful): add in missing colon for the fallback src (#10041) Hey there. I was looking to add in AMP support for my pages, and noticed my Contentful images weren't able to be fetched properly because the URLs were invalid: ``` https//images.ctfassets.net/sk06mmp11skx/6FZZJDW2VGcEMM2sCyKI6w/32a06680dc5ba66c69925befe2ca6ace/costs-estimate.JPG ``` I noticed it was missing a `:`, as were the plugin's tests!. This resolves that. --- .../src/__tests__/__snapshots__/index.js.snap | 4 ++-- packages/gatsby-remark-images-contentful/src/index.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/gatsby-remark-images-contentful/src/__tests__/__snapshots__/index.js.snap b/packages/gatsby-remark-images-contentful/src/__tests__/__snapshots__/index.js.snap index 3a3bbe7eba3f0..be1725544eddb 100644 --- a/packages/gatsby-remark-images-contentful/src/__tests__/__snapshots__/index.js.snap +++ b/packages/gatsby-remark-images-contentful/src/__tests__/__snapshots__/index.js.snap @@ -6,7 +6,7 @@ exports[`it transforms HTML img tags 1`] = ` - \\"quwowooybuqbl6ntboz3\\" + \\"quwowooybuqbl6ntboz3\\" @@ -37,7 +37,7 @@ exports[`it transforms images in markdown 1`] = ` style=\\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\\" alt=\\"image\\" title=\\"\\" - src=\\"https//images.ctfassets.net/rocybtov1ozk/wtrHxeu3zEoEce2MokCSi/73dce36715f16e27cf5ff0d2d97d7dff/quwowooybuqbl6ntboz3.jpg\\" + src=\\"https://images.ctfassets.net/rocybtov1ozk/wtrHxeu3zEoEce2MokCSi/73dce36715f16e27cf5ff0d2d97d7dff/quwowooybuqbl6ntboz3.jpg\\" srcset=\\"srcSet\\" sizes=\\"128px,250px\\" /> diff --git a/packages/gatsby-remark-images-contentful/src/index.js b/packages/gatsby-remark-images-contentful/src/index.js index 3ff033c318f32..1feee08858458 100644 --- a/packages/gatsby-remark-images-contentful/src/index.js +++ b/packages/gatsby-remark-images-contentful/src/index.js @@ -77,7 +77,7 @@ module.exports = async ( // Calculate the paddingBottom % const ratio = `${(1 / responsiveSizesResult.aspectRatio) * 100}%` - const fallbackSrc = `https${node.url}` + const fallbackSrc = `https:${node.url}` const srcSet = responsiveSizesResult.srcSet const presentationWidth = responsiveSizesResult.presentationWidth From 4e7685e86afb30c80d65c1f4ff70a95971cf3693 Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Tue, 20 Nov 2018 10:11:48 -0600 Subject: [PATCH 352/462] chore(release): Publish - gatsby-remark-images-contentful@2.0.4 --- packages/gatsby-remark-images-contentful/CHANGELOG.md | 8 ++++++++ packages/gatsby-remark-images-contentful/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/gatsby-remark-images-contentful/CHANGELOG.md b/packages/gatsby-remark-images-contentful/CHANGELOG.md index ac034cca30f8d..adba03e229830 100644 --- a/packages/gatsby-remark-images-contentful/CHANGELOG.md +++ b/packages/gatsby-remark-images-contentful/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.4](https://github.com/gatsbyjs/gatsby/compare/gatsby-remark-images-contentful@2.0.3...gatsby-remark-images-contentful@2.0.4) (2018-11-20) + +### Bug Fixes + +- **gatsby-remark-images-contentful:** add in missing colon for the fallback src ([#10041](https://github.com/gatsbyjs/gatsby/issues/10041)) ([313190b](https://github.com/gatsbyjs/gatsby/commit/313190b)) + ## [2.0.3](https://github.com/gatsbyjs/gatsby/compare/gatsby-remark-images-contentful@2.0.2...gatsby-remark-images-contentful@2.0.3) (2018-10-24) diff --git a/packages/gatsby-remark-images-contentful/package.json b/packages/gatsby-remark-images-contentful/package.json index e06aa175c6cdb..d4c72d4abc66b 100644 --- a/packages/gatsby-remark-images-contentful/package.json +++ b/packages/gatsby-remark-images-contentful/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-remark-images-contentful", - "version": "2.0.3", + "version": "2.0.4", "description": "Process Images in Contentful markdown so they can use the images API.", "main": "index.js", "scripts": { From 2a4b091a962d64b0fee1c986e58b469658289943 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Chancay=20Ortega?= Date: Tue, 20 Nov 2018 11:28:25 -0500 Subject: [PATCH 353/462] Change description (#10047) --- docs/community/creators.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/community/creators.yml b/docs/community/creators.yml index 9ad6a2cfbd94c..0d31d48af9db0 100644 --- a/docs/community/creators.yml +++ b/docs/community/creators.yml @@ -199,14 +199,17 @@ - name: Ramón Chancay type: individual description: >- - Frontend web developer in Guayaquil Ecuador. Currently at EveryMundo, Before in El Universo, I enjoy building things with code. Organizer and Speaker in Meetups for pizza and beer. 🍕🍻 + Husband and father. + Front-end engineer. + Currently at EveryMundo previously at El Universo. + Nodejs, React and Web performance. location: "Guayaquil, Ecuador" website: "https://ramonchancay.me" github: "https://github.com/devrchancay" image: images/ramon-chancay.png for_hire: true hiring: false - portfolio: false + portfolio: true - name: Kevin Legrand type: individual description: >- From 83b7a18294cb5077c3a5f95e878628967557f33e Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Tue, 20 Nov 2018 17:28:43 +0100 Subject: [PATCH 354/462] fix: update peerDependency, plugins rely on extra arg being passed in API hooks (#10045) Those plugins rely on changes introduced in https://github.com/gatsbyjs/gatsby/pull/9401 which was released in `gatsby@2.0.32` Ref: https://github.com/gatsbyjs/gatsby/pull/9943#issuecomment-440152666 --- packages/gatsby-plugin-jss/package.json | 2 +- packages/gatsby-plugin-styled-components/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/gatsby-plugin-jss/package.json b/packages/gatsby-plugin-jss/package.json index 7ae7425cf70c9..02b0b6984716b 100644 --- a/packages/gatsby-plugin-jss/package.json +++ b/packages/gatsby-plugin-jss/package.json @@ -24,7 +24,7 @@ "license": "MIT", "main": "index.js", "peerDependencies": { - "gatsby": ">2.0.0-alpha" + "gatsby": ">=2.0.32" }, "repository": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-jss", "scripts": { diff --git a/packages/gatsby-plugin-styled-components/package.json b/packages/gatsby-plugin-styled-components/package.json index b3ef8e3bfa72d..f3d131ae06d10 100644 --- a/packages/gatsby-plugin-styled-components/package.json +++ b/packages/gatsby-plugin-styled-components/package.json @@ -24,7 +24,7 @@ "main": "index.js", "peerDependencies": { "babel-plugin-styled-components": ">1.5.0", - "gatsby": ">2.0.0-alpha", + "gatsby": ">=2.0.32", "styled-components": ">= 2.0.0" }, "repository": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-components", From 7bfecf6d601adedacc07950f29a0b6552f4b32be Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Tue, 20 Nov 2018 10:29:05 -0600 Subject: [PATCH 355/462] chore(release): Publish - gatsby-plugin-jss@2.0.4 - gatsby-plugin-styled-components@3.0.3 --- packages/gatsby-plugin-jss/CHANGELOG.md | 8 ++++++++ packages/gatsby-plugin-jss/package.json | 2 +- packages/gatsby-plugin-styled-components/CHANGELOG.md | 8 ++++++++ packages/gatsby-plugin-styled-components/package.json | 2 +- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/gatsby-plugin-jss/CHANGELOG.md b/packages/gatsby-plugin-jss/CHANGELOG.md index dbe1dec46250d..65462291622df 100644 --- a/packages/gatsby-plugin-jss/CHANGELOG.md +++ b/packages/gatsby-plugin-jss/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-jss/compare/gatsby-plugin-jss@2.0.3...gatsby-plugin-jss@2.0.4) (2018-11-20) + +### Bug Fixes + +- update peerDependency, plugins rely on extra arg being passed in API hooks ([#10045](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-jss/issues/10045)) ([83b7a18](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-jss/commit/83b7a18)), closes [/github.com/gatsbyjs/gatsby/pull/9943#issuecomment-440152666](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-jss/issues/issuecomment-440152666) + ## [2.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-jss/compare/gatsby-plugin-jss@2.0.2...gatsby-plugin-jss@2.0.3) (2018-10-29) diff --git a/packages/gatsby-plugin-jss/package.json b/packages/gatsby-plugin-jss/package.json index 02b0b6984716b..9c2c0cedd4cd0 100644 --- a/packages/gatsby-plugin-jss/package.json +++ b/packages/gatsby-plugin-jss/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-jss", "description": "Gatsby plugin that adds SSR support for JSS", - "version": "2.0.3", + "version": "2.0.4", "author": "Vladimir Guguiev ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-styled-components/CHANGELOG.md b/packages/gatsby-plugin-styled-components/CHANGELOG.md index 4f6c99bcd018b..633e915734a59 100644 --- a/packages/gatsby-plugin-styled-components/CHANGELOG.md +++ b/packages/gatsby-plugin-styled-components/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-components/compare/gatsby-plugin-styled-components@3.0.2...gatsby-plugin-styled-components@3.0.3) (2018-11-20) + +### Bug Fixes + +- update peerDependency, plugins rely on extra arg being passed in API hooks ([#10045](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-components/issues/10045)) ([83b7a18](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-components/commit/83b7a18)), closes [/github.com/gatsbyjs/gatsby/pull/9943#issuecomment-440152666](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-components/issues/issuecomment-440152666) + ## [3.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-components/compare/gatsby-plugin-styled-components@3.0.1...gatsby-plugin-styled-components@3.0.2) (2018-11-15) diff --git a/packages/gatsby-plugin-styled-components/package.json b/packages/gatsby-plugin-styled-components/package.json index f3d131ae06d10..da27e9306501e 100644 --- a/packages/gatsby-plugin-styled-components/package.json +++ b/packages/gatsby-plugin-styled-components/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-styled-components", "description": "Gatsby plugin to add support for styled components", - "version": "3.0.2", + "version": "3.0.3", "author": "Guten Ye ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" From 8d3af3f9d880f4c94d46823371257037dac4dd28 Mon Sep 17 00:00:00 2001 From: David Bailey <4248177+davidbailey00@users.noreply.github.com> Date: Tue, 20 Nov 2018 22:03:27 +0000 Subject: [PATCH 356/462] feat(gatsby-plugin-offline): replace no-cache detection with dynamic path whitelist (#9907) * Remove all no-cache code * Remove references to no-cache in offline plugin * Initial work on hybrid navigation handler * Refactor whitelist code to allow it to support onPostPrefetchPathname * Fix service worker detection * Fix IndexedDB race condition * Prevent race conditions + reset whitelist on SW update * Remove unnecessary API handler (onPostPrefetchPathname is called anyway) * Add debugging statements + fix some minor problems * Fix back/forward not working after 404 * Remove unneeded debugging statements * Bundle idb-keyval instead of using an external CDN * Update README * Backport fixes from #9907 * minor fixes for things I copy-pasted wrong * Refactor prefetching so we can detect success --- packages/gatsby-plugin-offline/README.md | 15 +--- packages/gatsby-plugin-offline/package.json | 1 + .../src/gatsby-browser.js | 49 ++++++++--- .../gatsby-plugin-offline/src/gatsby-node.js | 22 ++--- .../gatsby-plugin-offline/src/sw-append.js | 84 ++++++++++++++++++- packages/gatsby/cache-dir/ensure-resources.js | 15 ++-- .../gatsby/cache-dir/load-directly-or-404.js | 72 ---------------- packages/gatsby/cache-dir/loader.js | 49 +++++------ packages/gatsby/cache-dir/navigation.js | 21 ++--- packages/gatsby/cache-dir/prefetch.js | 67 ++++++++++----- packages/gatsby/cache-dir/production-app.js | 82 ++++++++---------- yarn.lock | 5 ++ 12 files changed, 260 insertions(+), 222 deletions(-) delete mode 100644 packages/gatsby/cache-dir/load-directly-or-404.js diff --git a/packages/gatsby-plugin-offline/README.md b/packages/gatsby-plugin-offline/README.md index 809cc3b41db64..d35ee7630cc4f 100644 --- a/packages/gatsby-plugin-offline/README.md +++ b/packages/gatsby-plugin-offline/README.md @@ -24,8 +24,8 @@ plugins: [`gatsby-plugin-offline`] When adding this plugin to your `gatsby-config.js`, you can pass in options to override the default [Workbox](https://developers.google.com/web/tools/workbox/modules/workbox-build) config. -The default config is as follows. Warning, you can break the offline support -and AppCache setup by changing these options so tread carefully. +The default config is as follows. Warning: you can break the offline support by +changing these options, so tread carefully. ```javascript const options = { @@ -37,17 +37,6 @@ const options = { // the default prefix with `pathPrefix`. "/": `${pathPrefix}/`, }, - navigateFallback: `${pathPrefix}/offline-plugin-app-shell-fallback/index.html`, - // Only match URLs without extensions or the query `no-cache=1`. - // So example.com/about/ will pass but - // example.com/about/?no-cache=1 and - // example.com/cheeseburger.jpg will not. - // We only want the service worker to handle our "clean" - // URLs and not any files hosted on the site. - // - // Regex based on http://stackoverflow.com/a/18017805 - navigateFallbackWhitelist: [/^([^.?]*|[^?]*\.([^.?]{5,}|html))(\?.*)?$/], - navigateFallbackBlacklist: [/\?(.+&)?no-cache=1$/], cacheId: `gatsby-plugin-offline`, // Don't cache-bust JS or CSS files, and anything in the static directory, // since these files have unique URLs and their contents will never change diff --git a/packages/gatsby-plugin-offline/package.json b/packages/gatsby-plugin-offline/package.json index 6471db1d46af5..9e23bf885ea51 100644 --- a/packages/gatsby-plugin-offline/package.json +++ b/packages/gatsby-plugin-offline/package.json @@ -9,6 +9,7 @@ "dependencies": { "@babel/runtime": "^7.0.0", "cheerio": "^1.0.0-rc.2", + "idb-keyval": "^3.1.0", "lodash": "^4.17.10", "workbox-build": "^3.6.3" }, diff --git a/packages/gatsby-plugin-offline/src/gatsby-browser.js b/packages/gatsby-plugin-offline/src/gatsby-browser.js index 0f5749e483eb9..947a2bc2649e6 100644 --- a/packages/gatsby-plugin-offline/src/gatsby-browser.js +++ b/packages/gatsby-plugin-offline/src/gatsby-browser.js @@ -1,23 +1,12 @@ exports.registerServiceWorker = () => true -let swNotInstalled = true const prefetchedPathnames = [] - -exports.onPostPrefetchPathname = ({ pathname }) => { - // if SW is not installed, we need to record any prefetches - // that happen so we can then add them to SW cache once installed - if (swNotInstalled && `serviceWorker` in navigator) { - prefetchedPathnames.push(pathname) - } -} +const whitelistedPathnames = [] exports.onServiceWorkerActive = ({ getResourceURLsForPathname, serviceWorker, }) => { - // stop recording prefetch events - swNotInstalled = false - // grab nodes from head of document const nodes = document.querySelectorAll(` head > script[src], @@ -51,4 +40,40 @@ exports.onServiceWorkerActive = ({ document.head.appendChild(link) }) + + serviceWorker.active.postMessage({ + gatsbyApi: `whitelistPathnames`, + pathnames: whitelistedPathnames, + }) +} + +function whitelistPathname(pathname, includesPrefix) { + if (`serviceWorker` in navigator) { + const { serviceWorker } = navigator + + if (serviceWorker.controller !== null) { + serviceWorker.controller.postMessage({ + gatsbyApi: `whitelistPathnames`, + pathnames: [{ pathname, includesPrefix }], + }) + } else { + whitelistedPathnames.push({ pathname, includesPrefix }) + } + } +} + +exports.onPostPrefetchPathname = ({ pathname }) => { + whitelistPathname(pathname, false) + + // if SW is not installed, we need to record any prefetches + // that happen so we can then add them to SW cache once installed + if ( + `serviceWorker` in navigator && + !( + navigator.serviceWorker.controller !== null && + navigator.serviceWorker.controller.state === `activated` + ) + ) { + prefetchedPathnames.push(pathname) + } } diff --git a/packages/gatsby-plugin-offline/src/gatsby-node.js b/packages/gatsby-plugin-offline/src/gatsby-node.js index 892e99eb953dc..c522b426b51f1 100644 --- a/packages/gatsby-plugin-offline/src/gatsby-node.js +++ b/packages/gatsby-plugin-offline/src/gatsby-node.js @@ -79,17 +79,6 @@ exports.onPostBuild = (args, pluginOptions) => { // the default prefix with `pathPrefix`. "/": `${pathPrefix}/`, }, - navigateFallback: `${pathPrefix}/offline-plugin-app-shell-fallback/index.html`, - // Only match URLs without extensions or the query `no-cache=1`. - // So example.com/about/ will pass but - // example.com/about/?no-cache=1 and - // example.com/cheeseburger.jpg will not. - // We only want the service worker to handle our "clean" - // URLs and not any files hosted on the site. - // - // Regex based on http://stackoverflow.com/a/18017805 - navigateFallbackWhitelist: [/^([^.?]*|[^?]*\.([^.?]{5,}|html))(\?.*)?$/], - navigateFallbackBlacklist: [/\?(.+&)?no-cache=1$/], cacheId: `gatsby-plugin-offline`, // Don't cache-bust JS or CSS files, and anything in the static directory, // since these files have unique URLs and their contents will never change @@ -122,15 +111,22 @@ exports.onPostBuild = (args, pluginOptions) => { delete pluginOptions.plugins const combinedOptions = _.defaults(pluginOptions, options) + const idbKeyvalFile = `idb-keyval-iife.min.js` + const idbKeyvalSource = require.resolve(`idb-keyval/dist/${idbKeyvalFile}`) + const idbKeyvalDest = `public/${idbKeyvalFile}` + fs.createReadStream(idbKeyvalSource).pipe(fs.createWriteStream(idbKeyvalDest)) + const swDest = `public/sw.js` return workboxBuild .generateSW({ swDest, ...combinedOptions }) .then(({ count, size, warnings }) => { if (warnings) warnings.forEach(warning => console.warn(warning)) - const swAppend = fs.readFileSync(`${__dirname}/sw-append.js`) - fs.appendFileSync(`public/sw.js`, swAppend) + const swAppend = fs + .readFileSync(`${__dirname}/sw-append.js`, `utf8`) + .replace(/%pathPrefix%/g, pathPrefix) + fs.appendFileSync(`public/sw.js`, swAppend) console.log( `Generated ${swDest}, which will precache ${count} files, totaling ${size} bytes.` ) diff --git a/packages/gatsby-plugin-offline/src/sw-append.js b/packages/gatsby-plugin-offline/src/sw-append.js index 172f1ae6a468c..0d6c4a191d467 100644 --- a/packages/gatsby-plugin-offline/src/sw-append.js +++ b/packages/gatsby-plugin-offline/src/sw-append.js @@ -1 +1,83 @@ -// noop +/* global importScripts, workbox, idbKeyval */ + +importScripts(`idb-keyval-iife.min.js`) +const WHITELIST_KEY = `custom-navigation-whitelist` + +const navigationRoute = new workbox.routing.NavigationRoute(({ event }) => { + const { pathname } = new URL(event.request.url) + + return idbKeyval.get(WHITELIST_KEY).then((customWhitelist = []) => { + // Respond with the offline shell if we match the custom whitelist + if (customWhitelist.includes(pathname)) { + const offlineShell = `%pathPrefix%/offline-plugin-app-shell-fallback/index.html` + const cacheName = workbox.core.cacheNames.precache + + return caches.match(offlineShell, { cacheName }) + } + + return fetch(event.request) + }) +}) + +workbox.routing.registerRoute(navigationRoute) + +let updatingWhitelist = null + +function rawWhitelistPathnames(pathnames) { + if (updatingWhitelist !== null) { + // Prevent the whitelist from being updated twice at the same time + return updatingWhitelist.then(() => rawWhitelistPathnames(pathnames)) + } + + updatingWhitelist = idbKeyval + .get(WHITELIST_KEY) + .then((customWhitelist = []) => { + pathnames.forEach(pathname => { + if (!customWhitelist.includes(pathname)) customWhitelist.push(pathname) + }) + + return idbKeyval.set(WHITELIST_KEY, customWhitelist) + }) + .then(() => { + updatingWhitelist = null + }) + + return updatingWhitelist +} + +function rawResetWhitelist() { + if (updatingWhitelist !== null) { + return updatingWhitelist.then(() => rawResetWhitelist()) + } + + updatingWhitelist = idbKeyval.set(WHITELIST_KEY, []).then(() => { + updatingWhitelist = null + }) + + return updatingWhitelist +} + +const messageApi = { + whitelistPathnames(event) { + let { pathnames } = event.data + + pathnames = pathnames.map(({ pathname, includesPrefix }) => { + if (!includesPrefix) { + return `%pathPrefix%${pathname}` + } else { + return pathname + } + }) + + event.waitUntil(rawWhitelistPathnames(pathnames)) + }, + + resetWhitelist(event) { + event.waitUntil(rawResetWhitelist()) + }, +} + +self.addEventListener(`message`, event => { + const { gatsbyApi } = event.data + if (gatsbyApi) messageApi[gatsbyApi](event) +}) diff --git a/packages/gatsby/cache-dir/ensure-resources.js b/packages/gatsby/cache-dir/ensure-resources.js index c94146cd181c0..c05a82673ae29 100644 --- a/packages/gatsby/cache-dir/ensure-resources.js +++ b/packages/gatsby/cache-dir/ensure-resources.js @@ -2,7 +2,6 @@ import React from "react" import PropTypes from "prop-types" import loader from "./loader" import shallowCompare from "shallow-compare" -import { getRedirectUrl } from "./load-directly-or-404" // Pass pathname in as prop. // component will try fetching resources. If they exist, @@ -94,15 +93,19 @@ class EnsureResources extends React.Component { } render() { + // This should only occur if the network is offline, or if the + // path is nonexistent and there's no custom 404 page. if ( process.env.NODE_ENV === `production` && !(this.state.pageResources && this.state.pageResources.json) ) { - // This should only occur if there's no custom 404 page - const url = getRedirectUrl(this.state.location.href) - if (url) { - window.location.replace(url) - } + // Do this, rather than simply `window.location.reload()`, so that + // pressing the back/forward buttons work - otherwise Reach Router will + // try to handle back/forward navigation, causing the URL to change but + // the page displayed to stay the same. + const originalUrl = new URL(location.href) + window.history.replaceState({}, `404`, `${location.pathname}?gatsby-404`) + window.location.replace(originalUrl) return null } diff --git a/packages/gatsby/cache-dir/load-directly-or-404.js b/packages/gatsby/cache-dir/load-directly-or-404.js deleted file mode 100644 index f232c3f55c114..0000000000000 --- a/packages/gatsby/cache-dir/load-directly-or-404.js +++ /dev/null @@ -1,72 +0,0 @@ -export function getRedirectUrl(path) { - const url = new URL(path, window.location.origin) - - // This should never happen, but check just in case - otherwise, there would - // be an infinite redirect loop - if (url.search.match(/\?(.*&)?no-cache=1(&|$)/)) { - console.error( - `Found no-cache=1 while attempting to load a page directly; ` + - `this is likely due to a bug in Gatsby, or a misconfiguration in your project.` - ) - return false - } - - // Append the appropriate query to the URL. - if (url.search) { - url.search += `&no-cache=1` - } else { - url.search = `?no-cache=1` - } - - return url -} - -/** - * When other parts of the code can't find resources for a page, they load the 404 page's - * resources (if it exists) and then pass them here. This module then does the following: - * 1. Checks if 404 pages resources exist. If not, just navigate directly to the desired URL - * to show whatever server 404 page exists. - * 2. Try fetching the desired page to see if it exists on the server but we - * were just prevented from seeing it due to loading the site from a SW. If this is the case, - * trigger a hard reload to grab that page from the server. - * 3. If the page doesn't exist, show the normal 404 page component. - * 4. If the fetch failed (generally meaning we're offline), then navigate anyways to show - * either the browser's offline page or whatever the server error is. - */ -export default function(resources, path, replaceOnSuccess = false) { - return new Promise((resolve, reject) => { - const url = getRedirectUrl(path) - if (!url) { - reject(url) - return - } - - // Always navigate directly if a custom 404 page doesn't exist. - if (!resources) { - window.location = url - } else { - // Now test if the page is available directly - fetch(url.href) - .then(response => { - if (response.status !== 404) { - // Redirect there if there isn't a 404. If a different HTTP - // error occurs, the appropriate error message will be - // displayed after loading the page directly. - if (replaceOnSuccess) { - window.location.replace(url) - } else { - window.location = url - } - } else { - // If a 404 occurs, show the custom 404 page. - resolve() - } - }) - .catch(() => { - // If an error occurs (usually when offline), navigate to the - // page anyway to show the browser's proper offline error page - window.location = url - }) - } - }) -} diff --git a/packages/gatsby/cache-dir/loader.js b/packages/gatsby/cache-dir/loader.js index 392d12e285477..23a3dde924a7e 100644 --- a/packages/gatsby/cache-dir/loader.js +++ b/packages/gatsby/cache-dir/loader.js @@ -1,6 +1,5 @@ import pageFinderFactory from "./find-page" import emitter from "./emitter" -import stripPrefix from "./strip-prefix" import prefetchHelper from "./prefetch" const preferDefault = m => (m && m.default) || m @@ -16,7 +15,6 @@ let fetchingPageResourceMapPromise = null let fetchedPageResourceMap = false let apiRunner const failedPaths = {} -const failedResources = {} const MAX_HISTORY = 5 const jsonPromiseStore = {} @@ -72,6 +70,7 @@ const fetchResource = resourceName => { if (req.status === 200) { resolve(JSON.parse(req.responseText)) } else { + delete jsonPromiseStore[resourceName] reject() } } @@ -90,7 +89,8 @@ const fetchResource = resourceName => { const fetchPromise = resourceFunction() let failed = false return fetchPromise - .catch(() => { + .catch(e => { + console.error(e) failed = true }) .then(component => { @@ -99,10 +99,6 @@ const fetchResource = resourceName => { succeeded: !failed, }) - if (!failedResources[resourceName]) { - failedResources[resourceName] = failed - } - fetchHistory = fetchHistory.slice(-MAX_HISTORY) resolve(component) @@ -112,10 +108,12 @@ const fetchResource = resourceName => { const prefetchResource = resourceName => { if (resourceName.slice(0, 12) === `component---`) { - createComponentUrls(resourceName).forEach(url => prefetchHelper(url)) + return Promise.all( + createComponentUrls(resourceName).map(url => prefetchHelper(url)) + ) } else { const url = createJsonURL(jsonDataPaths[resourceName]) - prefetchHelper(url) + return prefetchHelper(url) } } @@ -148,14 +146,14 @@ const handleResourceLoadError = (path, message) => { const onPrefetchPathname = pathname => { if (!prefetchTriggered[pathname]) { - apiRunner(`onPrefetchPathname`, { pathname: pathname }) + apiRunner(`onPrefetchPathname`, { pathname }) prefetchTriggered[pathname] = true } } const onPostPrefetchPathname = pathname => { if (!prefetchCompleted[pathname]) { - apiRunner(`onPostPrefetchPathname`, { pathname: pathname }) + apiRunner(`onPostPrefetchPathname`, { pathname }) prefetchCompleted[pathname] = true } } @@ -188,12 +186,10 @@ const queue = { // Hovering on a link is a very strong indication the user is going to // click on it soon so let's start prefetching resources for this // pathname. - hovering: rawPath => { - const path = stripPrefix(rawPath, __PATH_PREFIX__) + hovering: path => { queue.getResourcesForPathname(path) }, - enqueue: rawPath => { - const path = stripPrefix(rawPath, __PATH_PREFIX__) + enqueue: path => { if (!apiRunner) console.error(`Run setApiRunnerForLoader() before enqueing paths`) @@ -218,7 +214,7 @@ const queue = { ) { // If page wasn't found check and we didn't fetch resources map for // all pages, wait for fetch to complete and try find page again - return fetchPageResourceMap().then(() => queue.enqueue(rawPath)) + return fetchPageResourceMap().then(() => queue.enqueue(path)) } if (!page) { @@ -234,13 +230,15 @@ const queue = { // Prefetch resources. if (process.env.NODE_ENV === `production`) { - prefetchResource(page.jsonName) - prefetchResource(page.componentChunkName) + Promise.all([ + prefetchResource(page.jsonName), + prefetchResource(page.componentChunkName), + ]).then(() => { + // Tell plugins the path has been successfully prefetched + onPostPrefetchPathname(path) + }) } - // Tell plugins the path has been successfully prefetched - onPostPrefetchPathname(path) - return true }, @@ -350,6 +348,9 @@ const queue = { page, pageResources, }) + // Tell plugins the path has been successfully prefetched + onPostPrefetchPathname(path) + resolve(pageResources) }) } else { @@ -378,6 +379,9 @@ const queue = { pageResources, }) + // Tell plugins the path has been successfully prefetched + onPostPrefetchPathname(path) + if (doingInitialRender) { // We got all resources needed for first mount, // we can fetch resoures for all pages. @@ -385,9 +389,6 @@ const queue = { } }) } - - // Tell plugins the path has been successfully prefetched - onPostPrefetchPathname(path) }), } diff --git a/packages/gatsby/cache-dir/navigation.js b/packages/gatsby/cache-dir/navigation.js index 3eb6728c45298..1932dfc64d491 100644 --- a/packages/gatsby/cache-dir/navigation.js +++ b/packages/gatsby/cache-dir/navigation.js @@ -6,7 +6,6 @@ import { apiRunner } from "./api-runner-browser" import emitter from "./emitter" import { navigate as reachNavigate } from "@reach/router" import parsePath from "./parse-path" -import loadDirectlyOr404 from "./load-directly-or-404" // Convert to a map for faster lookup in maybeRedirect() const redirectMap = redirects.reduce((map, redirect) => { @@ -66,8 +65,12 @@ const navigate = (to, options = {}) => { pathname = parsePath(to).pathname } - // If we had a service worker update, no matter the path, reload window + // If we had a service worker update, no matter the path, reload window and + // reset the pathname whitelist if (window.GATSBY_SW_UPDATED) { + const { controller } = navigator.serviceWorker + controller.postMessage({ gatsbyApi: `resetWhitelist` }) + window.location = pathname return } @@ -82,18 +85,8 @@ const navigate = (to, options = {}) => { }, 1000) loader.getResourcesForPathname(pathname).then(pageResources => { - if ( - (!pageResources || pageResources.page.path === `/404.html`) && - process.env.NODE_ENV === `production` - ) { - clearTimeout(timeoutId) - loadDirectlyOr404(pageResources, to).then(() => - reachNavigate(to, options) - ) - } else { - reachNavigate(to, options) - clearTimeout(timeoutId) - } + reachNavigate(to, options) + clearTimeout(timeoutId) }) } diff --git a/packages/gatsby/cache-dir/prefetch.js b/packages/gatsby/cache-dir/prefetch.js index 82c119ccb5a43..1d6322d8aeeca 100644 --- a/packages/gatsby/cache-dir/prefetch.js +++ b/packages/gatsby/cache-dir/prefetch.js @@ -12,23 +12,44 @@ const support = function(feature) { } return false } + const linkPrefetchStrategy = function(url) { - if (typeof document === `undefined`) { - return - } - const link = document.createElement(`link`) - link.setAttribute(`rel`, `prefetch`) - link.setAttribute(`href`, url) - const parentElement = - document.getElementsByTagName(`head`)[0] || - document.getElementsByName(`script`)[0].parentNode - parentElement.appendChild(link) + return new Promise((resolve, reject) => { + if (typeof document === `undefined`) { + reject() + return + } + + const link = document.createElement(`link`) + link.setAttribute(`rel`, `prefetch`) + link.setAttribute(`href`, url) + + link.onload = resolve + link.onerror = reject + + const parentElement = + document.getElementsByTagName(`head`)[0] || + document.getElementsByName(`script`)[0].parentNode + parentElement.appendChild(link) + }) } + const xhrPrefetchStrategy = function(url) { - const req = new XMLHttpRequest() - req.open(`GET`, url, true) - req.withCredentials = true - req.send(null) + return new Promise((resolve, reject) => { + const req = new XMLHttpRequest() + req.open(`GET`, url, true) + req.withCredentials = true + + req.onload = () => { + if (req.status === 200) { + resolve() + } else { + reject() + } + } + + req.send(null) + }) } const supportedPrefetchStrategy = support(`prefetch`) @@ -38,11 +59,19 @@ const supportedPrefetchStrategy = support(`prefetch`) const preFetched = {} const prefetch = function(url) { - if (preFetched[url]) { - return - } - preFetched[url] = true - supportedPrefetchStrategy(url) + return new Promise(resolve => { + if (preFetched[url]) { + resolve() + return + } + + supportedPrefetchStrategy(url) + .then(() => { + resolve() + preFetched[url] = true + }) + .catch(() => {}) // 404s are logged to the console anyway + }) } export default prefetch diff --git a/packages/gatsby/cache-dir/production-app.js b/packages/gatsby/cache-dir/production-app.js index 0770164274baa..a3d51f0579a20 100644 --- a/packages/gatsby/cache-dir/production-app.js +++ b/packages/gatsby/cache-dir/production-app.js @@ -15,7 +15,6 @@ window.___emitter = emitter import PageRenderer from "./page-renderer" import asyncRequires from "./async-requires" import loader, { setApiRunnerForLoader } from "./loader" -import loadDirectlyOr404 from "./load-directly-or-404" import EnsureResources from "./ensure-resources" window.asyncRequires = asyncRequires @@ -85,56 +84,43 @@ apiRunnerAsync(`onClientEntry`).then(() => { ) } - loader - .getResourcesForPathname(browserLoc.pathname) - .then(resources => { - if (!resources || resources.page.path === `/404.html`) { - return loadDirectlyOr404( - resources, - browserLoc.pathname + browserLoc.search + browserLoc.hash, - true - ) - } - - return null - }) - .then(() => { - const Root = () => - createElement( - Router, - { - basepath: __PATH_PREFIX__, - }, - createElement(RouteHandler, { path: `/*` }) - ) + loader.getResourcesForPathname(browserLoc.pathname).then(() => { + const Root = () => + createElement( + Router, + { + basepath: __PATH_PREFIX__, + }, + createElement(RouteHandler, { path: `/*` }) + ) - const WrappedRoot = apiRunner( - `wrapRootElement`, - { element: }, - , - ({ result }) => { - return { element: result } - } - ).pop() + const WrappedRoot = apiRunner( + `wrapRootElement`, + { element: }, + , + ({ result }) => { + return { element: result } + } + ).pop() - let NewRoot = () => WrappedRoot + let NewRoot = () => WrappedRoot - const renderer = apiRunner( - `replaceHydrateFunction`, - undefined, - ReactDOM.hydrate - )[0] + const renderer = apiRunner( + `replaceHydrateFunction`, + undefined, + ReactDOM.hydrate + )[0] - domReady(() => { - renderer( - , - typeof window !== `undefined` - ? document.getElementById(`___gatsby`) - : void 0, - () => { - apiRunner(`onInitialClientRender`) - } - ) - }) + domReady(() => { + renderer( + , + typeof window !== `undefined` + ? document.getElementById(`___gatsby`) + : void 0, + () => { + apiRunner(`onInitialClientRender`) + } + ) }) + }) }) diff --git a/yarn.lock b/yarn.lock index ea7da8fc28962..1e54ed20973c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9862,6 +9862,11 @@ icss-utils@^2.1.0: dependencies: postcss "^6.0.1" +idb-keyval@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-3.1.0.tgz#cce9ed320734446784d52ed398c4b075a4273f51" + integrity sha512-iFwFN5n00KNNnVxlOOK280SJJfXWY7pbMUOQXdIXehvvc/mGCV/6T2Ae+Pk2KwAkkATDTwfMavOiDH5lrJKWXQ== + ieee754@^1.1.4: version "1.1.12" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" From d46cdeb667b2c08a09723e5047d73941543d8ee0 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Tue, 20 Nov 2018 23:11:55 +0100 Subject: [PATCH 357/462] chore(gatsby-plugin-offline): update peerDependency of gatsby for next release --- packages/gatsby-plugin-offline/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby-plugin-offline/package.json b/packages/gatsby-plugin-offline/package.json index 9e23bf885ea51..ea8072e45f76c 100644 --- a/packages/gatsby-plugin-offline/package.json +++ b/packages/gatsby-plugin-offline/package.json @@ -30,7 +30,7 @@ "license": "MIT", "main": "index.js", "peerDependencies": { - "gatsby": ">=2.0.20" + "gatsby": ">=2.0.53" }, "repository": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline", "scripts": { From 47248362cc1665d36299785fc4fe11121e076ac2 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Tue, 20 Nov 2018 23:15:04 +0100 Subject: [PATCH 358/462] chore(release): Publish - gatsby-plugin-offline@2.0.16 - gatsby@2.0.53 --- packages/gatsby-plugin-offline/CHANGELOG.md | 8 ++++++++ packages/gatsby-plugin-offline/package.json | 2 +- packages/gatsby/CHANGELOG.md | 8 ++++++++ packages/gatsby/package.json | 2 +- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/gatsby-plugin-offline/CHANGELOG.md b/packages/gatsby-plugin-offline/CHANGELOG.md index d37552eb1851c..62d1a240ce85e 100644 --- a/packages/gatsby-plugin-offline/CHANGELOG.md +++ b/packages/gatsby-plugin-offline/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.16](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/compare/gatsby-plugin-offline@2.0.15...gatsby-plugin-offline@2.0.16) (2018-11-20) + +### Features + +- **gatsby-plugin-offline:** replace no-cache detection with dynamic path whitelist ([#9907](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/issues/9907)) ([8d3af3f](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/commit/8d3af3f)) + ## [2.0.15](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/compare/gatsby-plugin-offline@2.0.14...gatsby-plugin-offline@2.0.15) (2018-11-14) diff --git a/packages/gatsby-plugin-offline/package.json b/packages/gatsby-plugin-offline/package.json index ea8072e45f76c..d3940feca2bc8 100644 --- a/packages/gatsby-plugin-offline/package.json +++ b/packages/gatsby-plugin-offline/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-offline", "description": "Gatsby plugin which sets up a site to be able to run offline", - "version": "2.0.15", + "version": "2.0.16", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 6dba2652bc1f0..aafc77035bd86 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.53](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.52...gatsby@2.0.53) (2018-11-20) + +### Features + +- **gatsby-plugin-offline:** replace no-cache detection with dynamic path whitelist ([#9907](https://github.com/gatsbyjs/gatsby/issues/9907)) ([8d3af3f](https://github.com/gatsbyjs/gatsby/commit/8d3af3f)) + ## [2.0.52](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.51...gatsby@2.0.52) (2018-11-19) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index a8b40ca2bb452..d1799b05b6474 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.52", + "version": "2.0.53", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From 905e96699e1e86d301a316148edfac26c815f97e Mon Sep 17 00:00:00 2001 From: Ramon Date: Tue, 20 Nov 2018 20:43:31 -0200 Subject: [PATCH 359/462] docs: fix Create a Gatsby site link (#10051) In the [Set Up Your Development Environment](https://www.gatsbyjs.org/tutorial/part-zero/) page, the link with label "Create a Gatsby site" (sidebar) refers to #create-a-site instead of #create-a-gatsby-site. --- www/src/data/sidebars/tutorial-links.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/src/data/sidebars/tutorial-links.yaml b/www/src/data/sidebars/tutorial-links.yaml index 5a95f7bf9b04e..7d789549b8212 100644 --- a/www/src/data/sidebars/tutorial-links.yaml +++ b/www/src/data/sidebars/tutorial-links.yaml @@ -19,7 +19,7 @@ - title: Install Gatsby CLI link: /tutorial/part-zero/#install-gatsby-cli - title: Create a Gatsby site - link: /tutorial/part-zero/#create-a-site + link: /tutorial/part-zero/#create-a-gatsby-site - title: Set up a code editor link: /tutorial/part-zero/#set-up-a-code-editor - title: 1. Get to know Gatsby building blocks From 59ee6d33dee0eb3ebf579ab1b70a651ea06640d7 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Wed, 21 Nov 2018 02:02:32 +0100 Subject: [PATCH 360/462] chore(www): update gatsby and gatsby-plugin-offline (#10054) just to trigger dep reinstallation for our build runner --- www/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/package.json b/www/package.json index 218d8b4e6e164..c3c5d18989f81 100644 --- a/www/package.json +++ b/www/package.json @@ -11,7 +11,7 @@ "emotion": "^9.2.12", "emotion-server": "^9.2.12", "fuse.js": "^3.2.0", - "gatsby": "^2.0.11", + "gatsby": "^2.0.53", "gatsby-image": "^2.0.5", "gatsby-plugin-canonical-urls": "^2.0.5", "gatsby-plugin-catch-links": "^2.0.2", @@ -26,7 +26,7 @@ "gatsby-plugin-netlify": "^2.0.0", "gatsby-plugin-netlify-cache": "^0.1.0", "gatsby-plugin-nprogress": "^2.0.5", - "gatsby-plugin-offline": "^2.0.5", + "gatsby-plugin-offline": "^2.0.16", "gatsby-plugin-react-helmet": "^3.0.0", "gatsby-plugin-sharp": "^2.0.5", "gatsby-plugin-sitemap": "^2.0.1", From 66b2012c9b65880daab90f2adcef0e0b5022f571 Mon Sep 17 00:00:00 2001 From: Prasad Seth Date: Wed, 21 Nov 2018 14:59:40 +0530 Subject: [PATCH 361/462] added a new website (#10053) added a new website to showcase --- docs/sites.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index 56428475751d6..c228a42e3d819 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3507,3 +3507,11 @@ categories: - Marketing - IOT +- title: freeCodeCamp curriculum + main_url: "https://learn.freecodecamp.org" + url: "https://learn.freecodecamp.org" + featured: false + description: Learn to code with free online courses, programming projects, and interview preparation for developer jobs. + categories: + - Web Development + - Learning From 8d07c2f0345485bcdf62ffb21fe059d0155f5af4 Mon Sep 17 00:00:00 2001 From: czakarian <31866115+czakarian@users.noreply.github.com> Date: Wed, 21 Nov 2018 01:30:17 -0800 Subject: [PATCH 362/462] Fix typo in README.md (#10056) --- www/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/README.md b/www/README.md index 432a97c1ea1ac..542b35acac568 100644 --- a/www/README.md +++ b/www/README.md @@ -25,4 +25,4 @@ The `.env.development` file is ignored by git. Your token should never be commit ## Screenshots placeholder -If you are not working on starter or site showcase it might be beneficial to use placeholder image instead of actual screenshots. It will skip downloading screenshots and generating responsive images for all screenshots and replace them with placeholder image. Check [`gatsby-transformer-screenshot` docs](http://www.gatsbyjs.org/packages/gatsby-transformer-screenshot#placeholder-image) to learn how to use it. +If you are not working on starter or site showcase, it might be beneficial to use a placeholder image instead of actual screenshots. It will skip downloading screenshots and generating responsive images for all screenshots and replace them with a placeholder image. Check [`gatsby-transformer-screenshot` docs](http://www.gatsbyjs.org/packages/gatsby-transformer-screenshot#placeholder-image) to learn how to use it. From 54f6a85b1a2743207d3a54c6075ff37ac4075b2f Mon Sep 17 00:00:00 2001 From: Martin Campbell Date: Wed, 21 Nov 2018 13:02:38 +0000 Subject: [PATCH 363/462] fix(gatsby-plugin-sharp): use actions provided, don't assume Gatsby module location. (#9986) The gatsby module resolve by require might not be the gatsby module that is executing. This can occur in mono-repo configurations. This will prevent the Redux store from receiving the job actions and the bootstrap process will complete without waiting for all images to be processed. This can cause the build to finish without all images being generated. Fixes #9984. --- packages/gatsby-plugin-sharp/src/gatsby-node.js | 6 ++++++ packages/gatsby-plugin-sharp/src/index.js | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/gatsby-plugin-sharp/src/gatsby-node.js b/packages/gatsby-plugin-sharp/src/gatsby-node.js index aaf6b34ae98f7..98c258030c6e4 100644 --- a/packages/gatsby-plugin-sharp/src/gatsby-node.js +++ b/packages/gatsby-plugin-sharp/src/gatsby-node.js @@ -1,3 +1,9 @@ +const { setBoundActionCreators } = require(`./index`) + +exports.onPreInit = ({ actions }) => { + setBoundActionCreators(actions) +} + // TODO // exports.formatJobMessage = jobs => { // return { diff --git a/packages/gatsby-plugin-sharp/src/index.js b/packages/gatsby-plugin-sharp/src/index.js index cda7bf9b51548..baf2d06aed4d5 100644 --- a/packages/gatsby-plugin-sharp/src/index.js +++ b/packages/gatsby-plugin-sharp/src/index.js @@ -30,7 +30,16 @@ const getImageSize = file => { } const duotone = require(`./duotone`) -const { boundActionCreators } = require(`gatsby/dist/redux/actions`) + +// Bound action creators should be set when passed to onPreInit in gatsby-node. +// ** It is NOT safe to just directly require the gatsby module **. +// There is no guarantee that the module resolved is the module executing! +// This can occur in mono repos depending on how dependencies have been hoisted. +// The direct require has been left only to avoid breaking changes. +let { boundActionCreators } = require(`gatsby/dist/redux/actions`) +exports.setBoundActionCreators = actions => { + boundActionCreators = actions +} // Promisify the sharp prototype (methods) to promisify the alternative (for // raw) callback-accepting toBuffer(...) method From 656b006c71c8d46fca24a5772e662c0208098ec9 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Wed, 21 Nov 2018 14:14:17 +0100 Subject: [PATCH 364/462] chore(release): Publish - gatsby-plugin-sharp@2.0.13 - gatsby-source-contentful@2.0.15 - gatsby-transformer-sqip@2.0.8 --- packages/gatsby-plugin-sharp/CHANGELOG.md | 8 ++++++++ packages/gatsby-plugin-sharp/package.json | 2 +- packages/gatsby-source-contentful/CHANGELOG.md | 6 ++++++ packages/gatsby-source-contentful/package.json | 4 ++-- packages/gatsby-transformer-sqip/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-sqip/package.json | 4 ++-- 6 files changed, 25 insertions(+), 5 deletions(-) diff --git a/packages/gatsby-plugin-sharp/CHANGELOG.md b/packages/gatsby-plugin-sharp/CHANGELOG.md index 9f5649b6f7072..66dc1bc408084 100644 --- a/packages/gatsby-plugin-sharp/CHANGELOG.md +++ b/packages/gatsby-plugin-sharp/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.13](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sharp/compare/gatsby-plugin-sharp@2.0.12...gatsby-plugin-sharp@2.0.13) (2018-11-21) + +### Bug Fixes + +- **gatsby-plugin-sharp:** use actions provided, don't assume Gatsby module location. ([#9986](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sharp/issues/9986)) ([54f6a85](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sharp/commit/54f6a85)), closes [#9984](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sharp/issues/9984) + ## [2.0.12](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sharp/compare/gatsby-plugin-sharp@2.0.11...gatsby-plugin-sharp@2.0.12) (2018-11-06) diff --git a/packages/gatsby-plugin-sharp/package.json b/packages/gatsby-plugin-sharp/package.json index 2aa0042d1584f..73db2d869a99d 100644 --- a/packages/gatsby-plugin-sharp/package.json +++ b/packages/gatsby-plugin-sharp/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-sharp", "description": "Wrapper of the Sharp image manipulation library for Gatsby plugins", - "version": "2.0.12", + "version": "2.0.13", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-source-contentful/CHANGELOG.md b/packages/gatsby-source-contentful/CHANGELOG.md index 3657cc4565d08..05c8bdb4ed997 100644 --- a/packages/gatsby-source-contentful/CHANGELOG.md +++ b/packages/gatsby-source-contentful/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.15](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful/compare/gatsby-source-contentful@2.0.14...gatsby-source-contentful@2.0.15) (2018-11-21) + +**Note:** Version bump only for package gatsby-source-contentful + ## [2.0.14](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful/compare/gatsby-source-contentful@2.0.13...gatsby-source-contentful@2.0.14) (2018-11-12) diff --git a/packages/gatsby-source-contentful/package.json b/packages/gatsby-source-contentful/package.json index 4da5510b3794d..c250d9e3cb42b 100644 --- a/packages/gatsby-source-contentful/package.json +++ b/packages/gatsby-source-contentful/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-contentful", "description": "Gatsby source plugin for building websites using the Contentful CMS as a data source", - "version": "2.0.14", + "version": "2.0.15", "author": "Marcus Ericsson (mericsson.com)", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "contentful": "^6.1.0", "deep-map": "^1.5.0", "fs-extra": "^4.0.2", - "gatsby-plugin-sharp": "^2.0.12", + "gatsby-plugin-sharp": "^2.0.13", "is-online": "^7.0.0", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.10", diff --git a/packages/gatsby-transformer-sqip/CHANGELOG.md b/packages/gatsby-transformer-sqip/CHANGELOG.md index 8d951368b4ec3..a84a6e59c3e2b 100644 --- a/packages/gatsby-transformer-sqip/CHANGELOG.md +++ b/packages/gatsby-transformer-sqip/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.8](https://github.com/gatsbyjs/gatsby/compare/gatsby-transformer-sqip@2.0.7...gatsby-transformer-sqip@2.0.8) (2018-11-21) + +**Note:** Version bump only for package gatsby-transformer-sqip + ## [2.0.7](https://github.com/gatsbyjs/gatsby/compare/gatsby-transformer-sqip@2.0.6...gatsby-transformer-sqip@2.0.7) (2018-11-06) diff --git a/packages/gatsby-transformer-sqip/package.json b/packages/gatsby-transformer-sqip/package.json index 6427f1785a970..dcc4a938d7d1f 100644 --- a/packages/gatsby-transformer-sqip/package.json +++ b/packages/gatsby-transformer-sqip/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-sqip", "description": "Generates geometric primitive version of images", - "version": "2.0.7", + "version": "2.0.8", "author": "Benedikt Rötsch ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -10,7 +10,7 @@ "@babel/runtime": "^7.0.0", "axios": "^0.18.0", "fs-extra": "^4.0.2", - "gatsby-plugin-sharp": "^2.0.12", + "gatsby-plugin-sharp": "^2.0.13", "mini-svg-data-uri": "^1.0.0", "p-queue": "^2.3.0", "sqip": "^0.3.0" From 3ae518c5bdc3bb9f8b2953e5700b4c47e19e6b3f Mon Sep 17 00:00:00 2001 From: Alec Hill Date: Wed, 21 Nov 2018 13:51:06 +0000 Subject: [PATCH 365/462] Adding Tandem website to sites list (#10065) Adds https://tandem.co.uk to sites list --- docs/sites.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index c228a42e3d819..20ffa37b1262d 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3515,3 +3515,14 @@ categories: - Web Development - Learning +- title: Tandem + main_url: "https://tandem.co.uk" + url: "https://tandem.co.uk/the-app" + description: > + We're on a mission to free you of money misery. Our app, card and savings account are designed to help you spend less time worrying about money and more time enjoying life. + categories: + - Finance + - App + built_by: Tandem + built_by_url: https://github.com/tandembank + featured: false From ec2cef3fd502fcde59f5beed49e898007a36465c Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Wed, 21 Nov 2018 14:52:26 +0100 Subject: [PATCH 366/462] chore(gatsby): remove unused nyc dependency (#10063) --- .gitignore | 1 - benchmarks/create-pages/.gitignore | 3 - benchmarks/markdown/.gitignore | 3 - .../using-gatsby-source-graphql/.gitignore | 3 - examples/using-local-plugins/.gitignore | 3 - examples/using-typescript/.gitignore | 5 +- examples/using-unstructured-data/.gitignore | 3 - flow-typed/npm/nyc_vx.x.x.js | 80 ------- packages/gatsby/package.json | 2 - yarn.lock | 221 +----------------- 10 files changed, 13 insertions(+), 311 deletions(-) delete mode 100644 flow-typed/npm/nyc_vx.x.x.js diff --git a/.gitignore b/.gitignore index a63e7f82d5c4b..7235646f5e614 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,6 @@ lib-cov # Coverage directory used by tools like istanbul coverage -.nyc_output # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) .grunt diff --git a/benchmarks/create-pages/.gitignore b/benchmarks/create-pages/.gitignore index da3d72140c77d..13f095c183476 100644 --- a/benchmarks/create-pages/.gitignore +++ b/benchmarks/create-pages/.gitignore @@ -17,9 +17,6 @@ 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 diff --git a/benchmarks/markdown/.gitignore b/benchmarks/markdown/.gitignore index da3d72140c77d..13f095c183476 100644 --- a/benchmarks/markdown/.gitignore +++ b/benchmarks/markdown/.gitignore @@ -17,9 +17,6 @@ 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 diff --git a/examples/using-gatsby-source-graphql/.gitignore b/examples/using-gatsby-source-graphql/.gitignore index da3d72140c77d..13f095c183476 100644 --- a/examples/using-gatsby-source-graphql/.gitignore +++ b/examples/using-gatsby-source-graphql/.gitignore @@ -17,9 +17,6 @@ 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 diff --git a/examples/using-local-plugins/.gitignore b/examples/using-local-plugins/.gitignore index da3d72140c77d..13f095c183476 100755 --- a/examples/using-local-plugins/.gitignore +++ b/examples/using-local-plugins/.gitignore @@ -17,9 +17,6 @@ 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 diff --git a/examples/using-typescript/.gitignore b/examples/using-typescript/.gitignore index 92cf681c80bc4..eef46adf0dd23 100644 --- a/examples/using-typescript/.gitignore +++ b/examples/using-typescript/.gitignore @@ -21,9 +21,6 @@ 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 @@ -136,4 +133,4 @@ $RECYCLE.BIN/ ### Gatsby ### public -.cache \ No newline at end of file +.cache diff --git a/examples/using-unstructured-data/.gitignore b/examples/using-unstructured-data/.gitignore index da3d72140c77d..13f095c183476 100755 --- a/examples/using-unstructured-data/.gitignore +++ b/examples/using-unstructured-data/.gitignore @@ -17,9 +17,6 @@ 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 diff --git a/flow-typed/npm/nyc_vx.x.x.js b/flow-typed/npm/nyc_vx.x.x.js deleted file mode 100644 index 8ea467a47e1d8..0000000000000 --- a/flow-typed/npm/nyc_vx.x.x.js +++ /dev/null @@ -1,80 +0,0 @@ -// flow-typed signature: 84310563880a6d344c86a6c200f70f05 -// flow-typed version: <>/nyc_v^7.0.0/flow_v0.33.0 - -/** - * This is an autogenerated libdef stub for: - * - * 'nyc' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -declare module 'nyc' { - declare module.exports: any; -} - -/** - * We include stubs for each file inside this npm package in case you need to - * require those files directly. Feel free to delete any files that aren't - * needed. - */ -declare module 'nyc/bin/nyc' { - declare module.exports: any; -} - -declare module 'nyc/bin/wrap' { - declare module.exports: any; -} - -declare module 'nyc/lib/commands/instrument' { - declare module.exports: any; -} - -declare module 'nyc/lib/instrumenters/istanbul' { - declare module.exports: any; -} - -declare module 'nyc/lib/instrumenters/noop' { - declare module.exports: any; -} - -declare module 'nyc/lib/process-args' { - declare module.exports: any; -} - -declare module 'nyc/lib/self-coverage-helper' { - declare module.exports: any; -} - -// Filename aliases -declare module 'nyc/bin/nyc.js' { - declare module.exports: $Exports<'nyc/bin/nyc'>; -} -declare module 'nyc/bin/wrap.js' { - declare module.exports: $Exports<'nyc/bin/wrap'>; -} -declare module 'nyc/index' { - declare module.exports: $Exports<'nyc'>; -} -declare module 'nyc/index.js' { - declare module.exports: $Exports<'nyc'>; -} -declare module 'nyc/lib/commands/instrument.js' { - declare module.exports: $Exports<'nyc/lib/commands/instrument'>; -} -declare module 'nyc/lib/instrumenters/istanbul.js' { - declare module.exports: $Exports<'nyc/lib/instrumenters/istanbul'>; -} -declare module 'nyc/lib/instrumenters/noop.js' { - declare module.exports: $Exports<'nyc/lib/instrumenters/noop'>; -} -declare module 'nyc/lib/process-args.js' { - declare module.exports: $Exports<'nyc/lib/process-args'>; -} -declare module 'nyc/lib/self-coverage-helper.js' { - declare module.exports: $Exports<'nyc/lib/self-coverage-helper'>; -} diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index d1799b05b6474..02615a8b0e8b6 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -128,7 +128,6 @@ "babel-preset-gatsby-package": "^0.1.2", "cross-env": "^5.1.4", "lerna": "^2.9.0", - "nyc": "^7.0.0", "rimraf": "^2.6.1" }, "engines": { @@ -173,7 +172,6 @@ "clean-test-bundles": "find test/ -type f -name bundle.js* -exec rm -rf {} +", "prebuild": "rimraf dist && rimraf cache-dir/commonjs", "prepare": "cross-env NODE_ENV=production npm run build", - "test-coverage": "node_modules/.bin/nyc --reporter=lcov --reporter=text npm test", "watch": "rimraf dist && mkdir dist && npm run build:internal-plugins && npm run build:rawfiles && npm run build:src -- --watch" }, "types": "index.d.ts", diff --git a/yarn.lock b/yarn.lock index 1e54ed20973c2..31defb10a12f6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2264,13 +2264,6 @@ append-buffer@^1.0.2: dependencies: buffer-equal "^1.0.0" -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" - integrity sha1-126/jKlNJ24keja61EpLdKthGZE= - dependencies: - default-require-extensions "^1.0.0" - append-transform@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" @@ -4330,15 +4323,6 @@ cacheable-request@^2.1.1: normalize-url "2.0.1" responselike "1.0.2" -caching-transform@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-1.0.1.tgz#6dbdb2f20f8d8fbce79f3e94e9d1742dcdf5c0a1" - integrity sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE= - dependencies: - md5-hex "^1.2.0" - mkdirp "^0.5.1" - write-file-atomic "^1.1.4" - call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -4401,11 +4385,6 @@ camelcase@^2.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= - camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -5410,7 +5389,7 @@ convert-hrtime@^2.0.0: resolved "https://registry.yarnpkg.com/convert-hrtime/-/convert-hrtime-2.0.0.tgz#19bfb2c9162f9e11c2f04c2c79de2b7e8095c627" integrity sha1-Gb+yyRYvnhHC8Ewsed4rfoCVxic= -convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.3.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: +convert-source-map@^1.1.0, convert-source-map@^1.1.1, convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== @@ -5598,14 +5577,6 @@ cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^4: - version "4.0.2" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" - integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -6241,13 +6212,6 @@ default-gateway@^2.6.0: execa "^0.10.0" ip-regex "^2.1.0" -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" - integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg= - dependencies: - strip-bom "^2.0.0" - default-require-extensions@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" @@ -8140,7 +8104,7 @@ find-parent-dir@^0.3.0: resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= -find-up@^1.0.0, find-up@^1.1.2: +find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= @@ -8308,14 +8272,6 @@ foreach@^2.0.5: resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= -foreground-child@^1.5.3, foreground-child@^1.5.6: - version "1.5.6" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" - integrity sha1-T9ca0t/elnibmApcCilZN8svXOk= - dependencies: - cross-spawn "^4" - signal-exit "^3.0.0" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -9256,7 +9212,7 @@ handlebars@^4.0.11: optionalDependencies: uglify-js "^2.6" -handlebars@^4.0.2, handlebars@^4.0.3, handlebars@^4.0.5: +handlebars@^4.0.2, handlebars@^4.0.5: version "4.0.12" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" integrity sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA== @@ -10823,28 +10779,21 @@ istanbul-api@^1.3.1: mkdirp "^0.5.1" once "^1.4.0" -istanbul-lib-coverage@^1.0.0-alpha.4, istanbul-lib-coverage@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" - integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== - istanbul-lib-coverage@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" integrity sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A== +istanbul-lib-coverage@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" + integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== + istanbul-lib-coverage@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#2aee0e073ad8c5f6a0b00e0dfbf52b4667472eda" integrity sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA== -istanbul-lib-hook@^1.0.0-alpha.4: - version "1.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" - integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw== - dependencies: - append-transform "^0.4.0" - istanbul-lib-hook@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.1.tgz#f614ec45287b2a8fc4f07f5660af787575601805" @@ -10852,7 +10801,7 @@ istanbul-lib-hook@^1.2.0: dependencies: append-transform "^1.0.0" -istanbul-lib-instrument@^1.1.0-alpha.3, istanbul-lib-instrument@^1.10.1: +istanbul-lib-instrument@^1.10.1: version "1.10.2" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A== @@ -10878,16 +10827,6 @@ istanbul-lib-instrument@^2.1.0: istanbul-lib-coverage "^2.0.1" semver "^5.5.0" -istanbul-lib-report@^1.0.0-alpha.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" - integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw== - dependencies: - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - istanbul-lib-report@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" @@ -10898,17 +10837,6 @@ istanbul-lib-report@^1.1.4: path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.0.0-alpha.10: - version "1.2.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" - integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg== - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz#ffe6be4e7ab86d3603e4290d54990b14506fc9b1" @@ -10920,13 +10848,6 @@ istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.5: rimraf "^2.6.1" source-map "^0.5.3" -istanbul-reports@^1.0.0-alpha.8: - version "1.5.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" - integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw== - dependencies: - handlebars "^4.0.3" - istanbul-reports@^1.4.1: version "1.5.0" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.0.tgz#c6c2867fa65f59eb7dcedb7f845dfc76aaee70f9" @@ -12079,7 +12000,7 @@ lodash._root@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= -lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.0.9, lodash.assign@^4.2.0: +lodash.assign@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= @@ -12565,18 +12486,6 @@ md5-file@^3.1.1: dependencies: buffer-alloc "^1.1.0" -md5-hex@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-1.3.0.tgz#d2c4afe983c4370662179b8cad145219135046c4" - integrity sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ= - dependencies: - md5-o-matic "^0.1.1" - -md5-o-matic@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" - integrity sha1-givM1l4RfFFPqxdrJZRdVBAKA8M= - md5.js@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" @@ -12777,7 +12686,7 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7, micromatch@^2.3.8: +micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= @@ -13657,37 +13566,6 @@ nwsapi@^2.0.7, nwsapi@^2.0.8: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016" integrity sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ== -nyc@^7.0.0: - version "7.1.0" - resolved "http://registry.npmjs.org/nyc/-/nyc-7.1.0.tgz#8e14971f3a15d1abbec7ac610ef54cb889e9ffb4" - integrity sha1-jhSXHzoV0au+x6xhDvVMuInp/7Q= - dependencies: - arrify "^1.0.1" - caching-transform "^1.0.0" - convert-source-map "^1.3.0" - default-require-extensions "^1.0.0" - find-cache-dir "^0.1.1" - find-up "^1.1.2" - foreground-child "^1.5.3" - glob "^7.0.3" - istanbul-lib-coverage "^1.0.0-alpha.4" - istanbul-lib-hook "^1.0.0-alpha.4" - istanbul-lib-instrument "^1.1.0-alpha.3" - istanbul-lib-report "^1.0.0-alpha.3" - istanbul-lib-source-maps "^1.0.0-alpha.10" - istanbul-reports "^1.0.0-alpha.8" - md5-hex "^1.2.0" - micromatch "^2.3.11" - mkdirp "^0.5.0" - pkg-up "^1.0.0" - resolve-from "^2.0.0" - rimraf "^2.5.4" - signal-exit "^3.0.0" - spawn-wrap "^1.2.4" - test-exclude "^1.1.0" - yargs "^4.8.1" - yargs-parser "^2.4.1" - oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -13930,13 +13808,6 @@ os-homedir@^1.0.0, os-homedir@^1.0.1: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^1.4.0: - version "1.4.0" - resolved "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - dependencies: - lcid "^1.0.0" - os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" @@ -14614,13 +14485,6 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkg-up@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" - integrity sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY= - dependencies: - find-up "^1.0.0" - please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" @@ -17406,18 +17270,6 @@ sparkles@^1.0.0: resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw== -spawn-wrap@^1.2.4: - version "1.4.2" - resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.2.tgz#cff58e73a8224617b6561abdc32586ea0c82248c" - integrity sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg== - dependencies: - foreground-child "^1.5.6" - mkdirp "^0.5.0" - os-homedir "^1.0.1" - rimraf "^2.6.2" - signal-exit "^3.0.2" - which "^1.3.0" - spdx-correct@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" @@ -18346,17 +18198,6 @@ terser@^3.8.1: source-map "~0.6.1" source-map-support "~0.5.6" -test-exclude@^1.1.0: - version "1.1.0" - resolved "http://registry.npmjs.org/test-exclude/-/test-exclude-1.1.0.tgz#f5ddd718927b12fd02f270a0aa939ceb6eea4151" - integrity sha1-9d3XGJJ7Ev0C8nCgqpOc627qQVE= - dependencies: - arrify "^1.0.1" - lodash.assign "^4.0.9" - micromatch "^2.3.8" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" - test-exclude@^4.2.1: version "4.2.3" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" @@ -19794,11 +19635,6 @@ whet.extend@~0.9.9: resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE= -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -19835,11 +19671,6 @@ window-size@0.1.0: resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= - with-open-file@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/with-open-file/-/with-open-file-0.1.4.tgz#797e32055cbe55c58727ad026482fb0776474b2c" @@ -20017,7 +19848,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^1.1.4, write-file-atomic@^1.2.0: +write-file-atomic@^1.2.0: version "1.3.4" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" integrity sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8= @@ -20217,14 +20048,6 @@ yargs-parser@^10.1.0: dependencies: camelcase "^4.1.0" -yargs-parser@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" - integrity sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ= - dependencies: - camelcase "^3.0.0" - lodash.assign "^4.0.6" - yargs-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" @@ -20300,26 +20123,6 @@ yargs@^11.0.0, yargs@^11.1.0: y18n "^3.2.1" yargs-parser "^9.0.2" -yargs@^4.8.1: - version "4.8.1" - resolved "http://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" - integrity sha1-wMQpJMpKqmsObaFznfshZDn53cA= - dependencies: - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - lodash.assign "^4.0.3" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.1" - which-module "^1.0.0" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^2.4.1" - yargs@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" From cadf9f3582793335ad84d57006956845c18f80be Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Wed, 21 Nov 2018 14:53:12 +0100 Subject: [PATCH 367/462] fix(prettier): ignore coverage directory (#10064) --- .prettierignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.prettierignore b/.prettierignore index 7f203c8406704..76588cef92e25 100644 --- a/.prettierignore +++ b/.prettierignore @@ -26,3 +26,6 @@ packages/gatsby/cache-dir/commonjs/**/*.js **/__tests__/fixtures/** infrastructure + +# coverage +coverage From 84217072819fdc76edbdeac965f947562fcfc2ca Mon Sep 17 00:00:00 2001 From: Orestis Ioannou Date: Wed, 21 Nov 2018 18:13:52 +0100 Subject: [PATCH 368/462] feat(gatsby): warn user about incompatible plugins (#10034) Closes: #7143 #9731 --- packages/gatsby/package.json | 1 + .../load-plugins/__tests__/validate.js | 25 +++++++++++++++++++ .../gatsby/src/bootstrap/load-plugins/load.js | 4 +++ .../src/bootstrap/load-plugins/validate.js | 17 ++++++++++++- yarn.lock | 5 ++++ 5 files changed, 51 insertions(+), 1 deletion(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 02615a8b0e8b6..70a960a59fb75 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -102,6 +102,7 @@ "redux": "^4.0.0", "relay-compiler": "1.5.0", "request": "^2.85.0", + "semver": "^5.6.0", "shallow-compare": "^1.2.2", "sift": "^5.1.0", "signal-exit": "^3.0.2", diff --git a/packages/gatsby/src/bootstrap/load-plugins/__tests__/validate.js b/packages/gatsby/src/bootstrap/load-plugins/__tests__/validate.js index 75e3839579c17..8e34ca28a1fbf 100644 --- a/packages/gatsby/src/bootstrap/load-plugins/__tests__/validate.js +++ b/packages/gatsby/src/bootstrap/load-plugins/__tests__/validate.js @@ -11,6 +11,7 @@ const { collatePluginAPIs, handleBadExports, handleMultipleReplaceRenderers, + warnOnIncompatiblePeerDependency, } = require(`../validate`) describe(`collatePluginAPIs`, () => { @@ -198,3 +199,27 @@ describe(`handleMultipleReplaceRenderers`, () => { expect(result).toMatchSnapshot() }) }) + +describe(`warnOnIncompatiblePeerDependency`, () => { + beforeEach(() => { + reporter.warn.mockClear() + }) + + it(`Does not warn when no peer dependency`, () => { + warnOnIncompatiblePeerDependency(`dummy-package`, { peerDependencies: {} }) + + expect(reporter.warn).not.toHaveBeenCalled() + }) + + it(`Warns on incompatible gatsby peer dependency`, async () => { + warnOnIncompatiblePeerDependency(`dummy-package`, { + peerDependencies: { + gatsby: `<2.0.0`, + }, + }) + + expect(reporter.warn).toHaveBeenCalledWith( + expect.stringContaining(`Plugin dummy-package is not compatible`) + ) + }) +}) diff --git a/packages/gatsby/src/bootstrap/load-plugins/load.js b/packages/gatsby/src/bootstrap/load-plugins/load.js index 6d52861c6f073..1dfa16ca5917e 100644 --- a/packages/gatsby/src/bootstrap/load-plugins/load.js +++ b/packages/gatsby/src/bootstrap/load-plugins/load.js @@ -4,6 +4,7 @@ const fs = require(`fs`) const path = require(`path`) const crypto = require(`crypto`) const glob = require(`glob`) +const { warnOnIncompatiblePeerDependency } = require(`./validate`) const { store } = require(`../../redux`) const existsSync = require(`fs-exists-cached`).sync const createNodeId = require(`../../utils/create-node-id`) @@ -59,6 +60,8 @@ function resolvePlugin(pluginName) { fs.readFileSync(`${resolvedPath}/package.json`, `utf-8`) ) const name = packageJSON.name || pluginName + warnOnIncompatiblePeerDependency(name, packageJSON) + return { resolve: resolvedPath, name, @@ -83,6 +86,7 @@ function resolvePlugin(pluginName) { const packageJSON = JSON.parse( fs.readFileSync(`${resolvedPath}/package.json`, `utf-8`) ) + warnOnIncompatiblePeerDependency(packageJSON.name, packageJSON) return { resolve: resolvedPath, diff --git a/packages/gatsby/src/bootstrap/load-plugins/validate.js b/packages/gatsby/src/bootstrap/load-plugins/validate.js index 4dc6cfb75644f..edd7157b43349 100644 --- a/packages/gatsby/src/bootstrap/load-plugins/validate.js +++ b/packages/gatsby/src/bootstrap/load-plugins/validate.js @@ -1,5 +1,6 @@ const _ = require(`lodash`) - +const semver = require(`semver`) +const { version: gatsbyVersion } = require(`gatsby/package.json`) const reporter = require(`gatsby-cli/lib/reporter`) const resolveModuleExports = require(`../resolve-module-exports`) @@ -214,8 +215,22 @@ const handleMultipleReplaceRenderers = ({ apiToPlugins, flattenedPlugins }) => { return flattenedPlugins } +function warnOnIncompatiblePeerDependency(name, packageJSON) { + // Note: In the future the peer dependency should be enforced for all plugins. + const gatsbyPeerDependency = _.get(packageJSON, `peerDependencies.gatsby`) + if ( + gatsbyPeerDependency && + !semver.satisfies(gatsbyVersion, gatsbyPeerDependency) + ) { + reporter.warn( + `Plugin ${name} is not compatible with your gatsby version ${gatsbyVersion} - It requires gatsby@${gatsbyPeerDependency}` + ) + } +} + module.exports = { collatePluginAPIs, handleBadExports, handleMultipleReplaceRenderers, + warnOnIncompatiblePeerDependency, } diff --git a/yarn.lock b/yarn.lock index 31defb10a12f6..737b969046141 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16746,6 +16746,11 @@ semver@^4.0.3: resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" integrity sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto= +semver@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" From 3ed97350a4d8eca52281921bb3dcb6d668cc6b5e Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Wed, 21 Nov 2018 18:15:03 +0100 Subject: [PATCH 369/462] chore(release): Publish - gatsby@2.0.54 --- packages/gatsby/CHANGELOG.md | 8 ++++++++ packages/gatsby/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index aafc77035bd86..5cf2e7d6fa290 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.54](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.53...gatsby@2.0.54) (2018-11-21) + +### Features + +- **gatsby:** warn user about incompatible plugins ([#10034](https://github.com/gatsbyjs/gatsby/issues/10034)) ([8421707](https://github.com/gatsbyjs/gatsby/commit/8421707)), closes [#7143](https://github.com/gatsbyjs/gatsby/issues/7143) [#9731](https://github.com/gatsbyjs/gatsby/issues/9731) + ## [2.0.53](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.52...gatsby@2.0.53) (2018-11-20) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 70a960a59fb75..5afcd35520b01 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.53", + "version": "2.0.54", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From 5a5254ec1aa3672a6dca076cbfe62aaa1c46ff07 Mon Sep 17 00:00:00 2001 From: James Adarich Date: Wed, 21 Nov 2018 17:48:08 +0000 Subject: [PATCH 370/462] feat(gatsby-remark-images): make images blur up (#7800) BREAKING CHANGE: html markup has been changed, high resolution image (img.gatsby-resp-image-image) is no longer nested inside span with low resolution placeholder (span.gatsby-resp-image-wrapper) - it's sibling of that span now. This might affect any custom styling that is applied to inline images --- packages/gatsby-remark-images/.babelrc | 2 +- packages/gatsby-remark-images/.gitignore | 2 + .../src/__tests__/__snapshots__/index.js.snap | 76 +++++++------------ .../gatsby-remark-images/src/constants.js | 3 + .../src/gatsby-browser.js | 35 +++++++++ packages/gatsby-remark-images/src/index.js | 55 ++++++++------ 6 files changed, 99 insertions(+), 74 deletions(-) create mode 100644 packages/gatsby-remark-images/src/constants.js create mode 100644 packages/gatsby-remark-images/src/gatsby-browser.js diff --git a/packages/gatsby-remark-images/.babelrc b/packages/gatsby-remark-images/.babelrc index 9f5de61e0d79e..c5aaeee07bfaf 100644 --- a/packages/gatsby-remark-images/.babelrc +++ b/packages/gatsby-remark-images/.babelrc @@ -1,5 +1,5 @@ { "presets": [ - ["babel-preset-gatsby-package"] + ["babel-preset-gatsby-package", { "browser": true }] ] } diff --git a/packages/gatsby-remark-images/.gitignore b/packages/gatsby-remark-images/.gitignore index f566442b32d84..dcc20e9f74bf9 100644 --- a/packages/gatsby-remark-images/.gitignore +++ b/packages/gatsby-remark-images/.gitignore @@ -1,3 +1,5 @@ +/constants.js +/gatsby-browser.js /index.js /__tests__/* tests \ No newline at end of file diff --git a/packages/gatsby-remark-images/src/__tests__/__snapshots__/index.js.snap b/packages/gatsby-remark-images/src/__tests__/__snapshots__/index.js.snap index ea1d0153fdfef..8408dd6ad2456 100644 --- a/packages/gatsby-remark-images/src/__tests__/__snapshots__/index.js.snap +++ b/packages/gatsby-remark-images/src/__tests__/__snapshots__/index.js.snap @@ -1,119 +1,97 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`it handles goofy nesting properly 1`] = ` -" - - + \\"test\\" - - - " + " `; exports[`it leaves images that are already linked alone 1`] = ` -" - - + \\"img\\" - - - " + " `; exports[`it leaves linked HTML img tags alone 1`] = ` " - - - \\"this - + + \\"this - " `; exports[`it leaves single-line linked HTML img tags alone 1`] = ` -" - - - \\"this - - - " +" + + \\"this + " `; exports[`it transforms HTML img tags 1`] = ` -" - - - - - \\"my - +" + + + \\"my - - - " + " `; exports[`it transforms images in markdown 1`] = ` -" - - - - + \\"image\\" - - - - " + " `; diff --git a/packages/gatsby-remark-images/src/constants.js b/packages/gatsby-remark-images/src/constants.js new file mode 100644 index 0000000000000..69e5d9b58c01d --- /dev/null +++ b/packages/gatsby-remark-images/src/constants.js @@ -0,0 +1,3 @@ +exports.imageClass = `gatsby-resp-image-image` +exports.imageWrapperClass = `gatsby-resp-image-wrapper` +exports.imageBackgroundClass = `gatsby-resp-image-background-image` diff --git a/packages/gatsby-remark-images/src/gatsby-browser.js b/packages/gatsby-remark-images/src/gatsby-browser.js new file mode 100644 index 0000000000000..fb8fcbc95670b --- /dev/null +++ b/packages/gatsby-remark-images/src/gatsby-browser.js @@ -0,0 +1,35 @@ +const { + imageClass, + imageBackgroundClass, + imageWrapperClass, +} = require(`./constants`) + +exports.onRouteUpdate = () => { + const imageWrappers = document.querySelectorAll(`.${imageWrapperClass}`) + + // https://css-tricks.com/snippets/javascript/loop-queryselectorall-matches/ + // for cross-browser looping through NodeList without polyfills + for (let i = 0; i < imageWrappers.length; i++) { + const imageWrapper = imageWrappers[i] + + const backgroundElement = imageWrapper.querySelector( + `.${imageBackgroundClass}` + ) + const imageElement = imageWrapper.querySelector(`.${imageClass}`) + + const onImageLoad = () => { + backgroundElement.style.transition = `opacity 0.5s 0.5s` + backgroundElement.style.opacity = 0 + imageElement.style.transition = `opacity 0.5s` + imageElement.style.opacity = 1 + imageElement.removeEventListener(`load`, onImageLoad) + } + + if (imageElement.complete) { + backgroundElement.style.opacity = 0 + } else { + imageElement.style.opacity = 0 + imageElement.addEventListener(`load`, onImageLoad) + } + } +} diff --git a/packages/gatsby-remark-images/src/index.js b/packages/gatsby-remark-images/src/index.js index afb3aed2af772..795bccf80c569 100644 --- a/packages/gatsby-remark-images/src/index.js +++ b/packages/gatsby-remark-images/src/index.js @@ -1,4 +1,8 @@ -// const select = require(`unist-util-select`) +const { + imageClass, + imageBackgroundClass, + imageWrapperClass, +} = require(`./constants`) const visitWithParents = require(`unist-util-visit-parents`) const path = require(`path`) const isRelativeUrl = require(`is-relative-url`) @@ -90,9 +94,6 @@ module.exports = ( return resolve() } - // Calculate the paddingBottom % - const ratio = `${(1 / fluidResult.aspectRatio) * 100}%` - const originalImg = fluidResult.originalImg const fallbackSrc = fluidResult.src const srcSet = fluidResult.srcSet @@ -104,14 +105,18 @@ module.exports = ( const fileNameNoExt = fileName.replace(/\.[^/.]+$/, ``) const defaultAlt = fileNameNoExt.replace(/[^A-Z0-9]/gi, ` `) - // TODO - // Fade in images on load. - // https://www.perpetual-beta.org/weblog/silky-smooth-image-loading.html - - const imageClass = `gatsby-resp-image-image` - const imageStyle = `width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px ${ - options.backgroundColor - };` + const imageStyle = ` + width: 100%; + height: 100%; + margin: 0; + vertical-align: middle; + position: absolute; + top: 0; + left: 0; + box-shadow: inset 0px 0px 0px 400px ${options.backgroundColor};`.replace( + /\s*(\S+:)\s*/g, + `$1` + ) // Create our base image tag let imageTag = ` @@ -124,7 +129,7 @@ module.exports = ( srcset="${srcSet}" sizes="${fluidResult.sizes}" /> - ` + `.trim() // if options.withWebp is enabled, generate a webp version and change the image tag to a picture tag if (options.withWebp) { @@ -162,29 +167,31 @@ module.exports = ( src="${fallbackSrc}" alt="${node.alt ? node.alt : defaultAlt}" title="${node.title ? node.title : ``}" - src="${fallbackSrc}" /> - ` + `.trim() } + const ratio = `${(1 / fluidResult.aspectRatio) * 100}%` + // Construct new image node w/ aspect ratio placeholder const showCaptions = options.showCaptions && node.title let rawHTML = ` ${imageTag} + > + ${imageTag} - ` + `.trim() // Make linking to original image optional. if (!inLink && options.linkImagesToOriginal) { @@ -196,19 +203,19 @@ module.exports = ( target="_blank" rel="noopener" > - ${rawHTML} + ${rawHTML} - ` + `.trim() } // Wrap in figure and use title as caption if (showCaptions) { rawHTML = `
    - ${rawHTML} -
    ${node.title}
    + ${rawHTML} +
    ${node.title}
    - ` + `.trim() } return rawHTML From 351aaa3b435d94bf2badb00c64505b85f8676b67 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Wed, 21 Nov 2018 18:54:21 +0100 Subject: [PATCH 371/462] chore(release): Publish - gatsby-remark-images@3.0.0 --- packages/gatsby-remark-images/CHANGELOG.md | 12 ++++++++++++ packages/gatsby-remark-images/package.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/gatsby-remark-images/CHANGELOG.md b/packages/gatsby-remark-images/CHANGELOG.md index 6849126c2f622..43474d06fb631 100644 --- a/packages/gatsby-remark-images/CHANGELOG.md +++ b/packages/gatsby-remark-images/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +# [3.0.0](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-images/compare/gatsby-remark-images@2.0.6...gatsby-remark-images@3.0.0) (2018-11-21) + +### Features + +- **gatsby-remark-images:** make images blur up ([#7800](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-images/issues/7800)) ([5a5254e](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-images/commit/5a5254e)) + +### BREAKING CHANGES + +- **gatsby-remark-images:** html markup has been changed, high resolution image (img.gatsby-resp-image-image) is no longer nested inside span with low resolution placeholder (span.gatsby-resp-image-wrapper) - it's sibling of that span now. This might affect any custom styling that is applied to inline images + ## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-images/compare/gatsby-remark-images@2.0.5...gatsby-remark-images@2.0.6) (2018-11-06) diff --git a/packages/gatsby-remark-images/package.json b/packages/gatsby-remark-images/package.json index 1b03c9e91ab45..98057c6ff64ba 100644 --- a/packages/gatsby-remark-images/package.json +++ b/packages/gatsby-remark-images/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-images", "description": "Processes images in markdown so they can be used in the production build.", - "version": "2.0.6", + "version": "3.0.0", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" From 73167e39c56e07a20c91d5cbb307d33498b8fff7 Mon Sep 17 00:00:00 2001 From: Jonas Gierer Date: Wed, 21 Nov 2018 22:11:26 +0100 Subject: [PATCH 372/462] docs(gatsby-plugin-offline): Add instructions for removing service worker (#10075) Related to #9913 --- packages/gatsby-plugin-offline/README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/packages/gatsby-plugin-offline/README.md b/packages/gatsby-plugin-offline/README.md index d35ee7630cc4f..01ebf254e5d91 100644 --- a/packages/gatsby-plugin-offline/README.md +++ b/packages/gatsby-plugin-offline/README.md @@ -63,3 +63,19 @@ const options = { clientsClaim: true, } ``` + +## Remove + +If you want to remove `gatsby-plugin-offline` from your site at a later point, +substitute it with [`gatsby-plugin-remove-serviceworker`](https://www.npmjs.com/package/gatsby-plugin-remove-serviceworker) +to safely remove the service worker: + +```diff:title=gatsby-config.js + plugins: [ +- `gatsby-plugin-offline`, ++ `gatsby-plugin-remove-serviceworker`, + ] +``` + +This will ensure that the worker is properly unregistered, instead of leaving an +outdated version registered in users' browsers. From 7802470c647db77ec6340a22fce80818bb2eee1e Mon Sep 17 00:00:00 2001 From: Daniel Zuzevich Date: Wed, 21 Nov 2018 16:14:07 -0500 Subject: [PATCH 373/462] feat(gatsby-plugin-manifest): don't output `theme-color` meta tag if it's not defiened (#10069) Not really sure how I go about submitting a PR here. This addition references issue https://github.com/gatsbyjs/gatsby/issues/9977 Any guidance would be greatly appreciated. --- .../__snapshots__/gatsby-ssr.js.snap | 13 ++++ .../src/__tests__/gatsby-ssr.js | 5 ++ .../gatsby-plugin-manifest/src/gatsby-ssr.js | 54 ++++++++------ packages/gatsby-source-faker/README.md | 74 +++++++++---------- 4 files changed, 88 insertions(+), 58 deletions(-) diff --git a/packages/gatsby-plugin-manifest/src/__tests__/__snapshots__/gatsby-ssr.js.snap b/packages/gatsby-plugin-manifest/src/__tests__/__snapshots__/gatsby-ssr.js.snap index b35baa328e7c9..3259b64444848 100644 --- a/packages/gatsby-plugin-manifest/src/__tests__/__snapshots__/gatsby-ssr.js.snap +++ b/packages/gatsby-plugin-manifest/src/__tests__/__snapshots__/gatsby-ssr.js.snap @@ -100,3 +100,16 @@ Array [ />, ] `; + +exports[`gatsby-plugin-manifest Does not add a "theme_color" meta tag to head if "theme_color" option is not provided or is an empty string 1`] = ` +Array [ + , + , +] +`; diff --git a/packages/gatsby-plugin-manifest/src/__tests__/gatsby-ssr.js b/packages/gatsby-plugin-manifest/src/__tests__/gatsby-ssr.js index 1b578fec00ee2..34d626d7021d5 100644 --- a/packages/gatsby-plugin-manifest/src/__tests__/gatsby-ssr.js +++ b/packages/gatsby-plugin-manifest/src/__tests__/gatsby-ssr.js @@ -19,6 +19,11 @@ describe(`gatsby-plugin-manifest`, () => { expect(headComponents).toMatchSnapshot() }) + it(`Does not add a "theme_color" meta tag to head if "theme_color" option is not provided or is an empty string`, () => { + onRenderBody(ssrArgs, { icon: true }) + expect(headComponents).toMatchSnapshot() + }) + describe(`Creates legacy apple touch links if opted in`, () => { it(`Using default set of icons`, () => { onRenderBody(ssrArgs, { diff --git a/packages/gatsby-plugin-manifest/src/gatsby-ssr.js b/packages/gatsby-plugin-manifest/src/gatsby-ssr.js index 8f01b191883cb..d4c68c70570cd 100644 --- a/packages/gatsby-plugin-manifest/src/gatsby-ssr.js +++ b/packages/gatsby-plugin-manifest/src/gatsby-ssr.js @@ -3,6 +3,9 @@ import { withPrefix } from "gatsby" import { defaultIcons } from "./common.js" exports.onRenderBody = ({ setHeadComponents }, pluginOptions) => { + // We use this to build a final array to pass as the argument to setHeadComponents at the end of onRenderBody. + let headComponents = [] + const icons = pluginOptions.icons || defaultIcons // If icons were generated, also add a favicon link. @@ -10,39 +13,48 @@ exports.onRenderBody = ({ setHeadComponents }, pluginOptions) => { let favicon = icons && icons.length ? icons[0].src : null if (favicon) { - setHeadComponents([ + headComponents.push( , - ]) + /> + ) } } - setHeadComponents([ + // Add manifest link tag. + headComponents.push( , - , - ]) + /> + ) - if (pluginOptions.legacy) { - setHeadComponents( - icons.map(icon => ( - - )) + // The user has an option to opt out of the theme_color meta tag being inserted into the head. + if (pluginOptions.theme_color) { + headComponents.push( + ) } + + if (pluginOptions.legacy) { + const iconLinkTags = icons.map(icon => ( + + )) + + headComponents = [...headComponents, ...iconLinkTags] + } + + setHeadComponents(headComponents) } diff --git a/packages/gatsby-source-faker/README.md b/packages/gatsby-source-faker/README.md index 4c09186a44993..40f5c66c88364 100644 --- a/packages/gatsby-source-faker/README.md +++ b/packages/gatsby-source-faker/README.md @@ -1,37 +1,37 @@ -## gatsby-source-faker - -This is a plugin that allows you to use [faker.js](https://github.com/marak/Faker.js/) to generate fake data for gatsby sites. This could come in handy for creating example sites, documentation, or just to experiment with Gatsby.js - -### To use it - -Install `gatsby-source-faker` - -``` - npm install --save gatsby-source-faker -``` - -or - -``` - npm install gatsby-source-faker -``` - -Add `gatsby-source-faker` to the `gatsby-config.js` as follows - -```javascript -plugins: [ - { - resolve: `gatsby-source-faker`, - // derive schema from faker's options - options: { - schema: { - name: ["firstName", "lastName"], - }, - count: 3, // how many fake objects you need - type: "NameData", // Name of the graphql query node - }, - }, -] -``` - -Example: [Using Faker](https://github.com/gatsbyjs/gatsby/tree/master/examples/using-faker) +## gatsby-source-faker + +This is a plugin that allows you to use [faker.js](https://github.com/marak/Faker.js/) to generate fake data for gatsby sites. This could come in handy for creating example sites, documentation, or just to experiment with Gatsby.js + +### To use it + +Install `gatsby-source-faker` + +``` + npm install --save gatsby-source-faker +``` + +or + +``` + npm install gatsby-source-faker +``` + +Add `gatsby-source-faker` to the `gatsby-config.js` as follows + +```javascript +plugins: [ + { + resolve: `gatsby-source-faker`, + // derive schema from faker's options + options: { + schema: { + name: ["firstName", "lastName"], + }, + count: 3, // how many fake objects you need + type: "NameData", // Name of the graphql query node + }, + }, +] +``` + +Example: [Using Faker](https://github.com/gatsbyjs/gatsby/tree/master/examples/using-faker) From 4d246c2c1c9c25a03393ce65ccba5c7792504711 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Wed, 21 Nov 2018 22:14:56 +0100 Subject: [PATCH 374/462] chore(release): Publish - gatsby-plugin-manifest@2.0.10 - gatsby-plugin-offline@2.0.17 - gatsby-source-faker@2.0.2 --- packages/gatsby-plugin-manifest/CHANGELOG.md | 8 ++++++++ packages/gatsby-plugin-manifest/package.json | 2 +- packages/gatsby-plugin-offline/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-offline/package.json | 2 +- packages/gatsby-source-faker/CHANGELOG.md | 8 ++++++++ packages/gatsby-source-faker/package.json | 2 +- 6 files changed, 25 insertions(+), 3 deletions(-) diff --git a/packages/gatsby-plugin-manifest/CHANGELOG.md b/packages/gatsby-plugin-manifest/CHANGELOG.md index 0e3cb72c012fa..03e1d8383808a 100644 --- a/packages/gatsby-plugin-manifest/CHANGELOG.md +++ b/packages/gatsby-plugin-manifest/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.10](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-manifest/compare/gatsby-plugin-manifest@2.0.9...gatsby-plugin-manifest@2.0.10) (2018-11-21) + +### Features + +- **gatsby-plugin-manifest:** don't output `theme-color` meta tag if it's not defiened ([#10069](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-manifest/issues/10069)) ([7802470](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-manifest/commit/7802470)) + ## [2.0.9](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-manifest/compare/gatsby-plugin-manifest@2.0.8...gatsby-plugin-manifest@2.0.9) (2018-11-12) diff --git a/packages/gatsby-plugin-manifest/package.json b/packages/gatsby-plugin-manifest/package.json index 8f55f85a558a3..7984657f81172 100644 --- a/packages/gatsby-plugin-manifest/package.json +++ b/packages/gatsby-plugin-manifest/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-manifest", "description": "Gatsby plugin which adds a manifest.webmanifest to make sites progressive web apps", - "version": "2.0.9", + "version": "2.0.10", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-offline/CHANGELOG.md b/packages/gatsby-plugin-offline/CHANGELOG.md index 62d1a240ce85e..8ea5ded0ec1a7 100644 --- a/packages/gatsby-plugin-offline/CHANGELOG.md +++ b/packages/gatsby-plugin-offline/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.17](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/compare/gatsby-plugin-offline@2.0.16...gatsby-plugin-offline@2.0.17) (2018-11-21) + +**Note:** Version bump only for package gatsby-plugin-offline + ## [2.0.16](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/compare/gatsby-plugin-offline@2.0.15...gatsby-plugin-offline@2.0.16) (2018-11-20) diff --git a/packages/gatsby-plugin-offline/package.json b/packages/gatsby-plugin-offline/package.json index d3940feca2bc8..45c6ed474664a 100644 --- a/packages/gatsby-plugin-offline/package.json +++ b/packages/gatsby-plugin-offline/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-offline", "description": "Gatsby plugin which sets up a site to be able to run offline", - "version": "2.0.16", + "version": "2.0.17", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-source-faker/CHANGELOG.md b/packages/gatsby-source-faker/CHANGELOG.md index d999090c598e0..ca78eeeb0a600 100644 --- a/packages/gatsby-source-faker/CHANGELOG.md +++ b/packages/gatsby-source-faker/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-faker/compare/gatsby-source-faker@2.0.1...gatsby-source-faker@2.0.2) (2018-11-21) + +### Features + +- **gatsby-plugin-manifest:** don't output `theme-color` meta tag if it's not defiened ([#10069](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-faker/issues/10069)) ([7802470](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-faker/commit/7802470)) + ## [2.0.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-faker/compare/gatsby-source-faker@2.0.0...gatsby-source-faker@2.0.1) (2018-10-29) diff --git a/packages/gatsby-source-faker/package.json b/packages/gatsby-source-faker/package.json index 4a50d64e7cbfd..e33d5f90fe1f0 100644 --- a/packages/gatsby-source-faker/package.json +++ b/packages/gatsby-source-faker/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-faker", "description": "A gatsby plugin to get fake data for testing", - "version": "2.0.1", + "version": "2.0.2", "author": "Pavithra Kodmad", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" From 47d4cc6ac0accdc1582306aac24d7acdedd721a3 Mon Sep 17 00:00:00 2001 From: louis <1891109+dotlouis@users.noreply.github.com> Date: Wed, 21 Nov 2018 22:17:46 +0100 Subject: [PATCH 375/462] [Showcase] Add Monbanquet.fr to the showcase list (#10073) Hello the Gatsby Team, First of all, thanks for the great product you're building, and the community around it. At [Monbanquet.fr](https://monbanquet.fr) we're using it for our main production website and it's been great so far, both in terms of user and developer experience. As it's my first PR here, hit me up if I did something wrong :) Cheers --- docs/sites.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index 20ffa37b1262d..79a33479e7966 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3526,3 +3526,15 @@ built_by: Tandem built_by_url: https://github.com/tandembank featured: false +- title: Monbanquet.fr + main_url: "https://monbanquet.fr" + url: "https://monbanquet.fr" + description: > + Give your corporate events the food and quality it deserves, thanks to the know-how of the best local artisans. + categories: + - eCommerce + - Food + - Event + built_by: Monbanquet.fr + built_by_url: https://github.com/monbanquet + featured: false From 9b2d42cddd359b945000fd409664c2613c236a2f Mon Sep 17 00:00:00 2001 From: Krs Joseph Date: Thu, 22 Nov 2018 10:05:58 -0400 Subject: [PATCH 376/462] Fix broken link to Gatsby community starters (#10089) Clicking the link below results in a not found page. Updated with the correct url screen shot 2018-11-22 at 09 53 12 screen shot 2018-11-22 at 09 52 22 --- www/src/pages/docs/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/src/pages/docs/index.js b/www/src/pages/docs/index.js index 923e7e14437a3..883e16c4d04d7 100644 --- a/www/src/pages/docs/index.js +++ b/www/src/pages/docs/index.js @@ -83,7 +83,7 @@ class IndexRoute extends React.Component { Running gatsby new installs the default Gatsby starter. There are {` `} - + many other official and community starters {` `} From b1c8c9c8561d5d759fd1b8d4f57dc58e8e5b80c8 Mon Sep 17 00:00:00 2001 From: Howard Date: Thu, 22 Nov 2018 07:13:17 -0800 Subject: [PATCH 377/462] Update deploying-to-heroku.md (#10012) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Needed to specify additional changes to serve production-optimized build and bind to correct port. These were the changes I needed to make in order to make a deployment work with Heroku, please let me know if this is helpful or not! 😄 🙏 --- docs/docs/deploying-to-heroku.md | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/docs/docs/deploying-to-heroku.md b/docs/docs/deploying-to-heroku.md index d0b48ec549dd7..bdb3c78a574e2 100644 --- a/docs/docs/deploying-to-heroku.md +++ b/docs/docs/deploying-to-heroku.md @@ -6,9 +6,7 @@ You can use the [heroku buildpack static](https://github.com/heroku/heroku-build Set the `heroku/node.js` and `heroku-buildpack-static` buildpacks on your application creating an `app.json` file on the root of your project. -app.json: - -``` +```json:title=app.json { "buildpacks": [ { @@ -25,23 +23,35 @@ Sometimes specifying buildpacks via the `app.json` file doesn’t work. If this Add a `heroku-postbuild` script in your `package.json`: -package.json: - -``` +```json:title=package.json { - // ... "scripts": { - // ... "heroku-postbuild": "gatsby build" - // ... } - // ... } ``` -Finally, add a `static.json` file in the root of your project to define the directory where your static assets will be. You can check all the options for this file in the [heroku-buildpack-static](https://github.com/heroku/heroku-buildpack-static#configuration) configuration. +It is worth noting that, by default, creating a new project with `gatsby new ` creates a `package.json` with a `start` script as `npm run develop`. Without creating a Procfile to specify your commands to run for your process types, Heroku will run the web process via the `npm start` command by default. Since we've compiled our production-optimized build with `gatsby build`, the command we want to run is actually `gatsby serve`. To do this, either add the following script to your `package.json`: + +```json:package.json +{ + "scripts": { + "start": "gatsby serve --port ${PORT}" + } +} +``` + +Or, create a `Procfile`: +```title=Procfile +web: gatsby serve --port ${PORT} ``` + +The port needs to be specified to use the Heroku dyno's runtime environment variable in order to bind to the port correctly. + +Finally, add a `static.json` file in the root of your project to define the directory where your static assets will be. You can check all the options for this file in the [heroku-buildpack-static](https://github.com/heroku/heroku-buildpack-static#configuration) configuration. + +```json:title=static.json { "root": "public/", "headers": { From 9f32cd31cef629e810cf1b68993ec26a14f9386f Mon Sep 17 00:00:00 2001 From: Justin Leach Date: Thu, 22 Nov 2018 11:21:44 -0600 Subject: [PATCH 378/462] Added gatsby-typescript-boilerplate to starters.yml (#10039) --- docs/starters.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/docs/starters.yml b/docs/starters.yml index 898f36643bdfe..efca25e7c32e8 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -1231,6 +1231,29 @@ - Bootstrap v4 support - Css Modules support - ESLint, Prettier +- url: https://gatsby-typescript-boilerplate.netlify.com/ + repo: https://github.com/leachjustin18/gatsby-typescript-boilerplate + description: Opinionated Gatsby v2 starter with TypeScript. + tags: + - TypeScript + - PWA + - Styling:SCSS + - Styling:PostCSS + features: + - TSLint with airbnb & prettier configurations + - Prettier + - Stylelint + - Offline support + - Type Safe by TypeScript + - Format on commit with Lint-Staged(Husky) + - Favicon generation + - Sitemap generation + - Autoprefixer with browser list + - CSS nano + - CSS MQ Packer + - Lazy load image(s) with plugin sharp + - Gatsby Image + - Netlify optimizations - url: https://danshai.github.io/gatsbyv2-scientific-blog-machine-learning/ repo: https://github.com/DanShai/gatsbyv2-scientific-blog-machine-learning description: Machine learning ready and scientific blog starter From e9d2e5f90c51afd4ac59e3161f109858fd5e01a1 Mon Sep 17 00:00:00 2001 From: Muhammad Muhajir Date: Fri, 23 Nov 2018 00:26:30 +0700 Subject: [PATCH 379/462] Add Gatsby Tailwind Styled Components Starter (#10084) * Update starters.yml * Update starters.yml --- docs/starters.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/starters.yml b/docs/starters.yml index efca25e7c32e8..f38090566b01f 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -1271,3 +1271,12 @@ - Manipulate csv data - draw with graph mermaid - display charts with chartjs +- url: https://gatsby-tailwind-styled-components.netlify.com/ + repo: https://github.com/muhajirframe/gatsby-tailwind-styled-components-starter + description: A Gatsby Starter with Tailwind CSS + Styled Components + tags: + - Styling:Tailwind + features: + - Eslint Airbnb without semicolon and without .jsx extension + - Offline support + - Web App Manifest From bcb03a6c53f2563138726f3040c53703df0e44af Mon Sep 17 00:00:00 2001 From: Anthony Marcar Date: Fri, 23 Nov 2018 04:29:48 +1100 Subject: [PATCH 380/462] add secondary fields to www query sorts (#10085) While working on loki (#9919), I've run into lots of fun edge cases to do with sorting. One is that some connection queries specify a sort order, but some returned fields have the same value for the sort field. The behavior here is undefined, but by default sift will order by the order they were added to Gatsby. While that's not a terrible default, it makes testing sift and loki compatibility hard, since loki has undefined ordering for this case. So this PR adds a specific secondary sort key to various `www` queries, mainly for the purpose of testing sift/loki compatibility, but also because it makes sense. --- www/gatsby-node.js | 2 +- www/src/pages/index.js | 3 ++- www/src/templates/tags.js | 2 +- www/src/templates/template-blog-list.js | 2 +- www/src/templates/template-contributor-page.js | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/www/gatsby-node.js b/www/gatsby-node.js index a274256641e24..5e73aa91b9252 100644 --- a/www/gatsby-node.js +++ b/www/gatsby-node.js @@ -144,7 +144,7 @@ exports.createPages = ({ graphql, actions }) => { graphql(` query { allMarkdownRemark( - sort: { order: DESC, fields: [frontmatter___date] } + sort: { order: DESC, fields: [frontmatter___date, fields___slug] } limit: 10000 filter: { fileAbsolutePath: { ne: null } } ) { diff --git a/www/src/pages/index.js b/www/src/pages/index.js index 620134ea78c2d..1de1fa9eadfe8 100644 --- a/www/src/pages/index.js +++ b/www/src/pages/index.js @@ -301,7 +301,7 @@ export const pageQuery = graphql` } } allMarkdownRemark( - sort: { order: DESC, fields: [frontmatter___date] } + sort: { order: DESC, fields: [frontmatter___date, fields___slug] } limit: 3 filter: { frontmatter: { draft: { ne: true } } @@ -319,6 +319,7 @@ export const pageQuery = graphql` filter: { fields: { starterShowcase: { slug: { in: $featuredStarters } } } } + sort: { fields: [fields___starterShowcase___slug] } ) { edges { node { diff --git a/www/src/templates/tags.js b/www/src/templates/tags.js index eae1d5840b124..e0353071fdec3 100644 --- a/www/src/templates/tags.js +++ b/www/src/templates/tags.js @@ -61,7 +61,7 @@ export const pageQuery = graphql` query($tag: String) { allMarkdownRemark( limit: 2000 - sort: { fields: [frontmatter___date], order: DESC } + sort: { fields: [frontmatter___date, fields___slug], order: DESC } filter: { frontmatter: { tags: { in: [$tag] } } fileAbsolutePath: { regex: "/docs.blog/" } diff --git a/www/src/templates/template-blog-list.js b/www/src/templates/template-blog-list.js index 22859a6864cce..d38971a732965 100644 --- a/www/src/templates/template-blog-list.js +++ b/www/src/templates/template-blog-list.js @@ -112,7 +112,7 @@ export default BlogPostsIndex export const pageQuery = graphql` query blogListQuery($skip: Int!, $limit: Int!) { allMarkdownRemark( - sort: { order: DESC, fields: [frontmatter___date] } + sort: { order: DESC, fields: [frontmatter___date, fields___slug] } filter: { frontmatter: { draft: { ne: true } } fileAbsolutePath: { regex: "/docs.blog/" } diff --git a/www/src/templates/template-contributor-page.js b/www/src/templates/template-contributor-page.js index c36caf6a479db..6bb6691622f8a 100644 --- a/www/src/templates/template-contributor-page.js +++ b/www/src/templates/template-contributor-page.js @@ -105,7 +105,7 @@ export const pageQuery = graphql` } } allMarkdownRemark( - sort: { order: DESC, fields: [frontmatter___date] } + sort: { order: DESC, fields: [frontmatter___date, fields___slug] } filter: { fileAbsolutePath: { regex: "/blog/" } frontmatter: { draft: { ne: true } } From ce5cbe80d31ab7c95575af148fcbdd031d99b7b2 Mon Sep 17 00:00:00 2001 From: Miguel Palau Date: Thu, 22 Nov 2018 11:37:47 -0600 Subject: [PATCH 381/462] feat(gatsby): use cheap-module-source-map devtool webpack config in develop mode for easier debugging (#10083) Closes #6278 Sourcemaps are not currently working on gatsby v2. This fixes that on 1 string. --- packages/gatsby/src/utils/webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby/src/utils/webpack.config.js b/packages/gatsby/src/utils/webpack.config.js index e8c6695d4c6c3..61c2152705d94 100644 --- a/packages/gatsby/src/utils/webpack.config.js +++ b/packages/gatsby/src/utils/webpack.config.js @@ -263,7 +263,7 @@ module.exports = async ( function getDevtool() { switch (stage) { case `develop`: - return `eval` + return `cheap-module-source-map` // use a normal `source-map` for the html phases since // it gives better line and column numbers case `develop-html`: From f2c1fc2bcc58ceffa0e207c6be793040385fd783 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Thu, 22 Nov 2018 18:38:49 +0100 Subject: [PATCH 382/462] chore(release): Publish - gatsby@2.0.55 --- packages/gatsby/CHANGELOG.md | 8 ++++++++ packages/gatsby/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 5cf2e7d6fa290..e6e3e8857e5e8 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.55](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.54...gatsby@2.0.55) (2018-11-22) + +### Features + +- **gatsby:** use cheap-module-source-map devtool webpack config in develop mode for easier debugging ([#10083](https://github.com/gatsbyjs/gatsby/issues/10083)) ([ce5cbe8](https://github.com/gatsbyjs/gatsby/commit/ce5cbe8)), closes [#6278](https://github.com/gatsbyjs/gatsby/issues/6278) + ## [2.0.54](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.53...gatsby@2.0.54) (2018-11-21) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 5afcd35520b01..55d6c6d501a0a 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.54", + "version": "2.0.55", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From bafdfece27b4b486a779075f2349a791c8d560f8 Mon Sep 17 00:00:00 2001 From: greg lobinski <32480082+greglobinski@users.noreply.github.com> Date: Thu, 22 Nov 2018 20:18:32 +0100 Subject: [PATCH 383/462] fix(www): add proper sorting for featured starters in Homepage Ecosystem section (#10096) Instead by `slug` we sort the starters by `stars` (DESC) - solving https://github.com/gatsbyjs/gatsby/pull/10085#discussion_r235792615 --- www/src/pages/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/src/pages/index.js b/www/src/pages/index.js index 1de1fa9eadfe8..ef14655156029 100644 --- a/www/src/pages/index.js +++ b/www/src/pages/index.js @@ -319,7 +319,7 @@ export const pageQuery = graphql` filter: { fields: { starterShowcase: { slug: { in: $featuredStarters } } } } - sort: { fields: [fields___starterShowcase___slug] } + sort: { order: DESC, fields: [fields___starterShowcase___stars] } ) { edges { node { From 7325fd98aa3b3130494ebd21abd5cd5e1876f696 Mon Sep 17 00:00:00 2001 From: Vagisha Nidhi Date: Mon, 26 Nov 2018 17:48:29 +0530 Subject: [PATCH 384/462] test: Adding test report tasks to Azure pipelines (#10128) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **What kind of change does this PR introduce?** This PR is related to the issue #10103 The PR helps to publish test results for reporting in Azure Pipelines. **Summary** Azure Pipelines provides excellent reporting capabilities that can be leveraged by this PR. An example report is shown in the image below. ![image](https://user-images.githubusercontent.com/13175100/48767951-e8a73580-ecdd-11e8-8e6a-20d7767d7c1b.png) A screenshot for code coverage : ![image](https://user-images.githubusercontent.com/13175100/48795657-938e1280-ed23-11e8-88d0-bf94f610d774.png) **Does this PR introduce a breaking change?** No --- azure-pipelines.yml | 15 +++++ jest.config.js | 5 +- package.json | 1 + yarn.lock | 133 +++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 151 insertions(+), 3 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a5a543dd70e46..7ddefe8cffc29 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -13,4 +13,19 @@ steps: displayName: "Install Node.js" - script: yarn bootstrap + - script: yarn test + + - task: PublishTestResults@2 + displayName: "Publish Test Results" + condition: succeededOrFailed() + inputs: + testResultsFiles: "**junit*.xml" + testRunTitle: TestRun ${{ parameters.name }} $(node_version) + + - task: PublishCodeCoverageResults@1 + displayName: "Publish code coverage results" + condition: succeededOrFailed() + inputs: + codeCoverageTool: "cobertura" + summaryFileLocation: "**/coverage/cobertura-coverage.xml" diff --git a/jest.config.js b/jest.config.js index e8c72ea5c7484..c2d5419b42b79 100644 --- a/jest.config.js +++ b/jest.config.js @@ -31,8 +31,8 @@ module.exports = { moduleNameMapper: { "^highlight.js$": `/node_modules/highlight.js/lib/index.js`, }, - collectCoverage: false, - coverageReporters: [`json-summary`, `text`, `html`], + collectCoverage: true, + coverageReporters: [`json-summary`, `text`, `html`, `cobertura`], coverageThreshold: { global: { lines: 45, @@ -42,4 +42,5 @@ module.exports = { }, }, collectCoverageFrom: coverageDirs, + reporters: [`default`, `jest-junit`], } diff --git a/package.json b/package.json index 753bcb6a017c5..975b4434839c6 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "glob": "^7.1.1", "husky": "1.1.1", "jest": "^23.5.0", + "jest-junit": "^5.0.0", "jest-cli": "^23.5.0", "lerna": "^3.3.0", "lint-staged": "^8.0.4", diff --git a/yarn.lock b/yarn.lock index 737b969046141..3a1899467c43c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2878,6 +2878,14 @@ babel-jest@^23.4.2: babel-plugin-istanbul "^4.1.6" babel-preset-jest "^23.2.0" +babel-jest@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1" + integrity sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew== + dependencies: + babel-plugin-istanbul "^4.1.6" + babel-preset-jest "^23.2.0" + babel-loader@8.0.0-beta.4: version "8.0.0-beta.4" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.0-beta.4.tgz#c3fab00696c385c70c04dbe486391f0eb996f345" @@ -7669,6 +7677,18 @@ expect@^23.5.0: jest-message-util "^23.4.0" jest-regex-util "^23.3.0" +expect@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98" + integrity sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w== + dependencies: + ansi-styles "^3.2.0" + jest-diff "^23.6.0" + jest-get-type "^22.1.0" + jest-matcher-utils "^23.6.0" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + express-graphql@^0.6.12: version "0.6.12" resolved "http://registry.npmjs.org/express-graphql/-/express-graphql-0.6.12.tgz#dfcb2058ca72ed5190b140830ad8cdbf76a9128a" @@ -10937,6 +10957,26 @@ jest-config@^23.5.0: micromatch "^2.3.11" pretty-format "^23.5.0" +jest-config@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.6.0.tgz#f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d" + integrity sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ== + dependencies: + babel-core "^6.0.0" + babel-jest "^23.6.0" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^23.4.0" + jest-environment-node "^23.4.0" + jest-get-type "^22.1.0" + jest-jasmine2 "^23.6.0" + jest-regex-util "^23.3.0" + jest-resolve "^23.6.0" + jest-util "^23.4.0" + jest-validate "^23.6.0" + micromatch "^2.3.11" + pretty-format "^23.6.0" + jest-diff@^23.5.0: version "23.5.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.5.0.tgz#250651a433dd0050290a07642946cc9baaf06fba" @@ -10947,6 +10987,16 @@ jest-diff@^23.5.0: jest-get-type "^22.1.0" pretty-format "^23.5.0" +jest-diff@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d" + integrity sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g== + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.1.0" + pretty-format "^23.6.0" + jest-docblock@^23.2.0: version "23.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" @@ -10962,6 +11012,14 @@ jest-each@^23.5.0: chalk "^2.0.1" pretty-format "^23.5.0" +jest-each@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.6.0.tgz#ba0c3a82a8054387016139c733a05242d3d71575" + integrity sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg== + dependencies: + chalk "^2.0.1" + pretty-format "^23.6.0" + jest-environment-jsdom@^23.4.0: version "23.4.0" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" @@ -11016,6 +11074,35 @@ jest-jasmine2@^23.5.0: jest-util "^23.4.0" pretty-format "^23.5.0" +jest-jasmine2@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0" + integrity sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ== + dependencies: + babel-traverse "^6.0.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^23.6.0" + is-generator-fn "^1.0.0" + jest-diff "^23.6.0" + jest-each "^23.6.0" + jest-matcher-utils "^23.6.0" + jest-message-util "^23.4.0" + jest-snapshot "^23.6.0" + jest-util "^23.4.0" + pretty-format "^23.6.0" + +jest-junit@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-5.2.0.tgz#980401db7aa69999cf117c6d740a8135c22ae379" + integrity sha512-Mdg0Qpdh1Xm/FA1B/mcLlmEmlr3XzH5pZg7MvcAwZhjHijPRd1z/UwYwkwNHmCV7o4ZOWCf77nLu7ZkhHHrtJg== + dependencies: + jest-config "^23.6.0" + jest-validate "^23.0.1" + mkdirp "^0.5.1" + strip-ansi "^4.0.0" + xml "^1.0.1" + jest-leak-detector@^23.5.0: version "23.5.0" resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.5.0.tgz#14ac2a785bd625160a2ea968fd5d98b7dcea3e64" @@ -11032,6 +11119,15 @@ jest-matcher-utils@^23.5.0: jest-get-type "^22.1.0" pretty-format "^23.5.0" +jest-matcher-utils@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80" + integrity sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog== + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + pretty-format "^23.6.0" + jest-message-util@^23.4.0: version "23.4.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" @@ -11070,6 +11166,15 @@ jest-resolve@^23.5.0: chalk "^2.0.1" realpath-native "^1.0.0" +jest-resolve@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.6.0.tgz#cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae" + integrity sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA== + dependencies: + browser-resolve "^1.11.3" + chalk "^2.0.1" + realpath-native "^1.0.0" + jest-runner@^23.5.0: version "23.5.0" resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.5.0.tgz#570f7a044da91648b5bb9b6baacdd511076c71d7" @@ -11137,6 +11242,22 @@ jest-snapshot@^23.5.0: pretty-format "^23.5.0" semver "^5.5.0" +jest-snapshot@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a" + integrity sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg== + dependencies: + babel-types "^6.0.0" + chalk "^2.0.1" + jest-diff "^23.6.0" + jest-matcher-utils "^23.6.0" + jest-message-util "^23.4.0" + jest-resolve "^23.6.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^23.6.0" + semver "^5.5.0" + jest-util@^23.4.0: version "23.4.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" @@ -11151,6 +11272,16 @@ jest-util@^23.4.0: slash "^1.0.0" source-map "^0.6.0" +jest-validate@^23.0.1, jest-validate@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" + integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A== + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^23.6.0" + jest-validate@^23.5.0: version "23.5.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.5.0.tgz#f5df8f761cf43155e1b2e21d6e9de8a2852d0231" @@ -19984,7 +20115,7 @@ xml2js@^0.4.5: sax ">=0.6.0" xmlbuilder "~9.0.1" -xml@1.0.1: +xml@1.0.1, xml@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" integrity sha1-eLpyAgApxbyHuKgaPPzXS0ovweU= From 21ebf2cc530475c39003c36bbf2412612b21f326 Mon Sep 17 00:00:00 2001 From: Haroen Viaene Date: Mon, 26 Nov 2018 14:06:57 +0100 Subject: [PATCH 385/462] fix(gatsby-plugin-filesystem): throw meaningful errors on bad inputs (#10123) fixes #6643 I also fell for this error before, sinc the original errors are swallowed (and fairly unclear too, because of the indirection). Adding validation was suggested in linked issue, so I went for this, since I didn't see any already used object validation like "ow" in use here. --- .../src/__tests__/create-remote-file-node.js | 55 +++++++++++++++++++ .../src/create-remote-file-node.js | 18 ++++++ 2 files changed, 73 insertions(+) create mode 100644 packages/gatsby-source-filesystem/src/__tests__/create-remote-file-node.js diff --git a/packages/gatsby-source-filesystem/src/__tests__/create-remote-file-node.js b/packages/gatsby-source-filesystem/src/__tests__/create-remote-file-node.js new file mode 100644 index 0000000000000..92f4622844bf3 --- /dev/null +++ b/packages/gatsby-source-filesystem/src/__tests__/create-remote-file-node.js @@ -0,0 +1,55 @@ +const createRemoteFileNode = require(`../create-remote-file-node`) + +describe(`create-remote-file-node`, () => { + const defaultArgs = { + url: ``, + store: {}, + cache: {}, + createNode: jest.fn(), + createNodeId: jest.fn(), + } + + it(`throws on invalid inputs: createNode`, () => { + expect(() => { + createRemoteFileNode({ + ...defaultArgs, + createNode: undefined, + }) + }).toThrowErrorMatchingInlineSnapshot( + `"createNode must be a function, was undefined"` + ) + }) + + it(`throws on invalid inputs: createNodeId`, () => { + expect(() => { + createRemoteFileNode({ + ...defaultArgs, + createNodeId: undefined, + }) + }).toThrowErrorMatchingInlineSnapshot( + `"createNodeId must be a function, was undefined"` + ) + }) + + it(`throws on invalid inputs: cache`, () => { + expect(() => { + createRemoteFileNode({ + ...defaultArgs, + cache: undefined, + }) + }).toThrowErrorMatchingInlineSnapshot( + `"cache must be the Gatsby cache, was undefined"` + ) + }) + + it(`throws on invalid inputs: store`, () => { + expect(() => { + createRemoteFileNode({ + ...defaultArgs, + store: undefined, + }) + }).toThrowErrorMatchingInlineSnapshot( + `"store must be the redux store, was undefined"` + ) + }) +}) diff --git a/packages/gatsby-source-filesystem/src/create-remote-file-node.js b/packages/gatsby-source-filesystem/src/create-remote-file-node.js index b7eaa80b41351..ecd46827215dd 100644 --- a/packages/gatsby-source-filesystem/src/create-remote-file-node.js +++ b/packages/gatsby-source-filesystem/src/create-remote-file-node.js @@ -292,6 +292,24 @@ module.exports = ({ createNodeId, ext = null, }) => { + // validation of the input + // without this it's notoriously easy to pass in the wrong `createNodeId` + // see gatsbyjs/gatsby#6643 + if (typeof createNodeId !== `function`) { + throw new Error( + `createNodeId must be a function, was ${typeof createNodeId}` + ) + } + if (typeof createNode !== `function`) { + throw new Error(`createNode must be a function, was ${typeof createNode}`) + } + if (typeof store !== `object`) { + throw new Error(`store must be the redux store, was ${typeof store}`) + } + if (typeof cache !== `object`) { + throw new Error(`cache must be the Gatsby cache, was ${typeof cache}`) + } + // Check if we already requested node for this remote file // and return stored promise if we did. if (processingCache[url]) { From 55a299d22196f3eaabc72b44285b41cfa35c9dc9 Mon Sep 17 00:00:00 2001 From: Leo Bernard Date: Mon, 26 Nov 2018 15:02:51 +0100 Subject: [PATCH 386/462] fix: Improve spacing of dependency grid in starter detail page (#10131) The spacing in the dependency grid looked off to me, so I improved it a bit. Before: screenshot 2018-11-26 at 13 58 19 After: screenshot 2018-11-26 at 13 58 07 --- www/src/views/starter/details.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/www/src/views/starter/details.js b/www/src/views/starter/details.js index e5b345e32afdb..d791aad96aea4 100644 --- a/www/src/views/starter/details.js +++ b/www/src/views/starter/details.js @@ -80,11 +80,10 @@ const Details = ({
    @@ -100,7 +99,6 @@ const Details = ({ key={dep} css={{ ...sharedStyles.truncate, - marginBottom: `1rem`, }} > From a86f7a3438bb9899d287beb7a3290af3f758337f Mon Sep 17 00:00:00 2001 From: Explorer / <39474131+open-source-explorer@users.noreply.github.com> Date: Mon, 26 Nov 2018 19:36:14 +0530 Subject: [PATCH 387/462] Add licensing information (#10112) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add licensing information to the `README` file which is a usual practice being followed 👍 --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index dc44f0ceeeb77..3275a5d4f5554 100644 --- a/README.md +++ b/README.md @@ -153,6 +153,10 @@ This repository is a [monorepo](https://trunkbaseddevelopment.com/monorepos/) ma We are currently only accepting bug fixes for Gatsby v1. No new features will be accepted. +## :memo: License + +Licensed under the [MIT License](./LICENSE). + ## 💜 Thanks to Our Contributors and Sponsors Thanks to our many contributors and sponsors as well as the companies sponsoring From 85c352c069ade7cf4b63df54e1bdc01f77e16e7f Mon Sep 17 00:00:00 2001 From: Lennart Date: Mon, 26 Nov 2018 15:08:34 +0100 Subject: [PATCH 388/462] fix(www): Remove multiple entries from sites tags (#10118) * fix(www): Remove multiple entries from sites tags * Forgot the Paving tag * Update sites.yml --- docs/sites.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/sites.yml b/docs/sites.yml index 79a33479e7966..2d5578b36a2e4 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3422,7 +3422,8 @@ description: > Kings Valley Paving is an asphalt, paving and concrete company serving the commercial, residential and industrial sectors in the Greater Toronto Area. categories: - - Marketing, Construction, Paving + - Marketing + - Construction built_by: Michael Uloth built_by_url: https://www.michaeluloth.com featured: false @@ -3432,7 +3433,8 @@ description: > Peter Barrett is a Canadian baritone from Newfoundland and Labrador who performs opera and concert repertoire in Canada, the U.S. and around the world. categories: - - Portfolio, Music + - Portfolio + - Music built_by: Michael Uloth built_by_url: https://www.michaeluloth.com featured: false From 7d362e1f50e1600154c03f8c8f2c5fc01525d795 Mon Sep 17 00:00:00 2001 From: Esau Suarez Date: Mon, 26 Nov 2018 14:09:09 +0000 Subject: [PATCH 389/462] docs(unit-testing): fixes babel-core version (#10117) The bridge dependency for Babel 7's `babel-core` is `babel-core@7.0.0-bridge.0` --- docs/docs/unit-testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/unit-testing.md b/docs/docs/unit-testing.md index 2585cf14f51f6..4013d533d62bd 100644 --- a/docs/docs/unit-testing.md +++ b/docs/docs/unit-testing.md @@ -24,7 +24,7 @@ First you need to install Jest and some more required packages. You need to install Babel 7 as it's required by Jest. ```sh -npm install --save-dev jest babel-jest react-test-renderer identity-obj-proxy 'babel-core@^7.0.0-0' @babel/core babel-preset-gatsby +npm install --save-dev jest babel-jest react-test-renderer identity-obj-proxy babel-core@^7.0.0-bridge.0 @babel/core babel-preset-gatsby ``` ### 2. Creating a configuration file for Jest From aa58dcdeacec9045c8d7760dfac44e18f27e5d64 Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Mon, 26 Nov 2018 09:15:02 -0500 Subject: [PATCH 390/462] chore(release): Publish - gatsby-source-drupal@3.0.11 - gatsby-source-filesystem@2.0.9 - gatsby-source-wordpress@3.0.15 --- packages/gatsby-source-drupal/CHANGELOG.md | 6 ++++++ packages/gatsby-source-drupal/package.json | 4 ++-- packages/gatsby-source-filesystem/CHANGELOG.md | 8 ++++++++ packages/gatsby-source-filesystem/package.json | 2 +- packages/gatsby-source-wordpress/CHANGELOG.md | 6 ++++++ packages/gatsby-source-wordpress/package.json | 4 ++-- 6 files changed, 25 insertions(+), 5 deletions(-) diff --git a/packages/gatsby-source-drupal/CHANGELOG.md b/packages/gatsby-source-drupal/CHANGELOG.md index af478c6a8c65a..2ba2469dfd583 100644 --- a/packages/gatsby-source-drupal/CHANGELOG.md +++ b/packages/gatsby-source-drupal/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.11](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-drupal/compare/gatsby-source-drupal@3.0.10...gatsby-source-drupal@3.0.11) (2018-11-26) + +**Note:** Version bump only for package gatsby-source-drupal + ## [3.0.10](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-drupal/compare/gatsby-source-drupal@3.0.9...gatsby-source-drupal@3.0.10) (2018-11-16) diff --git a/packages/gatsby-source-drupal/package.json b/packages/gatsby-source-drupal/package.json index fc6bc0128269f..e451670aad8c7 100644 --- a/packages/gatsby-source-drupal/package.json +++ b/packages/gatsby-source-drupal/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-drupal", "description": "Gatsby source plugin for building websites using the Drupal CMS as a data source", - "version": "3.0.10", + "version": "3.0.11", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -10,7 +10,7 @@ "@babel/runtime": "^7.0.0", "axios": "^0.18.0", "bluebird": "^3.5.0", - "gatsby-source-filesystem": "^2.0.8", + "gatsby-source-filesystem": "^2.0.9", "lodash": "^4.17.10" }, "devDependencies": { diff --git a/packages/gatsby-source-filesystem/CHANGELOG.md b/packages/gatsby-source-filesystem/CHANGELOG.md index 98658143015bd..2fef9750d3fc7 100644 --- a/packages/gatsby-source-filesystem/CHANGELOG.md +++ b/packages/gatsby-source-filesystem/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.9](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-filesystem/compare/gatsby-source-filesystem@2.0.8...gatsby-source-filesystem@2.0.9) (2018-11-26) + +### Bug Fixes + +- **gatsby-plugin-filesystem:** throw meaningful errors on bad inputs ([#10123](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-filesystem/issues/10123)) ([21ebf2c](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-filesystem/commit/21ebf2c)), closes [#6643](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-filesystem/issues/6643) + ## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-filesystem/compare/gatsby-source-filesystem@2.0.7...gatsby-source-filesystem@2.0.8) (2018-11-08) diff --git a/packages/gatsby-source-filesystem/package.json b/packages/gatsby-source-filesystem/package.json index d0d12c54bd679..ab56df925b221 100644 --- a/packages/gatsby-source-filesystem/package.json +++ b/packages/gatsby-source-filesystem/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-filesystem", "description": "Gatsby plugin which parses files within a directory for further parsing by other plugins", - "version": "2.0.8", + "version": "2.0.9", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-source-wordpress/CHANGELOG.md b/packages/gatsby-source-wordpress/CHANGELOG.md index a26776330abae..37711acfd7f01 100644 --- a/packages/gatsby-source-wordpress/CHANGELOG.md +++ b/packages/gatsby-source-wordpress/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.15](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-wordpress/compare/gatsby-source-wordpress@3.0.14...gatsby-source-wordpress@3.0.15) (2018-11-26) + +**Note:** Version bump only for package gatsby-source-wordpress + ## [3.0.14](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-wordpress/compare/gatsby-source-wordpress@3.0.13...gatsby-source-wordpress@3.0.14) (2018-11-14) diff --git a/packages/gatsby-source-wordpress/package.json b/packages/gatsby-source-wordpress/package.json index bb0e02840f6c6..a09b5e7d92f11 100644 --- a/packages/gatsby-source-wordpress/package.json +++ b/packages/gatsby-source-wordpress/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-wordpress", "description": "Gatsby source plugin for building websites using the Wordpress CMS as a data source.", - "version": "3.0.14", + "version": "3.0.15", "author": "Sebastien Fichot ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "bluebird": "^3.5.0", "deep-map": "^1.5.0", "deep-map-keys": "^1.2.0", - "gatsby-source-filesystem": "^2.0.8", + "gatsby-source-filesystem": "^2.0.9", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.10", "minimatch": "^3.0.4", From 11e18342cc61e978d3abff692d54d534e8722bb1 Mon Sep 17 00:00:00 2001 From: Nicolas Goutay Date: Mon, 26 Nov 2018 15:16:44 +0100 Subject: [PATCH 391/462] feat(gatsby-remark-prismjs): add in ability to use comments to specify line highlighting (#9696) * feat: allow highlight directives in prismjs plugin Heavily inspired by https://github.com/DSchau/gatsby/pull/2 * fix: Fix multiline plain-text for directives * tests: test highlight-range directive * Add built version * feat: rely on prismjs plugin for embed-snippet directive highlighting * Add console.warn if invalid range is specified * docs: document highlight directives * fix: fix endless loop when multiple highlight-start/end directives * Add kitchen sink directive test * Remove built version * docs: better directive example * fix: existing highlight ranges behavior now working again * fix: JSX directive not removed after highlight * fix: highlight-range directive removing a line * Add comment explaining priority between top-level declaration and directives * fix lint error * Add more explicit example in README * Fix HTML opening comment not being stripped * Add `./highlight-line-range.js to .gitignore * Remove extraneous tags * Add comment for big regex --- .../src/__tests__/__snapshots__/index.js.snap | 4 +- .../src/__tests__/index.js | 2 +- .../gatsby-remark-embed-snippet/src/index.js | 77 +------- packages/gatsby-remark-prismjs/.gitignore | 1 + packages/gatsby-remark-prismjs/README.md | 51 +++++ .../highlight-line-range.js.snap | 87 +++++++++ .../__tests__/fixtures/highlight-html.html | 9 + ...-jsx-comment-after-prism-highlighting.html | 4 + .../fixtures/highlight-jsx-comment.js | 8 + .../fixtures/highlight-kitchen-sink.js | 27 +++ .../src/__tests__/fixtures/highlight-line.js | 3 + .../__tests__/fixtures/highlight-next-line.js | 4 + .../fixtures/highlight-range-invalid.js | 6 + .../highlight-range-longer-than-code.js | 6 + .../src/__tests__/fixtures/highlight-range.js | 6 + .../__tests__/fixtures/highlight-start-end.js | 6 + .../fixtures/highlight-start-without-end.js | 3 + .../__tests__/fixtures/highlight-yaml.yaml | 3 + .../src/__tests__/fixtures/index.js | 12 ++ .../src/__tests__/highlight-line-range.js | 113 +++++++++++ .../src/highlight-code.js | 43 ++--- .../src/highlight-line-range.js | 180 ++++++++++++++++++ 22 files changed, 547 insertions(+), 108 deletions(-) create mode 100644 packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-line-range.js.snap create mode 100644 packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-html.html create mode 100644 packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-jsx-comment-after-prism-highlighting.html create mode 100644 packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-jsx-comment.js create mode 100644 packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-kitchen-sink.js create mode 100644 packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-line.js create mode 100644 packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-next-line.js create mode 100644 packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-range-invalid.js create mode 100644 packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-range-longer-than-code.js create mode 100644 packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-range.js create mode 100644 packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-start-end.js create mode 100644 packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-start-without-end.js create mode 100644 packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-yaml.yaml create mode 100644 packages/gatsby-remark-prismjs/src/__tests__/fixtures/index.js create mode 100644 packages/gatsby-remark-prismjs/src/__tests__/highlight-line-range.js create mode 100644 packages/gatsby-remark-prismjs/src/highlight-line-range.js diff --git a/packages/gatsby-remark-embed-snippet/src/__tests__/__snapshots__/index.js.snap b/packages/gatsby-remark-embed-snippet/src/__tests__/__snapshots__/index.js.snap index 17cef23daf26a..b3f972f103836 100644 --- a/packages/gatsby-remark-embed-snippet/src/__tests__/__snapshots__/index.js.snap +++ b/packages/gatsby-remark-embed-snippet/src/__tests__/__snapshots__/index.js.snap @@ -443,7 +443,7 @@ Object { "type": "html", "value": "
    <div>
    -<button>Add Item</button>
    +<button>Add Item</button> 
     
     <ReactCSSTransitionGroup
     transitionName=\\"example\\"
    @@ -875,7 +875,7 @@ Object {
               },
               "type": "html",
               "value": "
    -
    foo: \\"highlighted\\"
    +        
    foo: \\"highlighted\\"
     bar: \\"not highlighted\\"
     baz: \\"highlighted\\"
     qux: \\"not highlighted\\"
    diff --git a/packages/gatsby-remark-embed-snippet/src/__tests__/index.js b/packages/gatsby-remark-embed-snippet/src/__tests__/index.js index b516dfd76f0e5..bd86491488dd3 100644 --- a/packages/gatsby-remark-embed-snippet/src/__tests__/index.js +++ b/packages/gatsby-remark-embed-snippet/src/__tests__/index.js @@ -80,7 +80,7 @@ describe(`gatsby-remark-embed-snippet`, () => { expect(transformed).toMatchSnapshot() expect(console.warn).toHaveBeenCalledWith( - `Invalid match specified: "// highlight-range 1"` + `Invalid match specified: "// highlight-range 1"` ) }) diff --git a/packages/gatsby-remark-embed-snippet/src/index.js b/packages/gatsby-remark-embed-snippet/src/index.js index 715f24b4baddb..51e1419493b6b 100644 --- a/packages/gatsby-remark-embed-snippet/src/index.js +++ b/packages/gatsby-remark-embed-snippet/src/index.js @@ -2,10 +2,8 @@ const fs = require(`fs`) const normalizePath = require(`normalize-path`) -const rangeParser = require(`parse-numeric-range`) const visit = require(`unist-util-visit`) -// HACK: It would be nice to find a better way to share this utility code. const highlightCode = require(`gatsby-remark-prismjs/highlight-code`) // Language defaults to extension.toLowerCase(); @@ -16,8 +14,6 @@ const FILE_EXTENSION_TO_LANGUAGE_MAP = { sh: `bash`, } -const HIGHLIGHT_LINE_REGEX = /\s+(\{\/\*|\/\*|\/\/|)*/ - const getLanguage = file => { if (!file.includes(`.`)) { return `none` @@ -53,75 +49,7 @@ module.exports = ( throw Error(`Invalid snippet specified; no such file "${path}"`) } - // This method removes lines that contain only highlight directives, - // eg 'highlight-next-line' or 'highlight-range' comments. - function filterDirectives(line, index) { - if (line.includes(`highlight-next-line`)) { - // Although we're highlighting the next line, - // We can use the current index since we also filter this lines. - // (Highlight line numbers are 1-based). - highlightLines.push(index + 1) - - // Strip lines that contain highlight-next-line comments. - return false - } else if (line.includes(`highlight-range`)) { - const match = line.match(/highlight-range{([^}]+)}/) - if (!match) { - console.warn(`Invalid match specified: "${line.trim()}"`) - return false - } - const range = match[1] - - // Highlight line numbers are 1-based but so are offsets. - // Remember that the current line (index) will be removed. - rangeParser.parse(range).forEach(offset => { - highlightLines.push(index + offset) - }) - - // Strip lines that contain highlight-range comments. - return false - } - - return true - } - - // Track the number of lines we've filtered, - // So we can adjust the highlighted index accordingly. - let filteredLineOffset = 0 - - // Parse file contents and extract highlight markers: - // highlight-line, highlight-next-line, highlight-range - // We support JS, JSX, HTML, CSS, and YAML style comments. - // Turn them into an Array format as expected by highlightCode(). - // The order if these operations is important! - // Filtering next-line comments impacts line-numbers for same-line comments. - const highlightLines = [] - const code = fs - .readFileSync(path, `utf8`) - .split(`\n`) - .filter((line, index) => { - const returnValue = filterDirectives(line, index - filteredLineOffset) - - if (!returnValue) { - filteredLineOffset++ - } - - return returnValue - }) - .map((line, index) => { - if (line.includes(`highlight-line`)) { - // Mark this line for highlighting. - // (Highlight line numbers are 1-based). - highlightLines.push(index + 1) - - // Strip the highlight comment itself. - return line.replace(HIGHLIGHT_LINE_REGEX, ``) - } - - return line - }) - .join(`\n`) - .trim() + const code = fs.readFileSync(path, `utf8`).trim() // PrismJS's theme styles are targeting pre[class*="language-"] // to apply its styles. We do the same here so that users @@ -146,8 +74,7 @@ module.exports = ( node.value = `
    ${highlightCode(
             language,
    -        code,
    -        highlightLines
    +        code
           )}
    ` } diff --git a/packages/gatsby-remark-prismjs/.gitignore b/packages/gatsby-remark-prismjs/.gitignore index a1eea9b0175b0..135871ae1b2bd 100644 --- a/packages/gatsby-remark-prismjs/.gitignore +++ b/packages/gatsby-remark-prismjs/.gitignore @@ -1,6 +1,7 @@ /index.js /add-line-numbers.js /highlight-code.js +/highlight-line-range.js /parse-line-number-range.js /load-prism-language.js /prism-language-dependencies.js diff --git a/packages/gatsby-remark-prismjs/README.md b/packages/gatsby-remark-prismjs/README.md index 763205f3181b9..c5cbd10d14ede 100644 --- a/packages/gatsby-remark-prismjs/README.md +++ b/packages/gatsby-remark-prismjs/README.md @@ -228,6 +228,57 @@ You can also add line highlighting. It adds a span around lines of code with a special class `.gatsby-highlight-code-line` that you can target with styles. See this README for more info. +To highlight lines, you can use one of the following directives as comments in your +code: + +- `highlight-line` highlights the current line; +- `highlight-next-line` highlights the next line; +- `highlight-start` highlights the lines until the matching `hightlight-end`; +- `highlight-range{1, 4-6}` will highlight the next line, and the fourth, fifth and sixth lines. + + ```jsx + class FlavorForm extends React.Component { // highlight-line + constructor(props) { + super(props); + this.state = {value: 'coconut'}; + + this.handleChange = this.handleChange.bind(this); + this.handleSubmit = this.handleSubmit.bind(this); + } + + handleChange(event) { + // highlight-next-line + this.setState({value: event.target.value}); + } + + // highlight-start + handleSubmit(event) { + alert('Your favorite flavor is: ' + this.state.value); + event.preventDefault(); + } + // highlight-end + + render() { + return ( + { /* highlight-range{1,4-9,12} */ } +
    + + +
    + ); + } + } + ``` + +You can also specify the highlighted lines outside of the code block. In the following code snippet, lines 1 and 4 through 6 will get the line highlighting. The line range parsing is done with . diff --git a/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-line-range.js.snap b/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-line-range.js.snap new file mode 100644 index 0000000000000..b0eb94aad0543 --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-line-range.js.snap @@ -0,0 +1,87 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`highlighting a line range highlight-line highlights line 1`] = ` +" return \\"hello world\\" +" +`; + +exports[`highlighting a line range highlight-next-line highlights correct line 1`] = ` +" return \\"hello world\\" +" +`; + +exports[`highlighting a line range highlight-range does not highlight and warns if range is invalid 1`] = `""`; + +exports[`highlighting a line range highlight-range highlights correct lines 1`] = ` +" a = 1 + 1 + + b = 2 + 2 + + return \\"hello world\\" +" +`; + +exports[`highlighting a line range highlight-range highlights until end of code block if ranges goes farther 1`] = ` +" a = 1 + 1 + + b = 2 + 2 + + return \\"hello world\\" + +} + + +" +`; + +exports[`highlighting a line range highlight-start / highlight-end highlights correct lines 1`] = ` +" var a = \\"b\\" + + return a + \\"hello world\\" +" +`; + +exports[`highlighting a line range highlight-start / highlight-end highlights without end directive 1`] = ` +"var a = \\"b\\" + +return a + \\"hello world\\" + + +" +`; + +exports[`highlighting a line range jsx comment highlights comment line 1`] = ` +" +" +`; + +exports[`highlighting a line range jsx comment highlights comment line after Prism highlighting 1`] = ` +" <button>sup</button> +" +`; + +exports[`highlighting a line range kitchen sink highlights multiple directives 1`] = ` +"import React, { Component } from \\"react\\" + + state = { + + count: 0, + + } + + count: state.count + 1, + + render() { + + const { count } = this.state + + + + +" +`; + +exports[`highlighting a line range yaml highlights yaml 1`] = ` +"- title: catorce +" +`; diff --git a/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-html.html b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-html.html new file mode 100644 index 0000000000000..693ff853ae4d6 --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-html.html @@ -0,0 +1,9 @@ + + + + Helloooooooooo + + +

    hello world

    + + diff --git a/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-jsx-comment-after-prism-highlighting.html b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-jsx-comment-after-prism-highlighting.html new file mode 100644 index 0000000000000..e46c9a1f43226 --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-jsx-comment-after-prism-highlighting.html @@ -0,0 +1,4 @@ +const Button = () => + ( + <button>sup</button> {/* highlight-line */} + ) \ No newline at end of file diff --git a/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-jsx-comment.js b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-jsx-comment.js new file mode 100644 index 0000000000000..6c76794c93eb1 --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-jsx-comment.js @@ -0,0 +1,8 @@ +import React from "react" +export default function Button() { + return ( +
    + {/* highlight-line */} +
    + ) +} diff --git a/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-kitchen-sink.js b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-kitchen-sink.js new file mode 100644 index 0000000000000..ebbaedebea9b1 --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-kitchen-sink.js @@ -0,0 +1,27 @@ +import React, { Component } from "react" // highlight-line +export default class Counter extends Component { + /* highlight-start */ + state = { + count: 0, + } + /* highlight-end */ + updateCount = () => { + this.setState(state => ({ + // highlight-next-line + count: state.count + 1, + })) + } + // highlight-range{1-2} + render() { + const { count } = this.state + return ( + // highlight-line +
    + clicked {count} + {/* highlight-start */} + + {/* highlight-end */} +
    + ) + } +} diff --git a/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-line.js b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-line.js new file mode 100644 index 0000000000000..456927b8594d9 --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-line.js @@ -0,0 +1,3 @@ +function test() { + return "hello world" // highlight-line +} diff --git a/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-next-line.js b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-next-line.js new file mode 100644 index 0000000000000..30ac3c772a11e --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-next-line.js @@ -0,0 +1,4 @@ +function test() { + // highlight-next-line + return "hello world" +} diff --git a/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-range-invalid.js b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-range-invalid.js new file mode 100644 index 0000000000000..66b869053e62c --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-range-invalid.js @@ -0,0 +1,6 @@ +function test() { + // highlight-range + a = 1 + 1 + b = 2 + 2 + return "hello world" +} diff --git a/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-range-longer-than-code.js b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-range-longer-than-code.js new file mode 100644 index 0000000000000..472cec0255e7d --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-range-longer-than-code.js @@ -0,0 +1,6 @@ +function test() { + // highlight-range{1-10} + a = 1 + 1 + b = 2 + 2 + return "hello world" +} diff --git a/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-range.js b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-range.js new file mode 100644 index 0000000000000..d03a9a4f80bdd --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-range.js @@ -0,0 +1,6 @@ +function test() { + // highlight-range{1-3} + a = 1 + 1 + b = 2 + 2 + return "hello world" +} diff --git a/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-start-end.js b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-start-end.js new file mode 100644 index 0000000000000..14160d19f3f60 --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-start-end.js @@ -0,0 +1,6 @@ +function test() { + // highlight-start + var a = "b" + return a + "hello world" + // highlight-end +} diff --git a/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-start-without-end.js b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-start-without-end.js new file mode 100644 index 0000000000000..136d2ee035755 --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-start-without-end.js @@ -0,0 +1,3 @@ +// highlight-start +var a = "b" +return a + "hello world" diff --git a/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-yaml.yaml b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-yaml.yaml new file mode 100644 index 0000000000000..6e7bcf216cc56 --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/highlight-yaml.yaml @@ -0,0 +1,3 @@ +- title: uno +- title: dos +- title: catorce # highlight-line diff --git a/packages/gatsby-remark-prismjs/src/__tests__/fixtures/index.js b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/index.js new file mode 100644 index 0000000000000..d72f6123a9f89 --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/__tests__/fixtures/index.js @@ -0,0 +1,12 @@ +const fs = require(`fs-extra`) +const path = require(`path`) +const base = __dirname +module.exports = fs.readdirSync(base).reduce((lookup, file) => { + if (file !== `index.js`) { + const name = file + .replace(/-(\w)/g, (_, char) => char.toUpperCase()) + .replace(/\..+/, ``) + lookup[name] = fs.readFileSync(path.join(base, file), `utf8`) + } + return lookup +}, {}) diff --git a/packages/gatsby-remark-prismjs/src/__tests__/highlight-line-range.js b/packages/gatsby-remark-prismjs/src/__tests__/highlight-line-range.js new file mode 100644 index 0000000000000..659c50e2e0443 --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/__tests__/highlight-line-range.js @@ -0,0 +1,113 @@ +const highlightLineRange = require(`../highlight-line-range`) +const fixtures = require(`./fixtures`) +const output = highlighted => highlighted.map(({ code }) => code).join(`\n`) +const getHighlighted = lines => lines.filter(line => line.highlighted) +describe(`highlighting a line range`, () => { + describe(`highlight-line`, () => { + it(`strips directive`, () => { + const highlights = highlightLineRange(fixtures.highlightLine) + expect(output(highlights)).not.toContain(`highlight-line`) + }) + it(`highlights line`, () => { + const highlights = highlightLineRange(fixtures.highlightLine) + expect(output(getHighlighted(highlights))).toMatchSnapshot() + }) + }) + describe(`highlight-next-line`, () => { + it(`strips directive`, () => { + const highlights = highlightLineRange(fixtures.highlightNextLine) + expect(output(highlights)).not.toContain(`highlight-next-line`) + }) + it(`highlights correct line`, () => { + const highlights = highlightLineRange(fixtures.highlightNextLine) + expect(output(getHighlighted(highlights))).toMatchSnapshot() + }) + }) + describe(`highlight-start / highlight-end`, () => { + it(`strips directives`, () => { + const highlights = highlightLineRange(fixtures.highlightStartEnd) + const code = output(highlights) + ;[`highlight-start`, `highlight-end`].forEach(directive => { + expect(code).not.toContain(directive) + }) + }) + it(`highlights correct lines`, () => { + const highlights = highlightLineRange(fixtures.highlightStartEnd) + expect(output(getHighlighted(highlights))).toMatchSnapshot() + }) + it(`highlights without end directive`, () => { + const highlights = highlightLineRange(fixtures.highlightStartWithoutEnd) + expect(output(getHighlighted(highlights))).toMatchSnapshot() + }) + }) + describe(`highlight-range`, () => { + it(`strips directives`, () => { + const highlights = highlightLineRange(fixtures.highlightRange) + expect(output(highlights)).not.toContain(`highlight-range`) + }) + it(`highlights correct lines`, () => { + const highlights = highlightLineRange(fixtures.highlightRange) + expect(output(getHighlighted(highlights))).toMatchSnapshot() + }) + it(`does not highlight and warns if range is invalid`, () => { + spyOn(console, `warn`) + + const highlights = highlightLineRange(fixtures.highlightRangeInvalid) + expect(output(getHighlighted(highlights))).toMatchSnapshot() + expect(console.warn).toHaveBeenCalledWith( + `Invalid match specified: "// highlight-range"` + ) + }) + it(`highlights until end of code block if ranges goes farther`, () => { + const highlights = highlightLineRange( + fixtures.highlightRangeLongerThanCode + ) + expect(output(getHighlighted(highlights))).toMatchSnapshot() + }) + }) + describe(`jsx comment`, () => { + it(`removes directive`, () => { + const highlights = highlightLineRange(fixtures.highlightJsxComment) + expect(output(highlights)).not.toContain(`highlight-line`) + }) + it(`highlights comment line`, () => { + const highlights = highlightLineRange(fixtures.highlightJsxComment) + expect(output(getHighlighted(highlights))).toMatchSnapshot() + }) + it(`highlights comment line after Prism highlighting`, () => { + const highlights = highlightLineRange( + fixtures.highlightJsxCommentAfterPrismHighlighting + ) + expect(output(getHighlighted(highlights))).toMatchSnapshot() + }) + }) + describe(`yaml`, () => { + it(`strips directive`, () => { + const highlights = highlightLineRange(fixtures.highlightYaml) + expect(highlights).not.toContain(`highlight-line`) + }) + it(`highlights yaml`, () => { + const highlights = highlightLineRange(fixtures.highlightYaml) + expect(output(getHighlighted(highlights))).toMatchSnapshot() + }) + }) + describe(`kitchen sink`, () => { + it(`strips directives`, () => { + const highlights = highlightLineRange(fixtures.highlightKitchenSink) + const code = output(highlights) + ;[ + `highlight-line`, + `highlight-next-line`, + `highlight-range`, + `highlight-start`, + `highlight-end`, + ].forEach(directive => { + expect(code).not.toContain(directive) + }) + }) + it(`highlights multiple directives`, () => { + const highlights = highlightLineRange(fixtures.highlightKitchenSink) + expect(output(getHighlighted(highlights))).toMatchSnapshot() + }) + }) +}) diff --git a/packages/gatsby-remark-prismjs/src/highlight-code.js b/packages/gatsby-remark-prismjs/src/highlight-code.js index 9935a92694ef8..d3751cc3a97ae 100644 --- a/packages/gatsby-remark-prismjs/src/highlight-code.js +++ b/packages/gatsby-remark-prismjs/src/highlight-code.js @@ -2,8 +2,7 @@ const Prism = require(`prismjs`) const _ = require(`lodash`) const loadPrismLanguage = require(`./load-prism-language`) - -const plainTextWithLFTest = /[^<]*\n[^<]*<\/span>/g +const highlightLineRange = require(`./highlight-line-range`) module.exports = (language, code, lineNumbersHighlight = []) => { // (Try to) load languages on demand. @@ -22,35 +21,19 @@ module.exports = (language, code, lineNumbersHighlight = []) => { const grammar = Prism.languages[language] - let highlightedCode = Prism.highlight(code, grammar, language) - if (lineNumbersHighlight.length > 0) { - // HACK split plain-text spans with line separators inside into multiple plain-text spans - // separatered by line separator - this fixes line highlighting behaviour for jsx - highlightedCode = highlightedCode.replace(plainTextWithLFTest, match => - match.replace(/\n/g, `\n`) - ) + const highlighted = Prism.highlight(code, grammar, language) + const codeSplits = highlightLineRange(highlighted, lineNumbersHighlight) - const codeSplits = highlightedCode.split(`\n`).map((split, i) => { - if (_.includes(lineNumbersHighlight, i + 1)) { - return { - highlighted: true, - code: `${split}\n`, - } - } else { - return { code: split } - } - }) + let finalCode = `` - highlightedCode = `` - const lastIdx = codeSplits.length - 1 - // Don't add back the new line character after highlighted lines - // as they need to be display: block and full-width. - codeSplits.forEach((split, idx) => { - split.highlighted - ? (highlightedCode += split.code) - : (highlightedCode += `${split.code}${idx == lastIdx ? `` : `\n`}`) - }) - } + const lastIdx = codeSplits.length - 1 + // Don't add back the new line character after highlighted lines + // as they need to be display: block and full-width. + codeSplits.forEach((split, idx) => { + split.highlighted + ? (finalCode += split.code) + : (finalCode += `${split.code}${idx == lastIdx ? `` : `\n`}`) + }) - return highlightedCode + return finalCode } diff --git a/packages/gatsby-remark-prismjs/src/highlight-line-range.js b/packages/gatsby-remark-prismjs/src/highlight-line-range.js new file mode 100644 index 0000000000000..211d84e8d82e9 --- /dev/null +++ b/packages/gatsby-remark-prismjs/src/highlight-line-range.js @@ -0,0 +1,180 @@ +const rangeParser = require(`parse-numeric-range`) + +/** + * As code has already been prism-highlighted at this point, + * a JSX opening comment: + * {/* + * would look like this: + * {/* + * And a HTML opening comment: + * |\\*\\/\\}|\\*\\/)?`) +const DIRECTIVE = /highlight-(next-line|line|start|end|range)({([^}]+)})?/ +const END_DIRECTIVE = /highlight-end/ + +const PLAIN_TEXT_WITH_LF_TEST = /[^<]*\n[^<]*<\/span>/g + +const stripComment = line => + /** + * This regexp does the following: + * 1. Match a comment start, along with the accompanying PrismJS opening comment span tag; + * 2. Match one of the directives; + * 3. Match a comment end, along with the accompanying PrismJS closing span tag. + */ + line.replace( + new RegExp( + `\\s*(${HIGHLIGHTED_JSX_COMMENT_START}|${PRISMJS_COMMENT_OPENING_SPAN_TAG}${ + COMMENT_START.source + })\\s*${DIRECTIVE.source}\\s*(${HIGHLIGHTED_JSX_COMMENT_END}|${ + COMMENT_END.source + }${PRISMJS_COMMENT_CLOSING_SPAN_TAG})` + ), + `` + ) + +const wrap = line => + [``, `${line}\n`, ``].join(``) + +const wrapAndStripComment = line => wrap(stripComment(line)) + +const getHighlights = (line, code, index) => { + const [, directive, directiveRange] = line.match(DIRECTIVE) + switch (directive) { + case `next-line`: + return [ + { + code: wrap(code[index + 1]), + highlighted: true, + }, + index + 1, + ] + case `start`: { + // find the next `highlight-end` directive, starting from next line + const endIndex = code.findIndex( + (line, idx) => idx > index && END_DIRECTIVE.test(line) + ) + const end = endIndex === -1 ? code.length : endIndex + const highlighted = code.slice(index + 1, end).map(line => { + return { + code: wrap(line), + highlighted: true, + } + }) + return [highlighted, end] + } + case `line`: + return [ + { + code: wrapAndStripComment(line), + highlighted: true, + }, + index, + ] + case `range`: + // if range is not provided we ignore the directive + if (!directiveRange) { + console.warn(`Invalid match specified: "${line.trim()}"`) + return [ + { + code: code[index + 1], + highlighted: false, + }, + index + 1, + ] + } else { + const strippedDirectiveRange = directiveRange.slice(1, -1) + const range = rangeParser.parse(strippedDirectiveRange) + if (range.length > 0) { + // if current line is 10 and range is {1-5, 7}, lastLineIndexInRange === 17 + let lastLineIndexInRange = index + 1 + range[range.length - 1] + // if range goes farther than code length, make lastLineIndexInRange equal to code length + if (lastLineIndexInRange > code.length) { + lastLineIndexInRange = code.length + } + const highlighted = code + .slice(index + 1, lastLineIndexInRange) + .map((line, idx) => { + return { + code: range.includes(idx + 1) ? wrap(line) : line, + highlighted: range.includes(idx + 1), + } + }) + return [highlighted, lastLineIndexInRange - 1] + } + // if range is incorrect we ignore the directive + console.warn(`Invalid match specified: "${line.trim()}"`) + return [ + { + code: code[index + 1], + highlighted: false, + }, + index + 1, + ] + } + default: + return [ + { + code: wrap(line), + highlighted: true, + }, + index, + ] + } +} + +module.exports = function highlightLineRange(code, highlights = []) { + if (highlights.length > 0 || DIRECTIVE.test(code)) { + // HACK split plain-text spans with line separators inside into multiple plain-text spans + // separatered by line separator - this fixes line highlighting behaviour for jsx + code = code.replace(PLAIN_TEXT_WITH_LF_TEST, match => + match.replace(/\n/g, `\n`) + ) + } + + let highlighted = [] + const split = code.split(`\n`) + + // If a highlight range is passed with the language declaration, e.g. + // ```jsx{1, 3-4} + // we only use that and do not try to parse highlight directives + if (highlights.length > 0) { + return split.map((line, i) => { + if (highlights.includes(i + 1)) { + return { + highlighted: true, + code: wrap(line), + } + } + return { + code: line, + } + }) + } + for (let i = 0; i < split.length; i++) { + const line = split[i] + if (DIRECTIVE.test(line)) { + const [highlights, index] = getHighlights(line, split, i) + highlighted = highlighted.concat(highlights) + i = index + } else { + highlighted.push({ + code: line, + }) + } + } + return highlighted +} From 9e8fdc124585e70badc337c0cf2dbe5225473db7 Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Mon, 26 Nov 2018 09:18:04 -0500 Subject: [PATCH 392/462] chore(release): Publish - gatsby-remark-embed-snippet@3.1.0 - gatsby-remark-prismjs@3.1.0 --- packages/gatsby-remark-embed-snippet/CHANGELOG.md | 8 ++++++++ packages/gatsby-remark-embed-snippet/package.json | 2 +- packages/gatsby-remark-prismjs/CHANGELOG.md | 8 ++++++++ packages/gatsby-remark-prismjs/package.json | 2 +- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/gatsby-remark-embed-snippet/CHANGELOG.md b/packages/gatsby-remark-embed-snippet/CHANGELOG.md index 53fec02c00b97..cf55395f91789 100644 --- a/packages/gatsby-remark-embed-snippet/CHANGELOG.md +++ b/packages/gatsby-remark-embed-snippet/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +# [3.1.0](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-embed-snippet/compare/gatsby-remark-embed-snippet@3.0.3...gatsby-remark-embed-snippet@3.1.0) (2018-11-26) + +### Features + +- **gatsby-remark-prismjs:** add in ability to use comments to specify line highlighting ([#9696](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-embed-snippet/issues/9696)) ([11e1834](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-embed-snippet/commit/11e1834)) + ## [3.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-embed-snippet/compare/gatsby-remark-embed-snippet@3.0.2...gatsby-remark-embed-snippet@3.0.3) (2018-11-05) diff --git a/packages/gatsby-remark-embed-snippet/package.json b/packages/gatsby-remark-embed-snippet/package.json index 99f6647eb3303..ff34b9bcba46b 100644 --- a/packages/gatsby-remark-embed-snippet/package.json +++ b/packages/gatsby-remark-embed-snippet/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-embed-snippet", "description": "Gatsby plugin to embed formatted code snippets within markdown", - "version": "3.0.3", + "version": "3.1.0", "author": "Brian Vaughn ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-remark-prismjs/CHANGELOG.md b/packages/gatsby-remark-prismjs/CHANGELOG.md index 9ff5d7df9c722..42c248eee62e5 100644 --- a/packages/gatsby-remark-prismjs/CHANGELOG.md +++ b/packages/gatsby-remark-prismjs/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +# [3.1.0](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-prismjs/compare/gatsby-remark-prismjs@3.0.3...gatsby-remark-prismjs@3.1.0) (2018-11-26) + +### Features + +- **gatsby-remark-prismjs:** add in ability to use comments to specify line highlighting ([#9696](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-prismjs/issues/9696)) ([11e1834](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-prismjs/commit/11e1834)) + ## [3.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-prismjs/compare/gatsby-remark-prismjs@3.0.2...gatsby-remark-prismjs@3.0.3) (2018-10-29) diff --git a/packages/gatsby-remark-prismjs/package.json b/packages/gatsby-remark-prismjs/package.json index 7ec64789938b2..e69f074dc52e1 100644 --- a/packages/gatsby-remark-prismjs/package.json +++ b/packages/gatsby-remark-prismjs/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-prismjs", "description": "Adds syntax highlighting to code blocks at build time using PrismJS", - "version": "3.0.3", + "version": "3.1.0", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" From 264adfa82a65efa270651e066327ab8cf1aa55e6 Mon Sep 17 00:00:00 2001 From: Joshua Scott Date: Mon, 26 Nov 2018 18:07:34 +0200 Subject: [PATCH 393/462] Fix some typos of 'gatsby' (#10139) Yep! --- docs/blog/2017-11-08-migrate-from-jekyll-to-gatsby/index.md | 2 +- .../blog/2018-06-16-announcing-gatsby-v2-beta-launch/index.md | 2 +- docs/docs/deploying-to-aerobatic.md | 2 +- docs/docs/query-behind-the-scenes.md | 2 +- docs/docs/unit-testing.md | 4 ++-- docs/docs/visual-testing-with-storybook.md | 4 ++-- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/blog/2017-11-08-migrate-from-jekyll-to-gatsby/index.md b/docs/blog/2017-11-08-migrate-from-jekyll-to-gatsby/index.md index 87a10420146b0..fe4fad120434f 100644 --- a/docs/blog/2017-11-08-migrate-from-jekyll-to-gatsby/index.md +++ b/docs/blog/2017-11-08-migrate-from-jekyll-to-gatsby/index.md @@ -84,7 +84,7 @@ filename: 2017-05-09-introducing-tomeito.md /app/macos/vuejs/electron/2017/05/09/introducing-tomeito/ ``` -How did I create it? Inside my `gastby-node.js` I used the `onCreateNode` +How did I create it? Inside my `gatsby-node.js` I used the `onCreateNode` extension API to tweak the slug: ```js diff --git a/docs/blog/2018-06-16-announcing-gatsby-v2-beta-launch/index.md b/docs/blog/2018-06-16-announcing-gatsby-v2-beta-launch/index.md index 046ff9c8a4565..e955ab7a22a20 100644 --- a/docs/blog/2018-06-16-announcing-gatsby-v2-beta-launch/index.md +++ b/docs/blog/2018-06-16-announcing-gatsby-v2-beta-launch/index.md @@ -14,7 +14,7 @@ Gatsby v2 builds on the foundations of v1 to introduce a range of improvements: - Out With Gatsby Layout Components, In With StaticQuery - Gatby's special layout components were a common source of confusion in v1. After an RFC and [informative community discussion](https://github.com/gatsbyjs/rfcs/blob/master/text/0002-remove-special-layout-components.md), we decided to remove them and create `StaticQuery` which allows GraphQL queries to be added to any component. For more information on migrating your layouts, check out our [Life After Layouts post](/blog/2018-06-08-life-after-layouts/). + Gatsby's special layout components were a common source of confusion in v1. After an RFC and [informative community discussion](https://github.com/gatsbyjs/rfcs/blob/master/text/0002-remove-special-layout-components.md), we decided to remove them and create `StaticQuery` which allows GraphQL queries to be added to any component. For more information on migrating your layouts, check out our [Life After Layouts post](/blog/2018-06-08-life-after-layouts/). - Improve APIs diff --git a/docs/docs/deploying-to-aerobatic.md b/docs/docs/deploying-to-aerobatic.md index 47fcd4e87dc92..510e4b9ba8205 100644 --- a/docs/docs/deploying-to-aerobatic.md +++ b/docs/docs/deploying-to-aerobatic.md @@ -39,4 +39,4 @@ plugins: ## Other resources -- Learn more about Gatsy and Aerobatic on [Aerobatic's site](https://www.aerobatic.com/docs/static-site-generators/#react). +- Learn more about Gatsby and Aerobatic on [Aerobatic's site](https://www.aerobatic.com/docs/static-site-generators/#react). diff --git a/docs/docs/query-behind-the-scenes.md b/docs/docs/query-behind-the-scenes.md index de7947cecc466..1e0454a7e0821 100644 --- a/docs/docs/query-behind-the-scenes.md +++ b/docs/docs/query-behind-the-scenes.md @@ -4,7 +4,7 @@ title: How Queries Work We're talking about GraphQL queries here. These can be tagged graphql expressions at the bottom of your component source file (e.g [query for Gatsby frontpage](https://github.com/gatsbyjs/gatsby/blob/master/www/src/pages/index.js#L225)), StaticQueries within your components (e.g [showcase site details](https://github.com/gatsbyjs/gatsby/blob/master/www/src/components/showcase-details.js#L103)), or fragments created by plugins (e.g [gatsby-source-contentful](https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-source-contentful/src/fragments.js)). -Note that we are NOT talking about queries involved in the creation of your pages, which is usually performed in your site's gatsby-node.js (e.g [Gatby's website](https://github.com/gatsbyjs/gatsby/blob/master/www/gatsby-node.js#L85)). We're only talking about queries that are tied to particular pages or templates. +Note that we are NOT talking about queries involved in the creation of your pages, which is usually performed in your site's gatsby-node.js (e.g [Gatsby's website](https://github.com/gatsbyjs/gatsby/blob/master/www/gatsby-node.js#L85)). We're only talking about queries that are tied to particular pages or templates. Almost all logic to do with queries is in the internal-plugin [query-runner](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby/src/internal-plugins/query-runner). There are two steps involved in a Query's life time. The first is extracting it, and the second is running it. These are separated into two bootstrap phases. diff --git a/docs/docs/unit-testing.md b/docs/docs/unit-testing.md index 4013d533d62bd..12642fe14cfb4 100644 --- a/docs/docs/unit-testing.md +++ b/docs/docs/unit-testing.md @@ -85,7 +85,7 @@ module.exports = "test-file-stub" any tests in the `node_modules` or `.cache` directories. - The next option is very important, and is different from what you'll find in other - Jest guides. The reason that you need `transformIgnorePatterns` is because Gastby + Jest guides. The reason that you need `transformIgnorePatterns` is because Gatsby includes un-transpiled ES6 code. By default Jest doesn't try to transform code inside `node_modules`, so you will get an error like this: @@ -120,7 +120,7 @@ global.___loader = { ### 3. Useful mocks to complete your testing environment -#### Mocking `gastby` +#### Mocking `gatsby` Finally it's a good idea to mock the `gatsby` module itself. This may not be needed at first, but will make things a lot easier if you want to test diff --git a/docs/docs/visual-testing-with-storybook.md b/docs/docs/visual-testing-with-storybook.md index a5a06c6ee6af8..d3af30c210051 100644 --- a/docs/docs/visual-testing-with-storybook.md +++ b/docs/docs/visual-testing-with-storybook.md @@ -53,7 +53,7 @@ Create a new file called `webpack.config.js` in the `.storybook` folder created ```js module.exports = (baseConfig, env, defaultConfig) => { - // Transpile Gatsby module because Gastby includes un-transpiled ES6 code. + // Transpile Gatsby module because Gatsby includes un-transpiled ES6 code. defaultConfig.module.rules[0].exclude = [/node_modules\/(?!(gatsby)\/)/] // use installed babel-loader which is v8.0-beta (which is meant to work with @babel/core@7) @@ -101,7 +101,7 @@ storiesOf(`Dashboard/Header`, module).add(`default`, () => ( )) ``` -This is a very simple story without much going on, but honestly, nothing else really changes as related to Gastby. If you want to learn more about how Storybook works and what you can do with it, check out some of the resources listed below. +This is a very simple story without much going on, but honestly, nothing else really changes as related to Gatsby. If you want to learn more about how Storybook works and what you can do with it, check out some of the resources listed below. ## Other resources From 88a0d4583db76ffdb164452f48abb6d597cd25ac Mon Sep 17 00:00:00 2001 From: numb86 <86numb@gmail.com> Date: Tue, 27 Nov 2018 01:19:48 +0900 Subject: [PATCH 394/462] Fix broken link. (#10110) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3275a5d4f5554..1936a36f48d34 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ · Plugins · - Starters + Starters · Showcase · From b5bcafe8e620007906c401f5ba2acdfa286b4cc3 Mon Sep 17 00:00:00 2001 From: James George Date: Mon, 26 Nov 2018 22:44:03 +0530 Subject: [PATCH 395/462] Add license internal link (#10143) Closes #10135 Added license to `What's in this document section` linking it to corresponding section within the `README` file. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1936a36f48d34..dc25f43fe4210 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,7 @@ Gatsby is a modern framework for blazing fast websites. - [Learning Gatsby](#-learning-gatsby) - [Migration Guides](#-migration-guides) - [How to Contribute](#-how-to-contribute) +- [License](#memo-license) - [Thanks to Our Contributors and Sponsors](#-thanks-to-our-contributors-and-sponsors) ## 🚀 Get Up and Running in 5 Minutes From 278286a467dc92fecc3df624a0d6365832454aad Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Mon, 26 Nov 2018 18:30:18 +0100 Subject: [PATCH 396/462] chore: bump npm-run-all version (#10147) --- package.json | 2 +- yarn.lock | 78 +++++++++++----------------------------------------- 2 files changed, 17 insertions(+), 63 deletions(-) diff --git a/package.json b/package.json index 975b4434839c6..2ba4b8856d497 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "jest-cli": "^23.5.0", "lerna": "^3.3.0", "lint-staged": "^8.0.4", - "npm-run-all": "4.1.2", + "npm-run-all": "4.1.5", "plop": "^1.8.1", "prettier": "^1.14.3", "rimraf": "^2.6.1", diff --git a/yarn.lock b/yarn.lock index 3a1899467c43c..da1a4d0b5d641 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6778,7 +6778,7 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= -duplexer@^0.1.1, duplexer@~0.1.1: +duplexer@^0.1.1: version "0.1.1" resolved "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= @@ -7469,20 +7469,6 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -event-stream@~3.3.0: - version "3.3.6" - resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.6.tgz#cac1230890e07e73ec9cacd038f60a5b66173eef" - integrity sha512-dGXNg4F/FgVzlApjzItL+7naHutA3fDqbV/zAZqDDlXTjiMnQmZKu+prImWKszeBM5UQeGvAl3u1wBiKeDh61g== - dependencies: - duplexer "^0.1.1" - flatmap-stream "^0.1.0" - from "^0.1.7" - map-stream "0.0.7" - pause-stream "^0.0.11" - split "^1.0.1" - stream-combiner "^0.2.2" - through "^2.3.8" - eventemitter3@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" @@ -8204,11 +8190,6 @@ flat@^4.0.0: dependencies: is-buffer "~2.0.3" -flatmap-stream@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/flatmap-stream/-/flatmap-stream-0.1.0.tgz#ed54e01422cd29281800914fcb968d58b685d5f1" - integrity sha512-Nlic4ZRYxikqnK5rj3YoxDVKGGtUjcNDUtvQ7XsdGLZmMwdUYnXf10o1zcXtzEZTBgc6GxeRpQxV/Wu3WPIIHA== - flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" @@ -8354,11 +8335,6 @@ from2@^2.1.0, from2@^2.1.1: inherits "^2.0.1" readable-stream "^2.0.0" -from@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" - integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= - fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -12571,11 +12547,6 @@ map-obj@^2.0.0: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= -map-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.0.7.tgz#8a1f07896d82b10926bd3744a2420009f88974a8" - integrity sha1-ih8HiW2CsQkmvTdEokIACfiJdKg= - map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -13624,17 +13595,17 @@ npm-registry-fetch@^3.0.0, npm-registry-fetch@^3.8.0: make-fetch-happen "^4.0.1" npm-package-arg "^6.1.0" -npm-run-all@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.2.tgz#90d62d078792d20669139e718621186656cea056" - integrity sha512-Z2aRlajMK4SQ8u19ZA75NZZu7wupfCNQWdYosIi8S6FgBdGf/8Y6Hgyjdc8zU2cYmIRVCx1nM80tJPkdEd+UYg== +npm-run-all@4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== dependencies: - ansi-styles "^3.2.0" - chalk "^2.1.0" - cross-spawn "^5.1.0" + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" memorystream "^0.3.1" minimatch "^3.0.4" - ps-tree "^1.1.0" + pidtree "^0.3.0" read-pkg "^3.0.0" shell-quote "^1.6.1" string.prototype.padend "^3.0.0" @@ -14490,13 +14461,6 @@ pathval@^1.0.0: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= -pause-stream@^0.0.11: - version "0.0.11" - resolved "http://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" - integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= - dependencies: - through "~2.3" - pbkdf2@^3.0.3: version "3.0.16" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" @@ -14554,6 +14518,11 @@ physical-cpu-count@^2.0.0: resolved "https://registry.yarnpkg.com/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz#18de2f97e4bf7a9551ad7511942b5496f7aba660" integrity sha1-GN4vl+S/epVRrXURlCtUlverpmA= +pidtree@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.0.tgz#f6fada10fccc9f99bf50e90d0b23d72c9ebc2e6b" + integrity sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg== + pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -15328,13 +15297,6 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -ps-tree@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" - integrity sha1-tCGyQUDWID8e08dplrRCewjowBQ= - dependencies: - event-stream "~3.3.0" - pseudomap@^1.0.1, pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -17476,7 +17438,7 @@ split2@^2.0.0: dependencies: through2 "^2.0.2" -split@^1.0.0, split@^1.0.1: +split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== @@ -17665,14 +17627,6 @@ stream-combiner2@^1.1.1: duplexer2 "~0.1.0" readable-stream "^2.0.2" -stream-combiner@^0.2.2: - version "0.2.2" - resolved "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz#aec8cbac177b56b6f4fa479ced8c1912cee52858" - integrity sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg= - dependencies: - duplexer "~0.1.1" - through "~2.3.4" - stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -18384,7 +18338,7 @@ through2@^2.0.0, through2@^2.0.1, through2@^2.0.2, through2@^2.0.3, through2@~2. readable-stream "^2.1.5" xtend "~4.0.1" -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, through@~2.3, through@~2.3.4: +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@~2.3.4: version "2.3.8" resolved "http://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= From 288d928feace191ec982deab078f6abc6b6990cb Mon Sep 17 00:00:00 2001 From: Anush Patel <33417205+AnushPatel@users.noreply.github.com> Date: Mon, 26 Nov 2018 19:08:33 +0000 Subject: [PATCH 397/462] Documentation: Created XML Sitemap Post (#10106) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Created XML Sitemap Post This was created using the package (gatsby-plugin-sitemap), I followed the guidelines and ran it through Hemingway (Just as a side note Where has this been all my life?!) - I do think it is a bit brief - Please do tell me how I can work to improve it! Really Appreciate it :) * Update docs/docs/creating-a-sitemap.md Co-Authored-By: AnushPatel <33417205+AnushPatel@users.noreply.github.com> * Update docs/docs/creating-a-sitemap.md Co-Authored-By: AnushPatel <33417205+AnushPatel@users.noreply.github.com> * Update docs/docs/creating-a-sitemap.md Co-Authored-By: AnushPatel <33417205+AnushPatel@users.noreply.github.com> * Ran it through Prettier and Applied Changes * Trying to debug the prettier issue. Maybe I am just doing this wrong 😬 * Update docs/docs/creating-a-sitemap.md Co-Authored-By: AnushPatel <33417205+AnushPatel@users.noreply.github.com> * Update docs/docs/creating-a-sitemap.md Adding Dustin's suggestions Co-Authored-By: AnushPatel <33417205+AnushPatel@users.noreply.github.com> * Update docs/docs/creating-a-sitemap.md Co-Authored-By: AnushPatel <33417205+AnushPatel@users.noreply.github.com> * Update docs/docs/creating-a-sitemap.md Co-Authored-By: AnushPatel <33417205+AnushPatel@users.noreply.github.com> * Update docs/docs/creating-a-sitemap.md Co-Authored-By: AnushPatel <33417205+AnushPatel@users.noreply.github.com> * Update creating-a-sitemap.md * Fixed the typo * Added the 'Connection' between the two clauses * Added the improvements to the code Ran it through Prettier to make sure Formatting is tip top. * Added the improvements to the code Ran it through Prettier to make sure Formatting is tip top. --- docs/docs/creating-a-sitemap.md | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/docs/docs/creating-a-sitemap.md b/docs/docs/creating-a-sitemap.md index b955fc80fe780..6625a1969f604 100644 --- a/docs/docs/creating-a-sitemap.md +++ b/docs/docs/creating-a-sitemap.md @@ -2,7 +2,32 @@ title: Creating a sitemap --- -This is a stub. Help our community expand it. +### What is a Sitemap? -Please use the [Gatsby Style Guide](/docs/gatsby-style-guide/) to ensure your -pull request gets accepted. +An [XML sitemap](https://support.google.com/webmasters/answer/156184?hl=en) lists a website’s important pages, making sure search engines (such as Google) can find and crawl them all. In effect, a sitemap helps a search engine understand your website structure. + +Think of it as a map for your website. It shows what all of the pages are on your website. + +### Install + +To generate an XML sitemap, you will use the [`gatsby-plugin-sitemap`](/packages/gatsby-plugin-sitemap/) package. To install this package, run the following command: +`npm install --save gatsby-plugin-sitemap` + +### How to use [gatsby-plugin-sitemap](/packages/gatsby-plugin-sitemap/) + +Once installation is complete, we can now add this plugin to our `gatsby-config.js`, like so: + +```javascript:title=gatsby-config.js +module.exports = { + siteMetadata: { + siteUrl: `https://www.example.com`, + }, + plugins: [`gatsby-plugin-sitemap`], +} +``` + +This is all that's required to get a working sitemap with Gatsby! By default, the generated sitemap will include all of your site’s pages, but of course the plugin exposes options to configure this default functionality. + +### Additional Modification + +Additional modification steps are available in the [`gatsby-plugin-sitemap` documentation](/packages/gatsby-plugin-sitemap) From b1101f57d61581596421d0df4a567ded025d19fe Mon Sep 17 00:00:00 2001 From: Shawn Erquhart Date: Tue, 27 Nov 2018 06:41:41 -0500 Subject: [PATCH 398/462] fix(gatsby-plugin-netlify-cms): fix uglify webpack plugin check (#10150) Closes #10067. Replaces #10149. Webpack started using terser instead of uglify, which broke our plugin's check for the uglify webpack plugin (to exclude it from our pipeline). But it seems that excluding terser isn't even necessary, can't find any bugs in dev or prod builds. The remaining plugin that needs to be avoided will be handled by name rather than instance. cc/ @pieh --- packages/gatsby-plugin-netlify-cms/src/gatsby-node.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/gatsby-plugin-netlify-cms/src/gatsby-node.js b/packages/gatsby-plugin-netlify-cms/src/gatsby-node.js index bf9401da2d2bb..687763150e755 100644 --- a/packages/gatsby-plugin-netlify-cms/src/gatsby-node.js +++ b/packages/gatsby-plugin-netlify-cms/src/gatsby-node.js @@ -4,7 +4,6 @@ import webpack from "webpack" import HtmlWebpackPlugin from "html-webpack-plugin" import HtmlWebpackExcludeAssetsPlugin from "html-webpack-exclude-assets-plugin" import MiniCssExtractPlugin from "mini-css-extract-plugin" -import UglifyJsPlugin from "uglifyjs-webpack-plugin" import FriendlyErrorsPlugin from "friendly-errors-webpack-plugin" /** @@ -83,8 +82,9 @@ exports.onCreateWebpackConfig = ( */ ...gatsbyConfig.plugins.filter( plugin => - ![UglifyJsPlugin, MiniCssExtractPlugin, FriendlyErrorsPlugin].find( - Plugin => plugin instanceof Plugin + ![`MiniCssExtractPlugin`].find( + pluginName => + plugin.constructor && plugin.constructor.name === pluginName ) ), From a2028ef7ed66e2f4a5ccb0ea1f91a05fd7818959 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Tue, 27 Nov 2018 12:46:07 +0100 Subject: [PATCH 399/462] chore(release): Publish - gatsby-plugin-netlify-cms@3.0.8 --- packages/gatsby-plugin-netlify-cms/CHANGELOG.md | 8 ++++++++ packages/gatsby-plugin-netlify-cms/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/gatsby-plugin-netlify-cms/CHANGELOG.md b/packages/gatsby-plugin-netlify-cms/CHANGELOG.md index 01a1be2817672..1c7777c22f3ed 100644 --- a/packages/gatsby-plugin-netlify-cms/CHANGELOG.md +++ b/packages/gatsby-plugin-netlify-cms/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify-cms/compare/gatsby-plugin-netlify-cms@3.0.7...gatsby-plugin-netlify-cms@3.0.8) (2018-11-27) + +### Bug Fixes + +- **gatsby-plugin-netlify-cms:** fix uglify webpack plugin check ([#10150](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify-cms/issues/10150)) ([b1101f5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify-cms/commit/b1101f5)), closes [#10067](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify-cms/issues/10067) [#10149](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify-cms/issues/10149) + ## [3.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify-cms/compare/gatsby-plugin-netlify-cms@3.0.6...gatsby-plugin-netlify-cms@3.0.7) (2018-11-08) diff --git a/packages/gatsby-plugin-netlify-cms/package.json b/packages/gatsby-plugin-netlify-cms/package.json index 795f8babcbb79..2d8fb6af93821 100644 --- a/packages/gatsby-plugin-netlify-cms/package.json +++ b/packages/gatsby-plugin-netlify-cms/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-netlify-cms", "description": "A Gatsby plugin which generates the Netlify CMS single page app", - "version": "3.0.7", + "version": "3.0.8", "author": "Shawn Erquhart ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" From 26dff7be2dd51957f731f3d94658b8fd8b915b92 Mon Sep 17 00:00:00 2001 From: Anush Patel <33417205+AnushPatel@users.noreply.github.com> Date: Tue, 27 Nov 2018 12:49:23 +0000 Subject: [PATCH 400/462] docs: "Creating a sitemap" is no longer stub page (#10156) Got rid of the * as the link now isn't a stub --- www/src/data/sidebars/doc-links.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/src/data/sidebars/doc-links.yaml b/www/src/data/sidebars/doc-links.yaml index a000b142d512f..ed3a4e0482bc3 100644 --- a/www/src/data/sidebars/doc-links.yaml +++ b/www/src/data/sidebars/doc-links.yaml @@ -218,7 +218,7 @@ link: /docs/adding-tags-and-categories-to-blog-posts/ - title: Adding pagination link: /docs/adding-pagination/ - - title: Creating a sitemap* + - title: Creating a sitemap link: /docs/creating-a-sitemap/ - title: Linking between pages link: /docs/linking-between-pages/ From e64554be5e37be8059bbc7932a06dc99c15ce8de Mon Sep 17 00:00:00 2001 From: Vaibhav Sharma Date: Tue, 27 Nov 2018 18:20:36 +0530 Subject: [PATCH 401/462] The Leaky Cauldron Blog added to sites Showcase (#10148) --- docs/sites.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index 2d5578b36a2e4..53d3c2ac2ef8e 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3540,3 +3540,14 @@ built_by: Monbanquet.fr built_by_url: https://github.com/monbanquet featured: false +- title: The Leaky Cauldron Blog + url: https://theleakycauldronblog.com + main_url: https://theleakycauldronblog.com + source_url: https://github.com/v4iv/theleakycauldronblog + description: > + A Brew of Awesomeness with a Pinch of Magic... + categories: + - Blog + built_by: Vaibhav Sharma + built_by_url: https://github.com/v4iv + featured: false From aa489e91edbb0daaf1f10b2c8e83d40d5ca29dc3 Mon Sep 17 00:00:00 2001 From: Samuel Fialho Date: Tue, 27 Nov 2018 13:59:39 +0000 Subject: [PATCH 402/462] added new website to showcase (#10157) --- docs/sites.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index 53d3c2ac2ef8e..9eed80a972158 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3551,3 +3551,15 @@ built_by: Vaibhav Sharma built_by_url: https://github.com/v4iv featured: false +- title: Wild Drop Surf Camp + main_url: "https://wilddropsurfcamp.com" + url: "https://wilddropsurfcamp.com" + description: > + Welcome to Portugal's best kept secret and be amazed with our nature. Here you can explore, surf, taste the world's best gastronomy and wine, feel the North Canyon's power with the biggest waves in the world and so many other amazing things. Find us, discover yourself! + categories: + - Surf + - Tourism + - Travel + built_by: Samuel Fialho + built_by_url: https://samuelfialho.com + featured: false From 41575f8ddb0b2c4bac517c8aa4e12e1b9fbf3745 Mon Sep 17 00:00:00 2001 From: Aman Mittal Date: Tue, 27 Nov 2018 20:20:29 +0530 Subject: [PATCH 403/462] Add new starter kit (#10132) Add Gatsby + Bulma CSS starter kit. --- docs/starters.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/starters.yml b/docs/starters.yml index f38090566b01f..f63a1b687560b 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -1280,3 +1280,16 @@ - Eslint Airbnb without semicolon and without .jsx extension - Offline support - Web App Manifest +- url: https://tender-raman-99e09b.netlify.com/ + repo: https://github.com/amandeepmittal/gatsby-bulma-quickstart + description: A Bulma CSS + GatsbyJS Starter Kit + tags: + - Styling:Bulma + - Styling:SCSS + features: + - Uses Bulma CSS + - Sass based Styling + - Responsive Design + - Google Analytics Integration + - Uses Gatsby v2 + - SEO From aca36fee3192b0fa06ff3594fe9ffdf3b99390ca Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Tue, 27 Nov 2018 16:48:00 +0100 Subject: [PATCH 404/462] ci: produce jest xml reports only in azure pipelines (#10160) * test: do not report coverage unless in CI In #10128, we added test report tasks to Azure pipelines. Unfortunately, this adds some additional overhead and coverage type stuff in _local_ development that we probably don't want. This PR addresses this issue, and conditionally detects whether running in CI. If running in CI (e.g. Azure Pipelines, Circle, etc.) it will add the additional coverage reporter and coverage functionality. Note: this is currently blocked by watson/ci-info#22 * add GENERATE_JEST_REPORT env var and use it with azure pipelines * use var to hold normalized (boolean) val from env var --- .gitignore | 1 + azure-pipelines.yml | 2 ++ jest.config.js | 5 +++-- package.json | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 7235646f5e614..8cf179a8ccd9e 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ lib-cov # Coverage directory used by tools like istanbul coverage +junit.xml # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) .grunt diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7ddefe8cffc29..fa7a5faf1c283 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -15,6 +15,8 @@ steps: - script: yarn bootstrap - script: yarn test + env: + GENERATE_JEST_REPORT: true - task: PublishTestResults@2 displayName: "Publish Test Results" diff --git a/jest.config.js b/jest.config.js index c2d5419b42b79..65ac17ebc84e6 100644 --- a/jest.config.js +++ b/jest.config.js @@ -13,6 +13,7 @@ const builtTestsDirs = pkgs const distDirs = pkgs.map(p => path.join(p, `dist`)) const ignoreDirs = [].concat(gatsbyBuildDirs, builtTestsDirs, distDirs) const coverageDirs = pkgs.map(p => path.join(p, `src/**/*.js`)) +const useCoverage = !!process.env.GENERATE_JEST_REPORT module.exports = { notify: true, @@ -31,7 +32,7 @@ module.exports = { moduleNameMapper: { "^highlight.js$": `/node_modules/highlight.js/lib/index.js`, }, - collectCoverage: true, + collectCoverage: useCoverage, coverageReporters: [`json-summary`, `text`, `html`, `cobertura`], coverageThreshold: { global: { @@ -42,5 +43,5 @@ module.exports = { }, }, collectCoverageFrom: coverageDirs, - reporters: [`default`, `jest-junit`], + reporters: [`default`].concat(useCoverage ? `jest-junit` : []), } diff --git a/package.json b/package.json index 2ba4b8856d497..9f2e6b1223b8c 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,8 @@ "glob": "^7.1.1", "husky": "1.1.1", "jest": "^23.5.0", - "jest-junit": "^5.0.0", "jest-cli": "^23.5.0", + "jest-junit": "^5.0.0", "lerna": "^3.3.0", "lint-staged": "^8.0.4", "npm-run-all": "4.1.5", From b158d77bf00b2c15b242bbb591cb25b812f951f2 Mon Sep 17 00:00:00 2001 From: Jonas Gierer Date: Tue, 27 Nov 2018 17:14:02 +0100 Subject: [PATCH 405/462] Add instructions for un-marking stub documents (#10158) --- docs/docs/how-to-contribute.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/docs/how-to-contribute.md b/docs/docs/how-to-contribute.md index e447e8e092090..bf16330838a95 100644 --- a/docs/docs/how-to-contribute.md +++ b/docs/docs/how-to-contribute.md @@ -86,6 +86,16 @@ a pull request. - Commit and push to your fork. - Create a pull request from your branch. +If you wrote a new document that was previously a stub, update `www/src/data/sidebars/doc-links.yaml` accordingly by removing the asterisk behind the document's title: + +```diff + ... +- - title: Example Document* ++ - title: Example Document + link: /docs/example-document/ + ... +``` + To develop on the starter showcase, you'll need to supply a GitHub personal access token. 1. Create a personal access token in your GitHub [Developer settings](https://github.com/settings/tokens). From 60aa58324b25488d4033e6e4be4e9824bcd14ab0 Mon Sep 17 00:00:00 2001 From: Parth Patel Date: Tue, 27 Nov 2018 22:32:33 +0530 Subject: [PATCH 406/462] Sample code graphql package not imported (#10109) graphql object is used for query but not imported from `gatsby` package. --- packages/gatsby-image/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/gatsby-image/README.md b/packages/gatsby-image/README.md index 0bd96a6188a74..9ca5a9818fc92 100644 --- a/packages/gatsby-image/README.md +++ b/packages/gatsby-image/README.md @@ -100,6 +100,7 @@ This is what a component using `gatsby-image` looks like: ```jsx import React from "react" +import { graphql } from "gatsby" import Img from "gatsby-image" export default ({ data }) => ( From 8298847699dcd5716bb6964bb63556918e1dc5e8 Mon Sep 17 00:00:00 2001 From: Amberley Date: Tue, 27 Nov 2018 11:02:50 -0600 Subject: [PATCH 407/462] add gatsby days blog post (#10153) * feat(blog): add gatsby days blog post * format --- .../images/gatsby-days.png | Bin 0 -> 84268 bytes docs/blog/2018-11-27-gatsby-days/index.md | 35 ++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 docs/blog/2018-11-27-gatsby-days/images/gatsby-days.png create mode 100644 docs/blog/2018-11-27-gatsby-days/index.md diff --git a/docs/blog/2018-11-27-gatsby-days/images/gatsby-days.png b/docs/blog/2018-11-27-gatsby-days/images/gatsby-days.png new file mode 100644 index 0000000000000000000000000000000000000000..79b31e6e6c348afd32402be29d4587ab77031312 GIT binary patch literal 84268 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 + Gatsby Days + + +When I started as Director of Marketing at Gatsby 4 months ago, I was impressed with the enthusiasm and energy I saw in the community around Gatsby. And as I’ve started to connect with developers at technology meetups and conferences, I’ve heard so many of you talk about interest in Gatsby-sponsored events. Well, now the wait is over! + +## Announcing Gatsby Days + +We’re starting to roll out Gatsby Days across the US and internationally. The first [Gatsby Day will be in Mountain View](https://www.eventbrite.com/e/gatsby-days-tickets-51837151315), California on December 7th, 2018. Gatsby Days are in-person, one-day conferences that include Gatsby speakers and guest presenters. The conference will focus on the future of modern website development, use cases, and deep dive topics such as what's new in the web technology stack. It’ll be an opportunity to meet Gatsby creator, Kyle Mathews, hear other Gatsby core team members speak, and connect with the Gatsby community in-person. If you’re in the San Francisco Bay Area, [register for Gatsby Days in Mountain View, CA here](https://www.eventbrite.com/e/gatsby-days-tickets-51837151315). We will be recording the talks and live streaming some of the presentations. [Follow Gatsby on Twitter](https://twitter.com/gatsbyjs) to get notified when the recordings are available. + +[Register for Gatsby Days in Mountain View, CA on December 7th](https://www.eventbrite.com/e/gatsby-days-tickets-51837151315). + +We’ll also be planning more Gatsby Days after the New Year. We did a twitter poll a few weeks ago to gauge interest in locations for Gatsby Days and London gathered over 250 votes! There were also a lot of write-in votes for Chicago, Dallas, Paris, and Berlin. Here are the results of the twitter poll: + + + +If you didn’t get a chance to cast your vote for a Gatsby Days host city, you can [cast your vote here](https://www.gatsbyjs.com/gatsby-days-signup) (and get notified when a Gatsby Days comes to your city). + +## Meetups and More + +Meetups are also a great way to connect with the Gatsby community. Several community-organized Gatsby meetups have already been popping up across the globe and we’ll be launching a more formal program to support community-organized meetups with free swag and resources (details will be coming soon). In the meantime, if you’re organizing a Gatsby meetup or event and need some support, just [fill out the form here](https://airtable.com/shrpwc99yogJm9sfI) and someone will get back with you to work out the details. + +And if you’re in the San Francisco bay area, join our [San Francisco meetup](https://www.meetup.com/meetup-group-cHIRVLfX/) to connect with Gatsbyjs community members. These will be more casual gatherings where we talk about front-end web development, the modern web tech stack, and Gatsby. We'll have our first meetup after the new year (in January 2019) so stay tuned! + +Join the Gatsby [Meetup San Francisco here](https://www.meetup.com/meetup-group-cHIRVLfX/). + +We’ll continue to keep you updated about Gatsby sponsored events and meetups. Hope to see you at a Gatsby Days or Gatsby Meetup soon! From 1480cc989bc194e7b4679af95587b81ccebbfbed Mon Sep 17 00:00:00 2001 From: Borek Bernard Date: Tue, 27 Nov 2018 18:04:39 +0100 Subject: [PATCH 408/462] Add MobX + TypeScript starter (#10122) - https://gatsby-starter-mobx.netlify.com/ - https://github.com/borekb/gatsby-starter-mobx Features: - Gatsby v2 + TypeScript - MobX with decorators - Two examples from @mweststrate's Egghead course - .editorconfig & Prettier - TSLint - Jest --- docs/starters.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/starters.yml b/docs/starters.yml index f63a1b687560b..1fc1cd92ca297 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -1280,6 +1280,20 @@ - Eslint Airbnb without semicolon and without .jsx extension - Offline support - Web App Manifest +- url: https://gatsby-starter-mobx.netlify.com + repo: https://github.com/borekb/gatsby-starter-mobx + description: MobX + TypeScript + TSLint + Prettier + tags: + - MobX + - TypeScript + - Linting + features: + - Gatsby v2 + TypeScript + - MobX with decorators + - Two examples from @mweststrate's Egghead course + - .editorconfig & Prettier + - TSLint + - Jest - url: https://tender-raman-99e09b.netlify.com/ repo: https://github.com/amandeepmittal/gatsby-bulma-quickstart description: A Bulma CSS + GatsbyJS Starter Kit From c847e1fd38625faf15d0d5188720ce9336522adc Mon Sep 17 00:00:00 2001 From: Lennart Date: Tue, 27 Nov 2018 19:11:32 +0100 Subject: [PATCH 409/462] Add "pass context to pages" to doc (#10165) Didn't find this anywhere in the docs, think that's a good spot for it. The Promise is not needed actually, but I left it in the upper example. --- docs/docs/creating-and-modifying-pages.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/docs/creating-and-modifying-pages.md b/docs/docs/creating-and-modifying-pages.md index 8859c52076cbf..670dc4e25501c 100644 --- a/docs/docs/creating-and-modifying-pages.md +++ b/docs/docs/creating-and-modifying-pages.md @@ -131,3 +131,22 @@ exports.onCreatePage = ({ page, actions }) => { }) } ``` + +### Pass context to pages + +The automatically created pages can receive context and use that as variables in their GraphQL queries. To override the default and pass your own context, open your site's `gatsby-node.js` and add similar to the following: + +```javascript:title=gatsby-node.js +exports.onCreatePage = ({ page, actions }) => { + const { createPage, deletePage } = actions + + deletePage(page) + // You can access the variable "house" in your page queries now + createPage({ + ...page, + context: { + house: Gryffindor, + }, + }) +} +``` From e8a41020d42fe400f647776e5e0c92a03de40f93 Mon Sep 17 00:00:00 2001 From: Christopher Biscardi Date: Tue, 27 Nov 2018 12:37:57 -0800 Subject: [PATCH 410/462] [themes] Introduce Component Shadowing (#9992) --- .../__snapshots__/load-plugins.js.snap | 28 +++++++ .../gatsby/src/bootstrap/load-plugins/load.js | 1 + .../gatsby-node.js | 21 ++++++ .../index.js | 74 +++++++++++++++++++ .../package.json | 11 +++ 5 files changed, 135 insertions(+) create mode 100644 packages/gatsby/src/internal-plugins/webpack-theme-component-shadowing/gatsby-node.js create mode 100644 packages/gatsby/src/internal-plugins/webpack-theme-component-shadowing/index.js create mode 100644 packages/gatsby/src/internal-plugins/webpack-theme-component-shadowing/package.json diff --git a/packages/gatsby/src/bootstrap/load-plugins/__tests__/__snapshots__/load-plugins.js.snap b/packages/gatsby/src/bootstrap/load-plugins/__tests__/__snapshots__/load-plugins.js.snap index 046eb857acd58..d0f253050336e 100644 --- a/packages/gatsby/src/bootstrap/load-plugins/__tests__/__snapshots__/load-plugins.js.snap +++ b/packages/gatsby/src/bootstrap/load-plugins/__tests__/__snapshots__/load-plugins.js.snap @@ -73,6 +73,20 @@ Array [ "ssrAPIs": Array [], "version": "1.0.0", }, + Object { + "browserAPIs": Array [], + "id": "6f4b2fa9-66b5-5205-a03f-140005a2cfe5", + "name": "webpack-theme-component-shadowing", + "nodeAPIs": Array [ + "onCreateWebpackConfig", + ], + "pluginOptions": Object { + "plugins": Array [], + }, + "resolve": "", + "ssrAPIs": Array [], + "version": "1.0.0", + }, Object { "browserAPIs": Array [], "id": "7374ebf2-d961-52ee-92a2-c25e7cb387a9", @@ -177,6 +191,20 @@ Array [ "ssrAPIs": Array [], "version": "1.0.0", }, + Object { + "browserAPIs": Array [], + "id": "6f4b2fa9-66b5-5205-a03f-140005a2cfe5", + "name": "webpack-theme-component-shadowing", + "nodeAPIs": Array [ + "onCreateWebpackConfig", + ], + "pluginOptions": Object { + "plugins": Array [], + }, + "resolve": "", + "ssrAPIs": Array [], + "version": "1.0.0", + }, Object { "browserAPIs": Array [], "id": "c731052f-1e62-5905-9fb3-edc9057be8f1", diff --git a/packages/gatsby/src/bootstrap/load-plugins/load.js b/packages/gatsby/src/bootstrap/load-plugins/load.js index 1dfa16ca5917e..aa8769c6ad5ab 100644 --- a/packages/gatsby/src/bootstrap/load-plugins/load.js +++ b/packages/gatsby/src/bootstrap/load-plugins/load.js @@ -162,6 +162,7 @@ module.exports = (config = {}) => { `../../internal-plugins/internal-data-bridge`, `../../internal-plugins/prod-404`, `../../internal-plugins/query-runner`, + `../../internal-plugins/webpack-theme-component-shadowing`, ] internalPlugins.forEach(relPath => { const absPath = path.join(__dirname, relPath) diff --git a/packages/gatsby/src/internal-plugins/webpack-theme-component-shadowing/gatsby-node.js b/packages/gatsby/src/internal-plugins/webpack-theme-component-shadowing/gatsby-node.js new file mode 100644 index 0000000000000..daa3e3d2ab76d --- /dev/null +++ b/packages/gatsby/src/internal-plugins/webpack-theme-component-shadowing/gatsby-node.js @@ -0,0 +1,21 @@ +const GatsbyThemeComponentShadowingResolverPlugin = require(`.`) + +exports.onCreateWebpackConfig = ( + { store, stage, getConfig, rules, loaders, actions }, + pluginOptions +) => { + const { config, program } = store.getState() + + if (config.__experimentalThemes) { + actions.setWebpackConfig({ + resolve: { + plugins: [ + new GatsbyThemeComponentShadowingResolverPlugin({ + themes: config.__experimentalThemes.map(({ resolve }) => resolve), + projectRoot: program.directory, + }), + ], + }, + }) + } +} diff --git a/packages/gatsby/src/internal-plugins/webpack-theme-component-shadowing/index.js b/packages/gatsby/src/internal-plugins/webpack-theme-component-shadowing/index.js new file mode 100644 index 0000000000000..506e476404a43 --- /dev/null +++ b/packages/gatsby/src/internal-plugins/webpack-theme-component-shadowing/index.js @@ -0,0 +1,74 @@ +const path = require(`path`) + +module.exports = class GatsbyThemeComponentShadowingResolverPlugin { + cache = {} + + constructor({ projectRoot, themes }) { + this.themes = themes + this.projectRoot = projectRoot + } + + apply(resolver) { + resolver.plugin(`relative`, (request, callback) => { + // find out which theme's src/components dir we're requiring from + const matchingThemes = this.themes.filter(name => + request.path.includes(path.join(name, `src`, `components`)) + ) + // 0 matching themes happens a lot fo rpaths we don't want to handle + // > 1 matching theme means we have a path like + // `gatsby-theme-blog/src/components/gatsby-theme-something/src/components` + if (matchingThemes.length > 1) { + throw new Error( + `Gatsby can't differentiate between themes ${matchingThemes.join( + ` and ` + )} for path ${request.path}` + ) + } + if (matchingThemes.length !== 1) { + return callback() + } + // theme is the theme package from which we're requiring the relative component + const [theme] = matchingThemes + // get the location of the component relative to src/components + const [, component] = request.path.split( + path.join(theme, `src`, `components`) + ) + + const resolvedComponentPath = require.resolve( + this.resolveComponentPath({ + theme, + component, + projectRoot: this.projectRoot, + }) + ) + // this callback ends the resolver fallthrough chain. + return callback(null, { + directory: request.directory, + path: resolvedComponentPath, + query: request.query, + request: ``, + }) + }) + } + + // check the cache, the user's project, and finally the theme files + resolveComponentPath({ theme, component, projectRoot }) { + if (!this.cache[`${theme}-${component}`]) { + this.cache[`${theme}-${component}`] = [ + path.join(projectRoot, `src`, `components`, theme), + path.join(path.dirname(require.resolve(theme)), `src`, `components`), + ] + .map(dir => path.join(dir, component)) + .find(possibleComponentPath => { + try { + require.resolve(possibleComponentPath) + return true + } catch (e) { + return false + } + }) + } + + return this.cache[`${theme}-${component}`] + } +} diff --git a/packages/gatsby/src/internal-plugins/webpack-theme-component-shadowing/package.json b/packages/gatsby/src/internal-plugins/webpack-theme-component-shadowing/package.json new file mode 100644 index 0000000000000..87252b5bd3716 --- /dev/null +++ b/packages/gatsby/src/internal-plugins/webpack-theme-component-shadowing/package.json @@ -0,0 +1,11 @@ +{ + "name": "webpack-theme-component-shadowing", + "version": "1.0.0", + "description": "An internal Gatsby plugin which handles configuring webpack to ensure theme components fall back from the user's site to theme modules.", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Chris Biscardi ", + "license": "MIT" +} From 2530718ff86bb60202fcf785de426ba446d9cb74 Mon Sep 17 00:00:00 2001 From: greg lobinski <32480082+greglobinski@users.noreply.github.com> Date: Tue, 27 Nov 2018 22:22:01 +0100 Subject: [PATCH 411/462] feat(www): Updated blog and newsletter section on homepage (#10024) * feat(www): rebase Ecosystem and Blog sections feat(www): add Ecosystem section to Homepage feat(www): homepage WIP wip feat(www): finish sections style for mobile feat(www): add Ecosystsem featured items to Hompage feat(www): homepage ecosystem section styling WIP feat(www): add arrow to action button fix(www): fix code formating fix(www): fix code formating and eslint errors fix(www): fix hovering effect on Featured Item fix(www): fix hovering effect sequel fix(www): fix hover bug fix(www): update texts (intro & link labels) feat(www): add scroller observer to Home page refactor(www): use imported scrollers observer fix(www): change link labes on Ecosystem page fix(www): fix some small style issues refactor(www): refator combineEcosystemFeaturedItems and reorder some css properties feat(www): add Blog section to Homepage feat(www): mobile styles for Blog section feat(www): mobile styles for Blog section feat(www): desktoop style for Blog section WIP feat(www): desktoop style for Blog section WIP feat(www): desktop style for Homepage Blog section WIP feat(www): finish desktop style of Blog section feat(www): finish desktop style of Blog section * fix(www): fix stylelint error * feat(): finish styles of Blog section * fix(www): add cover to one post for development * fix(www): update margins for section action btns * fix(www): update margins of Blog section * refactor(www): email-cature-form * refactor(www): email-cature-form * feat(www): add ornaments to assets * feat(www): update colors palette * feat(www): add Homepage variant style to newsletter form * feat(www): add Homepage variant style to newsletter form * feat(www): mobile style for Homepage Newsletter section * refactor(www): refactor homepage-section * fix(www): fix homepage section padding * refactor(www): refactor ecosystem scroollers * fix(www): fix some styles * fix(www): add cover image to one post * fix(www): add border-radius to cover image * fix(www): add automaticExcerpt if the handwritten one does not exists * feat(www): add conditional formating to post dates * fix(www): fix hover effect on Blog cards * fix(www): remove 'Submit an article button' --- docs/blog/2018-11-07-gatsby-for-apps/index.md | 1 + www/src/assets/newsletter-form-ornament.svg | 14 + www/src/assets/ornaments.js | 3 + .../ecosystem/ecosystem-featured-item.js | 13 +- .../ecosystem/ecosystem-featured-items.js | 16 +- www/src/components/email-capture-form.js | 259 +++++++++------ .../components/homepage/homepage-blog-post.js | 294 ++++++++++++++++++ .../homepage/homepage-blog-posts.js | 222 +++++++++++++ www/src/components/homepage/homepage-blog.js | 29 ++ .../components/homepage/homepage-ecosystem.js | 45 +-- .../homepage/homepage-newsletter.js | 105 +++++++ .../components/homepage/homepage-section.js | 79 +++-- .../components/shared/horizontal-scroller.js | 32 ++ www/src/pages/index.js | 72 +---- www/src/utils/colors.js | 2 + 15 files changed, 956 insertions(+), 230 deletions(-) create mode 100644 www/src/assets/newsletter-form-ornament.svg create mode 100644 www/src/assets/ornaments.js create mode 100644 www/src/components/homepage/homepage-blog-post.js create mode 100644 www/src/components/homepage/homepage-blog-posts.js create mode 100644 www/src/components/homepage/homepage-blog.js create mode 100644 www/src/components/homepage/homepage-newsletter.js create mode 100644 www/src/components/shared/horizontal-scroller.js diff --git a/docs/blog/2018-11-07-gatsby-for-apps/index.md b/docs/blog/2018-11-07-gatsby-for-apps/index.md index 8c12eb78195cb..8f62eda6ad9f2 100644 --- a/docs/blog/2018-11-07-gatsby-for-apps/index.md +++ b/docs/blog/2018-11-07-gatsby-for-apps/index.md @@ -8,6 +8,7 @@ tags: - applications - beyond static excerpt: Gatsby is great for not only static sites but also traditional web applications. Using Gatsby enables the benefits of both static and web applications so you don't have to sacrifice the advantages of one approach to reap the benefits of the other. +cover: images/what-if-i-told-you.jpg --- Gatsby is great for static sites. You probably know this! It’s equally great for web applications. You may not know this. Gatsby is great for building web experiences that leverage the benefits of both so called static sites and web applications -- simultaneously. You don't have to sacrifice the advantages of one approach to reap the benefits of the other. diff --git a/www/src/assets/newsletter-form-ornament.svg b/www/src/assets/newsletter-form-ornament.svg new file mode 100644 index 0000000000000..321fd2a746e68 --- /dev/null +++ b/www/src/assets/newsletter-form-ornament.svg @@ -0,0 +1,14 @@ + + + + + diff --git a/www/src/assets/ornaments.js b/www/src/assets/ornaments.js new file mode 100644 index 0000000000000..134a580bd5987 --- /dev/null +++ b/www/src/assets/ornaments.js @@ -0,0 +1,3 @@ +import NewsletterFormOrnament from "!raw-loader!./newsletter-form-ornament.svg" + +export { NewsletterFormOrnament } diff --git a/www/src/components/ecosystem/ecosystem-featured-item.js b/www/src/components/ecosystem/ecosystem-featured-item.js index 535837e77b2fb..2a55fd7c49e6d 100644 --- a/www/src/components/ecosystem/ecosystem-featured-item.js +++ b/www/src/components/ecosystem/ecosystem-featured-item.js @@ -4,6 +4,8 @@ import styled from "react-emotion" import { Link } from "gatsby" import Img from "gatsby-image" +import { HorizontalScrollerItem } from "../shared/horizontal-scroller" + import StarIcon from "react-icons/lib/md/star" import ArrowDownwardIcon from "react-icons/lib/md/arrow-downward" @@ -12,17 +14,12 @@ import presets, { colors } from "../../utils/presets" const MAX_DESCRIPTION_LENGTH = 100 -const EcosystemFeaturedItemRoot = styled(`li`)` - width: 85vw; - margin: 0 2px 0 0; - padding: 5px; - - :last-child { - margin-right: 0; - } +const EcosystemFeaturedItemRoot = styled(HorizontalScrollerItem)` + margin-right: ${rhythm(options.blockMarginBottom)}; ${presets.Tablet} { border-bottom: 1px solid ${colors.gray.superLight}; + box-shadow: none; margin: 0; padding: 0; width: auto; diff --git a/www/src/components/ecosystem/ecosystem-featured-items.js b/www/src/components/ecosystem/ecosystem-featured-items.js index aa8c822090737..46502614d339d 100644 --- a/www/src/components/ecosystem/ecosystem-featured-items.js +++ b/www/src/components/ecosystem/ecosystem-featured-items.js @@ -2,18 +2,19 @@ import React from "react" import PropTypes from "prop-types" import styled from "react-emotion" +import { + HorizontalScroller, + HorizontalScrollerContent, +} from "../shared/horizontal-scroller" + import presets, { colors } from "../../utils/presets" import { rhythm, options } from "../../utils/typography" import { scrollbarStyles } from "../../utils/styles" import { SCROLLER_CLASSNAME } from "../../utils/scrollers-observer" -export const EcosystemFeaturedItemsRootBase = styled(`div`)` - overflow-x: scroll; +const EcosystemFeaturedItemsRoot = styled(HorizontalScroller)` margin: ${rhythm(0.1)} -${rhythm(options.blockMarginBottom)}; - -webkit-overflow-scrolling: touch; -` -const EcosystemFeaturedItemsRoot = styled(EcosystemFeaturedItemsRootBase)` ${presets.Tablet} { border-top: 1px solid ${colors.gray.superLight}; margin-top: ${rhythm(0.4)}; @@ -31,7 +32,10 @@ export const ListBase = styled(`ul`)` padding: 0 calc(${rhythm(options.blockMarginBottom)} - 5px) 4px; ` -const List = styled(ListBase)` +const List = styled(HorizontalScrollerContent)` + padding-left: ${rhythm(options.blockMarginBottom)}; + padding-right: ${rhythm(options.blockMarginBottom)}; + ${presets.Tablet} { flex-direction: column; padding: 0; diff --git a/www/src/components/email-capture-form.js b/www/src/components/email-capture-form.js index 8111661cfcbe6..b8797074999a2 100644 --- a/www/src/components/email-capture-form.js +++ b/www/src/components/email-capture-form.js @@ -1,55 +1,81 @@ import React from "react" +import styled from "react-emotion" + +import SendIcon from "react-icons/lib/md/send" + import { rhythm, options } from "../utils/typography" import presets, { colors } from "../utils/presets" import hex2rgba from "hex2rgba" import { formInput } from "../utils/form-styles" import { buttonStyles } from "../utils/styles" -const Label = props => ( - -) - -const SingleLineInput = React.forwardRef((props, ref) => ( - -)) - -const ErrorMessage = ({ children }) => ( -
    - {children} -
    -) +const StyledForm = styled(`form`)` + margin: 0; + + ${presets.Desktop} { + display: flex; + } +` + +const Label = styled(`label`)` + :after { + content: ${props => (props.isRequired ? `'*'` : ``)}; + color: ${colors.warning}; + } +` + +const SingleLineInput = styled(`input`)` + ${formInput}; + width: 100%; + + :focus { + border-color: ${colors.gatsby}; + outline: 0; + box-shadow: 0 0 0 0.2rem ${hex2rgba(colors.lilac, 0.25)}; + } +` + +const SingleLineInputOnHomepage = styled(SingleLineInput)` + font-family: ${options.systemFontFamily.join(`,`)}; + font-size: 1rem; + padding: 0.6rem; +` + +const ErrorMessage = styled(`div`)` + color: ${colors.warning}; + font-family: ${options.systemFontFamily.join(`,`)}; + font-size: 0.875rem; + margin: calc(1.05rem / 2) 0; +` + +const SuccesMessage = styled(`div`)` + font-family: ${options.systemFontFamily.join(`,`)}; +` + +const Submit = styled(`input`)` + ${buttonStyles.default}; + margin-top: 20px; +` + +const SubmitOnHomepage = styled(`button`)` + ${buttonStyles.default}; + font-size: 1.125rem; + width: 100%; + margin-top: 10px; + + span { + align-items: center; + display: flex; + width: 100%; + justify-content: space-between; + } + + ${presets.Desktop} { + width: auto; + margin-top: 0; + margin-left: 0.5rem; + } +` class Form extends React.Component { constructor(props) { @@ -58,7 +84,7 @@ class Form extends React.Component { this.onSubmit = this.onSubmit.bind(this) // let's use uncontrolled components https://reactjs.org/docs/uncontrolled-components.html - this.email = React.createRef() + this.email = null } state = { @@ -78,7 +104,7 @@ class Form extends React.Component { fields: [ { name: `email`, - value: this.email.current.value, + value: this.email.value, }, ], context: { @@ -133,33 +159,49 @@ class Form extends React.Component { } render() { + const { isHomepage } = this.props + + const SingleLineInputComponent = isHomepage + ? SingleLineInputOnHomepage + : SingleLineInput + return ( -
    -
    -
    + )} + { + this.email = input + }} + aria-label={isHomepage ? `Email` : ``} + placeholder={isHomepage ? `your.email@example.com` : ``} + /> + {this.state.fieldErrors.email && ( + {this.state.fieldErrors.email} + )} {this.state.errorMessage && ( {this.state.errorMessage} )} - - + + {isHomepage ? ( + + + Subscribe + + + + ) : ( + + )} + ) } } @@ -179,44 +221,65 @@ class EmailCaptureForm extends React.Component { } render() { - const { signupMessage, overrideCSS } = this.props + const { signupMessage, overrideCSS, isHomepage, className } = this.props + + const FormComponent = props => ( +
    + ) return ( -
    -
    -

    {signupMessage}

    + + {isHomepage ? ( +
    + {this.state.successMessage ? ( + + ) : ( + + )} +
    + ) : (
    - {this.state.successMessage ? ( +
    +

    {signupMessage}

    - ) : ( - - )} + css={{ + backgroundColor: colors.ui.light, + borderRadius: presets.radius, + color: colors.gatsby, + fontFamily: options.headerFontFamily.join(`,`), + padding: `15px`, + }} + > + {this.state.successMessage ? ( +
    + ) : ( + + )} +
    +
    -
    -
    + )} + ) } } @@ -225,6 +288,8 @@ EmailCaptureForm.defaultProps = { signupMessage: `Enjoyed this post? Receive the next one in your inbox!`, confirmMessage: `Thank you! Youʼll receive your first email shortly.`, overrideCSS: {}, + isHomepage: false, + className: ``, } export default EmailCaptureForm diff --git a/www/src/components/homepage/homepage-blog-post.js b/www/src/components/homepage/homepage-blog-post.js new file mode 100644 index 0000000000000..f5a3a8a04011c --- /dev/null +++ b/www/src/components/homepage/homepage-blog-post.js @@ -0,0 +1,294 @@ +import React from "react" +import PropTypes from "prop-types" +import styled from "react-emotion" +import { Link, graphql } from "gatsby" +import Img from "gatsby-image" + +import ArrowForwardIcon from "react-icons/lib/md/arrow-forward" + +import { HorizontalScrollerItem } from "../shared/horizontal-scroller" + +import presets, { colors } from "../../utils/presets" +import { rhythm, options } from "../../utils/typography" + +const HomepageBlogPostRoot = styled( + HorizontalScrollerItem.withComponent(`article`) +)` + display: flex; + flex-direction: column; + font-family: ${options.systemFontFamily.join(`,`)}; + padding-bottom: ${rhythm(2.5)}; + position: relative; + + .main-body & a { + border: none; + box-shadow: none; + font-family: inherit; + + :hover { + background: transparent; + } + } + + ${presets.Tablet} { + width: 320px; + } + + ${presets.Desktop} { + flex-shrink: 0; + margin-right: 0; + margin-bottom: ${rhythm(presets.gutters.default)}; + padding-bottom: ${rhythm(3.5)}; + width: ${props => (props.fullWidth ? `100%` : `80%`)}; + + :hover { + background: ${colors.ui.whisper}; + } + } +` + +const Cover = styled(Img)` + border-radius: ${presets.radiusLg}px ${presets.radiusLg}px 0 0; + display: block; + margin-bottom: -${rhythm(0.5)}; +` + +const Header = styled(`h1`)` + color: ${colors.gatsbyDarker}; + font-size: 1.25rem; + font-weight: bold; + line-height: 1.2; + margin: 0; + padding: ${rhythm(4 / 5)}; + padding-bottom: 0; + + ${presets.Desktop} { + font-size: ${props => (props.first ? `1.75rem` : `1.5rem`)}; + padding: ${rhythm(1.5)}; + padding-bottom: 0; + } +` + +const Meta = styled(`div`)` + align-items: center; + color: ${colors.gray.calm}; + display: flex; + flex-wrap: wrap; + font-size: 0.875rem; + margin-top: 1rem; + padding: 0 ${rhythm(4 / 5)}; + + & > * { + flex-shrink: 0; + } + + ${presets.Desktop} { + margin-top: 1.5rem; + padding: 0 ${rhythm(1.5)}; + } +` + +const Author = styled(Link)` + align-items: center; + display: flex; + z-index: 1; + + img { + border-radius: 50%; + height: 28px; + width: 28px; + } + + span { + color: ${colors.gatsby}; + border-bottom: 1px solid ${colors.ui.bright}; + box-shadow: inset 0 -2px 0px 0px ${colors.ui.bright}; + margin-left: 0.5rem; + } + + a& { + font-weight: normal; + } + + ${presets.Desktop} { + :hover { + span { + background: ${colors.ui.bright}; + } + } + } +` + +const Excerpt = styled(`p`)` + color: ${colors.gray.copy}; + font-size: 0.875rem; + line-height: 1.5; + padding: 0 ${rhythm(4 / 5)}; + + ${presets.Desktop} { + margin: 0; + margin-top: 1.5rem; + padding: 0 ${rhythm(1.5)}; + } +` + +const ReadMore = styled(Link)` + align-items: flex-end; + background: transparent; + bottom: 0; + color: ${colors.gatsby}; + display: flex; + flex-grow: 1; + font-size: 0.875rem; + left: 0; + padding: ${rhythm(4 / 5)}; + position: absolute; + right: 0; + top: 0; + z-index: 0; + + &:hover { + background: yellow; + } + + svg { + height: 18px; + width: 18px; + } + + span { + color: ${colors.gatsby}; + border-bottom: 1px solid ${colors.ui.bright}; + box-shadow: inset 0 -2px 0px 0px ${colors.ui.bright}; + font-weight: bold; + margin-right: 0.2rem; + } + + ${presets.Desktop} { + padding: ${rhythm(1.5)}; + + span { + :hover { + background: ${colors.ui.bright}; + } + } + } +` + +const formatDate = (dateString, desktopViewport = false) => { + const date = new Date(dateString) + + var options = { + month: `long`, + day: `numeric`, + year: `numeric`, + } + + return date.toLocaleDateString(`en-EN`, desktopViewport ? options : {}) +} + +const HomepageBlogPost = ({ + post, + first = false, + fullWidth = false, + desktopViewport = false, +}) => { + const { + excerpt: automaticExcerpt, + fields: { slug }, + frontmatter: { + excerpt: handwrittenExcerpt, + author: { + id: authorName, + avatar: { + childImageSharp: { fixed: authorFixed }, + }, + fields: { slug: authorSlug }, + }, + date, + title, + cover, + }, + } = post + + const excerpt = handwrittenExcerpt ? handwrittenExcerpt : automaticExcerpt + + return ( + + {desktopViewport && + cover && } + + +
    + {title} +
    + + + + + {authorName} + {authorName} + +  on  + {formatDate(date, desktopViewport)} + + {first && {excerpt}} + + Read more + + +
    + ) +} + +HomepageBlogPost.propTypes = { + post: PropTypes.object.isRequired, + first: PropTypes.bool, + fullWidth: PropTypes.bool, + desktopViewport: PropTypes.bool, +} + +export const homepageBlogPostFragment = graphql` + fragment HomepageBlogPostData on MarkdownRemark { + excerpt + fields { + slug + } + frontmatter { + excerpt + title + date + author { + id + fields { + slug + } + avatar { + childImageSharp { + fixed( + width: 30 + height: 30 + quality: 80 + traceSVG: { + turdSize: 10 + background: "#f6f2f8" + color: "#e0d6eb" + } + ) { + ...GatsbyImageSharpFixed_tracedSVG + } + } + } + } + cover { + childImageSharp { + fluid(maxWidth: 700, quality: 80) { + ...GatsbyImageSharpFluid_withWebp + } + } + } + } + } +` + +export default HomepageBlogPost diff --git a/www/src/components/homepage/homepage-blog-posts.js b/www/src/components/homepage/homepage-blog-posts.js new file mode 100644 index 0000000000000..e3da4041f034c --- /dev/null +++ b/www/src/components/homepage/homepage-blog-posts.js @@ -0,0 +1,222 @@ +import React, { Component } from "react" +import PropTypes from "prop-types" +import styled from "react-emotion" +import { Link } from "gatsby" + +import ArrowForwardIcon from "react-icons/lib/md/arrow-forward" + +import HomepageBlogPost from "./homepage-blog-post" +import { + HorizontalScroller, + HorizontalScrollerContent, + HorizontalScrollerItem, +} from "../shared/horizontal-scroller" + +import presets, { colors } from "../../utils/presets" +import { rhythm, options } from "../../utils/typography" +import { SCROLLER_CLASSNAME } from "../../utils/scrollers-observer" + +const HomepageBlogPostsRootMobile = styled(HorizontalScroller)` + margin: -6px -${rhythm(presets.gutters.default / 2)}; +` + +const HorizontalScrollerContentAsDiv = HorizontalScrollerContent.withComponent( + `div` +) + +const HomepageBlogPostsRootDesktop = styled(`div`)` + display: flex; +` + +const PostsColumn = styled(`div`)` + align-items: flex-end; + display: flex; + flex-direction: column; + flex-basis: 45%; + margin-right: ${rhythm(presets.gutters.default)}; + position: relative; + + :last-child { + align-items: flex-start; + margin-right: 0; + top: 30px; + } +` + +const ViewAllStyle = styled(HorizontalScrollerItem.withComponent(`div`))` + display: flex; + font-family: ${options.headerFontFamily.join(`,`)}; + overflow: hidden; + width: auto; + + a { + box-shadow: none; + border: 0; + display: flex; + flex-direction: column; + font-weight: bold; + font-size: 1.25rem; + justify-content: center; + line-height: 1.2; + padding: ${rhythm(1.5)}; + width: 100%; + + span { + align-items: center; + display: flex; + } + + svg { + height: 18px; + margin-left: 0.2rem; + width: 18px; + } + } + + ${presets.Desktop} { + background: ${colors.gatsby}; + color: white; + flex-shrink: 0; + height: 160px; + + margin-left: ${rhythm(presets.gutters.default)}; + width: 125px; + + a { + padding: ${rhythm(1)}; + justify-content: flex-start; + + &:hover { + color: ${colors.gatsby}; + background: ${colors.ui.whisper}; + } + } + } + + ${presets.Hd} { + width: 160px; + } +` + +const LastPost = styled(`div`)` + display: flex; + width: 100%; +` + +const ViewAll = () => ( + + + View all + + posts + + + + +) + +class HomepageBlogPosts extends Component { + desktopMediaQuery + + state = { + desktopViewport: false, + } + + componentDidMount = () => { + this.desktopMediaQuery = window.matchMedia(presets.desktop) + this.desktopMediaQuery.addListener(this.updateViewPortState) + this.setState({ desktopViewport: this.desktopMediaQuery.matches }) + } + + componentWillUnmount = () => { + this.desktopMediaQuery.removeListener(this.updateViewPortState) + } + + updateViewPortState = e => { + this.setState({ desktopViewport: this.desktopMediaQuery.matches }) + } + + splitPostsToColumns = posts => + posts.reduce( + (merge, post, idx) => { + if (idx % 2) { + merge[1].push(post) + } else { + merge[0].push(post) + } + + return merge + }, + [[], []] + ) + + render() { + const { posts } = this.props + const postsInColumns = this.splitPostsToColumns(posts) + const { desktopViewport } = this.state + + return ( + + {desktopViewport ? ( + + {postsInColumns.map((column, colIdx) => ( + + {column.map((post, postIdx) => { + const { + fields: { slug }, + } = post + + const firstPost = !colIdx && !postIdx + const lastPost = colIdx & postIdx + + if (lastPost) { + { + /* add 'View all posts' link as a sibling of the last post card */ + } + return ( + + + + + ) + } + + return ( + + ) + })} + + ))} + + ) : ( + + + {posts.map((post, idx) => { + const { + fields: { slug }, + } = post + return + })} + + + + )} + + ) + } +} + +HomepageBlogPosts.propTypes = { + posts: PropTypes.array.isRequired, +} + +export default HomepageBlogPosts diff --git a/www/src/components/homepage/homepage-blog.js b/www/src/components/homepage/homepage-blog.js new file mode 100644 index 0000000000000..607a50da28ff3 --- /dev/null +++ b/www/src/components/homepage/homepage-blog.js @@ -0,0 +1,29 @@ +import React from "react" +import PropTypes from "prop-types" + +import HomepageSection from "./homepage-section" +import HomepageBlogPosts from "./homepage-blog-posts" + +import { BlogIcon } from "../../assets/mobile-nav-icons" + +const HomepageBlog = ({ posts }) => ( + + + +) + +HomepageBlog.propTypes = { + posts: PropTypes.array.isRequired, +} + +export default HomepageBlog diff --git a/www/src/components/homepage/homepage-ecosystem.js b/www/src/components/homepage/homepage-ecosystem.js index 5e5656e434a15..651b88c2edca9 100644 --- a/www/src/components/homepage/homepage-ecosystem.js +++ b/www/src/components/homepage/homepage-ecosystem.js @@ -6,14 +6,15 @@ import ArrowForwardIcon from "react-icons/lib/md/arrow-forward" import HomepageSection from "./homepage-section" import EcosystemSection from "../ecosystem/ecosystem-section" -import { - EcosystemFeaturedItemsRootBase, - ListBase as EcosystemFeaturedItemsListBase, -} from "../ecosystem/ecosystem-featured-items" import EcosystemFeaturedItem, { BlockLink as FeaturedItemBlockLink, } from "../ecosystem/ecosystem-featured-item" +import { + HorizontalScroller, + HorizontalScrollerContent, +} from "../shared/horizontal-scroller" + import { EcosystemIcon } from "../../assets/mobile-nav-icons" import { PluginsIcon, StartersIcon } from "../../assets/ecosystem-icons" @@ -30,10 +31,6 @@ const Sections = styled(`div`)` flex-direction: row; margin: 0 -8px; } - - ${presets.Desktop} { - margin: 0 1.5rem 0 2.5rem; - } ` const Section = styled(EcosystemSection)` @@ -55,54 +52,46 @@ const Section = styled(EcosystemSection)` const SubTitle = styled(`h3`)` color: ${colors.lemon}; font-size: 1.2rem; + margin-bottom: 0.25rem; margin-top: 2rem; - ${presets.Tablet} { - margin-left: 3rem; - } - ${presets.Desktop} { - margin-left: 6rem; + margin-left: 3rem; + margin-bottom: 1rem; } ` -const FeaturedItems = styled(EcosystemFeaturedItemsRootBase)` +const FeaturedItems = styled(HorizontalScroller)` margin: 0 -${rhythm(presets.gutters.default / 2)}; ${presets.Desktop} { margin: 0; - margin-left: calc(3rem - (${rhythm(options.blockMarginBottom)})); - margin-right: 1rem; - overflow-x: auto; - } - - ${presets.Hd} { - margin-right: 3rem; + overflow-x: visible; } ` -const FeaturedItemsList = styled(EcosystemFeaturedItemsListBase)` - padding: 0 calc(${rhythm(options.blockMarginBottom)} - 7px) 0; - +const FeaturedItemsList = styled(HorizontalScrollerContent)` ${presets.Desktop} { flex-wrap: wrap; margin: 0; + padding: 0; width: 100%; } ` const FeaturedItem = styled(EcosystemFeaturedItem)` - margin: 0 6px 6px 0; + margin-right: ${rhythm(presets.gutters.default / 2)}; ${presets.Tablet} { border-bottom: none; - margin: 0 6px 6px 0; - padding: 5px; + margin: ${rhythm(presets.gutters.default / 2)}; + margin-top: 0; + margin-left: 0; width: 320px; } ${presets.Desktop} { - flex-basis: 30%; + flex-basis: 28%; :nth-child(4) { margin-left: 8%; diff --git a/www/src/components/homepage/homepage-newsletter.js b/www/src/components/homepage/homepage-newsletter.js new file mode 100644 index 0000000000000..06c8ae27f756c --- /dev/null +++ b/www/src/components/homepage/homepage-newsletter.js @@ -0,0 +1,105 @@ +import React from "react" +import styled from "react-emotion" + +import HomepageSection from "./homepage-section" +import EmailCaptureForm from "../../components/email-capture-form" + +import { NewsletterFormOrnament } from "../../assets/ornaments" + +import { rhythm, options } from "../../utils/typography" +import presets, { colors } from "../../utils/presets" + +const stripedBorderHeight = `8px` + +const Container = styled(`div`)` + border: 1px solid ${colors.ui.light}; + border-radius: ${presets.radiusLg}px; + display: flex; + flex-direction: column; + margin-bottom: ${rhythm(presets.gutters.default)}; + padding: ${rhythm(presets.gutters.default * 1.2)}; + padding-bottom: calc( + ${rhythm(presets.gutters.default * 1.2)} + ${stripedBorderHeight} + ); + position: relative; + + :after { + border-radius: 0 0 ${presets.radiusLg}px ${presets.radiusLg}px; + background: ${colors.ui.whisper} + repeating-linear-gradient( + 135deg, + ${colors.lemon}, + ${colors.lemon} 20px, + transparent 20px, + transparent 40px, + ${colors.mint} 40px, + ${colors.mint} 60px, + transparent 60px, + transparent 80px + ); + bottom: 0; + content: ""; + height: ${stripedBorderHeight}; + left: 0; + right: 0; + position: absolute; + } + + ${presets.Desktop} { + flex-direction: row; + justify-content: space-between; + + > * { + flex-basis: 50%; + } + } +` + +const Ornament = styled(`span`)` + left: -4px; + position: absolute; + top: -8px; +` + +const Name = styled(`h3`)` + color: ${colors.lilac}; + font-fa1mily: ${options.headerFontFamily.join(`,`)}; + font-size: 0.875rem; + font-weight: normal; + margin: 0; + text-transform: uppercase; +` + +const Title = styled(`h1`)` + color: ${colors.gatsby}; + font-size: 1.25rem; + line-height: 1.3; + margin: 0; + margin-top: 0.2rem; +` + +const Form = styled(EmailCaptureForm)` + margin-top: 1.25rem; + + ${presets.Desktop} { + margin-top: 0; + } +` + +const HomepageNewsletter = () => ( + + + +
    + The Gatsby Newsletter + Keep up with the latest things Gatsby! +
    + +
    +
    +) + +export default HomepageNewsletter diff --git a/www/src/components/homepage/homepage-section.js b/www/src/components/homepage/homepage-section.js index 04f02b86be6e2..0d6fac03a646e 100644 --- a/www/src/components/homepage/homepage-section.js +++ b/www/src/components/homepage/homepage-section.js @@ -14,30 +14,30 @@ const HomepageSectionRoot = styled(`section`)` background: ${props => (props.inverse ? colors.gatsby : `#fff`)}; color: ${props => (props.inverse ? colors.ui.light : colors.gatsbyDark)}; margin: 0 -${rhythm(presets.gutters.default / 2)}; - padding: ${rhythm(2)} ${rhythm(presets.gutters.default / 2)}; + padding: ${rhythm(1)} ${rhythm(presets.gutters.default / 2)}; width: calc(100% + ${rhythm(presets.gutters.default)}); ${presets.Hd} { - margin: 0 -${vP}; + margin: -1px -${vP}; + padding: ${rhythm(1)} 5%; width: calc(100% + (${vP} * 2)); } ${presets.VHd} { - padding: ${rhythm(2)} 5%; + padding: ${rhythm(1.5)} 8%; } ` -const Header = styled(`header`)` +export const Header = styled(`header`)` ${presets.Tablet} { - margin-left: 3rem; max-width: 30rem; } ${presets.Desktop} { - margin-left: 6rem; + margin-left: 3rem; } ` -const Name = styled(`h3`)` +export const Name = styled(`h3`)` align-items: center; color: ${props => (props.inverse ? colors.ui.light : colors.lilac)}; display: flex; @@ -60,33 +60,38 @@ const Icon = styled(`span`)` } svg { + fill: transparent; height: ${ICON_SIZE}; stroke: ${props => (props.inverse ? colors.ui.light : colors.lilac)}; width: ${ICON_SIZE}; } ` -const Title = styled(`h1`)` +export const Title = styled(`h1`)` color: ${props => (props.inverse ? colors.lemon : colors.gatsby)}; font-size: 1.75rem; margin: 0; - margin-bottom: 0.5em; ` const Introduction = styled(`p`)` color: ${props => (props.inverse ? colors.ui.light : colors.gatsbyDark)}; font-size: 1.125rem; font-family: ${options.headerFontFamily.join(`,`)}; - margin-bottom: 0; + margin: 0; + margin-top: ${rhythm(4 / 5)}; ` const Actions = styled(`div`)` display: flex; flex-wrap: wrap; - margin-top: -${rhythm(1 / 4)}; + margin: 1rem 0 1.5rem; > a { - margin: ${rhythm(1.2)} 0 ${rhythm(1.5)}; + margin-right: ${rhythm(0.2)}; + } + + ${presets.Desktop} { + margin: 1rem 0 2.5rem; } ` @@ -98,10 +103,11 @@ const HomepageSection = ({ introduction, inverseStyle, links, + className, }) => ( - -
    - {sectionName && ( + + {sectionName && ( +
    {sectionIcon && ( - )} - {title && {title}} - {introduction && ( - {introduction} - )} - - {links.map((item, idx) => { - const { to, label, icon: Icon } = item - - return ( - - ) - })} - -
    + {title && {title}} + {introduction && ( + {introduction} + )} + {links && ( + + {links.map((item, idx) => { + const { to, label, icon: Icon, secondary } = item + + return ( + + ) + })} + + )} +
    + )} {children}
    ) @@ -140,6 +154,7 @@ HomepageSection.propTypes = { introduction: PropTypes.string, links: PropTypes.array, inverseStyle: PropTypes.bool, + className: PropTypes.string, } export default HomepageSection diff --git a/www/src/components/shared/horizontal-scroller.js b/www/src/components/shared/horizontal-scroller.js new file mode 100644 index 0000000000000..746f12ed7598b --- /dev/null +++ b/www/src/components/shared/horizontal-scroller.js @@ -0,0 +1,32 @@ +import styled from "react-emotion" + +import { rhythm } from "../../utils/typography" +import presets from "../../utils/presets" + +const BOX_SHADOW_BLUR = `8px` + +export const HorizontalScroller = styled(`div`)` + overflow-x: scroll; + -webkit-overflow-scrolling: touch; +` + +export const HorizontalScrollerContent = styled(`ul`)` + display: inline-flex; + list-style: none; + padding: ${BOX_SHADOW_BLUR} ${rhythm(presets.gutters.default / 2)} + calc(${BOX_SHADOW_BLUR} * 1.5); + margin: 0; +` + +export const HorizontalScrollerItem = styled(`li`)` + background: #fff; + border-radius: ${presets.radiusLg}px; + box-shadow: 0 0 ${BOX_SHADOW_BLUR} rgba(0, 0, 0, 0.2); + margin: 0; + margin-right: ${rhythm(presets.gutters.default / 2)}; + width: 77vw; + + :last-child { + margin-right: 0; + } +` diff --git a/www/src/pages/index.js b/www/src/pages/index.js index ef14655156029..5520242f02e65 100644 --- a/www/src/pages/index.js +++ b/www/src/pages/index.js @@ -3,7 +3,7 @@ import { graphql } from "gatsby" import Helmet from "react-helmet" import Layout from "../components/layout" import presets, { colors } from "../utils/presets" -import { rhythm, options } from "../utils/typography" +import { rhythm } from "../utils/typography" import { WebpackIcon, ReactJSIcon, GraphQLIcon } from "../assets/logos" import { vP } from "../components/gutters" import Container from "../components/container" @@ -14,12 +14,12 @@ import Card from "../components/card" import UsedBy from "../components/used-by" import CardHeadline from "../components/card-headline" import Diagram from "../components/diagram" -import BlogPostPreviewItem from "../components/blog-post-preview-item" import FuturaParagraph from "../components/futura-paragraph" import Button from "../components/button" import TechWithIcon from "../components/tech-with-icon" -import EmailCaptureForm from "../components/email-capture-form" import HomepageEcosystem from "../components/homepage/homepage-ecosystem" +import HomepageBlog from "../components/homepage/homepage-blog" +import HomepageNewsletter from "../components/homepage/homepage-newsletter" import { setupScrollersObserver, unobserveScrollers, @@ -45,7 +45,7 @@ class IndexRoute extends React.Component { render() { const { data: { - allMarkdownRemark: blogPosts, + allMarkdownRemark: { edges: postsData }, allStartersYaml: { edges: startersData }, allNpmPackage: { edges: pluginsData }, }, @@ -86,6 +86,8 @@ class IndexRoute extends React.Component { starters, }) + const posts = postsData.map(item => item.node) + return ( @@ -109,9 +111,10 @@ class IndexRoute extends React.Component {
    - -
    - - -

    - Latest from the Gatsby blog -

    - {blogPosts.edges.map(({ node }) => ( - - ))} - -
    -
    -
    + + +
    @@ -302,7 +256,7 @@ export const pageQuery = graphql` } allMarkdownRemark( sort: { order: DESC, fields: [frontmatter___date, fields___slug] } - limit: 3 + limit: 4 filter: { frontmatter: { draft: { ne: true } } fileAbsolutePath: { regex: "/docs.blog/" } @@ -311,7 +265,7 @@ export const pageQuery = graphql` ) { edges { node { - ...BlogPostPreview_item + ...HomepageBlogPostData } } } diff --git a/www/src/utils/colors.js b/www/src/utils/colors.js index e814a01573a84..6e78f906e8c3f 100644 --- a/www/src/utils/colors.js +++ b/www/src/utils/colors.js @@ -5,7 +5,9 @@ const colors = { // @see https://www.figma.com/file/J6IYJEtdRmwJQOrcZ2DfvxDD/Gatsby gatsby: `#663399`, // was #744c9e gatsbyDark: `#442266`, + gatsbyDarker: `#221133`, lemon: `#ffdf37`, + mint: `#73fff7`, lilac: `#8c65b3`, lavender: `#b190d5`, wisteria: `#ccb2e5`, From fbe4fcb0b42e6cec693029449affbc6cc0f2bdb1 Mon Sep 17 00:00:00 2001 From: Nicholas Drane Date: Tue, 27 Nov 2018 15:56:11 -0600 Subject: [PATCH 412/462] Fix/4459/excerpt formatting ignored (#9716) This is the beginnings of a fix for https://github.com/gatsbyjs/gatsby/issues/4459 Right now, the fix works when excerpt_separator is provided. I have not yet implemented a fix for when the excerpt is generated using the `pruneLength` setting, though I have thoughts on how to solve it. My plan to is do a pre-order traversal over the html AST, accumulating nodes until the pruneLength is reached. I would love some preliminary feedback to get a sense of how the contributors feel about this PR so far. Here are some of my initial thoughts: 1. The work in the `excerpt` resolve function is a little hacky. We are directly invoking a variety of functions get our HTML. I'm curious if anyone has a more streamlined approach for this. 2. We are invoking `getMarkdownAST` (previously getAST) twice, once for the excerpt and once for the entire page. I'm worried that this is going to break non-idempotent existing plugins since they will now run twice. 3. I tore apart the `getAST` function a bit and think I did a good job simplifying it. The big change is that we don't generate multiple promises anymore. i think this goes a long way towards improving readability. I'd love to hear people's thoughts. --- packages/gatsby-transformer-remark/README.md | 34 ++- .../__snapshots__/extend-node.js.snap | 18 ++ .../src/__tests__/extend-node.js | 68 +++++ .../src/extend-node-type.js | 272 +++++++++++------- .../src/hast-processing.js | 72 +++++ 5 files changed, 360 insertions(+), 104 deletions(-) create mode 100644 packages/gatsby-transformer-remark/src/hast-processing.js diff --git a/packages/gatsby-transformer-remark/README.md b/packages/gatsby-transformer-remark/README.md index 3faa7bc117e14..2e96499042003 100644 --- a/packages/gatsby-transformer-remark/README.md +++ b/packages/gatsby-transformer-remark/README.md @@ -81,7 +81,9 @@ Using the following GraphQL query you'll be able to get the table of contents By default the tableOfContents is using the field `slug` to generate URLs. You can however provide another field using the pathToSlugField parameter. **Note** that providing a non existing field will cause the result to be null. -### Excerpt length +### Excerpts + +#### Length By default, excerpts have a maximum length of 140 characters. You can change the default using the `pruneLength` argument. For example, if you need 500 characters, you can specify: @@ -98,6 +100,36 @@ By default, excerpts have a maximum length of 140 characters. You can change the } ``` +#### Format + +By default, Gatsby will return excerpts as plain text. This might be useful for populating [opengraph](https://en.wikipedia.org/wiki/Facebook_Platform#Open_Graph_protocol) HTML tags for SEO reasons. You can also explicitly specify a `PLAIN` format like so: + +```graphql +{ + allMarkdownRemark { + edges { + node { + excerpt(format: PLAIN) + } + } + } +} +``` + +It's also possible to ask Gatsby to return excerpts formatted as HTML. You might use this if you have a blog post whose an excerpt contains markdown content--e.g. header, link, etc.--and you want these links to render as HTML. + +```graphql +{ + allMarkdownRemark { + edges { + node { + excerpt(format: HTML) + } + } + } +} +``` + ## Troubleshooting ### Excerpts for non-latin languages diff --git a/packages/gatsby-transformer-remark/src/__tests__/__snapshots__/extend-node.js.snap b/packages/gatsby-transformer-remark/src/__tests__/__snapshots__/extend-node.js.snap index 4372b594b1f07..648fc80a20a74 100644 --- a/packages/gatsby-transformer-remark/src/__tests__/__snapshots__/extend-node.js.snap +++ b/packages/gatsby-transformer-remark/src/__tests__/__snapshots__/extend-node.js.snap @@ -55,6 +55,24 @@ Object { } `; +exports[`Excerpt is generated correctly from schema given an html format, it correctly maps nested markdown to html 1`] = ` +Object { + "excerpt": "

    Where oh where is that pony?

    ", + "frontmatter": Object { + "title": "my little pony", + }, +} +`; + +exports[`Excerpt is generated correctly from schema given an html format, it respects the excerpt_separator 1`] = ` +Object { + "excerpt": "

    Where oh where is that pony? Is he in the stable…

    ", + "frontmatter": Object { + "title": "my little pony", + }, +} +`; + exports[`Links are correctly prefixed correctly prefixes links 1`] = ` Object { "html": "

    This is a link.

    diff --git a/packages/gatsby-transformer-remark/src/__tests__/extend-node.js b/packages/gatsby-transformer-remark/src/__tests__/extend-node.js index 53b3eeca6b783..7fd5a833895c0 100644 --- a/packages/gatsby-transformer-remark/src/__tests__/extend-node.js +++ b/packages/gatsby-transformer-remark/src/__tests__/extend-node.js @@ -237,6 +237,74 @@ In quis lectus sed eros efficitur luctus. Morbi tempor, nisl eget feugiat tincid expect(node.excerpt.length).toBe(50) } ) + + bootstrapTest( + `given an html format, it correctly maps nested markdown to html`, + `--- +title: "my little pony" +date: "2017-09-18T23:19:51.246Z" +--- + +Where oh [*where*](nick.com) **_is_** that pony?`, + `excerpt(format: HTML) + frontmatter { + title + } + `, + node => { + expect(node).toMatchSnapshot() + expect(node.excerpt).toMatch( + `

    Where oh where is that pony?

    ` + ) + } + ) + + bootstrapTest( + `given an html format, it prunes large excerpts`, + `--- +title: "my little pony" +date: "2017-09-18T23:19:51.246Z" +--- + +Where oh where is that pony? Is he in the stable or down by the stream?`, + `excerpt(format: HTML, pruneLength: 50) + frontmatter { + title + } + `, + node => { + // expect(node).toMatchSnapshot() + expect(node.excerpt).toMatch( + `

    Where oh where is that pony? Is he in the stable…

    ` + ) + } + ) + + bootstrapTest( + `given an html format, it respects the excerpt_separator`, + `--- +title: "my little pony" +date: "2017-09-18T23:19:51.246Z" +--- + +Where oh where is that pony? Is he in the stable or by the stream? + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi auctor sit amet velit id facilisis. Nulla viverra, eros at efficitur pulvinar, lectus orci accumsan nisi, eu blandit elit nulla nec lectus. Integer porttitor imperdiet sapien. Quisque in orci sed nisi consequat aliquam. Aenean id mollis nisi. Sed auctor odio id erat facilisis venenatis. Quisque posuere faucibus libero vel fringilla. +`, + `excerpt(format: HTML, pruneLength: 50) + frontmatter { + title + } + `, + node => { + expect(node).toMatchSnapshot() + expect(node.excerpt).toMatch( + `

    Where oh where is that pony? Is he in the stable…

    ` + ) + }, + { excerpt_separator: `` } + ) }) describe(`Wordcount and timeToRead are generated correctly from schema`, () => { diff --git a/packages/gatsby-transformer-remark/src/extend-node-type.js b/packages/gatsby-transformer-remark/src/extend-node-type.js index 07827d42b1458..fd7ac66e8ecfd 100644 --- a/packages/gatsby-transformer-remark/src/extend-node-type.js +++ b/packages/gatsby-transformer-remark/src/extend-node-type.js @@ -16,7 +16,6 @@ const toHAST = require(`mdast-util-to-hast`) const hastToHTML = require(`hast-util-to-html`) const mdastToToc = require(`mdast-util-toc`) const Promise = require(`bluebird`) -const prune = require(`underscore.string/prune`) const unified = require(`unified`) const parse = require(`remark-parse`) const stringify = require(`remark-stringify`) @@ -24,6 +23,13 @@ const english = require(`retext-english`) const remark2retext = require(`remark-retext`) const stripPosition = require(`unist-util-remove-position`) const hastReparseRaw = require(`hast-util-raw`) +const prune = require(`underscore.string/prune`) + +const { + getConcatenatedValue, + cloneTreeUntil, + findLastTextNode, +} = require(`./hast-processing`) let fileNodes let pluginsCacheStr = `` @@ -68,7 +74,6 @@ module.exports = ( if (type.name !== `MarkdownRemark`) { return {} } - pluginsCacheStr = pluginOptions.plugins.map(p => p.name).join(``) pathPrefixCacheStr = pathPrefix || `` @@ -117,111 +122,114 @@ module.exports = ( // We are already generating AST, so let's wait for it return await ASTPromiseMap.get(cacheKey) } else { - const ASTGenerationPromise = new Promise(async resolve => { - if (process.env.NODE_ENV !== `production` || !fileNodes) { - fileNodes = getNodesByType(`File`) - } - const ast = await new Promise((resolve, reject) => { - // Use Bluebird's Promise function "each" to run remark plugins serially. - Promise.each(pluginOptions.plugins, plugin => { - const requiredPlugin = require(plugin.resolve) - if (_.isFunction(requiredPlugin.mutateSource)) { - return requiredPlugin.mutateSource( - { - markdownNode, - files: fileNodes, - getNode, - reporter, - cache, - }, - plugin.pluginOptions - ) - } else { - return Promise.resolve() - } - }).then(() => { - const markdownAST = remark.parse(markdownNode.internal.content) + const ASTGenerationPromise = getMarkdownAST(markdownNode) + ASTGenerationPromise.then(markdownAST => { + cache.set(cacheKey, markdownAST) + ASTPromiseMap.delete(cacheKey) + }).catch(err => { + ASTPromiseMap.delete(cacheKey) + throw err + }) + // Save new AST to cache and return + // We can now release promise, as we cached result + ASTPromiseMap.set(cacheKey, ASTGenerationPromise) + return ASTGenerationPromise + } + } - if (pathPrefix) { - // Ensure relative links include `pathPrefix` - visit(markdownAST, [`link`, `definition`], node => { - if ( - node.url && - node.url.startsWith(`/`) && - !node.url.startsWith(`//`) - ) { - node.url = withPathPrefix(node.url, pathPrefix) - } - }) - } + function getMarkdownAST(markdownNode) { + return new Promise(async (resolve, reject) => { + if (process.env.NODE_ENV !== `production` || !fileNodes) { + fileNodes = getNodesByType(`File`) + } + // Use Bluebird's Promise function "each" to run remark plugins serially. + await Promise.each(pluginOptions.plugins, plugin => { + const requiredPlugin = require(plugin.resolve) + if (_.isFunction(requiredPlugin.mutateSource)) { + return requiredPlugin.mutateSource( + { + markdownNode, + files: fileNodes, + getNode, + reporter, + cache, + }, + plugin.pluginOptions + ) + } else { + return Promise.resolve() + } + }) + const markdownAST = remark.parse(markdownNode.internal.content) - // source => parse (can order parsing for dependencies) => typegen - // - // source plugins identify nodes, provide id, initial parse, know - // when nodes are created/removed/deleted - // get passed cached DataTree and return list of clean and dirty nodes. - // Also get passed `dirtyNodes` function which they can call with an array - // of node ids which will then get re-parsed and the inferred schema - // recreated (if inferring schema gets too expensive, can also - // cache the schema until a query fails at which point recreate the - // schema). - // - // parse plugins take data from source nodes and extend it, never mutate - // it. Freeze all nodes once done so typegen plugins can't change it - // this lets us save off the DataTree at that point as well as create - // indexes. - // - // typegen plugins identify further types of data that should be lazily - // computed due to their expense, or are hard to infer graphql type - // (markdown ast), or are need user input in order to derive e.g. - // markdown headers or date fields. - // - // wrap all resolve functions to (a) auto-memoize and (b) cache to disk any - // resolve function that takes longer than ~10ms (do research on this - // e.g. how long reading/writing to cache takes), and (c) track which - // queries are based on which source nodes. Also if connection of what - // which are always rerun if their underlying nodes change.. - // - // every node type in DataTree gets a schema type automatically. - // typegen plugins just modify the auto-generated types to add derived fields - // as well as computationally expensive fields. - if (process.env.NODE_ENV !== `production` || !fileNodes) { - fileNodes = getNodesByType(`File`) - } - // Use Bluebird's Promise function "each" to run remark plugins serially. - Promise.each(pluginOptions.plugins, plugin => { - const requiredPlugin = require(plugin.resolve) - if (_.isFunction(requiredPlugin)) { - return requiredPlugin( - { - markdownAST, - markdownNode, - getNode, - files: fileNodes, - pathPrefix, - reporter, - cache, - }, - plugin.pluginOptions - ) - } else { - return Promise.resolve() - } - }).then(() => { - resolve(markdownAST) - }) - }) + if (pathPrefix) { + // Ensure relative links include `pathPrefix` + visit(markdownAST, [`link`, `definition`], node => { + if ( + node.url && + node.url.startsWith(`/`) && + !node.url.startsWith(`//`) + ) { + node.url = withPathPrefix(node.url, pathPrefix) + } }) + } - // Save new AST to cache and return - cache.set(cacheKey, ast) - // We can now release promise, as we cached result - ASTPromiseMap.delete(cacheKey) - return resolve(ast) + // source => parse (can order parsing for dependencies) => typegen + // + // source plugins identify nodes, provide id, initial parse, know + // when nodes are created/removed/deleted + // get passed cached DataTree and return list of clean and dirty nodes. + // Also get passed `dirtyNodes` function which they can call with an array + // of node ids which will then get re-parsed and the inferred schema + // recreated (if inferring schema gets too expensive, can also + // cache the schema until a query fails at which point recreate the + // schema). + // + // parse plugins take data from source nodes and extend it, never mutate + // it. Freeze all nodes once done so typegen plugins can't change it + // this lets us save off the DataTree at that point as well as create + // indexes. + // + // typegen plugins identify further types of data that should be lazily + // computed due to their expense, or are hard to infer graphql type + // (markdown ast), or are need user input in order to derive e.g. + // markdown headers or date fields. + // + // wrap all resolve functions to (a) auto-memoize and (b) cache to disk any + // resolve function that takes longer than ~10ms (do research on this + // e.g. how long reading/writing to cache takes), and (c) track which + // queries are based on which source nodes. Also if connection of what + // which are always rerun if their underlying nodes change.. + // + // every node type in DataTree gets a schema type automatically. + // typegen plugins just modify the auto-generated types to add derived fields + // as well as computationally expensive fields. + if (process.env.NODE_ENV !== `production` || !fileNodes) { + fileNodes = getNodesByType(`File`) + } + // Use Bluebird's Promise function "each" to run remark plugins serially. + await Promise.each(pluginOptions.plugins, plugin => { + const requiredPlugin = require(plugin.resolve) + if (_.isFunction(requiredPlugin)) { + return requiredPlugin( + { + markdownAST, + markdownNode, + getNode, + files: fileNodes, + pathPrefix, + reporter, + cache, + }, + plugin.pluginOptions + ) + } else { + return Promise.resolve() + } }) - ASTPromiseMap.set(cacheKey, ASTGenerationPromise) - return await ASTGenerationPromise - } + resolve(markdownAST) + }) } async function getHeadings(markdownNode) { @@ -346,6 +354,14 @@ module.exports = ( }, }) + const ExcerptFormats = new GraphQLEnumType({ + name: `ExcerptFormats`, + values: { + PLAIN: { value: `plain` }, + HTML: { value: `html` }, + }, + }) + return resolve({ html: { type: GraphQLString, @@ -373,8 +389,58 @@ module.exports = ( type: GraphQLBoolean, defaultValue: false, }, + format: { + type: ExcerptFormats, + defaultValue: `plain`, + }, }, - resolve(markdownNode, { pruneLength, truncate }) { + async resolve(markdownNode, { format, pruneLength, truncate }) { + if (format === `html`) { + if (pluginOptions.excerpt_separator) { + const fullAST = await getHTMLAst(markdownNode) + const excerptAST = cloneTreeUntil( + fullAST, + ({ nextNode }) => + nextNode.type === `raw` && + nextNode.value === pluginOptions.excerpt_separator + ) + return hastToHTML(excerptAST) + } + const fullAST = await getHTMLAst(markdownNode) + if (!fullAST.children.length) { + return `` + } + + const excerptAST = cloneTreeUntil(fullAST, ({ root }) => { + const totalExcerptSoFar = getConcatenatedValue(root) + return totalExcerptSoFar && totalExcerptSoFar.length > pruneLength + }) + const unprunedExcerpt = getConcatenatedValue(excerptAST) + if (!unprunedExcerpt) { + return `` + } + + if (pruneLength && unprunedExcerpt.length < pruneLength) { + return hastToHTML(excerptAST) + } + + const lastTextNode = findLastTextNode(excerptAST) + const amountToPruneLastNode = + pruneLength - (unprunedExcerpt.length - lastTextNode.value.length) + if (!truncate) { + lastTextNode.value = prune( + lastTextNode.value, + amountToPruneLastNode, + `…` + ) + } else { + lastTextNode.value = _.truncate(lastTextNode.value, { + length: pruneLength, + omission: `…`, + }) + } + return hastToHTML(excerptAST) + } if (markdownNode.excerpt) { return Promise.resolve(markdownNode.excerpt) } diff --git a/packages/gatsby-transformer-remark/src/hast-processing.js b/packages/gatsby-transformer-remark/src/hast-processing.js new file mode 100644 index 0000000000000..46068438a9cff --- /dev/null +++ b/packages/gatsby-transformer-remark/src/hast-processing.js @@ -0,0 +1,72 @@ +function duplicateNode(node) { + return { + type: node.type, + children: [], + tagName: node.tagName, + value: node.value, + } +} + +function getConcatenatedValue(node) { + if (!node) { + return `` + } + if (node.type === `text`) { + return node.value + } else if (node.children && node.children.length) { + return node.children + .map(getConcatenatedValue) + .filter(value => value) + .join(``) + } + return `` +} + +function cloneTreeUntil(root, endCondition) { + let clonedRoot + let endConditionMet = false + + function preOrderTraversal(node) { + if (endConditionMet || endCondition({ root: clonedRoot, nextNode: node })) { + endConditionMet = true + return + } + + const newNode = duplicateNode(node) + if (clonedRoot) { + clonedRoot.children.push(newNode) + } else { + clonedRoot = newNode + } + + if (node.children) { + node.children.forEach(child => { + clonedRoot = newNode + preOrderTraversal(child) + }) + } + } + preOrderTraversal(root) + return clonedRoot +} + +function findLastTextNode(node, textNode) { + if (node.type === `text`) { + textNode = node + } + if (node.children) { + node.children.forEach(child => { + const laterTextNode = findLastTextNode(child) + if (laterTextNode !== textNode) { + textNode = laterTextNode + } + }) + } + return textNode +} + +module.exports = { + getConcatenatedValue, + cloneTreeUntil, + findLastTextNode, +} From a3e505c256d71915ce80f4083d3ba1f5a251d507 Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Tue, 27 Nov 2018 15:57:21 -0600 Subject: [PATCH 413/462] chore(release): Publish - gatsby-image@2.0.21 - gatsby-transformer-remark@2.1.13 - gatsby@2.0.56 --- packages/gatsby-image/CHANGELOG.md | 6 ++++++ packages/gatsby-image/package.json | 2 +- packages/gatsby-transformer-remark/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-remark/package.json | 2 +- packages/gatsby/CHANGELOG.md | 6 ++++++ packages/gatsby/package.json | 2 +- 6 files changed, 21 insertions(+), 3 deletions(-) diff --git a/packages/gatsby-image/CHANGELOG.md b/packages/gatsby-image/CHANGELOG.md index d6a6876a4d5a7..35e3ccb5779ab 100644 --- a/packages/gatsby-image/CHANGELOG.md +++ b/packages/gatsby-image/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.21](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-image/compare/gatsby-image@2.0.20...gatsby-image@2.0.21) (2018-11-27) + +**Note:** Version bump only for package gatsby-image + ## [2.0.20](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-image/compare/gatsby-image@2.0.19...gatsby-image@2.0.20) (2018-11-08) diff --git a/packages/gatsby-image/package.json b/packages/gatsby-image/package.json index 7fc44eb582712..7eb651b030eb0 100644 --- a/packages/gatsby-image/package.json +++ b/packages/gatsby-image/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-image", "description": "Lazy-loading React image component with optional support for the blur-up effect.", - "version": "2.0.20", + "version": "2.0.21", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-transformer-remark/CHANGELOG.md b/packages/gatsby-transformer-remark/CHANGELOG.md index 87d29139a2c8b..87926886d3d86 100644 --- a/packages/gatsby-transformer-remark/CHANGELOG.md +++ b/packages/gatsby-transformer-remark/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.1.13](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-remark/compare/gatsby-transformer-remark@2.1.12...gatsby-transformer-remark@2.1.13) (2018-11-27) + +**Note:** Version bump only for package gatsby-transformer-remark + ## [2.1.12](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-remark/compare/gatsby-transformer-remark@2.1.11...gatsby-transformer-remark@2.1.12) (2018-11-08) diff --git a/packages/gatsby-transformer-remark/package.json b/packages/gatsby-transformer-remark/package.json index 4ba183e1d53d6..e649de7e97521 100644 --- a/packages/gatsby-transformer-remark/package.json +++ b/packages/gatsby-transformer-remark/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-remark", "description": "Gatsby transformer plugin for Markdown using the Remark library and ecosystem", - "version": "2.1.12", + "version": "2.1.13", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index e6e3e8857e5e8..59cd0fb8f80fb 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.56](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.55...gatsby@2.0.56) (2018-11-27) + +**Note:** Version bump only for package gatsby + ## [2.0.55](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.54...gatsby@2.0.55) (2018-11-22) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 55d6c6d501a0a..204f82960ebae 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.55", + "version": "2.0.56", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From 6b069421e01f81c0a49c452c1f4444ebb5feeec0 Mon Sep 17 00:00:00 2001 From: Lennart Date: Tue, 27 Nov 2018 22:58:46 +0100 Subject: [PATCH 414/462] fix(www): Update "View all" component (#10170) @greglobinski @amberleyromo Currently the second "View all posts" links to the homepage instead of the blog --- www/src/components/homepage/homepage-blog-posts.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/src/components/homepage/homepage-blog-posts.js b/www/src/components/homepage/homepage-blog-posts.js index e3da4041f034c..1c2b310cc82c1 100644 --- a/www/src/components/homepage/homepage-blog-posts.js +++ b/www/src/components/homepage/homepage-blog-posts.js @@ -105,7 +105,7 @@ const LastPost = styled(`div`)` const ViewAll = () => ( - + View all posts From 329f90b7285d8a7e46c24875a608932baaccc956 Mon Sep 17 00:00:00 2001 From: Nicolas Goumard Date: Wed, 28 Nov 2018 11:50:17 +0100 Subject: [PATCH 415/462] Added joinup.io to site showcase (#10171) --- docs/sites.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index 9eed80a972158..290e83b1cf194 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3563,3 +3563,13 @@ built_by: Samuel Fialho built_by_url: https://samuelfialho.com featured: false +- title: JoinUp HR chatbot + url: https://www.joinup.io + main_url: https://www.joinup.io + description: Custom HR chatbot for better candidate experience + categories: + - App + - Chatbot + - HR + - Technology + featured: false From de03277c6a463415c500a73bfcd639664d6f62c1 Mon Sep 17 00:00:00 2001 From: "Jacob D. Castro" Date: Wed, 28 Nov 2018 02:55:17 -0800 Subject: [PATCH 416/462] add jacobdcastro.com to site showcase (#10176) Added jacobdcastro.com to site showcase. 'Featured' set to 'false' and all possible YAML entries are filled out, even optional ones. --- docs/sites.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index 290e83b1cf194..8bc2de28fa682 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3573,3 +3573,17 @@ - HR - Technology featured: false +- title: JDCastro Web Design & Development + main_url: https://jacobdcastro.com + url: https://jacobdcastro.com + source_url: https://github.com/jacobdcastro/personal-site + featured: false + description: > + A small business site for freelance web designer and developer Jacob D. Castro. Includes professional blog, contact forms, and soon-to-come portfolio of sites for clients. Need a new website or an extra developer to share the workload? Feel free to check out the website! + categories: + - Blog + - Portfolio + - Business + - Freelance + built_by: Jacob D. Castro + built_by_url: https://twitter.com/jacobdcastro From 5ebaa8886b9fe3a31da4f0a62a2ef9e87826007f Mon Sep 17 00:00:00 2001 From: wlockiv Date: Wed, 28 Nov 2018 04:58:45 -0600 Subject: [PATCH 417/462] docs(gatsby-link): don't pass activeClassName prop to html anchor (#10107) Without destructuring `activeClassName`, the element will receive the prop and react will throw an error along the lines of `React does not recognize the `activeClassName` prop on a DOM element.`. --- docs/docs/gatsby-link.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/docs/gatsby-link.md b/docs/docs/gatsby-link.md index 81177ecd8507e..33a479b629d79 100644 --- a/docs/docs/gatsby-link.md +++ b/docs/docs/gatsby-link.md @@ -136,7 +136,9 @@ following may be a good starting point: ```jsx import { Link as GatsbyLink } from "gatsby" -const Link = ({ children, to, ...other }) => { +// Since DOM elements cannot receive activeClassName, +// destructure the prop here and pass it only to GatsbyLink +const Link = ({ children, to, activeClassName, ...other }) => { // Tailor the following test to your environment. // This example assumes that any internal link (intended for Gatsby) // will start with exactly one slash, and that anything else is external. @@ -145,7 +147,7 @@ const Link = ({ children, to, ...other }) => { // Use Gatsby Link for internal links, and for others if (internal) { return ( - + {children} ) @@ -164,7 +166,7 @@ export default Link You can similarly check for file downloads: -``` +```jsx const file = /\.[0-9a-z]+$/i.test(to) ... From 992cd53c57206df52c11e69543580e1ec3e3b4e6 Mon Sep 17 00:00:00 2001 From: Garrett Hughes Date: Wed, 28 Nov 2018 04:05:38 -0800 Subject: [PATCH 418/462] docs(gatsby-link): add example of passing state (#10137) Update docs to show how state is passed through the location object. --- docs/docs/gatsby-link.md | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/docs/docs/gatsby-link.md b/docs/docs/gatsby-link.md index 33a479b629d79..0f53e8cf4c846 100644 --- a/docs/docs/gatsby-link.md +++ b/docs/docs/gatsby-link.md @@ -93,10 +93,41 @@ render () { } ``` -You can also pass state to pages when you navigate e.g. `navigate("/a-path/", { state: { pleasant: "reasonably" }}` - Note that `navigate` was previously named `navigateTo`. `navigateTo` is deprecated in Gatsby v2. +## Passing state through Link and Navigate + +You can pass state to pages when you navigate, such as: + +```javascript +navigate(`/a-path/`, { state: { pleasant: `reasonably` }} +``` + +You can also pass state to pages when you use `Link`: + +```jsx + +``` + +This is accessible from the `location` object on the new page: + +```javascript +componentDidMount() { + const pleasant = this.props.location.state.pleasant + this.setState({ + pleasant: pleasant + }) +} +``` + ## Prefixed paths helper It is common to host sites in a sub-directory of a site. Gatsby lets you [set From 90ed6491791471c91b8ec25fe4910594369a00c8 Mon Sep 17 00:00:00 2001 From: greg lobinski <32480082+greglobinski@users.noreply.github.com> Date: Wed, 28 Nov 2018 14:21:50 +0100 Subject: [PATCH 419/462] fix(www): fix newsletter form style on blog post pages (#10180) Revert unintentional braking changes to style of the Newsletter form on Blog post pages applied during implementation of the same form presented on redesigned Hompage Newsletter section. - broken style ![screenshot from 2018-11-28 13-54-21](https://user-images.githubusercontent.com/32480082/49153447-0b58d000-f316-11e8-9e75-213f74830768.png) - fixed style (with this PR), the form looks the same as before refactoring of `www/src/components/email-capture-form.js` ![screenshot from 2018-11-28 13-53-55](https://user-images.githubusercontent.com/32480082/49153446-0ac03980-f316-11e8-929b-40e800ced254.png) --- www/src/components/email-capture-form.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/src/components/email-capture-form.js b/www/src/components/email-capture-form.js index b8797074999a2..39492fdd6c249 100644 --- a/www/src/components/email-capture-form.js +++ b/www/src/components/email-capture-form.js @@ -13,7 +13,7 @@ const StyledForm = styled(`form`)` margin: 0; ${presets.Desktop} { - display: flex; + display: ${props => (props.isHomepage ? `flex` : `block`)}; } ` @@ -166,7 +166,7 @@ class Form extends React.Component { : SingleLineInput return ( - + {!isHomepage && (
    + } else { + return this.props.children(this.state) + } } } diff --git a/packages/gatsby/cache-dir/production-app.js b/packages/gatsby/cache-dir/production-app.js index a3d51f0579a20..89acd652c2dd8 100644 --- a/packages/gatsby/cache-dir/production-app.js +++ b/packages/gatsby/cache-dir/production-app.js @@ -11,7 +11,6 @@ import { RouteUpdates, } from "./navigation" import emitter from "./emitter" -window.___emitter = emitter import PageRenderer from "./page-renderer" import asyncRequires from "./async-requires" import loader, { setApiRunnerForLoader } from "./loader" From ad86cc8bb70ab67b7b9ce32ab2c3536cbe14f52b Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Wed, 28 Nov 2018 23:55:02 +0100 Subject: [PATCH 422/462] chore(release): Publish - gatsby@2.0.57 --- packages/gatsby/CHANGELOG.md | 8 ++++++++ packages/gatsby/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 59cd0fb8f80fb..33fe4fc1fad09 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.57](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.56...gatsby@2.0.57) (2018-11-28) + +### Bug Fixes + +- **gatsby:** fix infinite reloads when resources fail ([#10141](https://github.com/gatsbyjs/gatsby/issues/10141)) ([9fc25f3](https://github.com/gatsbyjs/gatsby/commit/9fc25f3)), closes [#10074](https://github.com/gatsbyjs/gatsby/issues/10074) + ## [2.0.56](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.55...gatsby@2.0.56) (2018-11-27) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 204f82960ebae..06049cf604359 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.56", + "version": "2.0.57", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From 140679ce39116d733e79d5a67dbbc1f1e47e3679 Mon Sep 17 00:00:00 2001 From: Michael Uloth Date: Wed, 28 Nov 2018 18:03:09 -0500 Subject: [PATCH 423/462] feat(showcase): add www.gatsbytutorials.com and www.upandrunningtutorials.com (#10189) Add two educational sites to showcase. --- docs/sites.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index 8bc2de28fa682..c16e86c687585 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3587,3 +3587,27 @@ - Freelance built_by: Jacob D. Castro built_by_url: https://twitter.com/jacobdcastro +- title: Gatsby Tutorials + main_url: https://www.gatsbytutorials.com + url: https://www.gatsbytutorials.com + source_url: https://github.com/ooloth/gatsby-tutorials + featured: false + description: > + Gatsby Tutorials is a community-updated list of video, audio and written tutorials to help you learn GatsbyJS. + categories: + - Web Development + - Education + - Open Source + built_by: Michael Uloth + built_by_url: "https://www.michaeluloth.com" +- title: Up & Running Tutorials + main_url: https://www.upandrunningtutorials.com + url: https://www.upandrunningtutorials.com + featured: false + description: > + Free coding tutorials for web developers. Get your web development career up and running by learning to build better, faster websites. + categories: + - Web Development + - Education + built_by: Michael Uloth + built_by_url: "https://www.michaeluloth.com" From 0c31478d67dddc381e769a72d77d07cc3620c656 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Thu, 29 Nov 2018 00:24:50 +0100 Subject: [PATCH 424/462] chore(www): bump gatsby version (#10192) to pull changes added in https://github.com/gatsbyjs/gatsby/pull/10141 --- www/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/package.json b/www/package.json index c3c5d18989f81..5b26496fa9c9a 100644 --- a/www/package.json +++ b/www/package.json @@ -11,7 +11,7 @@ "emotion": "^9.2.12", "emotion-server": "^9.2.12", "fuse.js": "^3.2.0", - "gatsby": "^2.0.53", + "gatsby": "^2.0.57", "gatsby-image": "^2.0.5", "gatsby-plugin-canonical-urls": "^2.0.5", "gatsby-plugin-catch-links": "^2.0.2", From b7d4656f9cffbcfbdfad5466242c407b64d66be0 Mon Sep 17 00:00:00 2001 From: Sparsh Date: Thu, 29 Nov 2018 05:27:55 +0530 Subject: [PATCH 425/462] fix(gatsby-transformer-remark): properly bubble up errors thrown in subplugins (#9972) This allow `gatsby-remark-*` subplugins to not have special error handling - `gatsby` will properly panic on build, but dev server won't crash anymore --- .../src/extend-node-type.js | 175 +++++++++--------- 1 file changed, 87 insertions(+), 88 deletions(-) diff --git a/packages/gatsby-transformer-remark/src/extend-node-type.js b/packages/gatsby-transformer-remark/src/extend-node-type.js index fd7ac66e8ecfd..221173c21790f 100644 --- a/packages/gatsby-transformer-remark/src/extend-node-type.js +++ b/packages/gatsby-transformer-remark/src/extend-node-type.js @@ -128,7 +128,7 @@ module.exports = ( ASTPromiseMap.delete(cacheKey) }).catch(err => { ASTPromiseMap.delete(cacheKey) - throw err + return err }) // Save new AST to cache and return // We can now release promise, as we cached result @@ -137,99 +137,98 @@ module.exports = ( } } - function getMarkdownAST(markdownNode) { - return new Promise(async (resolve, reject) => { - if (process.env.NODE_ENV !== `production` || !fileNodes) { - fileNodes = getNodesByType(`File`) + async function getMarkdownAST(markdownNode) { + if (process.env.NODE_ENV !== `production` || !fileNodes) { + fileNodes = getNodesByType(`File`) + } + // Use Bluebird's Promise function "each" to run remark plugins serially. + await Promise.each(pluginOptions.plugins, plugin => { + const requiredPlugin = require(plugin.resolve) + if (_.isFunction(requiredPlugin.mutateSource)) { + return requiredPlugin.mutateSource( + { + markdownNode, + files: fileNodes, + getNode, + reporter, + cache, + }, + plugin.pluginOptions + ) + } else { + return Promise.resolve() } - // Use Bluebird's Promise function "each" to run remark plugins serially. - await Promise.each(pluginOptions.plugins, plugin => { - const requiredPlugin = require(plugin.resolve) - if (_.isFunction(requiredPlugin.mutateSource)) { - return requiredPlugin.mutateSource( - { - markdownNode, - files: fileNodes, - getNode, - reporter, - cache, - }, - plugin.pluginOptions - ) - } else { - return Promise.resolve() + }) + const markdownAST = remark.parse(markdownNode.internal.content) + + if (pathPrefix) { + // Ensure relative links include `pathPrefix` + visit(markdownAST, [`link`, `definition`], node => { + if ( + node.url && + node.url.startsWith(`/`) && + !node.url.startsWith(`//`) + ) { + node.url = withPathPrefix(node.url, pathPrefix) } }) - const markdownAST = remark.parse(markdownNode.internal.content) - - if (pathPrefix) { - // Ensure relative links include `pathPrefix` - visit(markdownAST, [`link`, `definition`], node => { - if ( - node.url && - node.url.startsWith(`/`) && - !node.url.startsWith(`//`) - ) { - node.url = withPathPrefix(node.url, pathPrefix) - } - }) - } + } - // source => parse (can order parsing for dependencies) => typegen - // - // source plugins identify nodes, provide id, initial parse, know - // when nodes are created/removed/deleted - // get passed cached DataTree and return list of clean and dirty nodes. - // Also get passed `dirtyNodes` function which they can call with an array - // of node ids which will then get re-parsed and the inferred schema - // recreated (if inferring schema gets too expensive, can also - // cache the schema until a query fails at which point recreate the - // schema). - // - // parse plugins take data from source nodes and extend it, never mutate - // it. Freeze all nodes once done so typegen plugins can't change it - // this lets us save off the DataTree at that point as well as create - // indexes. - // - // typegen plugins identify further types of data that should be lazily - // computed due to their expense, or are hard to infer graphql type - // (markdown ast), or are need user input in order to derive e.g. - // markdown headers or date fields. - // - // wrap all resolve functions to (a) auto-memoize and (b) cache to disk any - // resolve function that takes longer than ~10ms (do research on this - // e.g. how long reading/writing to cache takes), and (c) track which - // queries are based on which source nodes. Also if connection of what - // which are always rerun if their underlying nodes change.. - // - // every node type in DataTree gets a schema type automatically. - // typegen plugins just modify the auto-generated types to add derived fields - // as well as computationally expensive fields. - if (process.env.NODE_ENV !== `production` || !fileNodes) { - fileNodes = getNodesByType(`File`) + // source => parse (can order parsing for dependencies) => typegen + // + // source plugins identify nodes, provide id, initial parse, know + // when nodes are created/removed/deleted + // get passed cached DataTree and return list of clean and dirty nodes. + // Also get passed `dirtyNodes` function which they can call with an array + // of node ids which will then get re-parsed and the inferred schema + // recreated (if inferring schema gets too expensive, can also + // cache the schema until a query fails at which point recreate the + // schema). + // + // parse plugins take data from source nodes and extend it, never mutate + // it. Freeze all nodes once done so typegen plugins can't change it + // this lets us save off the DataTree at that point as well as create + // indexes. + // + // typegen plugins identify further types of data that should be lazily + // computed due to their expense, or are hard to infer graphql type + // (markdown ast), or are need user input in order to derive e.g. + // markdown headers or date fields. + // + // wrap all resolve functions to (a) auto-memoize and (b) cache to disk any + // resolve function that takes longer than ~10ms (do research on this + // e.g. how long reading/writing to cache takes), and (c) track which + // queries are based on which source nodes. Also if connection of what + // which are always rerun if their underlying nodes change.. + // + // every node type in DataTree gets a schema type automatically. + // typegen plugins just modify the auto-generated types to add derived fields + // as well as computationally expensive fields. + if (process.env.NODE_ENV !== `production` || !fileNodes) { + fileNodes = getNodesByType(`File`) + } + // Use Bluebird's Promise function "each" to run remark plugins serially. + await Promise.each(pluginOptions.plugins, plugin => { + const requiredPlugin = require(plugin.resolve) + if (_.isFunction(requiredPlugin)) { + return requiredPlugin( + { + markdownAST, + markdownNode, + getNode, + files: fileNodes, + pathPrefix, + reporter, + cache, + }, + plugin.pluginOptions + ) + } else { + return Promise.resolve() } - // Use Bluebird's Promise function "each" to run remark plugins serially. - await Promise.each(pluginOptions.plugins, plugin => { - const requiredPlugin = require(plugin.resolve) - if (_.isFunction(requiredPlugin)) { - return requiredPlugin( - { - markdownAST, - markdownNode, - getNode, - files: fileNodes, - pathPrefix, - reporter, - cache, - }, - plugin.pluginOptions - ) - } else { - return Promise.resolve() - } - }) - resolve(markdownAST) }) + + return markdownAST } async function getHeadings(markdownNode) { From 49100e922c6e969b32fd4cba3fede449684e49ed Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Thu, 29 Nov 2018 01:14:44 +0100 Subject: [PATCH 426/462] fix(gatsby-plugin-netlify-cms): dynamically import netlify-identity-widget (#9565) --- .../__tests__/index.js | 12 +++++++ packages/babel-preset-gatsby-package/index.js | 1 + .../babel-preset-gatsby-package/package.json | 1 + .../src/gatsby-browser.js | 31 ++++++++++++++----- 4 files changed, 37 insertions(+), 8 deletions(-) diff --git a/packages/babel-preset-gatsby-package/__tests__/index.js b/packages/babel-preset-gatsby-package/__tests__/index.js index 85383b585352a..e16070b720152 100644 --- a/packages/babel-preset-gatsby-package/__tests__/index.js +++ b/packages/babel-preset-gatsby-package/__tests__/index.js @@ -32,6 +32,9 @@ it(`Specifies proper presets and plugins in Node mode`, () => { path.join(`@babel`, `plugin-proposal-optional-chaining`) ), expect.stringContaining(path.join(`@babel`, `plugin-transform-runtime`)), + expect.stringContaining( + path.join(`@babel`, `plugin-syntax-dynamic-import`) + ), ]) }) @@ -66,6 +69,9 @@ it(`Specifies proper presets and plugins in debug Node mode`, () => { path.join(`@babel`, `plugin-proposal-optional-chaining`) ), expect.stringContaining(path.join(`@babel`, `plugin-transform-runtime`)), + expect.stringContaining( + path.join(`@babel`, `plugin-syntax-dynamic-import`) + ), ]) }) @@ -100,6 +106,9 @@ it(`Specifies proper presets and plugins in browser mode`, () => { path.join(`@babel`, `plugin-proposal-optional-chaining`) ), expect.stringContaining(path.join(`@babel`, `plugin-transform-runtime`)), + expect.stringContaining( + path.join(`@babel`, `plugin-syntax-dynamic-import`) + ), ]) }) @@ -134,5 +143,8 @@ it(`Specifies proper presets and plugins in debug browser mode`, () => { path.join(`@babel`, `plugin-proposal-optional-chaining`) ), expect.stringContaining(path.join(`@babel`, `plugin-transform-runtime`)), + expect.stringContaining( + path.join(`@babel`, `plugin-syntax-dynamic-import`) + ), ]) }) diff --git a/packages/babel-preset-gatsby-package/index.js b/packages/babel-preset-gatsby-package/index.js index e99090ca18cf5..c4c27f282d0a2 100644 --- a/packages/babel-preset-gatsby-package/index.js +++ b/packages/babel-preset-gatsby-package/index.js @@ -43,6 +43,7 @@ function preset(context, options = {}) { r(`@babel/plugin-proposal-class-properties`), r(`@babel/plugin-proposal-optional-chaining`), r(`@babel/plugin-transform-runtime`), + r(`@babel/plugin-syntax-dynamic-import`), ], } } diff --git a/packages/babel-preset-gatsby-package/package.json b/packages/babel-preset-gatsby-package/package.json index 4568973fe64e2..393196df1f09d 100644 --- a/packages/babel-preset-gatsby-package/package.json +++ b/packages/babel-preset-gatsby-package/package.json @@ -5,6 +5,7 @@ "dependencies": { "@babel/plugin-proposal-class-properties": "^7.0.0", "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", "@babel/plugin-transform-runtime": "^7.0.0", "@babel/preset-env": "^7.0.0", "@babel/preset-flow": "^7.0.0", diff --git a/packages/gatsby-plugin-netlify-cms/src/gatsby-browser.js b/packages/gatsby-plugin-netlify-cms/src/gatsby-browser.js index 238515dcaca43..28e8e3ed1c96c 100644 --- a/packages/gatsby-plugin-netlify-cms/src/gatsby-browser.js +++ b/packages/gatsby-plugin-netlify-cms/src/gatsby-browser.js @@ -1,18 +1,33 @@ /* global __PATH_PREFIX__ */ -import netlifyIdentityWidget from "netlify-identity-widget" + +// Taken from https://github.com/netlify/netlify-identity-widget +const routes = /(confirmation|invite|recovery|email_change)_token=([^&]+)/ +const errorRoute = /error=access_denied&error_description=403/ +const accessTokenRoute = /access_token=/ exports.onInitialClientRender = ( _, { enableIdentityWidget = true, publicPath = `admin` } ) => { - if (enableIdentityWidget) { - netlifyIdentityWidget.on(`init`, user => { - if (!user) { - netlifyIdentityWidget.on(`login`, () => { - document.location.href = `${__PATH_PREFIX__}/${publicPath}/` + const hash = (document.location.hash || ``).replace(/^#\/?/, ``) + + if ( + enableIdentityWidget && + (hash.match(routes) || + hash.match(errorRoute) || + hash.match(accessTokenRoute)) + ) { + import(`netlify-identity-widget`).then( + ({ default: netlifyIdentityWidget }) => { + netlifyIdentityWidget.on(`init`, user => { + if (!user) { + netlifyIdentityWidget.on(`login`, () => { + document.location.href = `${__PATH_PREFIX__}/${publicPath}/` + }) + } }) + netlifyIdentityWidget.init() } - }) - netlifyIdentityWidget.init() + ) } } From 28ac8895f21065a53e0abfe45b2623d04f0517cb Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Thu, 29 Nov 2018 12:37:04 +0100 Subject: [PATCH 427/462] chore(gatsby-transformer-remark): update gitignore (#10199) --- packages/gatsby-transformer-remark/.gitignore | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/gatsby-transformer-remark/.gitignore b/packages/gatsby-transformer-remark/.gitignore index bd9dc129f8b7c..08ddb94941023 100644 --- a/packages/gatsby-transformer-remark/.gitignore +++ b/packages/gatsby-transformer-remark/.gitignore @@ -1,3 +1,2 @@ -/gatsby-node.js -/extend-node-type.js -/on-node-create.js +/*.js +!index.js From a3e548956009fecbcbd5e55f11e7803cbf5253d0 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Thu, 29 Nov 2018 13:11:22 +0100 Subject: [PATCH 428/462] chore(release): Publish - babel-plugin-remove-graphql-queries@2.5.2 - babel-preset-gatsby-package@0.1.3 - babel-preset-gatsby@0.1.5 - gatsby-cli@2.4.6 - gatsby-codemods@1.0.8 - gatsby-dev-cli@2.4.8 - gatsby-image@2.0.22 - gatsby-link@2.0.7 - gatsby-plugin-canonical-urls@2.0.8 - gatsby-plugin-catch-links@2.0.9 - gatsby-plugin-coffeescript@2.0.7 - gatsby-plugin-create-client-paths@2.0.3 - gatsby-plugin-cxs@2.0.3 - gatsby-plugin-emotion@2.0.7 - gatsby-plugin-facebook-analytics@2.0.2 - gatsby-plugin-feed@2.0.10 - gatsby-plugin-fullstory@2.0.2 - gatsby-plugin-glamor@2.0.7 - gatsby-plugin-google-analytics@2.0.8 - gatsby-plugin-google-gtag@1.0.8 - gatsby-plugin-google-tagmanager@2.0.7 - gatsby-plugin-guess-js@1.0.3 - gatsby-plugin-jss@2.0.5 - gatsby-plugin-layout@1.0.10 - gatsby-plugin-less@2.0.8 - gatsby-plugin-lodash@3.0.3 - gatsby-plugin-manifest@2.0.11 - gatsby-plugin-netlify-cms@3.0.9 - gatsby-plugin-netlify@2.0.6 - gatsby-plugin-nprogress@2.0.7 - gatsby-plugin-offline@2.0.18 - gatsby-plugin-page-creator@2.0.5 - gatsby-plugin-postcss@2.0.2 - gatsby-plugin-preact@2.0.8 - gatsby-plugin-react-css-modules@2.0.4 - gatsby-plugin-react-helmet@3.0.3 - gatsby-plugin-remove-trailing-slashes@2.0.6 - gatsby-plugin-sass@2.0.5 - gatsby-plugin-sharp@2.0.14 - gatsby-plugin-sitemap@2.0.3 - gatsby-plugin-styled-components@3.0.4 - gatsby-plugin-styled-jsx@3.0.3 - gatsby-plugin-styletron@3.0.3 - gatsby-plugin-stylus@2.0.3 - gatsby-plugin-subfont@1.0.3 - gatsby-plugin-twitter@2.0.8 - gatsby-plugin-typescript@2.0.2 - gatsby-plugin-typography@2.2.2 - gatsby-react-router-scroll@2.0.2 - gatsby-remark-autolink-headers@2.0.12 - gatsby-remark-code-repls@2.0.2 - gatsby-remark-copy-linked-files@2.0.7 - gatsby-remark-custom-blocks@2.0.2 - gatsby-remark-embed-snippet@3.1.1 - gatsby-remark-graphviz@1.0.4 - gatsby-remark-images@3.0.1 - gatsby-remark-katex@3.0.1 - gatsby-remark-prismjs@3.1.1 - gatsby-remark-responsive-iframe@2.0.7 - gatsby-remark-smartypants@2.0.7 - gatsby-source-contentful@2.0.16 - gatsby-source-drupal@3.0.12 - gatsby-source-faker@2.0.3 - gatsby-source-filesystem@2.0.10 - gatsby-source-graphql@2.0.7 - gatsby-source-hacker-news@2.0.7 - gatsby-source-lever@2.0.2 - gatsby-source-medium@2.0.2 - gatsby-source-mongodb@2.0.9 - gatsby-source-npm-package-search@2.0.2 - gatsby-source-wikipedia@2.0.3 - gatsby-source-wordpress@3.0.16 - gatsby-transformer-csv@2.0.5 - gatsby-transformer-documentationjs@2.0.2 - gatsby-transformer-excel@2.1.4 - gatsby-transformer-hjson@2.1.3 - gatsby-transformer-javascript-frontmatter@2.0.5 - gatsby-transformer-javascript-static-exports@2.1.4 - gatsby-transformer-json@2.1.6 - gatsby-transformer-pdf@1.0.15 - gatsby-transformer-react-docgen@2.1.3 - gatsby-transformer-remark@2.1.14 - gatsby-transformer-screenshot@2.0.9 - gatsby-transformer-sharp@2.1.9 - gatsby-transformer-sqip@2.0.9 - gatsby-transformer-toml@2.1.3 - gatsby-transformer-xml@2.0.5 - gatsby-transformer-yaml@2.1.6 - gatsby@2.0.58 - graphql-skip-limit@2.0.2 --- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- .../babel-preset-gatsby-package/CHANGELOG.md | 8 ++++++++ .../babel-preset-gatsby-package/package.json | 2 +- packages/babel-preset-gatsby/CHANGELOG.md | 6 ++++++ packages/babel-preset-gatsby/package.json | 4 ++-- packages/gatsby-cli/CHANGELOG.md | 6 ++++++ packages/gatsby-cli/package.json | 4 ++-- packages/gatsby-codemods/CHANGELOG.md | 6 ++++++ packages/gatsby-codemods/package.json | 4 ++-- packages/gatsby-dev-cli/CHANGELOG.md | 6 ++++++ packages/gatsby-dev-cli/package.json | 4 ++-- packages/gatsby-image/CHANGELOG.md | 6 ++++++ packages/gatsby-image/package.json | 4 ++-- packages/gatsby-link/CHANGELOG.md | 6 ++++++ packages/gatsby-link/package.json | 4 ++-- .../gatsby-plugin-canonical-urls/CHANGELOG.md | 6 ++++++ .../gatsby-plugin-canonical-urls/package.json | 4 ++-- .../gatsby-plugin-catch-links/CHANGELOG.md | 6 ++++++ .../gatsby-plugin-catch-links/package.json | 4 ++-- .../gatsby-plugin-coffeescript/CHANGELOG.md | 6 ++++++ .../gatsby-plugin-coffeescript/package.json | 4 ++-- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- packages/gatsby-plugin-cxs/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-cxs/package.json | 4 ++-- packages/gatsby-plugin-emotion/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-emotion/package.json | 4 ++-- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- packages/gatsby-plugin-feed/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-feed/package.json | 4 ++-- packages/gatsby-plugin-fullstory/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-fullstory/package.json | 4 ++-- packages/gatsby-plugin-glamor/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-glamor/package.json | 4 ++-- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- .../gatsby-plugin-google-gtag/CHANGELOG.md | 6 ++++++ .../gatsby-plugin-google-gtag/package.json | 4 ++-- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- packages/gatsby-plugin-guess-js/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-guess-js/package.json | 4 ++-- packages/gatsby-plugin-jss/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-jss/package.json | 4 ++-- packages/gatsby-plugin-layout/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-layout/package.json | 4 ++-- packages/gatsby-plugin-less/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-less/package.json | 4 ++-- packages/gatsby-plugin-lodash/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-lodash/package.json | 4 ++-- packages/gatsby-plugin-manifest/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-manifest/package.json | 4 ++-- .../gatsby-plugin-netlify-cms/CHANGELOG.md | 8 ++++++++ .../gatsby-plugin-netlify-cms/package.json | 4 ++-- packages/gatsby-plugin-netlify/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-netlify/package.json | 4 ++-- packages/gatsby-plugin-nprogress/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-nprogress/package.json | 4 ++-- packages/gatsby-plugin-offline/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-offline/package.json | 4 ++-- .../gatsby-plugin-page-creator/CHANGELOG.md | 6 ++++++ .../gatsby-plugin-page-creator/package.json | 4 ++-- packages/gatsby-plugin-postcss/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-postcss/package.json | 4 ++-- packages/gatsby-plugin-preact/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-preact/package.json | 4 ++-- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- .../gatsby-plugin-react-helmet/CHANGELOG.md | 6 ++++++ .../gatsby-plugin-react-helmet/package.json | 4 ++-- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- packages/gatsby-plugin-sass/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-sass/package.json | 4 ++-- packages/gatsby-plugin-sharp/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-sharp/package.json | 4 ++-- packages/gatsby-plugin-sitemap/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-sitemap/package.json | 4 ++-- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- packages/gatsby-plugin-styled-jsx/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-styled-jsx/package.json | 4 ++-- packages/gatsby-plugin-styletron/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-styletron/package.json | 4 ++-- packages/gatsby-plugin-stylus/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-stylus/package.json | 4 ++-- packages/gatsby-plugin-subfont/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-subfont/package.json | 4 ++-- packages/gatsby-plugin-twitter/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-twitter/package.json | 4 ++-- packages/gatsby-plugin-typescript/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-typescript/package.json | 6 +++--- packages/gatsby-plugin-typography/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-typography/package.json | 4 ++-- .../gatsby-react-router-scroll/CHANGELOG.md | 6 ++++++ .../gatsby-react-router-scroll/package.json | 4 ++-- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- packages/gatsby-remark-code-repls/CHANGELOG.md | 6 ++++++ packages/gatsby-remark-code-repls/package.json | 4 ++-- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- .../gatsby-remark-custom-blocks/CHANGELOG.md | 6 ++++++ .../gatsby-remark-custom-blocks/package.json | 4 ++-- .../gatsby-remark-embed-snippet/CHANGELOG.md | 6 ++++++ .../gatsby-remark-embed-snippet/package.json | 4 ++-- packages/gatsby-remark-graphviz/CHANGELOG.md | 6 ++++++ packages/gatsby-remark-graphviz/package.json | 4 ++-- packages/gatsby-remark-images/CHANGELOG.md | 6 ++++++ packages/gatsby-remark-images/package.json | 4 ++-- packages/gatsby-remark-katex/CHANGELOG.md | 6 ++++++ packages/gatsby-remark-katex/package.json | 4 ++-- packages/gatsby-remark-prismjs/CHANGELOG.md | 6 ++++++ packages/gatsby-remark-prismjs/package.json | 4 ++-- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- .../gatsby-remark-smartypants/CHANGELOG.md | 6 ++++++ .../gatsby-remark-smartypants/package.json | 4 ++-- packages/gatsby-source-contentful/CHANGELOG.md | 6 ++++++ packages/gatsby-source-contentful/package.json | 6 +++--- packages/gatsby-source-drupal/CHANGELOG.md | 6 ++++++ packages/gatsby-source-drupal/package.json | 6 +++--- packages/gatsby-source-faker/CHANGELOG.md | 6 ++++++ packages/gatsby-source-faker/package.json | 4 ++-- packages/gatsby-source-filesystem/CHANGELOG.md | 6 ++++++ packages/gatsby-source-filesystem/package.json | 4 ++-- packages/gatsby-source-graphql/CHANGELOG.md | 6 ++++++ packages/gatsby-source-graphql/package.json | 4 ++-- .../gatsby-source-hacker-news/CHANGELOG.md | 6 ++++++ .../gatsby-source-hacker-news/package.json | 4 ++-- packages/gatsby-source-lever/CHANGELOG.md | 6 ++++++ packages/gatsby-source-lever/package.json | 4 ++-- packages/gatsby-source-medium/CHANGELOG.md | 6 ++++++ packages/gatsby-source-medium/package.json | 4 ++-- packages/gatsby-source-mongodb/CHANGELOG.md | 6 ++++++ packages/gatsby-source-mongodb/package.json | 4 ++-- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- packages/gatsby-source-wikipedia/CHANGELOG.md | 6 ++++++ packages/gatsby-source-wikipedia/package.json | 4 ++-- packages/gatsby-source-wordpress/CHANGELOG.md | 6 ++++++ packages/gatsby-source-wordpress/package.json | 6 +++--- packages/gatsby-transformer-csv/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-csv/package.json | 4 ++-- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- packages/gatsby-transformer-excel/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-excel/package.json | 4 ++-- packages/gatsby-transformer-hjson/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-hjson/package.json | 4 ++-- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- packages/gatsby-transformer-json/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-json/package.json | 4 ++-- packages/gatsby-transformer-pdf/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-pdf/package.json | 4 ++-- .../CHANGELOG.md | 6 ++++++ .../package.json | 4 ++-- .../gatsby-transformer-remark/CHANGELOG.md | 8 ++++++++ .../gatsby-transformer-remark/package.json | 4 ++-- .../gatsby-transformer-screenshot/CHANGELOG.md | 6 ++++++ .../gatsby-transformer-screenshot/package.json | 4 ++-- packages/gatsby-transformer-sharp/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-sharp/package.json | 4 ++-- packages/gatsby-transformer-sqip/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-sqip/package.json | 6 +++--- packages/gatsby-transformer-toml/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-toml/package.json | 4 ++-- packages/gatsby-transformer-xml/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-xml/package.json | 4 ++-- packages/gatsby-transformer-yaml/CHANGELOG.md | 6 ++++++ packages/gatsby-transformer-yaml/package.json | 4 ++-- packages/gatsby/CHANGELOG.md | 6 ++++++ packages/gatsby/package.json | 18 +++++++++--------- packages/graphql-skip-limit/CHANGELOG.md | 6 ++++++ packages/graphql-skip-limit/package.json | 4 ++-- 180 files changed, 737 insertions(+), 191 deletions(-) diff --git a/packages/babel-plugin-remove-graphql-queries/CHANGELOG.md b/packages/babel-plugin-remove-graphql-queries/CHANGELOG.md index 2c4ce1f43c73d..e87131d653719 100644 --- a/packages/babel-plugin-remove-graphql-queries/CHANGELOG.md +++ b/packages/babel-plugin-remove-graphql-queries/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.5.2](https://github.com/gatsbyjs/gatsby/compare/babel-plugin-remove-graphql-queries@2.5.1...babel-plugin-remove-graphql-queries@2.5.2) (2018-11-29) + +**Note:** Version bump only for package babel-plugin-remove-graphql-queries + ## [2.5.1](https://github.com/gatsbyjs/gatsby/compare/babel-plugin-remove-graphql-queries@2.5.0...babel-plugin-remove-graphql-queries@2.5.1) (2018-10-29) diff --git a/packages/babel-plugin-remove-graphql-queries/package.json b/packages/babel-plugin-remove-graphql-queries/package.json index 64a20393dcc9a..b844c73e39dd5 100644 --- a/packages/babel-plugin-remove-graphql-queries/package.json +++ b/packages/babel-plugin-remove-graphql-queries/package.json @@ -1,11 +1,11 @@ { "name": "babel-plugin-remove-graphql-queries", - "version": "2.5.1", + "version": "2.5.2", "author": "Jason Quense ", "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2" + "babel-preset-gatsby-package": "^0.1.3" }, "license": "MIT", "main": "index.js", diff --git a/packages/babel-preset-gatsby-package/CHANGELOG.md b/packages/babel-preset-gatsby-package/CHANGELOG.md index b2bc948c5c820..81e3f71280bac 100644 --- a/packages/babel-preset-gatsby-package/CHANGELOG.md +++ b/packages/babel-preset-gatsby-package/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [0.1.3](https://github.com/gatsbyjs/gatsby/compare/babel-preset-gatsby-package@0.1.2...babel-preset-gatsby-package@0.1.3) (2018-11-29) + +### Bug Fixes + +- **gatsby-plugin-netlify-cms:** dynamically import netlify-identity-widget ([#9565](https://github.com/gatsbyjs/gatsby/issues/9565)) ([49100e9](https://github.com/gatsbyjs/gatsby/commit/49100e9)) + ## [0.1.2](https://github.com/gatsbyjs/gatsby/compare/babel-preset-gatsby-package@0.1.1...babel-preset-gatsby-package@0.1.2) (2018-10-29) diff --git a/packages/babel-preset-gatsby-package/package.json b/packages/babel-preset-gatsby-package/package.json index 393196df1f09d..4be1b972dced0 100644 --- a/packages/babel-preset-gatsby-package/package.json +++ b/packages/babel-preset-gatsby-package/package.json @@ -1,6 +1,6 @@ { "name": "babel-preset-gatsby-package", - "version": "0.1.2", + "version": "0.1.3", "author": "Philipp Spiess ", "dependencies": { "@babel/plugin-proposal-class-properties": "^7.0.0", diff --git a/packages/babel-preset-gatsby/CHANGELOG.md b/packages/babel-preset-gatsby/CHANGELOG.md index 44e88fdf2b9df..d4e805d46f225 100644 --- a/packages/babel-preset-gatsby/CHANGELOG.md +++ b/packages/babel-preset-gatsby/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [0.1.5](https://github.com/gatsbyjs/gatsby/compare/babel-preset-gatsby@0.1.4...babel-preset-gatsby@0.1.5) (2018-11-29) + +**Note:** Version bump only for package babel-preset-gatsby + ## [0.1.4](https://github.com/gatsbyjs/gatsby/compare/babel-preset-gatsby@0.1.3...babel-preset-gatsby@0.1.4) (2018-11-15) diff --git a/packages/babel-preset-gatsby/package.json b/packages/babel-preset-gatsby/package.json index b34558f8fc231..4d8c5f737d022 100644 --- a/packages/babel-preset-gatsby/package.json +++ b/packages/babel-preset-gatsby/package.json @@ -1,6 +1,6 @@ { "name": "babel-preset-gatsby", - "version": "0.1.4", + "version": "0.1.5", "author": "Philipp Spiess ", "dependencies": { "@babel/plugin-proposal-class-properties": "^7.0.0", @@ -18,6 +18,6 @@ "watch": "babel -w src --out-dir . --ignore **/__tests__" }, "devDependencies": { - "babel-preset-gatsby-package": "^0.1.2" + "babel-preset-gatsby-package": "^0.1.3" } } diff --git a/packages/gatsby-cli/CHANGELOG.md b/packages/gatsby-cli/CHANGELOG.md index 13162eff1d2ea..d32bc83955545 100644 --- a/packages/gatsby-cli/CHANGELOG.md +++ b/packages/gatsby-cli/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.4.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-cli/compare/gatsby-cli@2.4.5...gatsby-cli@2.4.6) (2018-11-29) + +**Note:** Version bump only for package gatsby-cli + ## [2.4.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-cli/compare/gatsby-cli@2.4.4...gatsby-cli@2.4.5) (2018-11-08) diff --git a/packages/gatsby-cli/package.json b/packages/gatsby-cli/package.json index f955444270293..b211a36303769 100644 --- a/packages/gatsby-cli/package.json +++ b/packages/gatsby-cli/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-cli", "description": "Gatsby command-line interface for creating new sites and running Gatsby commands", - "version": "2.4.5", + "version": "2.4.6", "author": "Kyle Mathews ", "bin": { "gatsby": "lib/index.js" @@ -34,7 +34,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "files": [ diff --git a/packages/gatsby-codemods/CHANGELOG.md b/packages/gatsby-codemods/CHANGELOG.md index 296e4580db86b..7601a138b62d5 100644 --- a/packages/gatsby-codemods/CHANGELOG.md +++ b/packages/gatsby-codemods/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [1.0.8](https://github.com/gatsbyjs/gatsby/compare/gatsby-codemods@1.0.7...gatsby-codemods@1.0.8) (2018-11-29) + +**Note:** Version bump only for package gatsby-codemods + ## [1.0.7](https://github.com/gatsbyjs/gatsby/compare/gatsby-codemods@1.0.6...gatsby-codemods@1.0.7) (2018-11-08) diff --git a/packages/gatsby-codemods/package.json b/packages/gatsby-codemods/package.json index e37a911ca9b5d..30c2a6baaeed7 100644 --- a/packages/gatsby-codemods/package.json +++ b/packages/gatsby-codemods/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-codemods", - "version": "1.0.7", + "version": "1.0.8", "description": "A collection of codemod scripts for use with JSCodeshift that help migrate to newer versions of Gatsby.", "main": "index.js", "scripts": { @@ -28,7 +28,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.0.5", "jscodeshift": "^0.5.1" }, diff --git a/packages/gatsby-dev-cli/CHANGELOG.md b/packages/gatsby-dev-cli/CHANGELOG.md index aa49b3f7d4059..e32e046c0e9ed 100644 --- a/packages/gatsby-dev-cli/CHANGELOG.md +++ b/packages/gatsby-dev-cli/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.4.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-dev-cli/compare/gatsby-dev-cli@2.4.7...gatsby-dev-cli@2.4.8) (2018-11-29) + +**Note:** Version bump only for package gatsby-dev-cli + ## [2.4.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-dev-cli/compare/gatsby-dev-cli@2.4.6...gatsby-dev-cli@2.4.7) (2018-11-08) diff --git a/packages/gatsby-dev-cli/package.json b/packages/gatsby-dev-cli/package.json index 63cdad2de7039..d2b7081e1de32 100644 --- a/packages/gatsby-dev-cli/package.json +++ b/packages/gatsby-dev-cli/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-dev-cli", "description": "CLI helpers for contributors working on Gatsby", - "version": "2.4.7", + "version": "2.4.8", "author": "Kyle Mathews ", "bin": { "gatsby-dev": "./dist/index.js" @@ -21,7 +21,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.0.5" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-dev-cli#readme", diff --git a/packages/gatsby-image/CHANGELOG.md b/packages/gatsby-image/CHANGELOG.md index 35e3ccb5779ab..78bc97175ad02 100644 --- a/packages/gatsby-image/CHANGELOG.md +++ b/packages/gatsby-image/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.22](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-image/compare/gatsby-image@2.0.21...gatsby-image@2.0.22) (2018-11-29) + +**Note:** Version bump only for package gatsby-image + ## [2.0.21](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-image/compare/gatsby-image@2.0.20...gatsby-image@2.0.21) (2018-11-27) diff --git a/packages/gatsby-image/package.json b/packages/gatsby-image/package.json index 7eb651b030eb0..1058f9bd095b8 100644 --- a/packages/gatsby-image/package.json +++ b/packages/gatsby-image/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-image", "description": "Lazy-loading React image component with optional support for the blur-up effect.", - "version": "2.0.21", + "version": "2.0.22", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -13,7 +13,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4", "react-testing-library": "^5.0.0" }, diff --git a/packages/gatsby-link/CHANGELOG.md b/packages/gatsby-link/CHANGELOG.md index 7b48c48acd6ab..fde70c9633c9a 100644 --- a/packages/gatsby-link/CHANGELOG.md +++ b/packages/gatsby-link/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-link/compare/gatsby-link@2.0.6...gatsby-link@2.0.7) (2018-11-29) + +**Note:** Version bump only for package gatsby-link + ## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-link/compare/gatsby-link@2.0.5...gatsby-link@2.0.6) (2018-10-29) diff --git a/packages/gatsby-link/package.json b/packages/gatsby-link/package.json index 49c4c88c261fd..5f8d6aa2bec8d 100644 --- a/packages/gatsby-link/package.json +++ b/packages/gatsby-link/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-link", "description": "An enhanced Link component for Gatsby sites with support for resource prefetching", - "version": "2.0.6", + "version": "2.0.7", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -15,7 +15,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4", "react-testing-library": "^5.0.0" }, diff --git a/packages/gatsby-plugin-canonical-urls/CHANGELOG.md b/packages/gatsby-plugin-canonical-urls/CHANGELOG.md index d54a57ca4cd6b..7cae8999f8225 100644 --- a/packages/gatsby-plugin-canonical-urls/CHANGELOG.md +++ b/packages/gatsby-plugin-canonical-urls/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-canonical-urls/compare/gatsby-plugin-canonical-urls@2.0.7...gatsby-plugin-canonical-urls@2.0.8) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-canonical-urls + ## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-canonical-urls/compare/gatsby-plugin-canonical-urls@2.0.6...gatsby-plugin-canonical-urls@2.0.7) (2018-10-29) diff --git a/packages/gatsby-plugin-canonical-urls/package.json b/packages/gatsby-plugin-canonical-urls/package.json index 9bf153fa5d862..60dcd36e50aab 100644 --- a/packages/gatsby-plugin-canonical-urls/package.json +++ b/packages/gatsby-plugin-canonical-urls/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-canonical-urls", "description": "Add canonical links to HTML pages Gatsby generates.", - "version": "2.0.7", + "version": "2.0.8", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-canonical-urls#readme", diff --git a/packages/gatsby-plugin-catch-links/CHANGELOG.md b/packages/gatsby-plugin-catch-links/CHANGELOG.md index b25dc77da7352..bd721935bc7cd 100644 --- a/packages/gatsby-plugin-catch-links/CHANGELOG.md +++ b/packages/gatsby-plugin-catch-links/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.9](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/compare/gatsby-plugin-catch-links@2.0.8...gatsby-plugin-catch-links@2.0.9) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-catch-links + ## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links/compare/gatsby-plugin-catch-links@2.0.7...gatsby-plugin-catch-links@2.0.8) (2018-11-09) diff --git a/packages/gatsby-plugin-catch-links/package.json b/packages/gatsby-plugin-catch-links/package.json index ad932a455f56a..e05fd4d044d8a 100644 --- a/packages/gatsby-plugin-catch-links/package.json +++ b/packages/gatsby-plugin-catch-links/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-catch-links", "description": "Intercepts local links from markdown and other non-react pages and does a client-side pushState to avoid the browser having to refresh the page.", - "version": "2.0.8", + "version": "2.0.9", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -13,7 +13,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-catch-links#readme", diff --git a/packages/gatsby-plugin-coffeescript/CHANGELOG.md b/packages/gatsby-plugin-coffeescript/CHANGELOG.md index f9b28e4bbab60..56b280d91f795 100644 --- a/packages/gatsby-plugin-coffeescript/CHANGELOG.md +++ b/packages/gatsby-plugin-coffeescript/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-coffeescript/compare/gatsby-plugin-coffeescript@2.0.6...gatsby-plugin-coffeescript@2.0.7) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-coffeescript + ## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-coffeescript/compare/gatsby-plugin-coffeescript@2.0.5...gatsby-plugin-coffeescript@2.0.6) (2018-10-29) diff --git a/packages/gatsby-plugin-coffeescript/package.json b/packages/gatsby-plugin-coffeescript/package.json index fdad3496c152a..454a803b1fdd4 100644 --- a/packages/gatsby-plugin-coffeescript/package.json +++ b/packages/gatsby-plugin-coffeescript/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-coffeescript", "description": "Adds CoffeeScript support for Gatsby", - "version": "2.0.6", + "version": "2.0.7", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -18,7 +18,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-coffeescript#readme", diff --git a/packages/gatsby-plugin-create-client-paths/CHANGELOG.md b/packages/gatsby-plugin-create-client-paths/CHANGELOG.md index 5ba126fe2cf31..48c9527033347 100644 --- a/packages/gatsby-plugin-create-client-paths/CHANGELOG.md +++ b/packages/gatsby-plugin-create-client-paths/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-create-client-paths/compare/gatsby-plugin-create-client-paths@2.0.2...gatsby-plugin-create-client-paths@2.0.3) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-create-client-paths + ## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-create-client-paths/compare/gatsby-plugin-create-client-paths@2.0.1...gatsby-plugin-create-client-paths@2.0.2) (2018-10-29) diff --git a/packages/gatsby-plugin-create-client-paths/package.json b/packages/gatsby-plugin-create-client-paths/package.json index d34a156058a89..ca68a13f1ed74 100644 --- a/packages/gatsby-plugin-create-client-paths/package.json +++ b/packages/gatsby-plugin-create-client-paths/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-create-client-paths", "description": "Gatsby-plugin for creating paths that exist only on the client", - "version": "2.0.2", + "version": "2.0.3", "author": "scott.eckenthal@gmail.com", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-create-client-paths#readme", diff --git a/packages/gatsby-plugin-cxs/CHANGELOG.md b/packages/gatsby-plugin-cxs/CHANGELOG.md index 40d7ad8189f59..87a2e5d97b89c 100644 --- a/packages/gatsby-plugin-cxs/CHANGELOG.md +++ b/packages/gatsby-plugin-cxs/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-cxs/compare/gatsby-plugin-cxs@2.0.2...gatsby-plugin-cxs@2.0.3) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-cxs + ## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-cxs/compare/gatsby-plugin-cxs@2.0.1...gatsby-plugin-cxs@2.0.2) (2018-11-08) diff --git a/packages/gatsby-plugin-cxs/package.json b/packages/gatsby-plugin-cxs/package.json index dd1db8ebed19d..97f0b6b2a4b0b 100644 --- a/packages/gatsby-plugin-cxs/package.json +++ b/packages/gatsby-plugin-cxs/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-cxs", "description": "Gatsby plugin to add SSR support for ctx", - "version": "2.0.2", + "version": "2.0.3", "author": "Chen-Tai Hou ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2" + "babel-preset-gatsby-package": "^0.1.3" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-cxs#readme", "keywords": [ diff --git a/packages/gatsby-plugin-emotion/CHANGELOG.md b/packages/gatsby-plugin-emotion/CHANGELOG.md index 71a7f8499ed01..2f6338f448409 100644 --- a/packages/gatsby-plugin-emotion/CHANGELOG.md +++ b/packages/gatsby-plugin-emotion/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-emotion/compare/gatsby-plugin-emotion@2.0.6...gatsby-plugin-emotion@2.0.7) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-emotion + ## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-emotion/compare/gatsby-plugin-emotion@2.0.5...gatsby-plugin-emotion@2.0.6) (2018-10-29) diff --git a/packages/gatsby-plugin-emotion/package.json b/packages/gatsby-plugin-emotion/package.json index 556201295af52..1784696f7b2ac 100644 --- a/packages/gatsby-plugin-emotion/package.json +++ b/packages/gatsby-plugin-emotion/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-emotion", "description": "Gatsby plugin to add support for Emotion", - "version": "2.0.6", + "version": "2.0.7", "author": "Tegan Churchill ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-emotion#readme", diff --git a/packages/gatsby-plugin-facebook-analytics/CHANGELOG.md b/packages/gatsby-plugin-facebook-analytics/CHANGELOG.md index 9c104e3e6b337..f275b9f282ead 100644 --- a/packages/gatsby-plugin-facebook-analytics/CHANGELOG.md +++ b/packages/gatsby-plugin-facebook-analytics/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-facebook-analytics@2.0.1...gatsby-plugin-facebook-analytics@2.0.2) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-facebook-analytics + ## [2.0.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-facebook-analytics@2.0.0...gatsby-plugin-facebook-analytics@2.0.1) (2018-10-29) diff --git a/packages/gatsby-plugin-facebook-analytics/package.json b/packages/gatsby-plugin-facebook-analytics/package.json index 80f167772c495..07f49db726a5b 100644 --- a/packages/gatsby-plugin-facebook-analytics/package.json +++ b/packages/gatsby-plugin-facebook-analytics/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-facebook-analytics", "description": "Gatsby plugin to add facebook analytics onto a site", - "version": "2.0.1", + "version": "2.0.2", "author": "Yeison Daza ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-facebook-analytics#readme", diff --git a/packages/gatsby-plugin-feed/CHANGELOG.md b/packages/gatsby-plugin-feed/CHANGELOG.md index 6e80c2f9b2162..41b65414e9f7e 100644 --- a/packages/gatsby-plugin-feed/CHANGELOG.md +++ b/packages/gatsby-plugin-feed/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.10](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-feed/compare/gatsby-plugin-feed@2.0.9...gatsby-plugin-feed@2.0.10) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-feed + ## [2.0.9](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-feed/compare/gatsby-plugin-feed@2.0.8...gatsby-plugin-feed@2.0.9) (2018-10-29) diff --git a/packages/gatsby-plugin-feed/package.json b/packages/gatsby-plugin-feed/package.json index 89008385ec41f..782fde6cb8251 100644 --- a/packages/gatsby-plugin-feed/package.json +++ b/packages/gatsby-plugin-feed/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-feed", "description": "Creates an RSS feed for your Gatsby site.", - "version": "2.0.9", + "version": "2.0.10", "author": "Nicholas Young ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -16,7 +16,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-feed#readme", diff --git a/packages/gatsby-plugin-fullstory/CHANGELOG.md b/packages/gatsby-plugin-fullstory/CHANGELOG.md index e51624ee5724c..c2754aa99f958 100644 --- a/packages/gatsby-plugin-fullstory/CHANGELOG.md +++ b/packages/gatsby-plugin-fullstory/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-fullstory@2.0.1...gatsby-plugin-fullstory@2.0.2) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-fullstory + ## [2.0.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-fullstory@2.0.0...gatsby-plugin-fullstory@2.0.1) (2018-10-29) diff --git a/packages/gatsby-plugin-fullstory/package.json b/packages/gatsby-plugin-fullstory/package.json index ef2c40d9a437f..33a6e919d9587 100644 --- a/packages/gatsby-plugin-fullstory/package.json +++ b/packages/gatsby-plugin-fullstory/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-plugin-fullstory", - "version": "2.0.1", + "version": "2.0.2", "description": "Plugin to add the tracking code for Fullstory.com", "main": "index.js", "scripts": { @@ -28,7 +28,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "peerDependencies": { diff --git a/packages/gatsby-plugin-glamor/CHANGELOG.md b/packages/gatsby-plugin-glamor/CHANGELOG.md index 14d209c39cea4..7b52d7cc7d27b 100644 --- a/packages/gatsby-plugin-glamor/CHANGELOG.md +++ b/packages/gatsby-plugin-glamor/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-glamor/compare/gatsby-plugin-glamor@2.0.6...gatsby-plugin-glamor@2.0.7) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-glamor + ## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-glamor/compare/gatsby-plugin-glamor@2.0.5...gatsby-plugin-glamor@2.0.6) (2018-10-29) diff --git a/packages/gatsby-plugin-glamor/package.json b/packages/gatsby-plugin-glamor/package.json index 0fac9343d179d..a4580f827b29a 100644 --- a/packages/gatsby-plugin-glamor/package.json +++ b/packages/gatsby-plugin-glamor/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-glamor", "description": "Gatsby plugin to add support for Glamor", - "version": "2.0.6", + "version": "2.0.7", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-glamor#readme", diff --git a/packages/gatsby-plugin-google-analytics/CHANGELOG.md b/packages/gatsby-plugin-google-analytics/CHANGELOG.md index 4f57b0ded7ebf..dea65e41ee3f0 100644 --- a/packages/gatsby-plugin-google-analytics/CHANGELOG.md +++ b/packages/gatsby-plugin-google-analytics/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-analytics/compare/gatsby-plugin-google-analytics@2.0.7...gatsby-plugin-google-analytics@2.0.8) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-google-analytics + ## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-analytics/compare/gatsby-plugin-google-analytics@2.0.6...gatsby-plugin-google-analytics@2.0.7) (2018-10-29) diff --git a/packages/gatsby-plugin-google-analytics/package.json b/packages/gatsby-plugin-google-analytics/package.json index bc71030b76c4f..06e65ec5eef4e 100644 --- a/packages/gatsby-plugin-google-analytics/package.json +++ b/packages/gatsby-plugin-google-analytics/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-google-analytics", "description": "Gatsby plugin to add google analytics onto a site", - "version": "2.0.7", + "version": "2.0.8", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-analytics#readme", diff --git a/packages/gatsby-plugin-google-gtag/CHANGELOG.md b/packages/gatsby-plugin-google-gtag/CHANGELOG.md index 28c56e37f7d99..2915e48e18694 100644 --- a/packages/gatsby-plugin-google-gtag/CHANGELOG.md +++ b/packages/gatsby-plugin-google-gtag/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [1.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag/compare/gatsby-plugin-google-gtag@1.0.7...gatsby-plugin-google-gtag@1.0.8) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-google-gtag + ## [1.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag/compare/gatsby-plugin-google-gtag@1.0.6...gatsby-plugin-google-gtag@1.0.7) (2018-11-16) diff --git a/packages/gatsby-plugin-google-gtag/package.json b/packages/gatsby-plugin-google-gtag/package.json index 645beaf407549..d9e4544d0289b 100644 --- a/packages/gatsby-plugin-google-gtag/package.json +++ b/packages/gatsby-plugin-google-gtag/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-google-gtag", "description": "Gatsby plugin to add google gtag onto a site", - "version": "1.0.7", + "version": "1.0.8", "author": "Tyler Buchea ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -13,7 +13,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-gtag#readme", diff --git a/packages/gatsby-plugin-google-tagmanager/CHANGELOG.md b/packages/gatsby-plugin-google-tagmanager/CHANGELOG.md index cfafba5c3cf34..8277d67317eef 100644 --- a/packages/gatsby-plugin-google-tagmanager/CHANGELOG.md +++ b/packages/gatsby-plugin-google-tagmanager/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-tagmanager/compare/gatsby-plugin-google-tagmanager@2.0.6...gatsby-plugin-google-tagmanager@2.0.7) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-google-tagmanager + ## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-tagmanager/compare/gatsby-plugin-google-tagmanager@2.0.5...gatsby-plugin-google-tagmanager@2.0.6) (2018-10-29) diff --git a/packages/gatsby-plugin-google-tagmanager/package.json b/packages/gatsby-plugin-google-tagmanager/package.json index eb65b7499d487..4e87b08c45b14 100644 --- a/packages/gatsby-plugin-google-tagmanager/package.json +++ b/packages/gatsby-plugin-google-tagmanager/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-google-tagmanager", "description": "Gatsby plugin to add google tagmanager onto a site", - "version": "2.0.6", + "version": "2.0.7", "author": "Thijs Koerselman ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-google-tagmanager#readme", diff --git a/packages/gatsby-plugin-guess-js/CHANGELOG.md b/packages/gatsby-plugin-guess-js/CHANGELOG.md index 85ee8cb810994..9d7c3f6d5b95a 100644 --- a/packages/gatsby-plugin-guess-js/CHANGELOG.md +++ b/packages/gatsby-plugin-guess-js/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [1.0.3](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-guess-js@1.0.2...gatsby-plugin-guess-js@1.0.3) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-guess-js + ## [1.0.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-guess-js@1.0.1...gatsby-plugin-guess-js@1.0.2) (2018-10-29) diff --git a/packages/gatsby-plugin-guess-js/package.json b/packages/gatsby-plugin-guess-js/package.json index f4b691fd92092..74b971a71f3ba 100644 --- a/packages/gatsby-plugin-guess-js/package.json +++ b/packages/gatsby-plugin-guess-js/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-plugin-guess-js", - "version": "1.0.2", + "version": "1.0.3", "description": "Gatsby plugin providing drop-in integration with Guess.js to enabling using machine learning and analytics data to power prefetching", "main": "index.js", "scripts": { @@ -33,7 +33,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.0.5" }, "peerDependencies": { diff --git a/packages/gatsby-plugin-jss/CHANGELOG.md b/packages/gatsby-plugin-jss/CHANGELOG.md index 65462291622df..8870fd61615c9 100644 --- a/packages/gatsby-plugin-jss/CHANGELOG.md +++ b/packages/gatsby-plugin-jss/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-jss/compare/gatsby-plugin-jss@2.0.4...gatsby-plugin-jss@2.0.5) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-jss + ## [2.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-jss/compare/gatsby-plugin-jss@2.0.3...gatsby-plugin-jss@2.0.4) (2018-11-20) diff --git a/packages/gatsby-plugin-jss/package.json b/packages/gatsby-plugin-jss/package.json index 9c2c0cedd4cd0..54d26dec23760 100644 --- a/packages/gatsby-plugin-jss/package.json +++ b/packages/gatsby-plugin-jss/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-jss", "description": "Gatsby plugin that adds SSR support for JSS", - "version": "2.0.4", + "version": "2.0.5", "author": "Vladimir Guguiev ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2" + "babel-preset-gatsby-package": "^0.1.3" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-jss#readme", "keywords": [ diff --git a/packages/gatsby-plugin-layout/CHANGELOG.md b/packages/gatsby-plugin-layout/CHANGELOG.md index 1611616e79d65..ef237f8728cc0 100644 --- a/packages/gatsby-plugin-layout/CHANGELOG.md +++ b/packages/gatsby-plugin-layout/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [1.0.10](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-layout@1.0.9...gatsby-plugin-layout@1.0.10) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-layout + ## [1.0.9](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-layout@1.0.8...gatsby-plugin-layout@1.0.9) (2018-11-14) diff --git a/packages/gatsby-plugin-layout/package.json b/packages/gatsby-plugin-layout/package.json index 2122ed8b765a4..d9b16d3c44834 100644 --- a/packages/gatsby-plugin-layout/package.json +++ b/packages/gatsby-plugin-layout/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-plugin-layout", - "version": "1.0.9", + "version": "1.0.10", "description": "Reimplements the behavior of layout components in gatsby@1, which was removed in version 2.", "main": "index.js", "scripts": { @@ -28,7 +28,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.0.5" } } diff --git a/packages/gatsby-plugin-less/CHANGELOG.md b/packages/gatsby-plugin-less/CHANGELOG.md index 400769ab76f85..631df0cc83986 100644 --- a/packages/gatsby-plugin-less/CHANGELOG.md +++ b/packages/gatsby-plugin-less/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-less/compare/gatsby-plugin-less@2.0.7...gatsby-plugin-less@2.0.8) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-less + ## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-less/compare/gatsby-plugin-less@2.0.6...gatsby-plugin-less@2.0.7) (2018-10-29) diff --git a/packages/gatsby-plugin-less/package.json b/packages/gatsby-plugin-less/package.json index 45a895cf54b78..99e63ba6c04c9 100644 --- a/packages/gatsby-plugin-less/package.json +++ b/packages/gatsby-plugin-less/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-less", "description": "Gatsby plugin to add support for using Less", - "version": "2.0.7", + "version": "2.0.8", "author": "monastic.panic@gmail.com", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -13,7 +13,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-less#readme", diff --git a/packages/gatsby-plugin-lodash/CHANGELOG.md b/packages/gatsby-plugin-lodash/CHANGELOG.md index d5f8b1ea76898..6a73bf2d5e85f 100644 --- a/packages/gatsby-plugin-lodash/CHANGELOG.md +++ b/packages/gatsby-plugin-lodash/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-lodash/compare/gatsby-plugin-lodash@3.0.2...gatsby-plugin-lodash@3.0.3) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-lodash + ## [3.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-lodash/compare/gatsby-plugin-lodash@3.0.1...gatsby-plugin-lodash@3.0.2) (2018-10-29) diff --git a/packages/gatsby-plugin-lodash/package.json b/packages/gatsby-plugin-lodash/package.json index bca3919756ee4..72cdb6595b2a2 100644 --- a/packages/gatsby-plugin-lodash/package.json +++ b/packages/gatsby-plugin-lodash/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-lodash", "description": "Easy modular Lodash builds. Adds the Lodash webpack & Babel plugins to your Gatsby build", - "version": "3.0.2", + "version": "3.0.3", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-lodash#readme", diff --git a/packages/gatsby-plugin-manifest/CHANGELOG.md b/packages/gatsby-plugin-manifest/CHANGELOG.md index 03e1d8383808a..edbdd1796c24b 100644 --- a/packages/gatsby-plugin-manifest/CHANGELOG.md +++ b/packages/gatsby-plugin-manifest/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.11](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-manifest/compare/gatsby-plugin-manifest@2.0.10...gatsby-plugin-manifest@2.0.11) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-manifest + ## [2.0.10](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-manifest/compare/gatsby-plugin-manifest@2.0.9...gatsby-plugin-manifest@2.0.10) (2018-11-21) diff --git a/packages/gatsby-plugin-manifest/package.json b/packages/gatsby-plugin-manifest/package.json index 7984657f81172..22af1c02190a2 100644 --- a/packages/gatsby-plugin-manifest/package.json +++ b/packages/gatsby-plugin-manifest/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-manifest", "description": "Gatsby plugin which adds a manifest.webmanifest to make sites progressive web apps", - "version": "2.0.10", + "version": "2.0.11", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-manifest#readme", diff --git a/packages/gatsby-plugin-netlify-cms/CHANGELOG.md b/packages/gatsby-plugin-netlify-cms/CHANGELOG.md index 1c7777c22f3ed..da2b6de5ea442 100644 --- a/packages/gatsby-plugin-netlify-cms/CHANGELOG.md +++ b/packages/gatsby-plugin-netlify-cms/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.9](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify-cms/compare/gatsby-plugin-netlify-cms@3.0.8...gatsby-plugin-netlify-cms@3.0.9) (2018-11-29) + +### Bug Fixes + +- **gatsby-plugin-netlify-cms:** dynamically import netlify-identity-widget ([#9565](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify-cms/issues/9565)) ([49100e9](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify-cms/commit/49100e9)) + ## [3.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify-cms/compare/gatsby-plugin-netlify-cms@3.0.7...gatsby-plugin-netlify-cms@3.0.8) (2018-11-27) diff --git a/packages/gatsby-plugin-netlify-cms/package.json b/packages/gatsby-plugin-netlify-cms/package.json index 2d8fb6af93821..3ccec5b21cddb 100644 --- a/packages/gatsby-plugin-netlify-cms/package.json +++ b/packages/gatsby-plugin-netlify-cms/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-netlify-cms", "description": "A Gatsby plugin which generates the Netlify CMS single page app", - "version": "3.0.8", + "version": "3.0.9", "author": "Shawn Erquhart ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -18,7 +18,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4", "react": "^16.4.1", "react-dom": "^16.4.1" diff --git a/packages/gatsby-plugin-netlify/CHANGELOG.md b/packages/gatsby-plugin-netlify/CHANGELOG.md index 48bc63f339bc3..75df633ab60ef 100644 --- a/packages/gatsby-plugin-netlify/CHANGELOG.md +++ b/packages/gatsby-plugin-netlify/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify/compare/gatsby-plugin-netlify@2.0.5...gatsby-plugin-netlify@2.0.6) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-netlify + ## [2.0.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify/compare/gatsby-plugin-netlify@2.0.4...gatsby-plugin-netlify@2.0.5) (2018-11-15) diff --git a/packages/gatsby-plugin-netlify/package.json b/packages/gatsby-plugin-netlify/package.json index 3106caf968e10..bc8719e55091e 100644 --- a/packages/gatsby-plugin-netlify/package.json +++ b/packages/gatsby-plugin-netlify/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-netlify", "description": "A Gatsby plugin which generates a _headers file for netlify", - "version": "2.0.5", + "version": "2.0.6", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -22,7 +22,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-netlify#readme", diff --git a/packages/gatsby-plugin-nprogress/CHANGELOG.md b/packages/gatsby-plugin-nprogress/CHANGELOG.md index 96bb1af4d734c..b591676007980 100644 --- a/packages/gatsby-plugin-nprogress/CHANGELOG.md +++ b/packages/gatsby-plugin-nprogress/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-nprogress/compare/gatsby-plugin-nprogress@2.0.6...gatsby-plugin-nprogress@2.0.7) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-nprogress + ## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-nprogress/compare/gatsby-plugin-nprogress@2.0.5...gatsby-plugin-nprogress@2.0.6) (2018-10-29) diff --git a/packages/gatsby-plugin-nprogress/package.json b/packages/gatsby-plugin-nprogress/package.json index 0c249ddad9d6f..c5fd8524720e7 100644 --- a/packages/gatsby-plugin-nprogress/package.json +++ b/packages/gatsby-plugin-nprogress/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-nprogress", "description": "Shows page loading indicator when loading page resources is delayed", - "version": "2.0.6", + "version": "2.0.7", "author": "Kyle Mathews", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -13,7 +13,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-nprogress#readme", diff --git a/packages/gatsby-plugin-offline/CHANGELOG.md b/packages/gatsby-plugin-offline/CHANGELOG.md index 8ea5ded0ec1a7..4d6274f505144 100644 --- a/packages/gatsby-plugin-offline/CHANGELOG.md +++ b/packages/gatsby-plugin-offline/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.18](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/compare/gatsby-plugin-offline@2.0.17...gatsby-plugin-offline@2.0.18) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-offline + ## [2.0.17](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline/compare/gatsby-plugin-offline@2.0.16...gatsby-plugin-offline@2.0.17) (2018-11-21) diff --git a/packages/gatsby-plugin-offline/package.json b/packages/gatsby-plugin-offline/package.json index 45c6ed474664a..4b190cb017fd1 100644 --- a/packages/gatsby-plugin-offline/package.json +++ b/packages/gatsby-plugin-offline/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-offline", "description": "Gatsby plugin which sets up a site to be able to run offline", - "version": "2.0.17", + "version": "2.0.18", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -16,7 +16,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-offline#readme", diff --git a/packages/gatsby-plugin-page-creator/CHANGELOG.md b/packages/gatsby-plugin-page-creator/CHANGELOG.md index d7f0507be067a..0290f51489178 100644 --- a/packages/gatsby-plugin-page-creator/CHANGELOG.md +++ b/packages/gatsby-plugin-page-creator/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.5](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-page-creator@2.0.4...gatsby-plugin-page-creator@2.0.5) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-page-creator + ## [2.0.4](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-page-creator@2.0.3...gatsby-plugin-page-creator@2.0.4) (2018-11-08) diff --git a/packages/gatsby-plugin-page-creator/package.json b/packages/gatsby-plugin-page-creator/package.json index 7a62d2296fff0..05ca3a2d4fda5 100644 --- a/packages/gatsby-plugin-page-creator/package.json +++ b/packages/gatsby-plugin-page-creator/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-plugin-page-creator", - "version": "2.0.4", + "version": "2.0.5", "description": "Gatsby plugin that automatically creates pages from React components in specified directories", "main": "index.js", "scripts": { @@ -31,7 +31,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.0.5" }, "peerDependencies": { diff --git a/packages/gatsby-plugin-postcss/CHANGELOG.md b/packages/gatsby-plugin-postcss/CHANGELOG.md index ba2135d1b64c9..5d4649bcce656 100644 --- a/packages/gatsby-plugin-postcss/CHANGELOG.md +++ b/packages/gatsby-plugin-postcss/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-postcss/compare/gatsby-plugin-postcss@2.0.1...gatsby-plugin-postcss@2.0.2) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-postcss + ## [2.0.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-postcss/compare/gatsby-plugin-postcss@2.0.0...gatsby-plugin-postcss@2.0.1) (2018-10-29) diff --git a/packages/gatsby-plugin-postcss/package.json b/packages/gatsby-plugin-postcss/package.json index 867ef8d94f717..fcdcdb790a5c4 100644 --- a/packages/gatsby-plugin-postcss/package.json +++ b/packages/gatsby-plugin-postcss/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-postcss", "description": "Gatsby plugin to handle PostCSS", - "version": "2.0.1", + "version": "2.0.2", "author": "Marat Dreizin ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -13,7 +13,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-postcss#readme", diff --git a/packages/gatsby-plugin-preact/CHANGELOG.md b/packages/gatsby-plugin-preact/CHANGELOG.md index 12beeea428f5b..0d1d1c2a9ee8b 100644 --- a/packages/gatsby-plugin-preact/CHANGELOG.md +++ b/packages/gatsby-plugin-preact/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-preact/compare/gatsby-plugin-preact@2.0.7...gatsby-plugin-preact@2.0.8) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-preact + ## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-preact/compare/gatsby-plugin-preact@2.0.6...gatsby-plugin-preact@2.0.7) (2018-10-29) diff --git a/packages/gatsby-plugin-preact/package.json b/packages/gatsby-plugin-preact/package.json index 6119098f72ec5..94a200a2aa4e7 100644 --- a/packages/gatsby-plugin-preact/package.json +++ b/packages/gatsby-plugin-preact/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-preact", "description": "A Gatsby plugin which replaces React with Preact", - "version": "2.0.7", + "version": "2.0.8", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-preact#readme", diff --git a/packages/gatsby-plugin-react-css-modules/CHANGELOG.md b/packages/gatsby-plugin-react-css-modules/CHANGELOG.md index 09f42f3e44c82..372a85ecaf870 100644 --- a/packages/gatsby-plugin-react-css-modules/CHANGELOG.md +++ b/packages/gatsby-plugin-react-css-modules/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-react-css-modules/compare/gatsby-plugin-react-css-modules@2.0.3...gatsby-plugin-react-css-modules@2.0.4) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-react-css-modules + ## [2.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-react-css-modules/compare/gatsby-plugin-react-css-modules@2.0.2...gatsby-plugin-react-css-modules@2.0.3) (2018-10-29) diff --git a/packages/gatsby-plugin-react-css-modules/package.json b/packages/gatsby-plugin-react-css-modules/package.json index e1586bc96a363..1c2873df5ddf4 100644 --- a/packages/gatsby-plugin-react-css-modules/package.json +++ b/packages/gatsby-plugin-react-css-modules/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-react-css-modules", "description": "Gatsby plugin that transforms styleName to className using compile time CSS module resolution", - "version": "2.0.3", + "version": "2.0.4", "author": "Ming Aldrich-Gan ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -13,7 +13,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-react-css-modules#readme", diff --git a/packages/gatsby-plugin-react-helmet/CHANGELOG.md b/packages/gatsby-plugin-react-helmet/CHANGELOG.md index 6b98505892aa2..c2a85acb1eb47 100644 --- a/packages/gatsby-plugin-react-helmet/CHANGELOG.md +++ b/packages/gatsby-plugin-react-helmet/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-react-helmet/compare/gatsby-plugin-react-helmet@3.0.2...gatsby-plugin-react-helmet@3.0.3) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-react-helmet + ## [3.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-react-helmet/compare/gatsby-plugin-react-helmet@3.0.1...gatsby-plugin-react-helmet@3.0.2) (2018-11-12) diff --git a/packages/gatsby-plugin-react-helmet/package.json b/packages/gatsby-plugin-react-helmet/package.json index fd481df3eff9d..9d7fb5b929fd3 100644 --- a/packages/gatsby-plugin-react-helmet/package.json +++ b/packages/gatsby-plugin-react-helmet/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-react-helmet", "description": "Manage document head data with react-helmet. Provides drop-in server rendering support for Gatsby.", - "version": "3.0.2", + "version": "3.0.3", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-react-helmet#readme", diff --git a/packages/gatsby-plugin-remove-trailing-slashes/CHANGELOG.md b/packages/gatsby-plugin-remove-trailing-slashes/CHANGELOG.md index f1c43a6e452f1..0a72ef666bf0a 100644 --- a/packages/gatsby-plugin-remove-trailing-slashes/CHANGELOG.md +++ b/packages/gatsby-plugin-remove-trailing-slashes/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-remove-trailing-slashes/compare/gatsby-plugin-remove-trailing-slashes@2.0.5...gatsby-plugin-remove-trailing-slashes@2.0.6) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-remove-trailing-slashes + ## [2.0.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-remove-trailing-slashes/compare/gatsby-plugin-remove-trailing-slashes@2.0.4...gatsby-plugin-remove-trailing-slashes@2.0.5) (2018-11-08) diff --git a/packages/gatsby-plugin-remove-trailing-slashes/package.json b/packages/gatsby-plugin-remove-trailing-slashes/package.json index df2470770ab00..9f9c81b233499 100644 --- a/packages/gatsby-plugin-remove-trailing-slashes/package.json +++ b/packages/gatsby-plugin-remove-trailing-slashes/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-remove-trailing-slashes", "description": "Removes trailing slashes from your project's paths. For example, yoursite.com/about/ becomes yoursite.com/about", - "version": "2.0.5", + "version": "2.0.6", "author": "scott.eckenthal@gmail.com", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-remove-trailing-slashes#readme", diff --git a/packages/gatsby-plugin-sass/CHANGELOG.md b/packages/gatsby-plugin-sass/CHANGELOG.md index 920dd52b509c8..e9e79a41faea2 100644 --- a/packages/gatsby-plugin-sass/CHANGELOG.md +++ b/packages/gatsby-plugin-sass/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sass/compare/gatsby-plugin-sass@2.0.4...gatsby-plugin-sass@2.0.5) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-sass + ## [2.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sass/compare/gatsby-plugin-sass@2.0.3...gatsby-plugin-sass@2.0.4) (2018-11-08) diff --git a/packages/gatsby-plugin-sass/package.json b/packages/gatsby-plugin-sass/package.json index a9ea0a625499e..ff1f989470789 100644 --- a/packages/gatsby-plugin-sass/package.json +++ b/packages/gatsby-plugin-sass/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-sass", "description": "Gatsby plugin to handle scss/sass files", - "version": "2.0.4", + "version": "2.0.5", "author": "Daniel Farrell ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -13,7 +13,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sass#readme", diff --git a/packages/gatsby-plugin-sharp/CHANGELOG.md b/packages/gatsby-plugin-sharp/CHANGELOG.md index 66dc1bc408084..aece7fba75587 100644 --- a/packages/gatsby-plugin-sharp/CHANGELOG.md +++ b/packages/gatsby-plugin-sharp/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.14](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sharp/compare/gatsby-plugin-sharp@2.0.13...gatsby-plugin-sharp@2.0.14) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-sharp + ## [2.0.13](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sharp/compare/gatsby-plugin-sharp@2.0.12...gatsby-plugin-sharp@2.0.13) (2018-11-21) diff --git a/packages/gatsby-plugin-sharp/package.json b/packages/gatsby-plugin-sharp/package.json index 73db2d869a99d..c92ce1e8a881d 100644 --- a/packages/gatsby-plugin-sharp/package.json +++ b/packages/gatsby-plugin-sharp/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-sharp", "description": "Wrapper of the Sharp image manipulation library for Gatsby plugins", - "version": "2.0.13", + "version": "2.0.14", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -27,7 +27,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sharp#readme", diff --git a/packages/gatsby-plugin-sitemap/CHANGELOG.md b/packages/gatsby-plugin-sitemap/CHANGELOG.md index 9b2c5de03e9df..544c5ded9e3a9 100644 --- a/packages/gatsby-plugin-sitemap/CHANGELOG.md +++ b/packages/gatsby-plugin-sitemap/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sitemap/compare/gatsby-plugin-sitemap@2.0.2...gatsby-plugin-sitemap@2.0.3) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-sitemap + ## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sitemap/compare/gatsby-plugin-sitemap@2.0.1...gatsby-plugin-sitemap@2.0.2) (2018-10-29) diff --git a/packages/gatsby-plugin-sitemap/package.json b/packages/gatsby-plugin-sitemap/package.json index 96bcaee51780d..1dea3131e6e9b 100644 --- a/packages/gatsby-plugin-sitemap/package.json +++ b/packages/gatsby-plugin-sitemap/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-sitemap", "description": "Gatsby plugin that automatically creates a sitemap for your site", - "version": "2.0.2", + "version": "2.0.3", "author": "Nicholas Young <nicholas@nicholaswyoung.com>", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -13,7 +13,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-sitemap#readme", diff --git a/packages/gatsby-plugin-styled-components/CHANGELOG.md b/packages/gatsby-plugin-styled-components/CHANGELOG.md index 633e915734a59..e018f725b03ae 100644 --- a/packages/gatsby-plugin-styled-components/CHANGELOG.md +++ b/packages/gatsby-plugin-styled-components/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-components/compare/gatsby-plugin-styled-components@3.0.3...gatsby-plugin-styled-components@3.0.4) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-styled-components + ## [3.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-components/compare/gatsby-plugin-styled-components@3.0.2...gatsby-plugin-styled-components@3.0.3) (2018-11-20) diff --git a/packages/gatsby-plugin-styled-components/package.json b/packages/gatsby-plugin-styled-components/package.json index da27e9306501e..cf2862d93a00e 100644 --- a/packages/gatsby-plugin-styled-components/package.json +++ b/packages/gatsby-plugin-styled-components/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-styled-components", "description": "Gatsby plugin to add support for styled components", - "version": "3.0.3", + "version": "3.0.4", "author": "Guten Ye ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2" + "babel-preset-gatsby-package": "^0.1.3" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-components#readme", "keywords": [ diff --git a/packages/gatsby-plugin-styled-jsx/CHANGELOG.md b/packages/gatsby-plugin-styled-jsx/CHANGELOG.md index 63739cbcf5474..844452905812b 100644 --- a/packages/gatsby-plugin-styled-jsx/CHANGELOG.md +++ b/packages/gatsby-plugin-styled-jsx/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-jsx/compare/gatsby-plugin-styled-jsx@3.0.2...gatsby-plugin-styled-jsx@3.0.3) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-styled-jsx + ## [3.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-jsx/compare/gatsby-plugin-styled-jsx@3.0.1...gatsby-plugin-styled-jsx@3.0.2) (2018-10-29) diff --git a/packages/gatsby-plugin-styled-jsx/package.json b/packages/gatsby-plugin-styled-jsx/package.json index cc4d4bde3ab73..94fc5fa72a991 100644 --- a/packages/gatsby-plugin-styled-jsx/package.json +++ b/packages/gatsby-plugin-styled-jsx/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-styled-jsx", "description": "Adds SSR support for styled-jsx", - "version": "3.0.2", + "version": "3.0.3", "author": "Tim Suchanek ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styled-jsx#readme", diff --git a/packages/gatsby-plugin-styletron/CHANGELOG.md b/packages/gatsby-plugin-styletron/CHANGELOG.md index 385185bf00958..4c20fc2c2d6c0 100644 --- a/packages/gatsby-plugin-styletron/CHANGELOG.md +++ b/packages/gatsby-plugin-styletron/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styletron/compare/gatsby-plugin-styletron@3.0.2...gatsby-plugin-styletron@3.0.3) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-styletron + ## [3.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styletron/compare/gatsby-plugin-styletron@3.0.1...gatsby-plugin-styletron@3.0.2) (2018-10-29) diff --git a/packages/gatsby-plugin-styletron/package.json b/packages/gatsby-plugin-styletron/package.json index 57e88cbc9aeb4..1277a1de11ddc 100644 --- a/packages/gatsby-plugin-styletron/package.json +++ b/packages/gatsby-plugin-styletron/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-styletron", "description": "A Gatsby plugin for styletron with built-in server-side rendering support", - "version": "3.0.2", + "version": "3.0.3", "author": "Nadiia Dmytrenko ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -15,7 +15,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-styletron#readme", diff --git a/packages/gatsby-plugin-stylus/CHANGELOG.md b/packages/gatsby-plugin-stylus/CHANGELOG.md index 3567b3afa4a91..9b206d9709bcf 100644 --- a/packages/gatsby-plugin-stylus/CHANGELOG.md +++ b/packages/gatsby-plugin-stylus/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-stylus/compare/gatsby-plugin-stylus@2.0.2...gatsby-plugin-stylus@2.0.3) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-stylus + ## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-stylus/compare/gatsby-plugin-stylus@2.0.1...gatsby-plugin-stylus@2.0.2) (2018-10-29) diff --git a/packages/gatsby-plugin-stylus/package.json b/packages/gatsby-plugin-stylus/package.json index 94381200a97db..104b607c41477 100644 --- a/packages/gatsby-plugin-stylus/package.json +++ b/packages/gatsby-plugin-stylus/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-stylus", "description": "Gatsby support for Stylus", - "version": "2.0.2", + "version": "2.0.3", "author": "Ian Sinnott ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-stylus#readme", diff --git a/packages/gatsby-plugin-subfont/CHANGELOG.md b/packages/gatsby-plugin-subfont/CHANGELOG.md index ac2215c9968e2..c2d66002a9cf5 100644 --- a/packages/gatsby-plugin-subfont/CHANGELOG.md +++ b/packages/gatsby-plugin-subfont/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [1.0.3](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-subfont@1.0.2...gatsby-plugin-subfont@1.0.3) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-subfont + ## [1.0.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-plugin-subfont@1.0.1...gatsby-plugin-subfont@1.0.2) (2018-10-29) diff --git a/packages/gatsby-plugin-subfont/package.json b/packages/gatsby-plugin-subfont/package.json index 1655fe6be4b52..8759562ae32e9 100644 --- a/packages/gatsby-plugin-subfont/package.json +++ b/packages/gatsby-plugin-subfont/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-plugin-subfont", - "version": "1.0.2", + "version": "1.0.3", "description": "Runs the font delivery optimizing CLI tool subfont on the homepage of your site during the Gatsby build", "main": "index.js", "scripts": { @@ -29,7 +29,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.0.5" } } diff --git a/packages/gatsby-plugin-twitter/CHANGELOG.md b/packages/gatsby-plugin-twitter/CHANGELOG.md index 863a6345f8d2c..42dc561ce7b4c 100644 --- a/packages/gatsby-plugin-twitter/CHANGELOG.md +++ b/packages/gatsby-plugin-twitter/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-twitter/compare/gatsby-plugin-twitter@2.0.7...gatsby-plugin-twitter@2.0.8) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-twitter + ## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-twitter/compare/gatsby-plugin-twitter@2.0.6...gatsby-plugin-twitter@2.0.7) (2018-10-29) diff --git a/packages/gatsby-plugin-twitter/package.json b/packages/gatsby-plugin-twitter/package.json index d7a0b64bf6372..614923829c941 100644 --- a/packages/gatsby-plugin-twitter/package.json +++ b/packages/gatsby-plugin-twitter/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-twitter", "description": "Loads the Twitter JavaScript for embedding tweets.", - "version": "2.0.7", + "version": "2.0.8", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-twitter#readme", diff --git a/packages/gatsby-plugin-typescript/CHANGELOG.md b/packages/gatsby-plugin-typescript/CHANGELOG.md index 2b4b0325d9eb1..2517f0a35fd09 100644 --- a/packages/gatsby-plugin-typescript/CHANGELOG.md +++ b/packages/gatsby-plugin-typescript/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-typescript/compare/gatsby-plugin-typescript@2.0.1...gatsby-plugin-typescript@2.0.2) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-typescript + ## [2.0.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-typescript/compare/gatsby-plugin-typescript@2.0.0...gatsby-plugin-typescript@2.0.1) (2018-10-29) diff --git a/packages/gatsby-plugin-typescript/package.json b/packages/gatsby-plugin-typescript/package.json index b3d66a1e426fc..ccf3452326d2a 100644 --- a/packages/gatsby-plugin-typescript/package.json +++ b/packages/gatsby-plugin-typescript/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-typescript", "description": "Adds TypeScript support to Gatsby", - "version": "2.0.1", + "version": "2.0.2", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,12 +12,12 @@ "dependencies": { "@babel/preset-typescript": "^7.0.0", "@babel/runtime": "^7.0.0", - "babel-plugin-remove-graphql-queries": "^2.5.1" + "babel-plugin-remove-graphql-queries": "^2.5.2" }, "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-typescript#readme", diff --git a/packages/gatsby-plugin-typography/CHANGELOG.md b/packages/gatsby-plugin-typography/CHANGELOG.md index dda73dd5c62d3..db7132dd57d90 100644 --- a/packages/gatsby-plugin-typography/CHANGELOG.md +++ b/packages/gatsby-plugin-typography/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.2.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-typography/compare/gatsby-plugin-typography@2.2.1...gatsby-plugin-typography@2.2.2) (2018-11-29) + +**Note:** Version bump only for package gatsby-plugin-typography + ## [2.2.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-typography/compare/gatsby-plugin-typography@2.2.0...gatsby-plugin-typography@2.2.1) (2018-10-29) diff --git a/packages/gatsby-plugin-typography/package.json b/packages/gatsby-plugin-typography/package.json index 728c47377cfb7..cc413f8ce62e4 100644 --- a/packages/gatsby-plugin-typography/package.json +++ b/packages/gatsby-plugin-typography/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-typography", "description": "Gatsby plugin to setup server rendering of Typography.js' CSS", - "version": "2.2.1", + "version": "2.2.2", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-typography#readme", diff --git a/packages/gatsby-react-router-scroll/CHANGELOG.md b/packages/gatsby-react-router-scroll/CHANGELOG.md index 845690db983e1..431e884ee3057 100644 --- a/packages/gatsby-react-router-scroll/CHANGELOG.md +++ b/packages/gatsby-react-router-scroll/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-react-router-scroll/compare/gatsby-react-router-scroll@2.0.1...gatsby-react-router-scroll@2.0.2) (2018-11-29) + +**Note:** Version bump only for package gatsby-react-router-scroll + ## [2.0.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-react-router-scroll/compare/gatsby-react-router-scroll@2.0.0...gatsby-react-router-scroll@2.0.1) (2018-10-29) diff --git a/packages/gatsby-react-router-scroll/package.json b/packages/gatsby-react-router-scroll/package.json index 0d6199c11e705..1dee4d7de2d57 100644 --- a/packages/gatsby-react-router-scroll/package.json +++ b/packages/gatsby-react-router-scroll/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-react-router-scroll", "description": "React Router scroll management forked from https://github.com/ytase/react-router-scroll for Gatsby", - "version": "2.0.1", + "version": "2.0.2", "author": "Jimmy Jia", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -15,7 +15,7 @@ "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", "babel-plugin-dev-expression": "^0.2.1", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-react-router-scroll#readme", diff --git a/packages/gatsby-remark-autolink-headers/CHANGELOG.md b/packages/gatsby-remark-autolink-headers/CHANGELOG.md index 7928cf3a49cfd..690bc4d5e97fd 100644 --- a/packages/gatsby-remark-autolink-headers/CHANGELOG.md +++ b/packages/gatsby-remark-autolink-headers/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.12](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-autolink-headers/compare/gatsby-remark-autolink-headers@2.0.11...gatsby-remark-autolink-headers@2.0.12) (2018-11-29) + +**Note:** Version bump only for package gatsby-remark-autolink-headers + ## [2.0.11](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-autolink-headers/compare/gatsby-remark-autolink-headers@2.0.10...gatsby-remark-autolink-headers@2.0.11) (2018-11-08) diff --git a/packages/gatsby-remark-autolink-headers/package.json b/packages/gatsby-remark-autolink-headers/package.json index 76c6f92a11971..13060e4466aeb 100644 --- a/packages/gatsby-remark-autolink-headers/package.json +++ b/packages/gatsby-remark-autolink-headers/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-autolink-headers", "description": "Gatsby plugin to autolink headers in markdown processed by Remark", - "version": "2.0.11", + "version": "2.0.12", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -15,7 +15,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-autolink-headers#readme", diff --git a/packages/gatsby-remark-code-repls/CHANGELOG.md b/packages/gatsby-remark-code-repls/CHANGELOG.md index e9a7c1a980fdb..4a492fc519355 100644 --- a/packages/gatsby-remark-code-repls/CHANGELOG.md +++ b/packages/gatsby-remark-code-repls/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-code-repls/compare/gatsby-remark-code-repls@2.0.1...gatsby-remark-code-repls@2.0.2) (2018-11-29) + +**Note:** Version bump only for package gatsby-remark-code-repls + ## [2.0.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-code-repls/compare/gatsby-remark-code-repls@2.0.0...gatsby-remark-code-repls@2.0.1) (2018-10-29) diff --git a/packages/gatsby-remark-code-repls/package.json b/packages/gatsby-remark-code-repls/package.json index 10fbc1a7979d0..3001dbcf0cec3 100644 --- a/packages/gatsby-remark-code-repls/package.json +++ b/packages/gatsby-remark-code-repls/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-code-repls", "description": "Gatsby plugin to auto-generate links to popular REPLs like Babel and Codepen", - "version": "2.0.1", + "version": "2.0.2", "author": "Brian Vaughn ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -17,7 +17,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-code-repls#readme", diff --git a/packages/gatsby-remark-copy-linked-files/CHANGELOG.md b/packages/gatsby-remark-copy-linked-files/CHANGELOG.md index e46968c2d839f..513f31590a51f 100644 --- a/packages/gatsby-remark-copy-linked-files/CHANGELOG.md +++ b/packages/gatsby-remark-copy-linked-files/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-copy-linked-files/compare/gatsby-remark-copy-linked-files@2.0.6...gatsby-remark-copy-linked-files@2.0.7) (2018-11-29) + +**Note:** Version bump only for package gatsby-remark-copy-linked-files + ## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-copy-linked-files/compare/gatsby-remark-copy-linked-files@2.0.5...gatsby-remark-copy-linked-files@2.0.6) (2018-10-29) diff --git a/packages/gatsby-remark-copy-linked-files/package.json b/packages/gatsby-remark-copy-linked-files/package.json index 35c682142f68e..6404dc6030499 100644 --- a/packages/gatsby-remark-copy-linked-files/package.json +++ b/packages/gatsby-remark-copy-linked-files/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-copy-linked-files", "description": "Find files which are linked to from markdown and copy them to the public directory", - "version": "2.0.6", + "version": "2.0.7", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -19,7 +19,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-copy-linked-files#readme", diff --git a/packages/gatsby-remark-custom-blocks/CHANGELOG.md b/packages/gatsby-remark-custom-blocks/CHANGELOG.md index b4a7cc5ecd267..c72f796af62ab 100644 --- a/packages/gatsby-remark-custom-blocks/CHANGELOG.md +++ b/packages/gatsby-remark-custom-blocks/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-custom-blocks/compare/gatsby-remark-custom-blocks@2.0.1...gatsby-remark-custom-blocks@2.0.2) (2018-11-29) + +**Note:** Version bump only for package gatsby-remark-custom-blocks + ## [2.0.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-custom-blocks/compare/gatsby-remark-custom-blocks@2.0.0...gatsby-remark-custom-blocks@2.0.1) (2018-10-29) diff --git a/packages/gatsby-remark-custom-blocks/package.json b/packages/gatsby-remark-custom-blocks/package.json index 6b206ce90b582..49094654b4e82 100644 --- a/packages/gatsby-remark-custom-blocks/package.json +++ b/packages/gatsby-remark-custom-blocks/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-custom-blocks", "description": "Gatsby remark plugin for adding custom blocks in markdown", - "version": "2.0.1", + "version": "2.0.2", "author": "Mohammad Asad Mohammad ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -13,7 +13,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4", "rimraf": "^2.6.2", "unist-util-find": "^1.0.1" diff --git a/packages/gatsby-remark-embed-snippet/CHANGELOG.md b/packages/gatsby-remark-embed-snippet/CHANGELOG.md index cf55395f91789..fbb1e4677a3fb 100644 --- a/packages/gatsby-remark-embed-snippet/CHANGELOG.md +++ b/packages/gatsby-remark-embed-snippet/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.1.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-embed-snippet/compare/gatsby-remark-embed-snippet@3.1.0...gatsby-remark-embed-snippet@3.1.1) (2018-11-29) + +**Note:** Version bump only for package gatsby-remark-embed-snippet + # [3.1.0](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-embed-snippet/compare/gatsby-remark-embed-snippet@3.0.3...gatsby-remark-embed-snippet@3.1.0) (2018-11-26) diff --git a/packages/gatsby-remark-embed-snippet/package.json b/packages/gatsby-remark-embed-snippet/package.json index ff34b9bcba46b..5d5bf13dd0496 100644 --- a/packages/gatsby-remark-embed-snippet/package.json +++ b/packages/gatsby-remark-embed-snippet/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-embed-snippet", "description": "Gatsby plugin to embed formatted code snippets within markdown", - "version": "3.1.0", + "version": "3.1.1", "author": "Brian Vaughn ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -15,7 +15,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-embed-snippet#readme", diff --git a/packages/gatsby-remark-graphviz/CHANGELOG.md b/packages/gatsby-remark-graphviz/CHANGELOG.md index f07cf12f16d07..ad210969e7314 100644 --- a/packages/gatsby-remark-graphviz/CHANGELOG.md +++ b/packages/gatsby-remark-graphviz/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [1.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-graphviz/compare/gatsby-remark-graphviz@1.0.3...gatsby-remark-graphviz@1.0.4) (2018-11-29) + +**Note:** Version bump only for package gatsby-remark-graphviz + ## [1.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-graphviz/compare/gatsby-remark-graphviz@1.0.2...gatsby-remark-graphviz@1.0.3) (2018-10-29) diff --git a/packages/gatsby-remark-graphviz/package.json b/packages/gatsby-remark-graphviz/package.json index ee73f788e453d..3f3e5ff155594 100644 --- a/packages/gatsby-remark-graphviz/package.json +++ b/packages/gatsby-remark-graphviz/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-graphviz", "description": "Processes graphviz code blocks and renders to SVG using viz.js", - "version": "1.0.3", + "version": "1.0.4", "author": "Anthony Marcar ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4", "rimraf": "^2.6.2", "unist-util-find": "^1.0.1" diff --git a/packages/gatsby-remark-images/CHANGELOG.md b/packages/gatsby-remark-images/CHANGELOG.md index 43474d06fb631..66d6712468681 100644 --- a/packages/gatsby-remark-images/CHANGELOG.md +++ b/packages/gatsby-remark-images/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-images/compare/gatsby-remark-images@3.0.0...gatsby-remark-images@3.0.1) (2018-11-29) + +**Note:** Version bump only for package gatsby-remark-images + # [3.0.0](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-images/compare/gatsby-remark-images@2.0.6...gatsby-remark-images@3.0.0) (2018-11-21) diff --git a/packages/gatsby-remark-images/package.json b/packages/gatsby-remark-images/package.json index 98057c6ff64ba..fda46e851d7ee 100644 --- a/packages/gatsby-remark-images/package.json +++ b/packages/gatsby-remark-images/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-images", "description": "Processes images in markdown so they can be used in the production build.", - "version": "3.0.0", + "version": "3.0.1", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -18,7 +18,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-images#readme", diff --git a/packages/gatsby-remark-katex/CHANGELOG.md b/packages/gatsby-remark-katex/CHANGELOG.md index 752ef05d750c5..a26e0c3669baf 100644 --- a/packages/gatsby-remark-katex/CHANGELOG.md +++ b/packages/gatsby-remark-katex/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-katex/compare/gatsby-remark-katex@3.0.0...gatsby-remark-katex@3.0.1) (2018-11-29) + +**Note:** Version bump only for package gatsby-remark-katex + # [3.0.0](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-katex/compare/gatsby-remark-katex@2.0.6...gatsby-remark-katex@3.0.0) (2018-11-15) diff --git a/packages/gatsby-remark-katex/package.json b/packages/gatsby-remark-katex/package.json index 33634e6f5dc22..ae36f9b5545a7 100644 --- a/packages/gatsby-remark-katex/package.json +++ b/packages/gatsby-remark-katex/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-katex", "description": "Transform math nodes to html markup", - "version": "3.0.0", + "version": "3.0.1", "author": "Jeffrey Xiao ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4", "katex": ">=0.10.0 <1.0.0" }, diff --git a/packages/gatsby-remark-prismjs/CHANGELOG.md b/packages/gatsby-remark-prismjs/CHANGELOG.md index 42c248eee62e5..d07de49b1ffc5 100644 --- a/packages/gatsby-remark-prismjs/CHANGELOG.md +++ b/packages/gatsby-remark-prismjs/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.1.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-prismjs/compare/gatsby-remark-prismjs@3.1.0...gatsby-remark-prismjs@3.1.1) (2018-11-29) + +**Note:** Version bump only for package gatsby-remark-prismjs + # [3.1.0](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-prismjs/compare/gatsby-remark-prismjs@3.0.3...gatsby-remark-prismjs@3.1.0) (2018-11-26) diff --git a/packages/gatsby-remark-prismjs/package.json b/packages/gatsby-remark-prismjs/package.json index e69f074dc52e1..7360270c9f018 100644 --- a/packages/gatsby-remark-prismjs/package.json +++ b/packages/gatsby-remark-prismjs/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-prismjs", "description": "Adds syntax highlighting to code blocks at build time using PrismJS", - "version": "3.1.0", + "version": "3.1.1", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4", "prismjs": "^1.15.0", "remark": "^9.0.0" diff --git a/packages/gatsby-remark-responsive-iframe/CHANGELOG.md b/packages/gatsby-remark-responsive-iframe/CHANGELOG.md index cc802a7e9b69e..0767cdf1349a3 100644 --- a/packages/gatsby-remark-responsive-iframe/CHANGELOG.md +++ b/packages/gatsby-remark-responsive-iframe/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-responsive-iframe/compare/gatsby-remark-responsive-iframe@2.0.6...gatsby-remark-responsive-iframe@2.0.7) (2018-11-29) + +**Note:** Version bump only for package gatsby-remark-responsive-iframe + ## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-responsive-iframe/compare/gatsby-remark-responsive-iframe@2.0.5...gatsby-remark-responsive-iframe@2.0.6) (2018-10-29) diff --git a/packages/gatsby-remark-responsive-iframe/package.json b/packages/gatsby-remark-responsive-iframe/package.json index 0e74b61fd50a8..92e9e8594e9a9 100644 --- a/packages/gatsby-remark-responsive-iframe/package.json +++ b/packages/gatsby-remark-responsive-iframe/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-responsive-iframe", "description": "Make iframes in Markdown processed by Remark responsive", - "version": "2.0.6", + "version": "2.0.7", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -16,7 +16,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4", "remark": "^9.0.0", "unist-util-find": "^1.0.1" diff --git a/packages/gatsby-remark-smartypants/CHANGELOG.md b/packages/gatsby-remark-smartypants/CHANGELOG.md index 67e7768c8c101..b8844ae502956 100644 --- a/packages/gatsby-remark-smartypants/CHANGELOG.md +++ b/packages/gatsby-remark-smartypants/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-smartypants/compare/gatsby-remark-smartypants@2.0.6...gatsby-remark-smartypants@2.0.7) (2018-11-29) + +**Note:** Version bump only for package gatsby-remark-smartypants + ## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-smartypants/compare/gatsby-remark-smartypants@2.0.5...gatsby-remark-smartypants@2.0.6) (2018-10-29) diff --git a/packages/gatsby-remark-smartypants/package.json b/packages/gatsby-remark-smartypants/package.json index c036ec8fd8fa6..a51ccca363df3 100644 --- a/packages/gatsby-remark-smartypants/package.json +++ b/packages/gatsby-remark-smartypants/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-smartypants", "description": "Use retext-smartypants to auto-enhance typography of markdown", - "version": "2.0.6", + "version": "2.0.7", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -15,7 +15,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-smartypants#readme", diff --git a/packages/gatsby-source-contentful/CHANGELOG.md b/packages/gatsby-source-contentful/CHANGELOG.md index 05c8bdb4ed997..f3f5ff3925715 100644 --- a/packages/gatsby-source-contentful/CHANGELOG.md +++ b/packages/gatsby-source-contentful/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.16](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful/compare/gatsby-source-contentful@2.0.15...gatsby-source-contentful@2.0.16) (2018-11-29) + +**Note:** Version bump only for package gatsby-source-contentful + ## [2.0.15](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful/compare/gatsby-source-contentful@2.0.14...gatsby-source-contentful@2.0.15) (2018-11-21) diff --git a/packages/gatsby-source-contentful/package.json b/packages/gatsby-source-contentful/package.json index c250d9e3cb42b..698b114183773 100644 --- a/packages/gatsby-source-contentful/package.json +++ b/packages/gatsby-source-contentful/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-contentful", "description": "Gatsby source plugin for building websites using the Contentful CMS as a data source", - "version": "2.0.15", + "version": "2.0.16", "author": "Marcus Ericsson (mericsson.com)", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "contentful": "^6.1.0", "deep-map": "^1.5.0", "fs-extra": "^4.0.2", - "gatsby-plugin-sharp": "^2.0.13", + "gatsby-plugin-sharp": "^2.0.14", "is-online": "^7.0.0", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.10", @@ -23,7 +23,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-contentful#readme", diff --git a/packages/gatsby-source-drupal/CHANGELOG.md b/packages/gatsby-source-drupal/CHANGELOG.md index 2ba2469dfd583..3a92bc5d6b4e2 100644 --- a/packages/gatsby-source-drupal/CHANGELOG.md +++ b/packages/gatsby-source-drupal/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.12](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-drupal/compare/gatsby-source-drupal@3.0.11...gatsby-source-drupal@3.0.12) (2018-11-29) + +**Note:** Version bump only for package gatsby-source-drupal + ## [3.0.11](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-drupal/compare/gatsby-source-drupal@3.0.10...gatsby-source-drupal@3.0.11) (2018-11-26) diff --git a/packages/gatsby-source-drupal/package.json b/packages/gatsby-source-drupal/package.json index e451670aad8c7..6f2515e422058 100644 --- a/packages/gatsby-source-drupal/package.json +++ b/packages/gatsby-source-drupal/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-drupal", "description": "Gatsby source plugin for building websites using the Drupal CMS as a data source", - "version": "3.0.11", + "version": "3.0.12", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -10,13 +10,13 @@ "@babel/runtime": "^7.0.0", "axios": "^0.18.0", "bluebird": "^3.5.0", - "gatsby-source-filesystem": "^2.0.9", + "gatsby-source-filesystem": "^2.0.10", "lodash": "^4.17.10" }, "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-drupal#readme", diff --git a/packages/gatsby-source-faker/CHANGELOG.md b/packages/gatsby-source-faker/CHANGELOG.md index ca78eeeb0a600..483894c0b018c 100644 --- a/packages/gatsby-source-faker/CHANGELOG.md +++ b/packages/gatsby-source-faker/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-faker/compare/gatsby-source-faker@2.0.2...gatsby-source-faker@2.0.3) (2018-11-29) + +**Note:** Version bump only for package gatsby-source-faker + ## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-faker/compare/gatsby-source-faker@2.0.1...gatsby-source-faker@2.0.2) (2018-11-21) diff --git a/packages/gatsby-source-faker/package.json b/packages/gatsby-source-faker/package.json index e33d5f90fe1f0..523100b9fbd75 100644 --- a/packages/gatsby-source-faker/package.json +++ b/packages/gatsby-source-faker/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-faker", "description": "A gatsby plugin to get fake data for testing", - "version": "2.0.2", + "version": "2.0.3", "author": "Pavithra Kodmad", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -13,7 +13,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-faker#readme", diff --git a/packages/gatsby-source-filesystem/CHANGELOG.md b/packages/gatsby-source-filesystem/CHANGELOG.md index 2fef9750d3fc7..aaf044cbf055b 100644 --- a/packages/gatsby-source-filesystem/CHANGELOG.md +++ b/packages/gatsby-source-filesystem/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.10](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-filesystem/compare/gatsby-source-filesystem@2.0.9...gatsby-source-filesystem@2.0.10) (2018-11-29) + +**Note:** Version bump only for package gatsby-source-filesystem + ## [2.0.9](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-filesystem/compare/gatsby-source-filesystem@2.0.8...gatsby-source-filesystem@2.0.9) (2018-11-26) diff --git a/packages/gatsby-source-filesystem/package.json b/packages/gatsby-source-filesystem/package.json index ab56df925b221..d2678655b8fb2 100644 --- a/packages/gatsby-source-filesystem/package.json +++ b/packages/gatsby-source-filesystem/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-filesystem", "description": "Gatsby plugin which parses files within a directory for further parsing by other plugins", - "version": "2.0.9", + "version": "2.0.10", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -25,7 +25,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-filesystem#readme", diff --git a/packages/gatsby-source-graphql/CHANGELOG.md b/packages/gatsby-source-graphql/CHANGELOG.md index 5892f2cf4cc4b..9fdc77f08374a 100644 --- a/packages/gatsby-source-graphql/CHANGELOG.md +++ b/packages/gatsby-source-graphql/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-graphql/compare/gatsby-source-graphql@2.0.6...gatsby-source-graphql@2.0.7) (2018-11-29) + +**Note:** Version bump only for package gatsby-source-graphql + ## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-graphql/compare/gatsby-source-graphql@2.0.5...gatsby-source-graphql@2.0.6) (2018-11-05) diff --git a/packages/gatsby-source-graphql/package.json b/packages/gatsby-source-graphql/package.json index 4dd7278971fe7..387d39600eb9c 100644 --- a/packages/gatsby-source-graphql/package.json +++ b/packages/gatsby-source-graphql/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-graphql", "description": "Gatsby plugin which adds a third-party GraphQL API to Gatsby GraphQL", - "version": "2.0.6", + "version": "2.0.7", "author": "Mikhail Novikov ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -19,7 +19,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-graphql#readme", diff --git a/packages/gatsby-source-hacker-news/CHANGELOG.md b/packages/gatsby-source-hacker-news/CHANGELOG.md index 3f34df88194d2..230dcebd9f691 100644 --- a/packages/gatsby-source-hacker-news/CHANGELOG.md +++ b/packages/gatsby-source-hacker-news/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.7](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-hacker-news/compare/gatsby-source-hacker-news@2.0.6...gatsby-source-hacker-news@2.0.7) (2018-11-29) + +**Note:** Version bump only for package gatsby-source-hacker-news + ## [2.0.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-hacker-news/compare/gatsby-source-hacker-news@2.0.5...gatsby-source-hacker-news@2.0.6) (2018-10-29) diff --git a/packages/gatsby-source-hacker-news/package.json b/packages/gatsby-source-hacker-news/package.json index 8b63d76ed248c..940757d2ecddb 100644 --- a/packages/gatsby-source-hacker-news/package.json +++ b/packages/gatsby-source-hacker-news/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-hacker-news", "description": "Gatsby source plugin for building websites using Hacker News as a data source", - "version": "2.0.6", + "version": "2.0.7", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-hacker-news#readme", diff --git a/packages/gatsby-source-lever/CHANGELOG.md b/packages/gatsby-source-lever/CHANGELOG.md index 1849db4ba3831..db941b5cb6941 100644 --- a/packages/gatsby-source-lever/CHANGELOG.md +++ b/packages/gatsby-source-lever/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-lever/compare/gatsby-source-lever@2.0.1...gatsby-source-lever@2.0.2) (2018-11-29) + +**Note:** Version bump only for package gatsby-source-lever + ## [2.0.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-lever/compare/gatsby-source-lever@2.0.0...gatsby-source-lever@2.0.1) (2018-10-29) diff --git a/packages/gatsby-source-lever/package.json b/packages/gatsby-source-lever/package.json index 304fa1a9da8b4..7f0aa8aa24149 100644 --- a/packages/gatsby-source-lever/package.json +++ b/packages/gatsby-source-lever/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-lever", "description": "Gatsby source plugin for building websites using the Lever.co Recruitment Software as a data source.", - "version": "2.0.1", + "version": "2.0.2", "author": "Sebastien Fichot ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -20,7 +20,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-lever#readme", diff --git a/packages/gatsby-source-medium/CHANGELOG.md b/packages/gatsby-source-medium/CHANGELOG.md index b2070cc238aad..165d46ff5a9f3 100644 --- a/packages/gatsby-source-medium/CHANGELOG.md +++ b/packages/gatsby-source-medium/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-medium/compare/gatsby-source-medium@2.0.1...gatsby-source-medium@2.0.2) (2018-11-29) + +**Note:** Version bump only for package gatsby-source-medium + ## [2.0.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-medium/compare/gatsby-source-medium@2.0.0...gatsby-source-medium@2.0.1) (2018-10-29) diff --git a/packages/gatsby-source-medium/package.json b/packages/gatsby-source-medium/package.json index 2d5a51c1becc1..e407eb44bbab5 100644 --- a/packages/gatsby-source-medium/package.json +++ b/packages/gatsby-source-medium/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-medium", "description": "Gatsby source plugin for building websites using Medium as a data source", - "version": "2.0.1", + "version": "2.0.2", "author": "Robert Vogt ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -13,7 +13,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-medium#readme", diff --git a/packages/gatsby-source-mongodb/CHANGELOG.md b/packages/gatsby-source-mongodb/CHANGELOG.md index 88233aa426e8b..e6ec58c1e8e57 100644 --- a/packages/gatsby-source-mongodb/CHANGELOG.md +++ b/packages/gatsby-source-mongodb/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.9](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-mongodb/compare/gatsby-source-mongodb@2.0.8...gatsby-source-mongodb@2.0.9) (2018-11-29) + +**Note:** Version bump only for package gatsby-source-mongodb + ## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-mongodb/compare/gatsby-source-mongodb@2.0.7...gatsby-source-mongodb@2.0.8) (2018-11-08) diff --git a/packages/gatsby-source-mongodb/package.json b/packages/gatsby-source-mongodb/package.json index 454aa275a2c37..b0bcae42c3f08 100644 --- a/packages/gatsby-source-mongodb/package.json +++ b/packages/gatsby-source-mongodb/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-mongodb", "description": "Source plugin for pulling data into Gatsby from MongoDB collections", - "version": "2.0.8", + "version": "2.0.9", "author": "jhermans85@hotmail.com", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -15,7 +15,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-mongodb#readme", diff --git a/packages/gatsby-source-npm-package-search/CHANGELOG.md b/packages/gatsby-source-npm-package-search/CHANGELOG.md index c6938908df696..74ad04e54e5fa 100644 --- a/packages/gatsby-source-npm-package-search/CHANGELOG.md +++ b/packages/gatsby-source-npm-package-search/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-npm-package-search@2.0.1...gatsby-source-npm-package-search@2.0.2) (2018-11-29) + +**Note:** Version bump only for package gatsby-source-npm-package-search + ## [2.0.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-npm-package-search@2.0.0...gatsby-source-npm-package-search@2.0.1) (2018-10-29) diff --git a/packages/gatsby-source-npm-package-search/package.json b/packages/gatsby-source-npm-package-search/package.json index 79557368dbf78..6241832ec538b 100644 --- a/packages/gatsby-source-npm-package-search/package.json +++ b/packages/gatsby-source-npm-package-search/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-npm-package-search", "description": "Search NPM packages and pull NPM & GitHub metadata from Algolia's NPM index", - "version": "2.0.1", + "version": "2.0.2", "author": "james.a.stack@gmail.com", "dependencies": { "@babel/runtime": "^7.0.0", @@ -10,7 +10,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "keywords": [ diff --git a/packages/gatsby-source-wikipedia/CHANGELOG.md b/packages/gatsby-source-wikipedia/CHANGELOG.md index ffc178dabca80..0ca582c70be15 100644 --- a/packages/gatsby-source-wikipedia/CHANGELOG.md +++ b/packages/gatsby-source-wikipedia/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.3](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-wikipedia@2.0.2...gatsby-source-wikipedia@2.0.3) (2018-11-29) + +**Note:** Version bump only for package gatsby-source-wikipedia + ## [2.0.2](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-wikipedia@2.0.1...gatsby-source-wikipedia@2.0.2) (2018-10-29) diff --git a/packages/gatsby-source-wikipedia/package.json b/packages/gatsby-source-wikipedia/package.json index a2834e42e9fa9..025b42b9ea0e6 100644 --- a/packages/gatsby-source-wikipedia/package.json +++ b/packages/gatsby-source-wikipedia/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-source-wikipedia", - "version": "2.0.2", + "version": "2.0.3", "description": "Gatsby source plugin for pulling articles from Wikipedia", "main": "index.js", "scripts": { @@ -34,7 +34,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.0.5" } } diff --git a/packages/gatsby-source-wordpress/CHANGELOG.md b/packages/gatsby-source-wordpress/CHANGELOG.md index 37711acfd7f01..a0bab102676b1 100644 --- a/packages/gatsby-source-wordpress/CHANGELOG.md +++ b/packages/gatsby-source-wordpress/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.16](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-wordpress/compare/gatsby-source-wordpress@3.0.15...gatsby-source-wordpress@3.0.16) (2018-11-29) + +**Note:** Version bump only for package gatsby-source-wordpress + ## [3.0.15](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-wordpress/compare/gatsby-source-wordpress@3.0.14...gatsby-source-wordpress@3.0.15) (2018-11-26) diff --git a/packages/gatsby-source-wordpress/package.json b/packages/gatsby-source-wordpress/package.json index a09b5e7d92f11..0d357f8702f62 100644 --- a/packages/gatsby-source-wordpress/package.json +++ b/packages/gatsby-source-wordpress/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-wordpress", "description": "Gatsby source plugin for building websites using the Wordpress CMS as a data source.", - "version": "3.0.15", + "version": "3.0.16", "author": "Sebastien Fichot ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "bluebird": "^3.5.0", "deep-map": "^1.5.0", "deep-map-keys": "^1.2.0", - "gatsby-source-filesystem": "^2.0.9", + "gatsby-source-filesystem": "^2.0.10", "json-stringify-safe": "^5.0.1", "lodash": "^4.17.10", "minimatch": "^3.0.4", @@ -24,7 +24,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-wordpress#readme", diff --git a/packages/gatsby-transformer-csv/CHANGELOG.md b/packages/gatsby-transformer-csv/CHANGELOG.md index 75a8dbaa3ac93..b60981020a9f1 100644 --- a/packages/gatsby-transformer-csv/CHANGELOG.md +++ b/packages/gatsby-transformer-csv/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-csv/compare/gatsby-transformer-csv@2.0.4...gatsby-transformer-csv@2.0.5) (2018-11-29) + +**Note:** Version bump only for package gatsby-transformer-csv + ## [2.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-csv/compare/gatsby-transformer-csv@2.0.3...gatsby-transformer-csv@2.0.4) (2018-11-08) diff --git a/packages/gatsby-transformer-csv/package.json b/packages/gatsby-transformer-csv/package.json index 4e8933f55d89d..eee0dd9498fb0 100644 --- a/packages/gatsby-transformer-csv/package.json +++ b/packages/gatsby-transformer-csv/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-csv", "description": "Gatsby transformer plugin for CSV files", - "version": "2.0.4", + "version": "2.0.5", "author": "Sonal Saldanha ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4", "json2csv": "^3.7" }, diff --git a/packages/gatsby-transformer-documentationjs/CHANGELOG.md b/packages/gatsby-transformer-documentationjs/CHANGELOG.md index d2e9cf37b2cf3..fd7369a371fff 100644 --- a/packages/gatsby-transformer-documentationjs/CHANGELOG.md +++ b/packages/gatsby-transformer-documentationjs/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-documentationjs/compare/gatsby-transformer-documentationjs@2.0.1...gatsby-transformer-documentationjs@2.0.2) (2018-11-29) + +**Note:** Version bump only for package gatsby-transformer-documentationjs + ## [2.0.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-documentationjs/compare/gatsby-transformer-documentationjs@2.0.0...gatsby-transformer-documentationjs@2.0.1) (2018-10-29) diff --git a/packages/gatsby-transformer-documentationjs/package.json b/packages/gatsby-transformer-documentationjs/package.json index 3e35d09d08f9c..2ad919240400c 100644 --- a/packages/gatsby-transformer-documentationjs/package.json +++ b/packages/gatsby-transformer-documentationjs/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-documentationjs", "description": "Gatsby transformer plugin which uses Documentation.js to extract JavaScript documentation", - "version": "2.0.1", + "version": "2.0.2", "author": "Kyle Mathews", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-documentationjs#readme", diff --git a/packages/gatsby-transformer-excel/CHANGELOG.md b/packages/gatsby-transformer-excel/CHANGELOG.md index 9f59563030bc5..676c096ad8f46 100644 --- a/packages/gatsby-transformer-excel/CHANGELOG.md +++ b/packages/gatsby-transformer-excel/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.1.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-excel/compare/gatsby-transformer-excel@2.1.3...gatsby-transformer-excel@2.1.4) (2018-11-29) + +**Note:** Version bump only for package gatsby-transformer-excel + ## [2.1.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-excel/compare/gatsby-transformer-excel@2.1.2...gatsby-transformer-excel@2.1.3) (2018-10-29) diff --git a/packages/gatsby-transformer-excel/package.json b/packages/gatsby-transformer-excel/package.json index e26349c7b7fa2..737a765bde748 100644 --- a/packages/gatsby-transformer-excel/package.json +++ b/packages/gatsby-transformer-excel/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-excel", "description": "Gatsby transformer plugin for Excel spreadsheets", - "version": "2.1.3", + "version": "2.1.4", "author": "SheetJS ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -13,7 +13,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-excel#readme", diff --git a/packages/gatsby-transformer-hjson/CHANGELOG.md b/packages/gatsby-transformer-hjson/CHANGELOG.md index 19b16a2f54782..19e2a92d84277 100644 --- a/packages/gatsby-transformer-hjson/CHANGELOG.md +++ b/packages/gatsby-transformer-hjson/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.1.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-hjson/compare/gatsby-transformer-hjson@2.1.2...gatsby-transformer-hjson@2.1.3) (2018-11-29) + +**Note:** Version bump only for package gatsby-transformer-hjson + ## [2.1.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-hjson/compare/gatsby-transformer-hjson@2.1.1...gatsby-transformer-hjson@2.1.2) (2018-10-29) diff --git a/packages/gatsby-transformer-hjson/package.json b/packages/gatsby-transformer-hjson/package.json index 6f77749f617b3..b0e45bd545237 100644 --- a/packages/gatsby-transformer-hjson/package.json +++ b/packages/gatsby-transformer-hjson/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-hjson", "description": "Gatsby transformer plugin for HJSON files", - "version": "2.1.2", + "version": "2.1.3", "author": "Remi Barraquand ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-hjson#readme", diff --git a/packages/gatsby-transformer-javascript-frontmatter/CHANGELOG.md b/packages/gatsby-transformer-javascript-frontmatter/CHANGELOG.md index 19acf3868991f..a0da915d0fef3 100644 --- a/packages/gatsby-transformer-javascript-frontmatter/CHANGELOG.md +++ b/packages/gatsby-transformer-javascript-frontmatter/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-javascript-frontmatter/compare/gatsby-transformer-javascript-frontmatter@2.0.4...gatsby-transformer-javascript-frontmatter@2.0.5) (2018-11-29) + +**Note:** Version bump only for package gatsby-transformer-javascript-frontmatter + ## [2.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-javascript-frontmatter/compare/gatsby-transformer-javascript-frontmatter@2.0.3...gatsby-transformer-javascript-frontmatter@2.0.4) (2018-11-08) diff --git a/packages/gatsby-transformer-javascript-frontmatter/package.json b/packages/gatsby-transformer-javascript-frontmatter/package.json index 091e1cdaef1ba..0e3ca7a919225 100644 --- a/packages/gatsby-transformer-javascript-frontmatter/package.json +++ b/packages/gatsby-transformer-javascript-frontmatter/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-javascript-frontmatter", "description": "Gatsby transformer plugin for JavaScript to extract exports.frontmatter statically.", - "version": "2.0.4", + "version": "2.0.5", "author": "Jacob Bolda ", "dependencies": { "@babel/parser": "^7.0.0", @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "keywords": [ diff --git a/packages/gatsby-transformer-javascript-static-exports/CHANGELOG.md b/packages/gatsby-transformer-javascript-static-exports/CHANGELOG.md index a0008292c0efa..e0c2995696b1d 100644 --- a/packages/gatsby-transformer-javascript-static-exports/CHANGELOG.md +++ b/packages/gatsby-transformer-javascript-static-exports/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.1.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-javascript-static-exports/compare/gatsby-transformer-javascript-static-exports@2.1.3...gatsby-transformer-javascript-static-exports@2.1.4) (2018-11-29) + +**Note:** Version bump only for package gatsby-transformer-javascript-static-exports + ## [2.1.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-javascript-static-exports/compare/gatsby-transformer-javascript-static-exports@2.1.2...gatsby-transformer-javascript-static-exports@2.1.3) (2018-10-29) diff --git a/packages/gatsby-transformer-javascript-static-exports/package.json b/packages/gatsby-transformer-javascript-static-exports/package.json index 060df3b504e34..6fbd3ba487ab7 100644 --- a/packages/gatsby-transformer-javascript-static-exports/package.json +++ b/packages/gatsby-transformer-javascript-static-exports/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-javascript-static-exports", "description": "Gatsby transformer plugin for JavaScript to extract exports.data statically.", - "version": "2.1.3", + "version": "2.1.4", "author": "Jacob Bolda ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -15,7 +15,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-javascript-static-exports#readme", diff --git a/packages/gatsby-transformer-json/CHANGELOG.md b/packages/gatsby-transformer-json/CHANGELOG.md index 60aef00be8776..5c84c8fd668ca 100644 --- a/packages/gatsby-transformer-json/CHANGELOG.md +++ b/packages/gatsby-transformer-json/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.1.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-json/compare/gatsby-transformer-json@2.1.5...gatsby-transformer-json@2.1.6) (2018-11-29) + +**Note:** Version bump only for package gatsby-transformer-json + ## [2.1.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-json/compare/gatsby-transformer-json@2.1.4...gatsby-transformer-json@2.1.5) (2018-10-29) diff --git a/packages/gatsby-transformer-json/package.json b/packages/gatsby-transformer-json/package.json index ffbd497a95b09..33844b1771e47 100644 --- a/packages/gatsby-transformer-json/package.json +++ b/packages/gatsby-transformer-json/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-json", "description": "Gatsby transformer plugin for JSON files", - "version": "2.1.5", + "version": "2.1.6", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -13,7 +13,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-json#readme", diff --git a/packages/gatsby-transformer-pdf/CHANGELOG.md b/packages/gatsby-transformer-pdf/CHANGELOG.md index 647311d8710e0..4e7ae3d6ff740 100644 --- a/packages/gatsby-transformer-pdf/CHANGELOG.md +++ b/packages/gatsby-transformer-pdf/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [1.0.15](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-pdf/compare/gatsby-transformer-pdf@1.0.14...gatsby-transformer-pdf@1.0.15) (2018-11-29) + +**Note:** Version bump only for package gatsby-transformer-pdf + ## [1.0.14](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-pdf/compare/gatsby-transformer-pdf@1.0.13...gatsby-transformer-pdf@1.0.14) (2018-11-08) diff --git a/packages/gatsby-transformer-pdf/package.json b/packages/gatsby-transformer-pdf/package.json index 8acdb3347f108..e508e8e683ebc 100644 --- a/packages/gatsby-transformer-pdf/package.json +++ b/packages/gatsby-transformer-pdf/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-pdf", "description": "Gatsby transformer plugin for pdf files", - "version": "1.0.14", + "version": "1.0.15", "author": "Alex Munoz ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-pdf#readme", diff --git a/packages/gatsby-transformer-react-docgen/CHANGELOG.md b/packages/gatsby-transformer-react-docgen/CHANGELOG.md index c1adf52dbcd01..89dc15db97eb4 100644 --- a/packages/gatsby-transformer-react-docgen/CHANGELOG.md +++ b/packages/gatsby-transformer-react-docgen/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.1.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-react-docgen/compare/gatsby-transformer-react-docgen@2.1.2...gatsby-transformer-react-docgen@2.1.3) (2018-11-29) + +**Note:** Version bump only for package gatsby-transformer-react-docgen + ## [2.1.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-react-docgen/compare/gatsby-transformer-react-docgen@2.1.1...gatsby-transformer-react-docgen@2.1.2) (2018-10-29) diff --git a/packages/gatsby-transformer-react-docgen/package.json b/packages/gatsby-transformer-react-docgen/package.json index 483306572d825..4a9e663a7c4a5 100644 --- a/packages/gatsby-transformer-react-docgen/package.json +++ b/packages/gatsby-transformer-react-docgen/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-react-docgen", "description": "Expose React component metadata and prop information as GraphQL types", - "version": "2.1.2", + "version": "2.1.3", "author": "Jason Quense ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -17,7 +17,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4", "lodash": "^4.17.10" }, diff --git a/packages/gatsby-transformer-remark/CHANGELOG.md b/packages/gatsby-transformer-remark/CHANGELOG.md index 87926886d3d86..230a666cc00ab 100644 --- a/packages/gatsby-transformer-remark/CHANGELOG.md +++ b/packages/gatsby-transformer-remark/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.1.14](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-remark/compare/gatsby-transformer-remark@2.1.13...gatsby-transformer-remark@2.1.14) (2018-11-29) + +### Bug Fixes + +- **gatsby-transformer-remark:** properly bubble up errors thrown in subplugins ([#9972](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-remark/issues/9972)) ([b7d4656](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-remark/commit/b7d4656)) + ## [2.1.13](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-remark/compare/gatsby-transformer-remark@2.1.12...gatsby-transformer-remark@2.1.13) (2018-11-27) diff --git a/packages/gatsby-transformer-remark/package.json b/packages/gatsby-transformer-remark/package.json index e649de7e97521..ad6d94fc7076c 100644 --- a/packages/gatsby-transformer-remark/package.json +++ b/packages/gatsby-transformer-remark/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-remark", "description": "Gatsby transformer plugin for Markdown using the Remark library and ecosystem", - "version": "2.1.13", + "version": "2.1.14", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -30,7 +30,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-remark#readme", diff --git a/packages/gatsby-transformer-screenshot/CHANGELOG.md b/packages/gatsby-transformer-screenshot/CHANGELOG.md index f9cdfb9d6c211..053605e6ed7cf 100644 --- a/packages/gatsby-transformer-screenshot/CHANGELOG.md +++ b/packages/gatsby-transformer-screenshot/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.9](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-screenshot/compare/gatsby-transformer-screenshot@2.0.8...gatsby-transformer-screenshot@2.0.9) (2018-11-29) + +**Note:** Version bump only for package gatsby-transformer-screenshot + ## [2.0.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-screenshot/compare/gatsby-transformer-screenshot@2.0.7...gatsby-transformer-screenshot@2.0.8) (2018-11-09) diff --git a/packages/gatsby-transformer-screenshot/package.json b/packages/gatsby-transformer-screenshot/package.json index 875ba5fe4d527..010ac12e8c2af 100644 --- a/packages/gatsby-transformer-screenshot/package.json +++ b/packages/gatsby-transformer-screenshot/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-screenshot", "description": "Gatsby transformer plugin that uses AWS Lambda to take screenshots of websites", - "version": "2.0.8", + "version": "2.0.9", "author": "David Beckley ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -13,7 +13,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-screenshot#readme", diff --git a/packages/gatsby-transformer-sharp/CHANGELOG.md b/packages/gatsby-transformer-sharp/CHANGELOG.md index 2047adcd19af6..b9f9d5251f86c 100644 --- a/packages/gatsby-transformer-sharp/CHANGELOG.md +++ b/packages/gatsby-transformer-sharp/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.1.9](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-sharp/compare/gatsby-transformer-sharp@2.1.8...gatsby-transformer-sharp@2.1.9) (2018-11-29) + +**Note:** Version bump only for package gatsby-transformer-sharp + ## [2.1.8](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-sharp/compare/gatsby-transformer-sharp@2.1.7...gatsby-transformer-sharp@2.1.8) (2018-11-06) diff --git a/packages/gatsby-transformer-sharp/package.json b/packages/gatsby-transformer-sharp/package.json index 8de65a13837e2..5dc0785aa5896 100644 --- a/packages/gatsby-transformer-sharp/package.json +++ b/packages/gatsby-transformer-sharp/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-sharp", "description": "Gatsby transformer plugin for images using Sharp", - "version": "2.1.8", + "version": "2.1.9", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -17,7 +17,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-sharp#readme", diff --git a/packages/gatsby-transformer-sqip/CHANGELOG.md b/packages/gatsby-transformer-sqip/CHANGELOG.md index a84a6e59c3e2b..7cc4145a3a725 100644 --- a/packages/gatsby-transformer-sqip/CHANGELOG.md +++ b/packages/gatsby-transformer-sqip/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.9](https://github.com/gatsbyjs/gatsby/compare/gatsby-transformer-sqip@2.0.8...gatsby-transformer-sqip@2.0.9) (2018-11-29) + +**Note:** Version bump only for package gatsby-transformer-sqip + ## [2.0.8](https://github.com/gatsbyjs/gatsby/compare/gatsby-transformer-sqip@2.0.7...gatsby-transformer-sqip@2.0.8) (2018-11-21) diff --git a/packages/gatsby-transformer-sqip/package.json b/packages/gatsby-transformer-sqip/package.json index dcc4a938d7d1f..d1215bd5e16db 100644 --- a/packages/gatsby-transformer-sqip/package.json +++ b/packages/gatsby-transformer-sqip/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-sqip", "description": "Generates geometric primitive version of images", - "version": "2.0.8", + "version": "2.0.9", "author": "Benedikt Rötsch ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -10,7 +10,7 @@ "@babel/runtime": "^7.0.0", "axios": "^0.18.0", "fs-extra": "^4.0.2", - "gatsby-plugin-sharp": "^2.0.13", + "gatsby-plugin-sharp": "^2.0.14", "mini-svg-data-uri": "^1.0.0", "p-queue": "^2.3.0", "sqip": "^0.3.0" @@ -18,7 +18,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.0.5", "debug": "^3.1.0" }, diff --git a/packages/gatsby-transformer-toml/CHANGELOG.md b/packages/gatsby-transformer-toml/CHANGELOG.md index 65fe7d415dae3..aa4bd328c7d98 100644 --- a/packages/gatsby-transformer-toml/CHANGELOG.md +++ b/packages/gatsby-transformer-toml/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.1.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-toml/compare/gatsby-transformer-toml@2.1.2...gatsby-transformer-toml@2.1.3) (2018-11-29) + +**Note:** Version bump only for package gatsby-transformer-toml + ## [2.1.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-toml/compare/gatsby-transformer-toml@2.1.1...gatsby-transformer-toml@2.1.2) (2018-10-29) diff --git a/packages/gatsby-transformer-toml/package.json b/packages/gatsby-transformer-toml/package.json index 3f50c57b7c9b3..fdd739247ea87 100644 --- a/packages/gatsby-transformer-toml/package.json +++ b/packages/gatsby-transformer-toml/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-toml", "description": "Gatsby transformer plugin for toml", - "version": "2.1.2", + "version": "2.1.3", "author": "Ruben Harutyunyan ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -14,7 +14,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-toml#readme", diff --git a/packages/gatsby-transformer-xml/CHANGELOG.md b/packages/gatsby-transformer-xml/CHANGELOG.md index 6580a92d1af51..10c804ad936e5 100644 --- a/packages/gatsby-transformer-xml/CHANGELOG.md +++ b/packages/gatsby-transformer-xml/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-xml/compare/gatsby-transformer-xml@2.0.4...gatsby-transformer-xml@2.0.5) (2018-11-29) + +**Note:** Version bump only for package gatsby-transformer-xml + ## [2.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-xml/compare/gatsby-transformer-xml@2.0.3...gatsby-transformer-xml@2.0.4) (2018-11-08) diff --git a/packages/gatsby-transformer-xml/package.json b/packages/gatsby-transformer-xml/package.json index 0f6a0a0cc958d..b792431acdee5 100644 --- a/packages/gatsby-transformer-xml/package.json +++ b/packages/gatsby-transformer-xml/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-xml", "description": "Gatsby plugin for parsing XML files. It supports also attributes", - "version": "2.0.4", + "version": "2.0.5", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -15,7 +15,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-xml#readme", diff --git a/packages/gatsby-transformer-yaml/CHANGELOG.md b/packages/gatsby-transformer-yaml/CHANGELOG.md index e5b89c658d304..9c79c40755c32 100644 --- a/packages/gatsby-transformer-yaml/CHANGELOG.md +++ b/packages/gatsby-transformer-yaml/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.1.6](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-yaml/compare/gatsby-transformer-yaml@2.1.5...gatsby-transformer-yaml@2.1.6) (2018-11-29) + +**Note:** Version bump only for package gatsby-transformer-yaml + ## [2.1.5](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-yaml/compare/gatsby-transformer-yaml@2.1.4...gatsby-transformer-yaml@2.1.5) (2018-11-08) diff --git a/packages/gatsby-transformer-yaml/package.json b/packages/gatsby-transformer-yaml/package.json index 6883d5028ed87..dc927c84d216c 100644 --- a/packages/gatsby-transformer-yaml/package.json +++ b/packages/gatsby-transformer-yaml/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-yaml", "description": "Gatsby transformer plugin for yaml", - "version": "2.1.5", + "version": "2.1.6", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -15,7 +15,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-yaml#readme", diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 33fe4fc1fad09..67524185fabe1 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.58](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.57...gatsby@2.0.58) (2018-11-29) + +**Note:** Version bump only for package gatsby + ## [2.0.57](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.56...gatsby@2.0.57) (2018-11-28) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 06049cf604359..4b6259155b822 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.57", + "version": "2.0.58", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" @@ -23,8 +23,8 @@ "babel-loader": "8.0.0-beta.4", "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dynamic-import-node": "^1.2.0", - "babel-plugin-remove-graphql-queries": "^2.5.1", - "babel-preset-gatsby": "^0.1.4", + "babel-plugin-remove-graphql-queries": "^2.5.2", + "babel-preset-gatsby": "^0.1.5", "better-queue": "^3.8.6", "bluebird": "^3.5.0", "cache-manager": "^2.9.0", @@ -58,14 +58,14 @@ "flat": "^4.0.0", "friendly-errors-webpack-plugin": "^1.6.1", "fs-extra": "^5.0.0", - "gatsby-cli": "^2.4.5", - "gatsby-link": "^2.0.6", - "gatsby-plugin-page-creator": "^2.0.4", - "gatsby-react-router-scroll": "^2.0.1", + "gatsby-cli": "^2.4.6", + "gatsby-link": "^2.0.7", + "gatsby-plugin-page-creator": "^2.0.5", + "gatsby-react-router-scroll": "^2.0.2", "glob": "^7.1.1", "graphql": "^0.13.2", "graphql-relay": "^0.5.5", - "graphql-skip-limit": "^2.0.1", + "graphql-skip-limit": "^2.0.2", "graphql-tools": "^3.0.4", "graphql-type-json": "^0.2.1", "hash-mod": "^0.0.5", @@ -126,7 +126,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/runtime": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4", "lerna": "^2.9.0", "rimraf": "^2.6.1" diff --git a/packages/graphql-skip-limit/CHANGELOG.md b/packages/graphql-skip-limit/CHANGELOG.md index ad8cc24675460..e63e9efcb0580 100644 --- a/packages/graphql-skip-limit/CHANGELOG.md +++ b/packages/graphql-skip-limit/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/graphql-skip-limit/compare/graphql-skip-limit@2.0.1...graphql-skip-limit@2.0.2) (2018-11-29) + +**Note:** Version bump only for package graphql-skip-limit + ## [2.0.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/graphql-skip-limit/compare/graphql-skip-limit@2.0.0...graphql-skip-limit@2.0.1) (2018-10-29) diff --git a/packages/graphql-skip-limit/package.json b/packages/graphql-skip-limit/package.json index e467ca056bff2..21afd121821b2 100644 --- a/packages/graphql-skip-limit/package.json +++ b/packages/graphql-skip-limit/package.json @@ -1,7 +1,7 @@ { "name": "graphql-skip-limit", "description": "A library to help construct a graphql-js server supporting skip/relay style pagination. Built for Gatsby but perhaps useful elsewhere.", - "version": "2.0.1", + "version": "2.0.2", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" @@ -12,7 +12,7 @@ "devDependencies": { "@babel/cli": "^7.0.0", "@babel/core": "^7.0.0", - "babel-preset-gatsby-package": "^0.1.2", + "babel-preset-gatsby-package": "^0.1.3", "cross-env": "^5.1.4", "graphql": "^0.13.2" }, From 4bcca2a529aae89707c64e09b5aa0abaa19cf35a Mon Sep 17 00:00:00 2001 From: Anthony Marcar Date: Thu, 29 Nov 2018 23:57:08 +1100 Subject: [PATCH 429/462] feat(gatsby): add lokijs nodes db implementation (#9919) This PR adds a feature flag `GATSBY_DB_NODES` that can be used to change the storage engine for the gatsby data layer (`nodes`). - `redux` (default) which uses the existing redux implementation, and `sift` for querying. Or, you can use - `loki` which uses the loki in-memory database to store and query. This PR re-implements functionality in #9338, but with all tests passing and addressing previous feedback. It should also be easier to review since it builds on several refactorings. Some things to note: 1. I [submitted a PR to lokijs](https://github.com/techfort/LokiJS/pull/718) which still hasn't been merged, though the author says he'll start working on it soon. Therefore, in in interim, I've published [@moocar/lokijs](https://www.npmjs.com/package/@moocar/lokijs). 1. I haven't implemented auto indexing of query fields yet. I'll attack that next. 1. I suggest we ask the community to try out the feature flag once it's merged to get feedback. All the tests pass, but this is such a big change that we'll want to test it gradually 1. While loki uses the same mongo query language as sift, they do have different behavior. Most of my time on this PR was spent ensuring that loki behaves **exactly** like sift. See [db/loki/nodes-query.js](https://github.com/gatsbyjs/gatsby/blob/cddbe893a4ce638babb1cbe5e5da4c13b6f5e57d/packages/gatsby/src/db/loki/nodes-query.js). But there's a chance a few edge cases have slipped through the cracks. 1. the feature flag works with the tests too `GATSBY_DB_NODES=loki yarn test`. We should perhaps look into running this on all PRs --- packages/gatsby/package.json | 1 + packages/gatsby/src/bootstrap/index.js | 27 + .../src/db/__tests__/fixtures/ensure-loki.js | 8 + .../src/db/__tests__/node-tracking-test.js | 124 ++- packages/gatsby/src/db/__tests__/nodes.js | 347 ++++++++ .../gatsby/src/db/loki/__tests__/index.js | 12 + .../src/db/loki/__tests__/nodes-query-test.js | 56 ++ .../gatsby/src/db/loki/__tests__/nodes.js | 30 + .../gatsby/src/db/loki/custom-comparators.js | 218 +++++ packages/gatsby/src/db/loki/index.js | 126 +++ packages/gatsby/src/db/loki/nodes-query.js | 309 +++++++ packages/gatsby/src/db/loki/nodes.js | 345 +++++++- packages/gatsby/src/db/node-tracking.js | 18 +- packages/gatsby/src/db/nodes-query.js | 52 ++ packages/gatsby/src/db/nodes.js | 72 +- .../__tests__/__snapshots__/nodes.js.snap | 14 +- packages/gatsby/src/redux/__tests__/nodes.js | 360 +------- packages/gatsby/src/redux/actions.js | 1 + packages/gatsby/src/redux/index.js | 2 +- packages/gatsby/src/redux/nodes.js | 32 - packages/gatsby/src/redux/reducers/index.js | 24 +- packages/gatsby/src/redux/run-sift.js | 8 +- ...p => connection-input-fields-test.js.snap} | 4 +- .../__tests__/build-node-connections-test.js | 5 +- .../schema/__tests__/build-node-types-test.js | 23 +- .../__tests__/connection-input-fields-test.js | 272 ++++++ .../connections-filter-on-linked-nodes.js | 293 +++++++ .../infer-graphql-input-type-test.js | 811 +----------------- .../__tests__/infer-graphql-type-test.js | 4 + .../gatsby/src/schema/__tests__/run-query.js | 470 ++++++++++ .../src/schema/build-node-connections.js | 2 +- .../gatsby/src/schema/build-node-types.js | 22 +- packages/gatsby/src/schema/index.js | 4 +- .../src/schema/infer-graphql-input-fields.js | 1 + .../gatsby/src/schema/infer-graphql-type.js | 22 +- packages/gatsby/src/schema/lazy-fields.js | 64 ++ yarn.lock | 5 + 37 files changed, 2850 insertions(+), 1338 deletions(-) create mode 100644 packages/gatsby/src/db/__tests__/fixtures/ensure-loki.js create mode 100644 packages/gatsby/src/db/__tests__/nodes.js create mode 100644 packages/gatsby/src/db/loki/__tests__/index.js create mode 100644 packages/gatsby/src/db/loki/__tests__/nodes-query-test.js create mode 100644 packages/gatsby/src/db/loki/__tests__/nodes.js create mode 100644 packages/gatsby/src/db/loki/custom-comparators.js create mode 100644 packages/gatsby/src/db/loki/index.js create mode 100644 packages/gatsby/src/db/loki/nodes-query.js create mode 100644 packages/gatsby/src/db/nodes-query.js rename packages/gatsby/src/schema/__tests__/__snapshots__/{infer-graphql-input-type-test.js.snap => connection-input-fields-test.js.snap} (89%) create mode 100644 packages/gatsby/src/schema/__tests__/connection-input-fields-test.js create mode 100644 packages/gatsby/src/schema/__tests__/connections-filter-on-linked-nodes.js create mode 100644 packages/gatsby/src/schema/__tests__/run-query.js create mode 100644 packages/gatsby/src/schema/lazy-fields.js diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 4b6259155b822..4e9fe529e5411 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -16,6 +16,7 @@ "@babel/polyfill": "^7.0.0", "@babel/runtime": "^7.0.0", "@babel/traverse": "^7.0.0", + "@moocar/lokijs": "^1.0.1", "@reach/router": "^1.1.1", "autoprefixer": "^8.6.5", "babel-core": "7.0.0-bridge.0", diff --git a/packages/gatsby/src/bootstrap/index.js b/packages/gatsby/src/bootstrap/index.js index e60ce6796ec5f..fdd5ec63c8beb 100644 --- a/packages/gatsby/src/bootstrap/index.js +++ b/packages/gatsby/src/bootstrap/index.js @@ -20,6 +20,7 @@ const report = require(`gatsby-cli/lib/reporter`) const getConfigFile = require(`./get-config-file`) const tracer = require(`opentracing`).globalTracer() const preferDefault = require(`./prefer-default`) +const nodeTracking = require(`../db/node-tracking`) // Show stack trace on unhandled promises. process.on(`unhandledRejection`, (reason, p) => { @@ -221,6 +222,32 @@ module.exports = async (args: BootstrapArgs) => { activity.end() + if (process.env.GATSBY_DB_NODES === `loki`) { + const loki = require(`../db/loki`) + // Start the nodes database (in memory loki js with interval disk + // saves). If data was saved from a previous build, it will be + // loaded here + activity = report.activityTimer(`start nodes db`, { + parentSpan: bootstrapSpan, + }) + activity.start() + const dbSaveFile = `${program.directory}/.cache/loki/loki.db` + try { + await loki.start({ + saveFile: dbSaveFile, + }) + } catch (e) { + report.error( + `Error starting DB. Perhaps try deleting ${path.dirname(dbSaveFile)}` + ) + } + activity.end() + } + + // By now, our nodes database has been loaded, so ensure that we + // have tracked all inline objects + nodeTracking.trackDbNodes() + // Copy our site files to the root of the site. activity = report.activityTimer(`copy gatsby files`, { parentSpan: bootstrapSpan, diff --git a/packages/gatsby/src/db/__tests__/fixtures/ensure-loki.js b/packages/gatsby/src/db/__tests__/fixtures/ensure-loki.js new file mode 100644 index 0000000000000..e02a612f28ce0 --- /dev/null +++ b/packages/gatsby/src/db/__tests__/fixtures/ensure-loki.js @@ -0,0 +1,8 @@ +const { backend } = require(`../../nodes`) + +module.exports = () => { + if (backend === `loki`) { + const lokiDb = require(`../../loki`) + beforeAll(lokiDb.start) + } +} diff --git a/packages/gatsby/src/db/__tests__/node-tracking-test.js b/packages/gatsby/src/db/__tests__/node-tracking-test.js index c73b760e5e390..491a346c95ed9 100644 --- a/packages/gatsby/src/db/__tests__/node-tracking-test.js +++ b/packages/gatsby/src/db/__tests__/node-tracking-test.js @@ -1,72 +1,57 @@ -const { readFile, writeFile } = require(`fs-extra`) - -jest.mock(`fs`) -jest.mock(`fs-extra`, () => { +const { store } = require(`../../redux`) +const { + boundActionCreators: { createNode }, +} = require(`../../redux/actions`) +const { getNode } = require(`../../db/nodes`) +const { findRootNodeAncestor, trackDbNodes } = require(`../node-tracking`) +const nodeTypes = require(`../../schema/build-node-types`) +const { run: runQuery } = require(`../nodes-query`) +require(`./fixtures/ensure-loki`)() + +function makeNode() { return { - readFile: jest.fn(() => `contents`), - writeFile: jest.fn(), - } -}) - -afterEach(() => { - readFile.mockClear() - writeFile.mockClear() -}) - -describe(`Track root nodes`, () => { - const reduxStatePath = `${process.cwd()}/.cache/redux-state.json` - const MOCK_FILE_INFO = {} - MOCK_FILE_INFO[reduxStatePath] = ` - { - "nodes": { - "id1": { - "id": "id1", - "parent": null, - "children": [], - "inlineObject": { - "field": "fieldOfFirstNode" - }, - "inlineArray": [ - 1, 2, 3 - ], - "internal": { - "type": "TestNode", - "contentDigest": "digest1", - "owner": "test" - } - } - } - } - ` - require(`fs`).__setMockFiles(MOCK_FILE_INFO) - - const { getNode } = require(`../../db/nodes`) - const { findRootNodeAncestor } = require(`../node-tracking`) - const { runQuery } = require(`../../db/nodes`) - const buildNodeTypes = require(`../../schema/build-node-types`) - const { - boundActionCreators: { createNode }, - } = require(`../../redux/actions`) - - createNode( - { - id: `id2`, - parent: null, - children: [], - inlineObject: { - field: `fieldOfSecondNode`, - }, - inlineArray: [1, 2, 3], - internal: { - type: `TestNode`, - contentDigest: `digest2`, - }, + id: `id1`, + parent: null, + children: [], + inlineObject: { + field: `fieldOfFirstNode`, + }, + inlineArray: [1, 2, 3], + internal: { + type: `TestNode`, + contentDigest: `digest1`, + owner: `test`, }, - { - name: `test`, + } +} + +describe(`track root nodes`, () => { + beforeEach(() => { + const nodes = [makeNode()] + store.dispatch({ type: `DELETE_CACHE` }) + for (const node of nodes) { + store.dispatch({ type: `CREATE_NODE`, payload: node }) } - ) - + trackDbNodes() + createNode( + { + id: `id2`, + parent: null, + children: [], + inlineObject: { + field: `fieldOfSecondNode`, + }, + inlineArray: [1, 2, 3], + internal: { + type: `TestNode`, + contentDigest: `digest2`, + }, + }, + { + name: `test`, + } + ) + }) describe(`Tracks nodes read from redux state cache`, () => { it(`Tracks inline objects`, () => { const node = getNode(`id1`) @@ -75,7 +60,6 @@ describe(`Track root nodes`, () => { expect(trackedRootNode).toEqual(node) }) - it(`Tracks inline arrays`, () => { const node = getNode(`id1`) const inlineObject = node.inlineArray @@ -83,7 +67,6 @@ describe(`Track root nodes`, () => { expect(trackedRootNode).toEqual(node) }) - it(`Doesn't track copied objects`, () => { const node = getNode(`id1`) const copiedInlineObject = { ...node.inlineObject } @@ -92,7 +75,6 @@ describe(`Track root nodes`, () => { expect(trackedRootNode).not.toEqual(node) }) }) - describe(`Tracks nodes created using createNode action`, () => { it(`Tracks inline objects`, () => { const node = getNode(`id2`) @@ -103,11 +85,11 @@ describe(`Track root nodes`, () => { }) }) - describe(`Tracks nodes returned by running sift`, () => { + describe(`Tracks nodes returned by queries`, () => { let type beforeAll(async () => { - type = (await buildNodeTypes({})).testNode.nodeObjectType + type = (await nodeTypes.buildAll({})).testNode.nodeObjectType }) it(`Tracks objects when running query without filter`, async () => { diff --git a/packages/gatsby/src/db/__tests__/nodes.js b/packages/gatsby/src/db/__tests__/nodes.js new file mode 100644 index 0000000000000..61fc4437822de --- /dev/null +++ b/packages/gatsby/src/db/__tests__/nodes.js @@ -0,0 +1,347 @@ +const { actions } = require(`../../redux/actions`) +const { getNode, getNodes } = require(`../nodes`) +const { store } = require(`../../redux`) +require(`./fixtures/ensure-loki`)() + +describe(`nodes db tests`, () => { + beforeEach(() => { + store.dispatch({ type: `DELETE_CACHE` }) + }) + it(`deletes previously transformed children nodes when the parent node is updated`, () => { + store.dispatch( + actions.createNode( + { + id: `hi`, + children: [], + parent: null, + internal: { + contentDigest: `hasdfljds`, + type: `Test`, + }, + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.createNode( + { + id: `hi-1`, + children: [], + parent: `hi`, + internal: { + contentDigest: `hasdfljds-1`, + type: `Test-1`, + }, + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.createParentChildLink( + { + parent: getNode(`hi`), + child: getNode(`hi-1`), + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.createNode( + { + id: `hi-1-1`, + children: [], + parent: `hi-1`, + internal: { + contentDigest: `hasdfljds-1-1`, + type: `Test-1-1`, + }, + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.createParentChildLink( + { + parent: getNode(`hi-1`), + child: getNode(`hi-1-1`), + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.createNode( + { + id: `hi`, + children: [], + parent: `test`, + internal: { + contentDigest: `hasdfljds2`, + type: `Test`, + }, + }, + { + name: `tests`, + } + ) + ) + expect(getNodes()).toHaveLength(1) + }) + + it(`deletes previously transformed children nodes when the parent node is deleted`, () => { + store.dispatch( + actions.createNode( + { + id: `hi`, + children: [], + parent: `test`, + internal: { + contentDigest: `hasdfljds`, + type: `Test`, + }, + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.createNode( + { + id: `hi2`, + children: [], + parent: `test`, + internal: { + contentDigest: `hasdfljds`, + type: `Test`, + }, + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.createNode( + { + id: `hi-1`, + children: [], + parent: `hi`, + internal: { + contentDigest: `hasdfljds-1`, + type: `Test-1`, + }, + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.createParentChildLink( + { + parent: getNode(`hi`), + child: getNode(`hi-1`), + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.createNode( + { + id: `hi-1-1`, + children: [], + parent: `hi-1`, + internal: { + contentDigest: `hasdfljds-1-1`, + type: `Test-1-1`, + }, + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.createParentChildLink( + { + parent: getNode(`hi-1`), + child: getNode(`hi-1-1`), + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.deleteNode( + { + node: getNode(`hi`), + }, + { + name: `tests`, + } + ) + ) + expect(getNodes()).toHaveLength(1) + }) + it(`deletes previously transformed children nodes when parent nodes are deleted`, () => { + store.dispatch( + actions.createNode( + { + id: `hi`, + children: [], + parent: `test`, + internal: { + contentDigest: `hasdfljds`, + type: `Test`, + }, + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.createNode( + { + id: `hi-1`, + children: [], + parent: `hi`, + internal: { + contentDigest: `hasdfljds-1`, + type: `Test-1`, + }, + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.createParentChildLink( + { + parent: getNode(`hi`), + child: getNode(`hi-1`), + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.createNode( + { + id: `hi-1-1`, + children: [], + parent: `hi-1`, + internal: { + contentDigest: `hasdfljds-1-1`, + type: `Test-1-1`, + }, + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.createParentChildLink( + { + parent: getNode(`hi-1`), + child: getNode(`hi-1-1`), + }, + { + name: `tests`, + } + ) + ) + store.dispatch( + actions.deleteNode( + { node: getNode(`hi`) }, + { + name: `tests`, + } + ) + ) + expect(getNodes()).toHaveLength(0) + }) + it(`allows deleting nodes`, () => { + actions.createNode( + { + id: `hi`, + children: [], + parent: `test`, + internal: { + contentDigest: `hasdfljds`, + type: `Test`, + }, + pickle: true, + deep: { + array: [ + 0, + 1, + { + boom: true, + }, + ], + }, + }, + { + name: `tests`, + } + ) + actions.deleteNode({ + node: getNode(`hi`), + }) + expect(getNode(`hi`)).toBeUndefined() + }) + + it(`warns when using old deleteNode signature `, () => { + console.warn = jest.fn() + store.dispatch( + actions.createNode( + { + id: `hi`, + children: [], + parent: `test`, + internal: { + contentDigest: `hasdfljds`, + type: `Test`, + }, + }, + { + name: `tests`, + } + ) + ) + expect(getNode(`hi`)).toMatchObject({ id: `hi` }) + store.dispatch( + actions.deleteNode(`hi`, getNode(`hi`), { + name: `tests`, + }) + ) + expect(getNode(`hi`)).toBeUndefined() + const deprecationNotice = `Calling "deleteNode" with a nodeId is deprecated. Please pass an object containing a full node instead: deleteNode({ node })` + expect(console.warn).toHaveBeenCalledWith(deprecationNotice) + console.warn.mockRestore() + }) + + it(`does not crash when delete node is called on undefined`, () => { + actions.deleteNode(undefined, { + name: `tests`, + }) + expect(getNodes()).toHaveLength(0) + }) +}) diff --git a/packages/gatsby/src/db/loki/__tests__/index.js b/packages/gatsby/src/db/loki/__tests__/index.js new file mode 100644 index 0000000000000..45e0988c4f064 --- /dev/null +++ b/packages/gatsby/src/db/loki/__tests__/index.js @@ -0,0 +1,12 @@ +const { colls, getDb, start } = require(`../index`) + +describe(`db`, () => { + start() + it(`should create system collections`, () => { + const db = getDb() + const nodeMetaColl = db.getCollection(colls.nodeMeta.name) + const nodeTypesColl = db.getCollection(colls.nodeTypes.name) + expect(nodeMetaColl).toBeDefined() + expect(nodeTypesColl).toBeDefined() + }) +}) diff --git a/packages/gatsby/src/db/loki/__tests__/nodes-query-test.js b/packages/gatsby/src/db/loki/__tests__/nodes-query-test.js new file mode 100644 index 0000000000000..fbde8ade5970e --- /dev/null +++ b/packages/gatsby/src/db/loki/__tests__/nodes-query-test.js @@ -0,0 +1,56 @@ +if (process.env.GATSBY_DB_NODES === `loki`) { + const _ = require(`lodash`) + const nodeTypes = require(`../../../schema/build-node-types`) + const { store } = require(`../../../redux`) + const runQuery = require(`../nodes-query`) + const { getNodeTypeCollection } = require(`../nodes`) + const lokiDb = require(`../index`) + + function makeNodes() { + return [ + { + id: `1`, + internal: { type: `Test` }, + children: [], + foo: `bar`, + }, + ] + } + + async function runQueries(nodes, n) { + for (const node of nodes) { + store.dispatch({ type: `CREATE_NODE`, payload: node }) + } + const gqlType = nodeTypes.buildNodeObjectType({ + typeName: `Test`, + nodes, + pluginFields: [], + processedTypes: {}, + }) + const queryArgs = { filter: { foo: { eq: `bar` } } } + const args = { gqlType, queryArgs } + return await Promise.all(_.map(new Array(n), () => runQuery(args))) + } + + describe(`query indexing`, () => { + beforeEach(async () => { + await lokiDb.start() + store.dispatch({ type: `DELETE_CACHE` }) + }) + it(`does not create index when query run 1 time`, async () => { + await runQueries(makeNodes(), 1) + const coll = getNodeTypeCollection(`Test`) + expect(coll.binaryIndices.hasOwnProperty(`foo`)).toEqual(false) + }) + + it(`creates index when query run 5 times`, async () => { + await runQueries(makeNodes(), 5) + const coll = getNodeTypeCollection(`Test`) + expect(coll.binaryIndices.hasOwnProperty(`foo`)).toEqual(true) + }) + }) +} else { + it(`skipping loki nodes-query-test`, () => { + expect(true).toEqual(true) + }) +} diff --git a/packages/gatsby/src/db/loki/__tests__/nodes.js b/packages/gatsby/src/db/loki/__tests__/nodes.js new file mode 100644 index 0000000000000..b520d666a05ac --- /dev/null +++ b/packages/gatsby/src/db/loki/__tests__/nodes.js @@ -0,0 +1,30 @@ +const { start, getDb, colls } = require(`../index`) +const { createNode, deleteNode } = require(`../nodes`) + +const type = `Test` +const node = { + id: `1`, + foo: `bar`, + internal: { type: type }, +} + +beforeAll(start) + +describe(`node`, () => { + it(`should create node ID index`, () => { + createNode(node) + const nodeMetaColl = getDb().getCollection(colls.nodeMeta.name) + expect(nodeMetaColl).toBeDefined() + const nodeMeta = nodeMetaColl.by(`id`, node.id) + const nodeTypeColl = getDb().getCollection(nodeMeta.typeCollName) + expect(nodeTypeColl).toBeDefined() + expect(nodeTypeColl.name).toEqual(`gatsby:nodeType:${type}`) + }) + + it(`should delete node ID index`, () => { + deleteNode(node) + const nodeMetaColl = getDb().getCollection(colls.nodeMeta.name) + const nodeMeta = nodeMetaColl.by(`id`, node.id) + expect(nodeMeta).toBeUndefined() + }) +}) diff --git a/packages/gatsby/src/db/loki/custom-comparators.js b/packages/gatsby/src/db/loki/custom-comparators.js new file mode 100644 index 0000000000000..78eef70924d70 --- /dev/null +++ b/packages/gatsby/src/db/loki/custom-comparators.js @@ -0,0 +1,218 @@ +// Gatsby has very specific sorting requirements. Specifically, +// undefined > null > everything else. So, if an orderby `desc` is +// specified, then nulls and undefined values are of higher rank. This +// is due to the use of lodash's `orderBy` function in +// `run-sift`. +// +// The below functions are alternate versions of the comparators used +// by loki that match lodash's behavior +// +// Note: This is quite hacky and not officially supported by Loki, but +// works quite well. +// +// The below implementation is a direct copy of Loki, except that +// undefined's rank is 11, and null's rank is 10. Whereas in loki, +// they are both of rank 1 + +function ltHelper(prop1, prop2, equal) { + var cv1, cv2, t1, t2 + + // if one of the params is falsy or strictly true or not equal to itself + // 0, 0.0, "", NaN, null, undefined, not defined, false, true + if ( + !prop1 || + !prop2 || + prop1 === true || + prop2 === true || + prop1 !== prop1 || + prop2 !== prop2 + ) { + switch (prop1) { + case undefined: + t1 = 11 + break + case null: + t1 = 10 + break + case false: + t1 = 3 + break + case true: + t1 = 4 + break + case ``: + t1 = 5 + break + // if strict equal probably 0 so sort higher, otherwise + // probably NaN so sort lower than even null + default: + t1 = prop1 === prop1 ? 9 : 0 + break + } + + switch (prop2) { + case undefined: + t2 = 11 + break + case null: + t2 = 10 + break + case false: + t2 = 3 + break + case true: + t2 = 4 + break + case ``: + t2 = 5 + break + default: + t2 = prop2 === prop2 ? 9 : 0 + break + } + + // one or both is edge case + if (t1 !== 9 || t2 !== 9) { + return t1 === t2 ? equal : t1 < t2 + } + } + + // if both are numbers (string encoded or not), compare as numbers + cv1 = Number(prop1) + cv2 = Number(prop2) + + if (cv1 === cv1 && cv2 === cv2) { + if (cv1 < cv2) return true + if (cv1 > cv2) return false + return equal + } + + if (cv1 === cv1 && cv2 !== cv2) { + return true + } + + if (cv2 === cv2 && cv1 !== cv1) { + return false + } + + if (prop1 < prop2) return true + if (prop1 > prop2) return false + if (prop1 == prop2) return equal + + // not strict equal nor less than nor gt so must be mixed types, convert to string and use that to compare + cv1 = prop1.toString() + cv2 = prop2.toString() + + if (cv1 < cv2) { + return true + } + + if (cv1 == cv2) { + return equal + } + + return false +} + +function gtHelper(prop1, prop2, equal) { + var cv1, cv2, t1, t2 + + // 'falsy' and Boolean handling + if ( + !prop1 || + !prop2 || + prop1 === true || + prop2 === true || + prop1 !== prop1 || + prop2 !== prop2 + ) { + switch (prop1) { + case undefined: + t1 = 11 + break + case null: + t1 = 10 + break + case false: + t1 = 3 + break + case true: + t1 = 4 + break + case ``: + t1 = 5 + break + // NaN 0 + default: + t1 = prop1 === prop1 ? 9 : 0 + break + } + + switch (prop2) { + case undefined: + t2 = 11 + break + case null: + t2 = 10 + break + case false: + t2 = 3 + break + case true: + t2 = 4 + break + case ``: + t2 = 5 + break + default: + t2 = prop2 === prop2 ? 9 : 0 + break + } + + // one or both is edge case + if (t1 !== 9 || t2 !== 9) { + return t1 === t2 ? equal : t1 > t2 + } + } + + // if both are numbers (string encoded or not), compare as numbers + cv1 = Number(prop1) + cv2 = Number(prop2) + if (cv1 === cv1 && cv2 === cv2) { + if (cv1 > cv2) return true + if (cv1 < cv2) return false + return equal + } + + if (cv1 === cv1 && cv2 !== cv2) { + return false + } + + if (cv2 === cv2 && cv1 !== cv1) { + return true + } + + if (prop1 > prop2) return true + if (prop1 < prop2) return false + if (prop1 == prop2) return equal + + // not strict equal nor less than nor gt so must be dates or mixed types + // convert to string and use that to compare + cv1 = prop1.toString() + cv2 = prop2.toString() + + if (cv1 > cv2) { + return true + } + + if (cv1 == cv2) { + return equal + } + + return false +} + +module.exports = { + ltHelper, + gtHelper, +} diff --git a/packages/gatsby/src/db/loki/index.js b/packages/gatsby/src/db/loki/index.js new file mode 100644 index 0000000000000..09ab744376788 --- /dev/null +++ b/packages/gatsby/src/db/loki/index.js @@ -0,0 +1,126 @@ +const _ = require(`lodash`) +const fs = require(`fs-extra`) +const path = require(`path`) +const loki = require(`@moocar/lokijs`) +const uuidv4 = require(`uuid/v4`) +const customComparators = require(`./custom-comparators`) + +// Ensure sorting behavior matches old lodash `orderBy` +// implementation. See `custom-comparators.js` for why. +loki.Comparators.lt = customComparators.ltHelper +loki.Comparators.gt = customComparators.gtHelper + +// Loki is a document store with the same semantics as mongo. This +// means there are no tables or relationships. Just a bunch of +// collections, each with objects. +// +// Gatsby stores nodes in collections by splitting them up by their +// `node.internal.type`. All nodes of a particular type go in 1 +// collection. The below `colls` object contains the metadata for +// these collections, and the "meta collections" used to track them. +// +// You won't use these directly. They are used by the collection +// functions in `./nodes.js`. E.g `getTypeCollName()` and +// `getNodeTypeCollection` +const colls = { + // Each object has keys `id` and `typeCollName`. It's a way of + // quickly looking up the collection that a node is contained in. + // E.g { id: `someNodeId`, typeCollName: `gatsby:nodeType:myType` } + nodeMeta: { + name: `gatsby:nodeMeta`, + options: { + unique: [`id`], + indices: [`id`], + }, + }, + // The list of all node type collections. Each object has keys + // `type` and `collName` so you can quickly look up the collection + // name for a node type. + // e.g { type: `myType`, collName: `gatsby:nodeType:myType` } + nodeTypes: { + name: `gatsby:nodeTypes`, + options: { + unique: [`type`, `collName`], + indices: [`type`], + }, + }, +} + +// Must be set using `start()` +let db + +/** + * Ensures that the collections that support nodes have been + * created. See `colls` var in this file + */ +function ensureNodeCollections(db) { + _.forEach(colls, collInfo => { + const { name, options } = collInfo + db.addCollection(name, options) + }) +} + +function startFileDb(saveFile) { + return new Promise((resolve, reject) => { + const dbOptions = { + autoload: true, + autoloadCallback: err => { + if (err) { + reject(err) + } else { + resolve() + } + }, + autosave: true, + autosaveInterval: 1000, + } + db = new loki(saveFile, dbOptions) + }) +} + +async function startInMemory() { + // Use uuid purely for a random name + db = new loki(uuidv4()) +} + +/** + * Starts a loki database. If the file already exists, it will be + * loaded as the database state. If not, a new database will be + * created. If `saveFile` is omitted, an in-memory DB will be created. + * + * @param {string} saveFile on disk file that the database will be + * saved and loaded from. If this is omitted, an in-memory database + * will be created instead + * @returns {Promise} promise that is resolved once the database and + * the existing state has been loaded (if there was an existing + * saveFile) + */ +async function start({ saveFile } = {}) { + if (saveFile && !_.isString(saveFile)) { + throw new Error(`saveFile must be a path`) + } + if (saveFile) { + const saveDir = path.dirname(saveFile) + await fs.ensureDir(saveDir) + await startFileDb(saveFile) + } else { + await startInMemory() + } + ensureNodeCollections(db) +} + +/** + * Returns a reference to the database. If undefined, the db has not been + * initalized yet. Call `start()` + * + * @returns {Object} database, or undefined + */ +function getDb() { + return db +} + +module.exports = { + start, + getDb, + colls, +} diff --git a/packages/gatsby/src/db/loki/nodes-query.js b/packages/gatsby/src/db/loki/nodes-query.js new file mode 100644 index 0000000000000..3620b08c05cb3 --- /dev/null +++ b/packages/gatsby/src/db/loki/nodes-query.js @@ -0,0 +1,309 @@ +const _ = require(`lodash`) +const prepareRegex = require(`../../utils/prepare-regex`) +const { getNodeTypeCollection } = require(`./nodes`) +const sift = require(`sift`) +const { emitter } = require(`../../redux`) + +// Cleared on DELETE_CACHE +const fieldUsages = {} +const FIELD_INDEX_THRESHOLD = 5 + +emitter.on(`DELETE_CACHE`, () => { + for (var field in fieldUsages) { + delete fieldUsages[field] + } +}) + +// Takes a raw graphql filter and converts it into a mongo-like args +// object that can be understood by the `sift` library. E.g `eq` +// becomes `$eq` +function siftifyArgs(object) { + const newObject = {} + _.each(object, (v, k) => { + if (_.isPlainObject(v)) { + if (k === `elemMatch`) { + k = `$elemMatch` + } + newObject[k] = siftifyArgs(v) + } else { + // Compile regex first. + if (k === `regex`) { + newObject[`$regex`] = prepareRegex(v) + } else if (k === `glob`) { + const Minimatch = require(`minimatch`).Minimatch + const mm = new Minimatch(v) + newObject[`$regex`] = mm.makeRe() + } else { + newObject[`$${k}`] = v + } + } + }) + return newObject +} + +// filter nodes using the `sift` library. But isn't this a loki query +// file? Yes, but we need to support all functionality provided by +// `run-sift`, and there are some operators that loki can't +// support. Like `elemMatch`, so for those fields, we fall back to +// sift +function runSift(nodes, query) { + if (nodes) { + const siftQuery = { + $elemMatch: siftifyArgs(query), + } + return sift(siftQuery, nodes) + } else { + return null + } +} + +// Takes a raw graphql filter and converts it into a mongo-like args +// object that can be understood by loki. E.g `eq` becomes +// `$eq`. gqlFilter should be the raw graphql filter returned from +// graphql-js. e.g gqlFilter: +// +// { +// internal: { +// type: { +// eq: "TestNode" +// }, +// content: { +// glob: "et" +// } +// }, +// id: { +// glob: "12*" +// } +// } +// +// would return +// +// { +// internal: { +// type: { +// $eq: "TestNode" // append $ to eq +// }, +// content: { +// $regex: new MiniMatch(v) // convert glob to regex +// } +// }, +// id: { +// $regex: // as above +// } +// } +function toMongoArgs(gqlFilter, lastFieldType) { + const mongoArgs = {} + _.each(gqlFilter, (v, k) => { + if (_.isPlainObject(v)) { + if (k === `elemMatch`) { + // loki doesn't support elemMatch, so use sift (see runSift + // comment above) + mongoArgs[`$where`] = obj => { + const result = runSift(obj, v) + return result && result.length > 0 + } + } else { + const gqlFieldType = lastFieldType.getFields()[k].type + mongoArgs[k] = toMongoArgs(v, gqlFieldType) + } + } else { + // Compile regex first. + if (k === `regex`) { + mongoArgs[`$regex`] = prepareRegex(v) + } else if (k === `glob`) { + const Minimatch = require(`minimatch`).Minimatch + const mm = new Minimatch(v) + mongoArgs[`$regex`] = mm.makeRe() + } else if ( + k === `in` && + lastFieldType && + lastFieldType.constructor.name === `GraphQLList` + ) { + mongoArgs[`$containsAny`] = v + } else if ( + k === `nin` && + lastFieldType.constructor.name === `GraphQLList` + ) { + mongoArgs[`$containsNone`] = v + } else if (k === `ne` && v === null) { + mongoArgs[`$ne`] = undefined + } else if (k === `nin` && lastFieldType.name === `Boolean`) { + mongoArgs[`$nin`] = v.concat([false]) + } else { + mongoArgs[`$${k}`] = v + } + } + }) + return mongoArgs +} + +// Converts a nested mongo args object into a dotted notation. acc +// (accumulator) must be a reference to an empty object. The converted +// fields will be added to it. E.g +// +// { +// internal: { +// type: { +// $eq: "TestNode" +// }, +// content: { +// $regex: new MiniMatch(v) +// } +// }, +// id: { +// $regex: newMiniMatch(v) +// } +// } +// +// After execution, acc would be: +// +// { +// "internal.type": { +// $eq: "TestNode" +// }, +// "internal.content": { +// $regex: new MiniMatch(v) +// }, +// "id": { +// $regex: // as above +// } +// } +function dotNestedFields(acc, o, path = ``) { + if (_.isPlainObject(o)) { + if (_.isPlainObject(_.sample(o))) { + _.forEach(o, (v, k) => { + dotNestedFields(acc, v, path + `.` + k) + }) + } else { + acc[_.trimStart(path, `.`)] = o + } + } +} + +// The query language that Gatsby has used since day 1 is `sift`. Both +// sift and loki are mongo-like query languages, but they have some +// subtle differences. One is that in sift, a nested filter such as +// `{foo: {bar: {ne: true} } }` will return true if the foo field +// doesn't exist, is null, or bar is null. Whereas loki will return +// false if the foo field doesn't exist or is null. This ensures that +// loki queries behave like sift +function fixNeTrue(flattenedFields) { + return _.transform(flattenedFields, (result, v, k) => { + if (v[`$ne`] === true) { + const s = k.split(`.`) + if (s.length > 1) { + result[s[0]] = { + $or: [ + { + $exists: false, + }, + { + $where: obj => obj === null || obj[s[1]] !== true, + }, + ], + } + return result + } + } + result[k] = v + return result + }) +} + +// Converts graphQL args to a loki filter +function convertArgs(gqlArgs, gqlType) { + const dottedFields = {} + dotNestedFields(dottedFields, toMongoArgs(gqlArgs.filter, gqlType)) + return fixNeTrue(dottedFields) +} + +// Converts graphql Sort args into the form expected by loki, which is +// a vector where the first value is a field name, and the second is a +// boolean `isDesc`. Nested fields delimited by `___` are replaced by +// periods. E.g +// +// { +// fields: [ `frontmatter___date`, `id` ], +// order: `desc` +// } +// +// would return +// +// [ [ `frontmatter.date`, true ], [ `id`, false ] ] +// +// Note that the GraphQL Sort API provided by Gatsby doesn't allow the +// order to be specified per field. The sift implementation uses +// lodash `orderBy`, but only applies the sort order to the first +// field. So we do the same here +function toSortFields(sortArgs) { + const { fields, order } = sortArgs + const lokiSortFields = [] + for (let i = 0; i < fields.length; i++) { + const dottedField = fields[i].replace(/___/g, `.`) + const isDesc = i === 0 ? _.lowerCase(order) === `desc` : false + lokiSortFields.push([dottedField, isDesc]) + } + return lokiSortFields +} + +// Every time we run a query, we increment a counter for each of its +// fields, so that we can determine which fields are used the +// most. Any time a field is seen more than `FIELD_INDEX_THRESHOLD` +// times, we create a loki index so that future queries with that +// field will execute faster. +function ensureFieldIndexes(coll, lokiArgs) { + _.forEach(lokiArgs, (v, fieldName) => { + // Increment the usages of the field + _.update(fieldUsages, fieldName, n => (n ? n + 1 : 1)) + // If we have crossed the threshold, then create the index + if (_.get(fieldUsages, fieldName) === FIELD_INDEX_THRESHOLD) { + // Loki ensures that this is a noop if index already exists. E.g + // if it was previously added via a sort field + coll.ensureIndex(fieldName) + } + }) +} + +/** + * Runs the graphql query over the loki nodes db. + * + * @param {Object} args. Object with: + * + * {Object} gqlType: built during `./build-node-types.js` + * + * {Object} queryArgs: The raw graphql query as a js object. E.g `{ + * filter: { fields { slug: { eq: "/somepath" } } } }` + * + * {Object} context: The context from the QueryJob + * + * {boolean} firstOnly: Whether to return the first found match, or + * all matching results + * + * @returns {promise} A promise that will eventually be resolved with + * a collection of matching objects (even if `firstOnly` is true) + */ +async function runQuery({ gqlType, queryArgs, context = {}, firstOnly }) { + // Clone args as for some reason graphql-js removes the constructor + // from nested objects which breaks a check in sift.js. + const gqlArgs = JSON.parse(JSON.stringify(queryArgs)) + const lokiArgs = convertArgs(gqlArgs, gqlType) + const coll = getNodeTypeCollection(gqlType.name) + ensureFieldIndexes(coll, lokiArgs) + let chain = coll.chain().find(lokiArgs, firstOnly) + + if (gqlArgs.sort) { + const sortFields = toSortFields(gqlArgs.sort) + + // Create an index for each sort field. Indexing requires sorting + // so we lose nothing by ensuring an index is added for each sort + // field. Loki ensures this is a noop if the index already exists + for (const sortField of sortFields) { + coll.ensureIndex(sortField[0]) + } + chain = chain.compoundsort(sortFields) + } + + return chain.data() +} + +module.exports = runQuery diff --git a/packages/gatsby/src/db/loki/nodes.js b/packages/gatsby/src/db/loki/nodes.js index efe043758165c..9407c552100a7 100644 --- a/packages/gatsby/src/db/loki/nodes.js +++ b/packages/gatsby/src/db/loki/nodes.js @@ -1,12 +1,341 @@ -function notSupported() { - throw new Error(`Loki not supported yet`) +const _ = require(`lodash`) +const invariant = require(`invariant`) +const { getDb, colls } = require(`./index`) + +///////////////////////////////////////////////////////////////////// +// Node collection metadata +///////////////////////////////////////////////////////////////////// + +function makeTypeCollName(type) { + return `gatsby:nodeType:${type}` +} + +/** + * Creates a collection that will contain nodes of a certain type. The + * name of the collection for type `MyType` will be something like + * `gatsby:nodeType:MyType` (see `makeTypeCollName`) + */ +function createNodeTypeCollection(type) { + const collName = makeTypeCollName(type) + const nodeTypesColl = getDb().getCollection(colls.nodeTypes.name) + invariant(nodeTypesColl, `Collection ${colls.nodeTypes.name} should exist`) + nodeTypesColl.insert({ type, collName }) + // TODO what if `addCollection` fails? We will have inserted into + // nodeTypesColl but no collection will exist. Need to make this + // into a transaction + const options = { + unique: [`id`], + indices: [`id`], + disableMeta: true, + } + const coll = getDb().addCollection(collName, options) + return coll +} + +/** + * Returns the name of the collection that contains nodes of the + * specified type, where type is the node's `node.internal.type` + */ +function getTypeCollName(type) { + const nodeTypesColl = getDb().getCollection(colls.nodeTypes.name) + invariant(nodeTypesColl, `Collection ${colls.nodeTypes.name} should exist`) + let nodeTypeInfo = nodeTypesColl.by(`type`, type) + return nodeTypeInfo ? nodeTypeInfo.collName : undefined +} + +/** + * Returns a reference to the collection that contains nodes of the + * specified type, where type is the node's `node.internal.type` + */ +function getNodeTypeCollection(type) { + const typeCollName = getTypeCollName(type) + let coll + if (typeCollName) { + coll = getDb().getCollection(typeCollName) + invariant( + coll, + `Type [${type}] Collection doesn't exist for nodeTypeInfo: [${typeCollName}]` + ) + return coll + } else { + return undefined + } +} + +/** + * Deletes all empty node type collections, unless `force` is true, in + * which case it deletes the collections even if they have nodes in + * them + */ +function deleteNodeTypeCollections(force = false) { + const nodeTypesColl = getDb().getCollection(colls.nodeTypes.name) + // find() returns all objects in collection + const nodeTypes = nodeTypesColl.find() + for (const nodeType of nodeTypes) { + let coll = getDb().getCollection(nodeType.collName) + if (coll.count() === 0 || force) { + getDb().removeCollection(coll.name) + nodeTypesColl.remove(nodeType) + } + } +} + +/** + * Deletes all nodes from all the node type collections, including the + * id -> type metadata. There will be no nodes related data in loki + * after this is called + */ +function deleteAll() { + const db = getDb() + if (db) { + deleteNodeTypeCollections(true) + db.getCollection(colls.nodeMeta.name).clear() + } +} + +///////////////////////////////////////////////////////////////////// +// Queries +///////////////////////////////////////////////////////////////////// + +/** + * Returns the node with `id` == id, or null if not found + */ +function getNode(id) { + if (!id) { + return null + } + // First, find out which collection the node is in + const nodeMetaColl = getDb().getCollection(colls.nodeMeta.name) + invariant(nodeMetaColl, `nodeMeta collection should exist`) + const nodeMeta = nodeMetaColl.by(`id`, id) + if (nodeMeta) { + // Now get the collection and query it by the `id` field, which + // has an index on it + const { typeCollName } = nodeMeta + const typeColl = getDb().getCollection(typeCollName) + invariant( + typeColl, + `type collection ${typeCollName} referenced by nodeMeta but doesn't exist` + ) + return typeColl.by(`id`, id) + } else { + return undefined + } +} + +/** + * Returns all nodes of a type (where `typeName == + * node.internal.type`). This is an O(1) operation since nodes are + * already stored in seperate collections by type + */ +function getNodesByType(typeName) { + invariant(typeName, `typeName is null`) + const collName = getTypeCollName(typeName) + const coll = getDb().getCollection(collName) + if (!coll) return [] + return coll.data +} + +/** + * Returns the collection of all nodes. This should be deprecated and + * `getNodesByType` should be used instead. Or at least where possible + */ +function getNodes() { + const nodeTypes = getDb().getCollection(colls.nodeTypes.name).data + return _.flatMap(nodeTypes, nodeType => getNodesByType(nodeType.type)) +} + +/** + * Looks up the node by id, records a dependency between the node and + * the path, and then returns the node + * + * @param {string} id node id to lookup + * @param {string} path the page path to record a node dependency + * against + * @returns {Object} node or undefined if not found + */ +function getNodeAndSavePathDependency(id, path) { + invariant(id, `id is null`) + invariant(id, `path is null`) + const createPageDependency = require(`../../redux/actions/add-page-dependency`) + const node = getNode(id) + createPageDependency({ path, nodeId: id }) + return node +} + +/** + * Determine if node has changed (by comparing its + * `internal.contentDigest` + * + * @param {string} id + * @param {string} digest + * @returns {boolean} + */ +function hasNodeChanged(id, digest) { + const node = getNode(id) + if (!node) { + return true + } else { + return node.internal.contentDigest !== digest + } +} + +///////////////////////////////////////////////////////////////////// +// Create/Update/Delete +///////////////////////////////////////////////////////////////////// + +/** + * Creates a node in the DB. Will create a collection for the node + * type if one hasn't been created yet + * + * @param {Object} node The node to add. Must have an `id` and + * `internal.type` + */ +function createNode(node, oldNode) { + invariant(node.internal, `node has no "internal" field`) + invariant(node.internal.type, `node has no "internal.type" field`) + invariant(node.id, `node has no "id" field`) + + const type = node.internal.type + + // Loki doesn't provide "upsert", so if the node already exists, we + // delete and then create it + if (oldNode) { + deleteNode(oldNode) + } + + let nodeTypeColl = getNodeTypeCollection(type) + if (!nodeTypeColl) { + nodeTypeColl = createNodeTypeCollection(type) + } + + const nodeMetaColl = getDb().getCollection(colls.nodeMeta.name) + invariant(nodeMetaColl, `Collection ${colls.nodeMeta.name} should exist`) + nodeMetaColl.insert({ id: node.id, typeCollName: nodeTypeColl.name }) + // TODO what if this insert fails? We will have inserted the id -> + // collName mapping, but there won't be any nodes in the type + // collection. Need to create a transaction around this + return nodeTypeColl.insert(node) +} + +/** + * Updates a node in the DB. The contents of `node` will completely + * overwrite value in the DB. Note, `node` must be a loki node. i.e it + * has `$loki` and `meta` fields. + * + * @param {Object} node The new node information. This should be all + * the node information. Not just changes + */ +function updateNode(node) { + invariant(node.internal, `node has no "internal" field`) + invariant(node.internal.type, `node has no "internal.type" field`) + invariant(node.id, `node has no "id" field`) + + const type = node.internal.type + + let coll = getNodeTypeCollection(type) + invariant(coll, `${type} collection doesn't exist. When trying to update`) + coll.update(node) +} + +/** + * Deletes a node from its type collection and removes its id -> + * collName mapping. Function is idempotent. If the node has already + * been deleted, this is a noop. + * + * @param {Object} the node to delete. Must have an `id` and + * `internal.type` + */ +function deleteNode(node) { + invariant(node.internal, `node has no "internal" field`) + invariant(node.internal.type, `node has no "internal.type" field`) + invariant(node.id, `node has no "id" field`) + + const type = node.internal.type + + let nodeTypeColl = getNodeTypeCollection(type) + if (!nodeTypeColl) { + invariant( + nodeTypeColl, + `${type} collection doesn't exist. When trying to delete` + ) + } + + if (nodeTypeColl.by(`id`, node.id)) { + const nodeMetaColl = getDb().getCollection(colls.nodeMeta.name) + invariant(nodeMetaColl, `Collection ${colls.nodeMeta.name} should exist`) + nodeMetaColl.findAndRemove({ id: node.id }) + // TODO What if this `remove()` fails? We will have removed the id + // -> collName mapping, but not the actual node in the + // collection. Need to make this into a transaction + nodeTypeColl.remove(node) + } + // idempotent. Do nothing if node wasn't already in DB +} + +/** + * deprecated + */ +function deleteNodes(nodes) { + for (const node of nodes) { + deleteNode(node) + } } +///////////////////////////////////////////////////////////////////// +// Reducer +///////////////////////////////////////////////////////////////////// + +function reducer(state = new Map(), action) { + switch (action.type) { + case `DELETE_CACHE`: + deleteAll() + return null + + case `CREATE_NODE`: { + createNode(action.payload, action.oldNode) + return null + } + + case `ADD_FIELD_TO_NODE`: + case `ADD_CHILD_NODE_TO_PARENT_NODE`: + updateNode(action.payload) + return null + + case `DELETE_NODE`: { + deleteNode(action.payload) + return null + } + + case `DELETE_NODES`: { + deleteNodes(action.payload) + return null + } + + default: + return null + } +} + +///////////////////////////////////////////////////////////////////// +// Exports +///////////////////////////////////////////////////////////////////// + module.exports = { - getNodes: notSupported(), - getNode: notSupported(), - getNodesByType: notSupported(), - hasNodeChanged: notSupported(), - loadNodeContent: notSupported(), - getNodeAndSavePathDependency: notSupported(), + getNodeTypeCollection, + + getNodes, + getNode, + getNodesByType, + hasNodeChanged, + getNodeAndSavePathDependency, + + createNode, + updateNode, + deleteNode, + + deleteNodeTypeCollections, + deleteAll, + + reducer, } diff --git a/packages/gatsby/src/db/node-tracking.js b/packages/gatsby/src/db/node-tracking.js index 8d9905cbbfe5c..fa0e5587facb5 100644 --- a/packages/gatsby/src/db/node-tracking.js +++ b/packages/gatsby/src/db/node-tracking.js @@ -1,5 +1,5 @@ const _ = require(`lodash`) -const { getNode, getNodes } = require(`../db/nodes`) +const { getNode, getNodes } = require(`./nodes`) /** * Map containing links between inline objects or arrays @@ -57,7 +57,8 @@ const findRootNodeAncestor = (obj, predicate = null) => { while ( (!predicate || !predicate(rootNode)) && (rootNodeId = getRootNodeId(rootNode) || rootNode.parent) && - (getNode(rootNode.parent) !== undefined || getNode(rootNodeId)) && + ((rootNode.parent && getNode(rootNode.parent) !== undefined) || + getNode(rootNodeId)) && whileCount < 101 ) { if (rootNodeId) { @@ -77,14 +78,15 @@ const findRootNodeAncestor = (obj, predicate = null) => { return !predicate || predicate(rootNode) ? rootNode : null } +function trackDbNodes() { + _.each(getNodes(), node => { + trackInlineObjectsInRootNode(node) + }) +} + /** * @callback nodePredicate * @param {Node} node Node that is examined */ - exports.findRootNodeAncestor = findRootNodeAncestor - -// Track nodes that are already in store -_.each(getNodes(), node => { - trackInlineObjectsInRootNode(node) -}) +exports.trackDbNodes = trackDbNodes diff --git a/packages/gatsby/src/db/nodes-query.js b/packages/gatsby/src/db/nodes-query.js new file mode 100644 index 0000000000000..09273499d9ba4 --- /dev/null +++ b/packages/gatsby/src/db/nodes-query.js @@ -0,0 +1,52 @@ +const backend = process.env.GATSBY_DB_NODES || `redux` +const lokiRunQuery = require(`./loki/nodes-query`) +const siftRunQuery = require(`../redux/run-sift`) +const lazyFields = require(`../schema/lazy-fields`) + +function chooseQueryEngine(args) { + const { queryArgs, gqlType } = args + const { filter } = queryArgs + if (backend === `loki` && !lazyFields.contains(filter, gqlType)) { + return lokiRunQuery + } else { + return siftRunQuery + } +} + +/** + * Runs the query over all nodes of type. It must first select the + * appropriate query engine. Sift, or Loki. Sift is used by default, + * or if the query includes "lazy fields", those that need to be + * resolved before being queried. These could be either plugin fields, + * i.e those declared by plugins during the + * `setFieldsOnGraphQLNodeType` API, or they could be linked + * fields. See `../redux/run-sift.js` for more. + * + * If the query does *not* include lazy fields, and environment + * variable `GATSBY_DB_NODES` = `loki` then we can perform a much + * faster pure data query using loki. See `loki/nodes-query.js` for + * more. + * + * @param {Object} args. Object with: + * + * {Object} gqlType: built during `./build-node-types.js` + * + * {Object} queryArgs: The raw graphql query as a js object. E.g `{ + * filter: { fields { slug: { eq: "/somepath" } } } }` + * + * {Object} context: The context from the QueryJob + * + * {boolean} firstOnly: Whether to return the first found match, or + * all matching result. + * + * @returns {promise} A promise that will eventually be resolved with + * a collection of matching objects (even if `firstOnly` is true, in + * which case it will be a collection of length 1 or zero) + */ +function run(args) { + const queryFunction = chooseQueryEngine(args) + + return queryFunction(args) +} + +module.exports.run = run diff --git a/packages/gatsby/src/db/nodes.js b/packages/gatsby/src/db/nodes.js index 343474c9ec42f..281c3049597c3 100644 --- a/packages/gatsby/src/db/nodes.js +++ b/packages/gatsby/src/db/nodes.js @@ -1,3 +1,6 @@ +const _ = require(`lodash`) +const { store } = require(`../redux`) + const backend = process.env.GATSBY_DB_NODES || `redux` let nodesDb switch (backend) { @@ -13,52 +16,35 @@ switch (backend) { ) } -module.exports = nodesDb - -///////////////////////////////////////////////////////////////////// -// Run Query -///////////////////////////////////////////////////////////////////// - -function chooseQueryEngine(queryArgs) { - if (backend === `loki`) { - throw new Error(`loki not supported yet`) - } else { - return require(`../redux/run-sift`) - } -} +module.exports = { ...nodesDb } +module.exports.backend = backend /** - * Runs the query over all nodes of type. It must first select the - * appropriate query engine. Sift, or Loki. Sift is used if the query - * includes plugin fields, i.e those declared by plugins during the - * `setFieldsOnGraphQLNodeType` API. If it does, then we must iterate - * through all nodes calling the plugin field to make sure it's - * realized, then we can perform the query. See `query-sift.js` for - * more. - * - * If the query does *not* include plugin fields, then we can perform - * a much faster pure data query using loki. See `query-loki.js` for - * more. - * - * @param {Object} args. Object with: + * Get content for a node from the plugin that created it. * - * {Object} gqlType: built during `./build-node-types.js` - * - * {Object} queryArgs: The raw graphql query as a js object. E.g `{ - * filter: { fields { slug: { eq: "/somepath" } } } }` - * - * {Object} context: The context from the QueryJob - * - * {boolean} firstOnly: Whether to return the first found match, or - * all matching result. - * - * @returns {promise} A promise that will eventually be resolved with - * a collection of matching objects (even if `firstOnly` is true) + * @param {Object} node + * @returns {promise} */ -function runQuery(args) { - const queryFunction = chooseQueryEngine(args.queryArgs) +module.exports.loadNodeContent = node => { + if (_.isString(node.internal.content)) { + return Promise.resolve(node.internal.content) + } else { + return new Promise(resolve => { + // Load plugin's loader function + const plugin = store + .getState() + .flattenedPlugins.find(plug => plug.name === node.internal.owner) + const { loadNodeContent } = require(plugin.resolve) + if (!loadNodeContent) { + throw new Error( + `Could not find function loadNodeContent for plugin ${plugin.name}` + ) + } - return queryFunction(args) + return loadNodeContent(node).then(content => { + // TODO update node's content field here. + resolve(content) + }) + }) + } } - -module.exports.runQuery = runQuery diff --git a/packages/gatsby/src/redux/__tests__/__snapshots__/nodes.js.snap b/packages/gatsby/src/redux/__tests__/__snapshots__/nodes.js.snap index a73ef6c730b9b..18ba526c49176 100644 --- a/packages/gatsby/src/redux/__tests__/__snapshots__/nodes.js.snap +++ b/packages/gatsby/src/redux/__tests__/__snapshots__/nodes.js.snap @@ -24,6 +24,7 @@ Map { exports[`Create and update nodes allows creating nodes 1`] = ` Object { + "oldNode": undefined, "payload": Object { "children": Array [], "id": "hi", @@ -126,16 +127,3 @@ exports[`Create and update nodes throws error if a node sets a value on "fields" \\"name\\": \\"pluginA\\" }" `; - -exports[`Create and update nodes warns when using old deleteNode signature 1`] = ` -Object { - "children": Array [], - "id": "hi", - "internal": Object { - "contentDigest": "hasdfljds", - "owner": "tests", - "type": "Test", - }, - "parent": "test", -} -`; diff --git a/packages/gatsby/src/redux/__tests__/nodes.js b/packages/gatsby/src/redux/__tests__/nodes.js index 95e380749d1ed..f2954a7974678 100644 --- a/packages/gatsby/src/redux/__tests__/nodes.js +++ b/packages/gatsby/src/redux/__tests__/nodes.js @@ -1,9 +1,15 @@ +const Redux = require(`redux`) const { actions } = require(`../actions`) -const { store } = require(`../index`) -const { getNode } = require(`../nodes`) const nodeReducer = require(`../reducers/nodes`) const nodeTouchedReducer = require(`../reducers/nodes-touched`) +jest.mock(`../../db/nodes`) +jest.mock(`../nodes`) + +const store = Redux.createStore( + Redux.combineReducers({ nodeReducer, nodeTouchedReducer }), + {} +) describe(`Create and update nodes`, () => { beforeEach(() => { store.dispatch({ @@ -84,349 +90,6 @@ describe(`Create and update nodes`, () => { expect(state.get(`hi`).deep2.boom).toEqual(`foo`) }) - it(`deletes previously transformed children nodes when the parent node is updated`, () => { - store.dispatch( - actions.createNode( - { - id: `hi`, - children: [], - parent: null, - internal: { - contentDigest: `hasdfljds`, - type: `Test`, - }, - }, - { - name: `tests`, - } - ) - ) - - store.dispatch( - actions.createNode( - { - id: `hi-1`, - children: [], - parent: `hi`, - internal: { - contentDigest: `hasdfljds-1`, - type: `Test-1`, - }, - }, - { - name: `tests`, - } - ) - ) - - store.dispatch( - actions.createParentChildLink( - { - parent: store.getState().nodes.get(`hi`), - child: store.getState().nodes.get(`hi-1`), - }, - { - name: `tests`, - } - ) - ) - - store.dispatch( - actions.createNode( - { - id: `hi-1-1`, - children: [], - parent: `hi-1`, - internal: { - contentDigest: `hasdfljds-1-1`, - type: `Test-1-1`, - }, - }, - { - name: `tests`, - } - ) - ) - - store.dispatch( - actions.createParentChildLink( - { - parent: store.getState().nodes.get(`hi-1`), - child: store.getState().nodes.get(`hi-1-1`), - }, - { - name: `tests`, - } - ) - ) - - store.dispatch( - actions.createNode( - { - id: `hi`, - children: [], - parent: `test`, - internal: { - contentDigest: `hasdfljds2`, - type: `Test`, - }, - }, - { - name: `tests`, - } - ) - ) - expect(store.getState().nodes.size).toEqual(1) - }) - - it(`deletes previously transformed children nodes when the parent node is deleted`, () => { - store.dispatch( - actions.createNode( - { - id: `hi`, - children: [], - parent: `test`, - internal: { - contentDigest: `hasdfljds`, - type: `Test`, - }, - }, - { - name: `tests`, - } - ) - ) - store.dispatch( - actions.createNode( - { - id: `hi2`, - children: [], - parent: `test`, - internal: { - contentDigest: `hasdfljds`, - type: `Test`, - }, - }, - { - name: `tests`, - } - ) - ) - store.dispatch( - actions.createNode( - { - id: `hi-1`, - children: [], - parent: `hi`, - internal: { - contentDigest: `hasdfljds-1`, - type: `Test-1`, - }, - }, - { - name: `tests`, - } - ) - ) - store.dispatch( - actions.createParentChildLink( - { - parent: store.getState().nodes.get(`hi`), - child: getNode(`hi-1`), - }, - { - name: `tests`, - } - ) - ) - store.dispatch( - actions.createNode( - { - id: `hi-1-1`, - children: [], - parent: `hi-1`, - internal: { - contentDigest: `hasdfljds-1-1`, - type: `Test-1-1`, - }, - }, - { - name: `tests`, - } - ) - ) - store.dispatch( - actions.createParentChildLink( - { - parent: getNode(`hi-1`), - child: getNode(`hi-1-1`), - }, - { - name: `tests`, - } - ) - ) - - store.dispatch( - actions.deleteNode( - { - node: getNode(`hi`), - }, - { - name: `tests`, - } - ) - ) - expect(store.getState().nodes.size).toEqual(1) - }) - - it(`deletes previously transformed children nodes when parent nodes are deleted`, () => { - store.dispatch( - actions.createNode( - { - id: `hi`, - children: [], - parent: `test`, - internal: { - contentDigest: `hasdfljds`, - type: `Test`, - }, - }, - { - name: `tests`, - } - ) - ) - store.dispatch( - actions.createNode( - { - id: `hi-1`, - children: [], - parent: `hi`, - internal: { - contentDigest: `hasdfljds-1`, - type: `Test-1`, - }, - }, - { - name: `tests`, - } - ) - ) - store.dispatch( - actions.createParentChildLink( - { - parent: getNode(`hi`), - child: getNode(`hi-1`), - }, - { - name: `tests`, - } - ) - ) - store.dispatch( - actions.createNode( - { - id: `hi-1-1`, - children: [], - parent: `hi-1`, - internal: { - contentDigest: `hasdfljds-1-1`, - type: `Test-1-1`, - }, - }, - { - name: `tests`, - } - ) - ) - store.dispatch( - actions.createParentChildLink( - { - parent: getNode(`hi-1`), - child: getNode(`hi-1-1`), - }, - { - name: `tests`, - } - ) - ) - store.dispatch( - actions.deleteNode( - { node: getNode(`hi`) }, - { - name: `tests`, - } - ) - ) - expect(store.getState().nodes.size).toEqual(0) - }) - - it(`allows deleting nodes`, () => { - actions.createNode( - { - id: `hi`, - children: [], - parent: `test`, - internal: { - contentDigest: `hasdfljds`, - type: `Test`, - }, - pickle: true, - deep: { - array: [ - 0, - 1, - { - boom: true, - }, - ], - }, - }, - { - name: `tests`, - } - ) - actions.deleteNode({ - node: getNode(`hi`), - }) - expect(getNode(`hi`)).toBeUndefined() - }) - - it(`warns when using old deleteNode signature `, () => { - console.warn = jest.fn() - store.dispatch( - actions.createNode( - { - id: `hi`, - children: [], - parent: `test`, - internal: { - contentDigest: `hasdfljds`, - type: `Test`, - }, - }, - { - name: `tests`, - } - ) - ) - - expect(getNode(`hi`)).toMatchSnapshot() - store.dispatch( - actions.deleteNode(`hi`, getNode(`hi`), { - name: `tests`, - }) - ) - - expect(getNode(`hi`)).toBeUndefined() - - const deprecationNotice = `Calling "deleteNode" with a nodeId is deprecated. Please pass an object containing a full node instead: deleteNode({ node })` - expect(console.warn).toHaveBeenCalledWith(deprecationNotice) - - console.warn.mockRestore() - }) - it(`nodes that are added are also "touched"`, () => { const action = actions.createNode( { @@ -586,11 +249,4 @@ describe(`Create and update nodes`, () => { expect(callActionCreator).toThrowErrorMatchingSnapshot() }) - - it(`does not crash when delete node is called on undefined`, () => { - actions.deleteNode(undefined, { - name: `tests`, - }) - expect(store.getState().nodes.size).toEqual(0) - }) }) diff --git a/packages/gatsby/src/redux/actions.js b/packages/gatsby/src/redux/actions.js index 6474c00817843..02a9d0276d072 100644 --- a/packages/gatsby/src/redux/actions.js +++ b/packages/gatsby/src/redux/actions.js @@ -601,6 +601,7 @@ actions.createNode = ( updateNodeAction = { type: `CREATE_NODE`, plugin, + oldNode, ...actionOptions, payload: node, } diff --git a/packages/gatsby/src/redux/index.js b/packages/gatsby/src/redux/index.js index 203b0438aac81..103afb0fb62bb 100644 --- a/packages/gatsby/src/redux/index.js +++ b/packages/gatsby/src/redux/index.js @@ -77,7 +77,7 @@ const saveState = state => { pickedState.staticQueryComponents ) pickedState.components = mapToObject(pickedState.components) - pickedState.nodes = mapToObject(pickedState.nodes) + pickedState.nodes = pickedState.nodes ? mapToObject(pickedState.nodes) : [] const stringified = stringify(pickedState, null, 2) fs.writeFile( `${process.cwd()}/.cache/redux-state.json`, diff --git a/packages/gatsby/src/redux/nodes.js b/packages/gatsby/src/redux/nodes.js index 05e937019e132..32fedcba4b3e5 100644 --- a/packages/gatsby/src/redux/nodes.js +++ b/packages/gatsby/src/redux/nodes.js @@ -1,5 +1,3 @@ -const _ = require(`lodash`) -const Promise = require(`bluebird`) const { store } = require(`./index`) /** @@ -46,36 +44,6 @@ exports.hasNodeChanged = (id, digest) => { } } -/** - * Get content for a node from the plugin that created it. - * - * @param {Object} node - * @returns {promise} - */ -exports.loadNodeContent = node => { - if (_.isString(node.internal.content)) { - return Promise.resolve(node.internal.content) - } else { - return new Promise(resolve => { - // Load plugin's loader function - const plugin = store - .getState() - .flattenedPlugins.find(plug => plug.name === node.internal.owner) - const { loadNodeContent } = require(plugin.resolve) - if (!loadNodeContent) { - throw new Error( - `Could not find function loadNodeContent for plugin ${plugin.name}` - ) - } - - return loadNodeContent(node).then(content => { - // TODO update node's content field here. - resolve(content) - }) - }) - } -} - /** * Get node and save path dependency. * diff --git a/packages/gatsby/src/redux/reducers/index.js b/packages/gatsby/src/redux/reducers/index.js index 5e53ff8667722..9eb38dd86ce11 100644 --- a/packages/gatsby/src/redux/reducers/index.js +++ b/packages/gatsby/src/redux/reducers/index.js @@ -1,6 +1,28 @@ +const reduxNodes = require(`./nodes`) +const lokiNodes = require(`../../db/loki/nodes`).reducer + +const backend = process.env.GATSBY_DB_NODES || `redux` + +function getNodesReducer() { + let nodesReducer + switch (backend) { + case `redux`: + nodesReducer = reduxNodes + break + case `loki`: + nodesReducer = lokiNodes + break + default: + throw new Error( + `Unsupported DB nodes backend (value of env var GATSBY_DB_NODES)` + ) + } + return nodesReducer +} + module.exports = { program: require(`./program`), - nodes: require(`./nodes`), + nodes: getNodesReducer(), nodesTouched: require(`./nodes-touched`), lastAction: require(`./last-action`), plugins: require(`./plugins`), diff --git a/packages/gatsby/src/redux/run-sift.js b/packages/gatsby/src/redux/run-sift.js index 558c7f9d48769..dff3d3681f50f 100644 --- a/packages/gatsby/src/redux/run-sift.js +++ b/packages/gatsby/src/redux/run-sift.js @@ -275,7 +275,13 @@ function handleMany(siftArgs, nodes, sort) { .map(field => field.replace(/___/g, `.`)) .map(field => v => _.get(v, field)) - result = _.orderBy(result, convertedFields, sort.order) + // Gatsby's sort interface only allows one sort order (e.g `desc`) + // to be specified. However, multiple sort fields can be + // provided. This is inconsistent. The API should allow the + // setting of an order per field. Until the API can be changed + // (probably v3), we apply the sort order to the first field only, + // implying asc order for the remaining fields. + result = _.orderBy(result, convertedFields, [sort.order]) } return result } diff --git a/packages/gatsby/src/schema/__tests__/__snapshots__/infer-graphql-input-type-test.js.snap b/packages/gatsby/src/schema/__tests__/__snapshots__/connection-input-fields-test.js.snap similarity index 89% rename from packages/gatsby/src/schema/__tests__/__snapshots__/infer-graphql-input-type-test.js.snap rename to packages/gatsby/src/schema/__tests__/__snapshots__/connection-input-fields-test.js.snap index e3a3efd24dee7..436d81ea4fb0b 100644 --- a/packages/gatsby/src/schema/__tests__/__snapshots__/infer-graphql-input-type-test.js.snap +++ b/packages/gatsby/src/schema/__tests__/__snapshots__/connection-input-fields-test.js.snap @@ -1,9 +1,9 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`GraphQL Input args can query object arrays 1`] = ` +exports[`connection input fields can query object arrays 1`] = ` Object { "data": Object { - "allNode": Object { + "allTest": Object { "edges": Array [ Object { "node": Object { diff --git a/packages/gatsby/src/schema/__tests__/build-node-connections-test.js b/packages/gatsby/src/schema/__tests__/build-node-connections-test.js index f92ad69a82d37..8878f4652d929 100644 --- a/packages/gatsby/src/schema/__tests__/build-node-connections-test.js +++ b/packages/gatsby/src/schema/__tests__/build-node-connections-test.js @@ -2,8 +2,9 @@ const { graphql, GraphQLObjectType, GraphQLSchema } = require(`graphql`) const _ = require(`lodash`) const createPageDependency = require(`../../redux/actions/add-page-dependency`) jest.mock(`../../redux/actions/add-page-dependency`) -const buildNodeTypes = require(`../build-node-types`) +const nodeTypes = require(`../build-node-types`) const nodeConnections = require(`../build-node-connections`) +require(`../../db/__tests__/fixtures/ensure-loki`)() describe(`build-node-connections`, () => { let schema, store, types, connections @@ -48,7 +49,7 @@ describe(`build-node-connections`, () => { }, ].forEach(n => store.dispatch({ type: `CREATE_NODE`, payload: n })) - types = await buildNodeTypes({}) + types = await nodeTypes.buildAll({}) connections = await nodeConnections.buildAll(_.values(types)) schema = new GraphQLSchema({ diff --git a/packages/gatsby/src/schema/__tests__/build-node-types-test.js b/packages/gatsby/src/schema/__tests__/build-node-types-test.js index 3edbc5eb5d67e..a30c752bba6a9 100644 --- a/packages/gatsby/src/schema/__tests__/build-node-types-test.js +++ b/packages/gatsby/src/schema/__tests__/build-node-types-test.js @@ -5,13 +5,14 @@ const { GraphQLString, } = require(`graphql`) const _ = require(`lodash`) +require(`../../db/__tests__/fixtures/ensure-loki`)() jest.mock(`../../utils/api-runner-node`) const apiRunnerNode = require(`../../utils/api-runner-node`) const createPageDependency = require(`../../redux/actions/add-page-dependency`) jest.mock(`../../redux/actions/add-page-dependency`) -const buildNodeTypes = require(`../build-node-types`) +const nodeTypes = require(`../build-node-types`) describe(`build-node-types`, () => { let schema, store, types @@ -30,10 +31,7 @@ describe(`build-node-types`, () => { pluginField: { type: GraphQLString, description: `test description`, - resolve: parent => { - console.log(`in resolver: ${parent}`) - return `pluginFieldValue` - }, + resolve: parent => `pluginFieldValue`, }, }, ] @@ -70,7 +68,7 @@ describe(`build-node-types`, () => { }, ].forEach(n => store.dispatch({ type: `CREATE_NODE`, payload: n })) - types = await buildNodeTypes({}) + types = await nodeTypes.buildAll({}) schema = new GraphQLSchema({ query: new GraphQLObjectType({ name: `RootQueryType`, @@ -166,6 +164,19 @@ describe(`build-node-types`, () => { expect(result.parent.pluginField).toEqual(`pluginFieldValue`) }) + it(`should allow filtering on plugin fields`, async () => { + const result = await runQuery( + ` + { + parent(pluginField: { eq: "pluginFieldValue"}) { + pluginField + } + } + ` + ) + expect(result.parent.pluginField).toEqual(`pluginFieldValue`) + }) + it(`should create root query type page dependency`, async () => { await runQuery(` { parent(id: { eq: "p1" }) { id } } `) diff --git a/packages/gatsby/src/schema/__tests__/connection-input-fields-test.js b/packages/gatsby/src/schema/__tests__/connection-input-fields-test.js new file mode 100644 index 0000000000000..29a458c3f7321 --- /dev/null +++ b/packages/gatsby/src/schema/__tests__/connection-input-fields-test.js @@ -0,0 +1,272 @@ +const _ = require(`lodash`) +const { graphql } = require(`graphql`) +const nodeTypes = require(`../build-node-types`) +const nodeConnections = require(`../build-node-connections`) +const { buildNodesSchema } = require(`../index`) +const { clearUnionTypes } = require(`../infer-graphql-type`) +const { store } = require(`../../redux`) +require(`../../db/__tests__/fixtures/ensure-loki`)() + +function makeNodes() { + return [ + { + id: `0`, + internal: { type: `Test` }, + children: [], + index: 0, + name: `The Mad Max`, + string: `a`, + float: 1.5, + hair: 1, + date: `2006-07-22T22:39:53.000Z`, + anArray: [1, 2, 3, 4], + key: { + withEmptyArray: [], + }, + anotherKey: { + withANested: { + nestedKey: `foo`, + emptyArray: [], + anotherEmptyArray: [], + }, + }, + frontmatter: { + date: `2006-07-22T22:39:53.000Z`, + title: `The world of dash and adventure`, + blue: 100, + }, + anObjectArray: [ + { aString: `some string`, aNumber: 2, aBoolean: true }, + { aString: `some string`, aNumber: 2, anArray: [1, 2] }, + ], + boolean: true, + }, + { + id: `1`, + internal: { type: `Test` }, + children: [], + index: 1, + name: `The Mad Wax`, + string: `b`, + float: 2.5, + hair: 2, + anArray: [1, 2, 5, 4], + anotherKey: { + withANested: { + nestedKey: `foo`, + }, + }, + frontmatter: { + date: `2006-07-22T22:39:53.000Z`, + title: `The world of slash and adventure`, + blue: 10010, + circle: `happy`, + }, + boolean: false, + data: { + tags: [ + { + tag: { + document: [ + { + data: { + tag: `Design System`, + }, + number: 3, + }, + ], + }, + }, + ], + }, + }, + { + id: `2`, + internal: { type: `Test` }, + children: [], + index: 2, + name: `The Mad Wax`, + string: `c`, + float: 3.5, + hair: 0, + date: `2006-07-29T22:39:53.000Z`, + anotherKey: { + withANested: { + nestedKey: `bar`, + }, + }, + frontmatter: { + date: `2006-07-22T22:39:53.000Z`, + title: `The world of shave and adventure`, + blue: 10010, + circle: `happy`, + }, + data: { + tags: [ + { + tag: { + document: [ + { + data: { + tag: `Gatsby`, + }, + }, + ], + }, + }, + { + tag: { + document: [ + { + data: { + tag: `Design System`, + }, + number: 5, + }, + ], + }, + }, + ], + }, + }, + ] +} + +async function queryResult(nodesData, query, { types = [] } = {}) { + store.dispatch({ type: `DELETE_CACHE` }) + for (const node of nodesData) { + store.dispatch({ type: `CREATE_NODE`, payload: node }) + } + clearUnionTypes() + const typesGQL = await nodeTypes.buildAll({}) + const connections = nodeConnections.buildAll(_.values(typesGQL)) + + // Pull off just the graphql node from each type object. + const nodes = _.mapValues(typesGQL, `node`) + + const schema = buildNodesSchema({ ...connections, ...nodes }) + + return graphql(schema, query) +} + +describe(`connection input fields`, () => { + it(`returns list of distinct values in a field`, async () => { + let result = await queryResult( + makeNodes(), + ` + { + allTest { + totalCount + names: distinct(field: name) + array: distinct(field: anArray) + blue: distinct(field: frontmatter___blue) + # Only one node has this field + circle: distinct(field: frontmatter___circle) + nestedField: distinct(field: anotherKey___withANested___nestedKey) + } + } + ` + ) + + expect(result.errors).not.toBeDefined() + + expect(result.data.allTest.names.length).toEqual(2) + expect(result.data.allTest.names[0]).toEqual(`The Mad Max`) + + expect(result.data.allTest.array.length).toEqual(5) + expect(result.data.allTest.array[0]).toEqual(`1`) + + expect(result.data.allTest.blue.length).toEqual(2) + expect(result.data.allTest.blue[0]).toEqual(`100`) + + expect(result.data.allTest.circle.length).toEqual(1) + expect(result.data.allTest.circle[0]).toEqual(`happy`) + + expect(result.data.allTest.nestedField.length).toEqual(2) + expect(result.data.allTest.nestedField[0]).toEqual(`bar`) + expect(result.data.allTest.nestedField[1]).toEqual(`foo`) + }) + + it(`handles the group connection field`, async () => { + let result = await queryResult( + makeNodes(), + ` { + allTest { + blue: group(field: frontmatter___blue) { + field + fieldValue + totalCount + } + anArray: group(field: anArray) { + field + fieldValue + totalCount + } + } + }` + ) + expect(result.errors).not.toBeDefined() + + expect(result.data.allTest.blue).toHaveLength(2) + expect(result.data.allTest.blue[0].fieldValue).toEqual(`100`) + expect(result.data.allTest.blue[0].field).toEqual(`frontmatter.blue`) + expect(result.data.allTest.blue[0].totalCount).toEqual(1) + + expect(result.data.allTest.anArray).toHaveLength(5) + expect(result.data.allTest.anArray[0].fieldValue).toEqual(`1`) + expect(result.data.allTest.anArray[0].field).toEqual(`anArray`) + expect(result.data.allTest.anArray[0].totalCount).toEqual(2) + }) + + it(`handles the nested group connection field`, async () => { + let result = await queryResult( + makeNodes(), + ` { + allTest { + nestedKey: group(field: anotherKey___withANested___nestedKey) { + field + fieldValue + totalCount + } + } + }` + ) + + expect(result.errors).not.toBeDefined() + expect(result.data.allTest.nestedKey).toHaveLength(2) + expect(result.data.allTest.nestedKey[0].fieldValue).toEqual(`bar`) + expect(result.data.allTest.nestedKey[0].field).toEqual( + `anotherKey.withANested.nestedKey` + ) + expect(result.data.allTest.nestedKey[0].totalCount).toEqual(1) + expect(result.data.allTest.nestedKey[1].fieldValue).toEqual(`foo`) + expect(result.data.allTest.nestedKey[1].field).toEqual( + `anotherKey.withANested.nestedKey` + ) + expect(result.data.allTest.nestedKey[1].totalCount).toEqual(2) + }) + + it(`can query object arrays`, async () => { + let result = await queryResult( + makeNodes(), + ` + { + allTest { + edges { + node { + anObjectArray { + aString + aNumber + aBoolean + } + } + } + } + } + ` + ) + expect(result.errors).not.toBeDefined() + + expect(result).toMatchSnapshot() + }) +}) diff --git a/packages/gatsby/src/schema/__tests__/connections-filter-on-linked-nodes.js b/packages/gatsby/src/schema/__tests__/connections-filter-on-linked-nodes.js new file mode 100644 index 0000000000000..711eb2dabc10e --- /dev/null +++ b/packages/gatsby/src/schema/__tests__/connections-filter-on-linked-nodes.js @@ -0,0 +1,293 @@ +const _ = require(`lodash`) +const { graphql } = require(`graphql`) +const nodeTypes = require(`../build-node-types`) +const nodeConnections = require(`../build-node-connections`) +const { buildNodesSchema } = require(`../index`) +const { clearUnionTypes } = require(`../infer-graphql-type`) +const { getExampleValues } = require(`../data-tree-utils`) +const { + inferInputObjectStructureFromNodes, +} = require(`../infer-graphql-input-fields`) +const { store } = require(`../../redux`) +require(`../../db/__tests__/fixtures/ensure-loki`)() + +function makeNodes() { + return [ + { id: `child_1`, internal: { type: `Child` }, hair: `brown`, children: [] }, + { + id: `child_2`, + internal: { type: `Child` }, + children: [], + hair: `blonde`, + height: 101, + }, + { + id: `linked_A`, + internal: { type: `Linked_A` }, + children: [], + array: [{ linked___NODE: `linked_B` }], + single: { linked___NODE: `linked_B` }, + }, + { id: `linked_B`, internal: { type: `Linked_B` }, children: [] }, + ] +} + +async function queryResult(nodesData, query, { types = [] } = {}) { + for (const node of nodesData) { + store.dispatch({ type: `CREATE_NODE`, payload: node }) + } + const typesGQL = await nodeTypes.buildAll({}) + const connections = nodeConnections.buildAll(_.values(typesGQL)) + + // Pull off just the graphql node from each type object. + const nodes = _.mapValues(typesGQL, `node`) + + const schema = buildNodesSchema({ ...connections, ...nodes }) + + return graphql(schema, query) +} + +describe(`filtering on linked nodes`, () => { + beforeEach(() => { + store.dispatch({ type: `DELETE_CACHE` }) + }) + clearUnionTypes() + it(`filters on linked nodes via id`, async () => { + let result = await queryResult( + makeNodes().concat([ + { + id: `child_2_link`, + internal: { type: `Test` }, + children: [], + linked___NODE: `child_2`, + foo: `bar`, + }, + { + id: `child_1_linked`, + internal: { type: `Test` }, + children: [], + linked___NODE: `child_1`, + foo: `baz`, + }, + ]), + ` + { + allTest(filter: { linked: { hair: { eq: "blonde" } } }) { + edges { node { linked { hair, height }, foo } } + } + } + ` + ) + expect(result.data.allTest.edges.length).toEqual(1) + expect(result.data.allTest.edges[0].node.linked.hair).toEqual(`blonde`) + expect(result.data.allTest.edges[0].node.linked.height).toEqual(101) + expect(result.data.allTest.edges[0].node.foo).toEqual(`bar`) + }) + + it(`returns nested linked fields`, async () => { + let result = await queryResult( + [ + { + id: `child_2`, + internal: { type: `Child` }, + children: [], + hair: `blonde`, + height: 101, + }, + { + id: `child_1_link`, + internal: { type: `Test` }, + children: [], + nested: { + linked___NODE: `child_2`, + }, + foo: `bar`, + }, + ], + ` + { + allTest(filter: { nested: { linked: { hair: { eq: "blonde" } } } }) { + edges { node { nested { linked { hair, height } }, foo } } + } + } + ` + ) + expect(result.data.allTest.edges[0].node.nested.linked.hair).toEqual( + `blonde` + ) + expect(result.data.allTest.edges[0].node.nested.linked.height).toEqual(101) + expect(result.data.allTest.edges[0].node.foo).toEqual(`bar`) + }) + + it(`returns all matching linked nodes`, async () => { + let result = await queryResult( + makeNodes().concat([ + { + id: `child_2_link`, + internal: { type: `Test` }, + children: [], + linked___NODE: `child_2`, + foo: `bar`, + }, + { + id: `child_2_link2`, + internal: { type: `Test` }, + children: [], + linked___NODE: `child_2`, + foo: `baz`, + }, + ]), + ` + { + allTest(filter: { linked: { hair: { eq: "blonde" } } }) { + edges { node { linked { hair, height }, foo } } + } + } + ` + ) + expect(result.data.allTest.edges[0].node.linked.hair).toEqual(`blonde`) + expect(result.data.allTest.edges[0].node.linked.height).toEqual(101) + expect(result.data.allTest.edges[0].node.foo).toEqual(`bar`) + expect(result.data.allTest.edges[1].node.foo).toEqual(`baz`) + }) + + it(`handles elemMatch operator`, async () => { + let result = await queryResult( + makeNodes().concat([ + { + id: `1`, + internal: { type: `Test` }, + children: [], + linked___NODE: [`child_1`, `child_2`], + foo: `bar`, + }, + { + id: `2`, + internal: { type: `Test` }, + children: [], + linked___NODE: [`child_1`], + foo: `baz`, + }, + { + id: `3`, + internal: { type: `Test` }, + children: [], + linked___NODE: [`child_2`], + foo: `foo`, + }, + { + id: `4`, + internal: { type: `Test` }, + children: [], + array: [{ linked___NODE: [`child_1`, `child_2`] }], + foo: `lorem`, + }, + { + id: `5`, + internal: { type: `Test` }, + children: [], + array: [ + { linked___NODE: [`child_1`] }, + { linked___NODE: [`child_2`] }, + ], + foo: `ipsum`, + }, + { + id: `6`, + internal: { type: `Test` }, + children: [], + array: [{ linked___NODE: [`child_1`] }], + foo: `sit`, + }, + { + id: `7`, + internal: { type: `Test` }, + children: [], + array: [{ linked___NODE: [`child_2`] }], + foo: `dolor`, + }, + { + id: `8`, + internal: { type: `Test` }, + children: [], + foo: `ipsum`, + }, + ]), + ` + { + eq:allTest(filter: { linked: { elemMatch: { hair: { eq: "brown" } } } }) { + edges { node { foo } } + } + in:allTest(filter: { linked: { elemMatch: { hair: { in: ["brown", "blonde"] } } } }) { + edges { node { foo } } + } + insideInlineArrayEq:allTest(filter: { array: { elemMatch: { linked: { elemMatch: { hair: { eq: "brown" } } } } } }) { + edges { node { foo } } + } + insideInlineArrayIn:allTest(filter: { array: { elemMatch: { linked: { elemMatch: { hair: { in: ["brown", "blonde"] } } } } } }) { + edges { node { foo } } + } + } + ` + ) + + const itemToEdge = item => { + return { + node: { + foo: item, + }, + } + } + + expect(result.data.eq.edges).toEqual([`bar`, `baz`].map(itemToEdge)) + expect(result.data.in.edges).toEqual([`bar`, `baz`, `foo`].map(itemToEdge)) + expect(result.data.insideInlineArrayEq.edges).toEqual( + [`lorem`, `ipsum`, `sit`].map(itemToEdge) + ) + expect(result.data.insideInlineArrayIn.edges).toEqual( + [`lorem`, `ipsum`, `sit`, `dolor`].map(itemToEdge) + ) + }) + + it(`doesn't mutate node object`, async () => { + const allTestNodes = makeNodes() + await queryResult( + allTestNodes.concat([ + { + id: `1`, + internal: { type: `Test` }, + children: [], + test: [ + { + linked___NODE: `linked_A`, + }, + ], + }, + ]), + ` + { + allTest { + edges { node { hair } } + } + } + ` + ) + const originalTestNode = allTestNodes.find( + node => node.internal.type === `Linked_A` + ) + delete originalTestNode.children + + expect(getExampleValues({ typeName: `Linked_A` })).toEqual(originalTestNode) + }) + + it(`skips fields with missing nodes`, async () => { + const fields = inferInputObjectStructureFromNodes({ + nodes: [], + exampleValue: { + movie___NODE: `foobar`, + }, + }).inferredFields + + expect(Object.keys(fields)).toHaveLength(0) + }) +}) diff --git a/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js b/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js index a9926b3a4e33d..fae2c8441c5ab 100644 --- a/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js +++ b/packages/gatsby/src/schema/__tests__/infer-graphql-input-type-test.js @@ -1,4 +1,3 @@ -const _ = require(`lodash`) const { graphql, GraphQLString, GraphQLObjectType } = require(`graphql`) const { inferObjectStructureFromNodes } = require(`../infer-graphql-type`) @@ -7,18 +6,14 @@ const { buildNodesSchema } = require(`../index`) const { inferInputObjectStructureFromNodes, } = require(`../infer-graphql-input-fields`) -const { - getExampleValues, - clearTypeExampleValues, -} = require(`../data-tree-utils`) - -let mockNodes -jest.unmock(`../../db/nodes`) -const nodesDb = require(`../../db/nodes`) -nodesDb.getNodesByType = () => mockNodes +const { clearTypeExampleValues } = require(`../data-tree-utils`) +const { store } = require(`../../redux`) +require(`../../db/__tests__/fixtures/ensure-loki`)() function queryResult(nodes, query, { types = [] } = {}) { - mockNodes = nodes + for (const node of nodes) { + store.dispatch({ type: `CREATE_NODE`, payload: node }) + } const nodeObjectType = new GraphQLObjectType({ name: `Node`, fields: inferObjectStructureFromNodes({ @@ -42,123 +37,12 @@ beforeEach(() => { }) describe(`GraphQL Input args`, () => { - const nodes = [ - { - index: 0, - name: `The Mad Max`, - string: `a`, - float: 1.5, - hair: 1, - date: `2006-07-22T22:39:53.000Z`, - anArray: [1, 2, 3, 4], - key: { - withEmptyArray: [], - }, - anotherKey: { - withANested: { - nestedKey: `foo`, - emptyArray: [], - anotherEmptyArray: [], - }, - }, - frontmatter: { - date: `2006-07-22T22:39:53.000Z`, - title: `The world of dash and adventure`, - blue: 100, - }, - anObjectArray: [ - { aString: `some string`, aNumber: 2, aBoolean: true }, - { aString: `some string`, aNumber: 2, anArray: [1, 2] }, - ], - boolean: true, - }, - { - index: 1, - name: `The Mad Wax`, - string: `b`, - float: 2.5, - hair: 2, - anArray: [1, 2, 5, 4], - anotherKey: { - withANested: { - nestedKey: `foo`, - }, - }, - frontmatter: { - date: `2006-07-22T22:39:53.000Z`, - title: `The world of slash and adventure`, - blue: 10010, - circle: `happy`, - }, - boolean: false, - data: { - tags: [ - { - tag: { - document: [ - { - data: { - tag: `Design System`, - }, - number: 3, - }, - ], - }, - }, - ], - }, - }, - { - index: 2, - name: `The Mad Wax`, - string: `c`, - float: 3.5, - hair: 0, - date: `2006-07-29T22:39:53.000Z`, - anotherKey: { - withANested: { - nestedKey: `bar`, - }, - }, - frontmatter: { - date: `2006-07-22T22:39:53.000Z`, - title: `The world of shave and adventure`, - blue: 10010, - circle: `happy`, - }, - data: { - tags: [ - { - tag: { - document: [ - { - data: { - tag: `Gatsby`, - }, - }, - ], - }, - }, - { - tag: { - document: [ - { - data: { - tag: `Design System`, - }, - number: 5, - }, - ], - }, - }, - ], - }, - }, - ] - + beforeEach(() => { + store.dispatch({ type: `DELETE_CACHE` }) + }) it(`filters out null example values`, async () => { let result = await queryResult( - [{ foo: null, bar: `baz` }], + [{ id: `1`, internal: { type: `Bar` }, foo: null, bar: `baz` }], ` { allNode(foo: { eq: "bar" }) { @@ -175,7 +59,7 @@ describe(`GraphQL Input args`, () => { it(`filters out empty objects`, async () => { let result = await queryResult( - [{ foo: {}, bar: `baz` }], + [{ id: `1`, internal: { type: `Bar` }, foo: {}, bar: `baz` }], ` { allNode(foo: { eq: "bar" }) { @@ -192,7 +76,7 @@ describe(`GraphQL Input args`, () => { it(`filters out empty arrays`, async () => { let result = await queryResult( - [{ foo: [], bar: `baz` }], + [{ id: `1`, internal: { type: `Bar` }, foo: [], bar: `baz` }], ` { allNode(foo: { eq: "bar" }) { @@ -209,7 +93,14 @@ describe(`GraphQL Input args`, () => { it(`filters out sparse arrays`, async () => { let result = await queryResult( - [{ foo: [undefined, null, null], bar: `baz` }], + [ + { + id: `1`, + internal: { type: `Bar` }, + foo: [undefined, null, null], + bar: `baz`, + }, + ], ` { allNode(foo: { eq: "bar" }) { @@ -234,7 +125,14 @@ describe(`GraphQL Input args`, () => { }) let result = await queryResult( - [{ linked___NODE: `baz`, foo: `bar` }], + [ + { + id: `1`, + internal: { type: `Bar` }, + linked___NODE: `baz`, + foo: `bar`, + }, + ], ` { allNode(linked___NODE: { eq: "baz" }) { @@ -301,657 +199,4 @@ describe(`GraphQL Input args`, () => { expect(fields.float.type.name.endsWith(`Float`)).toBe(true) expect(fields.longint.type.name.endsWith(`Float`)).toBe(true) }) - - it(`handles eq operator`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode(filter: {hair: { eq: 2 }}) { - edges { node { hair }} - } - } - ` - ) - - expect(result.errors).not.toBeDefined() - expect(result.data.allNode.edges.length).toEqual(1) - expect(result.data.allNode.edges[0].node.hair).toEqual(2) - }) - - it(`handles eq operator with false value`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode(filter: {boolean: { eq: false }}) { - edges { node { name }} - } - } - ` - ) - - expect(result.errors).not.toBeDefined() - expect(result.data.allNode.edges.length).toEqual(1) - expect(result.data.allNode.edges[0].node.name).toEqual(`The Mad Wax`) - }) - - it(`handles eq operator with 0`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode(filter: {hair: { eq: 0 }}) { - edges { node { hair }} - } - } - ` - ) - - expect(result.errors).not.toBeDefined() - expect(result.data.allNode.edges.length).toEqual(1) - expect(result.data.allNode.edges[0].node.hair).toEqual(0) - }) - - it(`handles ne operator`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode(filter: {hair: { ne: 2 }}) { - edges { node { hair }} - } - } - ` - ) - - expect(result.errors).not.toBeDefined() - expect(result.data.allNode.edges.length).toEqual(2) - expect(result.data.allNode.edges[0].node.hair).toEqual(1) - }) - - it(`handles lt operator`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode(filter: {hair: { lt: 2 }}) { - edges { node { hair }} - } - } - ` - ) - - expect(result.errors).not.toBeDefined() - expect(result.data.allNode.edges.length).toEqual(2) - expect(result.data.allNode.edges[0].node.hair).toEqual(1) - expect(result.data.allNode.edges[1].node.hair).toEqual(0) - }) - - it(`handles lte operator`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode(filter: {hair: { lte: 1 }}) { - edges { node { hair }} - } - } - ` - ) - - expect(result.errors).not.toBeDefined() - expect(result.data.allNode.edges.length).toEqual(2) - expect(result.data.allNode.edges[0].node.hair).toEqual(1) - expect(result.data.allNode.edges[1].node.hair).toEqual(0) - }) - - it(`handles gt operator`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode(filter: {hair: { gt: 0 }}) { - edges { node { hair }} - } - } - ` - ) - - expect(result.errors).not.toBeDefined() - expect(result.data.allNode.edges.length).toEqual(2) - expect(result.data.allNode.edges[0].node.hair).toEqual(1) - expect(result.data.allNode.edges[1].node.hair).toEqual(2) - }) - - it(`handles gte operator`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode(filter: {hair: { gte: 1 }}) { - edges { node { hair }} - } - } - ` - ) - - expect(result.errors).not.toBeDefined() - expect(result.data.allNode.edges.length).toEqual(2) - expect(result.data.allNode.edges[0].node.hair).toEqual(1) - expect(result.data.allNode.edges[1].node.hair).toEqual(2) - }) - - it(`handles the regex operator`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode(filter: {name: { regex: "/^the.*wax/i" }}) { - edges { node { name }} - } - } - ` - ) - expect(result.errors).not.toBeDefined() - expect(result.data.allNode.edges.length).toEqual(2) - expect(result.data.allNode.edges[0].node.name).toEqual(`The Mad Wax`) - }) - - it(`handles the in operator for scalars`, async () => { - let result = await queryResult( - nodes, - ` - { - string:allNode(filter: { string: { in: ["b", "c"] }}) { - edges { node { index }} - } - int:allNode(filter: { index: { in: [0, 2] }}) { - edges { node { index }} - } - float:allNode(filter: { float: { in: [1.5, 2.5] }}) { - edges { node { index }} - } - boolean:allNode(filter: { boolean: { in: [true, null] }}) { - edges { node { index }} - } - } - ` - ) - expect(result.errors).not.toBeDefined() - expect(result.data.string.edges.length).toEqual(2) - expect(result.data.string.edges[0].node.index).toEqual(1) - expect(result.data.string.edges[1].node.index).toEqual(2) - expect(result.data.int.edges.length).toEqual(2) - expect(result.data.int.edges[0].node.index).toEqual(0) - expect(result.data.int.edges[1].node.index).toEqual(2) - expect(result.data.float.edges.length).toEqual(2) - expect(result.data.float.edges[0].node.index).toEqual(0) - expect(result.data.float.edges[1].node.index).toEqual(1) - expect(result.data.boolean.edges.length).toEqual(2) - expect(result.data.boolean.edges[0].node.index).toEqual(0) - expect(result.data.boolean.edges[1].node.index).toEqual(2) - }) - - it(`handles the in operator for array`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode(filter: {anArray: { in: [5] }}) { - edges { node { name }} - } - } - ` - ) - expect(result.errors).not.toBeDefined() - expect(result.data.allNode.edges.length).toEqual(1) - expect(result.data.allNode.edges[0].node.name).toEqual(`The Mad Wax`) - }) - - it(`handles the elemMatch operator for array of objects`, async () => { - let result = await queryResult( - nodes, - ` - { - test1:allNode(filter: {data: {tags: {elemMatch: {tag: {document: {elemMatch: {data: {tag: {eq: "Gatsby"}}}}}}}}}) { - edges { node { index }} - } - test2:allNode(filter: {data: {tags: {elemMatch: {tag: {document: {elemMatch: {data: {tag: {eq: "Design System"}}}}}}}}}) { - edges { node { index }} - } - test3:allNode(filter: {data: {tags: {elemMatch: {tag: {document: {elemMatch: {number: {lt: 4}}}}}}}}) { - edges { node { index }} - } - } - ` - ) - expect(result.errors).not.toBeDefined() - expect(result.data.test1.edges.length).toEqual(1) - expect(result.data.test1.edges[0].node.index).toEqual(2) - expect(result.data.test2.edges.length).toEqual(2) - expect(result.data.test2.edges[0].node.index).toEqual(1) - expect(result.data.test2.edges[1].node.index).toEqual(2) - expect(result.data.test3.edges.length).toEqual(1) - expect(result.data.test3.edges[0].node.index).toEqual(1) - }) - - it(`handles the nin operator for array`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode(filter: {anArray: { nin: [5] }}) { - edges { node { anArray }} - } - } - ` - ) - expect(result.errors).not.toBeDefined() - expect(result.data.allNode.edges.length).toEqual(2) - - result.data.allNode.edges.forEach(edge => { - expect(edge.node.anArray).not.toEqual(expect.arrayContaining([5])) - }) - }) - - it(`handles the nin operator for scalars`, async () => { - let result = await queryResult( - nodes, - ` - { - string:allNode(filter: { string: { nin: ["b", "c"] }}) { - edges { node { string }} - } - int:allNode(filter: { index: { nin: [0, 2] }}) { - edges { node { index }} - } - float:allNode(filter: { float: { nin: [1.5] }}) { - edges { node { float }} - } - boolean:allNode(filter: { boolean: { nin: [true, null] }}) { - edges { node { boolean }} - } - } - ` - ) - - expect(result.errors).not.toBeDefined() - - expect(result.data.string.edges.length).toEqual(1) - result.data.string.edges.forEach(edge => { - expect(edge.node.string).not.toEqual(`b`) - expect(edge.node.string).not.toEqual(`c`) - }) - - expect(result.data.int.edges.length).toEqual(1) - result.data.int.edges.forEach(edge => { - expect(edge.node.index).not.toEqual(0) - expect(edge.node.index).not.toEqual(2) - }) - - expect(result.data.float.edges.length).toEqual(2) - result.data.float.edges.forEach(edge => { - expect(edge.node.float).not.toEqual(1.5) - }) - - expect(result.data.boolean.edges.length).toEqual(1) - result.data.boolean.edges.forEach(edge => { - expect(edge.node.boolean).not.toEqual(null) - expect(edge.node.boolean).not.toEqual(true) - }) - }) - - it(`handles the glob operator`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode(limit: 10, filter: {name: { glob: "*Wax" }}) { - edges { node { name }} - } - } - ` - ) - expect(result.errors).not.toBeDefined() - expect(result.data.allNode.edges.length).toEqual(2) - expect(result.data.allNode.edges[0].node.name).toEqual(`The Mad Wax`) - }) - - it(`filters date fields`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode(filter: {date: { ne: null }}) { - edges { node { index }} - } - } - ` - ) - expect(result.errors).not.toBeDefined() - expect(result.data.allNode.edges.length).toEqual(2) - expect(result.data.allNode.edges[0].node.index).toEqual(0) - expect(result.data.allNode.edges[1].node.index).toEqual(2) - }) - - it(`sorts results`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode( - limit: 10, - sort: { - fields: [frontmatter___blue], - order: DESC - } - ) { - edges { node { name }} - } - } - ` - ) - expect(result.errors).not.toBeDefined() - expect(result.data.allNode.edges.length).toEqual(3) - expect(result.data.allNode.edges[0].node.name).toEqual(`The Mad Wax`) - }) - - it(`returns list of distinct values in a field`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode { - totalCount - names: distinct(field: name) - array: distinct(field: anArray) - blue: distinct(field: frontmatter___blue) - # Only one node has this field - circle: distinct(field: frontmatter___circle) - nestedField: distinct(field: anotherKey___withANested___nestedKey) - } - } - ` - ) - - expect(result.errors).not.toBeDefined() - - expect(result.data.allNode.names.length).toEqual(2) - expect(result.data.allNode.names[0]).toEqual(`The Mad Max`) - - expect(result.data.allNode.array.length).toEqual(5) - expect(result.data.allNode.array[0]).toEqual(`1`) - - expect(result.data.allNode.blue.length).toEqual(2) - expect(result.data.allNode.blue[0]).toEqual(`100`) - - expect(result.data.allNode.circle.length).toEqual(1) - expect(result.data.allNode.circle[0]).toEqual(`happy`) - - expect(result.data.allNode.nestedField.length).toEqual(2) - expect(result.data.allNode.nestedField[0]).toEqual(`bar`) - expect(result.data.allNode.nestedField[1]).toEqual(`foo`) - }) - - it(`handles the group connection field`, async () => { - let result = await queryResult( - nodes, - ` { - allNode { - blue: group(field: frontmatter___blue) { - field - fieldValue - totalCount - } - anArray: group(field: anArray) { - field - fieldValue - totalCount - } - } - }` - ) - expect(result.errors).not.toBeDefined() - - expect(result.data.allNode.blue).toHaveLength(2) - expect(result.data.allNode.blue[0].fieldValue).toEqual(`100`) - expect(result.data.allNode.blue[0].field).toEqual(`frontmatter.blue`) - expect(result.data.allNode.blue[0].totalCount).toEqual(1) - - expect(result.data.allNode.anArray).toHaveLength(5) - expect(result.data.allNode.anArray[0].fieldValue).toEqual(`1`) - expect(result.data.allNode.anArray[0].field).toEqual(`anArray`) - expect(result.data.allNode.anArray[0].totalCount).toEqual(2) - }) - - it(`handles the nested group connection field`, async () => { - let result = await queryResult( - nodes, - ` { - allNode { - nestedKey: group(field: anotherKey___withANested___nestedKey) { - field - fieldValue - totalCount - } - } - }` - ) - - expect(result.errors).not.toBeDefined() - expect(result.data.allNode.nestedKey).toHaveLength(2) - expect(result.data.allNode.nestedKey[0].fieldValue).toEqual(`bar`) - expect(result.data.allNode.nestedKey[0].field).toEqual( - `anotherKey.withANested.nestedKey` - ) - expect(result.data.allNode.nestedKey[0].totalCount).toEqual(1) - expect(result.data.allNode.nestedKey[1].fieldValue).toEqual(`foo`) - expect(result.data.allNode.nestedKey[1].field).toEqual( - `anotherKey.withANested.nestedKey` - ) - expect(result.data.allNode.nestedKey[1].totalCount).toEqual(2) - }) - - it(`can query object arrays`, async () => { - let result = await queryResult( - nodes, - ` - { - allNode { - edges { - node { - anObjectArray { - aString - aNumber - aBoolean - } - } - } - } - } - ` - ) - expect(result.errors).not.toBeDefined() - - expect(result).toMatchSnapshot() - }) -}) - -describe(`filtering on linked nodes`, () => { - let types - const allNodes = [ - { id: `child_1`, internal: { type: `Child` }, hair: `brown` }, - { - id: `child_2`, - internal: { type: `Child` }, - hair: `blonde`, - height: 101, - }, - { - id: `linked_A`, - internal: { type: `Linked_A` }, - array: [{ linked___NODE: `linked_B` }], - single: { linked___NODE: `linked_B` }, - }, - { id: `linked_B`, internal: { type: `Linked_B` } }, - ] - const typeMap = _.groupBy(allNodes, node => node.internal.type) - - const { store } = require(`../../redux`) - allNodes.forEach(node => { - store.dispatch({ - type: `CREATE_NODE`, - payload: node, - }) - }) - - types = _.toPairs(typeMap).map(([type, nodes]) => { - return { - name: type, - nodeObjectType: new GraphQLObjectType({ - name: type, - fields: () => - inferObjectStructureFromNodes({ - nodes, - types, - }), - }), - } - }) - - it(`filters on linked nodes via id`, async () => { - let result = await queryResult( - [ - { linked___NODE: `child_2`, foo: `bar` }, - { linked___NODE: `child_1`, foo: `baz` }, - ], - ` - { - allNode(filter: { linked: { hair: { eq: "blonde" } } }) { - edges { node { linked { hair, height }, foo } } - } - } - `, - { types } - ) - expect(result.data.allNode.edges.length).toEqual(1) - expect(result.data.allNode.edges[0].node.linked.hair).toEqual(`blonde`) - expect(result.data.allNode.edges[0].node.linked.height).toEqual(101) - expect(result.data.allNode.edges[0].node.foo).toEqual(`bar`) - }) - - it(`returns all matching linked nodes`, async () => { - let result = await queryResult( - [ - { linked___NODE: `child_2`, foo: `bar` }, - { linked___NODE: `child_2`, foo: `baz` }, - ], - ` - { - allNode(filter: { linked: { hair: { eq: "blonde" } } }) { - edges { node { linked { hair, height }, foo } } - } - } - `, - { types } - ) - expect(result.data.allNode.edges[0].node.linked.hair).toEqual(`blonde`) - expect(result.data.allNode.edges[0].node.linked.height).toEqual(101) - expect(result.data.allNode.edges[0].node.foo).toEqual(`bar`) - expect(result.data.allNode.edges[1].node.foo).toEqual(`baz`) - }) - - it(`handles elemMatch operator`, async () => { - let result = await queryResult( - [ - { linked___NODE: [`child_1`, `child_2`], foo: `bar` }, - { linked___NODE: [`child_1`], foo: `baz` }, - { linked___NODE: [`child_2`], foo: `foo` }, - { array: [{ linked___NODE: [`child_1`, `child_2`] }], foo: `lorem` }, - { - array: [ - { linked___NODE: [`child_1`] }, - { linked___NODE: [`child_2`] }, - ], - foo: `ipsum`, - }, - { array: [{ linked___NODE: [`child_1`] }], foo: `sit` }, - { array: [{ linked___NODE: [`child_2`] }], foo: `dolor` }, - { foo: `ipsum` }, - ], - ` - { - eq:allNode(filter: { linked: { elemMatch: { hair: { eq: "brown" } } } }) { - edges { node { foo } } - } - in:allNode(filter: { linked: { elemMatch: { hair: { in: ["brown", "blonde"] } } } }) { - edges { node { foo } } - } - insideInlineArrayEq:allNode(filter: { array: { elemMatch: { linked: { elemMatch: { hair: { eq: "brown" } } } } } }) { - edges { node { foo } } - } - insideInlineArrayIn:allNode(filter: { array: { elemMatch: { linked: { elemMatch: { hair: { in: ["brown", "blonde"] } } } } } }) { - edges { node { foo } } - } - } - `, - { types } - ) - - const itemToEdge = item => { - return { - node: { - foo: item, - }, - } - } - - expect(result.data.eq.edges).toEqual([`bar`, `baz`].map(itemToEdge)) - expect(result.data.in.edges).toEqual([`bar`, `baz`, `foo`].map(itemToEdge)) - expect(result.data.insideInlineArrayEq.edges).toEqual( - [`lorem`, `ipsum`, `sit`].map(itemToEdge) - ) - expect(result.data.insideInlineArrayIn.edges).toEqual( - [`lorem`, `ipsum`, `sit`, `dolor`].map(itemToEdge) - ) - }) - - it(`doesn't mutate node object`, async () => { - await queryResult( - [ - { - test: [ - { - linked___NODE: `linked_A`, - }, - ], - }, - ], - ` - { - allNode { - edges { node { hair } } - } - } - `, - { types } - ) - const originalNode = allNodes.find( - node => node.internal.type === `Linked_A` - ) - - expect(getExampleValues({ typeName: `Linked_A` })).toEqual(originalNode) - }) - - it(`skips fields with missing nodes`, async () => { - const fields = inferInputObjectStructureFromNodes({ - nodes: [], - exampleValue: { - movie___NODE: `foobar`, - }, - }).inferredFields - - expect(Object.keys(fields)).toHaveLength(0) - }) }) diff --git a/packages/gatsby/src/schema/__tests__/infer-graphql-type-test.js b/packages/gatsby/src/schema/__tests__/infer-graphql-type-test.js index 28444eda7e2a7..24886bfb7fca8 100644 --- a/packages/gatsby/src/schema/__tests__/infer-graphql-type-test.js +++ b/packages/gatsby/src/schema/__tests__/infer-graphql-type-test.js @@ -13,6 +13,7 @@ const { clearUnionTypes, } = require(`../infer-graphql-type`) const { clearTypeNames } = require(`../create-type-name`) +require(`../../db/__tests__/fixtures/ensure-loki`)() function queryResult(nodes, fragment, { types = [], ignoreFields } = {}) { const schema = new GraphQLSchema({ @@ -522,6 +523,8 @@ describe(`GraphQL type inferance`, () => { beforeEach(() => { ;({ store } = require(`../../redux`)) + store.dispatch({ type: `DELETE_CACHE` }) + const { setFileNodeRootType } = require(`../types/type-file`) const fileType = { name: `File`, @@ -612,6 +615,7 @@ describe(`GraphQL type inferance`, () => { beforeEach(() => { ;({ store } = require(`../../redux`)) + store.dispatch({ type: `DELETE_CACHE` }) types = [ { name: `Child`, diff --git a/packages/gatsby/src/schema/__tests__/run-query.js b/packages/gatsby/src/schema/__tests__/run-query.js new file mode 100644 index 0000000000000..d905cd73050f8 --- /dev/null +++ b/packages/gatsby/src/schema/__tests__/run-query.js @@ -0,0 +1,470 @@ +const { GraphQLObjectType } = require(`graphql`) +const nodesQuery = require(`../../db/nodes-query`) +const { inferObjectStructureFromNodes } = require(`../infer-graphql-type`) +const { store } = require(`../../redux`) +require(`../../db/__tests__/fixtures/ensure-loki`)() + +const makeNodes = () => [ + { + id: `0`, + internal: { type: `Test` }, + index: 0, + name: `The Mad Max`, + string: `a`, + float: 1.5, + hair: 1, + date: `2006-07-22T22:39:53.000Z`, + anArray: [1, 2, 3, 4], + key: { + withEmptyArray: [], + }, + anotherKey: { + withANested: { + nestedKey: `foo`, + emptyArray: [], + anotherEmptyArray: [], + }, + }, + frontmatter: { + date: `2006-07-22T22:39:53.000Z`, + title: `The world of dash and adventure`, + tags: [`moo`, `foo`], + blue: 100, + }, + anObjectArray: [ + { aString: `some string`, aNumber: 2, aBoolean: true }, + { aString: `some string`, aNumber: 2, anArray: [1, 2] }, + ], + boolean: true, + }, + { + id: `1`, + internal: { type: `Test` }, + index: 1, + name: `The Mad Wax`, + string: `b`, + float: 2.5, + hair: 2, + anArray: [1, 2, 5, 4], + waxOnly: { + foo: true, + }, + anotherKey: { + withANested: { + nestedKey: `foo`, + }, + }, + frontmatter: { + date: `2006-07-22T22:39:53.000Z`, + title: `The world of slash and adventure`, + blue: 10010, + circle: `happy`, + }, + boolean: false, + data: { + tags: [ + { + tag: { + document: [ + { + data: { + tag: `Design System`, + }, + number: 3, + }, + ], + }, + }, + ], + }, + }, + { + id: `2`, + internal: { type: `Test` }, + index: 2, + name: `The Mad Wax`, + string: `c`, + float: 3.5, + hair: 0, + date: `2006-07-29T22:39:53.000Z`, + waxOnly: null, + anotherKey: { + withANested: { + nestedKey: `bar`, + }, + }, + frontmatter: { + date: `2006-07-22T22:39:53.000Z`, + title: `The world of shave and adventure`, + blue: 10010, + circle: `happy`, + }, + data: { + tags: [ + { + tag: { + document: [ + { + data: { + tag: `Gatsby`, + }, + }, + ], + }, + }, + { + tag: { + document: [ + { + data: { + tag: `Design System`, + }, + number: 5, + }, + ], + }, + }, + ], + }, + }, +] + +function makeGqlType(nodes) { + return new GraphQLObjectType({ + name: `Test`, + fields: inferObjectStructureFromNodes({ + nodes, + types: [{ name: `Test` }], + }), + }) +} + +function resetDb(nodes) { + store.dispatch({ type: `DELETE_CACHE` }) + for (const node of nodes) { + store.dispatch({ type: `CREATE_NODE`, payload: node }) + } +} + +async function runQuery(queryArgs) { + const nodes = makeNodes() + resetDb(nodes) + const gqlType = makeGqlType(nodes) + const context = {} + const args = { + gqlType, + context, + firstOnly: false, + queryArgs, + } + return await nodesQuery.run(args) +} + +async function runFilter(filter) { + return await runQuery({ filter }) +} + +describe(`Filter fields`, () => { + it(`handles eq operator`, async () => { + let result = await runFilter({ hair: { eq: 2 } }) + + expect(result.length).toEqual(1) + expect(result[0].hair).toEqual(2) + }) + + it(`handles eq operator with false value`, async () => { + let result = await runFilter({ boolean: { eq: false } }) + + expect(result.length).toEqual(1) + expect(result[0].name).toEqual(`The Mad Wax`) + }) + + it(`handles eq operator with 0`, async () => { + let result = await runFilter({ hair: { eq: 0 } }) + + expect(result.length).toEqual(1) + expect(result[0].hair).toEqual(0) + }) + + it(`handles ne operator`, async () => { + let result = await runFilter({ hair: { ne: 2 } }) + + expect(result.length).toEqual(2) + expect(result[0].hair).toEqual(1) + }) + + it(`handles nested ne: true operator`, async () => { + let result = await runFilter({ waxOnly: { foo: { ne: true } } }) + + expect(result.length).toEqual(2) + }) + + it(`handles lt operator`, async () => { + let result = await runFilter({ hair: { lt: 2 } }) + + expect(result.length).toEqual(2) + expect(result[0].hair).toEqual(1) + expect(result[1].hair).toEqual(0) + }) + + it(`handles lte operator`, async () => { + let result = await runFilter({ hair: { lte: 1 } }) + + expect(result.length).toEqual(2) + expect(result[0].hair).toEqual(1) + expect(result[1].hair).toEqual(0) + }) + + it(`handles gt operator`, async () => { + let result = await runFilter({ hair: { gt: 0 } }) + + expect(result.length).toEqual(2) + expect(result[0].hair).toEqual(1) + expect(result[1].hair).toEqual(2) + }) + + it(`handles gte operator`, async () => { + let result = await runFilter({ hair: { gte: 1 } }) + + expect(result.length).toEqual(2) + expect(result[0].hair).toEqual(1) + expect(result[1].hair).toEqual(2) + }) + + it(`handles the regex operator`, async () => { + let result = await runFilter({ name: { regex: `/^the.*wax/i` } }) + expect(result.length).toEqual(2) + expect(result[0].name).toEqual(`The Mad Wax`) + }) + + it(`handles the in operator for strings`, async () => { + let result = await runFilter({ string: { in: [`b`, `c`] } }) + expect(result.length).toEqual(2) + expect(result[0].index).toEqual(1) + }) + + it(`handles the in operator for ints`, async () => { + let result = await runFilter({ index: { in: [0, 2] } }) + expect(result.length).toEqual(2) + expect(result[0].index).toEqual(0) + expect(result[1].index).toEqual(2) + }) + + it(`handles the in operator for floats`, async () => { + let result = await runFilter({ float: { in: [1.5, 2.5] } }) + expect(result.length).toEqual(2) + expect(result[0].index).toEqual(0) + expect(result[1].index).toEqual(1) + }) + + it(`handles the in operator for booleans`, async () => { + let result = await runFilter({ boolean: { in: [true] } }) + expect(result.length).toEqual(1) // 2 + expect(result[0].index).toEqual(0) + // expect(result[1].index).toEqual(2) + }) + + it(`handles the in operator for array`, async () => { + let result = await runFilter({ anArray: { in: [5] } }) + expect(result.length).toEqual(1) + expect(result[0].name).toEqual(`The Mad Wax`) + }) + + it(`handles the nested in operator for array of strings`, async () => { + let result = await runFilter({ frontmatter: { tags: { in: [`moo`] } } }) + expect(result).toHaveLength(1) + expect(result[0].name).toEqual(`The Mad Max`) + }) + + it(`handles the elemMatch operator for array of objects`, async () => { + let result = await runFilter({ + data: { + tags: { + elemMatch: { + tag: { + document: { + elemMatch: { + data: { + tag: { eq: `Gatsby` }, + }, + }, + }, + }, + }, + }, + }, + }) + + expect(result.length).toEqual(1) + expect(result[0].index).toEqual(2) + }) + + it(`handles the elemMatch operator for array of objects (2)`, async () => { + let result = await runFilter({ + data: { + tags: { + elemMatch: { + tag: { + document: { + elemMatch: { + data: { + tag: { eq: `Design System` }, + }, + }, + }, + }, + }, + }, + }, + }) + + expect(result.length).toEqual(2) + expect(result[0].index).toEqual(1) + expect(result[1].index).toEqual(2) + }) + + it(`handles the elemMatch operator for array of objects (number)`, async () => { + let result = await runFilter({ + data: { + tags: { + elemMatch: { + tag: { + document: { + elemMatch: { + number: { lt: 4 }, + }, + }, + }, + }, + }, + }, + }) + + expect(result.length).toEqual(1) + expect(result[0].index).toEqual(1) + }) + + it(`handles the nin operator for array`, async () => { + let result = await runFilter({ anArray: { nin: [5] } }) + + expect(result.length).toEqual(2) + + result.forEach(edge => { + expect(edge.anArray).not.toEqual(expect.arrayContaining([5])) + }) + }) + + it(`handles the nin operator for strings`, async () => { + let result = await runFilter({ string: { nin: [`b`, `c`] } }) + + expect(result.length).toEqual(1) + result.forEach(edge => { + expect(edge.string).not.toEqual(`b`) + expect(edge.string).not.toEqual(`c`) + }) + }) + + it(`handles the nin operator for ints`, async () => { + let result = await runFilter({ index: { nin: [0, 2] } }) + + expect(result.length).toEqual(1) + result.forEach(edge => { + expect(edge.index).not.toEqual(0) + expect(edge.index).not.toEqual(2) + }) + }) + + it(`handles the nin operator for floats`, async () => { + let result = await runFilter({ float: { nin: [1.5] } }) + + expect(result.length).toEqual(2) + result.forEach(edge => { + expect(edge.float).not.toEqual(1.5) + }) + }) + + it(`handles the nin operator for booleans`, async () => { + let result = await runFilter({ boolean: { nin: [true, null] } }) + + expect(result.length).toEqual(1) + result.forEach(edge => { + expect(edge.boolean).not.toEqual(null) + expect(edge.boolean).not.toEqual(true) + }) + }) + + it(`handles the glob operator`, async () => { + let result = await runFilter({ name: { glob: `*Wax` } }) + + expect(result.length).toEqual(2) + expect(result[0].name).toEqual(`The Mad Wax`) + }) + + it(`filters date fields`, async () => { + let result = await runFilter({ date: { ne: null } }) + + expect(result.length).toEqual(2) + expect(result[0].index).toEqual(0) + expect(result[1].index).toEqual(2) + }) +}) + +describe(`collection fields`, () => { + it(`sorts results`, async () => { + let result = await runQuery({ + limit: 10, + sort: { + fields: [`frontmatter___blue`], + order: `desc`, + }, + }) + + expect(result.length).toEqual(3) + expect(result[0].name).toEqual(`The Mad Wax`) + }) + + it(`sorts results with desc has null fields first`, async () => { + let result = await runQuery({ + limit: 10, + sort: { + fields: [`waxOnly`], + order: `desc`, + }, + }) + + expect(result.length).toEqual(3) + expect(result[0].id).toEqual(`0`) + expect(result[1].id).toEqual(`2`) + expect(result[2].id).toEqual(`1`) + }) + + it(`sorts results with asc has null fields last`, async () => { + let result = await runQuery({ + limit: 10, + sort: { + fields: [`waxOnly`], + order: `asc`, + }, + }) + + expect(result.length).toEqual(3) + expect(result[0].id).toEqual(`1`) + expect(result[1].id).toEqual(`2`) + expect(result[2].id).toEqual(`0`) + }) + + it(`applies order (asc/desc) to all sort fields`, async () => { + let result = await runQuery({ + limit: 10, + sort: { + fields: [`frontmatter___blue`, `id`], + order: `desc`, + }, + }) + + expect(result.length).toEqual(3) + expect(result[0].id).toEqual(`1`) // blue = 10010, id = 1 + expect(result[1].id).toEqual(`2`) // blue = 10010, id = 2 + expect(result[2].id).toEqual(`0`) // blue = 100, id = 0 + }) +}) diff --git a/packages/gatsby/src/schema/build-node-connections.js b/packages/gatsby/src/schema/build-node-connections.js index 5bbd2d44888a2..6ea3524d86970 100644 --- a/packages/gatsby/src/schema/build-node-connections.js +++ b/packages/gatsby/src/schema/build-node-connections.js @@ -12,7 +12,7 @@ const buildSortArg = require(`./create-sort-field`) const buildConnectionFields = require(`./build-connection-fields`) const createPageDependency = require(`../redux/actions/add-page-dependency`) const { connectionFromArray } = require(`graphql-skip-limit`) -const { runQuery } = require(`../db/nodes`) +const { run: runQuery } = require(`../db/nodes-query`) function handleQueryResult({ results, queryArgs, path }) { if (results && results.length) { diff --git a/packages/gatsby/src/schema/build-node-types.js b/packages/gatsby/src/schema/build-node-types.js index 6376251882d24..3045878bf878d 100644 --- a/packages/gatsby/src/schema/build-node-types.js +++ b/packages/gatsby/src/schema/build-node-types.js @@ -21,7 +21,8 @@ const { getNodes, getNode } = require(`../db/nodes`) const pageDependencyResolver = require(`./page-dependency-resolver`) const { setFileNodeRootType } = require(`./types/type-file`) const { clearTypeExampleValues } = require(`./data-tree-utils`) -const { runQuery } = require(`../db/nodes`) +const { run: runQuery } = require(`../db/nodes-query`) +const lazyFields = require(`./lazy-fields`) import type { ProcessedNodeType } from "./infer-graphql-type" @@ -171,7 +172,7 @@ function buildNodeObjectType({ }) } -async function buildProcessedType(nodes, typeName, processedTypes, span) { +async function buildProcessedType({ nodes, typeName, processedTypes, span }) { const intermediateType = {} intermediateType.name = typeName @@ -188,6 +189,9 @@ async function buildProcessedType(nodes, typeName, processedTypes, span) { const pluginInputFields = inferInputObjectStructureFromFields({ fields: mergedFieldsFromPlugins, }) + _.each(pluginInputFields.inferredFields, (fieldConfig, fieldName) => { + lazyFields.add(typeName, fieldName) + }) const gqlType = buildNodeObjectType({ typeName, @@ -227,7 +231,7 @@ function groupNodesByType(nodes) { ) } -module.exports = async ({ parentSpan }) => { +async function buildAll({ parentSpan }) { const spanArgs = parentSpan ? { childOf: parentSpan } : {} const span = tracer.startSpan(`build schema`, spanArgs) @@ -243,12 +247,12 @@ module.exports = async ({ parentSpan }) => { await Promise.all( _.map(types, async (nodes, typeName) => { const fieldName = _.camelCase(typeName) - const processedType = await buildProcessedType( + const processedType = await buildProcessedType({ nodes, typeName, processedTypes, - span - ) + span, + }) processedTypes[fieldName] = processedType // Special case to construct linked file type used by type inferring if (typeName === `File`) { @@ -262,3 +266,9 @@ module.exports = async ({ parentSpan }) => { return processedTypes } + +module.exports = { + buildProcessedType, + buildNodeObjectType, + buildAll, +} diff --git a/packages/gatsby/src/schema/index.js b/packages/gatsby/src/schema/index.js index 99ba20836be44..802ed401b7714 100644 --- a/packages/gatsby/src/schema/index.js +++ b/packages/gatsby/src/schema/index.js @@ -3,7 +3,7 @@ const _ = require(`lodash`) const { GraphQLSchema, GraphQLObjectType } = require(`graphql`) const { mergeSchemas } = require(`graphql-tools`) -const buildNodeTypes = require(`./build-node-types`) +const nodeTypes = require(`./build-node-types`) const nodeConnections = require(`./build-node-connections`) const { store } = require(`../redux`) const invariant = require(`invariant`) @@ -21,7 +21,7 @@ module.exports.buildNodesSchema = buildNodesSchema module.exports.build = async ({ parentSpan }) => { clearUnionTypes() - const typesGQL = await buildNodeTypes({ parentSpan }) + const typesGQL = await nodeTypes.buildAll({ parentSpan }) const connections = nodeConnections.buildAll(_.values(typesGQL)) // Pull off just the graphql node from each type object. diff --git a/packages/gatsby/src/schema/infer-graphql-input-fields.js b/packages/gatsby/src/schema/infer-graphql-input-fields.js index cffcd9d5b639a..efcb3d425cdbf 100644 --- a/packages/gatsby/src/schema/infer-graphql-input-fields.js +++ b/packages/gatsby/src/schema/infer-graphql-input-fields.js @@ -210,6 +210,7 @@ function inferGraphQLInputFields({ const EXCLUDE_KEYS = { parent: 1, children: 1, + $loki: 1, } type InferInputOptions = { diff --git a/packages/gatsby/src/schema/infer-graphql-type.js b/packages/gatsby/src/schema/infer-graphql-type.js index df32260b360df..4e9c24ebd5802 100644 --- a/packages/gatsby/src/schema/infer-graphql-type.js +++ b/packages/gatsby/src/schema/infer-graphql-type.js @@ -26,6 +26,7 @@ const DateType = require(`./types/type-date`) const FileType = require(`./types/type-file`) const is32BitInteger = require(`../utils/is-32-bit-integer`) const unionTypes = new Map() +const lazyFields = require(`./lazy-fields`) import type { GraphQLOutputType } from "graphql" import type { @@ -113,21 +114,24 @@ function inferGraphQLType({ return { type: GraphQLBoolean } case `string`: return { type: GraphQLString } - case `object`: + case `object`: { + const typeName = createTypeName(fieldName) return { type: new GraphQLObjectType({ - name: createTypeName(fieldName), + name: typeName, fields: _inferObjectStructureFromNodes( { ...otherArgs, selector, nodes, types, + typeName, }, exampleValue ), }), } + } case `number`: return is32BitInteger(exampleValue) ? { type: GraphQLInt } @@ -304,18 +308,20 @@ type inferTypeOptions = { types: ProcessedNodeType[], ignoreFields?: string[], selector?: string, + typeName?: string, } const EXCLUDE_KEYS = { id: 1, parent: 1, children: 1, + $loki: 1, } // Call this for the top level node + recursively for each sub-object. // E.g. This gets called for Markdown and then for its frontmatter subobject. function _inferObjectStructureFromNodes( - { nodes, types, selector, ignoreFields }: inferTypeOptions, + { nodes, types, selector, ignoreFields, typeName }: inferTypeOptions, exampleValue: ?Object ): GraphQLFieldConfigMap<*, *> { const config = store.getState().config @@ -325,12 +331,15 @@ function _inferObjectStructureFromNodes( // Ensure nodes have internal key with object. nodes = nodes.map(n => (n.internal ? n : { ...n, internal: {} })) - const typeName: string = nodes[0].internal.type + const rootTypeName: string = nodes[0].internal.type + if (!typeName) { + typeName = rootTypeName + } let resolvedExample: Object = exampleValue != null ? exampleValue - : getExampleValues({ nodes, typeName, ignoreFields }) + : getExampleValues({ nodes, typeName: rootTypeName, ignoreFields }) const inferredFields = {} _.each(resolvedExample, (value, key) => { @@ -341,7 +350,7 @@ function _inferObjectStructureFromNodes( // Several checks to see if a field is pointing to custom type // before we try automatic inference. const nextSelector = selector ? `${selector}.${key}` : key - const fieldSelector = `${typeName}.${nextSelector}` + const fieldSelector = `${rootTypeName}.${nextSelector}` let fieldName = key let inferredField @@ -356,6 +365,7 @@ function _inferObjectStructureFromNodes( } else if (key.includes(`___NODE`)) { ;[fieldName] = key.split(`___`) inferredField = inferFromFieldName(value, nextSelector, types) + lazyFields.add(typeName, fieldName) } // Replace unsupported values diff --git a/packages/gatsby/src/schema/lazy-fields.js b/packages/gatsby/src/schema/lazy-fields.js new file mode 100644 index 0000000000000..5d3646a95ae15 --- /dev/null +++ b/packages/gatsby/src/schema/lazy-fields.js @@ -0,0 +1,64 @@ +// A normal Graphql field resolver will accept a node as an argument +// and return a field from that node. Whereas a lazy field will need +// to perform some side effects or non-deterministic behavior to +// return its value. Therefore, when a query filter includes a lazy +// field, we need to evaluate the field resolvers on all nodes before +// running the query. Examples of lazy fields include: +// +// - a markdown `wordcount` field (lazily calculates word count on its +// content) +// - image sharp processing field (lazily generates optimized images) +// +// Lazy fields are declared using the exported `add` function. This +// should be done during schema generation when fields are being +// created. Then at query time, we can use the exported `contains` +// function to figure out if a type/field pair is lazy, and therefore +// use sift for querying instead of loki + +const _ = require(`lodash`) +const { GraphQLList, GraphQLObjectType } = require(`graphql`) + +// Note: fields are never deleted from here. So a long running +// `develop` session, where nodes are being deleted might mean that +// fields exist here that aren't on any DB nodes anymore. This isn't +// ideal, BUT, the worst case is that queries will be executed by +// sift, rather than loki, so not a big deal +const typeFields = new Map() + +function contains(filters, fieldType) { + return _.some(filters, (fieldFilter, fieldName) => { + // If a field has been previously flagged as a lazy field, then + // return true + const storedFields = typeFields.get(fieldType.name) + if (storedFields && storedFields.has(fieldName)) { + return true + } else { + // Otherwise, the filter field might be an array of linked + // nodes, in which case we might filter via an elemMatch + // field. Or, it might be a nested linked object. In either + // case, we recurse + const gqlFieldType = fieldType.getFields()[fieldName]?.type + if (gqlFieldType) { + if (gqlFieldType instanceof GraphQLList && fieldFilter.elemMatch) { + return contains(fieldFilter.elemMatch, gqlFieldType.ofType) + } else if (gqlFieldType instanceof GraphQLObjectType) { + return contains(fieldFilter, gqlFieldType) + } + } + } + return false + }) +} + +function add(typeName, fieldName) { + if (typeFields.get(typeName)) { + typeFields.get(typeName).add(fieldName) + } else { + typeFields.set(typeName, new Set([fieldName])) + } +} + +module.exports = { + contains, + add, +} diff --git a/yarn.lock b/yarn.lock index da1a4d0b5d641..51e3230108825 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1620,6 +1620,11 @@ npmlog "^4.1.2" write-file-atomic "^2.3.0" +"@moocar/lokijs@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@moocar/lokijs/-/lokijs-1.0.1.tgz#545227c173030dd0e6b1e6bdcef528012a6c325c" + integrity sha512-7kqLSxGjYTJ+a+DkJ71bJSF3LLuOShSFCXfv5Eg2qVpCQp/E1JTlAp+rHgVy2HAu8QLuePKx57xURwt6o1EuFA== + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" From 38fd2b998ae67bcaf6248bc5ca45f5a30df65fe8 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Thu, 29 Nov 2018 13:58:57 +0100 Subject: [PATCH 430/462] chore(release): Publish - gatsby@2.0.59 --- packages/gatsby/CHANGELOG.md | 8 ++++++++ packages/gatsby/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 67524185fabe1..6dcca9a60b4c4 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.59](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.58...gatsby@2.0.59) (2018-11-29) + +### Features + +- **gatsby:** add lokijs nodes db implementation ([#9919](https://github.com/gatsbyjs/gatsby/issues/9919)) ([4bcca2a](https://github.com/gatsbyjs/gatsby/commit/4bcca2a)), closes [#9338](https://github.com/gatsbyjs/gatsby/issues/9338) + ## [2.0.58](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.57...gatsby@2.0.58) (2018-11-29) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 4e9fe529e5411..5fd35871a123b 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.58", + "version": "2.0.59", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" From 043b43bfa2b49aa13a1727387ce32620c7f6188e Mon Sep 17 00:00:00 2001 From: Vaibhav Sharma Date: Thu, 29 Nov 2018 18:57:05 +0530 Subject: [PATCH 431/462] Gatsby-Starter-Business Updated to Gatsby v2 along with new features (#10197) --- docs/starters.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/starters.yml b/docs/starters.yml index 1fc1cd92ca297..4ff6bbf6e452a 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -208,6 +208,8 @@ - PWA - Netlify CMS - Disqus + - Search + - Pagination features: - Complete Business Website Suite - Home Page, About Page, Pricing Page, Contact Page and Blog - Netlify CMS for Content Management @@ -216,6 +218,9 @@ - Progressive Web App & Offline Support - Tags and RSS Feed for Blog - Disqus and Share Support + - Elastic-Lunr Search + - Pagination + - Easy Configuration using `config.js` file - url: https://haysclark.github.io/gatsby-starter-casper/ repo: https://github.com/haysclark/gatsby-starter-casper description: n/a From 994ac972f89cfe69f0d42d2554d0313dbdd47e62 Mon Sep 17 00:00:00 2001 From: Stephen Tweeddale Date: Thu, 29 Nov 2018 15:41:28 +0000 Subject: [PATCH 432/462] Documentation fix: Execute trailing slash stripping function, rather than assign it. (#9924) The trailing slash stripping plugin [executes the function](https://github.com/gatsbyjs/gatsby/blob/f9714a5646523bc728586e3692190507ad68e6c1/packages/gatsby-plugin-remove-trailing-slashes/src/gatsby-node.js#L9) rather than just assigning it, so I'd imagine that's what the example code should be doing too. --- docs/docs/creating-and-modifying-pages.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/docs/creating-and-modifying-pages.md b/docs/docs/creating-and-modifying-pages.md index 670dc4e25501c..166379d0ddf85 100644 --- a/docs/docs/creating-and-modifying-pages.md +++ b/docs/docs/creating-and-modifying-pages.md @@ -114,6 +114,8 @@ _Note: There's also a plugin that will remove all trailing slashes from pages au [gatsby-plugin-remove-trailing-slashes](/packages/gatsby-plugin-remove-trailing-slashes/)_. ```javascript:title=gatsby-node.js +// Replacing '/' would result in empty string which is invalid +const replacePath = path => (path === `/` ? path : path.replace(/\/$/, ``)) // Implement the Gatsby API “onCreatePage”. This is // called after every page is created. exports.onCreatePage = ({ page, actions }) => { @@ -121,7 +123,7 @@ exports.onCreatePage = ({ page, actions }) => { return new Promise(resolve => { const oldPage = Object.assign({}, page) // Remove trailing slash unless page is / - page.path = _path => (_path === `/` ? _path : _path.replace(/\/$/, ``)) + page.path = replacePath(page.path) if (page.path !== oldPage.path) { // Replace new page with old page deletePage(oldPage) From 228a866d7bcc4704a9789c51458370c5cc81c3fd Mon Sep 17 00:00:00 2001 From: Enzo Ferey Date: Thu, 29 Nov 2018 17:29:26 +0100 Subject: [PATCH 433/462] feat(docs): Add accessibility doc (#10006) * Created the page. * Page content. * Link in the blog post. * Source attribution, language tweaks * Fixed Prettier error. --- docs/blog/2018-09-27-reach-router/index.md | 1 + docs/docs/making-your-site-accessible.md | 37 ++++++++++++++++++++++ www/src/data/sidebars/doc-links.yaml | 2 ++ 3 files changed, 40 insertions(+) create mode 100644 docs/docs/making-your-site-accessible.md diff --git a/docs/blog/2018-09-27-reach-router/index.md b/docs/blog/2018-09-27-reach-router/index.md index ff31832199fa1..d16888c8ba95e 100644 --- a/docs/blog/2018-09-27-reach-router/index.md +++ b/docs/blog/2018-09-27-reach-router/index.md @@ -58,6 +58,7 @@ Related Gatsby docs: - [V2 Migration Guide](/docs/migrating-from-v1-to-v2/#migrate-from-react-router-to-reachrouter) - [Gatsby Link API reference](/docs/gatsby-link/) - [V2 announcement blog post](/blog/2018-09-17-gatsby-v2/) +- [Making your site accessible](/docs/making-your-site-accessible) External references: diff --git a/docs/docs/making-your-site-accessible.md b/docs/docs/making-your-site-accessible.md new file mode 100644 index 0000000000000..e1f5f207a3836 --- /dev/null +++ b/docs/docs/making-your-site-accessible.md @@ -0,0 +1,37 @@ +--- +title: "Making your site accessible" +--- + +## What is accessibility? + +Back in the early days of the Web, Tim Berners-Lee, inventor of the World Wide Web, [said](https://www.w3.org/Press/IPO-announce): + +> "The power of the Web is in its universality. +> Access by everyone regardless of disability is an essential aspect." + +The web of today is an important resource in many aspects of life such as health care, education, or commerce. Accessibility is an important consideration when building for the web. + +[Web accessibility](https://www.w3.org/WAI/fundamentals/accessibility-intro/#what) means that websites, tools, and technologies are designed and developed so that people with disabilities can use them. But not only people with permanent disabilities benefit from it. Accessibility also benefits people with temporary disabilities. For example imagine being in a environment where you cannot listen to audio or if you had a broken arm. + +Accessibility [supports](https://www.w3.org/standards/webdesign/accessibility#case) social inclusion for everyone, and has a strong business case. + +## Gatsby helps build in accessibility + +While ultimately it's up to you to develop your site with accessibility in mind, Gatsby aims to provide as much out-of-the-box support as possible. + +### Accessible routing + +One of the most common features of every site is navigation. People should be able to navigate across your pages and content in an intuitive and accessible way. + +That's why every Gatsby site has an accessible navigation experience by default. + +It is possible thanks to [@reach/router](https://reach.tech/router), a routing library for React, that provides focus management on page change. It also has a ~70% smaller bundle size than the famous [react-router](https://github.com/ReactTraining/react-router). + +Since the [second major release](https://www.gatsbyjs.org/blog/2018-09-17-gatsby-v2/), your Gatsby sites use `@reach/router` under the hood. The [Gatsby Link Component](https://www.gatsbyjs.org/docs/gatsby-link/) wraps [@reach/router's Link component](https://reach.tech/router/api/Link), so you don't need to think about it. + +## How to improve accessibility? + +Accessibility by default is a win for everyone. Learn more about web accessibility in general: + +- [Free course](https://www.udacity.com/course/web-accessibility--ud891) by Google and Udacity. +- [WebAIM introduction](https://webaim.org/intro/) to web accessibility. diff --git a/www/src/data/sidebars/doc-links.yaml b/www/src/data/sidebars/doc-links.yaml index ed3a4e0482bc3..cc58b11d52337 100644 --- a/www/src/data/sidebars/doc-links.yaml +++ b/www/src/data/sidebars/doc-links.yaml @@ -222,6 +222,8 @@ link: /docs/creating-a-sitemap/ - title: Linking between pages link: /docs/linking-between-pages/ + - title: Making your site accessible + link: /docs/making-your-site-accessible - title: Routing link: /docs/routing/ items: From 71d7f23f1c34505a9eb9ae12446aad9a38292f5e Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Thu, 29 Nov 2018 16:15:17 -0600 Subject: [PATCH 434/462] fix(gatsby-remark-prismjs): prevent additional blank line from appearing (#10209) * fix(gatsby-remark-prismjs): prevent additional blank line from appearing * chore: don't use template literals; not needed * test: update snapshots --- .../src/__tests__/__snapshots__/index.js.snap | 71 +++++--------- .../__snapshots__/highlight-code.js.snap | 11 +-- .../highlight-line-range.js.snap | 95 ++++++------------- .../src/highlight-line-range.js | 4 +- 4 files changed, 56 insertions(+), 125 deletions(-) diff --git a/packages/gatsby-remark-embed-snippet/src/__tests__/__snapshots__/index.js.snap b/packages/gatsby-remark-embed-snippet/src/__tests__/__snapshots__/index.js.snap index b3f972f103836..471f54dd08c9d 100644 --- a/packages/gatsby-remark-embed-snippet/src/__tests__/__snapshots__/index.js.snap +++ b/packages/gatsby-remark-embed-snippet/src/__tests__/__snapshots__/index.js.snap @@ -79,12 +79,10 @@ Object { "type": "html", "value": "
    html {
    -height: 100%;
    -}
    +height: 100%;}
     
     * {
    -box-sizing: border-box;
    -}
    +box-sizing: border-box;}
    ", }, ], @@ -142,9 +140,7 @@ Object { "type": "html", "value": "
    html {
    -height: 100%;
    -width: 100%;
    -}
    +height: 100%;width: 100%;}
    ", }, ], @@ -260,10 +256,8 @@ Object { "value": "
    <html>
     <body>
    -<h1>highlighted</h1>
    -<p>
    -highlighted
    -</p>
    +<h1>highlighted</h1><p>
    +highlighted</p>
     </body>
     </html>
    ", @@ -325,8 +319,7 @@ Object {
    <html>
     <body>
     <p>
    -highlighted
    -</p>
    +highlighted</p>
     </body>
     </html>
    ", @@ -443,14 +436,12 @@ Object { "type": "html", "value": "
    <div>
    -<button>Add Item</button> 
    -
    +<button>Add Item</button> 
     <ReactCSSTransitionGroup
     transitionName=\\"example\\"
     transitionEnterTimeout={500}
     transitionLeaveTimeout={300}>
    -{items}
    -</ReactCSSTransitionGroup>
    +{items}</ReactCSSTransitionGroup>
     </div>
    ", }, @@ -511,11 +502,9 @@ Object {
    import React from 'react';
     import ReactDOM from 'react-dom';
     
    -ReactDOM.render(
    -<h1>Hello, world!</h1>,
    +ReactDOM.render(<h1>Hello, world!</h1>,
     document.getElementById('root')
    -);
    -
    +);
    ", }, ], @@ -573,9 +562,7 @@ Object { "type": "html", "value": "
    ReactDOM.render(
    -<h1>Hello, world!</h1>,
    -document.getElementById('root')
    -);
    +<h1>Hello, world!</h1>,document.getElementById('root'));
    ", }, ], @@ -634,10 +621,7 @@ Object { "value": "
    <ul>
     <li>Not highlighted</li>
    -<li>Highlighted</li>
    -<li>Highlighted</li>
    -<li>Highlighted</li>
    -<li>Not highlighted</li>
    +<li>Highlighted</li><li>Highlighted</li><li>Highlighted</li><li>Not highlighted</li>
     </div>
    ", }, @@ -696,15 +680,12 @@ Object { "type": "html", "value": "
    let notHighlighted;
    -let highlighted;
    -
    +let highlighted;
     notHighlighted = 1;
     
    -highlighted = 2;
    -
    +highlighted = 2;
     notHighlighted = 3;
    -highlighted = 4;
    -
    +highlighted = 4;
    ", }, ], @@ -875,10 +856,8 @@ Object { }, "type": "html", "value": "
    -
    foo: \\"highlighted\\"
    -bar: \\"not highlighted\\"
    -baz: \\"highlighted\\"
    -qux: \\"not highlighted\\"
    +
    foo: \\"highlighted\\"bar: \\"not highlighted\\"
    +baz: \\"highlighted\\"qux: \\"not highlighted\\"
    ", }, ], @@ -935,10 +914,8 @@ Object { }, "type": "html", "value": "
    -
    foo: \\"highlighted\\"
    -bar: \\"not highlighted\\"
    -baz: \\"highlighted\\"
    -
    +
    foo: \\"highlighted\\"bar: \\"not highlighted\\"
    +baz: \\"highlighted\\"
    ", }, ], @@ -1054,12 +1031,10 @@ Object { "value": "
    # Yarn
     yarn init
    -yarn add react react-dom
    -
    +yarn add react react-dom
     # NPM
     npm init
    -npm install --save react react-dom
    -
    +npm install --save react react-dom
    ", }, ], @@ -1117,9 +1092,7 @@ Object { "type": "html", "value": "
    echo \\"not highlighted\\"
    -echo \\"highlighted\\"
    -echo \\"highlighted\\"
    -echo \\"not highlighted\\"
    +echo \\"highlighted\\"echo \\"highlighted\\"echo \\"not highlighted\\"
    ", }, ], diff --git a/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-code.js.snap b/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-code.js.snap index 7829320580221..d741cd7491b34 100644 --- a/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-code.js.snap +++ b/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-code.js.snap @@ -1,9 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`highlight code and lines with PrismJS for language cpp 1`] = ` -" -int sum(a, b) { - return a + b; +"int sum(a, b) { return a + b; } " `; @@ -20,11 +18,8 @@ exports[`highlight code and lines with PrismJS for language jsx 1`] = ` render() { return ( - <div> - <h1>Counter</h1> - <p>current count: {this.state.count}</p> - <button onClick={() => this.setState({ count: this.state.count + 1 })}> - plus + <div> <h1>Counter</h1> <p>current count: {this.state.count}</p> + <button onClick={() => this.setState({ count: this.state.count + 1 })}> plus </button> <button onClick={() => this.setState({ count: this.state.count - 1 })}> minus diff --git a/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-line-range.js.snap b/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-line-range.js.snap index b0eb94aad0543..da5f0b4180ffe 100644 --- a/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-line-range.js.snap +++ b/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/highlight-line-range.js.snap @@ -1,87 +1,50 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`highlighting a line range highlight-line highlights line 1`] = ` -" return \\"hello world\\" -" -`; +exports[`highlighting a line range highlight-line highlights line 1`] = `" return \\"hello world\\""`; -exports[`highlighting a line range highlight-next-line highlights correct line 1`] = ` -" return \\"hello world\\" -" -`; +exports[`highlighting a line range highlight-next-line highlights correct line 1`] = `" return \\"hello world\\""`; exports[`highlighting a line range highlight-range does not highlight and warns if range is invalid 1`] = `""`; exports[`highlighting a line range highlight-range highlights correct lines 1`] = ` -" a = 1 + 1 - - b = 2 + 2 - - return \\"hello world\\" -" +" a = 1 + 1 + b = 2 + 2 + return \\"hello world\\"" `; exports[`highlighting a line range highlight-range highlights until end of code block if ranges goes farther 1`] = ` -" a = 1 + 1 - - b = 2 + 2 - - return \\"hello world\\" - -} - - -" +" a = 1 + 1 + b = 2 + 2 + return \\"hello world\\" +} +" `; exports[`highlighting a line range highlight-start / highlight-end highlights correct lines 1`] = ` -" var a = \\"b\\" - - return a + \\"hello world\\" -" +" var a = \\"b\\" + return a + \\"hello world\\"" `; exports[`highlighting a line range highlight-start / highlight-end highlights without end directive 1`] = ` -"var a = \\"b\\" - -return a + \\"hello world\\" - - -" +"var a = \\"b\\" +return a + \\"hello world\\" +" `; -exports[`highlighting a line range jsx comment highlights comment line 1`] = ` -" -" -`; +exports[`highlighting a line range jsx comment highlights comment line 1`] = `" "`; -exports[`highlighting a line range jsx comment highlights comment line after Prism highlighting 1`] = ` -" <button>sup</button> -" -`; +exports[`highlighting a line range jsx comment highlights comment line after Prism highlighting 1`] = `" <button>sup</button>"`; exports[`highlighting a line range kitchen sink highlights multiple directives 1`] = ` -"import React, { Component } from \\"react\\" - - state = { - - count: 0, - - } - - count: state.count + 1, - - render() { - - const { count } = this.state - - - - -" -`; - -exports[`highlighting a line range yaml highlights yaml 1`] = ` -"- title: catorce -" -`; +"import React, { Component } from \\"react\\" + state = { + count: 0, + } + count: state.count + 1, + render() { + const { count } = this.state + + " +`; + +exports[`highlighting a line range yaml highlights yaml 1`] = `"- title: catorce"`; diff --git a/packages/gatsby-remark-prismjs/src/highlight-line-range.js b/packages/gatsby-remark-prismjs/src/highlight-line-range.js index 211d84e8d82e9..2c04883837a82 100644 --- a/packages/gatsby-remark-prismjs/src/highlight-line-range.js +++ b/packages/gatsby-remark-prismjs/src/highlight-line-range.js @@ -47,7 +47,7 @@ const stripComment = line => ) const wrap = line => - [``, `${line}\n`, ``].join(``) + [``, line, ``].join(``) const wrapAndStripComment = line => wrap(stripComment(line)) @@ -149,7 +149,7 @@ module.exports = function highlightLineRange(code, highlights = []) { const split = code.split(`\n`) // If a highlight range is passed with the language declaration, e.g. - // ```jsx{1, 3-4} + // ``jsx{1, 3-4} // we only use that and do not try to parse highlight directives if (highlights.length > 0) { return split.map((line, i) => { From 2483aef69fa36b59ccb53cba23df08f10ac1e712 Mon Sep 17 00:00:00 2001 From: Nicholas Drane Date: Thu, 29 Nov 2018 21:56:42 -0600 Subject: [PATCH 435/462] fix(gatsby-transformer-remark): render html attributes in html excerpt (#10196) * track markdown properties * fix image markdown --- .../src/__tests__/__snapshots__/extend-node.js.snap | 2 +- .../gatsby-transformer-remark/src/__tests__/extend-node.js | 4 ++-- packages/gatsby-transformer-remark/src/hast-processing.js | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/gatsby-transformer-remark/src/__tests__/__snapshots__/extend-node.js.snap b/packages/gatsby-transformer-remark/src/__tests__/__snapshots__/extend-node.js.snap index 648fc80a20a74..9bed3f6306003 100644 --- a/packages/gatsby-transformer-remark/src/__tests__/__snapshots__/extend-node.js.snap +++ b/packages/gatsby-transformer-remark/src/__tests__/__snapshots__/extend-node.js.snap @@ -57,7 +57,7 @@ Object { exports[`Excerpt is generated correctly from schema given an html format, it correctly maps nested markdown to html 1`] = ` Object { - "excerpt": "

    Where oh where is that pony?

    ", + "excerpt": "

    Where oh where is \\"that?

    ", "frontmatter": Object { "title": "my little pony", }, diff --git a/packages/gatsby-transformer-remark/src/__tests__/extend-node.js b/packages/gatsby-transformer-remark/src/__tests__/extend-node.js index 7fd5a833895c0..938c6eb590405 100644 --- a/packages/gatsby-transformer-remark/src/__tests__/extend-node.js +++ b/packages/gatsby-transformer-remark/src/__tests__/extend-node.js @@ -245,7 +245,7 @@ title: "my little pony" date: "2017-09-18T23:19:51.246Z" --- -Where oh [*where*](nick.com) **_is_** that pony?`, +Where oh [*where*](nick.com) **_is_** ![that pony](pony.png)?`, `excerpt(format: HTML) frontmatter { title @@ -254,7 +254,7 @@ Where oh [*where*](nick.com) **_is_** that pony?`, node => { expect(node).toMatchSnapshot() expect(node.excerpt).toMatch( - `

    Where oh where is that pony?

    ` + `

    Where oh where is that pony?

    ` ) } ) diff --git a/packages/gatsby-transformer-remark/src/hast-processing.js b/packages/gatsby-transformer-remark/src/hast-processing.js index 46068438a9cff..b6d5ac9dbdeb8 100644 --- a/packages/gatsby-transformer-remark/src/hast-processing.js +++ b/packages/gatsby-transformer-remark/src/hast-processing.js @@ -4,6 +4,7 @@ function duplicateNode(node) { children: [], tagName: node.tagName, value: node.value, + properties: node.properties, } } From 00851073c9277370509fea5136cfcf3619ce6bae Mon Sep 17 00:00:00 2001 From: Dustin Schau Date: Thu, 29 Nov 2018 21:57:29 -0600 Subject: [PATCH 436/462] chore(release): Publish - gatsby-remark-embed-snippet@3.1.2 - gatsby-remark-prismjs@3.1.2 - gatsby-transformer-remark@2.1.15 --- packages/gatsby-remark-embed-snippet/CHANGELOG.md | 8 ++++++++ packages/gatsby-remark-embed-snippet/package.json | 2 +- packages/gatsby-remark-prismjs/CHANGELOG.md | 8 ++++++++ packages/gatsby-remark-prismjs/package.json | 2 +- packages/gatsby-transformer-remark/CHANGELOG.md | 8 ++++++++ packages/gatsby-transformer-remark/package.json | 2 +- 6 files changed, 27 insertions(+), 3 deletions(-) diff --git a/packages/gatsby-remark-embed-snippet/CHANGELOG.md b/packages/gatsby-remark-embed-snippet/CHANGELOG.md index fbb1e4677a3fb..764d3fee44e66 100644 --- a/packages/gatsby-remark-embed-snippet/CHANGELOG.md +++ b/packages/gatsby-remark-embed-snippet/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.1.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-embed-snippet/compare/gatsby-remark-embed-snippet@3.1.1...gatsby-remark-embed-snippet@3.1.2) (2018-11-30) + +### Bug Fixes + +- **gatsby-remark-prismjs:** prevent additional blank line from appearing ([#10209](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-embed-snippet/issues/10209)) ([71d7f23](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-embed-snippet/commit/71d7f23)) + ## [3.1.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-embed-snippet/compare/gatsby-remark-embed-snippet@3.1.0...gatsby-remark-embed-snippet@3.1.1) (2018-11-29) diff --git a/packages/gatsby-remark-embed-snippet/package.json b/packages/gatsby-remark-embed-snippet/package.json index 5d5bf13dd0496..7ce488f4e9410 100644 --- a/packages/gatsby-remark-embed-snippet/package.json +++ b/packages/gatsby-remark-embed-snippet/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-embed-snippet", "description": "Gatsby plugin to embed formatted code snippets within markdown", - "version": "3.1.1", + "version": "3.1.2", "author": "Brian Vaughn ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-remark-prismjs/CHANGELOG.md b/packages/gatsby-remark-prismjs/CHANGELOG.md index d07de49b1ffc5..c574009e61b1b 100644 --- a/packages/gatsby-remark-prismjs/CHANGELOG.md +++ b/packages/gatsby-remark-prismjs/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.1.2](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-prismjs/compare/gatsby-remark-prismjs@3.1.1...gatsby-remark-prismjs@3.1.2) (2018-11-30) + +### Bug Fixes + +- **gatsby-remark-prismjs:** prevent additional blank line from appearing ([#10209](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-prismjs/issues/10209)) ([71d7f23](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-prismjs/commit/71d7f23)) + ## [3.1.1](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-remark-prismjs/compare/gatsby-remark-prismjs@3.1.0...gatsby-remark-prismjs@3.1.1) (2018-11-29) diff --git a/packages/gatsby-remark-prismjs/package.json b/packages/gatsby-remark-prismjs/package.json index 7360270c9f018..9b7db8bf39a6e 100644 --- a/packages/gatsby-remark-prismjs/package.json +++ b/packages/gatsby-remark-prismjs/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-remark-prismjs", "description": "Adds syntax highlighting to code blocks at build time using PrismJS", - "version": "3.1.1", + "version": "3.1.2", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-transformer-remark/CHANGELOG.md b/packages/gatsby-transformer-remark/CHANGELOG.md index 230a666cc00ab..ca346c300c978 100644 --- a/packages/gatsby-transformer-remark/CHANGELOG.md +++ b/packages/gatsby-transformer-remark/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.1.15](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-remark/compare/gatsby-transformer-remark@2.1.14...gatsby-transformer-remark@2.1.15) (2018-11-30) + +### Bug Fixes + +- **gatsby-transformer-remark:** render html attributes in html excerpt ([#10196](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-remark/issues/10196)) ([2483aef](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-remark/commit/2483aef)) + ## [2.1.14](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-transformer-remark/compare/gatsby-transformer-remark@2.1.13...gatsby-transformer-remark@2.1.14) (2018-11-29) diff --git a/packages/gatsby-transformer-remark/package.json b/packages/gatsby-transformer-remark/package.json index ad6d94fc7076c..2c7b247fd7f5f 100644 --- a/packages/gatsby-transformer-remark/package.json +++ b/packages/gatsby-transformer-remark/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-transformer-remark", "description": "Gatsby transformer plugin for Markdown using the Remark library and ecosystem", - "version": "2.1.14", + "version": "2.1.15", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" From 4d126a6be202d8913a1bfeef4edb75b01ec9fe4c Mon Sep 17 00:00:00 2001 From: Ivan Ganev Date: Fri, 30 Nov 2018 15:36:04 +0300 Subject: [PATCH 437/462] GatsbyJS.org example to site-metadata.js component (#10218) They removed Helmet from "layout.js" and moved it to "site-metadata.js" --- packages/gatsby-plugin-react-helmet/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/gatsby-plugin-react-helmet/README.md b/packages/gatsby-plugin-react-helmet/README.md index e737bcfc33948..2a30c6414231d 100644 --- a/packages/gatsby-plugin-react-helmet/README.md +++ b/packages/gatsby-plugin-react-helmet/README.md @@ -25,5 +25,5 @@ plugins: [`gatsby-plugin-react-helmet`] ## Examples -- [GatsbyJS.org](https://github.com/gatsbyjs/gatsby/blob/master/www/src/components/layout.js) +- [GatsbyJS.org](https://github.com/gatsbyjs/gatsby/blob/master/www/src/components/site-metadata.js) - [Jason Lengstorf personal website](https://github.com/jlengstorf/lengstorf.com/blob/master/src/components/SEO/SEO.js) From 24c7dfc754a09cae8cf2e863261f63f9dd44e48d Mon Sep 17 00:00:00 2001 From: Henry Smith Date: Fri, 30 Nov 2018 13:46:47 +0100 Subject: [PATCH 438/462] fix(gatsby-source-wordpress): add undefined check to avoid taxonomy mapping error (#10216) hello! this is a fix for https://github.com/gatsbyjs/gatsby/issues/10138! that issue contains all the details of the issue, so i won't repeat them here! i've copied the error avoidance approach from the `exports.mapElementsToParent` function just below this block! --- packages/gatsby-source-wordpress/src/normalize.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/gatsby-source-wordpress/src/normalize.js b/packages/gatsby-source-wordpress/src/normalize.js index f96c033ff0ff1..2f4eef4507274 100644 --- a/packages/gatsby-source-wordpress/src/normalize.js +++ b/packages/gatsby-source-wordpress/src/normalize.js @@ -264,8 +264,11 @@ exports.mapTagsCategoriesToTaxonomies = entities => // Where should api_menus stuff link to? if (e.taxonomy && e.__type !== `wordpress__wp_api_menus_menus`) { // Replace taxonomy with a link to the taxonomy node. - e.taxonomy___NODE = entities.find(t => t.wordpress_id === e.taxonomy).id - delete e.taxonomy + const taxonomyNode = entities.find(t => t.wordpress_id === e.taxonomy) + if (taxonomyNode) { + e.taxonomy___NODE = taxonomyNode.id + delete e.taxonomy + } } return e }) From 53f21e8abbe8ffb9b8b45dd5e8acc916428500fe Mon Sep 17 00:00:00 2001 From: Martin Grubinger Date: Fri, 30 Nov 2018 21:12:53 +0100 Subject: [PATCH 439/462] Add grooovinger.com to showcase (#10208) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I'd like to add my portfolio website to the gatsby showcase. Thanks for all the great work you're doing! 💪 Thank you. --- docs/sites.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index c16e86c687585..6dbe1102500ed 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3611,3 +3611,14 @@ - Education built_by: Michael Uloth built_by_url: "https://www.michaeluloth.com" +- title: Grooovinger + url: https://www.grooovinger.com + main_url: https://www.grooovinger.com + description: > + Martin Grubinger, a web developer from Austria + categories: + - Portfolio + - Web Development + built_by: Martin Grubinger + built_by_url: https://www.grooovinger.com + featured: false From 427cb40cdebd352273f27be190227f01df16ebdb Mon Sep 17 00:00:00 2001 From: Daniel Sutton <45313566+d-cs@users.noreply.github.com> Date: Fri, 30 Nov 2018 22:06:15 +0000 Subject: [PATCH 440/462] feat(starters): add starter-ghost-blog (#10219) a simple starter for how to use Gatsby and the Ghost CMS together --- docs/starters.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/starters.yml b/docs/starters.yml index 4ff6bbf6e452a..da5785e199c88 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -1312,3 +1312,20 @@ - Google Analytics Integration - Uses Gatsby v2 - SEO +- url: http://starter-ghost-blog.surge.sh/ + repo: https://github.com/little-wolf-studio/gatsby-starter-ghost-blog + description: Ghost Blog Starter Kit + tags: + - Ghost + - Blog + - Linting + - Headless CMS + - Styling:CSS-in-JS + features: + - Uses the Ghost CMS source + - Renders pages for posts, tags and authors + - Responsive Design + - Google Analytics Integration + - Uses Gatsby v2 + - ESLint and Prettier + - Offline support From 155f6d174d873d5597f30c2ffaa9ef3a6f84ae66 Mon Sep 17 00:00:00 2001 From: Luke Whitehouse Date: Sat, 1 Dec 2018 02:18:01 +0000 Subject: [PATCH 441/462] docs(babel-preset-gatsby): Update README to reflect dependencies (#10229) Based on the dependencies brought in from this present, the following updates were added to the README: - Removed reference to `@babel/plugin-proposal-optional-chaining` - Added reference to `@babel/plugin-syntax-dynamic-import` - Updated ordering to move babel-core plugins above community ones. Resolves #10214 --- packages/babel-preset-gatsby/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/babel-preset-gatsby/README.md b/packages/babel-preset-gatsby/README.md index 3ae2a068c33e7..3a398510736b6 100644 --- a/packages/babel-preset-gatsby/README.md +++ b/packages/babel-preset-gatsby/README.md @@ -9,9 +9,9 @@ For more information on how to customize the Babel configuration of your Gatsby - [`@babel/preset-env`](https://babeljs.io/docs/en/babel-preset-env) - [`@babel/preset-react`](https://babeljs.io/docs/en/babel-preset-react) - [`@babel/plugin-proposal-class-properties`](https://babeljs.io/docs/en/babel-plugin-proposal-class-properties) -- [`babel-plugin-macros`](https://github.com/kentcdodds/babel-plugin-macros) -- [`@babel/plugin-proposal-optional-chaining`](https://babeljs.io/docs/en/babel-plugin-proposal-optional-chaining) +- [`@babel/plugin-syntax-dynamic-import`](https://babeljs.io/docs/en/babel-plugin-syntax-dynamic-import) - [`@babel/plugin-transform-runtime`](https://babeljs.io/docs/en/babel-plugin-transform-runtime#docsNav) +- [`babel-plugin-macros`](https://github.com/kentcdodds/babel-plugin-macros) ## Usage From ce7119d816e3f5b51cdb249cdf19912f675fd351 Mon Sep 17 00:00:00 2001 From: greg lobinski <32480082+greglobinski@users.noreply.github.com> Date: Sat, 1 Dec 2018 17:51:28 +0100 Subject: [PATCH 442/462] feat(www): create Pullquote custom component (#10190) * feat(www): create Pullquote custom component * fix(www): add explanatory comment * feat(www): add styles to Pullquote * feat(www): add styles to Pullquote * fix(www): fix typo in css code * feat(www): add variants of styles * refactor(www): remove variant class names logic from template-blog-post * fix(www): remove unused const --- www/src/assets/ornaments.js | 4 +- www/src/assets/quotation-mark-ornament.svg | 3 + www/src/assets/star-ornament.svg | 3 + .../homepage/homepage-newsletter.js | 2 +- www/src/components/shared/pullquote.js | 179 ++++++++++++++++++ www/src/templates/template-blog-post.js | 2 + 6 files changed, 191 insertions(+), 2 deletions(-) create mode 100644 www/src/assets/quotation-mark-ornament.svg create mode 100644 www/src/assets/star-ornament.svg create mode 100644 www/src/components/shared/pullquote.js diff --git a/www/src/assets/ornaments.js b/www/src/assets/ornaments.js index 134a580bd5987..3ef79d68b3c00 100644 --- a/www/src/assets/ornaments.js +++ b/www/src/assets/ornaments.js @@ -1,3 +1,5 @@ import NewsletterFormOrnament from "!raw-loader!./newsletter-form-ornament.svg" +import StarOrnament from "!raw-loader!./star-ornament.svg" +import QuotationMarkOrnament from "!raw-loader!./quotation-mark-ornament.svg" -export { NewsletterFormOrnament } +export { NewsletterFormOrnament, StarOrnament, QuotationMarkOrnament } diff --git a/www/src/assets/quotation-mark-ornament.svg b/www/src/assets/quotation-mark-ornament.svg new file mode 100644 index 0000000000000..97fc88f8e7048 --- /dev/null +++ b/www/src/assets/quotation-mark-ornament.svg @@ -0,0 +1,3 @@ + + + diff --git a/www/src/assets/star-ornament.svg b/www/src/assets/star-ornament.svg new file mode 100644 index 0000000000000..a5cfb1deb43eb --- /dev/null +++ b/www/src/assets/star-ornament.svg @@ -0,0 +1,3 @@ + + + diff --git a/www/src/components/homepage/homepage-newsletter.js b/www/src/components/homepage/homepage-newsletter.js index 06c8ae27f756c..ac019d10fa465 100644 --- a/www/src/components/homepage/homepage-newsletter.js +++ b/www/src/components/homepage/homepage-newsletter.js @@ -63,7 +63,7 @@ const Ornament = styled(`span`)` const Name = styled(`h3`)` color: ${colors.lilac}; - font-fa1mily: ${options.headerFontFamily.join(`,`)}; + font-family: ${options.headerFontFamily.join(`,`)}; font-size: 0.875rem; font-weight: normal; margin: 0; diff --git a/www/src/components/shared/pullquote.js b/www/src/components/shared/pullquote.js new file mode 100644 index 0000000000000..aae53bcab727a --- /dev/null +++ b/www/src/components/shared/pullquote.js @@ -0,0 +1,179 @@ +import React from "react" +import PropTypes from "prop-types" +import styled from "react-emotion" + +import { StarOrnament, QuotationMarkOrnament } from "../../assets/ornaments" + +import { options } from "../../utils/typography" +import presets, { colors } from "../../utils/presets" + +const PullquoteRoot = styled(`blockquote`)` + border: 1px solid #ebddf2; + border-radius: ${presets.radiusLg}px; + color: ${colors.gatsby}; + font-family: ${options.headerFontFamily.join(`,`)}; + font-size: 1.2rem; + font-weight: bold; + line-height: 1.5; + padding: 2rem 3rem; + position: relative; + text-indent: 2rem; + + /* needed for overriding typography.js style "p *:last-child {"" */ + p > & { + margin: 2.5rem 0; + } + + ${presets.Desktop} { + line-height: 1.7; + padding: 2.8rem 3.5rem; + text-indent: 1.8rem; + + p > & { + margin: 2.5rem -3.5rem; + } + } +` + +const QuotationMark = styled(`span`)` + display: flex; + left: 2.5rem; + position: absolute; + top: 2rem; + + svg { + fill: ${colors.gatsbyDark}; + } + + ${presets.Desktop} { + left: 3rem; + top: 2.8rem; + + svg { + fill: ${colors.gatsbyDark}; + transform: scale(1.1); + } + } +` + +const Star = styled(`span`)` + display: flex; + position: absolute; + + svg { + height: 100%; + width: 100%; + } + + :nth-child(1) { + height: 20px; + left: 0; + top: 1.8rem; + transform: translateX(-50%); + width: 20px; + + svg { + fill: ${colors.lemon}; + } + + ${presets.Desktop} { + height: 27px; + width: 27px; + } + + .variantB & { + left: auto; + right: 0; + top: 2rem; + transform: translate(50%, 0); + } + + .variantC & { + bottom: 0; + left: auto; + right: 12rem; + top: auto; + transform: translate(0, 50%); + } + } + + :nth-child(2) { + left: 5rem; + height: 14px; + top: 0; + transform: translateY(-50%); + width: 14px; + + svg { + fill: ${colors.mint}; + } + .variantB & { + bottom: 0; + left: auto; + right: 3rem; + top: auto; + transform: translate(0, 50%); + } + + .variantC & { + left: auto; + right: 9rem; + top: 0; + transform: translate(0, -50%); + } + } + + :nth-child(3) { + bottom: 0; + height: 12px; + right: 4rem; + transform: translateY(50%); + width: 12px; + + svg { + fill: ${colors.warning}; + } + + .variantB & { + bottom: auto; + left: auto; + right: 7rem; + top: 0; + transform: translate(0%, -50%); + } + + .variantC & { + top: 3rem; + left: 0; + transform: translate(-50%, 0); + } + } +` + +const variants = [`A`, `B`, `C`] +let instancesCounter = -1 + +const Pullquote = ({ children }) => { + instancesCounter += 1 + const className = `variant${variants[instancesCounter % variants.length]}` + + return ( + + {children} + +
    + + + +
    +
    + ) +} + +Pullquote.propTypes = { + children: PropTypes.node.isRequired, +} + +export default Pullquote diff --git a/www/src/templates/template-blog-post.js b/www/src/templates/template-blog-post.js index 37c36f62cb8ff..1b165759a4579 100644 --- a/www/src/templates/template-blog-post.js +++ b/www/src/templates/template-blog-post.js @@ -12,6 +12,7 @@ import Container from "../components/container" import EmailCaptureForm from "../components/email-capture-form" import TagsSection from "../components/tags-section" import HubspotForm from "../components/hubspot-form" +import Pullquote from "../components/shared/pullquote" import Chart from "../components/chart" const renderAst = new rehypeReact({ @@ -19,6 +20,7 @@ const renderAst = new rehypeReact({ components: { "hubspot-form": HubspotForm, "date-chart": Chart, + pullquote: Pullquote, }, }).Compiler From b5018b1711ed4668ff49cc4b6a3ce7bc314631c0 Mon Sep 17 00:00:00 2001 From: Ty Hopp Date: Sat, 1 Dec 2018 12:25:47 -0800 Subject: [PATCH 443/462] Add date example to RSS feed plugin readme (#10225) * Add date example to readme * Add note to readme for custom feed queries This should make it clearer what the correct keys are for custom queries (e.g. should be *date*, not *pubDate*). --- packages/gatsby-plugin-feed/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/gatsby-plugin-feed/README.md b/packages/gatsby-plugin-feed/README.md index 3127badb6c164..fcfa7c68448b5 100644 --- a/packages/gatsby-plugin-feed/README.md +++ b/packages/gatsby-plugin-feed/README.md @@ -49,6 +49,7 @@ plugins: [ return allMarkdownRemark.edges.map(edge => { return Object.assign({}, edge.node.frontmatter, { description: edge.node.excerpt, + date: edge.node.frontmatter.date, url: site.siteMetadata.siteUrl + edge.node.fields.slug, guid: site.siteMetadata.siteUrl + edge.node.fields.slug, custom_elements: [{ "content:encoded": edge.node.html }], @@ -85,4 +86,6 @@ plugins: [ ] ``` +To see what option keys are valid, see [the itemOptions section](https://www.npmjs.com/package/rss#itemoptions) of the RSS module. + NOTE: This plugin only generates the `/rss.xml` file when run in `production` mode! To test your feed, run: `gatsby build && gatsby serve`. From 92ef8581f1ab95eb13916f4f65b0c4bd2206f82a Mon Sep 17 00:00:00 2001 From: JavaScript Joe Date: Sat, 1 Dec 2018 14:44:39 -0700 Subject: [PATCH 444/462] Update Testing Components Installation Section (#10222) * Update Installation Section This PR changes the prose related to setting up your `setup-test-env.js` file. Because it's assumed the user followed the unit-testing section, they should have a `jest.config.js` file. If they do, they need to add the `setupTestFrameworkScriptFile` to the jest config, rather than the `package.json` otherwise, their `setup-test-env.js` will be run correctly. I've added the instructions for `jest.config.js` but also kept the original instructions related to adding it to the `package.json` * Cut old part * Update docs/docs/testing-react-components.md Co-Authored-By: jsjoeio * Update docs/docs/testing-react-components.md Co-Authored-By: jsjoeio * Fix linting --- docs/docs/testing-react-components.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/docs/testing-react-components.md b/docs/docs/testing-react-components.md index 1c955b0d5669a..c9d80d24e7fb3 100644 --- a/docs/docs/testing-react-components.md +++ b/docs/docs/testing-react-components.md @@ -29,11 +29,11 @@ import "react-testing-library/cleanup-after-each" This file gets run automatically by Jest before every test and therefore you don't need to add the imports to every single test file. -Lastly you need to tell Jest where to find this file. Open your `package.json` and add this entry to your `"jest"` section: +Lastly you need to tell Jest where to find this file. Open your `jest.config.js` and add this entry to the bottom after 'setupFiles': -```json:title=package.json -"jest": { - "setupTestFrameworkScriptFile": "/setup-test-env.js" +```js:title=jest.config.js +module.exports = { + setupTestFrameworkScriptFile: "/setup-test-env.js", } ``` From 416abaf998d042601aeb5acb1e6df3e828610956 Mon Sep 17 00:00:00 2001 From: Corey Ward Date: Sat, 1 Dec 2018 16:22:12 -0600 Subject: [PATCH 445/462] Add LXDX.co to Showcase (#10223) --- docs/sites.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index 6dbe1102500ed..d0b88a945a72f 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3622,3 +3622,15 @@ built_by: Martin Grubinger built_by_url: https://www.grooovinger.com featured: false +- title: LXDX - the Crypto Derivatives Exchange + main_url: https://www.lxdx.co/ + url: https://www.lxdx.co/ + description: > + LXDX is the world's fastest crypto exchange. Our mission is to bring innovative financial products to retail crypto investors, providing access to the same speed and scalability that institutional investors already depend on us to deliver each and every day. + categories: + - Marketing + - Blockchain + - Finance + built_by: Corey Ward + built_by_url: http://www.coreyward.me/ + featured: false From 6a86b4d3d5f379094ac5e26bbde119c5c0587f3f Mon Sep 17 00:00:00 2001 From: Lennart Date: Sat, 1 Dec 2018 23:33:45 +0100 Subject: [PATCH 446/462] feat(gatsby): Add type checks to createNodeId (#10234) Before the change it was possible to enter all sorts of parameters. Also Numbers threw a weird error. Both fixed now. --- packages/gatsby/src/utils/create-node-id.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/gatsby/src/utils/create-node-id.js b/packages/gatsby/src/utils/create-node-id.js index a8c868d0868d1..c139177f4c651 100644 --- a/packages/gatsby/src/utils/create-node-id.js +++ b/packages/gatsby/src/utils/create-node-id.js @@ -1,4 +1,5 @@ const uuidv5 = require(`uuid/v5`) +const report = require(`gatsby-cli/lib/reporter`) const seedConstant = `638f7a53-c567-4eca-8fc1-b23efb1cfb2b` @@ -11,6 +12,14 @@ const seedConstant = `638f7a53-c567-4eca-8fc1-b23efb1cfb2b` * @return {String} - UUID */ function createNodeId(id, namespace) { + if (typeof id === `number`) { + id = id.toString() + } else if (typeof id !== `string`) { + report.panic( + `Parameter passed to createNodeId must be a String or Number (got ${typeof id})` + ) + } + return uuidv5(id, uuidv5(namespace, seedConstant)) } From 64a88445a753ad9a04df990d020c64b2be6d3956 Mon Sep 17 00:00:00 2001 From: Sibiraj <20282546+sibiraj-s@users.noreply.github.com> Date: Sun, 2 Dec 2018 04:06:32 +0530 Subject: [PATCH 447/462] fix(gatsby): skip functions when inferring schema (#10177) Hi, This is a fix for issue as discussed here https://github.com/gatsbyjs/gatsby/pull/10159#issuecomment-442045709. prevent loop if the object is of type function --- packages/gatsby/src/schema/data-tree-utils.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/gatsby/src/schema/data-tree-utils.js b/packages/gatsby/src/schema/data-tree-utils.js index fae402fd49c24..afcc5bbc2e8ab 100644 --- a/packages/gatsby/src/schema/data-tree-utils.js +++ b/packages/gatsby/src/schema/data-tree-utils.js @@ -21,6 +21,8 @@ const isEmptyObjectOrArray = (obj: any): boolean => { return true } else if (_.isDate(obj)) { return false + } else if (typeof obj === `function`) { + return true // Simple "is object empty" check. } else if (_.isObject(obj) && _.isEmpty(obj)) { return true From 805956e1c7d2d4fc9ba6816d993a23b709fa50d9 Mon Sep 17 00:00:00 2001 From: Michal Piechowiak Date: Sat, 1 Dec 2018 23:52:21 +0100 Subject: [PATCH 448/462] chore(release): Publish - babel-preset-gatsby@0.1.6 - gatsby-plugin-feed@2.0.11 - gatsby-plugin-react-helmet@3.0.4 - gatsby-source-wordpress@3.0.17 - gatsby@2.0.60 --- packages/babel-preset-gatsby/CHANGELOG.md | 6 ++++++ packages/babel-preset-gatsby/package.json | 2 +- packages/gatsby-plugin-feed/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-feed/package.json | 2 +- packages/gatsby-plugin-react-helmet/CHANGELOG.md | 6 ++++++ packages/gatsby-plugin-react-helmet/package.json | 2 +- packages/gatsby-source-wordpress/CHANGELOG.md | 8 ++++++++ packages/gatsby-source-wordpress/package.json | 2 +- packages/gatsby/CHANGELOG.md | 12 ++++++++++++ packages/gatsby/package.json | 4 ++-- 10 files changed, 44 insertions(+), 6 deletions(-) diff --git a/packages/babel-preset-gatsby/CHANGELOG.md b/packages/babel-preset-gatsby/CHANGELOG.md index d4e805d46f225..17329b8fc19e3 100644 --- a/packages/babel-preset-gatsby/CHANGELOG.md +++ b/packages/babel-preset-gatsby/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [0.1.6](https://github.com/gatsbyjs/gatsby/compare/babel-preset-gatsby@0.1.5...babel-preset-gatsby@0.1.6) (2018-12-01) + +**Note:** Version bump only for package babel-preset-gatsby + ## [0.1.5](https://github.com/gatsbyjs/gatsby/compare/babel-preset-gatsby@0.1.4...babel-preset-gatsby@0.1.5) (2018-11-29) diff --git a/packages/babel-preset-gatsby/package.json b/packages/babel-preset-gatsby/package.json index 4d8c5f737d022..f8acfcbb05765 100644 --- a/packages/babel-preset-gatsby/package.json +++ b/packages/babel-preset-gatsby/package.json @@ -1,6 +1,6 @@ { "name": "babel-preset-gatsby", - "version": "0.1.5", + "version": "0.1.6", "author": "Philipp Spiess ", "dependencies": { "@babel/plugin-proposal-class-properties": "^7.0.0", diff --git a/packages/gatsby-plugin-feed/CHANGELOG.md b/packages/gatsby-plugin-feed/CHANGELOG.md index 41b65414e9f7e..136cb1ad29366 100644 --- a/packages/gatsby-plugin-feed/CHANGELOG.md +++ b/packages/gatsby-plugin-feed/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.11](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-feed/compare/gatsby-plugin-feed@2.0.10...gatsby-plugin-feed@2.0.11) (2018-12-01) + +**Note:** Version bump only for package gatsby-plugin-feed + ## [2.0.10](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-feed/compare/gatsby-plugin-feed@2.0.9...gatsby-plugin-feed@2.0.10) (2018-11-29) diff --git a/packages/gatsby-plugin-feed/package.json b/packages/gatsby-plugin-feed/package.json index 782fde6cb8251..4e5f36a6b9cc3 100644 --- a/packages/gatsby-plugin-feed/package.json +++ b/packages/gatsby-plugin-feed/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-feed", "description": "Creates an RSS feed for your Gatsby site.", - "version": "2.0.10", + "version": "2.0.11", "author": "Nicholas Young ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-plugin-react-helmet/CHANGELOG.md b/packages/gatsby-plugin-react-helmet/CHANGELOG.md index c2a85acb1eb47..f12ab9eea2190 100644 --- a/packages/gatsby-plugin-react-helmet/CHANGELOG.md +++ b/packages/gatsby-plugin-react-helmet/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.4](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-react-helmet/compare/gatsby-plugin-react-helmet@3.0.3...gatsby-plugin-react-helmet@3.0.4) (2018-12-01) + +**Note:** Version bump only for package gatsby-plugin-react-helmet + ## [3.0.3](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-plugin-react-helmet/compare/gatsby-plugin-react-helmet@3.0.2...gatsby-plugin-react-helmet@3.0.3) (2018-11-29) diff --git a/packages/gatsby-plugin-react-helmet/package.json b/packages/gatsby-plugin-react-helmet/package.json index 9d7fb5b929fd3..d75ab2107f6ca 100644 --- a/packages/gatsby-plugin-react-helmet/package.json +++ b/packages/gatsby-plugin-react-helmet/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-plugin-react-helmet", "description": "Manage document head data with react-helmet. Provides drop-in server rendering support for Gatsby.", - "version": "3.0.3", + "version": "3.0.4", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-source-wordpress/CHANGELOG.md b/packages/gatsby-source-wordpress/CHANGELOG.md index a0bab102676b1..c23ebe51338d6 100644 --- a/packages/gatsby-source-wordpress/CHANGELOG.md +++ b/packages/gatsby-source-wordpress/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [3.0.17](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-wordpress/compare/gatsby-source-wordpress@3.0.16...gatsby-source-wordpress@3.0.17) (2018-12-01) + +### Bug Fixes + +- **gatsby-source-wordpress:** add undefined check to avoid taxonomy mapping error ([#10216](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-wordpress/issues/10216)) ([24c7dfc](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-wordpress/commit/24c7dfc)) + ## [3.0.16](https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-wordpress/compare/gatsby-source-wordpress@3.0.15...gatsby-source-wordpress@3.0.16) (2018-11-29) diff --git a/packages/gatsby-source-wordpress/package.json b/packages/gatsby-source-wordpress/package.json index 0d357f8702f62..477dbb85d9292 100644 --- a/packages/gatsby-source-wordpress/package.json +++ b/packages/gatsby-source-wordpress/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-source-wordpress", "description": "Gatsby source plugin for building websites using the Wordpress CMS as a data source.", - "version": "3.0.16", + "version": "3.0.17", "author": "Sebastien Fichot ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index 6dcca9a60b4c4..f13ec60d974d3 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + + +## [2.0.60](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.59...gatsby@2.0.60) (2018-12-01) + +### Bug Fixes + +- **gatsby:** skip functions when inferring schema ([#10177](https://github.com/gatsbyjs/gatsby/issues/10177)) ([64a8844](https://github.com/gatsbyjs/gatsby/commit/64a8844)), closes [/github.com/gatsbyjs/gatsby/pull/10159#issuecomment-442045709](https://github.com//github.com/gatsbyjs/gatsby/pull/10159/issues/issuecomment-442045709) + +### Features + +- **gatsby:** Add type checks to createNodeId ([#10234](https://github.com/gatsbyjs/gatsby/issues/10234)) ([6a86b4d](https://github.com/gatsbyjs/gatsby/commit/6a86b4d)) + ## [2.0.59](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.0.58...gatsby@2.0.59) (2018-11-29) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 5fd35871a123b..1cf3acba814f8 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.0.59", + "version": "2.0.60", "author": "Kyle Mathews ", "bin": { "gatsby": "./dist/bin/gatsby.js" @@ -25,7 +25,7 @@ "babel-plugin-add-module-exports": "^0.2.1", "babel-plugin-dynamic-import-node": "^1.2.0", "babel-plugin-remove-graphql-queries": "^2.5.2", - "babel-preset-gatsby": "^0.1.5", + "babel-preset-gatsby": "^0.1.6", "better-queue": "^3.8.6", "bluebird": "^3.5.0", "cache-manager": "^2.9.0", From 2efec7a7ddc939152f1a5818df38e01ab00ea3ef Mon Sep 17 00:00:00 2001 From: Tim Broder Date: Sat, 1 Dec 2018 20:07:33 -0500 Subject: [PATCH 449/462] feat(gatsby-remark-prismjs): Allow global line number config (#10076) --- packages/gatsby-remark-prismjs/README.md | 6 +- .../src/__tests__/__snapshots__/index.js.snap | 88 +++++++++++++++++++ .../src/__tests__/index.js | 14 +++ .../src/__tests__/parse-line-number-range.js | 34 +++---- packages/gatsby-remark-prismjs/src/index.js | 6 +- .../src/parse-line-number-range.js | 6 +- 6 files changed, 131 insertions(+), 23 deletions(-) diff --git a/packages/gatsby-remark-prismjs/README.md b/packages/gatsby-remark-prismjs/README.md index c5cbd10d14ede..257aac1cf773d 100644 --- a/packages/gatsby-remark-prismjs/README.md +++ b/packages/gatsby-remark-prismjs/README.md @@ -39,12 +39,14 @@ plugins: [ // the language "sh" which will highlight using the // bash highlighter. aliases: {}, - // This toggles the display of line numbers alongside the code. + // This toggles the display of line numbers globally alongside the code. // To use it, add the following line in src/layouts/index.js // right after importing the prism color scheme: // `require("prismjs/plugins/line-numbers/prism-line-numbers.css");` // Defaults to false. - showLineNumbers: false, + // If you wish to only show line numbers on certain code blocks, + // leave false and use the {numberLines: true} syntax below + showLineNumbersGlobal: false, // If setting this to true, the parser won't handle and highlight inline // code used in markdown i.e. single backtick code like `this`. noInlineHighlight: false, diff --git a/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/index.js.snap b/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/index.js.snap index f8ac8c089a11a..a3a16f971b06e 100644 --- a/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/index.js.snap +++ b/packages/gatsby-remark-prismjs/src/__tests__/__snapshots__/index.js.snap @@ -415,6 +415,50 @@ Object { } `; +exports[`remark prism plugin numberLines adds line-number markup when configured globally 1`] = ` +Object { + "children": Array [ + Object { + "lang": "js", + "position": Position { + "end": Object { + "column": 4, + "line": 4, + "offset": 31, + }, + "indent": Array [ + 1, + 1, + 1, + ], + "start": Object { + "column": 1, + "line": 1, + "offset": 0, + }, + }, + "type": "html", + "value": "
    //.foo { 
    +color: red;
    + }\`
    ", + }, + ], + "position": Object { + "end": Object { + "column": 4, + "line": 4, + "offset": 31, + }, + "start": Object { + "column": 1, + "line": 1, + "offset": 0, + }, + }, + "type": "root", +} +`; + exports[`remark prism plugin numberLines adds line-number markup when necessary 1`] = ` Object { "children": Array [ @@ -458,3 +502,47 @@ color: red
    //.foo { 
    +color: red;
    + }\`
    ", + }, + ], + "position": Object { + "end": Object { + "column": 4, + "line": 4, + "offset": 31, + }, + "start": Object { + "column": 1, + "line": 1, + "offset": 0, + }, + }, + "type": "root", +} +`; diff --git a/packages/gatsby-remark-prismjs/src/__tests__/index.js b/packages/gatsby-remark-prismjs/src/__tests__/index.js index 79b2a0b403283..3e635b143aaa7 100644 --- a/packages/gatsby-remark-prismjs/src/__tests__/index.js +++ b/packages/gatsby-remark-prismjs/src/__tests__/index.js @@ -72,5 +72,19 @@ describe(`remark prism plugin`, () => { plugin({ markdownAST }) expect(markdownAST).toMatchSnapshot() }) + + it(`adds line-number markup when configured globally`, () => { + const code = `\`\`\`js\n//.foo { \ncolor: red;\n }\`` + const markdownAST = remark.parse(code) + plugin({ markdownAST }, { showLineNumbersGlobal: true }) + expect(markdownAST).toMatchSnapshot() + }) + + it(`does not add line-number markup when not configured globally`, () => { + const code = `\`\`\`js\n//.foo { \ncolor: red;\n }\`` + const markdownAST = remark.parse(code) + plugin({ markdownAST }) + expect(markdownAST).toMatchSnapshot() + }) }) }) diff --git a/packages/gatsby-remark-prismjs/src/__tests__/parse-line-number-range.js b/packages/gatsby-remark-prismjs/src/__tests__/parse-line-number-range.js index 0154cf80b0525..199638ce4d4ef 100644 --- a/packages/gatsby-remark-prismjs/src/__tests__/parse-line-number-range.js +++ b/packages/gatsby-remark-prismjs/src/__tests__/parse-line-number-range.js @@ -42,27 +42,29 @@ describe(`parses numeric ranges from the languages markdown code directive`, () describe(`parses line numbering options from the languages markdown code directive`, () => { it(`parses the right line number start index from the languages variable`, () => { expect( - parseLineNumberRange(`jsx{numberLines: true}`).numberLines + parseLineNumberRange(`jsx{numberLines: true}`).showLineNumbersLocal ).toEqual(true) expect( parseLineNumberRange(`jsx{numberLines: true}`).numberLinesStartAt ).toEqual(1) - expect(parseLineNumberRange(`jsx{numberLines: 3}`).numberLines).toEqual( - true - ) + expect( + parseLineNumberRange(`jsx{numberLines: 3}`).showLineNumbersLocal + ).toEqual(true) expect( parseLineNumberRange(`jsx{numberLines: 3}`).numberLinesStartAt ).toEqual(3) }) it(`parses the right line number start index without a specified language`, () => { - expect(parseLineNumberRange(`{numberLines: true}`).numberLines).toEqual( - true - ) + expect( + parseLineNumberRange(`{numberLines: true}`).showLineNumbersLocal + ).toEqual(true) expect( parseLineNumberRange(`{numberLines: true}`).numberLinesStartAt ).toEqual(1) - expect(parseLineNumberRange(`{numberLines: 3}`).numberLines).toEqual(true) + expect( + parseLineNumberRange(`{numberLines: 3}`).showLineNumbersLocal + ).toEqual(true) expect( parseLineNumberRange(`{numberLines: 3}`).numberLinesStartAt ).toEqual(3) @@ -70,11 +72,11 @@ describe(`parses numeric ranges from the languages markdown code directive`, () it(`ignores non-true or non-number values`, () => { expect( - parseLineNumberRange(`jsx{numberLines: false}`).numberLines + parseLineNumberRange(`jsx{numberLines: false}`).showLineNumbersLocal + ).toEqual(false) + expect( + parseLineNumberRange(`jsx{numberLines: NaN}`).showLineNumbersLocal ).toEqual(false) - expect(parseLineNumberRange(`jsx{numberLines: NaN}`).numberLines).toEqual( - false - ) }) it(`casts decimals line number start into the nearest lower integer`, () => { @@ -92,7 +94,7 @@ describe(`parses numeric ranges from the languages markdown code directive`, () expect(parseLineNumberRange(`jsx{1}{numberLines: 3}`)).toEqual({ splitLanguage: `jsx`, highlightLines: [1], - numberLines: true, + showLineNumbersLocal: true, numberLinesStartAt: 3, }) }) @@ -100,7 +102,7 @@ describe(`parses numeric ranges from the languages markdown code directive`, () expect(parseLineNumberRange(`jsx{1,5,7-8}{numberLines: 3}`)).toEqual({ splitLanguage: `jsx`, highlightLines: [1, 5, 7, 8], - numberLines: true, + showLineNumbersLocal: true, numberLinesStartAt: 3, }) }) @@ -108,7 +110,7 @@ describe(`parses numeric ranges from the languages markdown code directive`, () expect(parseLineNumberRange(`jsx{1,5,7-8}{numberLines: true}`)).toEqual({ splitLanguage: `jsx`, highlightLines: [1, 5, 7, 8], - numberLines: true, + showLineNumbersLocal: true, numberLinesStartAt: 1, }) }) @@ -116,7 +118,7 @@ describe(`parses numeric ranges from the languages markdown code directive`, () expect(parseLineNumberRange(`jsx{numberLines: 4}{2}`)).toEqual({ splitLanguage: `jsx`, highlightLines: [2], - numberLines: true, + showLineNumbersLocal: true, numberLinesStartAt: 4, }) }) diff --git a/packages/gatsby-remark-prismjs/src/index.js b/packages/gatsby-remark-prismjs/src/index.js index 020d9cc2e3850..1a22cd82ec397 100644 --- a/packages/gatsby-remark-prismjs/src/index.js +++ b/packages/gatsby-remark-prismjs/src/index.js @@ -11,6 +11,7 @@ module.exports = ( inlineCodeMarker = null, aliases = {}, noInlineHighlight = false, + showLineNumbersGlobal = false, } = {} ) => { const normalizeLanguage = lang => { @@ -23,9 +24,10 @@ module.exports = ( let { splitLanguage, highlightLines, - numberLines, + showLineNumbersLocal, numberLinesStartAt, } = parseLineNumberRange(language) + const showLineNumbers = showLineNumbersLocal || showLineNumbersGlobal language = splitLanguage // PrismJS's theme styles are targeting pre[class*="language-"] @@ -48,7 +50,7 @@ module.exports = ( let numLinesStyle, numLinesClass, numLinesNumber numLinesStyle = numLinesClass = numLinesNumber = `` - if (numberLines) { + if (showLineNumbers) { numLinesStyle = ` style="counter-reset: linenumber ${numberLinesStartAt - 1}"` numLinesClass = ` line-numbers` diff --git a/packages/gatsby-remark-prismjs/src/parse-line-number-range.js b/packages/gatsby-remark-prismjs/src/parse-line-number-range.js index 41bac5e5becaf..94c0e8302df55 100644 --- a/packages/gatsby-remark-prismjs/src/parse-line-number-range.js +++ b/packages/gatsby-remark-prismjs/src/parse-line-number-range.js @@ -7,7 +7,7 @@ module.exports = language => { if (language.split(`{`).length > 1) { let [splitLanguage, ...options] = language.split(`{`) let highlightLines = [], - numberLines = false, + showLineNumbersLocal = false, numberLinesStartAt // Options can be given in any order and are optional options.forEach(option => { @@ -26,7 +26,7 @@ module.exports = language => { (option[1].trim() === `true` || Number.isInteger(parseInt(option[1].trim(), 10))) ) { - numberLines = true + showLineNumbersLocal = true numberLinesStartAt = option[1].trim() === `true` ? 1 : parseInt(option[1].trim(), 10) } @@ -35,7 +35,7 @@ module.exports = language => { return { splitLanguage, highlightLines, - numberLines, + showLineNumbersLocal, numberLinesStartAt, } } From 3f95fa26254373058b7f724bd6f5fe0cbdd0e754 Mon Sep 17 00:00:00 2001 From: Kyle McDonald Date: Sun, 2 Dec 2018 08:21:10 -0600 Subject: [PATCH 450/462] Add Kylemcd.com to sites (#10235) --- docs/sites.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/sites.yml b/docs/sites.yml index d0b88a945a72f..5f4f22b2630d6 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -3634,3 +3634,14 @@ built_by: Corey Ward built_by_url: http://www.coreyward.me/ featured: false +- title: Kyle McDonald + url: https://kylemcd.com + main_url: https://kylemcd.com + source_url: https://github.com/kylemcd/personal-site-react + description: > + Personal site + blog for Kyle McDonald + categories: + - Blog + built_by: Kyle McDonald + built_by_url: https://kylemcd.com + featured: false From c16b3ce702956092612176f3bee1b03a3520c436 Mon Sep 17 00:00:00 2001 From: Maxence Poutord Date: Sun, 2 Dec 2018 15:21:33 +0100 Subject: [PATCH 451/462] update starter-morning-dew (#10237) --- docs/starters.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/starters.yml b/docs/starters.yml index da5785e199c88..145d804cd7f44 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -843,15 +843,19 @@ - Blog - Markdown - PWA + - Disqus + - SEO + - Styling:CSS-in-JS features: - Blog post listing with previews (image + summary) for each blog post - Fully configurable - Multilang support (blog post only) - Syntax highlighting + - css-in-js (with styled-components) - Fully Responsive - Tags - Google Analytics - - Disqus + - Disqus comments support - Offline support - Web App Manifest - ESLint From b93cddcc6a96597fb4d901169b728cab9ce24f00 Mon Sep 17 00:00:00 2001 From: Nick Trabue Date: Sun, 2 Dec 2018 08:22:33 -0600 Subject: [PATCH 452/462] Updated link to Gatsby Starters (#10238) Closes https://github.com/gatsbyjs/gatsby/issues/10236 --- docs/tutorial/part-one/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial/part-one/index.md b/docs/tutorial/part-one/index.md index f83faf8ecbbcc..73905a97a55cc 100644 --- a/docs/tutorial/part-one/index.md +++ b/docs/tutorial/part-one/index.md @@ -19,7 +19,7 @@ When creating a new Gatsby site, you can use the following command structure to gatsby new [SITE_DIRECTORY_NAME] [URL_OF_STARTER_GITHUB_REPO] ``` -> 💡 See a list of the existing [**official and community starters**](/docs/gatsby-starters/)! +> 💡 See a list of the existing [**official and community starters**](/starters/)! If you omit a URL from the end, Gatsby will automatically generate a site for you based on the [**default starter**](https://github.com/gatsbyjs/gatsby-starter-default). For this section of the tutorial, stick with the “Hello World” site you already created in tutorial part zero. From 34c0574e2b74fedb106662bff2defef833c8970b Mon Sep 17 00:00:00 2001 From: Patrick Ferris Date: Mon, 3 Dec 2018 12:27:07 +0000 Subject: [PATCH 453/462] Add gatsby-starter-notes (#10244) A Gatsby starter for making notes on different subjects and topics --- docs/starters.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/starters.yml b/docs/starters.yml index 145d804cd7f44..937af1cefc37b 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -1333,3 +1333,14 @@ - Uses Gatsby v2 - ESLint and Prettier - Offline support +- url: https://gatsby-starter-notes.netlify.com/ + repo: https://github.com/patricoferris/gatsby-starter-notes + description: Gatsby starter for creating notes organised by subject and topic + tags: + - Markdown + - Pagination + features: + - Create by topic per subject notes that are organised using pagination + - Support for code syntax highlighting + - Support for mathematical expressions + - Support for images From ab867e33d526d2bc24b528925d8e7677283b8535 Mon Sep 17 00:00:00 2001 From: Rodrigo Quezada Date: Mon, 3 Dec 2018 06:43:23 -0600 Subject: [PATCH 454/462] chore: update dependencies (#10247) This pr, adds all the missing dependencies used on the gatsby code base to the package.json the dependencies and the versions were obtained by doing a dry run of yarn PnP. It adresses #10245 --- packages/gatsby/package.json | 4 ++++ yarn.lock | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 1cf3acba814f8..17dcf4dc7d35b 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -18,6 +18,7 @@ "@babel/traverse": "^7.0.0", "@moocar/lokijs": "^1.0.1", "@reach/router": "^1.1.1", + "address": "1.0.3", "autoprefixer": "^8.6.5", "babel-core": "7.0.0-bridge.0", "babel-eslint": "^8.2.2", @@ -26,8 +27,10 @@ "babel-plugin-dynamic-import-node": "^1.2.0", "babel-plugin-remove-graphql-queries": "^2.5.2", "babel-preset-gatsby": "^0.1.6", + "babel-traverse": "6.26.0", "better-queue": "^3.8.6", "bluebird": "^3.5.0", + "browserslist": "3.2.8", "cache-manager": "^2.9.0", "cache-manager-fs-hash": "^0.0.6", "chalk": "^2.3.2", @@ -58,6 +61,7 @@ "file-loader": "^1.1.11", "flat": "^4.0.0", "friendly-errors-webpack-plugin": "^1.6.1", + "fs-exists-cached": "1.0.0", "fs-extra": "^5.0.0", "gatsby-cli": "^2.4.6", "gatsby-link": "^2.0.7", diff --git a/yarn.lock b/yarn.lock index 51e3230108825..8dccebfcc2b09 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3638,7 +3638,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0, babel-te babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: +babel-traverse@6.26.0, babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= @@ -4103,7 +4103,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^3.2.6, browserslist@^3.2.8: +browserslist@3.2.8, browserslist@^3.2.6, browserslist@^3.2.8: version "3.2.8" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== @@ -8350,7 +8350,7 @@ fs-copy-file-sync@^1.1.1: resolved "https://registry.yarnpkg.com/fs-copy-file-sync/-/fs-copy-file-sync-1.1.1.tgz#11bf32c096c10d126e5f6b36d06eece776062918" integrity sha512-2QY5eeqVv4m2PfyMiEuy9adxNP+ajf+8AR05cEi+OAzPcOj90hvFImeZhTmKLBgSd9EvG33jsD7ZRxsx9dThkQ== -fs-exists-cached@^1.0.0: +fs-exists-cached@1.0.0, fs-exists-cached@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz#cf25554ca050dc49ae6656b41de42258989dcbce" integrity sha1-zyVVTKBQ3EmuZla0HeQiWJidy84= From a2d421e29f26b13c376491a3b1ed823842224b9e Mon Sep 17 00:00:00 2001 From: Miguel Piedrafita Date: Mon, 3 Dec 2018 13:45:28 +0100 Subject: [PATCH 455/462] Make PR template clearer (#8691) --- .github/PULL_REQUEST_TEMPLATE.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 0d1a73256da08..a4111dfee5abb 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,12 +1,6 @@