@tschk/moonshine-deploy-bun 0.4.1 → 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/package.json +13 -7
- package/src/index.ts +22 -28
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tschk/moonshine-deploy-bun",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.4",
|
|
4
4
|
"license": "ISC",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/index.ts",
|
|
@@ -15,17 +15,23 @@
|
|
|
15
15
|
"test": "bun test"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@tschk/moonshine-
|
|
19
|
-
"@tschk/moonshine-
|
|
20
|
-
"@tschk/moonshine-react": "^0.4.1",
|
|
21
|
-
"@tschk/moonshine-server": "^0.4.1"
|
|
18
|
+
"@tschk/moonshine-framework": "^0.4.4",
|
|
19
|
+
"@tschk/moonshine-server": "^0.4.4"
|
|
22
20
|
},
|
|
23
21
|
"devDependencies": {
|
|
24
22
|
"@types/bun": "1.3.14",
|
|
25
23
|
"typescript": "7.0.2",
|
|
26
|
-
"@tschk/moonshine-adapter-conformance": "^0.4.
|
|
24
|
+
"@tschk/moonshine-adapter-conformance": "^0.4.4"
|
|
27
25
|
},
|
|
28
26
|
"files": [
|
|
29
27
|
"src"
|
|
30
|
-
]
|
|
28
|
+
],
|
|
29
|
+
"peerDependencies": {
|
|
30
|
+
"@tschk/moonshine-react": "^0.4.4"
|
|
31
|
+
},
|
|
32
|
+
"peerDependenciesMeta": {
|
|
33
|
+
"@tschk/moonshine-react": {
|
|
34
|
+
"optional": true
|
|
35
|
+
}
|
|
36
|
+
}
|
|
31
37
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
3
|
import {
|
|
4
4
|
type DeploymentAdapter,
|
|
5
5
|
type MoonshineManifest,
|
|
6
6
|
type Harness,
|
|
7
7
|
type HarnessFactory,
|
|
8
|
+
copyAsset,
|
|
9
|
+
validateRuntime,
|
|
8
10
|
} from "@tschk/moonshine-framework";
|
|
9
11
|
import { tryServeStatic } from "@tschk/moonshine-server";
|
|
10
12
|
|
|
@@ -29,7 +31,12 @@ export function createBunServer(options: BunServerOptions): BunServer {
|
|
|
29
31
|
(request.method === "GET" || request.method === "HEAD") &&
|
|
30
32
|
pathname !== "/"
|
|
31
33
|
) {
|
|
32
|
-
const res = await tryServeStatic(
|
|
34
|
+
const res = await tryServeStatic(
|
|
35
|
+
options.staticDir,
|
|
36
|
+
pathname,
|
|
37
|
+
undefined,
|
|
38
|
+
request.method,
|
|
39
|
+
);
|
|
33
40
|
if (res) return res;
|
|
34
41
|
}
|
|
35
42
|
return options.fetch(request);
|
|
@@ -56,29 +63,12 @@ export const bunHarness: HarnessFactory = (fetch, options) => {
|
|
|
56
63
|
} as Harness;
|
|
57
64
|
};
|
|
58
65
|
|
|
59
|
-
async function copyAsset(
|
|
60
|
-
asset: MoonshineManifest["assets"][number],
|
|
61
|
-
outDir: string,
|
|
62
|
-
): Promise<string> {
|
|
63
|
-
const source = isAbsolute(asset.file)
|
|
64
|
-
? asset.file
|
|
65
|
-
: resolve(outDir, asset.file);
|
|
66
|
-
const target = resolve(
|
|
67
|
-
outDir,
|
|
68
|
-
(asset.path ?? asset.file).replace(/^\/+/, ""),
|
|
69
|
-
);
|
|
70
|
-
await mkdir(dirname(target), { recursive: true });
|
|
71
|
-
if (source !== target) {
|
|
72
|
-
await copyFile(source, target);
|
|
73
|
-
}
|
|
74
|
-
return (asset.path ?? asset.file).replace(/^\/+/, "");
|
|
75
|
-
}
|
|
76
|
-
|
|
77
66
|
export const bunAdapter: DeploymentAdapter = {
|
|
78
67
|
name: "bun",
|
|
79
68
|
runtimes: ["bun"],
|
|
80
69
|
capabilities: ["streaming", "islands", "revalidation"],
|
|
81
70
|
build: async (manifest, outDir) => {
|
|
71
|
+
validateRuntime(bunAdapter, manifest);
|
|
82
72
|
await mkdir(outDir, { recursive: true });
|
|
83
73
|
const assets: MoonshineManifest["assets"] = await Promise.all(
|
|
84
74
|
manifest.assets.map(async (asset) => {
|
|
@@ -91,12 +81,16 @@ export const bunAdapter: DeploymentAdapter = {
|
|
|
91
81
|
resolve(outDir, "manifest.json"),
|
|
92
82
|
JSON.stringify(builtManifest, null, 2) + "\n",
|
|
93
83
|
);
|
|
84
|
+
const native = manifest.renderer === "native";
|
|
85
|
+
const rendererImport = native
|
|
86
|
+
? 'import { modules, renderer } from "./dist/server.js";'
|
|
87
|
+
: 'import { modules } from "./dist/server.js";\nimport { reactRenderer as renderer } from "@tschk/moonshine-react";';
|
|
94
88
|
const entry = `import { createRequestHandler } from "@tschk/moonshine-server";
|
|
95
|
-
import { reactRenderer } from "@tschk/moonshine-react";
|
|
96
89
|
import { createBunServer } from "@tschk/moonshine-deploy-bun";
|
|
97
90
|
import { resolve } from "node:path";
|
|
98
91
|
import manifest from "./manifest.json" with { type: "json" };
|
|
99
|
-
|
|
92
|
+
${rendererImport}
|
|
93
|
+
${manifest.requestContext ? 'import { requestScope } from "./dist/server.js";' : ""}
|
|
100
94
|
|
|
101
95
|
const projectDir = resolve(import.meta.dir, "..");
|
|
102
96
|
const abs = (p) => (p ? resolve(projectDir, p) : undefined);
|
|
@@ -113,15 +107,15 @@ const resolvedManifest = {
|
|
|
113
107
|
};
|
|
114
108
|
|
|
115
109
|
const fetch = createRequestHandler({
|
|
116
|
-
manifest: resolvedManifest,
|
|
110
|
+
manifest: ${native ? "manifest" : "resolvedManifest"},
|
|
117
111
|
modules,
|
|
118
|
-
renderer:
|
|
112
|
+
renderer,${manifest.requestContext ? "\n requestScope," : ""}
|
|
119
113
|
staticDir: import.meta.dir + "/public",
|
|
120
114
|
});
|
|
121
|
-
const
|
|
115
|
+
const envPort = Number(process.env.PORT);
|
|
116
|
+
export const server = createBunServer({
|
|
122
117
|
fetch,
|
|
123
|
-
port: Number(
|
|
124
|
-
staticDir: import.meta.dir + "/public",
|
|
118
|
+
port: Number.isInteger(envPort) && envPort >= 0 && envPort <= 65535 ? envPort : 0,
|
|
125
119
|
});
|
|
126
120
|
`;
|
|
127
121
|
await writeFile(resolve(outDir, "server.ts"), entry);
|