@edgeone/vite-core 1.0.0
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/bundler.d.ts +13 -0
- package/dist/bundler.d.ts.map +1 -0
- package/dist/bundler.js +101 -0
- package/dist/bundler.js.map +1 -0
- package/dist/core.d.ts +11 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +330 -0
- package/dist/core.js.map +1 -0
- package/dist/factory/detectors.d.ts +13 -0
- package/dist/factory/detectors.d.ts.map +1 -0
- package/dist/factory/detectors.js +46 -0
- package/dist/factory/detectors.js.map +1 -0
- package/dist/factory/hooks.d.ts +29 -0
- package/dist/factory/hooks.d.ts.map +1 -0
- package/dist/factory/hooks.js +158 -0
- package/dist/factory/hooks.js.map +1 -0
- package/dist/factory/index.d.ts +24 -0
- package/dist/factory/index.d.ts.map +1 -0
- package/dist/factory/index.js +47 -0
- package/dist/factory/index.js.map +1 -0
- package/dist/factory/presets.d.ts +27 -0
- package/dist/factory/presets.d.ts.map +1 -0
- package/dist/factory/presets.js +186 -0
- package/dist/factory/presets.js.map +1 -0
- package/dist/factory.d.ts +183 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +482 -0
- package/dist/factory.js.map +1 -0
- package/dist/helpers.d.ts +53 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +177 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/route/index.d.ts +7 -0
- package/dist/route/index.d.ts.map +1 -0
- package/dist/route/index.js +6 -0
- package/dist/route/index.js.map +1 -0
- package/dist/route/parser.d.ts +18 -0
- package/dist/route/parser.d.ts.map +1 -0
- package/dist/route/parser.js +187 -0
- package/dist/route/parser.js.map +1 -0
- package/dist/route/regex.d.ts +31 -0
- package/dist/route/regex.d.ts.map +1 -0
- package/dist/route/regex.js +140 -0
- package/dist/route/regex.js.map +1 -0
- package/dist/route/regex.test.d.ts +7 -0
- package/dist/route/regex.test.d.ts.map +1 -0
- package/dist/route/regex.test.js +662 -0
- package/dist/route/regex.test.js.map +1 -0
- package/dist/route/types.d.ts +58 -0
- package/dist/route/types.d.ts.map +1 -0
- package/dist/route/types.js +5 -0
- package/dist/route/types.js.map +1 -0
- package/dist/route-parser.d.ts +8 -0
- package/dist/route-parser.d.ts.map +1 -0
- package/dist/route-parser.js +8 -0
- package/dist/route-parser.js.map +1 -0
- package/dist/types.d.ts +160 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +40 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +242 -0
- package/dist/utils.js.map +1 -0
- package/dist/vite-config-parser.d.ts +62 -0
- package/dist/vite-config-parser.d.ts.map +1 -0
- package/dist/vite-config-parser.js +229 -0
- package/dist/vite-config-parser.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook Creation Functions - Internal functions for creating adapter hooks
|
|
3
|
+
*/
|
|
4
|
+
import path from "path";
|
|
5
|
+
import { pathExists, detectConfigFile, detectBuildDir, detectServerEntry, generateServerWrapperCode, createDefaultMeta, logBuildArtifacts, } from "../utils.js";
|
|
6
|
+
import { ViteConfigParser } from "../vite-config-parser.js";
|
|
7
|
+
import { parseRoutesFromSources, convertRoutesToMetaFormat } from "../route/index.js";
|
|
8
|
+
import { resolvePreset } from "./presets.js";
|
|
9
|
+
export function createDefaultDetector(configFiles) {
|
|
10
|
+
return async (context) => {
|
|
11
|
+
return (await detectConfigFile(context.projectRoot, configFiles)) !== null;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function createDefaultBuildArtifactsGetter(name, buildDirs, serverEntryFiles, options) {
|
|
15
|
+
const { clientBuildDir, serverBuildDir, serverEntry } = options;
|
|
16
|
+
return async (context) => {
|
|
17
|
+
const { projectRoot, isSSR, logger, viteConfig } = context;
|
|
18
|
+
let clientDir = null;
|
|
19
|
+
let serverDir = null;
|
|
20
|
+
let serverEntryPath = null;
|
|
21
|
+
const configParser = viteConfig
|
|
22
|
+
? new ViteConfigParser(viteConfig, projectRoot, { logger, serverEntryCandidates: serverEntryFiles })
|
|
23
|
+
: null;
|
|
24
|
+
if (clientBuildDir) {
|
|
25
|
+
clientDir = path.join(projectRoot, clientBuildDir);
|
|
26
|
+
}
|
|
27
|
+
else if (configParser) {
|
|
28
|
+
const configInfo = await configParser.parse();
|
|
29
|
+
if (isSSR) {
|
|
30
|
+
const clientInOutDir = path.join(configInfo.absoluteOutDir, "client");
|
|
31
|
+
if (await pathExists(clientInOutDir)) {
|
|
32
|
+
clientDir = clientInOutDir;
|
|
33
|
+
logger.verbose(`Found client directory from Vite config: ${clientDir}`);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
clientDir = await detectBuildDir(projectRoot, buildDirs.client);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
if (await pathExists(configInfo.absoluteOutDir)) {
|
|
41
|
+
clientDir = configInfo.absoluteOutDir;
|
|
42
|
+
logger.verbose(`Found client directory (SPA) from Vite config: ${clientDir}`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
clientDir = await detectBuildDir(projectRoot, buildDirs.client);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
clientDir = await detectBuildDir(projectRoot, buildDirs.client);
|
|
51
|
+
}
|
|
52
|
+
if (isSSR && buildDirs.server) {
|
|
53
|
+
if (configParser) {
|
|
54
|
+
if (serverBuildDir) {
|
|
55
|
+
serverDir = path.join(projectRoot, serverBuildDir);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
serverDir = configParser.getServerDir();
|
|
59
|
+
}
|
|
60
|
+
if (!serverDir) {
|
|
61
|
+
serverDir = await detectBuildDir(projectRoot, buildDirs.server);
|
|
62
|
+
}
|
|
63
|
+
if (serverEntry) {
|
|
64
|
+
serverEntryPath = path.join(projectRoot, serverEntry);
|
|
65
|
+
}
|
|
66
|
+
else if (serverDir) {
|
|
67
|
+
serverEntryPath = await configParser.findServerEntry(serverDir);
|
|
68
|
+
if (serverEntryPath) {
|
|
69
|
+
logger.verbose(`Using server entry from Vite config: ${serverEntryPath}`);
|
|
70
|
+
}
|
|
71
|
+
if (!serverEntryPath) {
|
|
72
|
+
serverEntryPath = await detectServerEntry(serverDir, serverEntryFiles, { recursive: true, logger });
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
if (serverBuildDir) {
|
|
78
|
+
serverDir = path.join(projectRoot, serverBuildDir);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
serverDir = await detectBuildDir(projectRoot, buildDirs.server);
|
|
82
|
+
}
|
|
83
|
+
if (serverEntry) {
|
|
84
|
+
serverEntryPath = path.join(projectRoot, serverEntry);
|
|
85
|
+
}
|
|
86
|
+
else if (serverDir) {
|
|
87
|
+
serverEntryPath = await detectServerEntry(serverDir, serverEntryFiles, { recursive: true, logger });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
logBuildArtifacts(logger, name, { clientDir, serverDir, serverEntry: serverEntryPath });
|
|
92
|
+
return { clientDir, serverDir, serverEntry: serverEntryPath, assetsDir: clientDir };
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
export function createGenerateRoutesHook(effectiveRouteConfig, fallbackRoutes) {
|
|
96
|
+
return async (context) => {
|
|
97
|
+
const { projectRoot, isSSR, logger } = context;
|
|
98
|
+
if (effectiveRouteConfig.sources && effectiveRouteConfig.sources.length > 0) {
|
|
99
|
+
let parsedRoutes = await parseRoutesFromSources(projectRoot, effectiveRouteConfig.sources, { isSSR, logger });
|
|
100
|
+
if (parsedRoutes.length > 0) {
|
|
101
|
+
if (effectiveRouteConfig.transform) {
|
|
102
|
+
parsedRoutes = effectiveRouteConfig.transform(parsedRoutes, context);
|
|
103
|
+
}
|
|
104
|
+
if (isSSR && effectiveRouteConfig.ssrExtraRoutes) {
|
|
105
|
+
effectiveRouteConfig.ssrExtraRoutes.forEach((route) => {
|
|
106
|
+
parsedRoutes.push({ path: route, isStatic: false, srcRoute: route });
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
return parsedRoutes;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const routeList = fallbackRoutes.map((route) => ({ path: route, isStatic: !isSSR, srcRoute: route }));
|
|
113
|
+
if (isSSR && effectiveRouteConfig.ssrExtraRoutes) {
|
|
114
|
+
effectiveRouteConfig.ssrExtraRoutes.forEach((route) => {
|
|
115
|
+
routeList.push({ path: route, isStatic: false, srcRoute: route });
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return routeList;
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
export function createGenerateMetaHook(ssr404) {
|
|
122
|
+
return async (context, routeList) => {
|
|
123
|
+
const metaRoutes = convertRoutesToMetaFormat(routeList);
|
|
124
|
+
const meta = createDefaultMeta(metaRoutes, { isSSR: context.isSSR });
|
|
125
|
+
if (ssr404 !== undefined) {
|
|
126
|
+
meta.conf.ssr404 = typeof ssr404 === "function" ? ssr404(context.isSSR) : ssr404;
|
|
127
|
+
}
|
|
128
|
+
return meta;
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
export function createGenerateServerWrapperHook(wrapperConfig) {
|
|
132
|
+
return async (_context, wrapperCfg) => {
|
|
133
|
+
const resolved = resolvePreset(wrapperConfig);
|
|
134
|
+
return generateServerWrapperCode({
|
|
135
|
+
serverEntryPath: wrapperCfg.serverEntryPath,
|
|
136
|
+
imports: resolved.imports,
|
|
137
|
+
handlerSetup: resolved.setup,
|
|
138
|
+
handlerCall: resolved.invoke,
|
|
139
|
+
});
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
export function createBeforeBundleHook(esbuildConfig) {
|
|
143
|
+
return async (context, bundleConfig) => {
|
|
144
|
+
const absWorkingDir = typeof esbuildConfig.absWorkingDir === "function"
|
|
145
|
+
? esbuildConfig.absWorkingDir(context)
|
|
146
|
+
: esbuildConfig.absWorkingDir;
|
|
147
|
+
return {
|
|
148
|
+
...bundleConfig,
|
|
149
|
+
external: esbuildConfig.external || bundleConfig.external,
|
|
150
|
+
esbuildOptions: {
|
|
151
|
+
...bundleConfig.esbuildOptions,
|
|
152
|
+
...esbuildConfig.options,
|
|
153
|
+
...(absWorkingDir ? { absWorkingDir } : {}),
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/factory/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter Factory - Simplifies framework adapter creation with declarative configuration
|
|
3
|
+
*/
|
|
4
|
+
import type { FrameworkAdapter, ServerWrapperPreset } from "../types.js";
|
|
5
|
+
import { SERVER_WRAPPER_PRESETS } from "./presets.js";
|
|
6
|
+
import { type BuildDirConfig, type RouteSourceConfig, type AdapterFactoryOptions } from "./hooks.js";
|
|
7
|
+
export { SERVER_WRAPPER_PRESETS, createServerWrapperPreset, extendServerWrapperPresets, resolvePreset, createWebHandlerPreset, createSSRRenderPreset, createAutoDetectPreset, WEB_HANDLER_EXPORTS, SSR_RENDER_EXPORTS, type ExtendedPresetsResult, type PresetName, } from "./presets.js";
|
|
8
|
+
export { combineDetectors, createConfigDetector, createBuildDirDetector, createDependencyDetector, } from "./detectors.js";
|
|
9
|
+
export { type BuildDirConfig, type RouteSourceConfig, type AdapterFactoryOptions, } from "./hooks.js";
|
|
10
|
+
export type { EsbuildConfig, ServerWrapperPreset, HandlerMode } from "../types.js";
|
|
11
|
+
export interface AdapterFactoryConfig {
|
|
12
|
+
name: string;
|
|
13
|
+
configFiles: string[];
|
|
14
|
+
buildDirs: BuildDirConfig;
|
|
15
|
+
serverEntryFiles?: string[];
|
|
16
|
+
serverWrapper?: keyof typeof SERVER_WRAPPER_PRESETS | ServerWrapperPreset;
|
|
17
|
+
routeConfig?: RouteSourceConfig;
|
|
18
|
+
defaultRoutes?: string[];
|
|
19
|
+
ssrExtraRoutes?: string[];
|
|
20
|
+
ssr404?: boolean | ((isSSR: boolean) => boolean);
|
|
21
|
+
}
|
|
22
|
+
export declare function createFrameworkAdapter(config: AdapterFactoryConfig, options?: AdapterFactoryOptions, overrides?: Partial<FrameworkAdapter>): FrameworkAdapter;
|
|
23
|
+
export declare function createStatefulAdapter<TState extends object>(initialState: TState, factory: (state: TState) => FrameworkAdapter): FrameworkAdapter;
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/factory/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAiB,MAAM,cAAc,CAAC;AACrE,OAAO,EAOL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,GAChB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEnF,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,cAAc,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,OAAO,sBAAsB,GAAG,mBAAmB,CAAC;IAC1E,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;CAClD;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE,qBAA0B,EACnC,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACpC,gBAAgB,CAqDlB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,SAAS,MAAM,EACzD,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,gBAAgB,GAC3C,gBAAgB,CAElB"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter Factory - Simplifies framework adapter creation with declarative configuration
|
|
3
|
+
*/
|
|
4
|
+
import { SERVER_WRAPPER_PRESETS, resolvePreset } from "./presets.js";
|
|
5
|
+
import { createDefaultDetector, createDefaultBuildArtifactsGetter, createGenerateRoutesHook, createGenerateMetaHook, createGenerateServerWrapperHook, createBeforeBundleHook, } from "./hooks.js";
|
|
6
|
+
export { SERVER_WRAPPER_PRESETS, createServerWrapperPreset, extendServerWrapperPresets, resolvePreset, createWebHandlerPreset, createSSRRenderPreset, createAutoDetectPreset, WEB_HANDLER_EXPORTS, SSR_RENDER_EXPORTS, } from "./presets.js";
|
|
7
|
+
export { combineDetectors, createConfigDetector, createBuildDirDetector, createDependencyDetector, } from "./detectors.js";
|
|
8
|
+
export function createFrameworkAdapter(config, options = {}, overrides) {
|
|
9
|
+
const { name, configFiles, buildDirs, serverEntryFiles = ["index.js", "index.mjs", "entry.js", "main.js"], serverWrapper = "autoDetect", routeConfig, defaultRoutes = ["/"], ssrExtraRoutes = [], ssr404, } = config;
|
|
10
|
+
const { routes = routeConfig?.defaultRoutes || defaultRoutes } = options;
|
|
11
|
+
const effectiveRouteConfig = {
|
|
12
|
+
sources: routeConfig?.sources,
|
|
13
|
+
defaultRoutes: routeConfig?.defaultRoutes || defaultRoutes,
|
|
14
|
+
ssrExtraRoutes: routeConfig?.ssrExtraRoutes || ssrExtraRoutes,
|
|
15
|
+
transform: routeConfig?.transform,
|
|
16
|
+
};
|
|
17
|
+
// Resolve preset name to preset object
|
|
18
|
+
const wrapperConfig = typeof serverWrapper === "string"
|
|
19
|
+
? SERVER_WRAPPER_PRESETS[serverWrapper]
|
|
20
|
+
: serverWrapper;
|
|
21
|
+
// Resolve to normalized form for esbuildConfig check
|
|
22
|
+
const resolvedPreset = resolvePreset(wrapperConfig);
|
|
23
|
+
const baseAdapter = {
|
|
24
|
+
name,
|
|
25
|
+
detect: createDefaultDetector(configFiles),
|
|
26
|
+
getBuildArtifacts: createDefaultBuildArtifactsGetter(name, buildDirs, serverEntryFiles, options),
|
|
27
|
+
hooks: {
|
|
28
|
+
generateRoutes: createGenerateRoutesHook(effectiveRouteConfig, routes),
|
|
29
|
+
generateMeta: createGenerateMetaHook(ssr404),
|
|
30
|
+
generateServerWrapper: createGenerateServerWrapperHook(wrapperConfig),
|
|
31
|
+
...(resolvedPreset.esbuildConfig ? { beforeBundle: createBeforeBundleHook(resolvedPreset.esbuildConfig) } : {}),
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
if (overrides) {
|
|
35
|
+
return {
|
|
36
|
+
...baseAdapter,
|
|
37
|
+
...overrides,
|
|
38
|
+
name: overrides.name || baseAdapter.name,
|
|
39
|
+
hooks: { ...baseAdapter.hooks, ...overrides.hooks },
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return baseAdapter;
|
|
43
|
+
}
|
|
44
|
+
export function createStatefulAdapter(initialState, factory) {
|
|
45
|
+
return factory({ ...initialState });
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/factory/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EACL,qBAAqB,EACrB,iCAAiC,EACjC,wBAAwB,EACxB,sBAAsB,EACtB,+BAA+B,EAC/B,sBAAsB,GAIvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,GAGnB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAuBxB,MAAM,UAAU,sBAAsB,CACpC,MAA4B,EAC5B,UAAiC,EAAE,EACnC,SAAqC;IAErC,MAAM,EACJ,IAAI,EACJ,WAAW,EACX,SAAS,EACT,gBAAgB,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,EACnE,aAAa,GAAG,YAAY,EAC5B,WAAW,EACX,aAAa,GAAG,CAAC,GAAG,CAAC,EACrB,cAAc,GAAG,EAAE,EACnB,MAAM,GACP,GAAG,MAAM,CAAC;IAEX,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,aAAa,IAAI,aAAa,EAAE,GAAG,OAAO,CAAC;IAEzE,MAAM,oBAAoB,GAAsB;QAC9C,OAAO,EAAE,WAAW,EAAE,OAAO;QAC7B,aAAa,EAAE,WAAW,EAAE,aAAa,IAAI,aAAa;QAC1D,cAAc,EAAE,WAAW,EAAE,cAAc,IAAI,cAAc;QAC7D,SAAS,EAAE,WAAW,EAAE,SAAS;KAClC,CAAC;IAEF,uCAAuC;IACvC,MAAM,aAAa,GACjB,OAAO,aAAa,KAAK,QAAQ;QAC/B,CAAC,CAAC,sBAAsB,CAAC,aAAa,CAAC;QACvC,CAAC,CAAC,aAAa,CAAC;IAEpB,qDAAqD;IACrD,MAAM,cAAc,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IAEpD,MAAM,WAAW,GAAqB;QACpC,IAAI;QACJ,MAAM,EAAE,qBAAqB,CAAC,WAAW,CAAC;QAC1C,iBAAiB,EAAE,iCAAiC,CAAC,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,CAAC;QAChG,KAAK,EAAE;YACL,cAAc,EAAE,wBAAwB,CAAC,oBAAoB,EAAE,MAAM,CAAC;YACtE,YAAY,EAAE,sBAAsB,CAAC,MAAM,CAAC;YAC5C,qBAAqB,EAAE,+BAA+B,CAAC,aAAa,CAAC;YACrE,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,sBAAsB,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChH;KACF,CAAC;IAEF,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;YACL,GAAG,WAAW;YACd,GAAG,SAAS;YACZ,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI;YACxC,KAAK,EAAE,EAAE,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,SAAS,CAAC,KAAK,EAAE;SACpD,CAAC;IACJ,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,YAAoB,EACpB,OAA4C;IAE5C,OAAO,OAAO,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ServerWrapperPreset, EsbuildConfig, HandlerMode } from "../types.js";
|
|
2
|
+
export type { ServerWrapperPreset, EsbuildConfig, HandlerMode };
|
|
3
|
+
export declare const WEB_HANDLER_EXPORTS: readonly ["default", "default.fetch", "handler", "fetch", "app.fetch", "server.fetch"];
|
|
4
|
+
export declare const SSR_RENDER_EXPORTS: readonly ["render", "ssr", "default"];
|
|
5
|
+
export declare function resolvePreset(preset: ServerWrapperPreset): {
|
|
6
|
+
imports: string;
|
|
7
|
+
setup: string;
|
|
8
|
+
invoke: string;
|
|
9
|
+
esbuildConfig?: EsbuildConfig;
|
|
10
|
+
};
|
|
11
|
+
export declare function createWebHandlerPreset(exportPaths?: string[]): ServerWrapperPreset;
|
|
12
|
+
export declare function createSSRRenderPreset(exportPaths?: string[]): ServerWrapperPreset;
|
|
13
|
+
export declare function createAutoDetectPreset(): ServerWrapperPreset;
|
|
14
|
+
export declare const SERVER_WRAPPER_PRESETS: {
|
|
15
|
+
readonly autoDetect: ServerWrapperPreset;
|
|
16
|
+
readonly webHandler: ServerWrapperPreset;
|
|
17
|
+
readonly ssrRender: ServerWrapperPreset;
|
|
18
|
+
};
|
|
19
|
+
export type PresetName = keyof typeof SERVER_WRAPPER_PRESETS;
|
|
20
|
+
export interface ExtendedPresetsResult<TCustom extends Record<string, ServerWrapperPreset>> {
|
|
21
|
+
presets: typeof SERVER_WRAPPER_PRESETS & TCustom;
|
|
22
|
+
resolvePreset: (preset: keyof (typeof SERVER_WRAPPER_PRESETS & TCustom) | ServerWrapperPreset) => ServerWrapperPreset;
|
|
23
|
+
getPresetNames: () => (keyof (typeof SERVER_WRAPPER_PRESETS & TCustom))[];
|
|
24
|
+
}
|
|
25
|
+
export declare function createServerWrapperPreset(config: ServerWrapperPreset): ServerWrapperPreset;
|
|
26
|
+
export declare function extendServerWrapperPresets<TCustom extends Record<string, ServerWrapperPreset>>(customPresets: TCustom): ExtendedPresetsResult<TCustom>;
|
|
27
|
+
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/factory/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,WAAW,EACZ,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;AAEhE,eAAO,MAAM,mBAAmB,wFAOtB,CAAC;AAEX,eAAO,MAAM,kBAAkB,uCAAwC,CAAC;AAmGxE,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAmCA;AAED,wBAAgB,sBAAsB,CACpC,WAAW,GAAE,MAAM,EAA6B,GAC/C,mBAAmB,CAErB;AAED,wBAAgB,qBAAqB,CACnC,WAAW,GAAE,MAAM,EAA4B,GAC9C,mBAAmB,CAErB;AAED,wBAAgB,sBAAsB,IAAI,mBAAmB,CAK5D;AAED,eAAO,MAAM,sBAAsB;;;;CAIzB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,sBAAsB,CAAC;AAE7D,MAAM,WAAW,qBAAqB,CACpC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAEnD,OAAO,EAAE,OAAO,sBAAsB,GAAG,OAAO,CAAC;IACjD,aAAa,EAAE,CACb,MAAM,EACF,MAAM,CAAC,OAAO,sBAAsB,GAAG,OAAO,CAAC,GAC/C,mBAAmB,KACpB,mBAAmB,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,sBAAsB,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;CAC3E;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,mBAAmB,GAC1B,mBAAmB,CAkBrB;AAED,wBAAgB,0BAA0B,CACxC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACnD,aAAa,EAAE,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAiCxD"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
export const WEB_HANDLER_EXPORTS = [
|
|
2
|
+
"default",
|
|
3
|
+
"default.fetch",
|
|
4
|
+
"handler",
|
|
5
|
+
"fetch",
|
|
6
|
+
"app.fetch",
|
|
7
|
+
"server.fetch",
|
|
8
|
+
];
|
|
9
|
+
export const SSR_RENDER_EXPORTS = ["render", "ssr", "default"];
|
|
10
|
+
const RESPONSE_PARSER_CODE = `
|
|
11
|
+
function __parseResponse(result) {
|
|
12
|
+
if (result instanceof Response) return result;
|
|
13
|
+
|
|
14
|
+
if (typeof result === 'string') {
|
|
15
|
+
const isFullHtml = result.trim().toLowerCase().startsWith('<!doctype') ||
|
|
16
|
+
result.trim().toLowerCase().startsWith('<html');
|
|
17
|
+
return new Response(result, {
|
|
18
|
+
status: 200,
|
|
19
|
+
headers: { 'Content-Type': isFullHtml ? 'text/html; charset=utf-8' : 'text/plain; charset=utf-8' }
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (result === null || result === undefined) {
|
|
24
|
+
return new Response('Not Found', {
|
|
25
|
+
status: 404,
|
|
26
|
+
headers: { 'Content-Type': 'text/plain; charset=utf-8' }
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return new Response(JSON.stringify(result), {
|
|
31
|
+
status: 200,
|
|
32
|
+
headers: { 'Content-Type': 'application/json; charset=utf-8' }
|
|
33
|
+
});
|
|
34
|
+
}`.trim();
|
|
35
|
+
function generateExportCheck(exportPath) {
|
|
36
|
+
if (exportPath === "default") {
|
|
37
|
+
return `if (typeof defaultExport === 'function') return defaultExport;`;
|
|
38
|
+
}
|
|
39
|
+
if (exportPath === "default.fetch") {
|
|
40
|
+
return `if (typeof defaultExport === 'object' && defaultExport !== null && typeof defaultExport.fetch === 'function') return defaultExport.fetch.bind(defaultExport);`;
|
|
41
|
+
}
|
|
42
|
+
if (exportPath.includes(".")) {
|
|
43
|
+
const [obj, method] = exportPath.split(".");
|
|
44
|
+
return `if (typeof serverExports.${obj} === 'object' && serverExports.${obj} !== null && typeof serverExports.${obj}.${method} === 'function') return serverExports.${obj}.${method}.bind(serverExports.${obj});`;
|
|
45
|
+
}
|
|
46
|
+
return `if (typeof serverExports.${exportPath} === 'function') return serverExports.${exportPath};`;
|
|
47
|
+
}
|
|
48
|
+
function generateHandlerDetection(exportPaths) {
|
|
49
|
+
const checks = exportPaths
|
|
50
|
+
.map((p) => ` ${generateExportCheck(p)}`)
|
|
51
|
+
.join("\n");
|
|
52
|
+
const expectedList = exportPaths.join(", ");
|
|
53
|
+
return `
|
|
54
|
+
const __getHandler = () => {
|
|
55
|
+
${checks}
|
|
56
|
+
throw new Error('No handler found. Expected exports: ${expectedList}');
|
|
57
|
+
};
|
|
58
|
+
const __handler = __getHandler();`.trim();
|
|
59
|
+
}
|
|
60
|
+
function generateInvokeCode(mode) {
|
|
61
|
+
if (mode === "web") {
|
|
62
|
+
return `
|
|
63
|
+
async function __handleRequest(request) {
|
|
64
|
+
const result = await __handler(request);
|
|
65
|
+
return __parseResponse(result);
|
|
66
|
+
}`.trim();
|
|
67
|
+
}
|
|
68
|
+
if (mode === "ssr") {
|
|
69
|
+
return `
|
|
70
|
+
async function __handleRequest(request) {
|
|
71
|
+
const url = new URL(request.url);
|
|
72
|
+
const fullUrl = url.pathname + url.search;
|
|
73
|
+
const result = await __handler(fullUrl, request);
|
|
74
|
+
return __parseResponse(result);
|
|
75
|
+
}`.trim();
|
|
76
|
+
}
|
|
77
|
+
return `
|
|
78
|
+
async function __handleRequest(request) {
|
|
79
|
+
const url = new URL(request.url);
|
|
80
|
+
const fullUrl = url.pathname + url.search;
|
|
81
|
+
let result;
|
|
82
|
+
|
|
83
|
+
try {
|
|
84
|
+
result = await __handler(request);
|
|
85
|
+
if (result === undefined) {
|
|
86
|
+
result = await __handler(fullUrl, request);
|
|
87
|
+
}
|
|
88
|
+
} catch (e) {
|
|
89
|
+
result = await __handler(fullUrl, request);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return __parseResponse(result);
|
|
93
|
+
}`.trim();
|
|
94
|
+
}
|
|
95
|
+
function normalizeExports(exports) {
|
|
96
|
+
if (!exports)
|
|
97
|
+
return [];
|
|
98
|
+
return Array.isArray(exports) ? exports : [exports];
|
|
99
|
+
}
|
|
100
|
+
export function resolvePreset(preset) {
|
|
101
|
+
if (preset.setup && preset.invoke) {
|
|
102
|
+
return {
|
|
103
|
+
imports: preset.imports ?? "",
|
|
104
|
+
setup: preset.setup.trim(),
|
|
105
|
+
invoke: preset.invoke,
|
|
106
|
+
esbuildConfig: preset.esbuildConfig,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
const exportPaths = normalizeExports(preset.exports);
|
|
110
|
+
const mode = preset.mode ?? "auto";
|
|
111
|
+
if (exportPaths.length === 0) {
|
|
112
|
+
throw new Error("ServerWrapperPreset must specify either 'exports' or 'setup'+'invoke'");
|
|
113
|
+
}
|
|
114
|
+
const handlerDetection = generateHandlerDetection(exportPaths);
|
|
115
|
+
const invokeCode = generateInvokeCode(mode);
|
|
116
|
+
const generatedSetup = `
|
|
117
|
+
${RESPONSE_PARSER_CODE}
|
|
118
|
+
|
|
119
|
+
${handlerDetection}
|
|
120
|
+
|
|
121
|
+
${invokeCode}`.trim();
|
|
122
|
+
return {
|
|
123
|
+
imports: preset.imports ?? "",
|
|
124
|
+
setup: generatedSetup,
|
|
125
|
+
invoke: "__handleRequest(webRequest)",
|
|
126
|
+
esbuildConfig: preset.esbuildConfig,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
export function createWebHandlerPreset(exportPaths = [...WEB_HANDLER_EXPORTS]) {
|
|
130
|
+
return { exports: exportPaths, mode: "web" };
|
|
131
|
+
}
|
|
132
|
+
export function createSSRRenderPreset(exportPaths = [...SSR_RENDER_EXPORTS]) {
|
|
133
|
+
return { exports: exportPaths, mode: "ssr" };
|
|
134
|
+
}
|
|
135
|
+
export function createAutoDetectPreset() {
|
|
136
|
+
return {
|
|
137
|
+
exports: ["default", "default.fetch", "handler", "fetch", "render", "ssr"],
|
|
138
|
+
mode: "auto",
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
export const SERVER_WRAPPER_PRESETS = {
|
|
142
|
+
autoDetect: createAutoDetectPreset(),
|
|
143
|
+
webHandler: createWebHandlerPreset(),
|
|
144
|
+
ssrRender: createSSRRenderPreset(),
|
|
145
|
+
};
|
|
146
|
+
export function createServerWrapperPreset(config) {
|
|
147
|
+
const hasDeclarative = config.exports !== undefined;
|
|
148
|
+
const hasCustomCode = config.setup && config.invoke;
|
|
149
|
+
if (!hasDeclarative && !hasCustomCode) {
|
|
150
|
+
throw new Error("ServerWrapperPreset must specify either 'exports' or 'setup'+'invoke'");
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
exports: config.exports,
|
|
154
|
+
mode: config.mode,
|
|
155
|
+
imports: config.imports,
|
|
156
|
+
setup: config.setup,
|
|
157
|
+
invoke: config.invoke,
|
|
158
|
+
esbuildConfig: config.esbuildConfig,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
export function extendServerWrapperPresets(customPresets) {
|
|
162
|
+
const normalizedCustomPresets = {};
|
|
163
|
+
for (const [key, preset] of Object.entries(customPresets)) {
|
|
164
|
+
normalizedCustomPresets[key] = createServerWrapperPreset(preset);
|
|
165
|
+
}
|
|
166
|
+
const extendedPresets = {
|
|
167
|
+
...SERVER_WRAPPER_PRESETS,
|
|
168
|
+
...normalizedCustomPresets,
|
|
169
|
+
};
|
|
170
|
+
function resolvePresetByName(preset) {
|
|
171
|
+
if (typeof preset === "string") {
|
|
172
|
+
const resolved = extendedPresets[preset];
|
|
173
|
+
if (!resolved) {
|
|
174
|
+
throw new Error(`Unknown preset: "${preset}". Available: ${Object.keys(extendedPresets).join(", ")}`);
|
|
175
|
+
}
|
|
176
|
+
return resolved;
|
|
177
|
+
}
|
|
178
|
+
return createServerWrapperPreset(preset);
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
presets: extendedPresets,
|
|
182
|
+
resolvePreset: resolvePresetByName,
|
|
183
|
+
getPresetNames: () => Object.keys(extendedPresets),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../../src/factory/presets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter Factory - Simplifies the creation of framework adapters
|
|
3
|
+
*
|
|
4
|
+
* Provides factory functions and preset configurations to reduce boilerplate code
|
|
5
|
+
*/
|
|
6
|
+
import type { BuildContext, RouteInfo, FrameworkAdapter } from "./types.js";
|
|
7
|
+
import { type RouteSource } from "./route-parser.js";
|
|
8
|
+
/**
|
|
9
|
+
* Server wrapper preset configuration
|
|
10
|
+
*/
|
|
11
|
+
export interface ServerWrapperPreset {
|
|
12
|
+
imports?: string;
|
|
13
|
+
handlerSetup: string;
|
|
14
|
+
handlerCall: string;
|
|
15
|
+
requiresHtmlTemplate?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Built-in server wrapper presets (generic, framework-agnostic)
|
|
19
|
+
*
|
|
20
|
+
* Note: All presets use `serverBuild` (namespace import) and `serverExports` (rest exports)
|
|
21
|
+
* which are automatically provided by generateServerWrapperCode()
|
|
22
|
+
*
|
|
23
|
+
* Framework-specific presets should be defined in their respective adapter packages.
|
|
24
|
+
*/
|
|
25
|
+
export declare const SERVER_WRAPPER_PRESETS: {
|
|
26
|
+
/** Generic handler - detects default or handler export */
|
|
27
|
+
readonly generic: {
|
|
28
|
+
readonly handlerSetup: string;
|
|
29
|
+
readonly handlerCall: "handler(webRequest, ...args)";
|
|
30
|
+
};
|
|
31
|
+
/** Hono style - supports app.fetch */
|
|
32
|
+
readonly hono: {
|
|
33
|
+
readonly handlerSetup: string;
|
|
34
|
+
readonly handlerCall: "serverHandler(webRequest, ...args)";
|
|
35
|
+
};
|
|
36
|
+
/** Vite SSR - standard Vite SSR with render function */
|
|
37
|
+
readonly viteSSR: {
|
|
38
|
+
readonly requiresHtmlTemplate: true;
|
|
39
|
+
readonly handlerSetup: string;
|
|
40
|
+
readonly handlerCall: "handleSSRRequest(webRequest)";
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Build directory configuration
|
|
45
|
+
*/
|
|
46
|
+
export interface BuildDirConfig {
|
|
47
|
+
client: string[];
|
|
48
|
+
server?: string[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Route source configuration for declarative route parsing
|
|
52
|
+
*/
|
|
53
|
+
export interface RouteSourceConfig {
|
|
54
|
+
/** Route sources to try in order */
|
|
55
|
+
sources?: RouteSource[];
|
|
56
|
+
/** Default routes if no sources match */
|
|
57
|
+
defaultRoutes?: string[];
|
|
58
|
+
/** Extra routes to add in SSR mode */
|
|
59
|
+
ssrExtraRoutes?: string[];
|
|
60
|
+
/** Transform function for parsed routes */
|
|
61
|
+
transform?: (routes: RouteInfo[], context: BuildContext) => RouteInfo[];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* esbuild configuration for server bundling
|
|
65
|
+
*/
|
|
66
|
+
export interface EsbuildConfig {
|
|
67
|
+
/** Working directory for esbuild */
|
|
68
|
+
absWorkingDir?: string | ((context: BuildContext) => string);
|
|
69
|
+
/** External modules */
|
|
70
|
+
external?: string[];
|
|
71
|
+
/** Additional esbuild options */
|
|
72
|
+
options?: Record<string, unknown>;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Adapter factory configuration
|
|
76
|
+
*/
|
|
77
|
+
export interface AdapterFactoryConfig {
|
|
78
|
+
name: string;
|
|
79
|
+
configFiles: string[];
|
|
80
|
+
buildDirs: BuildDirConfig;
|
|
81
|
+
serverEntryFiles?: string[];
|
|
82
|
+
serverWrapper?: keyof typeof SERVER_WRAPPER_PRESETS | ServerWrapperPreset;
|
|
83
|
+
/** Declarative route configuration */
|
|
84
|
+
routeConfig?: RouteSourceConfig;
|
|
85
|
+
/** Legacy: default routes (use routeConfig.defaultRoutes instead) */
|
|
86
|
+
defaultRoutes?: string[];
|
|
87
|
+
/** Legacy: SSR extra routes (use routeConfig.ssrExtraRoutes instead) */
|
|
88
|
+
ssrExtraRoutes?: string[];
|
|
89
|
+
ssr404?: boolean | ((isSSR: boolean) => boolean);
|
|
90
|
+
htmlTemplatePaths?: string[];
|
|
91
|
+
/** esbuild configuration */
|
|
92
|
+
esbuildConfig?: EsbuildConfig;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Adapter factory runtime options
|
|
96
|
+
*/
|
|
97
|
+
export interface AdapterFactoryOptions {
|
|
98
|
+
clientBuildDir?: string;
|
|
99
|
+
serverBuildDir?: string;
|
|
100
|
+
serverEntry?: string;
|
|
101
|
+
routes?: string[];
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Create a framework adapter
|
|
105
|
+
*/
|
|
106
|
+
export declare function createFrameworkAdapter(config: AdapterFactoryConfig, options?: AdapterFactoryOptions, overrides?: Partial<FrameworkAdapter>): FrameworkAdapter;
|
|
107
|
+
/**
|
|
108
|
+
* Create a stateful adapter (for complex adapters needing shared state)
|
|
109
|
+
*/
|
|
110
|
+
export declare function createStatefulAdapter<TState extends object>(initialState: TState, factory: (state: TState) => FrameworkAdapter): FrameworkAdapter;
|
|
111
|
+
/**
|
|
112
|
+
* Result of extending server wrapper presets
|
|
113
|
+
*/
|
|
114
|
+
export interface ExtendedPresetsResult<TCustom extends Record<string, ServerWrapperPreset>> {
|
|
115
|
+
/** Extended presets object (core + custom) */
|
|
116
|
+
presets: typeof SERVER_WRAPPER_PRESETS & TCustom;
|
|
117
|
+
/** Type-safe preset resolver function */
|
|
118
|
+
resolvePreset: (preset: keyof (typeof SERVER_WRAPPER_PRESETS & TCustom) | ServerWrapperPreset) => ServerWrapperPreset;
|
|
119
|
+
/** Get all available preset names */
|
|
120
|
+
getPresetNames: () => (keyof (typeof SERVER_WRAPPER_PRESETS & TCustom))[];
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Create a server wrapper preset
|
|
124
|
+
*
|
|
125
|
+
* Helper function to create a properly typed preset with validation and normalization.
|
|
126
|
+
* Automatically trims handlerSetup and validates required fields.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```ts
|
|
130
|
+
* const myPreset = createServerWrapperPreset({
|
|
131
|
+
* imports: `import { handler } from 'my-framework';`,
|
|
132
|
+
* handlerSetup: `const requestHandler = handler(serverExports);`,
|
|
133
|
+
* handlerCall: "requestHandler(webRequest)",
|
|
134
|
+
* });
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
export declare function createServerWrapperPreset(config: ServerWrapperPreset): ServerWrapperPreset;
|
|
138
|
+
/**
|
|
139
|
+
* Extend core server wrapper presets with custom presets
|
|
140
|
+
*
|
|
141
|
+
* This utility provides a standardized way for adapters to:
|
|
142
|
+
* 1. Add framework-specific presets while keeping core presets
|
|
143
|
+
* 2. Get a type-safe resolver function
|
|
144
|
+
* 3. Export extended presets for external use
|
|
145
|
+
*
|
|
146
|
+
* Custom presets are automatically validated and normalized using createServerWrapperPreset().
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```ts
|
|
150
|
+
* // In vite-adapter - can pass raw config, will be validated automatically
|
|
151
|
+
* const { presets, resolvePreset } = extendServerWrapperPresets({
|
|
152
|
+
* vike: {
|
|
153
|
+
* imports: `import { renderPage } from 'vike/server';`,
|
|
154
|
+
* handlerSetup: `...`,
|
|
155
|
+
* handlerCall: "handleVikeRequest(webRequest)",
|
|
156
|
+
* },
|
|
157
|
+
* });
|
|
158
|
+
*
|
|
159
|
+
* export const SERVER_WRAPPER_PRESETS = presets;
|
|
160
|
+
* export type ServerWrapperPresetName = keyof typeof presets;
|
|
161
|
+
*
|
|
162
|
+
* // Use in adapter
|
|
163
|
+
* const resolved = resolvePreset(options.serverWrapper || "viteSSR");
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
export declare function extendServerWrapperPresets<TCustom extends Record<string, ServerWrapperPreset>>(customPresets: TCustom): ExtendedPresetsResult<TCustom>;
|
|
167
|
+
/**
|
|
168
|
+
* Combine multiple detector functions (returns true if any matches)
|
|
169
|
+
*/
|
|
170
|
+
export declare function combineDetectors(...detectors: ((context: BuildContext) => Promise<boolean> | boolean)[]): (context: BuildContext) => Promise<boolean>;
|
|
171
|
+
/**
|
|
172
|
+
* Create detector based on config files
|
|
173
|
+
*/
|
|
174
|
+
export declare function createConfigDetector(configFiles: string[]): (context: BuildContext) => Promise<boolean>;
|
|
175
|
+
/**
|
|
176
|
+
* Create detector based on build directories
|
|
177
|
+
*/
|
|
178
|
+
export declare function createBuildDirDetector(buildDirs: string[]): (context: BuildContext) => Promise<boolean>;
|
|
179
|
+
/**
|
|
180
|
+
* Create detector based on package.json dependencies
|
|
181
|
+
*/
|
|
182
|
+
export declare function createDependencyDetector(dependencies: string[]): (context: BuildContext) => Promise<boolean>;
|
|
183
|
+
//# sourceMappingURL=factory.d.ts.map
|