@evjs/webpack-plugin 0.0.1-rc.6 → 0.0.1-rc.7

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 (2) hide show
  1. package/AGENT.md +75 -13
  2. package/package.json +3 -3
package/AGENT.md CHANGED
@@ -1,10 +1,16 @@
1
- # @evjs/webpack-plugin
1
+ # @evjs/webpack-plugin — Agent Guide
2
2
 
3
- Webpack adapter for the ev framework. Thin wrapper over `@evjs/build-tools`.
3
+ > AI-agent reference for the `@evjs/webpack-plugin` package. This is an internal package used by `@evjs/cli` — application developers don't configure it directly.
4
+
5
+ ## Overview
6
+
7
+ Webpack adapter wrapping `@evjs/build-tools`. Provides:
8
+ 1. **`EvWebpackPlugin`** — webpack plugin for server function discovery + child compilation
9
+ 2. **`server-fn-loader`** — webpack loader for `"use server"` file transforms
4
10
 
5
11
  ## EvWebpackPlugin
6
12
 
7
- Auto-discovers `"use server"` files, generates a server entry, spawns a Node-targeted child compiler, and emits `manifest.json`.
13
+ Auto-discovers `"use server"` files, generates server entry, spawns a server-targeted child compiler, and emits `manifest.json`.
8
14
 
9
15
  ```js
10
16
  const { EvWebpackPlugin } = require("@evjs/webpack-plugin");
@@ -12,27 +18,83 @@ const { EvWebpackPlugin } = require("@evjs/webpack-plugin");
12
18
  new EvWebpackPlugin({
13
19
  server: {
14
20
  appFactory: "@evjs/runtime/server#createApp", // default
15
- runner: process.env.NODE_ENV === "development"
16
- ? "@evjs/runtime/server#serve" : undefined,
17
- setup: [], // extra imports
21
+ runner: "@evjs/runtime/server#serve", // for self-starting servers
22
+ middleware: ["./src/middleware/auth#default"], // middleware imports
18
23
  },
19
24
  });
20
25
  ```
21
26
 
22
27
  ### Options
28
+
23
29
  | Option | Type | Default | Description |
24
30
  |--------|------|---------|-------------|
25
- | `server.appFactory` | `string` | `"@evjs/runtime/server#createApp"` | App factory module ref |
26
- | `server.runner` | `string?` | `undefined` | Runner for self-starting server bundles |
27
- | `server.setup` | `string[]` | `[]` | Extra imports prepended to server entry |
31
+ | `server.appFactory` | `string` | `"@evjs/runtime/server#createApp"` | Hono app factory module ref |
32
+ | `server.runner` | `string?` | `undefined` | Runner module ref (e.g., `"@evjs/runtime/server#serve"`) |
33
+ | `server.middleware` | `string[]` | `[]` | Middleware module refs prepended to server entry |
34
+
35
+ ### What It Does (Build Pipeline)
36
+
37
+ 1. **Discovery** — globs for `*.server.{ts,js,tsx,jsx}` in source tree
38
+ 2. **Client transform** — `server-fn-loader` replaces function bodies with `__ev_call` stubs
39
+ 3. **Server entry generation** — calls `generateServerEntry()` from `@evjs/build-tools`
40
+ 4. **Child compiler** — spawns a webpack child compilation targeting `node` with the server entry
41
+ 5. **Manifest emission** — writes `manifest.json` via `processAssets` hook
42
+
43
+ ### Output
44
+
45
+ ```
46
+ dist/
47
+ ├── client/ # client webpack output
48
+ │ ├── main.[hash].js
49
+ │ └── index.html
50
+ └── server/
51
+ ├── server.js # server bundle (Node.js)
52
+ └── manifest.json # server function registry
53
+ ```
54
+
55
+ ### Manifest Format
56
+
57
+ ```json
58
+ {
59
+ "version": 1,
60
+ "serverFunctions": {
61
+ "abc123:getUsers": {
62
+ "module": "./api/users.server",
63
+ "export": "getUsers"
64
+ }
65
+ }
66
+ }
67
+ ```
28
68
 
29
69
  ## server-fn-loader
30
70
 
31
- Webpack loader for `"use server"` files. Auto-detects client vs server compiler context.
71
+ Webpack loader for `"use server"` files. Automatically detects whether it's running in the client or server compiler and applies the appropriate transform.
32
72
 
33
73
  ```js
34
- { loader: "@evjs/webpack-plugin/server-fn-loader" }
74
+ {
75
+ test: /\.server\.(ts|tsx|js|jsx)$/,
76
+ use: [
77
+ { loader: "swc-loader" },
78
+ { loader: "@evjs/webpack-plugin/server-fn-loader" },
79
+ ],
80
+ }
35
81
  ```
36
82
 
37
- Client compiler → replaces function bodies with RPC stubs.
38
- Server compiler → keeps bodies, appends registrations, reports to manifest.
83
+ **Client compiler** → replaces function bodies with `__ev_call` RPC stubs
84
+ **Server compiler**preserves function bodies, appends `registerServerFn()` calls
85
+
86
+ ## Key Files
87
+
88
+ | File | Purpose |
89
+ |------|---------|
90
+ | `src/index.ts` | `EvWebpackPlugin` — main plugin |
91
+ | `src/server-fn-loader.ts` | Webpack loader for `"use server"` transforms |
92
+
93
+ ## Integration with @evjs/cli
94
+
95
+ `@evjs/cli` creates the webpack config in `create-webpack-config.ts`:
96
+
97
+ 1. Adds `EvWebpackPlugin` to plugins
98
+ 2. Adds `server-fn-loader` to module rules (before `swc-loader`)
99
+ 3. Configures dev server proxy for `/api/fn` → API server
100
+ 4. In dev mode, sets `runner` to `"@evjs/runtime/server#serve"` for auto-start
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evjs/webpack-plugin",
3
- "version": "0.0.1-rc.6",
3
+ "version": "0.0.1-rc.7",
4
4
  "description": "Webpack plugin and loaders for the ev framework",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -36,8 +36,8 @@
36
36
  "author": "xusd320",
37
37
  "license": "MIT",
38
38
  "dependencies": {
39
- "@evjs/build-tools": "0.0.1-rc.6",
40
- "@evjs/manifest": "0.0.1-rc.6"
39
+ "@evjs/build-tools": "0.0.1-rc.7",
40
+ "@evjs/manifest": "0.0.1-rc.7"
41
41
  },
42
42
  "devDependencies": {
43
43
  "typescript": "^5.7.3",