Skip to content

Commit df68bd0

Browse files
committed
Adds prerender_resources() example.
Closes #28. This example uses `prerender_resources()` to generate a couple text files and a binary file, then confirms that they were generated as expected. This shows how users can easily generate non-HTML files in their builds.
1 parent cc89f55 commit df68bd0

4 files changed

Lines changed: 80 additions & 0 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
load("@npm//@bazel/typescript:index.bzl", "ts_library")
2+
load("//:index.bzl", "prerender_resources")
3+
load("//tools:jasmine.bzl", "jasmine_node_test")
4+
5+
ts_library(
6+
name = "generator",
7+
srcs = ["generator.ts"],
8+
deps = ["//packages/rules_prerender"],
9+
)
10+
11+
prerender_resources(
12+
name = "prerender",
13+
entry_point = "examples/prerender_resources/generator.js",
14+
data = [":generator"],
15+
)
16+
17+
ts_library(
18+
name = "generator_test",
19+
srcs = ["generator_test.ts"],
20+
testonly = True,
21+
data = [":prerender"],
22+
deps = [
23+
"//common:runfiles",
24+
"@npm//@types/jasmine",
25+
"@npm//@types/node",
26+
],
27+
)
28+
29+
jasmine_node_test(
30+
name = "test",
31+
deps = [":generator_test"],
32+
)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Prerender Resources
2+
3+
This example uses `prerender_resources()` to generate files at build time. These
4+
files are *not* HTML files and are not processed as such (use
5+
`prerender_pages()` or `prerender_pages_unbundled()` if you want to generate an
6+
HTML page). `prerender_resources()` can generate any arbitrary files, such as
7+
simple text, CSV, or JSON. It can also generate binary files like images,
8+
protocol buffers, or any other useful format.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { PrerenderResource } from 'rules_prerender';
2+
3+
/** Generates some resources of any file type. No HTML files here! */
4+
export default function* (): Generator<PrerenderResource, void, void> {
5+
// Can prerender text files.
6+
yield PrerenderResource.of('/hello.txt', 'Hello, World!');
7+
yield PrerenderResource.of('/goodbye.txt', 'Goodbye, World!');
8+
9+
// Can prerender binary files.
10+
yield PrerenderResource.of('/data.bin', new Uint8Array([ 0, 1, 2, 3 ]));
11+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import 'jasmine';
2+
3+
import { promises as fs } from 'fs';
4+
import { resolveRunfile } from 'rules_prerender/common/runfiles';
5+
6+
const prerenderedDir = resolveRunfile(
7+
'rules_prerender/examples/prerender_resources/prerender');
8+
9+
describe('Prerender Resources', () => {
10+
it('prerenders `hello.txt`', async () => {
11+
const content = await fs.readFile(
12+
`${prerenderedDir}/hello.txt`, 'utf-8');
13+
14+
expect(content).toBe('Hello, World!');
15+
});
16+
17+
it('prerenders `goodbye.txt`', async () => {
18+
const content = await fs.readFile(
19+
`${prerenderedDir}/goodbye.txt`, 'utf-8');
20+
21+
expect(content).toBe('Goodbye, World!');
22+
});
23+
24+
it('prerenders `data.bin`', async () => {
25+
const content = await fs.readFile(`${prerenderedDir}/data.bin`);
26+
27+
expect(new Uint8Array(content)).toEqual(new Uint8Array([ 0, 1, 2, 3 ]));
28+
});
29+
});

0 commit comments

Comments
 (0)