Skip to content

v0.29.0

Choose a tag to compare

@thescientist13 thescientist13 released this 09 Nov 02:51
· 344 commits to master since this release

Overview

The v0.29.0 release is here! Please check out our blog post to learn about some of the great new features now available.

If using Yarn, you can can upgrade all your Greenwood packages at once

$ yarn upgrade --scope @greenwood --latest

Changelog

https://github.com/ProjectEvergreen/greenwood/issues?q=label%3Av0.29.0

  1. Adapter Plugin API
  2. Vercel Adapter Plugin
  3. Netlify Adapter Plugin
  4. Data Loading Strategies
  5. refactor Workers out of SSR builds
  6. adapter SSR pages are rendering with incorrect content type header
  7. handle merging additional Request / Response instance properties
  8. custom loader hook not handling bare specifiers when resolving URLs (invalid URL)
  9. devServer proxy not returning content (when proxied response includes a content-encoding header)
  10. templates with (inline) template strings breaks bundling of SSR pages
  11. custom imports bundling breaks when used in API routes and SSR pages
  12. upgrade plugin-typescript to TypeScript 5.x
  13. add support for optimizing the CSS :has / :is pseudo-selectors
  14. add support for configuring a base path
  15. support resource plugin based transformations for non "standard" module formats (ex: TypeScript, GraphQL) for SSR
  16. Support "active links" in terminal output for server URLs - thanks @DevLab2425 !

Breaking Changes

Renderer Plugin

As part of the refactor for how Greenwood handles Worker threads, the API for creating a renderer plugin has changed a bit.

  1. The options have changed and workerUrl has been renamed to executeModuleUrl.
  2. For the params into executeRouteModule now has route, label and id replaced with just the page graph data (which includes all of those and more)
  3. The URL for executeModuleUrl is now simply a function that produces the output the same way it did before, no need to bother with the Workers abstraction. Just export now.

Before

import { parentPort } from 'worker_threads';
// ...

async function executeRouteModule({ moduleUrl, compilation, route, label, id, prerender, htmlContents, scripts }) {
  // ...
  parentPort.postMessage(data);
}

parentPort.on('message', async (task) => {
  await executeRouteModule(task);
});

After

// ...

async function executeRouteModule({ moduleUrl, compilation, page = {}, prerender = false, htmlContents = null, scripts = [] }) {
  // ...
  return data
}

export { executeRouteModule };

GraphQL Plugin

Package Imports

All import statements for queries will have to have their import reference slightly updated to reference the full path in the package and will require an extension, e.x

// before
import client from '@greenwood/plugin-graphql/core/client';
import MenuQuery from '@greenwood/plugin-graphql/queries/menu';
// after
import client from '@greenwood/plugin-graphql/src/core/client.js';
import MenuQuery from '@greenwood/plugin-graphql/src/queries/menu.gql';

Children Query

ChildrenQuery calls will now expect a leading / slash for the parent variable

// before
const response = await client.query({
  query: ChildrenQuery,
  variables: {
    parent: 'blog'
  }
});
// after
const response = await client.query({
  query: ChildrenQuery,
  variables: {
    parent: '/blog'
  }
});

Known Issues

N / A

Diff

Diff looks big because repo was formatted post v0.28.4 release - #1119

