@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 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
- When prerendering, the page is loaded with the `?prerendering` query param.
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",
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, writeFile } from "node:fs/promises";
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
- const prerenderTimer = createTimer();
54
- console.log(
55
- `${BOLD}${CYAN}ℹ${RESET} Prerendering...\n` +
56
- config.prerenderedRoutes
57
- .map((route) => ` ${DIM}-${RESET} ${CYAN}${route}${RESET}`)
58
- .join("\n"),
59
- );
60
- const prerendered = await prerenderPages(config);
61
- console.log(`${GREEN}✔${RESET} Prerendered in ${prerenderTimer()}`);
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
 
@@ -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 timeout = config.prerenderer.timeout ?? 30e3;
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", "--env-file", "../.env", "server-entry.js"],
21
- cwd: config.serverOutDir,
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 = config.prerenderer.launch?.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
- ...config.prerenderer.launch,
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 (config.prerenderer.waitForSelector) {
49
- await page.waitForSelector(config.prerenderer.waitForSelector, {
50
- visible: config.prerenderer.waitForSelectorVisible,
55
+ if (waitForSelector) {
56
+ await page.waitForSelector(waitForSelector, {
57
+ visible: waitForSelectorVisible,
51
58
  });
52
- } else if (config.prerenderer.waitForTimeout != null) {
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();