@donkeylabs/adapter-sveltekit 2.0.14 → 2.0.16

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.
@@ -6,125 +6,60 @@
6
6
  * - Direct service calls during SSR (no HTTP overhead)
7
7
  * - Unified API client works in both SSR and browser
8
8
  */
9
-
10
- import type { Adapter, Builder } from "@sveltejs/kit";
11
9
  import { fileURLToPath } from "node:url";
12
10
  import { dirname, join, relative, resolve } from "node:path";
13
11
  import { writeFileSync, mkdirSync } from "node:fs";
14
-
15
12
  const __filename = fileURLToPath(import.meta.url);
16
13
  const __dirname = dirname(__filename);
17
-
18
- export interface AdapterOptions {
19
- /**
20
- * Output directory for the built app.
21
- * @default "build"
22
- */
23
- out?: string;
24
-
25
- /**
26
- * Path to your @donkeylabs/server entry file.
27
- * This file should export a configured AppServer instance.
28
- *
29
- * @default "./src/server/index.ts"
30
- */
31
- serverEntry?: string;
32
-
33
- /**
34
- * Whether to precompress static assets with gzip/brotli.
35
- * @default true
36
- */
37
- precompress?: boolean;
38
-
39
- /**
40
- * Environment variable prefix for PORT and HOST.
41
- * @default ""
42
- */
43
- envPrefix?: string;
44
-
45
- /**
46
- * Enable development mode features.
47
- * @default false
48
- */
49
- development?: boolean;
50
- }
51
-
52
- export default function adapter(options: AdapterOptions = {}): Adapter {
53
- const {
54
- out = "build",
55
- serverEntry = "./src/server/index.ts",
56
- precompress = true,
57
- envPrefix = "",
58
- development = false,
59
- } = options;
60
-
61
- return {
62
- name: "@donkeylabs/adapter-sveltekit",
63
-
64
- async adapt(builder: Builder) {
65
- const serverDir = join(out, "server");
66
- const clientDir = join(out, "client");
67
- const prerenderedDir = join(out, "prerendered");
68
-
69
- // 1. Clean and create output directories
70
- builder.rimraf(out);
71
- mkdirSync(serverDir, { recursive: true });
72
-
73
- builder.log.minor("Writing SvelteKit server files...");
74
-
75
- // 2. Write SvelteKit server files
76
- builder.writeServer(serverDir);
77
-
78
- // 3. Copy static assets and prerendered pages
79
- const clientFiles = builder.writeClient(clientDir);
80
- const prerenderedFiles = builder.writePrerendered(prerenderedDir);
81
-
82
- // 4. Generate the manifest
83
- const relativePath = relative(serverDir, ".");
84
- builder.generateManifest({ relativePath });
85
-
86
- // 5. Generate the unified runtime entry point
87
- const serverEntryResolved = resolve(serverEntry);
88
- const serverEntryRelative = relative(serverDir, serverEntryResolved);
89
-
90
- const entryCode = generateEntryPoint({
91
- serverEntryRelative,
92
- envPrefix,
93
- development,
94
- clientDir: relative(serverDir, clientDir),
95
- prerenderedDir: relative(serverDir, prerenderedDir),
96
- });
97
-
98
- writeFileSync(join(serverDir, "entry.js"), entryCode);
99
-
100
- // 6. Write runtime handler (inline the full implementation)
101
- writeFileSync(join(serverDir, "handler.js"), generateRuntimeHandler());
102
-
103
- // 7. Precompress if enabled
104
- if (precompress) {
105
- builder.log.minor("Compressing assets...");
106
- await builder.compress(clientDir);
107
- if (prerenderedFiles.length > 0) {
108
- await builder.compress(prerenderedDir);
109
- }
110
- }
111
-
112
- builder.log.success(`Adapter output written to ${out}`);
113
- builder.log.minor(`Run with: bun ${out}/server/entry.js`);
114
- },
115
- };
14
+ export default function adapter(options = {}) {
15
+ const { out = "build", serverEntry = "./src/server/index.ts", precompress = true, envPrefix = "", development = false, } = options;
16
+ return {
17
+ name: "@donkeylabs/adapter-sveltekit",
18
+ async adapt(builder) {
19
+ const serverDir = join(out, "server");
20
+ const clientDir = join(out, "client");
21
+ const prerenderedDir = join(out, "prerendered");
22
+ // 1. Clean and create output directories
23
+ builder.rimraf(out);
24
+ mkdirSync(serverDir, { recursive: true });
25
+ builder.log.minor("Writing SvelteKit server files...");
26
+ // 2. Write SvelteKit server files
27
+ builder.writeServer(serverDir);
28
+ // 3. Copy static assets and prerendered pages
29
+ const clientFiles = builder.writeClient(clientDir);
30
+ const prerenderedFiles = builder.writePrerendered(prerenderedDir);
31
+ // 4. Generate the manifest
32
+ const relativePath = relative(serverDir, ".");
33
+ builder.generateManifest({ relativePath });
34
+ // 5. Generate the unified runtime entry point
35
+ const serverEntryResolved = resolve(serverEntry);
36
+ const serverEntryRelative = relative(serverDir, serverEntryResolved);
37
+ const entryCode = generateEntryPoint({
38
+ serverEntryRelative,
39
+ envPrefix,
40
+ development,
41
+ clientDir: relative(serverDir, clientDir),
42
+ prerenderedDir: relative(serverDir, prerenderedDir),
43
+ });
44
+ writeFileSync(join(serverDir, "entry.js"), entryCode);
45
+ // 6. Write runtime handler (inline the full implementation)
46
+ writeFileSync(join(serverDir, "handler.js"), generateRuntimeHandler());
47
+ // 7. Precompress if enabled
48
+ if (precompress) {
49
+ builder.log.minor("Compressing assets...");
50
+ await builder.compress(clientDir);
51
+ if (prerenderedFiles.length > 0) {
52
+ await builder.compress(prerenderedDir);
53
+ }
54
+ }
55
+ builder.log.success(`Adapter output written to ${out}`);
56
+ builder.log.minor(`Run with: bun ${out}/server/entry.js`);
57
+ },
58
+ };
116
59
  }
117
-
118
- function generateEntryPoint(config: {
119
- serverEntryRelative: string;
120
- envPrefix: string;
121
- development: boolean;
122
- clientDir: string;
123
- prerenderedDir: string;
124
- }): string {
125
- const { serverEntryRelative, envPrefix, development, clientDir, prerenderedDir } = config;
126
-
127
- return `// Generated by @donkeylabs/adapter-sveltekit
60
+ function generateEntryPoint(config) {
61
+ const { serverEntryRelative, envPrefix, development, clientDir, prerenderedDir } = config;
62
+ return `// Generated by @donkeylabs/adapter-sveltekit
128
63
  import { Server } from "./index.js";
129
64
  import { manifest } from "./manifest.js";
130
65
  import { createUnifiedServer } from "./handler.js";
@@ -166,10 +101,9 @@ createUnifiedServer({
166
101
  console.log(\`Server running at http://\${host}:\${port}\`);
167
102
  `;
168
103
  }
169
-
170
- function generateRuntimeHandler(): string {
171
- // Inline the full runtime handler implementation
172
- return `// Generated runtime handler by @donkeylabs/adapter-sveltekit
104
+ function generateRuntimeHandler() {
105
+ // Inline the full runtime handler implementation
106
+ return `// Generated runtime handler by @donkeylabs/adapter-sveltekit
173
107
  import { resolve, dirname } from "node:path";
174
108
  import { fileURLToPath } from "node:url";
175
109
 
@@ -386,6 +320,3 @@ function getCorsHeaders() {
386
320
  }
387
321
  `;
388
322
  }
389
-
390
- // Re-export types
391
- export type { AdapterOptions as Options };
package/dist/vite.d.ts ADDED
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Vite plugin for @donkeylabs/adapter-sveltekit dev server integration
3
+ *
4
+ * Supports two modes:
5
+ * - `bun --bun run dev`: Single-process mode (in-process, one port)
6
+ * - `bun run dev`: Subprocess mode (two processes, proxy)
7
+ */
8
+ import type { Plugin } from "vite";
9
+ export interface DevPluginOptions {
10
+ /**
11
+ * Path to your @donkeylabs/server entry file.
12
+ * This file should export a configured AppServer instance.
13
+ *
14
+ * @default "./src/server/index.ts"
15
+ */
16
+ serverEntry?: string;
17
+ /**
18
+ * Port for the backend server (subprocess mode only).
19
+ * @default 3001
20
+ */
21
+ backendPort?: number;
22
+ /**
23
+ * Watch server files and auto-regenerate types on changes.
24
+ * @default true
25
+ */
26
+ watchTypes?: boolean;
27
+ /**
28
+ * Directory to watch for server file changes.
29
+ * @default "./src/server"
30
+ */
31
+ watchDir?: string;
32
+ /**
33
+ * Enable hot reload for route files (dev mode only).
34
+ * When a route file changes, the router will be reloaded without server restart.
35
+ * @default true
36
+ */
37
+ hotReloadRoutes?: boolean;
38
+ /**
39
+ * Glob patterns for route files to watch for hot reload.
40
+ * @default ["**\/routes\/**\/*.ts"]
41
+ */
42
+ routePatterns?: string[];
43
+ }
44
+ declare global {
45
+ var __donkeylabs_dev_server__: any;
46
+ }
47
+ /**
48
+ * Get the global app server instance for SSR direct calls.
49
+ * This allows hooks to access the server without HTTP.
50
+ */
51
+ export declare function getDevServer(): any;
52
+ /**
53
+ * Vite plugin that integrates @donkeylabs/server with the dev server.
54
+ *
55
+ * - With `bun --bun run dev`: Runs in-process (single port, recommended)
56
+ * - With `bun run dev`: Spawns subprocess (two ports, fallback)
57
+ *
58
+ * @example
59
+ * // vite.config.ts
60
+ * import { donkeylabsDev } from "@donkeylabs/adapter-sveltekit/vite";
61
+ *
62
+ * export default defineConfig({
63
+ * plugins: [
64
+ * donkeylabsDev({ serverEntry: "./src/server/index.ts" }),
65
+ * sveltekit()
66
+ * ]
67
+ * });
68
+ */
69
+ export declare function donkeylabsDev(options?: DevPluginOptions): Plugin;
70
+ export default donkeylabsDev;
71
+ //# sourceMappingURL=vite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AASlD,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAOD,OAAO,CAAC,MAAM,CAAC;IACb,IAAI,yBAAyB,EAAE,GAAG,CAAC;CACpC;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,GAAG,CAElC;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAsnBpE;AAED,eAAe,aAAa,CAAC"}