@aklinker1/aframe 0.4.3 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -6
- package/package.json +3 -2
- package/src/config.ts +2 -2
- package/src/index.ts +16 -11
- package/src/prerenderer.ts +18 -13
package/README.md
CHANGED
|
@@ -83,16 +83,16 @@ bun add -D puppeteer vite
|
|
|
83
83
|
"aframe": "bun node_modules/@aklinker1/aframe/bin/aframe.ts",
|
|
84
84
|
"dev": "bun --silent aframe",
|
|
85
85
|
"build": "bun --silent aframe build",
|
|
86
|
-
"preview": "bun --cwd .output --env-file ../.env server-entry.js"
|
|
86
|
+
"preview": "bun --cwd .output --env-file ../.env server-entry.js",
|
|
87
87
|
},
|
|
88
88
|
"dependencies": {
|
|
89
89
|
"@aklinker1/aframe": "latest",
|
|
90
|
-
"elysia": "latest"
|
|
90
|
+
"elysia": "latest",
|
|
91
91
|
},
|
|
92
92
|
"devDependencies": {
|
|
93
93
|
"vite": "latest",
|
|
94
94
|
"puppeteer": "latest",
|
|
95
|
-
}
|
|
95
|
+
},
|
|
96
96
|
}
|
|
97
97
|
```
|
|
98
98
|
|
|
@@ -122,9 +122,7 @@ import welcomeEmailTemplate from "./assets/email-templates/welcome.html" with {
|
|
|
122
122
|
|
|
123
123
|
## Detecting Prerender
|
|
124
124
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
Aframe provides a helper for checking this, `isPrerendering`:
|
|
125
|
+
Aframe provides a helper for checking if the app is being prerendered, `isPrerendering()`:
|
|
128
126
|
|
|
129
127
|
```vue
|
|
130
128
|
<!-- ClientOnly.vue -->
|
|
@@ -139,3 +137,9 @@ const visible = !isPrerendering();
|
|
|
139
137
|
<slot v-else name="fallback" />
|
|
140
138
|
</template>
|
|
141
139
|
```
|
|
140
|
+
|
|
141
|
+
## Publish Update to NPM
|
|
142
|
+
|
|
143
|
+
```sh
|
|
144
|
+
bun run release
|
|
145
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aklinker1/aframe",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.5",
|
|
4
4
|
"packageManager": "bun@1.2.5",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
"aframe": "bun --silent bin/aframe.ts",
|
|
23
23
|
"dev": "bun aframe demo",
|
|
24
24
|
"build": "bun aframe build demo",
|
|
25
|
-
"preview": "bun --cwd demo/.output --env-file ../.env server-entry.js"
|
|
25
|
+
"preview": "bun --cwd demo/.output --env-file ../.env server-entry.js",
|
|
26
|
+
"release": "bun run scripts/release.ts"
|
|
26
27
|
},
|
|
27
28
|
"dependencies": {},
|
|
28
29
|
"devDependencies": {
|
package/src/config.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { LaunchOptions } from "puppeteer";
|
|
|
6
6
|
export type UserConfig = {
|
|
7
7
|
vite?: vite.UserConfigExport;
|
|
8
8
|
prerenderedRoutes?: string[];
|
|
9
|
-
prerenderer?: PrerendererConfig;
|
|
9
|
+
prerenderer?: PrerendererConfig | false;
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
export type PrerendererConfig = {
|
|
@@ -40,7 +40,7 @@ export type ResolvedConfig = {
|
|
|
40
40
|
serverPort: number;
|
|
41
41
|
vite: vite.InlineConfig;
|
|
42
42
|
prerenderedRoutes: string[];
|
|
43
|
-
prerenderer: PrerendererConfig;
|
|
43
|
+
prerenderer: PrerendererConfig | false;
|
|
44
44
|
};
|
|
45
45
|
|
|
46
46
|
export function defineConfig(config: UserConfig): UserConfig {
|
package/src/index.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { BunPlugin } from "bun";
|
|
2
2
|
import { lstatSync } from "node:fs";
|
|
3
|
-
import { mkdir, rm
|
|
3
|
+
import { mkdir, rm } from "node:fs/promises";
|
|
4
4
|
import { join, relative } from "node:path/posix";
|
|
5
5
|
import * as vite from "vite";
|
|
6
6
|
import { BLUE, BOLD, CYAN, DIM, GREEN, MAGENTA, RESET } from "./color";
|
|
7
7
|
import type { ResolvedConfig } from "./config";
|
|
8
8
|
import { createTimer } from "./timer";
|
|
9
|
-
import { prerenderPages } from "./prerenderer";
|
|
9
|
+
import { prerenderPages, type PrerenderedRoute } from "./prerenderer";
|
|
10
10
|
|
|
11
11
|
export * from "./config";
|
|
12
12
|
export * from "./dev-server";
|
|
@@ -50,15 +50,20 @@ export async function build(config: ResolvedConfig) {
|
|
|
50
50
|
|
|
51
51
|
console.log();
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
.
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
|
|
53
|
+
let prerendered: PrerenderedRoute[] = [];
|
|
54
|
+
if (config.prerenderer !== false) {
|
|
55
|
+
const prerenderTimer = createTimer();
|
|
56
|
+
console.log(
|
|
57
|
+
`${BOLD}${CYAN}ℹ${RESET} Prerendering...\n` +
|
|
58
|
+
config.prerenderedRoutes
|
|
59
|
+
.map((route) => ` ${DIM}-${RESET} ${CYAN}${route}${RESET}`)
|
|
60
|
+
.join("\n"),
|
|
61
|
+
);
|
|
62
|
+
prerendered = await prerenderPages(config);
|
|
63
|
+
console.log(`${GREEN}✔${RESET} Prerendered in ${prerenderTimer()}`);
|
|
64
|
+
} else {
|
|
65
|
+
console.log(`${DIM}${BOLD}→${RESET} Pre-rendering disabled`);
|
|
66
|
+
}
|
|
62
67
|
|
|
63
68
|
console.log();
|
|
64
69
|
|
package/src/prerenderer.ts
CHANGED
|
@@ -2,7 +2,6 @@ import {} from "node:url";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
4
4
|
import type { Browser } from "puppeteer";
|
|
5
|
-
import { createServer } from "./dev-server";
|
|
6
5
|
import type { ResolvedConfig } from "./config";
|
|
7
6
|
|
|
8
7
|
export type PrerenderedRoute = {
|
|
@@ -13,12 +12,20 @@ export type PrerenderedRoute = {
|
|
|
13
12
|
export async function prerenderPages(
|
|
14
13
|
config: ResolvedConfig,
|
|
15
14
|
): Promise<PrerenderedRoute[]> {
|
|
15
|
+
if (config.prerenderer === false) return [];
|
|
16
|
+
|
|
16
17
|
const puppeteer = await import("puppeteer");
|
|
17
|
-
const
|
|
18
|
+
const {
|
|
19
|
+
timeout = 30e3,
|
|
20
|
+
launch,
|
|
21
|
+
waitForSelector,
|
|
22
|
+
waitForSelectorVisible,
|
|
23
|
+
waitForTimeout,
|
|
24
|
+
} = config.prerenderer ?? {};
|
|
18
25
|
|
|
19
26
|
const server = Bun.spawn({
|
|
20
|
-
cmd: ["bun",
|
|
21
|
-
cwd: config.
|
|
27
|
+
cmd: ["bun", join(config.serverOutDir, "server-entry.js")],
|
|
28
|
+
cwd: config.rootDir,
|
|
22
29
|
stdio: ["inherit", "inherit", "inherit"],
|
|
23
30
|
});
|
|
24
31
|
|
|
@@ -26,7 +33,7 @@ export async function prerenderPages(
|
|
|
26
33
|
let browser: Browser | undefined;
|
|
27
34
|
|
|
28
35
|
try {
|
|
29
|
-
let args =
|
|
36
|
+
let args = launch?.args ?? [];
|
|
30
37
|
// Workaround for Linux SUID Sandbox issues.
|
|
31
38
|
if (process.platform === "linux" && !args.includes("--no-sandbox")) {
|
|
32
39
|
args.push("--no-sandbox", "--disable-setuid-sandbox");
|
|
@@ -35,7 +42,7 @@ export async function prerenderPages(
|
|
|
35
42
|
browser = await puppeteer.launch({
|
|
36
43
|
headless: true,
|
|
37
44
|
timeout,
|
|
38
|
-
...
|
|
45
|
+
...launch,
|
|
39
46
|
args,
|
|
40
47
|
});
|
|
41
48
|
for (const route of config.prerenderedRoutes) {
|
|
@@ -45,14 +52,12 @@ export async function prerenderPages(
|
|
|
45
52
|
page.setDefaultTimeout(timeout);
|
|
46
53
|
page.setDefaultNavigationTimeout(timeout);
|
|
47
54
|
await page.goto(url.href);
|
|
48
|
-
if (
|
|
49
|
-
await page.waitForSelector(
|
|
50
|
-
visible:
|
|
55
|
+
if (waitForSelector) {
|
|
56
|
+
await page.waitForSelector(waitForSelector, {
|
|
57
|
+
visible: waitForSelectorVisible,
|
|
51
58
|
});
|
|
52
|
-
} else if (
|
|
53
|
-
await new Promise((res) =>
|
|
54
|
-
setTimeout(res, config.prerenderer.waitForTimeout),
|
|
55
|
-
);
|
|
59
|
+
} else if (waitForTimeout != null) {
|
|
60
|
+
await new Promise((res) => setTimeout(res, waitForTimeout));
|
|
56
61
|
}
|
|
57
62
|
|
|
58
63
|
const html = await page.content();
|