ugly-app 0.1.500 → 0.1.502
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/dist/cli/buildWorkers.d.ts +30 -12
- package/dist/cli/buildWorkers.d.ts.map +1 -1
- package/dist/cli/buildWorkers.js +120 -51
- package/dist/cli/buildWorkers.js.map +1 -1
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/server/adapter/workers/createWorkersApp.d.ts +2 -1
- package/dist/server/adapter/workers/createWorkersApp.d.ts.map +1 -1
- package/dist/server/adapter/workers/createWorkersApp.js +13 -7
- package/dist/server/adapter/workers/createWorkersApp.js.map +1 -1
- package/dist/server/adapter/workers/index.d.ts +1 -0
- package/dist/server/adapter/workers/index.d.ts.map +1 -1
- package/dist/server/adapter/workers/index.js +1 -0
- package/dist/server/adapter/workers/index.js.map +1 -1
- package/dist/server/adapter/workers/wrapWithAssets.d.ts +45 -0
- package/dist/server/adapter/workers/wrapWithAssets.d.ts.map +1 -0
- package/dist/server/adapter/workers/wrapWithAssets.js +128 -0
- package/dist/server/adapter/workers/wrapWithAssets.js.map +1 -0
- package/package.json +1 -1
- package/src/cli/buildWorkers.ts +157 -63
- package/src/cli/version.ts +1 -1
- package/src/server/adapter/workers/createWorkersApp.ts +15 -7
- package/src/server/adapter/workers/index.ts +1 -0
- package/src/server/adapter/workers/wrapWithAssets.ts +151 -0
|
@@ -1,17 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `ugly-app build:workers` — bundle the user's Workers entry into
|
|
3
|
-
* `dist/worker/worker.js`
|
|
4
|
-
* `wrangler deploy`) can upload it.
|
|
3
|
+
* `dist/worker/worker.js` AND stage the SPA assets for R2 upload.
|
|
5
4
|
*
|
|
6
|
-
*
|
|
7
|
-
* The user writes `server/workers.ts` in their project. It should
|
|
8
|
-
* `export default createWorkersApp(...)` and `export { CollectionDO,
|
|
9
|
-
* SessionDO } from 'ugly-app/server/adapter/workers'`. We bundle that
|
|
10
|
-
* file with esbuild — single ESM output, `cloudflare:*` + `node:*`
|
|
11
|
-
* marked external (workerd provides them).
|
|
5
|
+
* Output layout (relative to the project root):
|
|
12
6
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
7
|
+
* dist/client/index.html — vite output (pre-rewrite)
|
|
8
|
+
* dist/client/assets/index-Abc.js — vite output
|
|
9
|
+
* dist/client/icon.png — vite output
|
|
10
|
+
*
|
|
11
|
+
* dist/worker/worker.js — bundled Worker module
|
|
12
|
+
* dist/worker/meta.json — esbuild metafile (size guard input)
|
|
13
|
+
* dist/worker/index.html — rewritten HTML (/{buildId}/...)
|
|
14
|
+
* dist/worker/r2-upload/ — files Studio uploads to R2 BEFORE
|
|
15
|
+
* builds/{buildId}/assets/... the Worker script lands. Keys mirror
|
|
16
|
+
* builds/{buildId}/icon.png the relative paths under r2-upload/.
|
|
17
|
+
* builds/{buildId}/buildId.txt
|
|
18
|
+
*
|
|
19
|
+
* The build wraps the user's `server/workers.ts` via an auto-generated
|
|
20
|
+
* entry that pipes the base WorkersApp through `wrapWithAssets` with
|
|
21
|
+
* the rewritten `indexHtml` + `buildId` inlined as constants. The
|
|
22
|
+
* user's entry stays runtime-neutral and they never see the generated
|
|
23
|
+
* wrapper.
|
|
24
|
+
*
|
|
25
|
+
* The hygiene gate (no `pg`/`nats`/`@aws-sdk/*` in the bundle) still
|
|
26
|
+
* runs after esbuild.
|
|
15
27
|
*/
|
|
16
28
|
interface BuildWorkersOptions {
|
|
17
29
|
/** Project root — typically process.cwd(). */
|
|
@@ -20,13 +32,19 @@ interface BuildWorkersOptions {
|
|
|
20
32
|
entry?: string;
|
|
21
33
|
/** Override the output dir. Default `dist/worker/`. */
|
|
22
34
|
outDir?: string;
|
|
35
|
+
/** Vite client output dir. Default `dist/client/`. */
|
|
36
|
+
clientDir?: string;
|
|
23
37
|
/** When true, print the bundle-size table after building. */
|
|
24
38
|
verbose?: boolean;
|
|
25
39
|
}
|
|
26
|
-
|
|
40
|
+
interface BuildWorkersResult {
|
|
27
41
|
outFile: string;
|
|
28
42
|
metaFile: string;
|
|
29
43
|
bytes: number;
|
|
30
|
-
|
|
44
|
+
buildId: string;
|
|
45
|
+
/** Directory holding files Studio uploads to R2. Mirrors R2 keys. */
|
|
46
|
+
r2UploadDir: string;
|
|
47
|
+
}
|
|
48
|
+
export declare function runBuildWorkers(opts?: BuildWorkersOptions): Promise<BuildWorkersResult>;
|
|
31
49
|
export {};
|
|
32
50
|
//# sourceMappingURL=buildWorkers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildWorkers.d.ts","sourceRoot":"","sources":["../../src/cli/buildWorkers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"buildWorkers.d.ts","sourceRoot":"","sources":["../../src/cli/buildWorkers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAiCH,UAAU,mBAAmB;IAC3B,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,eAAe,CACnC,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,kBAAkB,CAAC,CAqG7B"}
|
package/dist/cli/buildWorkers.js
CHANGED
|
@@ -1,44 +1,53 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `ugly-app build:workers` — bundle the user's Workers entry into
|
|
3
|
-
* `dist/worker/worker.js`
|
|
4
|
-
* `wrangler deploy`) can upload it.
|
|
3
|
+
* `dist/worker/worker.js` AND stage the SPA assets for R2 upload.
|
|
5
4
|
*
|
|
6
|
-
*
|
|
7
|
-
* The user writes `server/workers.ts` in their project. It should
|
|
8
|
-
* `export default createWorkersApp(...)` and `export { CollectionDO,
|
|
9
|
-
* SessionDO } from 'ugly-app/server/adapter/workers'`. We bundle that
|
|
10
|
-
* file with esbuild — single ESM output, `cloudflare:*` + `node:*`
|
|
11
|
-
* marked external (workerd provides them).
|
|
5
|
+
* Output layout (relative to the project root):
|
|
12
6
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
7
|
+
* dist/client/index.html — vite output (pre-rewrite)
|
|
8
|
+
* dist/client/assets/index-Abc.js — vite output
|
|
9
|
+
* dist/client/icon.png — vite output
|
|
10
|
+
*
|
|
11
|
+
* dist/worker/worker.js — bundled Worker module
|
|
12
|
+
* dist/worker/meta.json — esbuild metafile (size guard input)
|
|
13
|
+
* dist/worker/index.html — rewritten HTML (/{buildId}/...)
|
|
14
|
+
* dist/worker/r2-upload/ — files Studio uploads to R2 BEFORE
|
|
15
|
+
* builds/{buildId}/assets/... the Worker script lands. Keys mirror
|
|
16
|
+
* builds/{buildId}/icon.png the relative paths under r2-upload/.
|
|
17
|
+
* builds/{buildId}/buildId.txt
|
|
18
|
+
*
|
|
19
|
+
* The build wraps the user's `server/workers.ts` via an auto-generated
|
|
20
|
+
* entry that pipes the base WorkersApp through `wrapWithAssets` with
|
|
21
|
+
* the rewritten `indexHtml` + `buildId` inlined as constants. The
|
|
22
|
+
* user's entry stays runtime-neutral and they never see the generated
|
|
23
|
+
* wrapper.
|
|
24
|
+
*
|
|
25
|
+
* The hygiene gate (no `pg`/`nats`/`@aws-sdk/*` in the bundle) still
|
|
26
|
+
* runs after esbuild.
|
|
15
27
|
*/
|
|
16
28
|
import { build } from 'esbuild';
|
|
17
|
-
import { mkdir, readFile, stat, writeFile } from 'fs/promises';
|
|
18
29
|
import { existsSync } from 'fs';
|
|
30
|
+
import { copyFile, mkdir, readFile, readdir, rm, stat, writeFile } from 'fs/promises';
|
|
19
31
|
import path from 'path';
|
|
20
32
|
const STARTER_ENTRY = `// server/workers.ts — Cloudflare Workers entry point.
|
|
21
|
-
// Studio's publish flow bundles this file
|
|
22
|
-
//
|
|
23
|
-
//
|
|
33
|
+
// Studio's publish flow bundles this file (after wrapping it with
|
|
34
|
+
// asset-serving infrastructure) and uploads it as the Worker script.
|
|
35
|
+
// The DO classes must be exported (CollectionDO + SessionDO) so
|
|
36
|
+
// wrangler.toml's [[durable_objects.bindings]] can reference them.
|
|
24
37
|
|
|
25
38
|
import { createWorkersApp } from 'ugly-app/server/adapter/workers';
|
|
26
39
|
import { CollectionDO, SessionDO } from 'ugly-app/server/adapter/workers';
|
|
27
40
|
|
|
28
|
-
import { requests } from '../shared/api';
|
|
41
|
+
import { messages, requests } from '../shared/api';
|
|
29
42
|
import { collections } from '../shared/collections';
|
|
30
|
-
|
|
31
|
-
// without touching express/ws. The easiest split: a sibling file
|
|
32
|
-
// 'server/handlers.ts' that exports them by name.
|
|
33
|
-
import { handlers, cronTasks, cronHandlers, workers, workerHandlers } from './handlers';
|
|
43
|
+
import { handlers, cronTasks, cronHandlers } from './handlers';
|
|
34
44
|
|
|
35
45
|
const app = createWorkersApp(
|
|
36
|
-
{ requests },
|
|
46
|
+
{ requests, messages },
|
|
37
47
|
handlers,
|
|
38
48
|
collections,
|
|
39
49
|
(cfg) => {
|
|
40
|
-
cfg.
|
|
41
|
-
cfg.setWorkers(workers, workerHandlers);
|
|
50
|
+
cfg.setWorkers(cronTasks, cronHandlers);
|
|
42
51
|
},
|
|
43
52
|
);
|
|
44
53
|
|
|
@@ -49,34 +58,61 @@ export async function runBuildWorkers(opts = {}) {
|
|
|
49
58
|
const projectDir = path.resolve(opts.projectDir ?? process.cwd());
|
|
50
59
|
const entry = path.resolve(projectDir, opts.entry ?? 'server/workers.ts');
|
|
51
60
|
const outDir = path.resolve(projectDir, opts.outDir ?? 'dist/worker');
|
|
61
|
+
const clientDir = path.resolve(projectDir, opts.clientDir ?? 'dist/client');
|
|
52
62
|
if (!existsSync(entry)) {
|
|
53
63
|
const rel = path.relative(projectDir, entry);
|
|
54
|
-
|
|
64
|
+
throw new Error(`[build:workers] ${rel} not found.\n\n` +
|
|
55
65
|
`Create it with the snippet below, adjusting imports to match your project:\n\n` +
|
|
56
66
|
STARTER_ENTRY +
|
|
57
67
|
`\n` +
|
|
58
|
-
`Then re-run \`npm run build:workers\`.\n
|
|
59
|
-
|
|
68
|
+
`Then re-run \`npm run build:workers\`.\n`);
|
|
69
|
+
}
|
|
70
|
+
if (!existsSync(clientDir) || !existsSync(path.join(clientDir, 'index.html'))) {
|
|
71
|
+
throw new Error(`[build:workers] ${path.relative(projectDir, clientDir)}/index.html not found.\n` +
|
|
72
|
+
`Run \`npm run build\` first (vite outputs the SPA there), then re-run \`npm run build:workers\`.`);
|
|
60
73
|
}
|
|
74
|
+
// Reset the worker output dir so old artifacts don't leak in.
|
|
75
|
+
await rm(outDir, { recursive: true, force: true });
|
|
61
76
|
await mkdir(outDir, { recursive: true });
|
|
77
|
+
// ── BuildId — match the framework's convention (string of Date.now()).
|
|
78
|
+
// If `shared/Build.ts` already has one (set by `npm run build`), reuse
|
|
79
|
+
// it so the buildId the client SEES at runtime matches the asset path.
|
|
80
|
+
const buildId = await readSharedBuildId(projectDir);
|
|
81
|
+
// ── Stage SPA assets for R2 upload.
|
|
82
|
+
const r2UploadDir = path.join(outDir, 'r2-upload');
|
|
83
|
+
const r2BuildPrefix = path.join(r2UploadDir, 'builds', buildId);
|
|
84
|
+
await mkdir(r2BuildPrefix, { recursive: true });
|
|
85
|
+
await copyDirRec(clientDir, r2BuildPrefix, /* skip */ (rel) => rel === 'index.html');
|
|
86
|
+
// Drop a marker file so we can detect which buildId an R2 bucket has
|
|
87
|
+
// assets for (handy when bumping versions / debugging).
|
|
88
|
+
await writeFile(path.join(r2BuildPrefix, 'buildId.txt'), buildId, 'utf-8');
|
|
89
|
+
// ── Rewrite index.html.
|
|
90
|
+
const rawHtml = await readFile(path.join(clientDir, 'index.html'), 'utf-8');
|
|
91
|
+
const rewrittenHtml = rewriteHtmlForBuildId(rawHtml, buildId);
|
|
92
|
+
await writeFile(path.join(outDir, 'index.html'), rewrittenHtml, 'utf-8');
|
|
93
|
+
// ── Generate the wrapper entry. esbuild bundles this; it imports
|
|
94
|
+
// the user's untouched `server/workers.ts` and re-exports the wrapped
|
|
95
|
+
// app + DO classes.
|
|
96
|
+
const generatedEntry = path.join(outDir, 'entry.generated.ts');
|
|
97
|
+
await writeFile(generatedEntry, `// AUTO-GENERATED by ugly-app build:workers — do not edit.\n` +
|
|
98
|
+
`import { wrapWithAssets } from 'ugly-app/server/adapter/workers';\n` +
|
|
99
|
+
`import baseApp, { CollectionDO, SessionDO } from ${JSON.stringify(entry)};\n` +
|
|
100
|
+
`const indexHtml = ${JSON.stringify(rewrittenHtml)};\n` +
|
|
101
|
+
`const buildId = ${JSON.stringify(buildId)};\n` +
|
|
102
|
+
`const app = wrapWithAssets(baseApp, { indexHtml, buildId });\n` +
|
|
103
|
+
`export default app;\n` +
|
|
104
|
+
`export { CollectionDO, SessionDO };\n`, 'utf-8');
|
|
62
105
|
const result = await build({
|
|
63
|
-
entryPoints: [
|
|
106
|
+
entryPoints: [generatedEntry],
|
|
64
107
|
bundle: true,
|
|
65
108
|
format: 'esm',
|
|
66
109
|
target: 'esnext',
|
|
67
|
-
// workerd is closer to a browser than to Node; this lets esbuild
|
|
68
|
-
// pick browser-condition exports from packages that ship dual
|
|
69
|
-
// builds (e.g. `@neondatabase/serverless`).
|
|
70
110
|
platform: 'browser',
|
|
71
111
|
outfile: path.join(outDir, 'worker.js'),
|
|
72
112
|
metafile: true,
|
|
73
113
|
sourcemap: false,
|
|
74
114
|
logLevel: 'info',
|
|
75
|
-
// workerd provides these natively. Bundling them would break
|
|
76
|
-
// imports and defeat the size budget.
|
|
77
115
|
external: ['cloudflare:*', 'node:*'],
|
|
78
|
-
// Keep absolute paths intact in the metafile so callers can map
|
|
79
|
-
// back to source files.
|
|
80
116
|
absWorkingDir: projectDir,
|
|
81
117
|
});
|
|
82
118
|
const metaJson = JSON.stringify(result.metafile, null, 2);
|
|
@@ -84,33 +120,66 @@ export async function runBuildWorkers(opts = {}) {
|
|
|
84
120
|
const metaFile = path.join(outDir, 'meta.json');
|
|
85
121
|
await writeFile(metaFile, metaJson);
|
|
86
122
|
const { size: bytes } = await stat(outFile);
|
|
123
|
+
// eslint-disable-next-line no-console
|
|
124
|
+
console.log(`[build:workers] buildId=${buildId} | worker.js ${(bytes / 1024).toFixed(1)} KB raw | r2-upload: ${path.relative(projectDir, r2UploadDir)}`);
|
|
87
125
|
if (opts.verbose && result.metafile) {
|
|
88
|
-
const
|
|
89
|
-
// eslint-disable-next-line no-console
|
|
90
|
-
console.log(`[build:workers] ${path.relative(projectDir, outFile)} — ${(bytes / 1024).toFixed(1)} KB raw`);
|
|
91
|
-
for (const row of top) {
|
|
126
|
+
for (const row of topInputs(result.metafile, 10)) {
|
|
92
127
|
// eslint-disable-next-line no-console
|
|
93
128
|
console.log(` ${(row.bytes / 1024).toFixed(1).padStart(7)} KB ${row.path}`);
|
|
94
129
|
}
|
|
95
130
|
}
|
|
96
|
-
else {
|
|
97
|
-
// eslint-disable-next-line no-console
|
|
98
|
-
console.log(`[build:workers] ${path.relative(projectDir, outFile)} — ${(bytes / 1024).toFixed(1)} KB raw`);
|
|
99
|
-
}
|
|
100
|
-
// Quick hygiene gate — surface bundle errors that would only
|
|
101
|
-
// otherwise show up during `wrangler deploy`. We don't enforce a
|
|
102
|
-
// hard size cap here (Workers Paid caps at 10MB; user projects
|
|
103
|
-
// legitimately vary), but we DO refuse to ship Node-only modules
|
|
104
|
-
// that workerd can't load.
|
|
105
131
|
await assertNoNodeOnlyDeps(metaFile);
|
|
106
|
-
return { outFile, metaFile, bytes };
|
|
132
|
+
return { outFile, metaFile, bytes, buildId, r2UploadDir };
|
|
133
|
+
}
|
|
134
|
+
// ────────────────────────────────────────────────────────────────────
|
|
135
|
+
// Helpers
|
|
136
|
+
async function readSharedBuildId(projectDir) {
|
|
137
|
+
const buildFile = path.join(projectDir, 'shared', 'Build.ts');
|
|
138
|
+
if (existsSync(buildFile)) {
|
|
139
|
+
const contents = await readFile(buildFile, 'utf-8');
|
|
140
|
+
const m = contents.match(/buildId\s*=\s*['"]([^'"]+)['"]/);
|
|
141
|
+
if (m && m[1])
|
|
142
|
+
return m[1];
|
|
143
|
+
}
|
|
144
|
+
// Fall back to a fresh timestamp if `shared/Build.ts` is missing
|
|
145
|
+
// (e.g. user ran `build:workers` without `npm run build` first).
|
|
146
|
+
return String(Date.now());
|
|
147
|
+
}
|
|
148
|
+
function rewriteHtmlForBuildId(html, buildId) {
|
|
149
|
+
// Match `src="/path"` / `href="/path"` whose path starts with the
|
|
150
|
+
// vite-emitted prefixes — `/assets/`, plus root-level static files
|
|
151
|
+
// emitted by vite to `dist/client/` (icon.png, favicon.ico, etc.).
|
|
152
|
+
// Replacing only these patterns avoids accidentally clobbering
|
|
153
|
+
// hrefs to `/api/...` or to external URLs.
|
|
154
|
+
return html.replace(/(\s(?:src|href)=")\/([^"]+)"/g, (full, attr, restPath) => {
|
|
155
|
+
if (restPath.startsWith('assets/') ||
|
|
156
|
+
restPath.match(/^[^/]+\.(?:png|ico|svg|jpg|jpeg|gif|webp|woff2?|ttf|map)$/i)) {
|
|
157
|
+
return `${attr}/${buildId}/${restPath}"`;
|
|
158
|
+
}
|
|
159
|
+
return full;
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
async function copyDirRec(src, dest, skip, base) {
|
|
163
|
+
const baseDir = base ?? src;
|
|
164
|
+
await mkdir(dest, { recursive: true });
|
|
165
|
+
const entries = await readdir(src, { withFileTypes: true });
|
|
166
|
+
for (const ent of entries) {
|
|
167
|
+
const srcPath = path.join(src, ent.name);
|
|
168
|
+
const destPath = path.join(dest, ent.name);
|
|
169
|
+
const rel = path.relative(baseDir, srcPath);
|
|
170
|
+
if (skip?.(rel))
|
|
171
|
+
continue;
|
|
172
|
+
if (ent.isDirectory()) {
|
|
173
|
+
await copyDirRec(srcPath, destPath, skip, baseDir);
|
|
174
|
+
}
|
|
175
|
+
else if (ent.isFile()) {
|
|
176
|
+
await copyFile(srcPath, destPath);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
107
179
|
}
|
|
108
180
|
function topInputs(metafile, n) {
|
|
109
181
|
return Object.entries(metafile.inputs)
|
|
110
|
-
.map(([p, info]) => ({
|
|
111
|
-
path: p,
|
|
112
|
-
bytes: info.bytes,
|
|
113
|
-
}))
|
|
182
|
+
.map(([p, info]) => ({ path: p, bytes: info.bytes }))
|
|
114
183
|
.sort((a, b) => b.bytes - a.bytes)
|
|
115
184
|
.slice(0, n);
|
|
116
185
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildWorkers.js","sourceRoot":"","sources":["../../src/cli/buildWorkers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"buildWorkers.js","sourceRoot":"","sources":["../../src/cli/buildWorkers.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.502";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
*
|
|
13
13
|
* HTTP path:
|
|
14
14
|
* POST /api/:name → router.dispatch(name, input, userId)
|
|
15
|
-
* GET /
|
|
15
|
+
* GET /rpc → upgrade to SessionDO with the request
|
|
16
|
+
* GET /socket → alias for /rpc (legacy framework path)
|
|
16
17
|
* GET /_health → liveness probe (Studio's workers-init step)
|
|
17
18
|
*
|
|
18
19
|
* WebSocket path (via SessionDO):
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createWorkersApp.d.ts","sourceRoot":"","sources":["../../../../src/server/adapter/workers/createWorkersApp.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"createWorkersApp.d.ts","sourceRoot":"","sources":["../../../../src/server/adapter/workers/createWorkersApp.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
*
|
|
13
13
|
* HTTP path:
|
|
14
14
|
* POST /api/:name → router.dispatch(name, input, userId)
|
|
15
|
-
* GET /
|
|
15
|
+
* GET /rpc → upgrade to SessionDO with the request
|
|
16
|
+
* GET /socket → alias for /rpc (legacy framework path)
|
|
16
17
|
* GET /_health → liveness probe (Studio's workers-init step)
|
|
17
18
|
*
|
|
18
19
|
* WebSocket path (via SessionDO):
|
|
@@ -361,22 +362,27 @@ export function createWorkersApp(optsOrRegistry, handlersArg, _appDefsArg, confi
|
|
|
361
362
|
return c.json({ error: err.message }, 400);
|
|
362
363
|
}
|
|
363
364
|
});
|
|
364
|
-
//
|
|
365
|
-
|
|
365
|
+
// WebSocket upgrade — forward to a per-user SessionDO. We register
|
|
366
|
+
// `/rpc` (the framework client's default `socketUrl`) AND `/socket`
|
|
367
|
+
// (legacy + tests). Custom user paths set via App.setWsPath aren't
|
|
368
|
+
// routed here yet — Phase 2 will read the registered path from the
|
|
369
|
+
// app config and add it dynamically.
|
|
370
|
+
const handleWsUpgrade = async (c) => {
|
|
366
371
|
ensureAdapter(c.env);
|
|
367
372
|
if (c.req.header('Upgrade') !== 'websocket') {
|
|
368
373
|
return c.text('expected websocket upgrade', 400);
|
|
369
374
|
}
|
|
370
|
-
// Per-user keying. v1: hash the Authorization header so anonymous
|
|
371
|
-
// connections still get their own DO. Phase 2 verifies the token
|
|
372
|
-
// up-front and uses the userId.
|
|
373
375
|
const authHeader = c.req.header('Authorization') ?? 'anon';
|
|
374
376
|
const sessionName = `${c.env.PROJECT_ID}:session:${hash(authHeader)}`;
|
|
375
377
|
const stub = c.env.SESSIONS.get(c.env.SESSIONS.idFromName(sessionName));
|
|
376
378
|
const upstreamReq = c.req
|
|
377
379
|
.raw;
|
|
378
380
|
return (await stub.fetch(upstreamReq));
|
|
379
|
-
}
|
|
381
|
+
};
|
|
382
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
383
|
+
hono.get('/rpc', handleWsUpgrade);
|
|
384
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
385
|
+
hono.get('/socket', handleWsUpgrade);
|
|
380
386
|
return {
|
|
381
387
|
async fetch(request, env, ctxArg) {
|
|
382
388
|
ensureAdapter(env);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createWorkersApp.js","sourceRoot":"","sources":["../../../../src/server/adapter/workers/createWorkersApp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createWorkersApp.js","sourceRoot":"","sources":["../../../../src/server/adapter/workers/createWorkersApp.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@ import type { WorkersEnv } from './cf-types.js';
|
|
|
15
15
|
export { CollectionDO } from './do-collection.js';
|
|
16
16
|
export { SessionDO } from './createWorkersApp.js';
|
|
17
17
|
export { createWorkersApp, getAppContext, } from './createWorkersApp.js';
|
|
18
|
+
export { wrapWithAssets, type AssetsConfig } from './wrapWithAssets.js';
|
|
18
19
|
export { _hasAdapter, getAdapter, setAdapter, } from '../singleton.js';
|
|
19
20
|
export type { CreateWorkersAppOptions, WorkersApp, } from './createWorkersApp.js';
|
|
20
21
|
export type { WorkersEnv } from './cf-types.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/adapter/workers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAMhD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,aAAa,GACd,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/server/adapter/workers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAMhD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKxE,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,uBAAuB,EACvB,UAAU,GACX,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,UAAU,GAAG,aAAa,CAsBnE"}
|
|
@@ -17,6 +17,7 @@ import { createWorkersStorage } from './storage.js';
|
|
|
17
17
|
export { CollectionDO } from './do-collection.js';
|
|
18
18
|
export { SessionDO } from './createWorkersApp.js';
|
|
19
19
|
export { createWorkersApp, getAppContext, } from './createWorkersApp.js';
|
|
20
|
+
export { wrapWithAssets } from './wrapWithAssets.js';
|
|
20
21
|
// Re-export the singleton accessors so user app code can do
|
|
21
22
|
// `import { getAdapter } from 'ugly-app/server/adapter/workers'`
|
|
22
23
|
// without going through `adapter/index.ts` (which imports the Node
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/adapter/workers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,4DAA4D;AAC5D,iEAAiE;AACjE,mEAAmE;AACnE,uEAAuE;AACvE,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,GACX,MAAM,iBAAiB,CAAC;AAOzB,MAAM,UAAU,oBAAoB,CAAC,GAAe;IAClD,OAAO;QACL,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE;YACpC,aAAa,EAAE,GAAG,CAAC,cAAc;SAClC,CAAC;QACF,MAAM,EAAE,mBAAmB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC;QAC5D,OAAO,EAAE,oBAAoB,CAC3B,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAC7B;QACD,QAAQ,EAAE,qBAAqB,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAiB,EAAE;gBAC5C,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CACb,oCAAoC,IAAI,kFAAkF,CAC3H,CAAC;gBACJ,CAAC;gBACD,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACpD,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/server/adapter/workers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAqB,MAAM,qBAAqB,CAAC;AACxE,4DAA4D;AAC5D,iEAAiE;AACjE,mEAAmE;AACnE,uEAAuE;AACvE,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,GACX,MAAM,iBAAiB,CAAC;AAOzB,MAAM,UAAU,oBAAoB,CAAC,GAAe;IAClD,OAAO;QACL,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE;YACpC,aAAa,EAAE,GAAG,CAAC,cAAc;SAClC,CAAC;QACF,MAAM,EAAE,mBAAmB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC;QAC5D,OAAO,EAAE,oBAAoB,CAC3B,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAC7B;QACD,QAAQ,EAAE,qBAAqB,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAiB,EAAE;gBAC5C,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CACb,oCAAoC,IAAI,kFAAkF,CAC3H,CAAC;gBACJ,CAAC;gBACD,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACpD,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `wrapWithAssets(workersApp, { indexHtml, buildId })`
|
|
3
|
+
*
|
|
4
|
+
* Mirrors ugly.bot's prod pattern: the server serves a single
|
|
5
|
+
* non-cached HTML document at `/` (and as a fallback for non-API
|
|
6
|
+
* SPA routes), with all asset URLs rewritten to a per-build prefix
|
|
7
|
+
* `/{buildId}/...`. Those `/{buildId}/*` requests are served from the
|
|
8
|
+
* R2 bucket binding at key `builds/{buildId}/...` — content-hashed
|
|
9
|
+
* vite chunks plus root-level static files (icon.png, favicon.ico).
|
|
10
|
+
*
|
|
11
|
+
* Why this shape?
|
|
12
|
+
* - The HTML must be no-cache so a deploy actually rolls out.
|
|
13
|
+
* - Assets must be immutable and edge-cached for cost + latency.
|
|
14
|
+
* - The buildId in the path is the bust signal: every deploy issues
|
|
15
|
+
* a new buildId, so users always pull fresh chunks, but cached
|
|
16
|
+
* copies of older chunks stay valid as long as they exist in R2.
|
|
17
|
+
*
|
|
18
|
+
* The publish pipeline uploads the vite output to
|
|
19
|
+
* R2_BUCKET: builds/{buildId}/assets/index-Abc.js
|
|
20
|
+
* builds/{buildId}/icon.png
|
|
21
|
+
* ...
|
|
22
|
+
* before the Worker script itself is uploaded, so the very first
|
|
23
|
+
* request to a fresh deploy can already satisfy `/{buildId}/...`.
|
|
24
|
+
*
|
|
25
|
+
* The wrapper composes over the base WorkersApp: the base handles
|
|
26
|
+
* `/api/:name`, `/socket`, `/_health`. We only intercept `/`,
|
|
27
|
+
* `/{buildId}/*`, and the SPA fallback (any non-base, non-asset
|
|
28
|
+
* GET that the base would 404).
|
|
29
|
+
*/
|
|
30
|
+
import type { WorkersApp } from './createWorkersApp.js';
|
|
31
|
+
export interface AssetsConfig {
|
|
32
|
+
/**
|
|
33
|
+
* The post-rewrite HTML — `/assets/foo.js` → `/{buildId}/assets/foo.js`
|
|
34
|
+
* etc. Inlined as a string at build time by `ugly-app build:workers`.
|
|
35
|
+
*/
|
|
36
|
+
indexHtml: string;
|
|
37
|
+
/**
|
|
38
|
+
* Per-deploy cache-bust prefix. Every asset URL inside `indexHtml`
|
|
39
|
+
* begins with `/{buildId}/`, and the matching R2 keys live under
|
|
40
|
+
* `builds/{buildId}/...`.
|
|
41
|
+
*/
|
|
42
|
+
buildId: string;
|
|
43
|
+
}
|
|
44
|
+
export declare function wrapWithAssets(base: WorkersApp, config: AssetsConfig): WorkersApp;
|
|
45
|
+
//# sourceMappingURL=wrapWithAssets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapWithAssets.d.ts","sourceRoot":"","sources":["../../../../src/server/adapter/workers/wrapWithAssets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAoCD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,YAAY,GACnB,UAAU,CAgEZ"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `wrapWithAssets(workersApp, { indexHtml, buildId })`
|
|
3
|
+
*
|
|
4
|
+
* Mirrors ugly.bot's prod pattern: the server serves a single
|
|
5
|
+
* non-cached HTML document at `/` (and as a fallback for non-API
|
|
6
|
+
* SPA routes), with all asset URLs rewritten to a per-build prefix
|
|
7
|
+
* `/{buildId}/...`. Those `/{buildId}/*` requests are served from the
|
|
8
|
+
* R2 bucket binding at key `builds/{buildId}/...` — content-hashed
|
|
9
|
+
* vite chunks plus root-level static files (icon.png, favicon.ico).
|
|
10
|
+
*
|
|
11
|
+
* Why this shape?
|
|
12
|
+
* - The HTML must be no-cache so a deploy actually rolls out.
|
|
13
|
+
* - Assets must be immutable and edge-cached for cost + latency.
|
|
14
|
+
* - The buildId in the path is the bust signal: every deploy issues
|
|
15
|
+
* a new buildId, so users always pull fresh chunks, but cached
|
|
16
|
+
* copies of older chunks stay valid as long as they exist in R2.
|
|
17
|
+
*
|
|
18
|
+
* The publish pipeline uploads the vite output to
|
|
19
|
+
* R2_BUCKET: builds/{buildId}/assets/index-Abc.js
|
|
20
|
+
* builds/{buildId}/icon.png
|
|
21
|
+
* ...
|
|
22
|
+
* before the Worker script itself is uploaded, so the very first
|
|
23
|
+
* request to a fresh deploy can already satisfy `/{buildId}/...`.
|
|
24
|
+
*
|
|
25
|
+
* The wrapper composes over the base WorkersApp: the base handles
|
|
26
|
+
* `/api/:name`, `/socket`, `/_health`. We only intercept `/`,
|
|
27
|
+
* `/{buildId}/*`, and the SPA fallback (any non-base, non-asset
|
|
28
|
+
* GET that the base would 404).
|
|
29
|
+
*/
|
|
30
|
+
const ASSET_CACHE_CONTROL = 'public, max-age=31536000, immutable';
|
|
31
|
+
const HTML_CACHE_CONTROL = 'no-cache, no-store, must-revalidate';
|
|
32
|
+
function guessContentType(path) {
|
|
33
|
+
const lower = path.toLowerCase();
|
|
34
|
+
if (lower.endsWith('.js') || lower.endsWith('.mjs')) {
|
|
35
|
+
return 'application/javascript; charset=utf-8';
|
|
36
|
+
}
|
|
37
|
+
if (lower.endsWith('.css'))
|
|
38
|
+
return 'text/css; charset=utf-8';
|
|
39
|
+
if (lower.endsWith('.html'))
|
|
40
|
+
return 'text/html; charset=utf-8';
|
|
41
|
+
if (lower.endsWith('.json'))
|
|
42
|
+
return 'application/json; charset=utf-8';
|
|
43
|
+
if (lower.endsWith('.svg'))
|
|
44
|
+
return 'image/svg+xml';
|
|
45
|
+
if (lower.endsWith('.png'))
|
|
46
|
+
return 'image/png';
|
|
47
|
+
if (lower.endsWith('.jpg') || lower.endsWith('.jpeg'))
|
|
48
|
+
return 'image/jpeg';
|
|
49
|
+
if (lower.endsWith('.gif'))
|
|
50
|
+
return 'image/gif';
|
|
51
|
+
if (lower.endsWith('.webp'))
|
|
52
|
+
return 'image/webp';
|
|
53
|
+
if (lower.endsWith('.ico'))
|
|
54
|
+
return 'image/x-icon';
|
|
55
|
+
if (lower.endsWith('.woff2'))
|
|
56
|
+
return 'font/woff2';
|
|
57
|
+
if (lower.endsWith('.woff'))
|
|
58
|
+
return 'font/woff';
|
|
59
|
+
if (lower.endsWith('.ttf'))
|
|
60
|
+
return 'font/ttf';
|
|
61
|
+
if (lower.endsWith('.map'))
|
|
62
|
+
return 'application/json; charset=utf-8';
|
|
63
|
+
return 'application/octet-stream';
|
|
64
|
+
}
|
|
65
|
+
function htmlResponse(html) {
|
|
66
|
+
return new Response(html, {
|
|
67
|
+
status: 200,
|
|
68
|
+
headers: {
|
|
69
|
+
'content-type': 'text/html; charset=utf-8',
|
|
70
|
+
'cache-control': HTML_CACHE_CONTROL,
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
export function wrapWithAssets(base, config) {
|
|
75
|
+
const { indexHtml, buildId } = config;
|
|
76
|
+
const assetPrefix = `/${buildId}/`;
|
|
77
|
+
return {
|
|
78
|
+
async fetch(request, env, ctx) {
|
|
79
|
+
const url = new URL(request.url);
|
|
80
|
+
const path = url.pathname;
|
|
81
|
+
const method = request.method.toUpperCase();
|
|
82
|
+
// ── 1. Asset path: /{buildId}/anything ────────────────────────
|
|
83
|
+
// Serve from R2. R2 keys mirror the URL path, prefixed with
|
|
84
|
+
// `builds/`.
|
|
85
|
+
if (path.startsWith(assetPrefix) && (method === 'GET' || method === 'HEAD')) {
|
|
86
|
+
const rest = path.slice(assetPrefix.length); // "assets/foo.js" or "icon.png"
|
|
87
|
+
const key = `builds/${buildId}/${rest}`;
|
|
88
|
+
const obj = await env.R2_BUCKET.get(key);
|
|
89
|
+
if (!obj) {
|
|
90
|
+
return new Response('asset not found', { status: 404 });
|
|
91
|
+
}
|
|
92
|
+
const contentType = obj.httpMetadata?.contentType ?? guessContentType(rest);
|
|
93
|
+
return new Response(obj.body, {
|
|
94
|
+
status: 200,
|
|
95
|
+
headers: {
|
|
96
|
+
'content-type': contentType,
|
|
97
|
+
'cache-control': ASSET_CACHE_CONTROL,
|
|
98
|
+
// ETag helps CDN re-validation behave on conditional GETs.
|
|
99
|
+
etag: obj.etag,
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
// ── 2. Framework + user routes ────────────────────────────────
|
|
104
|
+
// Anything the base WorkersApp wants to handle goes through
|
|
105
|
+
// first: /api/:name, /socket, /_health, anything the user
|
|
106
|
+
// registered. If it returns a non-404, that's our response.
|
|
107
|
+
const baseRes = await base.fetch(request, env, ctx);
|
|
108
|
+
if (baseRes.status !== 404) {
|
|
109
|
+
return baseRes;
|
|
110
|
+
}
|
|
111
|
+
// ── 3. SPA fallback ───────────────────────────────────────────
|
|
112
|
+
// GET / and any other GET the framework didn't handle gets the
|
|
113
|
+
// index document. Client-side routing takes it from here.
|
|
114
|
+
// POST/PUT/DELETE on unrecognized paths get the base's 404.
|
|
115
|
+
if (method === 'GET' || method === 'HEAD') {
|
|
116
|
+
return htmlResponse(indexHtml);
|
|
117
|
+
}
|
|
118
|
+
return baseRes;
|
|
119
|
+
},
|
|
120
|
+
async scheduled(event, env, ctx) {
|
|
121
|
+
return base.scheduled(event, env, ctx);
|
|
122
|
+
},
|
|
123
|
+
async queue(batch, env, ctx) {
|
|
124
|
+
return base.queue(batch, env, ctx);
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=wrapWithAssets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapWithAssets.js","sourceRoot":"","sources":["../../../../src/server/adapter/workers/wrapWithAssets.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/cli/buildWorkers.ts
CHANGED
|
@@ -1,46 +1,55 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `ugly-app build:workers` — bundle the user's Workers entry into
|
|
3
|
-
* `dist/worker/worker.js`
|
|
4
|
-
* `wrangler deploy`) can upload it.
|
|
3
|
+
* `dist/worker/worker.js` AND stage the SPA assets for R2 upload.
|
|
5
4
|
*
|
|
6
|
-
*
|
|
7
|
-
* The user writes `server/workers.ts` in their project. It should
|
|
8
|
-
* `export default createWorkersApp(...)` and `export { CollectionDO,
|
|
9
|
-
* SessionDO } from 'ugly-app/server/adapter/workers'`. We bundle that
|
|
10
|
-
* file with esbuild — single ESM output, `cloudflare:*` + `node:*`
|
|
11
|
-
* marked external (workerd provides them).
|
|
5
|
+
* Output layout (relative to the project root):
|
|
12
6
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
7
|
+
* dist/client/index.html — vite output (pre-rewrite)
|
|
8
|
+
* dist/client/assets/index-Abc.js — vite output
|
|
9
|
+
* dist/client/icon.png — vite output
|
|
10
|
+
*
|
|
11
|
+
* dist/worker/worker.js — bundled Worker module
|
|
12
|
+
* dist/worker/meta.json — esbuild metafile (size guard input)
|
|
13
|
+
* dist/worker/index.html — rewritten HTML (/{buildId}/...)
|
|
14
|
+
* dist/worker/r2-upload/ — files Studio uploads to R2 BEFORE
|
|
15
|
+
* builds/{buildId}/assets/... the Worker script lands. Keys mirror
|
|
16
|
+
* builds/{buildId}/icon.png the relative paths under r2-upload/.
|
|
17
|
+
* builds/{buildId}/buildId.txt
|
|
18
|
+
*
|
|
19
|
+
* The build wraps the user's `server/workers.ts` via an auto-generated
|
|
20
|
+
* entry that pipes the base WorkersApp through `wrapWithAssets` with
|
|
21
|
+
* the rewritten `indexHtml` + `buildId` inlined as constants. The
|
|
22
|
+
* user's entry stays runtime-neutral and they never see the generated
|
|
23
|
+
* wrapper.
|
|
24
|
+
*
|
|
25
|
+
* The hygiene gate (no `pg`/`nats`/`@aws-sdk/*` in the bundle) still
|
|
26
|
+
* runs after esbuild.
|
|
15
27
|
*/
|
|
16
28
|
|
|
17
29
|
import { build, type Metafile } from 'esbuild';
|
|
18
|
-
import { mkdir, readFile, stat, writeFile } from 'fs/promises';
|
|
19
30
|
import { existsSync } from 'fs';
|
|
31
|
+
import { copyFile, mkdir, readFile, readdir, rm, stat, writeFile } from 'fs/promises';
|
|
20
32
|
import path from 'path';
|
|
21
33
|
|
|
22
34
|
const STARTER_ENTRY = `// server/workers.ts — Cloudflare Workers entry point.
|
|
23
|
-
// Studio's publish flow bundles this file
|
|
24
|
-
//
|
|
25
|
-
//
|
|
35
|
+
// Studio's publish flow bundles this file (after wrapping it with
|
|
36
|
+
// asset-serving infrastructure) and uploads it as the Worker script.
|
|
37
|
+
// The DO classes must be exported (CollectionDO + SessionDO) so
|
|
38
|
+
// wrangler.toml's [[durable_objects.bindings]] can reference them.
|
|
26
39
|
|
|
27
40
|
import { createWorkersApp } from 'ugly-app/server/adapter/workers';
|
|
28
41
|
import { CollectionDO, SessionDO } from 'ugly-app/server/adapter/workers';
|
|
29
42
|
|
|
30
|
-
import { requests } from '../shared/api';
|
|
43
|
+
import { messages, requests } from '../shared/api';
|
|
31
44
|
import { collections } from '../shared/collections';
|
|
32
|
-
|
|
33
|
-
// without touching express/ws. The easiest split: a sibling file
|
|
34
|
-
// 'server/handlers.ts' that exports them by name.
|
|
35
|
-
import { handlers, cronTasks, cronHandlers, workers, workerHandlers } from './handlers';
|
|
45
|
+
import { handlers, cronTasks, cronHandlers } from './handlers';
|
|
36
46
|
|
|
37
47
|
const app = createWorkersApp(
|
|
38
|
-
{ requests },
|
|
48
|
+
{ requests, messages },
|
|
39
49
|
handlers,
|
|
40
50
|
collections,
|
|
41
51
|
(cfg) => {
|
|
42
|
-
cfg.
|
|
43
|
-
cfg.setWorkers(workers, workerHandlers);
|
|
52
|
+
cfg.setWorkers(cronTasks, cronHandlers);
|
|
44
53
|
},
|
|
45
54
|
);
|
|
46
55
|
|
|
@@ -55,52 +64,98 @@ interface BuildWorkersOptions {
|
|
|
55
64
|
entry?: string;
|
|
56
65
|
/** Override the output dir. Default `dist/worker/`. */
|
|
57
66
|
outDir?: string;
|
|
67
|
+
/** Vite client output dir. Default `dist/client/`. */
|
|
68
|
+
clientDir?: string;
|
|
58
69
|
/** When true, print the bundle-size table after building. */
|
|
59
70
|
verbose?: boolean;
|
|
60
71
|
}
|
|
61
72
|
|
|
62
|
-
|
|
63
|
-
opts: BuildWorkersOptions = {},
|
|
64
|
-
): Promise<{
|
|
73
|
+
interface BuildWorkersResult {
|
|
65
74
|
outFile: string;
|
|
66
75
|
metaFile: string;
|
|
67
76
|
bytes: number;
|
|
68
|
-
|
|
77
|
+
buildId: string;
|
|
78
|
+
/** Directory holding files Studio uploads to R2. Mirrors R2 keys. */
|
|
79
|
+
r2UploadDir: string;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export async function runBuildWorkers(
|
|
83
|
+
opts: BuildWorkersOptions = {},
|
|
84
|
+
): Promise<BuildWorkersResult> {
|
|
69
85
|
const projectDir = path.resolve(opts.projectDir ?? process.cwd());
|
|
70
86
|
const entry = path.resolve(projectDir, opts.entry ?? 'server/workers.ts');
|
|
71
87
|
const outDir = path.resolve(projectDir, opts.outDir ?? 'dist/worker');
|
|
88
|
+
const clientDir = path.resolve(projectDir, opts.clientDir ?? 'dist/client');
|
|
72
89
|
|
|
73
90
|
if (!existsSync(entry)) {
|
|
74
91
|
const rel = path.relative(projectDir, entry);
|
|
75
|
-
|
|
92
|
+
throw new Error(
|
|
76
93
|
`[build:workers] ${rel} not found.\n\n` +
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
94
|
+
`Create it with the snippet below, adjusting imports to match your project:\n\n` +
|
|
95
|
+
STARTER_ENTRY +
|
|
96
|
+
`\n` +
|
|
97
|
+
`Then re-run \`npm run build:workers\`.\n`,
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (!existsSync(clientDir) || !existsSync(path.join(clientDir, 'index.html'))) {
|
|
102
|
+
throw new Error(
|
|
103
|
+
`[build:workers] ${path.relative(projectDir, clientDir)}/index.html not found.\n` +
|
|
104
|
+
`Run \`npm run build\` first (vite outputs the SPA there), then re-run \`npm run build:workers\`.`,
|
|
105
|
+
);
|
|
82
106
|
}
|
|
83
107
|
|
|
108
|
+
// Reset the worker output dir so old artifacts don't leak in.
|
|
109
|
+
await rm(outDir, { recursive: true, force: true });
|
|
84
110
|
await mkdir(outDir, { recursive: true });
|
|
85
111
|
|
|
112
|
+
// ── BuildId — match the framework's convention (string of Date.now()).
|
|
113
|
+
// If `shared/Build.ts` already has one (set by `npm run build`), reuse
|
|
114
|
+
// it so the buildId the client SEES at runtime matches the asset path.
|
|
115
|
+
const buildId = await readSharedBuildId(projectDir);
|
|
116
|
+
|
|
117
|
+
// ── Stage SPA assets for R2 upload.
|
|
118
|
+
const r2UploadDir = path.join(outDir, 'r2-upload');
|
|
119
|
+
const r2BuildPrefix = path.join(r2UploadDir, 'builds', buildId);
|
|
120
|
+
await mkdir(r2BuildPrefix, { recursive: true });
|
|
121
|
+
await copyDirRec(clientDir, r2BuildPrefix, /* skip */ (rel) => rel === 'index.html');
|
|
122
|
+
// Drop a marker file so we can detect which buildId an R2 bucket has
|
|
123
|
+
// assets for (handy when bumping versions / debugging).
|
|
124
|
+
await writeFile(path.join(r2BuildPrefix, 'buildId.txt'), buildId, 'utf-8');
|
|
125
|
+
|
|
126
|
+
// ── Rewrite index.html.
|
|
127
|
+
const rawHtml = await readFile(path.join(clientDir, 'index.html'), 'utf-8');
|
|
128
|
+
const rewrittenHtml = rewriteHtmlForBuildId(rawHtml, buildId);
|
|
129
|
+
await writeFile(path.join(outDir, 'index.html'), rewrittenHtml, 'utf-8');
|
|
130
|
+
|
|
131
|
+
// ── Generate the wrapper entry. esbuild bundles this; it imports
|
|
132
|
+
// the user's untouched `server/workers.ts` and re-exports the wrapped
|
|
133
|
+
// app + DO classes.
|
|
134
|
+
const generatedEntry = path.join(outDir, 'entry.generated.ts');
|
|
135
|
+
await writeFile(
|
|
136
|
+
generatedEntry,
|
|
137
|
+
`// AUTO-GENERATED by ugly-app build:workers — do not edit.\n` +
|
|
138
|
+
`import { wrapWithAssets } from 'ugly-app/server/adapter/workers';\n` +
|
|
139
|
+
`import baseApp, { CollectionDO, SessionDO } from ${JSON.stringify(entry)};\n` +
|
|
140
|
+
`const indexHtml = ${JSON.stringify(rewrittenHtml)};\n` +
|
|
141
|
+
`const buildId = ${JSON.stringify(buildId)};\n` +
|
|
142
|
+
`const app = wrapWithAssets(baseApp, { indexHtml, buildId });\n` +
|
|
143
|
+
`export default app;\n` +
|
|
144
|
+
`export { CollectionDO, SessionDO };\n`,
|
|
145
|
+
'utf-8',
|
|
146
|
+
);
|
|
147
|
+
|
|
86
148
|
const result = await build({
|
|
87
|
-
entryPoints: [
|
|
149
|
+
entryPoints: [generatedEntry],
|
|
88
150
|
bundle: true,
|
|
89
151
|
format: 'esm',
|
|
90
152
|
target: 'esnext',
|
|
91
|
-
// workerd is closer to a browser than to Node; this lets esbuild
|
|
92
|
-
// pick browser-condition exports from packages that ship dual
|
|
93
|
-
// builds (e.g. `@neondatabase/serverless`).
|
|
94
153
|
platform: 'browser',
|
|
95
154
|
outfile: path.join(outDir, 'worker.js'),
|
|
96
155
|
metafile: true,
|
|
97
156
|
sourcemap: false,
|
|
98
157
|
logLevel: 'info',
|
|
99
|
-
// workerd provides these natively. Bundling them would break
|
|
100
|
-
// imports and defeat the size budget.
|
|
101
158
|
external: ['cloudflare:*', 'node:*'],
|
|
102
|
-
// Keep absolute paths intact in the metafile so callers can map
|
|
103
|
-
// back to source files.
|
|
104
159
|
absWorkingDir: projectDir,
|
|
105
160
|
});
|
|
106
161
|
|
|
@@ -111,37 +166,79 @@ export async function runBuildWorkers(
|
|
|
111
166
|
|
|
112
167
|
const { size: bytes } = await stat(outFile);
|
|
113
168
|
|
|
169
|
+
// eslint-disable-next-line no-console
|
|
170
|
+
console.log(
|
|
171
|
+
`[build:workers] buildId=${buildId} | worker.js ${(bytes / 1024).toFixed(1)} KB raw | r2-upload: ${path.relative(projectDir, r2UploadDir)}`,
|
|
172
|
+
);
|
|
114
173
|
if (opts.verbose && result.metafile) {
|
|
115
|
-
const
|
|
116
|
-
// eslint-disable-next-line no-console
|
|
117
|
-
console.log(
|
|
118
|
-
`[build:workers] ${path.relative(projectDir, outFile)} — ${(bytes / 1024).toFixed(1)} KB raw`,
|
|
119
|
-
);
|
|
120
|
-
for (const row of top) {
|
|
174
|
+
for (const row of topInputs(result.metafile, 10)) {
|
|
121
175
|
// eslint-disable-next-line no-console
|
|
122
176
|
console.log(
|
|
123
177
|
` ${(row.bytes / 1024).toFixed(1).padStart(7)} KB ${row.path}`,
|
|
124
178
|
);
|
|
125
179
|
}
|
|
126
|
-
} else {
|
|
127
|
-
// eslint-disable-next-line no-console
|
|
128
|
-
console.log(
|
|
129
|
-
`[build:workers] ${path.relative(projectDir, outFile)} — ${(bytes / 1024).toFixed(1)} KB raw`,
|
|
130
|
-
);
|
|
131
180
|
}
|
|
132
181
|
|
|
133
|
-
// Quick hygiene gate — surface bundle errors that would only
|
|
134
|
-
// otherwise show up during `wrangler deploy`. We don't enforce a
|
|
135
|
-
// hard size cap here (Workers Paid caps at 10MB; user projects
|
|
136
|
-
// legitimately vary), but we DO refuse to ship Node-only modules
|
|
137
|
-
// that workerd can't load.
|
|
138
182
|
await assertNoNodeOnlyDeps(metaFile);
|
|
139
183
|
|
|
140
|
-
return { outFile, metaFile, bytes };
|
|
184
|
+
return { outFile, metaFile, bytes, buildId, r2UploadDir };
|
|
141
185
|
}
|
|
142
186
|
|
|
143
|
-
|
|
144
|
-
|
|
187
|
+
// ────────────────────────────────────────────────────────────────────
|
|
188
|
+
// Helpers
|
|
189
|
+
|
|
190
|
+
async function readSharedBuildId(projectDir: string): Promise<string> {
|
|
191
|
+
const buildFile = path.join(projectDir, 'shared', 'Build.ts');
|
|
192
|
+
if (existsSync(buildFile)) {
|
|
193
|
+
const contents = await readFile(buildFile, 'utf-8');
|
|
194
|
+
const m = contents.match(/buildId\s*=\s*['"]([^'"]+)['"]/);
|
|
195
|
+
if (m && m[1]) return m[1];
|
|
196
|
+
}
|
|
197
|
+
// Fall back to a fresh timestamp if `shared/Build.ts` is missing
|
|
198
|
+
// (e.g. user ran `build:workers` without `npm run build` first).
|
|
199
|
+
return String(Date.now());
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function rewriteHtmlForBuildId(html: string, buildId: string): string {
|
|
203
|
+
// Match `src="/path"` / `href="/path"` whose path starts with the
|
|
204
|
+
// vite-emitted prefixes — `/assets/`, plus root-level static files
|
|
205
|
+
// emitted by vite to `dist/client/` (icon.png, favicon.ico, etc.).
|
|
206
|
+
// Replacing only these patterns avoids accidentally clobbering
|
|
207
|
+
// hrefs to `/api/...` or to external URLs.
|
|
208
|
+
return html.replace(
|
|
209
|
+
/(\s(?:src|href)=")\/([^"]+)"/g,
|
|
210
|
+
(full, attr: string, restPath: string) => {
|
|
211
|
+
if (
|
|
212
|
+
restPath.startsWith('assets/') ||
|
|
213
|
+
restPath.match(/^[^/]+\.(?:png|ico|svg|jpg|jpeg|gif|webp|woff2?|ttf|map)$/i)
|
|
214
|
+
) {
|
|
215
|
+
return `${attr}/${buildId}/${restPath}"`;
|
|
216
|
+
}
|
|
217
|
+
return full;
|
|
218
|
+
},
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
async function copyDirRec(
|
|
223
|
+
src: string,
|
|
224
|
+
dest: string,
|
|
225
|
+
skip?: (relPath: string) => boolean,
|
|
226
|
+
base?: string,
|
|
227
|
+
): Promise<void> {
|
|
228
|
+
const baseDir = base ?? src;
|
|
229
|
+
await mkdir(dest, { recursive: true });
|
|
230
|
+
const entries = await readdir(src, { withFileTypes: true });
|
|
231
|
+
for (const ent of entries) {
|
|
232
|
+
const srcPath = path.join(src, ent.name);
|
|
233
|
+
const destPath = path.join(dest, ent.name);
|
|
234
|
+
const rel = path.relative(baseDir, srcPath);
|
|
235
|
+
if (skip?.(rel)) continue;
|
|
236
|
+
if (ent.isDirectory()) {
|
|
237
|
+
await copyDirRec(srcPath, destPath, skip, baseDir);
|
|
238
|
+
} else if (ent.isFile()) {
|
|
239
|
+
await copyFile(srcPath, destPath);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
145
242
|
}
|
|
146
243
|
|
|
147
244
|
interface TopRow {
|
|
@@ -151,10 +248,7 @@ interface TopRow {
|
|
|
151
248
|
|
|
152
249
|
function topInputs(metafile: Metafile, n: number): TopRow[] {
|
|
153
250
|
return Object.entries(metafile.inputs)
|
|
154
|
-
.map(([p, info]:
|
|
155
|
-
path: p,
|
|
156
|
-
bytes: info.bytes,
|
|
157
|
-
}))
|
|
251
|
+
.map(([p, info]) => ({ path: p, bytes: info.bytes }))
|
|
158
252
|
.sort((a, b) => b.bytes - a.bytes)
|
|
159
253
|
.slice(0, n);
|
|
160
254
|
}
|
package/src/cli/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// Auto-generated by prebuild — do not edit manually
|
|
2
|
-
export const CLI_VERSION = "0.1.
|
|
2
|
+
export const CLI_VERSION = "0.1.502";
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
*
|
|
13
13
|
* HTTP path:
|
|
14
14
|
* POST /api/:name → router.dispatch(name, input, userId)
|
|
15
|
-
* GET /
|
|
15
|
+
* GET /rpc → upgrade to SessionDO with the request
|
|
16
|
+
* GET /socket → alias for /rpc (legacy framework path)
|
|
16
17
|
* GET /_health → liveness probe (Studio's workers-init step)
|
|
17
18
|
*
|
|
18
19
|
* WebSocket path (via SessionDO):
|
|
@@ -590,15 +591,18 @@ export function createWorkersApp<R extends AppRegistryBase>(
|
|
|
590
591
|
}
|
|
591
592
|
});
|
|
592
593
|
|
|
593
|
-
//
|
|
594
|
-
|
|
594
|
+
// WebSocket upgrade — forward to a per-user SessionDO. We register
|
|
595
|
+
// `/rpc` (the framework client's default `socketUrl`) AND `/socket`
|
|
596
|
+
// (legacy + tests). Custom user paths set via App.setWsPath aren't
|
|
597
|
+
// routed here yet — Phase 2 will read the registered path from the
|
|
598
|
+
// app config and add it dynamically.
|
|
599
|
+
const handleWsUpgrade = async (
|
|
600
|
+
c: { req: { header: (n: string) => string | undefined; raw: Request }; env: WorkersEnv; text: (s: string, code: number) => Response },
|
|
601
|
+
): Promise<Response> => {
|
|
595
602
|
ensureAdapter(c.env);
|
|
596
603
|
if (c.req.header('Upgrade') !== 'websocket') {
|
|
597
604
|
return c.text('expected websocket upgrade', 400);
|
|
598
605
|
}
|
|
599
|
-
// Per-user keying. v1: hash the Authorization header so anonymous
|
|
600
|
-
// connections still get their own DO. Phase 2 verifies the token
|
|
601
|
-
// up-front and uses the userId.
|
|
602
606
|
const authHeader = c.req.header('Authorization') ?? 'anon';
|
|
603
607
|
const sessionName = `${c.env.PROJECT_ID}:session:${hash(authHeader)}`;
|
|
604
608
|
const stub = c.env.SESSIONS.get(
|
|
@@ -607,7 +611,11 @@ export function createWorkersApp<R extends AppRegistryBase>(
|
|
|
607
611
|
const upstreamReq = c.req
|
|
608
612
|
.raw as unknown as Parameters<typeof stub.fetch>[0];
|
|
609
613
|
return (await stub.fetch(upstreamReq)) as unknown as Response;
|
|
610
|
-
}
|
|
614
|
+
};
|
|
615
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
616
|
+
hono.get('/rpc', handleWsUpgrade as any);
|
|
617
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
618
|
+
hono.get('/socket', handleWsUpgrade as any);
|
|
611
619
|
|
|
612
620
|
return {
|
|
613
621
|
async fetch(request, env, ctxArg): Promise<Response> {
|
|
@@ -24,6 +24,7 @@ export {
|
|
|
24
24
|
createWorkersApp,
|
|
25
25
|
getAppContext,
|
|
26
26
|
} from './createWorkersApp.js';
|
|
27
|
+
export { wrapWithAssets, type AssetsConfig } from './wrapWithAssets.js';
|
|
27
28
|
// Re-export the singleton accessors so user app code can do
|
|
28
29
|
// `import { getAdapter } from 'ugly-app/server/adapter/workers'`
|
|
29
30
|
// without going through `adapter/index.ts` (which imports the Node
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `wrapWithAssets(workersApp, { indexHtml, buildId })`
|
|
3
|
+
*
|
|
4
|
+
* Mirrors ugly.bot's prod pattern: the server serves a single
|
|
5
|
+
* non-cached HTML document at `/` (and as a fallback for non-API
|
|
6
|
+
* SPA routes), with all asset URLs rewritten to a per-build prefix
|
|
7
|
+
* `/{buildId}/...`. Those `/{buildId}/*` requests are served from the
|
|
8
|
+
* R2 bucket binding at key `builds/{buildId}/...` — content-hashed
|
|
9
|
+
* vite chunks plus root-level static files (icon.png, favicon.ico).
|
|
10
|
+
*
|
|
11
|
+
* Why this shape?
|
|
12
|
+
* - The HTML must be no-cache so a deploy actually rolls out.
|
|
13
|
+
* - Assets must be immutable and edge-cached for cost + latency.
|
|
14
|
+
* - The buildId in the path is the bust signal: every deploy issues
|
|
15
|
+
* a new buildId, so users always pull fresh chunks, but cached
|
|
16
|
+
* copies of older chunks stay valid as long as they exist in R2.
|
|
17
|
+
*
|
|
18
|
+
* The publish pipeline uploads the vite output to
|
|
19
|
+
* R2_BUCKET: builds/{buildId}/assets/index-Abc.js
|
|
20
|
+
* builds/{buildId}/icon.png
|
|
21
|
+
* ...
|
|
22
|
+
* before the Worker script itself is uploaded, so the very first
|
|
23
|
+
* request to a fresh deploy can already satisfy `/{buildId}/...`.
|
|
24
|
+
*
|
|
25
|
+
* The wrapper composes over the base WorkersApp: the base handles
|
|
26
|
+
* `/api/:name`, `/socket`, `/_health`. We only intercept `/`,
|
|
27
|
+
* `/{buildId}/*`, and the SPA fallback (any non-base, non-asset
|
|
28
|
+
* GET that the base would 404).
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
import type { ExecutionContext } from '@cloudflare/workers-types';
|
|
32
|
+
|
|
33
|
+
import type { WorkersEnv } from './cf-types.js';
|
|
34
|
+
import type { WorkersApp } from './createWorkersApp.js';
|
|
35
|
+
|
|
36
|
+
export interface AssetsConfig {
|
|
37
|
+
/**
|
|
38
|
+
* The post-rewrite HTML — `/assets/foo.js` → `/{buildId}/assets/foo.js`
|
|
39
|
+
* etc. Inlined as a string at build time by `ugly-app build:workers`.
|
|
40
|
+
*/
|
|
41
|
+
indexHtml: string;
|
|
42
|
+
/**
|
|
43
|
+
* Per-deploy cache-bust prefix. Every asset URL inside `indexHtml`
|
|
44
|
+
* begins with `/{buildId}/`, and the matching R2 keys live under
|
|
45
|
+
* `builds/{buildId}/...`.
|
|
46
|
+
*/
|
|
47
|
+
buildId: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const ASSET_CACHE_CONTROL = 'public, max-age=31536000, immutable';
|
|
51
|
+
const HTML_CACHE_CONTROL = 'no-cache, no-store, must-revalidate';
|
|
52
|
+
|
|
53
|
+
function guessContentType(path: string): string {
|
|
54
|
+
const lower = path.toLowerCase();
|
|
55
|
+
if (lower.endsWith('.js') || lower.endsWith('.mjs')) {
|
|
56
|
+
return 'application/javascript; charset=utf-8';
|
|
57
|
+
}
|
|
58
|
+
if (lower.endsWith('.css')) return 'text/css; charset=utf-8';
|
|
59
|
+
if (lower.endsWith('.html')) return 'text/html; charset=utf-8';
|
|
60
|
+
if (lower.endsWith('.json')) return 'application/json; charset=utf-8';
|
|
61
|
+
if (lower.endsWith('.svg')) return 'image/svg+xml';
|
|
62
|
+
if (lower.endsWith('.png')) return 'image/png';
|
|
63
|
+
if (lower.endsWith('.jpg') || lower.endsWith('.jpeg')) return 'image/jpeg';
|
|
64
|
+
if (lower.endsWith('.gif')) return 'image/gif';
|
|
65
|
+
if (lower.endsWith('.webp')) return 'image/webp';
|
|
66
|
+
if (lower.endsWith('.ico')) return 'image/x-icon';
|
|
67
|
+
if (lower.endsWith('.woff2')) return 'font/woff2';
|
|
68
|
+
if (lower.endsWith('.woff')) return 'font/woff';
|
|
69
|
+
if (lower.endsWith('.ttf')) return 'font/ttf';
|
|
70
|
+
if (lower.endsWith('.map')) return 'application/json; charset=utf-8';
|
|
71
|
+
return 'application/octet-stream';
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function htmlResponse(html: string): Response {
|
|
75
|
+
return new Response(html, {
|
|
76
|
+
status: 200,
|
|
77
|
+
headers: {
|
|
78
|
+
'content-type': 'text/html; charset=utf-8',
|
|
79
|
+
'cache-control': HTML_CACHE_CONTROL,
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function wrapWithAssets(
|
|
85
|
+
base: WorkersApp,
|
|
86
|
+
config: AssetsConfig,
|
|
87
|
+
): WorkersApp {
|
|
88
|
+
const { indexHtml, buildId } = config;
|
|
89
|
+
const assetPrefix = `/${buildId}/`;
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
async fetch(
|
|
93
|
+
request: Request,
|
|
94
|
+
env: WorkersEnv,
|
|
95
|
+
ctx: ExecutionContext,
|
|
96
|
+
): Promise<Response> {
|
|
97
|
+
const url = new URL(request.url);
|
|
98
|
+
const path = url.pathname;
|
|
99
|
+
const method = request.method.toUpperCase();
|
|
100
|
+
|
|
101
|
+
// ── 1. Asset path: /{buildId}/anything ────────────────────────
|
|
102
|
+
// Serve from R2. R2 keys mirror the URL path, prefixed with
|
|
103
|
+
// `builds/`.
|
|
104
|
+
if (path.startsWith(assetPrefix) && (method === 'GET' || method === 'HEAD')) {
|
|
105
|
+
const rest = path.slice(assetPrefix.length); // "assets/foo.js" or "icon.png"
|
|
106
|
+
const key = `builds/${buildId}/${rest}`;
|
|
107
|
+
const obj = await env.R2_BUCKET.get(key);
|
|
108
|
+
if (!obj) {
|
|
109
|
+
return new Response('asset not found', { status: 404 });
|
|
110
|
+
}
|
|
111
|
+
const contentType =
|
|
112
|
+
obj.httpMetadata?.contentType ?? guessContentType(rest);
|
|
113
|
+
return new Response(obj.body as unknown as ReadableStream, {
|
|
114
|
+
status: 200,
|
|
115
|
+
headers: {
|
|
116
|
+
'content-type': contentType,
|
|
117
|
+
'cache-control': ASSET_CACHE_CONTROL,
|
|
118
|
+
// ETag helps CDN re-validation behave on conditional GETs.
|
|
119
|
+
etag: obj.etag,
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// ── 2. Framework + user routes ────────────────────────────────
|
|
125
|
+
// Anything the base WorkersApp wants to handle goes through
|
|
126
|
+
// first: /api/:name, /socket, /_health, anything the user
|
|
127
|
+
// registered. If it returns a non-404, that's our response.
|
|
128
|
+
const baseRes = await base.fetch(request, env, ctx);
|
|
129
|
+
if (baseRes.status !== 404) {
|
|
130
|
+
return baseRes;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// ── 3. SPA fallback ───────────────────────────────────────────
|
|
134
|
+
// GET / and any other GET the framework didn't handle gets the
|
|
135
|
+
// index document. Client-side routing takes it from here.
|
|
136
|
+
// POST/PUT/DELETE on unrecognized paths get the base's 404.
|
|
137
|
+
if (method === 'GET' || method === 'HEAD') {
|
|
138
|
+
return htmlResponse(indexHtml);
|
|
139
|
+
}
|
|
140
|
+
return baseRes;
|
|
141
|
+
},
|
|
142
|
+
|
|
143
|
+
async scheduled(event, env, ctx): Promise<void> {
|
|
144
|
+
return base.scheduled(event, env, ctx);
|
|
145
|
+
},
|
|
146
|
+
|
|
147
|
+
async queue(batch, env, ctx): Promise<void> {
|
|
148
|
+
return base.queue(batch, env, ctx);
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|