$ git diff v0.28.5 v0.29.0 --stat | grep -v "www"
 .eslintignore                                      |    3 +-
 .gitignore                                         |    6 +-
 .ls-lint.yml                                       |    3 +-
 lerna.json                                         |    2 +-
 package.json                                       |    8 +-
 packages/cli/package.json                          |    6 +-
 packages/cli/src/commands/build.js                 |    9 +-
 packages/cli/src/commands/develop.js               |    6 +-
 packages/cli/src/commands/serve.js                 |    7 +-
 packages/cli/src/config/rollup.config.js           |  237 +-
 packages/cli/src/lib/api-route-worker.js           |   23 +-
 packages/cli/src/lib/execute-route-module.js       |   44 +
 packages/cli/src/lib/resource-utils.js             |  100 +-
 packages/cli/src/lib/ssr-route-worker.js           |   42 +-
 packages/cli/src/lib/templating-utils.js           |   13 +-
 packages/cli/src/lifecycles/bundle.js              |  141 +-
 packages/cli/src/lifecycles/compile.js             |    4 -
 packages/cli/src/lifecycles/config.js              |   14 +-
 packages/cli/src/lifecycles/graph.js               |   54 +-
 packages/cli/src/lifecycles/prerender.js           |   26 +-
 packages/cli/src/lifecycles/serve.js               |  118 +-
 packages/cli/src/loader.js                         |   24 +-
 .../plugins/renderer/plugin-renderer-default.js    |    2 +-
 .../cli/src/plugins/resource/plugin-api-routes.js  |   48 +-
 .../cli/src/plugins/resource/plugin-dev-proxy.js   |   20 +-
 .../src/plugins/resource/plugin-standard-css.js    |    4 +
 .../src/plugins/resource/plugin-standard-font.js   |    2 +-
 .../src/plugins/resource/plugin-standard-html.js   |   27 +-
 .../src/plugins/resource/plugin-standard-json.js   |    6 +-
 .../src/plugins/resource/plugin-static-router.js   |   24 +-
 .../build.config-optimization-default.spec.js      |    2 +-
 .../fixtures/expected.css                          |    6 +-
 .../src/styles/main.css                            |    8 +
 .../build.config-optimization-inline.spec.js       |    8 +-
 .../build.config-optimization-none.spec.js         |    2 +-
 .../build.config-optimization-overrides.spec.js    |    2 +-
 .../build.config.static-router.spec.js             |    9 +-
 .../build.default.import-node-modules.spec.js      |    4 +-
 .../build.default.ssr-static-export.spec.js        |    3 +-
 .../src/pages/artists.js                           |    7 +-
 .../build.default.workspace-404-markdown.spec.js   |    2 +-
 .../build.default.workspace-404.spec.js            |    2 +-
 ...build.default.workspace-getting-started.spec.js |    6 +-
 .../build.default.workspace-javascript-css.spec.js |    8 +-
 ...default.workspace-template-page-and-app.spec.js |    2 +-
 .../build.default.workspace-template-page.spec.js  |    2 +-
 ...build.default.workspace-templates-empty.spec.js |    8 +-
 ...efault.workspace-user-directory-mapping.spec.js |    4 +-
 .../test/cases/build.default/build.default.spec.js |   11 +
 .../build.config.plugins-adapter.spec.js           |  125 +
 .../cases/build.plugins.adapter/generic-adapter.js |   58 +
 .../build.plugins.adapter/greenwood.config.js      |    7 +
 .../build.plugins.adapter/src/api/greeting.js      |   12 +
 .../build.plugins.adapter/src/components/card.js   |   22 +
 .../cases/build.plugins.adapter/src/pages/index.js |   24 +
 .../build.plugins.context.spec.js                  |    5 +-
 .../build.plugins.error-type.spec.js               |    2 +-
 .../develop.config.base-path.spec.js               |  324 +
 .../develop.config.base-path/greenwood.config.js   |    8 +
 .../cases/develop.config.base-path/package.json    |    4 +
 .../develop.config.base-path/src/api/greeting.js   |   11 +
 .../develop.config.base-path/src/assets/logo.png   |  Bin 0 -> 2171 bytes
 .../src/components/card.js                         |   22 +
 .../develop.config.base-path/src/pages/index.html  |   16 +
 .../develop.config.base-path/src/pages/users.js    |   18 +
 .../develop.config.base-path/src/styles/main.css   |    3 +
 .../develop.default.hud-disabled.spec.js           |   36 +-
 .../develop.default.hud.spec.js                    |   36 +-
 .../cases/develop.default/develop.default.spec.js  |  672 +--
 .../test/cases/develop.default/src/api/fragment.js |   18 +
 .../test/cases/develop.default/src/api/missing.js  |    3 +
 .../test/cases/develop.default/src/api/nothing.js  |    6 +-
 .../develop.default/src/api/submit-form-data.js    |   11 +
 .../cases/develop.default/src/api/submit-json.js   |   12 +
 .../cases/develop.default/src/components/card.js   |   11 +
 .../develop.plugins.context.spec.js                |   69 +-
 .../cli/test/cases/develop.spa/develop.spa.spec.js |  125 +-
 .../cli/test/cases/develop.ssr/develop.ssr.spec.js |  100 +-
 .../test/cases/develop.ssr/src/pages/artists.js    |    4 +-
 .../cli/test/cases/develop.ssr/src/pages/post.js   |   20 +
 .../serve.config.base-path/greenwood.config.js     |    9 +
 .../serve.config.base-path.spec.js                 |  471 ++
 .../serve.config.base-path/src/api/greeting.js     |   11 +
 .../serve.config.base-path/src/assets/logo.png     |  Bin 0 -> 2171 bytes
 .../serve.config.base-path/src/components/card.js  |   22 +
 .../serve.config.base-path/src/pages/about.md      |    7 +
 .../serve.config.base-path/src/pages/index.html    |   16 +
 .../serve.config.base-path/src/pages/users.js      |   18 +
 .../serve.config.base-path/src/styles/main.css     |    3 +
 .../serve.config.static-router.spec.js             |   85 +-
 .../serve.default.api/serve.default.api.spec.js    |  179 +-
 .../cases/serve.default.api/src/api/fragment.js    |    8 +-
 .../cases/serve.default.api/src/api/missing.js     |    3 +
 .../cases/serve.default.api/src/api/nothing.js     |    4 +-
 .../serve.default.api/src/api/submit-form-data.js  |   11 +
 .../cases/serve.default.api/src/api/submit-json.js |   12 +
 .../serve.default.ssr-prerender-api-hybrid.spec.js |   49 +-
 .../serve.default.ssr-prerender.spec.js            |   24 +-
 .../serve.default.ssr-static-export.spec.js        |   28 +-
 .../src/pages/artists.js                           |    7 +-
 .../serve.default.ssr/serve.default.ssr.spec.js    |  227 +-
 .../cases/serve.default.ssr/src/components/card.js |    2 +
 .../cases/serve.default.ssr/src/images/logo.svg    |   45 +
 .../cases/serve.default.ssr/src/pages/artists.js   |    4 +-
 .../test/cases/serve.default.ssr/src/pages/post.js |   20 +
 .../cases/serve.default.ssr/src/templates/app.html |    6 +
 .../test/cases/serve.default/serve.default.spec.js |  268 +-
 .../cli/test/cases/serve.spa/serve.spa.spec.js     |   75 +-
 .../test/cases/theme-pack/theme-pack.build.spec.js |    5 +-
 .../cases/theme-pack/theme-pack.develop.spec.js    |   69 +-
 packages/init/package.json                         |    2 +-
 .../cases/develop.default/develop.default.spec.js  |   25 +-
 packages/plugin-adapter-netlify/README.md          |   88 +
 packages/plugin-adapter-netlify/package.json       |   37 +
 packages/plugin-adapter-netlify/src/index.js       |  208 +
 .../build.config.base-path.spec.js                 |  180 +
 .../build.config.base-path/greenwood.config.js     |    8 +
 .../build.config.base-path/src/api/greeting.js     |   11 +
 .../build.config.base-path/src/pages/users.js      |   24 +
 .../test/cases/build.default/build.default.spec.js |  377 ++
 .../test/cases/build.default/greenwood.config.js   |    7 +
 .../test/cases/build.default/src/api/fragment.js   |   27 +
 .../test/cases/build.default/src/api/greeting.js   |   14 +
 .../test/cases/build.default/src/api/search.js     |   41 +
 .../build.default/src/api/submit-form-data.js      |   11 +
 .../cases/build.default/src/api/submit-json.js     |   14 +
 .../cases/build.default/src/components/card.js     |   27 +
 .../test/cases/build.default/src/pages/artists.js  |   25 +
 .../test/cases/build.default/src/pages/post.js     |   20 +
 .../test/cases/build.default/src/pages/users.js    |   27 +
 .../cases/build.default/src/services/artists.js    |   11 +
 .../cases/build.default/src/services/message.js    |    7 +
 packages/plugin-adapter-vercel/README.md           |   64 +
 packages/plugin-adapter-vercel/package.json        |   32 +
 packages/plugin-adapter-vercel/src/index.js        |  189 +
 .../build.config.base-path.spec.js                 |  191 +
 .../build.config.base-path/greenwood.config.js     |    8 +
 .../build.config.base-path/src/api/greeting.js     |   11 +
 .../build.config.base-path/src/pages/users.js      |   24 +
 .../test/cases/build.default/build.default.spec.js |  393 ++
 .../test/cases/build.default/greenwood.config.js   |    7 +
 .../test/cases/build.default/src/api/fragment.js   |   27 +
 .../test/cases/build.default/src/api/greeting.js   |   14 +
 .../test/cases/build.default/src/api/search.js     |   41 +
 .../build.default/src/api/submit-form-data.js      |   11 +
 .../cases/build.default/src/api/submit-json.js     |   14 +
 .../cases/build.default/src/components/card.js     |   27 +
 .../test/cases/build.default/src/pages/artists.js  |   25 +
 .../test/cases/build.default/src/pages/post.js     |   20 +
 .../test/cases/build.default/src/pages/users.js    |   27 +
 .../cases/build.default/src/services/artists.js    |   11 +
 .../cases/build.default/src/services/message.js    |    7 +
 packages/plugin-babel/package.json                 |    4 +-
 packages/plugin-google-analytics/package.json      |    4 +-
 .../test/cases/default/default.spec.js             |    2 +-
 .../option-anonymous/option-anonymous.spec.js      |    2 +-
 packages/plugin-graphql/README.md                  |   30 +-
 packages/plugin-graphql/package.json               |    5 +-
 packages/plugin-graphql/src/core/client.js         |    7 +-
 packages/plugin-graphql/src/index.js               |   28 +-
 packages/plugin-graphql/src/schema/graph.js        |   20 +-
 .../cases/develop.default/develop.default.spec.js  |  109 +-
 .../exp-prerender.query-children.spec.js           |  143 +
 .../greenwood.config.js                            |    8 +
 .../exp-prerender.query-children/package.json      |    4 +
 .../src/components/posts-list.js                   |   34 +
 .../src/pages/blog/first-post/index.md             |    8 +
 .../src/pages/blog/second-post/index.md            |    8 +
 .../src/pages/index.html                           |   12 +
 .../cases/qraphql-server/graphql-server.spec.js    |   68 +-
 .../query-children/src/components/posts-list.js    |    6 +-
 .../cases/query-config/src/components/footer.js    |    4 +-
 .../src/components/posts-list.js                   |    2 +-
 .../cases/query-custom-schema/src/pages/index.html |    2 +-
 .../query-graph/src/components/debug-output.js     |    4 +-
 .../test/cases/query-menu/src/components/header.js |    4 +-
 .../test/unit/schema/graph.menu.spec.js            |  116 +-
 .../plugin-graphql/test/unit/schema/graph.spec.js  |    9 +-
 packages/plugin-import-commonjs/package.json       |    4 +-
 packages/plugin-import-css/package.json            |    4 +-
 .../cases/develop.default/develop.default.spec.js  |   67 +-
 .../exp-build.prerender.spec.js                    |    1 +
 .../test/cases/exp-serve.ssr/exp-serve.ssr.spec.js |  152 +
 .../test/cases/exp-serve.ssr/greenwood.config.js   |    7 +
 .../test/cases/exp-serve.ssr/package.json          |    4 +
 .../test/cases/exp-serve.ssr/src/api/fragment.js   |   28 +
 .../cases/exp-serve.ssr/src/components/card.css    |   44 +
 .../cases/exp-serve.ssr/src/components/card.js     |   31 +
 .../test/cases/exp-serve.ssr/src/pages/products.js |   31 +
 .../cases/exp-serve.ssr/src/services/products.js   |   11 +
 .../test/cases/exp-serve.ssr/src/styles/some.css   |    3 +
 packages/plugin-import-json/package.json           |    4 +-
 .../cases/develop.default/develop.default.spec.js  |   33 +-
 .../exp-build.prerender.spec.js                    |    1 +
 .../test/cases/exp-serve.ssr/exp-serve.ssr.spec.js |  130 +
 .../test/cases/exp-serve.ssr/greenwood.config.js   |    7 +
 .../test/cases/exp-serve.ssr/package.json          |    4 +
 .../test/cases/exp-serve.ssr/src/api/fragment.js   |   27 +
 .../cases/exp-serve.ssr/src/components/card.js     |   26 +
 .../cases/exp-serve.ssr/src/data/products.json     |    7 +
 .../test/cases/exp-serve.ssr/src/pages/products.js |   26 +
 packages/plugin-import-jsx/package.json            |    6 +-
 .../test/cases/default/default.prerender.spec.js   |    2 +-
 .../exp-build.prerender.spec.js                    |    1 +
 packages/plugin-include-html/package.json          |    4 +-
 packages/plugin-polyfills/package.json             |    4 +-
 .../plugin-polyfills/test/cases/dsd/dsd.spec.js    |    2 +-
 packages/plugin-postcss/package.json               |    4 +-
 packages/plugin-renderer-lit/README.md             |   11 +-
 packages/plugin-renderer-lit/package.json          |    4 +-
 ...route-worker-lit.js => execute-route-module.js} |   20 +-
 packages/plugin-renderer-lit/src/index.js          |    2 +-
 .../test/cases/serve.default/serve.default.spec.js |   58 +-
 .../test/cases/serve.default/src/pages/artists.js  |    4 +-
 packages/plugin-renderer-puppeteer/package.json    |    4 +-
 .../src/plugins/server.js                          |    2 +-
 .../test/cases/build.default/build.default.spec.js |    2 +-
 packages/plugin-typescript/package.json            |    6 +-
 .../cases/develop.default/develop.default.spec.js  |   33 +-
 .../exp-prerender.serve.ssr.spec.js                |  103 +
 .../exp-prerender.serve.ssr/greenwood.config.js    |    8 +
 .../cases/exp-prerender.serve.ssr/package.json     |    4 +
 .../src/components/card/card.ts                    |   26 +
 .../exp-prerender.serve.ssr/src/pages/index.html   |   16 +
 .../test/cases/exp-serve.ssr/exp-serve.ssr.spec.js |  103 +
 .../test/cases/exp-serve.ssr/greenwood.config.js   |    7 +
 .../test/cases/exp-serve.ssr/package.json          |    4 +
 .../test/cases/exp-serve.ssr/src/api/fragment.js   |   33 +
 .../exp-serve.ssr/src/components/card/card.ts      |   33 +
 .../exp-serve.ssr/src/components/card/logo.png     |  Bin 0 -> 2171 bytes
 .../exp-serve.ssr/src/components/card/styles.ts    |    7 +
 .../test/cases/exp-serve.ssr/src/pages/index.html  |   16 +
 .../options.extend-config/src/scripts/main.ts      |   11 +-
 yarn.lock                                          | 6297 ++++++++++++++++++--
 256 files changed, 12951 insertions(+), 2595 deletions(-)