@hyperspan/framework 2.0.0-alpha.4 → 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 +1 -1
- package/src/adapter.test.ts +23 -0
- package/src/index.ts +9 -1
- package/src/server.ts +3 -1
- package/src/types.ts +45 -6
package/package.json
CHANGED
|
@@ -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,12 +103,16 @@ export namespace Hyperspan {
|
|
|
72
103
|
export type Config = {
|
|
73
104
|
appDir: string;
|
|
74
105
|
publicDir: string;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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;
|
|
78
113
|
/**
|
|
79
114
|
* Called before the server is created, with platform bindings.
|
|
80
|
-
* - Vite/`hyperspan dev`: adapter
|
|
115
|
+
* - Vite/`hyperspan dev`: adapter `devModule` `resolveDevEnv(root)` when present; else `process.env`
|
|
81
116
|
* - Node/Bun production entry: `process.env`
|
|
82
117
|
* - Cloudflare Workers entry: Worker `env` bindings
|
|
83
118
|
*/
|
|
@@ -402,8 +437,12 @@ export namespace Hyperspan {
|
|
|
402
437
|
}
|
|
403
438
|
}
|
|
404
439
|
|
|
405
|
-
export type
|
|
440
|
+
export type DeployAdapter = Hyperspan.DeployAdapter;
|
|
406
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;
|
|
407
446
|
|
|
408
447
|
declare global {
|
|
409
448
|
interface DocumentEventMap {
|