Skip to content

Releases: dgp1130/rules_prerender

0.0.23

04 Mar 20:38
Compare
Choose a tag to compare
0.0.23 Pre-release
Pre-release

Installation

Copy the following into your WORKSPACE.bazel file:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "aspect_rules_js",
    sha256 = "3ad6684d744ebbc6592d404cc3aa81d0da634eccb3499f6fd198ae122fa28489",
    strip_prefix = "rules_js-1.19.0",
    url = "https://github.com/aspect-build/rules_js/releases/download/v1.19.0/rules_js-v1.19.0.tar.gz",
)
load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies")
rules_js_dependencies()

load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
nodejs_register_toolchains(
    name = "nodejs",
    node_version = "18.12.1",
)

load("@aspect_rules_js//npm:npm_import.bzl", "npm_translate_lock")
npm_translate_lock(
    name = "npm",
    pnpm_lock = "//:pnpm-lock.yaml",
    verify_node_modules_ignored = "//:.bazelignore",
    npmrc = "//:.npmrc",
)
load("@npm//:repositories.bzl", "npm_repositories")
npm_repositories()

load("@aspect_bazel_lib//lib:repositories.bzl", "register_jq_toolchains")
register_jq_toolchains()

# This _must_ be named `rules_prerender`, other names are currently unsupported.
http_archive(
    name = "rules_prerender",
    sha256 = "23c1fbf35dfa0c01c9063b0f49eb846f87f9a4cfd2b4ed79152e7e140bc95fda",
    strip_prefix = "rules_prerender-releases-0.0.23",
    url = "https://github.com/dgp1130/rules_prerender/archive/refs/tags/releases/0.0.23.tar.gz",
)
load("@rules_prerender//:dependencies.bzl", "rules_prerender_dependencies")
rules_prerender_dependencies()
load("@rules_prerender//:repositories.bzl", "rules_prerender_repositories")
rules_prerender_repositories()
load(
    "@rules_prerender//:npm_repositories.bzl",
    prerender_npm_repositories = "npm_repositories",
)
prerender_npm_repositories()

Breaking changes

  • #33 - @rules_prerender now requires native EcmaScript modules (ESM). JavaScript source files should use ESM syntax (import / export) and TypeScript should emit using module: "ES2020" or module: "ES2015". You likely also want moduleResolution: "node" and to name your files *.mjs or *.mts as well as import files via explicit *.mjs extensions (import {} from './foo.mjs').

0.0.22

28 Feb 00:34
Compare
Choose a tag to compare
0.0.22 Pre-release
Pre-release

Installation

Copy the following into your WORKSPACE.bazel file:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "aspect_rules_js",
    sha256 = "3ad6684d744ebbc6592d404cc3aa81d0da634eccb3499f6fd198ae122fa28489",
    strip_prefix = "rules_js-1.19.0",
    url = "https://github.com/aspect-build/rules_js/releases/download/v1.19.0/rules_js-v1.19.0.tar.gz",
)
load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies")
rules_js_dependencies()

load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
nodejs_register_toolchains(
    name = "nodejs",
    node_version = "18.12.1",
)

load("@aspect_rules_js//npm:npm_import.bzl", "npm_translate_lock")
npm_translate_lock(
    name = "npm",
    pnpm_lock = "//:pnpm-lock.yaml",
    verify_node_modules_ignored = "//:.bazelignore",
    npmrc = "//:.npmrc",
)
load("@npm//:repositories.bzl", "npm_repositories")
npm_repositories()

load("@aspect_bazel_lib//lib:repositories.bzl", "register_jq_toolchains")
register_jq_toolchains()

# This _must_ be named `rules_prerender`, other names are currently unsupported.
http_archive(
    name = "rules_prerender",
    sha256 = "d84217a1ab79d1bca090efe82817f41aaa43610c3e3e7cd7e0a50ab4d198cb3c",
    strip_prefix = "rules_prerender-releases-0.0.22",
    url = "https://github.com/dgp1130/rules_prerender/archive/refs/tags/releases/0.0.22.tar.gz",
)
load("@rules_prerender//:dependencies.bzl", "rules_prerender_dependencies")
rules_prerender_dependencies()
load("@rules_prerender//:repositories.bzl", "rules_prerender_repositories")
rules_prerender_repositories()
load(
    "@rules_prerender//:npm_repositories.bzl",
    prerender_npm_repositories = "npm_repositories",
)
prerender_npm_repositories()

