Skip to content

Commit e505ac2

Browse files
committed
Adds Preact support to @rules_prerender/declarative_shadow_dom.
Refs #71. This adds a new `/preact.mjs` entry point which is implemeted via an optional peer dep on `@rules_prerender/preact`. I tried adding `exports` to specifically support jsut `/preact.mjs`, but unfortunately that requires `moduleResolution: "Node16"` in `tsconfig.json` which introduces a whole bunch of other problems I don't want to deal with at the moment.
1 parent e0bc134 commit e505ac2

5 files changed

Lines changed: 28 additions & 2 deletions

File tree

examples/preact/component/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ prerender_component(
1313
"//:node_modules/@rules_prerender/preact",
1414
"//:node_modules/preact",
1515
],
16+
deps = ["//:prerender_components/@rules_prerender/declarative_shadow_dom"],
1617
)
1718

1819
ts_project(

examples/preact/component/component.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { polyfillDeclarativeShadowDom } from '@rules_prerender/declarative_shadow_dom/preact.mjs';
12
import { Template, includeScript, inlineStyle } from '@rules_prerender/preact';
23
import { ComponentChildren, VNode } from 'preact';
34

@@ -19,6 +20,7 @@ export function Component({ text, children }: {
1920
<div id="replace">This text to be replaced by page JavaScript.</div>
2021
<slot></slot>
2122

23+
{polyfillDeclarativeShadowDom()}
2224
{includeScript('./script.mjs', import.meta)}
2325
{inlineStyle('./style.css', import.meta)}
2426
</Template>

packages/declarative_shadow_dom/BUILD.bazel

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,18 @@ npm_publish(
3737

3838
prerender_component(
3939
name = "declarative_shadow_dom",
40-
srcs = ["declarative_shadow_dom.mts"],
40+
srcs = [
41+
"declarative_shadow_dom.mts",
42+
"preact.mts",
43+
],
4144
tsconfig = "//:tsconfig",
4245
source_map = True,
4346
scripts = [":declarative_shadow_dom_polyfill"],
44-
lib_deps = ["//:node_modules/rules_prerender"],
47+
lib_deps = [
48+
"//:node_modules/@rules_prerender/preact",
49+
"//:node_modules/preact",
50+
"//:node_modules/rules_prerender",
51+
],
4552
visibility = [
4653
"//:__pkg__",
4754
"//packages/rules_prerender:__pkg__",

packages/declarative_shadow_dom/package.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
"type": "module",
55
"main": "./declarative_shadow_dom.mjs",
66
"peerDependencies": {
7+
"@rules_prerender/preact": "^0.0.0-PLACEHOLDER",
78
"rules_prerender": "^0.0.0-PLACEHOLDER"
9+
},
10+
"peerDependenciesMeta": {
11+
"@rules_prerender/preact": {
12+
"optional": true
13+
}
814
}
915
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { includeScript } from '@rules_prerender/preact';
2+
import type { VNode } from 'preact';
3+
4+
/**
5+
* Returns a prerender annotation used by the bundler to inject the declarative
6+
* shadow DOM polyfill into the document.
7+
*/
8+
export function polyfillDeclarativeShadowDom(): VNode {
9+
return includeScript('./declarative_shadow_dom_polyfill.mjs', import.meta);
10+
}

0 commit comments

Comments
 (0)