@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.
Files changed (73) hide show
  1. package/dist/bundler.d.ts +13 -0
  2. package/dist/bundler.d.ts.map +1 -0
  3. package/dist/bundler.js +101 -0
  4. package/dist/bundler.js.map +1 -0
  5. package/dist/core.d.ts +11 -0
  6. package/dist/core.d.ts.map +1 -0
  7. package/dist/core.js +330 -0
  8. package/dist/core.js.map +1 -0
  9. package/dist/factory/detectors.d.ts +13 -0
  10. package/dist/factory/detectors.d.ts.map +1 -0
  11. package/dist/factory/detectors.js +46 -0
  12. package/dist/factory/detectors.js.map +1 -0
  13. package/dist/factory/hooks.d.ts +29 -0
  14. package/dist/factory/hooks.d.ts.map +1 -0
  15. package/dist/factory/hooks.js +158 -0
  16. package/dist/factory/hooks.js.map +1 -0
  17. package/dist/factory/index.d.ts +24 -0
  18. package/dist/factory/index.d.ts.map +1 -0
  19. package/dist/factory/index.js +47 -0
  20. package/dist/factory/index.js.map +1 -0
  21. package/dist/factory/presets.d.ts +27 -0
  22. package/dist/factory/presets.d.ts.map +1 -0
  23. package/dist/factory/presets.js +186 -0
  24. package/dist/factory/presets.js.map +1 -0
  25. package/dist/factory.d.ts +183 -0
  26. package/dist/factory.d.ts.map +1 -0
  27. package/dist/factory.js +482 -0
  28. package/dist/factory.js.map +1 -0
  29. package/dist/helpers.d.ts +53 -0
  30. package/dist/helpers.d.ts.map +1 -0
  31. package/dist/helpers.js +177 -0
  32. package/dist/helpers.js.map +1 -0
  33. package/dist/index.d.ts +16 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +12 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/route/index.d.ts +7 -0
  38. package/dist/route/index.d.ts.map +1 -0
  39. package/dist/route/index.js +6 -0
  40. package/dist/route/index.js.map +1 -0
  41. package/dist/route/parser.d.ts +18 -0
  42. package/dist/route/parser.d.ts.map +1 -0
  43. package/dist/route/parser.js +187 -0
  44. package/dist/route/parser.js.map +1 -0
  45. package/dist/route/regex.d.ts +31 -0
  46. package/dist/route/regex.d.ts.map +1 -0
  47. package/dist/route/regex.js +140 -0
  48. package/dist/route/regex.js.map +1 -0
  49. package/dist/route/regex.test.d.ts +7 -0
  50. package/dist/route/regex.test.d.ts.map +1 -0
  51. package/dist/route/regex.test.js +662 -0
  52. package/dist/route/regex.test.js.map +1 -0
  53. package/dist/route/types.d.ts +58 -0
  54. package/dist/route/types.d.ts.map +1 -0
  55. package/dist/route/types.js +5 -0
  56. package/dist/route/types.js.map +1 -0
  57. package/dist/route-parser.d.ts +8 -0
  58. package/dist/route-parser.d.ts.map +1 -0
  59. package/dist/route-parser.js +8 -0
  60. package/dist/route-parser.js.map +1 -0
  61. package/dist/types.d.ts +160 -0
  62. package/dist/types.d.ts.map +1 -0
  63. package/dist/types.js +5 -0
  64. package/dist/types.js.map +1 -0
  65. package/dist/utils.d.ts +40 -0
  66. package/dist/utils.d.ts.map +1 -0
  67. package/dist/utils.js +242 -0
  68. package/dist/utils.js.map +1 -0
  69. package/dist/vite-config-parser.d.ts +62 -0
  70. package/dist/vite-config-parser.d.ts.map +1 -0
  71. package/dist/vite-config-parser.js +229 -0
  72. package/dist/vite-config-parser.js.map +1 -0
  73. 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