Breaking changes

  • #26 - Improves tree shaking of JavaScript in prerender_pages(). Now only JavaScript which is referenced by an includeScript() call for a given page is included. Previously, all files referenced by includeScript() would be executed on all the pages. Now we only evaluate JavaScript on the pages it is actually required.
  • 8a6fa4e - Updates Node version. Node ^18.12.1 is now required.
  • fb3ad63 - Updates Bazel. Bazel 6 is now required.
  • 6609dc9 - Custom bundling is no longer supported. Improvements to bundling mean that there is no longer a singular entry point of all JavaScript code used in prerender_pages_unbundled(). Instead there is a TreeArtifact of entry points for each HTML file. This requires custom effort to support in a builder, as existing out-of-the-box bundlers like @aspect_rules_rollup do not support multiple entry points provided as a TreeArtifact at execution time. We'd like to support custom bundling in some capacity in the future, but as of now there is no easy way to do it.

Changelog

  • c07b684 - includeScript() loads its input in a module script (type="module").
  • f32b3d5 - @aspect_rules_rollup is no longer needed as a dependency.
  • 2e8c193 - @rollup/plugin-node-resolve is no longer needed as a dependency.

0.0.21

28 Feb 00:10
Compare
Choose a tag to compare
0.0.21 Pre-release
Pre-release

Another botched release. Do not use.

Renaming things is hard.

0.0.20

27 Feb 23:59
Compare
Choose a tag to compare
0.0.20 Pre-release
Pre-release

Botched release. Failed to publish @rules_prerender/declarative_shadow_dom. Do not use.

0.0.19

18 Feb 21:05
Compare
Choose a tag to compare
0.0.19 Pre-release
Pre-release

Installation

Copy the following into your WORKSPACE.bazel file:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "aspect_rules_js",
    sha256 = "3ad6684d744ebbc6592d404cc3aa81d0da634eccb3499f6fd198ae122fa28489",
    strip_prefix = "rules_js-1.19.0",
    url = "https://github.com/aspect-build/rules_js/releases/download/v1.19.0/rules_js-v1.19.0.tar.gz",
)
load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies")
rules_js_dependencies()

load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
nodejs_register_toolchains(
    name = "nodejs",
    node_version = "16.10.0",
)

load("@aspect_rules_js//npm:npm_import.bzl", "npm_translate_lock")
npm_translate_lock(
    name = "npm",
    pnpm_lock = "//:pnpm-lock.yaml",
    verify_node_modules_ignored = "//:.bazelignore",
    npmrc = "//:.npmrc",
)
load("@npm//:repositories.bzl", "npm_repositories")
npm_repositories()

load("@aspect_bazel_lib//lib:repositories.bzl", "register_jq_toolchains")
register_jq_toolchains()

# This _must_ be named `rules_prerender`, other names are currently unsupported.
http_archive(
    name = "rules_prerender",
    sha256 = "b305b022dee5a9cff7164412d7d2ab8995d8a6c563076614abc29b08571336ec",
    strip_prefix = "rules_prerender-releases-0.0.19",
    url = "https://github.com/dgp1130/rules_prerender/archive/refs/tags/releases/0.0.19.tar.gz",
)
load("@rules_prerender//:dependencies.bzl", "rules_prerender_dependencies")
rules_prerender_dependencies()
load("@rules_prerender//:repositories.bzl", "rules_prerender_repositories")
rules_prerender_repositories()
load(
    "@rules_prerender//:npm_repositories.bzl",
    prerender_npm_repositories = "npm_repositories",
)
prerender_npm_repositories()

Changelog

  • 9733afd - Avoids overwriting the user's @npm workspace dependency.

0.0.18

18 Feb 20:45
Compare
Choose a tag to compare
0.0.18 Pre-release
Pre-release

Installation

