@hyperspan/framework 2.0.0-alpha.3 → 2.0.0-alpha.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/package.json +2 -2
- package/src/adapter.test.ts +23 -0
- package/src/index.ts +9 -1
- package/src/server.ts +3 -1
- package/src/types.ts +50 -6
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hyperspan/framework",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.5",
|
|
4
4
|
"description": "Hyperspan Web Framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/server.ts",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"vitest": "^3.2.4"
|
|
101
101
|
},
|
|
102
102
|
"dependencies": {
|
|
103
|
-
"@hyperspan/html": "^2.0.0-alpha.
|
|
103
|
+
"@hyperspan/html": "^2.0.0-alpha.4",
|
|
104
104
|
"debug": "^4.4.3",
|
|
105
105
|
"isbot": "^5.1.32",
|
|
106
106
|
"zod": "^4.4.3"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { describe, expect, test } from 'bun:test';
|
|
2
|
+
import type { Adapter } from './types';
|
|
3
|
+
import { createConfig } from './server';
|
|
4
|
+
|
|
5
|
+
const cloudflare: Adapter = {
|
|
6
|
+
name: 'cloudflare',
|
|
7
|
+
createEntry() {
|
|
8
|
+
return {
|
|
9
|
+
fetch: async () => new Response('ok'),
|
|
10
|
+
};
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
describe('createConfig deployAdapter', () => {
|
|
15
|
+
test('defaults to Node when omitted or undefined', () => {
|
|
16
|
+
expect(createConfig({}).deployAdapter.name).toBe('node');
|
|
17
|
+
expect(createConfig({ deployAdapter: undefined }).deployAdapter.name).toBe('node');
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test('keeps an explicit adapter', () => {
|
|
21
|
+
expect(createConfig({ deployAdapter: cloudflare }).deployAdapter).toBe(cloudflare);
|
|
22
|
+
});
|
|
23
|
+
});
|
package/src/index.ts
CHANGED
|
@@ -25,4 +25,12 @@ export type { RouteModuleEntry } from './register-routes';
|
|
|
25
25
|
export type { AssetManifest } from './client/manifest';
|
|
26
26
|
export { renderIsland } from './island';
|
|
27
27
|
export type { IslandRenderOptions } from './island';
|
|
28
|
-
export type {
|
|
28
|
+
export type {
|
|
29
|
+
Hyperspan,
|
|
30
|
+
ServerCreateContext,
|
|
31
|
+
DeployAdapter,
|
|
32
|
+
Adapter,
|
|
33
|
+
AdapterAfterBuildContext,
|
|
34
|
+
DeployEntry,
|
|
35
|
+
DeployEntryContext,
|
|
36
|
+
} from './types';
|
package/src/server.ts
CHANGED
|
@@ -12,6 +12,7 @@ import { isbot } from 'isbot';
|
|
|
12
12
|
import { executeMiddleware } from './middleware';
|
|
13
13
|
import { buildUrl, parsePath, removeUndefined } from './utils';
|
|
14
14
|
import { Cookies } from './cookies';
|
|
15
|
+
import { nodeAdapter } from '@hyperspan/adapter-node';
|
|
15
16
|
|
|
16
17
|
import type { Hyperspan as HS } from './types';
|
|
17
18
|
|
|
@@ -51,7 +52,7 @@ export function createConfig(config: Partial<HS.Config> = {}): HS.Config {
|
|
|
51
52
|
appDir: './app',
|
|
52
53
|
publicDir: './public',
|
|
53
54
|
plugins: [],
|
|
54
|
-
|
|
55
|
+
deployAdapter: config.deployAdapter ?? nodeAdapter(),
|
|
55
56
|
responseOptions: {
|
|
56
57
|
disableStreaming: hyperspanDisableStreaming,
|
|
57
58
|
},
|
|
@@ -59,6 +60,7 @@ export function createConfig(config: Partial<HS.Config> = {}): HS.Config {
|
|
|
59
60
|
return {
|
|
60
61
|
...defaultConfig,
|
|
61
62
|
...config,
|
|
63
|
+
deployAdapter: config.deployAdapter ?? defaultConfig.deployAdapter,
|
|
62
64
|
responseOptions: {
|
|
63
65
|
...defaultConfig.responseOptions,
|
|
64
66
|
...config.responseOptions,
|
package/src/types.ts
CHANGED
|
@@ -63,7 +63,38 @@ export namespace Hyperspan {
|
|
|
63
63
|
disableStreaming?: DisableStreamingFn;
|
|
64
64
|
};
|
|
65
65
|
|
|
66
|
-
export type
|
|
66
|
+
export type AdapterAfterBuildContext = {
|
|
67
|
+
root: string;
|
|
68
|
+
appDir: string;
|
|
69
|
+
outDir: string;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export type DeployEntryContext = {
|
|
73
|
+
createHyperspanServer: () => Promise<Server>;
|
|
74
|
+
config: Config;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export type DeployEntry = {
|
|
78
|
+
start?(options?: { port?: number }): unknown | Promise<unknown>;
|
|
79
|
+
fetch?(request: Request, env?: unknown, ctx?: unknown): Response | Promise<Response>;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export type Adapter = {
|
|
83
|
+
/** Diagnostic name, e.g. `node`, `cloudflare`. */
|
|
84
|
+
name: string;
|
|
85
|
+
/**
|
|
86
|
+
* Native ESM specifier exporting `resolveDevEnv(root)`.
|
|
87
|
+
* Imported by the Vite plugin so platform SDKs like wrangler load correctly.
|
|
88
|
+
*/
|
|
89
|
+
devModule?: string;
|
|
90
|
+
resolveDevEnv?(root: string): Promise<unknown>;
|
|
91
|
+
/** Platform entry (`start` and/or `fetch`). Called from generated `dist/server.ts`. */
|
|
92
|
+
createEntry(ctx: DeployEntryContext): DeployEntry;
|
|
93
|
+
afterBuild?(ctx: AdapterAfterBuildContext): void | Promise<void>;
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
/** Runtime adapter object (`nodeAdapter()`, `cloudflareAdapter()`, …). */
|
|
97
|
+
export type DeployAdapter = Adapter;
|
|
67
98
|
|
|
68
99
|
export type ServerCreateContext = {
|
|
69
100
|
env: unknown;
|
|
@@ -72,10 +103,19 @@ export namespace Hyperspan {
|
|
|
72
103
|
export type Config = {
|
|
73
104
|
appDir: string;
|
|
74
105
|
publicDir: string;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
106
|
+
/** Island plugins (`preactPlugin()`, `sveltePlugin()`, …). */
|
|
107
|
+
plugins: Array<Hyperspan.Plugin>;
|
|
108
|
+
/**
|
|
109
|
+
* Deployment adapter. Pass `cloudflareAdapter()` or `bunAdapter()`.
|
|
110
|
+
* Omit (or pass `nodeAdapter()`) to deploy to Node.
|
|
111
|
+
*/
|
|
112
|
+
deployAdapter: Adapter;
|
|
113
|
+
/**
|
|
114
|
+
* Called before the server is created, with platform bindings.
|
|
115
|
+
* - Vite/`hyperspan dev`: adapter `devModule` `resolveDevEnv(root)` when present; else `process.env`
|
|
116
|
+
* - Node/Bun production entry: `process.env`
|
|
117
|
+
* - Cloudflare Workers entry: Worker `env` bindings
|
|
118
|
+
*/
|
|
79
119
|
beforeServerCreate?: (ctx: ServerCreateContext) => void | Promise<void>;
|
|
80
120
|
// For customizing the routes and adding your own...
|
|
81
121
|
beforeRoutesAdded?: (server: Hyperspan.Server) => void;
|
|
@@ -397,8 +437,12 @@ export namespace Hyperspan {
|
|
|
397
437
|
}
|
|
398
438
|
}
|
|
399
439
|
|
|
400
|
-
export type
|
|
440
|
+
export type DeployAdapter = Hyperspan.DeployAdapter;
|
|
401
441
|
export type ServerCreateContext = Hyperspan.ServerCreateContext;
|
|
442
|
+
export type Adapter = Hyperspan.Adapter;
|
|
443
|
+
export type AdapterAfterBuildContext = Hyperspan.AdapterAfterBuildContext;
|
|
444
|
+
export type DeployEntry = Hyperspan.DeployEntry;
|
|
445
|
+
export type DeployEntryContext = Hyperspan.DeployEntryContext;
|
|
402
446
|
|
|
403
447
|
declare global {
|
|
404
448
|
interface DocumentEventMap {
|