@aklinker1/aframe 0.4.2 → 0.4.4
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 +9 -3
- package/package.json +3 -2
- package/src/config.ts +2 -2
- package/src/index.ts +16 -11
- package/src/prerenderer.ts +27 -14
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
|
|
|
@@ -139,3 +139,9 @@ const visible = !isPrerendering();
|
|
|
139
139
|
<slot v-else name="fallback" />
|
|
140
140
|
</template>
|
|
141
141
|
```
|
|
142
|
+
|
|
143
|
+
## Publish Update to NPM
|
|
144
|
+
|
|
145
|
+
```sh
|
|
146
|
+
bun run publish
|
|
147
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aklinker1/aframe",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
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
|
+
"publish": "bun run scripts/publish.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,17 +12,28 @@ 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
|
-
const server =
|
|
20
|
-
|
|
26
|
+
const server = Bun.spawn({
|
|
27
|
+
cmd: ["bun", "--env-file", "../.env", "server-entry.js"],
|
|
28
|
+
cwd: config.serverOutDir,
|
|
29
|
+
stdio: ["inherit", "inherit", "inherit"],
|
|
30
|
+
});
|
|
21
31
|
|
|
22
32
|
const results: PrerenderedRoute[] = [];
|
|
23
33
|
let browser: Browser | undefined;
|
|
24
34
|
|
|
25
35
|
try {
|
|
26
|
-
let args =
|
|
36
|
+
let args = launch?.args ?? [];
|
|
27
37
|
// Workaround for Linux SUID Sandbox issues.
|
|
28
38
|
if (process.platform === "linux" && !args.includes("--no-sandbox")) {
|
|
29
39
|
args.push("--no-sandbox", "--disable-setuid-sandbox");
|
|
@@ -32,7 +42,7 @@ export async function prerenderPages(
|
|
|
32
42
|
browser = await puppeteer.launch({
|
|
33
43
|
headless: true,
|
|
34
44
|
timeout,
|
|
35
|
-
...
|
|
45
|
+
...launch,
|
|
36
46
|
args,
|
|
37
47
|
});
|
|
38
48
|
for (const route of config.prerenderedRoutes) {
|
|
@@ -42,19 +52,21 @@ export async function prerenderPages(
|
|
|
42
52
|
page.setDefaultTimeout(timeout);
|
|
43
53
|
page.setDefaultNavigationTimeout(timeout);
|
|
44
54
|
await page.goto(url.href);
|
|
45
|
-
if (
|
|
46
|
-
await page.waitForSelector(
|
|
47
|
-
visible:
|
|
55
|
+
if (waitForSelector) {
|
|
56
|
+
await page.waitForSelector(waitForSelector, {
|
|
57
|
+
visible: waitForSelectorVisible,
|
|
48
58
|
});
|
|
49
|
-
} else if (
|
|
50
|
-
await new Promise((res) =>
|
|
51
|
-
setTimeout(res, config.prerenderer.waitForTimeout),
|
|
52
|
-
);
|
|
59
|
+
} else if (waitForTimeout != null) {
|
|
60
|
+
await new Promise((res) => setTimeout(res, waitForTimeout));
|
|
53
61
|
}
|
|
54
62
|
|
|
55
63
|
const html = await page.content();
|
|
56
64
|
await page.close();
|
|
57
65
|
|
|
66
|
+
if (html.includes("<vite-error-overlay>")) {
|
|
67
|
+
throw Error("Vite error prevented page from being rendered.");
|
|
68
|
+
}
|
|
69
|
+
|
|
58
70
|
const dir = join(config.appOutDir, route.substring(1));
|
|
59
71
|
const file = join(dir, "index.html");
|
|
60
72
|
await mkdir(dir, { recursive: true });
|
|
@@ -65,7 +77,8 @@ export async function prerenderPages(
|
|
|
65
77
|
});
|
|
66
78
|
}
|
|
67
79
|
} finally {
|
|
68
|
-
|
|
80
|
+
server.kill("SIGINT");
|
|
81
|
+
await browser?.close();
|
|
69
82
|
}
|
|
70
83
|
|
|
71
84
|
return results;
|