Copy the following into your WORKSPACE.bazel file:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "aspect_rules_js",
    sha256 = "3ad6684d744ebbc6592d404cc3aa81d0da634eccb3499f6fd198ae122fa28489",
    strip_prefix = "rules_js-1.19.0",
    url = "https://github.com/aspect-build/rules_js/releases/download/v1.19.0/rules_js-v1.19.0.tar.gz",
)
load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies")
rules_js_dependencies()

load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
nodejs_register_toolchains(
    name = "nodejs",
    node_version = "16.10.0",
)

load("@aspect_rules_js//npm:npm_import.bzl", "npm_translate_lock")
npm_translate_lock(
    name = "npm",
    pnpm_lock = "//:pnpm-lock.yaml",
    verify_node_modules_ignored = "//:.bazelignore",
    npmrc = "//:.npmrc",
)
load("@npm//:repositories.bzl", "npm_repositories")
npm_repositories()

# This _must_ be named `rules_prerender`, other names are currently unsupported.
http_archive(
    name = "rules_prerender",
    sha256 = "7c392b76f7f826ecdd9c284e545f2dc3b5f8b2b14a9e536ae81df3391cb36bf6",
    strip_prefix = "rules_prerender-releases-0.0.18",
    url = "https://github.com/dgp1130/rules_prerender/archive/refs/tags/releases/0.0.18.tar.gz",
)
load("@rules_prerender//:dependencies.bzl", "rules_prerender_dependencies")
rules_prerender_dependencies()
load("@rules_prerender//:repositories.bzl", "rules_prerender_repositories")
rules_prerender_repositories()
load(
    "@rules_prerender//:npm_repositories.bzl",
    prerender_npm_repositories = "npm_repositories",
)
prerender_npm_repositories()

Changelog

  • Fixes #46 - CSS bundling is now done with Lightning CSS instead of PostCSS. For the most part, this should not be an observable change. The biggest difference is that @import statements must be done to relative to the importing file such as @import './foo.css'; instead of @import 'my_wksp/path/to/pkg/foo.css';.
  • Fixes #63 - @build_bazel_rules_nodejs is now completely removed as a dependency and does not need to be included in WORKSPACE.bazel files. This also means you can delete your package-lock.json file and rely entirely on pnpm.
  • 865910e, 865910e - README files have been updated to clarify installation and usage with @aspect_rules_js, with more detail for @rules_prerender/declarative_shadow_dom in particular.

0.0.17

13 Feb 06:18
Compare
Choose a tag to compare
0.0.17 Pre-release
Pre-release

Upgrades @rules_prerender to use @aspect_rules_js under the hood instead of @build_bazel_rules_nodejs (see #48). This means applications need to use @aspect_rules_js-ecosystem rules such as ts_project() from @aspect_rules_ts and js_library() from @aspect_rules_js. Otherwise the public API is mostly the same, with some minor tweaks to meet the new model.

The rules_prerender NPM package now only contains the core runtime (PrerenderResource, includeScript(), inlineStyle(), etc.) Published components must now be in their own NPM packages. This means that declarative shadow DOM support is now published under @rules_prerender/declarative_shadow_dom.

While most of the BUILD rules are relatively unchanged, WORKSPACE files and the set up experience is very different and noticeably more complicated. We're looking to improve this over time. For now, we must manage deps via both NPM and PNPM (maintain both lockfiles) and include @build_bazel_rules_nodejs in addition to @aspect_rules_js. The WORKSPACE file currently looks like:

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
    name = "build_bazel_rules_nodejs",
    sha256 = "dcc55f810142b6cf46a44d0180a5a7fb923c04a5061e2e8d8eb05ccccc60864b",
    urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.8.0/rules_nodejs-5.8.0.tar.gz"],
)
load("@build_bazel_rules_nodejs//:repositories.bzl", "build_bazel_rules_nodejs_dependencies")
build_bazel_rules_nodejs_dependencies()

http_archive(
    name = "aspect_rules_js",
    sha256 = "3ad6684d744ebbc6592d404cc3aa81d0da634eccb3499f6fd198ae122fa28489",
    strip_prefix = "rules_js-1.19.0",
    url = "https://github.com/aspect-build/rules_js/releases/download/v1.19.0/rules_js-v1.19.0.tar.gz",
)
load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies")
rules_js_dependencies()

