vitend 0.2.2 → 0.3.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/README.md +64 -2
- package/dist/vite.js +24 -10
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +24 -9
- package/dist/vite.mjs.map +1 -1
- package/package.json +10 -2
package/README.md
CHANGED
|
@@ -13,6 +13,8 @@ Vitend brings a frontend-grade developer experience to backend development. It a
|
|
|
13
13
|
Add the Vitend plugin into the Vite config:
|
|
14
14
|
|
|
15
15
|
```ts
|
|
16
|
+
// ./vite.config.ts
|
|
17
|
+
|
|
16
18
|
import { defineConfig } from "vite";
|
|
17
19
|
import { vitend } from "vitend/vite";
|
|
18
20
|
|
|
@@ -23,9 +25,69 @@ export default defineConfig({
|
|
|
23
25
|
});
|
|
24
26
|
```
|
|
25
27
|
|
|
26
|
-
|
|
28
|
+
For deploying to Vercel, add the `vercel` target:
|
|
27
29
|
|
|
28
30
|
```ts
|
|
31
|
+
// ./vite.config.ts
|
|
32
|
+
|
|
33
|
+
import { defineConfig } from "vite";
|
|
34
|
+
import { vitend } from "vitend/vite";
|
|
35
|
+
|
|
36
|
+
export default defineConfig({
|
|
37
|
+
plugins: [
|
|
38
|
+
vitend({
|
|
39
|
+
build: {
|
|
40
|
+
target: "vercel",
|
|
41
|
+
}
|
|
42
|
+
}),
|
|
43
|
+
],
|
|
44
|
+
});
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
For framework built on top of Web APIs, it is possible to directly export the application:
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
// ./src/index.ts
|
|
51
|
+
|
|
52
|
+
import { Hono } from "hono";
|
|
53
|
+
|
|
54
|
+
const app: Hono = new Hono();
|
|
55
|
+
|
|
56
|
+
app.get("/", (c: Context): Response => {
|
|
57
|
+
return c.json({
|
|
58
|
+
success: true,
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
export default app;
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Or use the `defineServer` function to wrap the application for type-safety on more advanced options:
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
// ./src/index.ts
|
|
69
|
+
|
|
70
|
+
import { Hono } from "hono";
|
|
71
|
+
import { defineServer } from "vitend";
|
|
72
|
+
|
|
73
|
+
const app: Hono = new Hono();
|
|
74
|
+
|
|
75
|
+
app.get("/", (c: Context): Response => {
|
|
76
|
+
return c.json({
|
|
77
|
+
success: true,
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
export default defineServer({
|
|
82
|
+
fetch: app.fetch,
|
|
83
|
+
});
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
In the same time, it is also possible for directly usage without a framework:
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
// ./src/index.ts
|
|
90
|
+
|
|
29
91
|
export default {
|
|
30
92
|
fetch: (req: Request): Response => {
|
|
31
93
|
switch (new URL(req.url).pathname) {
|
|
@@ -40,7 +102,7 @@ export default {
|
|
|
40
102
|
};
|
|
41
103
|
```
|
|
42
104
|
|
|
43
|
-
|
|
105
|
+
After the configuration, run `vite` to start the server.
|
|
44
106
|
|
|
45
107
|
## License
|
|
46
108
|
|
package/dist/vite.js
CHANGED
|
@@ -26,8 +26,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
|
|
27
27
|
let node_path = require("node:path");
|
|
28
28
|
node_path = __toESM(node_path);
|
|
29
|
-
let
|
|
30
|
-
rollup_plugin_copy = __toESM(rollup_plugin_copy);
|
|
29
|
+
let rolldown_plugin_copy = require("rolldown-plugin-copy");
|
|
31
30
|
let es_toolkit = require("es-toolkit");
|
|
32
31
|
let node_fs = require("node:fs");
|
|
33
32
|
node_fs = __toESM(node_fs);
|
|
@@ -155,6 +154,24 @@ const buildPlugin = (opts) => {
|
|
|
155
154
|
};
|
|
156
155
|
};
|
|
157
156
|
|
|
157
|
+
const createRequestHeaders = (headers) => {
|
|
158
|
+
const result = new Headers();
|
|
159
|
+
const entries = Object.entries(headers);
|
|
160
|
+
for (let i = 0; i < entries.length; i++) {
|
|
161
|
+
const entry = entries[i];
|
|
162
|
+
if (entry === void 0) continue;
|
|
163
|
+
const [key, value] = entry;
|
|
164
|
+
if (key.startsWith(":")) continue;
|
|
165
|
+
if (value === void 0) continue;
|
|
166
|
+
if (Array.isArray(value)) for (let j = 0; j < value.length; j++) {
|
|
167
|
+
const vl = value[j];
|
|
168
|
+
if (vl === void 0) continue;
|
|
169
|
+
result.append(key, vl);
|
|
170
|
+
}
|
|
171
|
+
else result.set(key, value);
|
|
172
|
+
}
|
|
173
|
+
return result;
|
|
174
|
+
};
|
|
158
175
|
const createMiddleware = ({ vite, server }) => {
|
|
159
176
|
return async (req, res, _next) => {
|
|
160
177
|
const protocol = `http${vite.config.server.https?.cert !== void 0 && vite.config.server.https?.key !== void 0 ? "s" : ""}`;
|
|
@@ -165,7 +182,7 @@ const createMiddleware = ({ vite, server }) => {
|
|
|
165
182
|
const body = req.method !== "GET" && req.method !== "HEAD" ? req : void 0;
|
|
166
183
|
const request = new Request(url, {
|
|
167
184
|
method: req.method,
|
|
168
|
-
headers: req.headers,
|
|
185
|
+
headers: createRequestHeaders(req.headers),
|
|
169
186
|
body,
|
|
170
187
|
duplex: "half"
|
|
171
188
|
});
|
|
@@ -263,13 +280,10 @@ const vitend = (options) => {
|
|
|
263
280
|
return [
|
|
264
281
|
devPlugin({ ...opts }),
|
|
265
282
|
buildPlugin({ ...opts }),
|
|
266
|
-
...build.target === "default" && build.copyPublicDir ? [(0,
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
dest: node_path.resolve(build.outputDir, build.publicDir)
|
|
271
|
-
}]
|
|
272
|
-
})] : []
|
|
283
|
+
...build.target === "default" && build.copyPublicDir ? [(0, rolldown_plugin_copy.copy)({ targets: [{
|
|
284
|
+
src: node_path.resolve(build.publicDir, "**", "*"),
|
|
285
|
+
dest: node_path.resolve(build.outputDir, build.publicDir)
|
|
286
|
+
}] })] : []
|
|
273
287
|
];
|
|
274
288
|
};
|
|
275
289
|
|
package/dist/vite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.js","names":["Fs","Path","Path","Fs","builtinModules","Path"],"sources":["../src/functions/entry.ts","../src/functions/options.ts","../src/functions/package-json.ts","../src/vite/build.ts","../src/vite/dev.ts","../src/vite/vitend.ts"],"sourcesContent":["import * as Fs from \"node:fs\";\nimport * as Path from \"node:path\";\n\nconst ENTRY_DEFAULT: string[] = [\n \"./src/index.ts\",\n \"./src/index.js\",\n];\n\nconst getEntry = (cwd: string, entry?: string): string => {\n if (!entry) {\n for (const ent of ENTRY_DEFAULT) {\n if (Fs.existsSync(Path.resolve(cwd, ent))) {\n entry = ent;\n break;\n }\n }\n\n if (!entry) {\n throw new Error(\"No entry file found\");\n }\n }\n\n return Path.resolve(cwd, entry);\n};\n\nexport { getEntry };\n","import type { Omit } from \"ts-vista\";\n\nimport type { VitendOptions } from \"#/@types/options/default\";\nimport type {\n ResolvedDefaultBuildOptions,\n ResolvedVercelBuildOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\n\nimport { toMerged } from \"es-toolkit\";\n\nimport { getEntry } from \"#/functions/entry\";\n\nconst OPTIONS_BUILD_VERCEL: ResolvedVercelBuildOptions = {\n target: \"vercel\",\n outputDir: \"./dist\",\n outputFile: \"index.js\",\n minify: false,\n};\n\nconst OPTIONS_BUILD_DEFAULT: ResolvedDefaultBuildOptions = {\n target: \"default\",\n host: \"localhost\",\n port: 3000,\n outputDir: \"./dist\",\n outputFile: \"index.js\",\n minify: false,\n publicDir: \"./public\",\n copyPublicDir: false,\n};\n\nconst OPTIONS_DEFAULT: Omit<ResolvedVitendOptions, \"entry\" | \"build\"> = {\n cwd: process.cwd(),\n dev: {\n host: \"localhost\",\n port: 3001,\n },\n};\n\nconst getDefaultOptions = (\n isVercel: boolean,\n): Omit<ResolvedVitendOptions, \"entry\"> => {\n return {\n ...OPTIONS_DEFAULT,\n build: isVercel ? OPTIONS_BUILD_VERCEL : OPTIONS_BUILD_DEFAULT,\n };\n};\n\nconst createOptions = (options?: VitendOptions): ResolvedVitendOptions => {\n const isVercel: boolean = options?.build?.target === \"vercel\";\n\n const merged = toMerged(getDefaultOptions(isVercel), options ?? {});\n\n return {\n ...merged,\n entry: getEntry(merged.cwd, options?.entry),\n };\n};\n\nexport { createOptions };\n","import type { Format, Partial } from \"ts-vista\";\n\nimport * as Fs from \"node:fs\";\nimport * as Path from \"node:path\";\n\ntype CompletePackageJson = {\n type: \"module\" | \"commonjs\";\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n peerDependencies: Record<string, string>;\n};\n\ntype PackageJson = Format<Partial<CompletePackageJson>>;\n\nconst getPackageJson = (cwd: string): PackageJson => {\n const path: string = Path.resolve(cwd, \"package.json\");\n\n if (!Fs.existsSync(path)) {\n throw new Error(\"Failed to find package.json\");\n }\n\n const rawPackageJson: string = Fs.readFileSync(path, \"utf-8\");\n\n return JSON.parse(rawPackageJson);\n};\n\nexport type { CompletePackageJson, PackageJson };\nexport { getPackageJson };\n","import type { LoadResult, ResolveIdResult } from \"rollup\";\nimport type { Plugin, UserConfig } from \"vite\";\n\nimport type {\n ResolvedBuildOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\nimport type { PackageJson } from \"#/functions/package-json\";\n\nimport { builtinModules } from \"node:module\";\n\nimport { toMerged } from \"es-toolkit\";\n\nimport { getPackageJson } from \"#/functions/package-json\";\n\nconst VIRTUAL_ENTRY = \"virtual:vitend-entry\" as const;\n\nconst VIRTUAL_ENTRY_RESOLVED = `\\0${VIRTUAL_ENTRY}` as const;\n\nconst buildPlugin = (opts: ResolvedVitendOptions): Plugin => {\n const build: ResolvedBuildOptions = opts.build;\n\n const packageJson: PackageJson = getPackageJson(opts.cwd);\n\n return {\n name: \"vitend/build\",\n apply: \"build\",\n config: (config: UserConfig): UserConfig => {\n let result: UserConfig = {};\n\n const baseConfig: UserConfig = {\n ssr: {\n external: true,\n noExternal: void 0,\n target: \"webworker\",\n },\n build: {\n copyPublicDir: false,\n },\n };\n\n result = toMerged(baseConfig, config);\n\n const overrideConfig: UserConfig = {\n build: {\n ssr: true,\n outDir: build.outputDir,\n rollupOptions: {\n input: VIRTUAL_ENTRY,\n output: {\n entryFileNames: build.outputFile,\n format:\n packageJson.type === \"module\" ? \"esm\" : \"cjs\",\n },\n external: [\n ...builtinModules,\n /^node:/,\n ],\n },\n minify: build.minify,\n },\n };\n\n result = toMerged(result, overrideConfig);\n\n return result;\n },\n resolveId: (id: string): ResolveIdResult => {\n if (id !== VIRTUAL_ENTRY) return void 0;\n return VIRTUAL_ENTRY_RESOLVED;\n },\n load: async (id: string): Promise<LoadResult> => {\n if (id !== VIRTUAL_ENTRY_RESOLVED) return void 0;\n\n let code: string = \"\";\n\n code += `import options from \"${opts.entry}\";`;\n code += `import { serve } from \"vitend/runtime\";`;\n\n // vercel export\n\n if (build.target === \"vercel\") {\n code += `const server = serve({ ...options, manual: true });`;\n code += `export default server;`;\n\n return code;\n }\n\n // default export\n\n code += `serve({`;\n code += `...options,`;\n\n if (build.host !== \"localhost\")\n code += `hostname: \"${build.host}\",`;\n if (build.port !== 3000) code += `port: ${build.port},`;\n\n if (build.https) {\n code += `tls: {`;\n if (build.https.cert) code += `cert: \"${build.https.cert}\",`;\n if (build.https.key) code += `key: \"${build.https.key}\",`;\n if (build.https.passphrase)\n code += `passphrase: \"${build.https.passphrase}\",`;\n code += `},`;\n }\n\n code += `});`;\n\n return code;\n },\n };\n};\n\nexport { buildPlugin };\n","import type HTTP from \"node:http\";\n\nimport type { Server, ServerHandler, ServerOptions } from \"srvx\";\nimport type { Connect, Plugin, UserConfig, ViteDevServer } from \"vite\";\n\nimport type {\n ResolvedDevOptions,\n ResolvedHttpsOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\n\nimport { toMerged } from \"es-toolkit\";\nimport { serve } from \"srvx\";\n\ntype CreateMiddlewareOptions = {\n vite: ViteDevServer;\n server: Server;\n};\n\nconst createMiddleware = ({ vite, server }: CreateMiddlewareOptions) => {\n return async (\n req: Connect.IncomingMessage,\n res: HTTP.ServerResponse,\n _next: Connect.NextFunction,\n ): Promise<void> => {\n const isHttps: boolean =\n vite.config.server.https?.cert !== void 0 &&\n vite.config.server.https?.key !== void 0;\n\n const protocol: string = `http${isHttps ? \"s\" : \"\"}`;\n\n const host: string = process.env.HOST ?? \"localhost\";\n\n const port: number = vite.config.server.port;\n\n const path: string = req.url ?? \"\";\n\n const url: URL = new URL(`${protocol}://${host}:${port}${path}`);\n\n const body: Connect.IncomingMessage | undefined =\n req.method !== \"GET\" && req.method !== \"HEAD\" ? req : void 0;\n\n const request: Request = new Request(url, {\n method: req.method,\n headers: req.headers,\n body,\n duplex: \"half\",\n } as RequestInit);\n\n const response: Response = await server.fetch(request);\n\n res.statusCode = response.status;\n\n response.headers.forEach((value: string, key: string): void => {\n res.setHeader(key, value);\n });\n\n if (!response.body) {\n res.end();\n return void 0;\n }\n\n const reader: ReadableStreamDefaultReader<Uint8Array<ArrayBuffer>> =\n response.body.getReader();\n\n const stream = async (): Promise<void> => {\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) break;\n\n res.write(value);\n }\n\n res.end();\n } catch {\n res.end();\n }\n };\n\n await stream();\n };\n};\n\ntype Middleware = ReturnType<typeof createMiddleware>;\n\nconst devPlugin = (opts: ResolvedVitendOptions): Plugin => {\n const dev: ResolvedDevOptions = opts.dev;\n const https: ResolvedHttpsOptions = opts.dev.https ?? {};\n\n return {\n name: \"vitend/dev\",\n apply: \"serve\",\n config(config: UserConfig): UserConfig {\n const devConfig: UserConfig = {\n build: {\n ssr: true,\n rollupOptions: {\n input: opts.entry,\n },\n },\n server: {\n host: dev.host,\n port: dev.port,\n ...(https.cert !== void 0 && https.key !== void 0\n ? {\n https: {\n cert: https.cert,\n key: https.key,\n passphrase: https.passphrase,\n },\n }\n : {}),\n },\n };\n\n return toMerged(config, devConfig);\n },\n configureServer: async (vite: ViteDevServer): Promise<void> => {\n const serverOptions: ServerOptions = (\n await vite.ssrLoadModule(opts.entry)\n ).default;\n\n const server: Server<ServerHandler> = serve({\n // base\n gracefulShutdown: false,\n // user\n ...serverOptions,\n // override\n manual: true,\n hostname: dev.host,\n port: dev.port,\n tls: {\n cert: https.cert,\n key: https.key,\n passphrase: https.passphrase,\n },\n });\n\n const middleware: Middleware = createMiddleware({\n vite,\n server,\n });\n\n vite.middlewares.use(middleware);\n },\n };\n};\n\nexport { devPlugin };\n","import type { Plugin } from \"vite\";\n\nimport type { VitendOptions } from \"#/@types/options/default\";\nimport type {\n ResolvedBuildOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\n\nimport * as Path from \"node:path\";\n\nimport copy from \"rollup-plugin-copy\";\n\nimport { createOptions } from \"#/functions/options\";\nimport { buildPlugin } from \"#/vite/build\";\nimport { devPlugin } from \"#/vite/dev\";\n\n/**\n * The `vitend` plugin.\n *\n * ### Example\n *\n * ```ts\n * // ./vite.config.ts\n *\n * import { defineConfig } from \"vite\";\n * import { vitend } from \"vitend/vite\";\n *\n * export default defineConfig({\n * plugins: [\n * vitend(),\n * ],\n * });\n * ```\n */\nconst vitend = (options?: VitendOptions): Plugin[] => {\n const opts: ResolvedVitendOptions = createOptions(options);\n\n const build: ResolvedBuildOptions = opts.build;\n\n return [\n devPlugin({\n ...opts,\n }),\n buildPlugin({\n ...opts,\n }),\n ...(build.target === \"default\" && build.copyPublicDir\n ? ([\n copy({\n hook: \"closeBundle\",\n targets: [\n {\n src: Path.resolve(build.publicDir, \"**\", \"*\"),\n dest: Path.resolve(\n build.outputDir,\n build.publicDir,\n ),\n },\n ],\n }),\n ] as Plugin[])\n : []),\n ];\n};\n\nexport { vitend };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vite.js","names":["Fs","Path","Path","Fs","builtinModules","Path"],"sources":["../src/functions/entry.ts","../src/functions/options.ts","../src/functions/package-json.ts","../src/vite/build.ts","../src/vite/dev.ts","../src/vite/vitend.ts"],"sourcesContent":["import * as Fs from \"node:fs\";\nimport * as Path from \"node:path\";\n\nconst ENTRY_DEFAULT: string[] = [\n \"./src/index.ts\",\n \"./src/index.js\",\n];\n\nconst getEntry = (cwd: string, entry?: string): string => {\n if (!entry) {\n for (const ent of ENTRY_DEFAULT) {\n if (Fs.existsSync(Path.resolve(cwd, ent))) {\n entry = ent;\n break;\n }\n }\n\n if (!entry) {\n throw new Error(\"No entry file found\");\n }\n }\n\n return Path.resolve(cwd, entry);\n};\n\nexport { getEntry };\n","import type { Omit } from \"ts-vista\";\n\nimport type { VitendOptions } from \"#/@types/options/default\";\nimport type {\n ResolvedDefaultBuildOptions,\n ResolvedVercelBuildOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\n\nimport { toMerged } from \"es-toolkit\";\n\nimport { getEntry } from \"#/functions/entry\";\n\nconst OPTIONS_BUILD_VERCEL: ResolvedVercelBuildOptions = {\n target: \"vercel\",\n outputDir: \"./dist\",\n outputFile: \"index.js\",\n minify: false,\n};\n\nconst OPTIONS_BUILD_DEFAULT: ResolvedDefaultBuildOptions = {\n target: \"default\",\n host: \"localhost\",\n port: 3000,\n outputDir: \"./dist\",\n outputFile: \"index.js\",\n minify: false,\n publicDir: \"./public\",\n copyPublicDir: false,\n};\n\nconst OPTIONS_DEFAULT: Omit<ResolvedVitendOptions, \"entry\" | \"build\"> = {\n cwd: process.cwd(),\n dev: {\n host: \"localhost\",\n port: 3001,\n },\n};\n\nconst getDefaultOptions = (\n isVercel: boolean,\n): Omit<ResolvedVitendOptions, \"entry\"> => {\n return {\n ...OPTIONS_DEFAULT,\n build: isVercel ? OPTIONS_BUILD_VERCEL : OPTIONS_BUILD_DEFAULT,\n };\n};\n\nconst createOptions = (options?: VitendOptions): ResolvedVitendOptions => {\n const isVercel: boolean = options?.build?.target === \"vercel\";\n\n const merged = toMerged(getDefaultOptions(isVercel), options ?? {});\n\n return {\n ...merged,\n entry: getEntry(merged.cwd, options?.entry),\n };\n};\n\nexport { createOptions };\n","import type { Format, Partial } from \"ts-vista\";\n\nimport * as Fs from \"node:fs\";\nimport * as Path from \"node:path\";\n\ntype CompletePackageJson = {\n type: \"module\" | \"commonjs\";\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n peerDependencies: Record<string, string>;\n};\n\ntype PackageJson = Format<Partial<CompletePackageJson>>;\n\nconst getPackageJson = (cwd: string): PackageJson => {\n const path: string = Path.resolve(cwd, \"package.json\");\n\n if (!Fs.existsSync(path)) {\n throw new Error(\"Failed to find package.json\");\n }\n\n const rawPackageJson: string = Fs.readFileSync(path, \"utf-8\");\n\n return JSON.parse(rawPackageJson);\n};\n\nexport type { CompletePackageJson, PackageJson };\nexport { getPackageJson };\n","import type { LoadResult, ResolveIdResult } from \"rollup\";\nimport type { Plugin, UserConfig } from \"vite\";\n\nimport type {\n ResolvedBuildOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\nimport type { PackageJson } from \"#/functions/package-json\";\n\nimport { builtinModules } from \"node:module\";\n\nimport { toMerged } from \"es-toolkit\";\n\nimport { getPackageJson } from \"#/functions/package-json\";\n\nconst VIRTUAL_ENTRY = \"virtual:vitend-entry\" as const;\n\nconst VIRTUAL_ENTRY_RESOLVED = `\\0${VIRTUAL_ENTRY}` as const;\n\nconst buildPlugin = (opts: ResolvedVitendOptions): Plugin => {\n const build: ResolvedBuildOptions = opts.build;\n\n const packageJson: PackageJson = getPackageJson(opts.cwd);\n\n return {\n name: \"vitend/build\",\n apply: \"build\",\n config: (config: UserConfig): UserConfig => {\n let result: UserConfig = {};\n\n const baseConfig: UserConfig = {\n ssr: {\n external: true,\n noExternal: void 0,\n target: \"webworker\",\n },\n build: {\n copyPublicDir: false,\n },\n };\n\n result = toMerged(baseConfig, config);\n\n const overrideConfig: UserConfig = {\n build: {\n ssr: true,\n outDir: build.outputDir,\n rollupOptions: {\n input: VIRTUAL_ENTRY,\n output: {\n entryFileNames: build.outputFile,\n format:\n packageJson.type === \"module\" ? \"esm\" : \"cjs\",\n },\n external: [\n ...builtinModules,\n /^node:/,\n ],\n },\n minify: build.minify,\n },\n };\n\n result = toMerged(result, overrideConfig);\n\n return result;\n },\n resolveId: (id: string): ResolveIdResult => {\n if (id !== VIRTUAL_ENTRY) return void 0;\n return VIRTUAL_ENTRY_RESOLVED;\n },\n load: async (id: string): Promise<LoadResult> => {\n if (id !== VIRTUAL_ENTRY_RESOLVED) return void 0;\n\n let code: string = \"\";\n\n code += `import options from \"${opts.entry}\";`;\n code += `import { serve } from \"vitend/runtime\";`;\n\n // vercel export\n\n if (build.target === \"vercel\") {\n code += `const server = serve({ ...options, manual: true });`;\n code += `export default server;`;\n\n return code;\n }\n\n // default export\n\n code += `serve({`;\n code += `...options,`;\n\n if (build.host !== \"localhost\")\n code += `hostname: \"${build.host}\",`;\n if (build.port !== 3000) code += `port: ${build.port},`;\n\n if (build.https) {\n code += `tls: {`;\n if (build.https.cert) code += `cert: \"${build.https.cert}\",`;\n if (build.https.key) code += `key: \"${build.https.key}\",`;\n if (build.https.passphrase)\n code += `passphrase: \"${build.https.passphrase}\",`;\n code += `},`;\n }\n\n code += `});`;\n\n return code;\n },\n };\n};\n\nexport { buildPlugin };\n","import type HTTP from \"node:http\";\n\nimport type { Server, ServerHandler, ServerOptions } from \"srvx\";\nimport type { Connect, Plugin, UserConfig, ViteDevServer } from \"vite\";\n\nimport type {\n ResolvedDevOptions,\n ResolvedHttpsOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\n\nimport { toMerged } from \"es-toolkit\";\nimport { serve } from \"srvx\";\n\ntype CreateMiddlewareOptions = {\n vite: ViteDevServer;\n server: Server;\n};\n\nconst createRequestHeaders = (headers: HTTP.IncomingHttpHeaders): Headers => {\n const result: Headers = new Headers();\n\n const entries: [\n string,\n string | string[] | undefined,\n ][] = Object.entries(headers);\n\n for (let i: number = 0; i < entries.length; i++) {\n const entry:\n | [\n string,\n string | string[] | undefined,\n ]\n | undefined = entries[i];\n\n if (entry === void 0) continue;\n\n const [key, value] = entry;\n\n // ignore HTTP/2 pseudo-headers\n if (key.startsWith(\":\")) continue;\n\n if (value === void 0) continue;\n\n if (Array.isArray(value)) {\n for (let j: number = 0; j < value.length; j++) {\n const vl: string | undefined = value[j];\n\n if (vl === void 0) continue;\n\n result.append(key, vl);\n }\n } else {\n result.set(key, value);\n }\n }\n\n return result;\n};\n\nconst createMiddleware = ({ vite, server }: CreateMiddlewareOptions) => {\n return async (\n req: Connect.IncomingMessage,\n res: HTTP.ServerResponse,\n _next: Connect.NextFunction,\n ): Promise<void> => {\n const isHttps: boolean =\n vite.config.server.https?.cert !== void 0 &&\n vite.config.server.https?.key !== void 0;\n\n const protocol: string = `http${isHttps ? \"s\" : \"\"}`;\n\n const host: string = process.env.HOST ?? \"localhost\";\n\n const port: number = vite.config.server.port;\n\n const path: string = req.url ?? \"\";\n\n const url: URL = new URL(`${protocol}://${host}:${port}${path}`);\n\n const body: Connect.IncomingMessage | undefined =\n req.method !== \"GET\" && req.method !== \"HEAD\" ? req : void 0;\n\n const request: Request = new Request(url, {\n method: req.method,\n headers: createRequestHeaders(req.headers),\n body,\n duplex: \"half\",\n } as RequestInit);\n\n const response: Response = await server.fetch(request);\n\n res.statusCode = response.status;\n\n response.headers.forEach((value: string, key: string): void => {\n res.setHeader(key, value);\n });\n\n if (!response.body) {\n res.end();\n return void 0;\n }\n\n const reader: ReadableStreamDefaultReader<Uint8Array<ArrayBuffer>> =\n response.body.getReader();\n\n const stream = async (): Promise<void> => {\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) break;\n\n res.write(value);\n }\n\n res.end();\n } catch {\n res.end();\n }\n };\n\n await stream();\n };\n};\n\ntype Middleware = ReturnType<typeof createMiddleware>;\n\nconst devPlugin = (opts: ResolvedVitendOptions): Plugin => {\n const dev: ResolvedDevOptions = opts.dev;\n const https: ResolvedHttpsOptions = opts.dev.https ?? {};\n\n return {\n name: \"vitend/dev\",\n apply: \"serve\",\n config(config: UserConfig): UserConfig {\n const devConfig: UserConfig = {\n build: {\n ssr: true,\n rollupOptions: {\n input: opts.entry,\n },\n },\n server: {\n host: dev.host,\n port: dev.port,\n ...(https.cert !== void 0 && https.key !== void 0\n ? {\n https: {\n cert: https.cert,\n key: https.key,\n passphrase: https.passphrase,\n },\n }\n : {}),\n },\n };\n\n return toMerged(config, devConfig);\n },\n configureServer: async (vite: ViteDevServer): Promise<void> => {\n const serverOptions: ServerOptions = (\n await vite.ssrLoadModule(opts.entry)\n ).default;\n\n const server: Server<ServerHandler> = serve({\n // base\n gracefulShutdown: false,\n // user\n ...serverOptions,\n // override\n manual: true,\n hostname: dev.host,\n port: dev.port,\n tls: {\n cert: https.cert,\n key: https.key,\n passphrase: https.passphrase,\n },\n });\n\n const middleware: Middleware = createMiddleware({\n vite,\n server,\n });\n\n vite.middlewares.use(middleware);\n },\n };\n};\n\nexport { devPlugin };\n","import type { Plugin } from \"vite\";\n\nimport type { VitendOptions } from \"#/@types/options/default\";\nimport type {\n ResolvedBuildOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\n\nimport * as Path from \"node:path\";\n\nimport { copy } from \"rolldown-plugin-copy\";\n\nimport { createOptions } from \"#/functions/options\";\nimport { buildPlugin } from \"#/vite/build\";\nimport { devPlugin } from \"#/vite/dev\";\n\n/**\n * The `vitend` plugin.\n *\n * ### Example\n *\n * ```ts\n * // ./vite.config.ts\n *\n * import { defineConfig } from \"vite\";\n * import { vitend } from \"vitend/vite\";\n *\n * export default defineConfig({\n * plugins: [\n * vitend(),\n * ],\n * });\n * ```\n */\nconst vitend = (options?: VitendOptions): Plugin[] => {\n const opts: ResolvedVitendOptions = createOptions(options);\n\n const build: ResolvedBuildOptions = opts.build;\n\n return [\n devPlugin({\n ...opts,\n }),\n buildPlugin({\n ...opts,\n }),\n ...(build.target === \"default\" && build.copyPublicDir\n ? ([\n copy({\n targets: [\n {\n src: Path.resolve(build.publicDir, \"**\", \"*\"),\n dest: Path.resolve(\n build.outputDir,\n build.publicDir,\n ),\n },\n ],\n }),\n ] as Plugin[])\n : []),\n ];\n};\n\nexport { vitend };\n"],"mappings":"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"}
|
package/dist/vite.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { builtinModules } from "node:module";
|
|
2
2
|
import * as Path from "node:path";
|
|
3
|
-
import copy from "
|
|
3
|
+
import { copy } from "rolldown-plugin-copy";
|
|
4
4
|
import { toMerged } from "es-toolkit";
|
|
5
5
|
import * as Fs from "node:fs";
|
|
6
6
|
import { serve } from "srvx";
|
|
@@ -126,6 +126,24 @@ const buildPlugin = (opts) => {
|
|
|
126
126
|
};
|
|
127
127
|
};
|
|
128
128
|
|
|
129
|
+
const createRequestHeaders = (headers) => {
|
|
130
|
+
const result = new Headers();
|
|
131
|
+
const entries = Object.entries(headers);
|
|
132
|
+
for (let i = 0; i < entries.length; i++) {
|
|
133
|
+
const entry = entries[i];
|
|
134
|
+
if (entry === void 0) continue;
|
|
135
|
+
const [key, value] = entry;
|
|
136
|
+
if (key.startsWith(":")) continue;
|
|
137
|
+
if (value === void 0) continue;
|
|
138
|
+
if (Array.isArray(value)) for (let j = 0; j < value.length; j++) {
|
|
139
|
+
const vl = value[j];
|
|
140
|
+
if (vl === void 0) continue;
|
|
141
|
+
result.append(key, vl);
|
|
142
|
+
}
|
|
143
|
+
else result.set(key, value);
|
|
144
|
+
}
|
|
145
|
+
return result;
|
|
146
|
+
};
|
|
129
147
|
const createMiddleware = ({ vite, server }) => {
|
|
130
148
|
return async (req, res, _next) => {
|
|
131
149
|
const protocol = `http${vite.config.server.https?.cert !== void 0 && vite.config.server.https?.key !== void 0 ? "s" : ""}`;
|
|
@@ -136,7 +154,7 @@ const createMiddleware = ({ vite, server }) => {
|
|
|
136
154
|
const body = req.method !== "GET" && req.method !== "HEAD" ? req : void 0;
|
|
137
155
|
const request = new Request(url, {
|
|
138
156
|
method: req.method,
|
|
139
|
-
headers: req.headers,
|
|
157
|
+
headers: createRequestHeaders(req.headers),
|
|
140
158
|
body,
|
|
141
159
|
duplex: "half"
|
|
142
160
|
});
|
|
@@ -234,13 +252,10 @@ const vitend = (options) => {
|
|
|
234
252
|
return [
|
|
235
253
|
devPlugin({ ...opts }),
|
|
236
254
|
buildPlugin({ ...opts }),
|
|
237
|
-
...build.target === "default" && build.copyPublicDir ? [copy({
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
dest: Path.resolve(build.outputDir, build.publicDir)
|
|
242
|
-
}]
|
|
243
|
-
})] : []
|
|
255
|
+
...build.target === "default" && build.copyPublicDir ? [copy({ targets: [{
|
|
256
|
+
src: Path.resolve(build.publicDir, "**", "*"),
|
|
257
|
+
dest: Path.resolve(build.outputDir, build.publicDir)
|
|
258
|
+
}] })] : []
|
|
244
259
|
];
|
|
245
260
|
};
|
|
246
261
|
|
package/dist/vite.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.mjs","names":[],"sources":["../src/functions/entry.ts","../src/functions/options.ts","../src/functions/package-json.ts","../src/vite/build.ts","../src/vite/dev.ts","../src/vite/vitend.ts"],"sourcesContent":["import * as Fs from \"node:fs\";\nimport * as Path from \"node:path\";\n\nconst ENTRY_DEFAULT: string[] = [\n \"./src/index.ts\",\n \"./src/index.js\",\n];\n\nconst getEntry = (cwd: string, entry?: string): string => {\n if (!entry) {\n for (const ent of ENTRY_DEFAULT) {\n if (Fs.existsSync(Path.resolve(cwd, ent))) {\n entry = ent;\n break;\n }\n }\n\n if (!entry) {\n throw new Error(\"No entry file found\");\n }\n }\n\n return Path.resolve(cwd, entry);\n};\n\nexport { getEntry };\n","import type { Omit } from \"ts-vista\";\n\nimport type { VitendOptions } from \"#/@types/options/default\";\nimport type {\n ResolvedDefaultBuildOptions,\n ResolvedVercelBuildOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\n\nimport { toMerged } from \"es-toolkit\";\n\nimport { getEntry } from \"#/functions/entry\";\n\nconst OPTIONS_BUILD_VERCEL: ResolvedVercelBuildOptions = {\n target: \"vercel\",\n outputDir: \"./dist\",\n outputFile: \"index.js\",\n minify: false,\n};\n\nconst OPTIONS_BUILD_DEFAULT: ResolvedDefaultBuildOptions = {\n target: \"default\",\n host: \"localhost\",\n port: 3000,\n outputDir: \"./dist\",\n outputFile: \"index.js\",\n minify: false,\n publicDir: \"./public\",\n copyPublicDir: false,\n};\n\nconst OPTIONS_DEFAULT: Omit<ResolvedVitendOptions, \"entry\" | \"build\"> = {\n cwd: process.cwd(),\n dev: {\n host: \"localhost\",\n port: 3001,\n },\n};\n\nconst getDefaultOptions = (\n isVercel: boolean,\n): Omit<ResolvedVitendOptions, \"entry\"> => {\n return {\n ...OPTIONS_DEFAULT,\n build: isVercel ? OPTIONS_BUILD_VERCEL : OPTIONS_BUILD_DEFAULT,\n };\n};\n\nconst createOptions = (options?: VitendOptions): ResolvedVitendOptions => {\n const isVercel: boolean = options?.build?.target === \"vercel\";\n\n const merged = toMerged(getDefaultOptions(isVercel), options ?? {});\n\n return {\n ...merged,\n entry: getEntry(merged.cwd, options?.entry),\n };\n};\n\nexport { createOptions };\n","import type { Format, Partial } from \"ts-vista\";\n\nimport * as Fs from \"node:fs\";\nimport * as Path from \"node:path\";\n\ntype CompletePackageJson = {\n type: \"module\" | \"commonjs\";\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n peerDependencies: Record<string, string>;\n};\n\ntype PackageJson = Format<Partial<CompletePackageJson>>;\n\nconst getPackageJson = (cwd: string): PackageJson => {\n const path: string = Path.resolve(cwd, \"package.json\");\n\n if (!Fs.existsSync(path)) {\n throw new Error(\"Failed to find package.json\");\n }\n\n const rawPackageJson: string = Fs.readFileSync(path, \"utf-8\");\n\n return JSON.parse(rawPackageJson);\n};\n\nexport type { CompletePackageJson, PackageJson };\nexport { getPackageJson };\n","import type { LoadResult, ResolveIdResult } from \"rollup\";\nimport type { Plugin, UserConfig } from \"vite\";\n\nimport type {\n ResolvedBuildOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\nimport type { PackageJson } from \"#/functions/package-json\";\n\nimport { builtinModules } from \"node:module\";\n\nimport { toMerged } from \"es-toolkit\";\n\nimport { getPackageJson } from \"#/functions/package-json\";\n\nconst VIRTUAL_ENTRY = \"virtual:vitend-entry\" as const;\n\nconst VIRTUAL_ENTRY_RESOLVED = `\\0${VIRTUAL_ENTRY}` as const;\n\nconst buildPlugin = (opts: ResolvedVitendOptions): Plugin => {\n const build: ResolvedBuildOptions = opts.build;\n\n const packageJson: PackageJson = getPackageJson(opts.cwd);\n\n return {\n name: \"vitend/build\",\n apply: \"build\",\n config: (config: UserConfig): UserConfig => {\n let result: UserConfig = {};\n\n const baseConfig: UserConfig = {\n ssr: {\n external: true,\n noExternal: void 0,\n target: \"webworker\",\n },\n build: {\n copyPublicDir: false,\n },\n };\n\n result = toMerged(baseConfig, config);\n\n const overrideConfig: UserConfig = {\n build: {\n ssr: true,\n outDir: build.outputDir,\n rollupOptions: {\n input: VIRTUAL_ENTRY,\n output: {\n entryFileNames: build.outputFile,\n format:\n packageJson.type === \"module\" ? \"esm\" : \"cjs\",\n },\n external: [\n ...builtinModules,\n /^node:/,\n ],\n },\n minify: build.minify,\n },\n };\n\n result = toMerged(result, overrideConfig);\n\n return result;\n },\n resolveId: (id: string): ResolveIdResult => {\n if (id !== VIRTUAL_ENTRY) return void 0;\n return VIRTUAL_ENTRY_RESOLVED;\n },\n load: async (id: string): Promise<LoadResult> => {\n if (id !== VIRTUAL_ENTRY_RESOLVED) return void 0;\n\n let code: string = \"\";\n\n code += `import options from \"${opts.entry}\";`;\n code += `import { serve } from \"vitend/runtime\";`;\n\n // vercel export\n\n if (build.target === \"vercel\") {\n code += `const server = serve({ ...options, manual: true });`;\n code += `export default server;`;\n\n return code;\n }\n\n // default export\n\n code += `serve({`;\n code += `...options,`;\n\n if (build.host !== \"localhost\")\n code += `hostname: \"${build.host}\",`;\n if (build.port !== 3000) code += `port: ${build.port},`;\n\n if (build.https) {\n code += `tls: {`;\n if (build.https.cert) code += `cert: \"${build.https.cert}\",`;\n if (build.https.key) code += `key: \"${build.https.key}\",`;\n if (build.https.passphrase)\n code += `passphrase: \"${build.https.passphrase}\",`;\n code += `},`;\n }\n\n code += `});`;\n\n return code;\n },\n };\n};\n\nexport { buildPlugin };\n","import type HTTP from \"node:http\";\n\nimport type { Server, ServerHandler, ServerOptions } from \"srvx\";\nimport type { Connect, Plugin, UserConfig, ViteDevServer } from \"vite\";\n\nimport type {\n ResolvedDevOptions,\n ResolvedHttpsOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\n\nimport { toMerged } from \"es-toolkit\";\nimport { serve } from \"srvx\";\n\ntype CreateMiddlewareOptions = {\n vite: ViteDevServer;\n server: Server;\n};\n\nconst createMiddleware = ({ vite, server }: CreateMiddlewareOptions) => {\n return async (\n req: Connect.IncomingMessage,\n res: HTTP.ServerResponse,\n _next: Connect.NextFunction,\n ): Promise<void> => {\n const isHttps: boolean =\n vite.config.server.https?.cert !== void 0 &&\n vite.config.server.https?.key !== void 0;\n\n const protocol: string = `http${isHttps ? \"s\" : \"\"}`;\n\n const host: string = process.env.HOST ?? \"localhost\";\n\n const port: number = vite.config.server.port;\n\n const path: string = req.url ?? \"\";\n\n const url: URL = new URL(`${protocol}://${host}:${port}${path}`);\n\n const body: Connect.IncomingMessage | undefined =\n req.method !== \"GET\" && req.method !== \"HEAD\" ? req : void 0;\n\n const request: Request = new Request(url, {\n method: req.method,\n headers: req.headers,\n body,\n duplex: \"half\",\n } as RequestInit);\n\n const response: Response = await server.fetch(request);\n\n res.statusCode = response.status;\n\n response.headers.forEach((value: string, key: string): void => {\n res.setHeader(key, value);\n });\n\n if (!response.body) {\n res.end();\n return void 0;\n }\n\n const reader: ReadableStreamDefaultReader<Uint8Array<ArrayBuffer>> =\n response.body.getReader();\n\n const stream = async (): Promise<void> => {\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) break;\n\n res.write(value);\n }\n\n res.end();\n } catch {\n res.end();\n }\n };\n\n await stream();\n };\n};\n\ntype Middleware = ReturnType<typeof createMiddleware>;\n\nconst devPlugin = (opts: ResolvedVitendOptions): Plugin => {\n const dev: ResolvedDevOptions = opts.dev;\n const https: ResolvedHttpsOptions = opts.dev.https ?? {};\n\n return {\n name: \"vitend/dev\",\n apply: \"serve\",\n config(config: UserConfig): UserConfig {\n const devConfig: UserConfig = {\n build: {\n ssr: true,\n rollupOptions: {\n input: opts.entry,\n },\n },\n server: {\n host: dev.host,\n port: dev.port,\n ...(https.cert !== void 0 && https.key !== void 0\n ? {\n https: {\n cert: https.cert,\n key: https.key,\n passphrase: https.passphrase,\n },\n }\n : {}),\n },\n };\n\n return toMerged(config, devConfig);\n },\n configureServer: async (vite: ViteDevServer): Promise<void> => {\n const serverOptions: ServerOptions = (\n await vite.ssrLoadModule(opts.entry)\n ).default;\n\n const server: Server<ServerHandler> = serve({\n // base\n gracefulShutdown: false,\n // user\n ...serverOptions,\n // override\n manual: true,\n hostname: dev.host,\n port: dev.port,\n tls: {\n cert: https.cert,\n key: https.key,\n passphrase: https.passphrase,\n },\n });\n\n const middleware: Middleware = createMiddleware({\n vite,\n server,\n });\n\n vite.middlewares.use(middleware);\n },\n };\n};\n\nexport { devPlugin };\n","import type { Plugin } from \"vite\";\n\nimport type { VitendOptions } from \"#/@types/options/default\";\nimport type {\n ResolvedBuildOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\n\nimport * as Path from \"node:path\";\n\nimport copy from \"rollup-plugin-copy\";\n\nimport { createOptions } from \"#/functions/options\";\nimport { buildPlugin } from \"#/vite/build\";\nimport { devPlugin } from \"#/vite/dev\";\n\n/**\n * The `vitend` plugin.\n *\n * ### Example\n *\n * ```ts\n * // ./vite.config.ts\n *\n * import { defineConfig } from \"vite\";\n * import { vitend } from \"vitend/vite\";\n *\n * export default defineConfig({\n * plugins: [\n * vitend(),\n * ],\n * });\n * ```\n */\nconst vitend = (options?: VitendOptions): Plugin[] => {\n const opts: ResolvedVitendOptions = createOptions(options);\n\n const build: ResolvedBuildOptions = opts.build;\n\n return [\n devPlugin({\n ...opts,\n }),\n buildPlugin({\n ...opts,\n }),\n ...(build.target === \"default\" && build.copyPublicDir\n ? ([\n copy({\n hook: \"closeBundle\",\n targets: [\n {\n src: Path.resolve(build.publicDir, \"**\", \"*\"),\n dest: Path.resolve(\n build.outputDir,\n build.publicDir,\n ),\n },\n ],\n }),\n ] as Plugin[])\n : []),\n ];\n};\n\nexport { vitend };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vite.mjs","names":[],"sources":["../src/functions/entry.ts","../src/functions/options.ts","../src/functions/package-json.ts","../src/vite/build.ts","../src/vite/dev.ts","../src/vite/vitend.ts"],"sourcesContent":["import * as Fs from \"node:fs\";\nimport * as Path from \"node:path\";\n\nconst ENTRY_DEFAULT: string[] = [\n \"./src/index.ts\",\n \"./src/index.js\",\n];\n\nconst getEntry = (cwd: string, entry?: string): string => {\n if (!entry) {\n for (const ent of ENTRY_DEFAULT) {\n if (Fs.existsSync(Path.resolve(cwd, ent))) {\n entry = ent;\n break;\n }\n }\n\n if (!entry) {\n throw new Error(\"No entry file found\");\n }\n }\n\n return Path.resolve(cwd, entry);\n};\n\nexport { getEntry };\n","import type { Omit } from \"ts-vista\";\n\nimport type { VitendOptions } from \"#/@types/options/default\";\nimport type {\n ResolvedDefaultBuildOptions,\n ResolvedVercelBuildOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\n\nimport { toMerged } from \"es-toolkit\";\n\nimport { getEntry } from \"#/functions/entry\";\n\nconst OPTIONS_BUILD_VERCEL: ResolvedVercelBuildOptions = {\n target: \"vercel\",\n outputDir: \"./dist\",\n outputFile: \"index.js\",\n minify: false,\n};\n\nconst OPTIONS_BUILD_DEFAULT: ResolvedDefaultBuildOptions = {\n target: \"default\",\n host: \"localhost\",\n port: 3000,\n outputDir: \"./dist\",\n outputFile: \"index.js\",\n minify: false,\n publicDir: \"./public\",\n copyPublicDir: false,\n};\n\nconst OPTIONS_DEFAULT: Omit<ResolvedVitendOptions, \"entry\" | \"build\"> = {\n cwd: process.cwd(),\n dev: {\n host: \"localhost\",\n port: 3001,\n },\n};\n\nconst getDefaultOptions = (\n isVercel: boolean,\n): Omit<ResolvedVitendOptions, \"entry\"> => {\n return {\n ...OPTIONS_DEFAULT,\n build: isVercel ? OPTIONS_BUILD_VERCEL : OPTIONS_BUILD_DEFAULT,\n };\n};\n\nconst createOptions = (options?: VitendOptions): ResolvedVitendOptions => {\n const isVercel: boolean = options?.build?.target === \"vercel\";\n\n const merged = toMerged(getDefaultOptions(isVercel), options ?? {});\n\n return {\n ...merged,\n entry: getEntry(merged.cwd, options?.entry),\n };\n};\n\nexport { createOptions };\n","import type { Format, Partial } from \"ts-vista\";\n\nimport * as Fs from \"node:fs\";\nimport * as Path from \"node:path\";\n\ntype CompletePackageJson = {\n type: \"module\" | \"commonjs\";\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n peerDependencies: Record<string, string>;\n};\n\ntype PackageJson = Format<Partial<CompletePackageJson>>;\n\nconst getPackageJson = (cwd: string): PackageJson => {\n const path: string = Path.resolve(cwd, \"package.json\");\n\n if (!Fs.existsSync(path)) {\n throw new Error(\"Failed to find package.json\");\n }\n\n const rawPackageJson: string = Fs.readFileSync(path, \"utf-8\");\n\n return JSON.parse(rawPackageJson);\n};\n\nexport type { CompletePackageJson, PackageJson };\nexport { getPackageJson };\n","import type { LoadResult, ResolveIdResult } from \"rollup\";\nimport type { Plugin, UserConfig } from \"vite\";\n\nimport type {\n ResolvedBuildOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\nimport type { PackageJson } from \"#/functions/package-json\";\n\nimport { builtinModules } from \"node:module\";\n\nimport { toMerged } from \"es-toolkit\";\n\nimport { getPackageJson } from \"#/functions/package-json\";\n\nconst VIRTUAL_ENTRY = \"virtual:vitend-entry\" as const;\n\nconst VIRTUAL_ENTRY_RESOLVED = `\\0${VIRTUAL_ENTRY}` as const;\n\nconst buildPlugin = (opts: ResolvedVitendOptions): Plugin => {\n const build: ResolvedBuildOptions = opts.build;\n\n const packageJson: PackageJson = getPackageJson(opts.cwd);\n\n return {\n name: \"vitend/build\",\n apply: \"build\",\n config: (config: UserConfig): UserConfig => {\n let result: UserConfig = {};\n\n const baseConfig: UserConfig = {\n ssr: {\n external: true,\n noExternal: void 0,\n target: \"webworker\",\n },\n build: {\n copyPublicDir: false,\n },\n };\n\n result = toMerged(baseConfig, config);\n\n const overrideConfig: UserConfig = {\n build: {\n ssr: true,\n outDir: build.outputDir,\n rollupOptions: {\n input: VIRTUAL_ENTRY,\n output: {\n entryFileNames: build.outputFile,\n format:\n packageJson.type === \"module\" ? \"esm\" : \"cjs\",\n },\n external: [\n ...builtinModules,\n /^node:/,\n ],\n },\n minify: build.minify,\n },\n };\n\n result = toMerged(result, overrideConfig);\n\n return result;\n },\n resolveId: (id: string): ResolveIdResult => {\n if (id !== VIRTUAL_ENTRY) return void 0;\n return VIRTUAL_ENTRY_RESOLVED;\n },\n load: async (id: string): Promise<LoadResult> => {\n if (id !== VIRTUAL_ENTRY_RESOLVED) return void 0;\n\n let code: string = \"\";\n\n code += `import options from \"${opts.entry}\";`;\n code += `import { serve } from \"vitend/runtime\";`;\n\n // vercel export\n\n if (build.target === \"vercel\") {\n code += `const server = serve({ ...options, manual: true });`;\n code += `export default server;`;\n\n return code;\n }\n\n // default export\n\n code += `serve({`;\n code += `...options,`;\n\n if (build.host !== \"localhost\")\n code += `hostname: \"${build.host}\",`;\n if (build.port !== 3000) code += `port: ${build.port},`;\n\n if (build.https) {\n code += `tls: {`;\n if (build.https.cert) code += `cert: \"${build.https.cert}\",`;\n if (build.https.key) code += `key: \"${build.https.key}\",`;\n if (build.https.passphrase)\n code += `passphrase: \"${build.https.passphrase}\",`;\n code += `},`;\n }\n\n code += `});`;\n\n return code;\n },\n };\n};\n\nexport { buildPlugin };\n","import type HTTP from \"node:http\";\n\nimport type { Server, ServerHandler, ServerOptions } from \"srvx\";\nimport type { Connect, Plugin, UserConfig, ViteDevServer } from \"vite\";\n\nimport type {\n ResolvedDevOptions,\n ResolvedHttpsOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\n\nimport { toMerged } from \"es-toolkit\";\nimport { serve } from \"srvx\";\n\ntype CreateMiddlewareOptions = {\n vite: ViteDevServer;\n server: Server;\n};\n\nconst createRequestHeaders = (headers: HTTP.IncomingHttpHeaders): Headers => {\n const result: Headers = new Headers();\n\n const entries: [\n string,\n string | string[] | undefined,\n ][] = Object.entries(headers);\n\n for (let i: number = 0; i < entries.length; i++) {\n const entry:\n | [\n string,\n string | string[] | undefined,\n ]\n | undefined = entries[i];\n\n if (entry === void 0) continue;\n\n const [key, value] = entry;\n\n // ignore HTTP/2 pseudo-headers\n if (key.startsWith(\":\")) continue;\n\n if (value === void 0) continue;\n\n if (Array.isArray(value)) {\n for (let j: number = 0; j < value.length; j++) {\n const vl: string | undefined = value[j];\n\n if (vl === void 0) continue;\n\n result.append(key, vl);\n }\n } else {\n result.set(key, value);\n }\n }\n\n return result;\n};\n\nconst createMiddleware = ({ vite, server }: CreateMiddlewareOptions) => {\n return async (\n req: Connect.IncomingMessage,\n res: HTTP.ServerResponse,\n _next: Connect.NextFunction,\n ): Promise<void> => {\n const isHttps: boolean =\n vite.config.server.https?.cert !== void 0 &&\n vite.config.server.https?.key !== void 0;\n\n const protocol: string = `http${isHttps ? \"s\" : \"\"}`;\n\n const host: string = process.env.HOST ?? \"localhost\";\n\n const port: number = vite.config.server.port;\n\n const path: string = req.url ?? \"\";\n\n const url: URL = new URL(`${protocol}://${host}:${port}${path}`);\n\n const body: Connect.IncomingMessage | undefined =\n req.method !== \"GET\" && req.method !== \"HEAD\" ? req : void 0;\n\n const request: Request = new Request(url, {\n method: req.method,\n headers: createRequestHeaders(req.headers),\n body,\n duplex: \"half\",\n } as RequestInit);\n\n const response: Response = await server.fetch(request);\n\n res.statusCode = response.status;\n\n response.headers.forEach((value: string, key: string): void => {\n res.setHeader(key, value);\n });\n\n if (!response.body) {\n res.end();\n return void 0;\n }\n\n const reader: ReadableStreamDefaultReader<Uint8Array<ArrayBuffer>> =\n response.body.getReader();\n\n const stream = async (): Promise<void> => {\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) break;\n\n res.write(value);\n }\n\n res.end();\n } catch {\n res.end();\n }\n };\n\n await stream();\n };\n};\n\ntype Middleware = ReturnType<typeof createMiddleware>;\n\nconst devPlugin = (opts: ResolvedVitendOptions): Plugin => {\n const dev: ResolvedDevOptions = opts.dev;\n const https: ResolvedHttpsOptions = opts.dev.https ?? {};\n\n return {\n name: \"vitend/dev\",\n apply: \"serve\",\n config(config: UserConfig): UserConfig {\n const devConfig: UserConfig = {\n build: {\n ssr: true,\n rollupOptions: {\n input: opts.entry,\n },\n },\n server: {\n host: dev.host,\n port: dev.port,\n ...(https.cert !== void 0 && https.key !== void 0\n ? {\n https: {\n cert: https.cert,\n key: https.key,\n passphrase: https.passphrase,\n },\n }\n : {}),\n },\n };\n\n return toMerged(config, devConfig);\n },\n configureServer: async (vite: ViteDevServer): Promise<void> => {\n const serverOptions: ServerOptions = (\n await vite.ssrLoadModule(opts.entry)\n ).default;\n\n const server: Server<ServerHandler> = serve({\n // base\n gracefulShutdown: false,\n // user\n ...serverOptions,\n // override\n manual: true,\n hostname: dev.host,\n port: dev.port,\n tls: {\n cert: https.cert,\n key: https.key,\n passphrase: https.passphrase,\n },\n });\n\n const middleware: Middleware = createMiddleware({\n vite,\n server,\n });\n\n vite.middlewares.use(middleware);\n },\n };\n};\n\nexport { devPlugin };\n","import type { Plugin } from \"vite\";\n\nimport type { VitendOptions } from \"#/@types/options/default\";\nimport type {\n ResolvedBuildOptions,\n ResolvedVitendOptions,\n} from \"#/@types/options/resolved\";\n\nimport * as Path from \"node:path\";\n\nimport { copy } from \"rolldown-plugin-copy\";\n\nimport { createOptions } from \"#/functions/options\";\nimport { buildPlugin } from \"#/vite/build\";\nimport { devPlugin } from \"#/vite/dev\";\n\n/**\n * The `vitend` plugin.\n *\n * ### Example\n *\n * ```ts\n * // ./vite.config.ts\n *\n * import { defineConfig } from \"vite\";\n * import { vitend } from \"vitend/vite\";\n *\n * export default defineConfig({\n * plugins: [\n * vitend(),\n * ],\n * });\n * ```\n */\nconst vitend = (options?: VitendOptions): Plugin[] => {\n const opts: ResolvedVitendOptions = createOptions(options);\n\n const build: ResolvedBuildOptions = opts.build;\n\n return [\n devPlugin({\n ...opts,\n }),\n buildPlugin({\n ...opts,\n }),\n ...(build.target === \"default\" && build.copyPublicDir\n ? ([\n copy({\n targets: [\n {\n src: Path.resolve(build.publicDir, \"**\", \"*\"),\n dest: Path.resolve(\n build.outputDir,\n build.publicDir,\n ),\n },\n ],\n }),\n ] as Plugin[])\n : []),\n ];\n};\n\nexport { vitend };\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://raw.githubusercontent.com/vitejs/vite-plugin-registry/refs/heads/main/data/schema/extended-package-json.schema.json",
|
|
3
3
|
"name": "vitend",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.3.0",
|
|
5
5
|
"description": "A library for backend development with Vite",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"vitend",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
],
|
|
59
59
|
"dependencies": {
|
|
60
60
|
"es-toolkit": "^1.40.0",
|
|
61
|
-
"
|
|
61
|
+
"rolldown-plugin-copy": "~0.1.1",
|
|
62
62
|
"srvx": "~0.11.0",
|
|
63
63
|
"ts-vista": "~0.2.3"
|
|
64
64
|
},
|
|
@@ -70,6 +70,14 @@
|
|
|
70
70
|
},
|
|
71
71
|
"compatiblePackages": {
|
|
72
72
|
"schemaVersion": 1,
|
|
73
|
+
"rollup": {
|
|
74
|
+
"type": "incompatible",
|
|
75
|
+
"reason": "Uses Vite-specific APIs"
|
|
76
|
+
},
|
|
77
|
+
"rolldown": {
|
|
78
|
+
"type": "incompatible",
|
|
79
|
+
"reason": "Uses Vite-specific APIs"
|
|
80
|
+
},
|
|
73
81
|
"vite": {
|
|
74
82
|
"type": "compatible",
|
|
75
83
|
"versions": "^7.0.0 || ^8.0.0"
|