load("@rules_nodejs//nodejs:repositories.bzl", "nodejs_register_toolchains")
nodejs_register_toolchains(
    name = "nodejs",
    node_version = "16.10.0",
)

load("@build_bazel_rules_nodejs//:index.bzl", "npm_install")
npm_install(
    name = "npm",
    package_json = "//:package.json",
    package_lock_json = "//:package-lock.json",
    strict_visibility = False,
    exports_directories_only = False,
)

load("@aspect_rules_js//npm:npm_import.bzl", "npm_translate_lock")
npm_translate_lock(
    name = "npm_user",
    pnpm_lock = "//:pnpm-lock.yaml",
    verify_node_modules_ignored = "//:.bazelignore",
    npmrc = "//:.npmrc",
)
load("@npm_user//:repositories.bzl", "npm_repositories")
npm_repositories()

# This _must_ be named `rules_prerender`, other names are currently unsupported.
http_archive(
    name = "rules_prerender",
    sha256 = "8797660276fb25fde3545a44cda723042dd7d503cbdbe32710ac55439131ffce",
    strip_prefix = "rules_prerender-releases-0.0.17",
    url = "https://github.com/dgp1130/rules_prerender/archive/refs/tags/releases/0.0.17.tar.gz",
)
load("@rules_prerender//:dependencies.bzl", "rules_prerender_dependencies")
rules_prerender_dependencies()
load("@rules_prerender//:repositories.bzl", "rules_prerender_repositories")
rules_prerender_repositories()
load(
    "@rules_prerender//:npm_repositories.bzl",
    prerender_npm_repositories = "npm_repositories",
)
prerender_npm_repositories()

Again, we're hoping to simplify this in the future, primarily by moving entirely off @build_bazel_rules_nodejs.

As for BUILD file changes, the most notable one is that using published components requires a link_prerender_component() much like npm_link_package(). In the root BUILD file, include:

load("@npm_user//:defs.bzl", "npm_link_all_packages")
load("@rules_prerender//:index.bzl", "link_prerender_component")

# Make sure to `pnpm install` any published components.
npm_link_all_packages(name = "node_modules")

# Link each NPM package containing a prerender component.
link_prerender_component(
    name = "prerender_components/@rules_prerender/declarative_shadow_dom",
    package = ":node_modules/@rules_prerender/declarative_shadow_dom",
    visibility = ["//visibility:public"],
)

Then depend on the //:prerender_components/* target in the deps of any prerender_component() like so:

load("@rules_prerender//:index.bzl", "prerender_component")

prerender_component(
    name = "component",
    srcs = ["component.ts"],
    deps = ["//:prerender_components/@rules_prerender/declarative_shadow_dom"],
)

0.0.16

13 Feb 05:31
Compare
Choose a tag to compare
0.0.16 Pre-release
Pre-release

https://www.npmjs.com/package/rules_prerender/v/0.0.16

Iterating on the release process, please ignore.

0.0.15

17 Jul 06:41
Compare
Choose a tag to compare
0.0.15 Pre-release
Pre-release

https://www.npmjs.com/package/rules_prerender/v/0.0.15

Changelog

  • Refs #46 - CSS sourcemaps have been turned off to unblock the upgrade to the Node.js v16.10.0. See #46 (comment) for more details.

0.0.14

04 Jul 07:13
Compare
Choose a tag to compare
0.0.14 Pre-release
Pre-release

https://www.npmjs.com/package/rules_prerender/v/0.0.14

This release replaces all ts_library() usages with ts_project(). prerender_component() now uses a ts_project() under the hood and all examples / documentation have been updated to use ts_project() in related targets. ts_library() in userspace may still work in certain conditions, but is not supported or recommended in any situations.

Changelog

BREAKING CHANGES:

  • Fixes #50 - ts_project() is now used across the board. This is more or less a drop-in replacement. See individual examples and documentation for specifics.

Other changes:

  • Minor refactorings related to examples and documentation.