phial 0.0.1

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 (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -0
  3. package/bin/phial.mjs +6 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.js +2 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.js +2 -0
  8. package/dist/lib/cli/index.d.ts +5 -0
  9. package/dist/lib/cli/index.d.ts.map +1 -0
  10. package/dist/lib/cli/index.js +101 -0
  11. package/dist/lib/cli/index.js.map +1 -0
  12. package/dist/lib/generated-routes.d.ts +176 -0
  13. package/dist/lib/server-routes/errors.js +16 -0
  14. package/dist/lib/server-routes/errors.js.map +1 -0
  15. package/dist/lib/vite-plugin/config.d.ts +54 -0
  16. package/dist/lib/vite-plugin/config.d.ts.map +1 -0
  17. package/dist/lib/vite-plugin/config.js +54 -0
  18. package/dist/lib/vite-plugin/config.js.map +1 -0
  19. package/dist/lib/vite-plugin/generated/client-entry.js +36 -0
  20. package/dist/lib/vite-plugin/generated/client-entry.js.map +1 -0
  21. package/dist/lib/vite-plugin/generated/virtual-modules.js +940 -0
  22. package/dist/lib/vite-plugin/generated/virtual-modules.js.map +1 -0
  23. package/dist/lib/vite-plugin/host/index.d.ts +4 -0
  24. package/dist/lib/vite-plugin/host/index.js +5 -0
  25. package/dist/lib/vite-plugin/host/plugin-build.d.ts +15 -0
  26. package/dist/lib/vite-plugin/host/plugin-build.d.ts.map +1 -0
  27. package/dist/lib/vite-plugin/host/plugin-build.js +242 -0
  28. package/dist/lib/vite-plugin/host/plugin-build.js.map +1 -0
  29. package/dist/lib/vite-plugin/host/plugin-dev-server.d.ts +19 -0
  30. package/dist/lib/vite-plugin/host/plugin-dev-server.d.ts.map +1 -0
  31. package/dist/lib/vite-plugin/host/plugin-dev-server.js +255 -0
  32. package/dist/lib/vite-plugin/host/plugin-dev-server.js.map +1 -0
  33. package/dist/lib/vite-plugin/host/plugin-prepare.d.ts +12 -0
  34. package/dist/lib/vite-plugin/host/plugin-prepare.d.ts.map +1 -0
  35. package/dist/lib/vite-plugin/host/plugin-prepare.js +29 -0
  36. package/dist/lib/vite-plugin/host/plugin-prepare.js.map +1 -0
  37. package/dist/lib/vite-plugin/host/plugin-server.d.ts +19 -0
  38. package/dist/lib/vite-plugin/host/plugin-server.d.ts.map +1 -0
  39. package/dist/lib/vite-plugin/host/plugin-server.js +60 -0
  40. package/dist/lib/vite-plugin/host/plugin-server.js.map +1 -0
  41. package/dist/lib/vite-plugin/index.d.ts +9 -0
  42. package/dist/lib/vite-plugin/index.d.ts.map +1 -0
  43. package/dist/lib/vite-plugin/index.js +261 -0
  44. package/dist/lib/vite-plugin/index.js.map +1 -0
  45. package/dist/lib/vite-plugin/scanners/app-pages-scanner.js +162 -0
  46. package/dist/lib/vite-plugin/scanners/app-pages-scanner.js.map +1 -0
  47. package/dist/lib/vite-plugin/scanners/app-runtime-scanner.js +39 -0
  48. package/dist/lib/vite-plugin/scanners/app-runtime-scanner.js.map +1 -0
  49. package/dist/lib/vite-plugin/scanners/route-manifest.js +60 -0
  50. package/dist/lib/vite-plugin/scanners/route-manifest.js.map +1 -0
  51. package/dist/lib/vite-plugin/scanners/routes-scanner.js +72 -0
  52. package/dist/lib/vite-plugin/scanners/routes-scanner.js.map +1 -0
  53. package/dist/lib/vite-plugin/scanners/scanner-utils.js +129 -0
  54. package/dist/lib/vite-plugin/scanners/scanner-utils.js.map +1 -0
  55. package/dist/lib/vite-plugin/scanners/server-routes-scanner.js +83 -0
  56. package/dist/lib/vite-plugin/scanners/server-routes-scanner.js.map +1 -0
  57. package/dist/lib/vite-plugin/scanners/types-generator.d.ts +9 -0
  58. package/dist/lib/vite-plugin/scanners/types-generator.d.ts.map +1 -0
  59. package/dist/lib/vite-plugin/scanners/types-generator.js +190 -0
  60. package/dist/lib/vite-plugin/scanners/types-generator.js.map +1 -0
  61. package/dist/vite-plugin.d.ts +7 -0
  62. package/dist/vite-plugin.js +8 -0
  63. package/package.json +89 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Maofeng <hornjs@qq.com> (https://github.com/hornjs)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,27 @@
1
+ # phial
2
+
3
+ `phial` is the public package surface for the Vue pagelet runtime and Vite plugin that powers phial apps.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pnpm add phial
9
+ ```
10
+
11
+ ## Use the plugin
12
+
13
+ ```ts
14
+ import { defineConfig, phialVitePlugin } from "phial/vite-plugin";
15
+
16
+ export default defineConfig({
17
+ plugins: [phialVitePlugin()],
18
+ });
19
+ ```
20
+
21
+ ## Public entry points
22
+
23
+ - `phial`
24
+ - `phial/vite-plugin`
25
+
26
+ The CLI ships as `phial` via the package `bin` field and also lives at `bin/phial.mjs`.
27
+ `phial` re-exports the `vuepagelet` runtime surface.
package/bin/phial.mjs ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+
3
+ import process from "node:process";
4
+ import { runPhialCli } from "../dist/cli.js";
5
+
6
+ process.exitCode = await runPhialCli(process.argv.slice(2));
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import { runPhialCli } from "./lib/cli/index.js";
2
+ export { runPhialCli };
package/dist/cli.js ADDED
@@ -0,0 +1,2 @@
1
+ import { runPhialCli } from "./lib/cli/index.js";
2
+ export { runPhialCli };
@@ -0,0 +1 @@
1
+ export * from "vuepagelet";
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from "vuepagelet";
2
+ export {};
@@ -0,0 +1,5 @@
1
+ //#region src/lib/cli/index.d.ts
2
+ declare function runPhialCli(argv?: string[]): Promise<number>;
3
+ //#endregion
4
+ export { runPhialCli };
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/lib/cli/index.ts"],"mappings":";iBASsB,WAAA,CAAY,IAAA,cAAyC,OAAA"}
@@ -0,0 +1,101 @@
1
+ import { buildPhialApp } from "../vite-plugin/host/plugin-build.js";
2
+ import { startPhialDevServer } from "../vite-plugin/host/plugin-dev-server.js";
3
+ import { preparePhialApp } from "../vite-plugin/host/plugin-prepare.js";
4
+ import { startPhialServer } from "../vite-plugin/host/plugin-server.js";
5
+ import "../vite-plugin/host/index.js";
6
+ import { resolve } from "node:path";
7
+ import process from "node:process";
8
+ //#region src/lib/cli/index.ts
9
+ async function runPhialCli(argv = process.argv.slice(2)) {
10
+ const args = [...argv];
11
+ const command = args.shift();
12
+ if (!command) {
13
+ printUsage();
14
+ return 0;
15
+ }
16
+ if (command === "dev") {
17
+ const handle = await startPhialDevServer(parseSharedOptions(args));
18
+ console.log(`phial dev server: ${handle.url}`);
19
+ registerShutdown(async () => {
20
+ await handle.close();
21
+ process.exit(0);
22
+ });
23
+ return 0;
24
+ }
25
+ if (command === "build") {
26
+ await buildPhialApp(parseSharedOptions(args));
27
+ return 0;
28
+ }
29
+ if (command === "prepare") {
30
+ const result = await preparePhialApp(parseSharedOptions(args));
31
+ console.log(`phial prepare: wrote ${result.middlewareFile}`);
32
+ return 0;
33
+ }
34
+ if (command === "start") {
35
+ const handle = await startPhialServer(parseSharedOptions(args));
36
+ console.log(`phial server: ${handle.url}`);
37
+ registerShutdown(async () => {
38
+ await handle.close();
39
+ process.exit(0);
40
+ });
41
+ return 0;
42
+ }
43
+ printUsage();
44
+ return 1;
45
+ }
46
+ function parseSharedOptions(argv) {
47
+ const options = {};
48
+ while (argv.length > 0) {
49
+ const token = argv.shift();
50
+ if (!token) continue;
51
+ if (!token.startsWith("--") && !options.root) {
52
+ options.root = resolve(token);
53
+ continue;
54
+ }
55
+ if (token === "--host") {
56
+ options.host = argv.shift();
57
+ continue;
58
+ }
59
+ if (token === "--port") {
60
+ const value = argv.shift();
61
+ if (value) options.port = Number(value);
62
+ continue;
63
+ }
64
+ if (token === "--config") {
65
+ const value = argv.shift();
66
+ if (value) options.configFile = value;
67
+ continue;
68
+ }
69
+ if (token === "--mode") {
70
+ const value = argv.shift();
71
+ if (value) options.mode = value;
72
+ continue;
73
+ }
74
+ if (token === "--watch") {
75
+ options.watch = true;
76
+ continue;
77
+ }
78
+ }
79
+ return options;
80
+ }
81
+ function registerShutdown(shutdown) {
82
+ process.on("SIGINT", () => {
83
+ shutdown();
84
+ });
85
+ process.on("SIGTERM", () => {
86
+ shutdown();
87
+ });
88
+ }
89
+ function printUsage() {
90
+ console.log("Usage: phial <command> [root] [--config phial.config.ts] [--mode production]");
91
+ console.log("");
92
+ console.log("Commands:");
93
+ console.log(" phial dev [root] [--port 3000] [--host 0.0.0.0] [--config phial.config.ts]");
94
+ console.log(" phial build [root] [--watch] [--config phial.config.ts] [--mode production]");
95
+ console.log(" phial prepare [root] [--config phial.config.ts] [--mode development]");
96
+ console.log(" phial start [root] [--port 3000] [--host 0.0.0.0] [--config phial.config.ts] [--mode production]");
97
+ }
98
+ //#endregion
99
+ export { runPhialCli };
100
+
101
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/lib/cli/index.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport process from \"node:process\";\nimport {\n buildPhialApp,\n preparePhialApp,\n startPhialDevServer,\n startPhialServer,\n} from \"../vite-plugin/host\";\n\nexport async function runPhialCli(argv: string[] = process.argv.slice(2)): Promise<number> {\n const args = [...argv];\n const command = args.shift();\n\n if (!command) {\n printUsage();\n return 0;\n }\n\n if (command === \"dev\") {\n const options = parseSharedOptions(args);\n const handle = await startPhialDevServer(options);\n\n console.log(`phial dev server: ${handle.url}`);\n registerShutdown(async () => {\n await handle.close();\n process.exit(0);\n });\n return 0;\n }\n\n if (command === \"build\") {\n const options = parseSharedOptions(args);\n await buildPhialApp(options);\n return 0;\n }\n\n if (command === \"prepare\") {\n const options = parseSharedOptions(args);\n const result = await preparePhialApp(options);\n console.log(`phial prepare: wrote ${result.middlewareFile}`);\n return 0;\n }\n\n if (command === \"start\") {\n const options = parseSharedOptions(args);\n const handle = await startPhialServer(options);\n\n console.log(`phial server: ${handle.url}`);\n registerShutdown(async () => {\n await handle.close();\n process.exit(0);\n });\n return 0;\n }\n\n printUsage();\n return 1;\n}\n\nfunction parseSharedOptions(argv: string[]) {\n const options: Record<string, unknown> = {};\n\n while (argv.length > 0) {\n const token = argv.shift();\n\n if (!token) {\n continue;\n }\n\n if (!token.startsWith(\"--\") && !options.root) {\n options.root = resolve(token);\n continue;\n }\n\n if (token === \"--host\") {\n options.host = argv.shift();\n continue;\n }\n\n if (token === \"--port\") {\n const value = argv.shift();\n if (value) {\n options.port = Number(value);\n }\n continue;\n }\n\n if (token === \"--config\") {\n const value = argv.shift();\n if (value) {\n options.configFile = value;\n }\n continue;\n }\n\n if (token === \"--mode\") {\n const value = argv.shift();\n if (value) {\n options.mode = value;\n }\n continue;\n }\n\n if (token === \"--watch\") {\n options.watch = true;\n continue;\n }\n }\n\n return options;\n}\n\nfunction registerShutdown(shutdown: () => Promise<void>) {\n process.on(\"SIGINT\", () => {\n void shutdown();\n });\n\n process.on(\"SIGTERM\", () => {\n void shutdown();\n });\n}\n\nfunction printUsage() {\n console.log(\"Usage: phial <command> [root] [--config phial.config.ts] [--mode production]\");\n console.log(\"\");\n console.log(\"Commands:\");\n console.log(\" phial dev [root] [--port 3000] [--host 0.0.0.0] [--config phial.config.ts]\");\n console.log(\" phial build [root] [--watch] [--config phial.config.ts] [--mode production]\");\n console.log(\" phial prepare [root] [--config phial.config.ts] [--mode development]\");\n console.log(\n \" phial start [root] [--port 3000] [--host 0.0.0.0] [--config phial.config.ts] [--mode production]\",\n );\n}\n"],"mappings":";;;;;;;;AASA,eAAsB,YAAY,OAAiB,QAAQ,KAAK,MAAM,EAAE,EAAmB;CACzF,MAAM,OAAO,CAAC,GAAG,KAAK;CACtB,MAAM,UAAU,KAAK,OAAO;AAE5B,KAAI,CAAC,SAAS;AACZ,cAAY;AACZ,SAAO;;AAGT,KAAI,YAAY,OAAO;EAErB,MAAM,SAAS,MAAM,oBADL,mBAAmB,KAAK,CACS;AAEjD,UAAQ,IAAI,qBAAqB,OAAO,MAAM;AAC9C,mBAAiB,YAAY;AAC3B,SAAM,OAAO,OAAO;AACpB,WAAQ,KAAK,EAAE;IACf;AACF,SAAO;;AAGT,KAAI,YAAY,SAAS;AAEvB,QAAM,cADU,mBAAmB,KAAK,CACZ;AAC5B,SAAO;;AAGT,KAAI,YAAY,WAAW;EAEzB,MAAM,SAAS,MAAM,gBADL,mBAAmB,KAAK,CACK;AAC7C,UAAQ,IAAI,wBAAwB,OAAO,iBAAiB;AAC5D,SAAO;;AAGT,KAAI,YAAY,SAAS;EAEvB,MAAM,SAAS,MAAM,iBADL,mBAAmB,KAAK,CACM;AAE9C,UAAQ,IAAI,iBAAiB,OAAO,MAAM;AAC1C,mBAAiB,YAAY;AAC3B,SAAM,OAAO,OAAO;AACpB,WAAQ,KAAK,EAAE;IACf;AACF,SAAO;;AAGT,aAAY;AACZ,QAAO;;AAGT,SAAS,mBAAmB,MAAgB;CAC1C,MAAM,UAAmC,EAAE;AAE3C,QAAO,KAAK,SAAS,GAAG;EACtB,MAAM,QAAQ,KAAK,OAAO;AAE1B,MAAI,CAAC,MACH;AAGF,MAAI,CAAC,MAAM,WAAW,KAAK,IAAI,CAAC,QAAQ,MAAM;AAC5C,WAAQ,OAAO,QAAQ,MAAM;AAC7B;;AAGF,MAAI,UAAU,UAAU;AACtB,WAAQ,OAAO,KAAK,OAAO;AAC3B;;AAGF,MAAI,UAAU,UAAU;GACtB,MAAM,QAAQ,KAAK,OAAO;AAC1B,OAAI,MACF,SAAQ,OAAO,OAAO,MAAM;AAE9B;;AAGF,MAAI,UAAU,YAAY;GACxB,MAAM,QAAQ,KAAK,OAAO;AAC1B,OAAI,MACF,SAAQ,aAAa;AAEvB;;AAGF,MAAI,UAAU,UAAU;GACtB,MAAM,QAAQ,KAAK,OAAO;AAC1B,OAAI,MACF,SAAQ,OAAO;AAEjB;;AAGF,MAAI,UAAU,WAAW;AACvB,WAAQ,QAAQ;AAChB;;;AAIJ,QAAO;;AAGT,SAAS,iBAAiB,UAA+B;AACvD,SAAQ,GAAG,gBAAgB;AACpB,YAAU;GACf;AAEF,SAAQ,GAAG,iBAAiB;AACrB,YAAU;GACf;;AAGJ,SAAS,aAAa;AACpB,SAAQ,IAAI,+EAA+E;AAC3F,SAAQ,IAAI,GAAG;AACf,SAAQ,IAAI,YAAY;AACxB,SAAQ,IAAI,+EAA+E;AAC3F,SAAQ,IAAI,gFAAgF;AAC5F,SAAQ,IAAI,yEAAyE;AACrF,SAAQ,IACN,qGACD"}
@@ -0,0 +1,176 @@
1
+ declare namespace PhialGeneratedTypes {
2
+ type PageMiddleware = import("vuepagelet/integration").PageMiddleware;
3
+ type LoaderContext = import("vuepagelet/integration").LoaderContext;
4
+ type ActionContext = import("vuepagelet/integration").ActionContext;
5
+ type ShouldRevalidateArgs = import("vuepagelet/integration").ShouldRevalidateArgs;
6
+ type AppModule = import("vuepagelet/integration").AppModule;
7
+ type CreateRouteRuntimeIntegrationOptions =
8
+ import("vuepagelet/integration").CreateRouteRuntimeIntegrationOptions;
9
+ type RouteRuntimeIntegration = import("vuepagelet/integration").RouteRuntimeIntegration;
10
+ type FestServerPlugin = unknown;
11
+
12
+ interface DevConfig {
13
+ host?: string;
14
+ port?: number;
15
+ }
16
+
17
+ interface ServerConfig {
18
+ middleware?: readonly string[];
19
+ }
20
+
21
+ interface PluginOptions {
22
+ root?: string;
23
+ appDir?: string;
24
+ extensions?: string[];
25
+ routesDir?: string;
26
+ serverRoutesDir?: string;
27
+ serverMiddlewareDir?: string;
28
+ moduleImportMode?: "dynamic" | "eager";
29
+ }
30
+
31
+ interface AppConfig {
32
+ middlewares?: readonly string[];
33
+ dataQueryParam?: string;
34
+ injectClientEntry?: boolean;
35
+ clientEntryPath?: string;
36
+ }
37
+
38
+ interface Config {
39
+ root?: string;
40
+ app?: AppConfig;
41
+ server?: ServerConfig;
42
+ dev?: DevConfig;
43
+ vite?: unknown;
44
+ plugin?: PluginOptions;
45
+ }
46
+
47
+ interface RouteManifestEntry {
48
+ id: string;
49
+ kind?: "layout" | "page";
50
+ path: string;
51
+ file: string;
52
+ parentId?: string;
53
+ index?: boolean;
54
+ }
55
+
56
+ type ServerRouteHandler = (request: Request) => unknown | Promise<unknown>;
57
+ type ServerMiddleware = (
58
+ request: Request,
59
+ next: (request: Request) => Promise<Response>,
60
+ ) => Response | Promise<Response>;
61
+
62
+ interface ServerRouteDefinition {
63
+ middlewareNames?: readonly string[];
64
+ meta?: Record<string, unknown>;
65
+ handler?: ServerRouteHandler;
66
+ GET?: ServerRouteHandler;
67
+ POST?: ServerRouteHandler;
68
+ PUT?: ServerRouteHandler;
69
+ PATCH?: ServerRouteHandler;
70
+ DELETE?: ServerRouteHandler;
71
+ HEAD?: ServerRouteHandler;
72
+ OPTIONS?: ServerRouteHandler;
73
+ }
74
+
75
+ interface ServerRouteRecord {
76
+ id: string;
77
+ path: string;
78
+ file?: string;
79
+ directoryMiddlewareNames?: readonly string[];
80
+ definition: ServerRouteDefinition;
81
+ }
82
+ }
83
+
84
+ declare module "phial/generated-routes-manifest" {
85
+ export const manifest: PhialGeneratedTypes.RouteManifestEntry[];
86
+ export default manifest;
87
+ }
88
+
89
+ declare module "phial/generated-routes-modules" {
90
+ export interface PhialGeneratedRouteModuleExports {
91
+ default?: unknown;
92
+ directoryMiddleware?: PhialGeneratedTypes.PageMiddleware[];
93
+ loader?: (context: PhialGeneratedTypes.LoaderContext) => unknown | Promise<unknown>;
94
+ action?: (context: PhialGeneratedTypes.ActionContext) => unknown | Promise<unknown>;
95
+ middleware?: PhialGeneratedTypes.PageMiddleware[];
96
+ shouldRevalidate?: (args: PhialGeneratedTypes.ShouldRevalidateArgs) => boolean;
97
+ meta?: unknown;
98
+ ErrorBoundary?: unknown;
99
+ Loading?: unknown;
100
+ onError?: (error: unknown) => unknown;
101
+ }
102
+
103
+ export type PhialGeneratedRouteModuleImporter = () => Promise<
104
+ PhialGeneratedRouteModuleExports | undefined
105
+ >;
106
+ export type PhialGeneratedRouteModules =
107
+ | Record<string, PhialGeneratedRouteModuleExports | undefined>
108
+ | Record<string, PhialGeneratedRouteModuleImporter>;
109
+
110
+ export const routeFiles: Record<string, string[]>;
111
+ export const routeModules: PhialGeneratedRouteModules;
112
+ export function loadRouteModule(
113
+ id: string,
114
+ ):
115
+ | PhialGeneratedRouteModuleExports
116
+ | Promise<PhialGeneratedRouteModuleExports | undefined>
117
+ | undefined;
118
+ export default routeModules;
119
+ }
120
+
121
+ declare module "phial/generated-app-runtime" {
122
+ export const appLoader: PhialGeneratedTypes.AppModule["loader"];
123
+ export const app: PhialGeneratedTypes.RouteRuntimeIntegration["app"];
124
+ export const routes: PhialGeneratedTypes.RouteRuntimeIntegration["routes"];
125
+ export function createIntegration(
126
+ runtimeOptions?: Partial<PhialGeneratedTypes.CreateRouteRuntimeIntegrationOptions>,
127
+ ): PhialGeneratedTypes.RouteRuntimeIntegration;
128
+ export const integration: PhialGeneratedTypes.RouteRuntimeIntegration;
129
+ const runtime: PhialGeneratedTypes.RouteRuntimeIntegration;
130
+ export default runtime;
131
+ }
132
+
133
+ declare module "phial/generated-app-loader" {
134
+ export const appLoader: PhialGeneratedTypes.AppModule["loader"] | undefined;
135
+ export default appLoader;
136
+ }
137
+
138
+ declare module "phial/generated-app-middleware" {
139
+ export const appMiddlewareRegistry: Record<string, PhialGeneratedTypes.PageMiddleware>;
140
+ export default appMiddlewareRegistry;
141
+ }
142
+
143
+ declare module "phial/generated-app-plugin" {
144
+ export interface PhialCreateAppPluginOptions {
145
+ clientEntryPath?: string;
146
+ }
147
+
148
+ export function createAppPlugin(
149
+ options?: PhialCreateAppPluginOptions,
150
+ ): PhialGeneratedTypes.FestServerPlugin;
151
+ export const appPlugin: PhialGeneratedTypes.FestServerPlugin;
152
+ export default createAppPlugin;
153
+ }
154
+
155
+ declare module "phial/generated-server-routes" {
156
+ export const serverRoutes: PhialGeneratedTypes.ServerRouteRecord[];
157
+ export const serverMiddlewareRegistry: Record<string, PhialGeneratedTypes.ServerMiddleware>;
158
+ export default serverRoutes;
159
+ }
160
+
161
+ declare module "phial/generated-server-middleware" {
162
+ export const serverMiddlewareRegistry: Record<string, PhialGeneratedTypes.ServerMiddleware>;
163
+ export default serverMiddlewareRegistry;
164
+ }
165
+
166
+ declare module "phial/generated-server-plugin" {
167
+ export function createServerPlugin(): PhialGeneratedTypes.FestServerPlugin;
168
+ export const serverPlugin: PhialGeneratedTypes.FestServerPlugin;
169
+ export default createServerPlugin;
170
+ }
171
+
172
+ declare module "phial/generated-config" {
173
+ export const hasConfig: boolean;
174
+ export const config: PhialGeneratedTypes.Config;
175
+ export default config;
176
+ }
@@ -0,0 +1,16 @@
1
+ //#region src/lib/server-routes/errors.ts
2
+ function rethrowServerRouteBuildError(error) {
3
+ if (isAmbiguousServerRoutePatternError(error)) {
4
+ const wrappedError = /* @__PURE__ */ new Error(`Ambiguous server routes: ${error.message}`);
5
+ Object.assign(wrappedError, { cause: error });
6
+ throw wrappedError;
7
+ }
8
+ throw error;
9
+ }
10
+ function isAmbiguousServerRoutePatternError(error) {
11
+ return error instanceof Error && error.message.startsWith("Ambiguous route pattern \"");
12
+ }
13
+ //#endregion
14
+ export { rethrowServerRouteBuildError };
15
+
16
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","names":[],"sources":["../../../src/lib/server-routes/errors.ts"],"sourcesContent":["export function rethrowServerRouteBuildError(error: unknown): never {\n if (isAmbiguousServerRoutePatternError(error)) {\n const wrappedError = new Error(`Ambiguous server routes: ${error.message}`);\n\n Object.assign(wrappedError, {\n cause: error,\n });\n\n throw wrappedError;\n }\n\n throw error;\n}\n\nfunction isAmbiguousServerRoutePatternError(error: unknown): error is Error {\n return error instanceof Error && error.message.startsWith('Ambiguous route pattern \"');\n}\n"],"mappings":";AAAA,SAAgB,6BAA6B,OAAuB;AAClE,KAAI,mCAAmC,MAAM,EAAE;EAC7C,MAAM,+BAAe,IAAI,MAAM,4BAA4B,MAAM,UAAU;AAE3E,SAAO,OAAO,cAAc,EAC1B,OAAO,OACR,CAAC;AAEF,QAAM;;AAGR,OAAM;;AAGR,SAAS,mCAAmC,OAAgC;AAC1E,QAAO,iBAAiB,SAAS,MAAM,QAAQ,WAAW,6BAA4B"}
@@ -0,0 +1,54 @@
1
+ import { ConfigEnv, InlineConfig, LogLevel } from "vite";
2
+
3
+ //#region src/lib/vite-plugin/config.d.ts
4
+ interface PhialDevConfig {
5
+ host?: string;
6
+ port?: number;
7
+ }
8
+ interface PhialServerConfig {
9
+ middleware?: readonly string[];
10
+ }
11
+ interface PhialPluginOptions {
12
+ root?: string;
13
+ appDir?: string;
14
+ extensions?: string[];
15
+ routesDir?: string;
16
+ serverRoutesDir?: string;
17
+ serverMiddlewareDir?: string;
18
+ moduleImportMode?: "dynamic" | "eager";
19
+ }
20
+ interface PhialAppConfig {
21
+ middlewares?: readonly string[];
22
+ dataQueryParam?: string;
23
+ injectClientEntry?: boolean;
24
+ clientEntryPath?: string;
25
+ }
26
+ interface PhialConfig {
27
+ root?: string;
28
+ app?: PhialAppConfig;
29
+ server?: PhialServerConfig;
30
+ dev?: PhialDevConfig;
31
+ vite?: InlineConfig;
32
+ plugin?: PhialPluginOptions;
33
+ }
34
+ interface LoadPhialConfigOptions {
35
+ root?: string;
36
+ configFile?: string;
37
+ command?: ConfigEnv["command"];
38
+ mode?: string;
39
+ isSsrBuild?: boolean;
40
+ isPreview?: boolean;
41
+ logLevel?: LogLevel;
42
+ }
43
+ interface LoadedPhialConfig {
44
+ file?: string;
45
+ searchRoot: string;
46
+ configRoot: string;
47
+ config: PhialConfig;
48
+ env: Required<Pick<LoadPhialConfigOptions, "command" | "mode" | "isSsrBuild" | "isPreview">>;
49
+ }
50
+ declare function defineConfig(config: PhialConfig): PhialConfig;
51
+ declare function loadPhialConfig(options?: LoadPhialConfigOptions): Promise<LoadedPhialConfig>;
52
+ //#endregion
53
+ export { LoadPhialConfigOptions, LoadedPhialConfig, PhialConfig, PhialDevConfig, PhialPluginOptions, PhialServerConfig, defineConfig, loadPhialConfig };
54
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","names":[],"sources":["../../../src/lib/vite-plugin/config.ts"],"mappings":";;;UAmBiB,cAAA;EACf,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,iBAAA;EACf,UAAA;AAAA;AAAA,UAGe,kBAAA;EACf,IAAA;EACA,MAAA;EACA,UAAA;EACA,SAAA;EACA,eAAA;EACA,mBAAA;EACA,gBAAA;AAAA;AAAA,UAGe,cAAA;EACf,WAAA;EACA,cAAA;EACA,iBAAA;EACA,eAAA;AAAA;AAAA,UAGe,WAAA;EACf,IAAA;EACA,GAAA,GAAM,cAAA;EACN,MAAA,GAAS,iBAAA;EACT,GAAA,GAAM,cAAA;EACN,IAAA,GAAO,YAAA;EACP,MAAA,GAAS,kBAAA;AAAA;AAAA,UAGM,sBAAA;EACf,IAAA;EACA,UAAA;EACA,OAAA,GAAU,SAAA;EACV,IAAA;EACA,UAAA;EACA,SAAA;EACA,QAAA,GAAW,QAAA;AAAA;AAAA,UAGI,iBAAA;EACf,IAAA;EACA,UAAA;EACA,UAAA;EACA,MAAA,EAAQ,WAAA;EACR,GAAA,EAAK,QAAA,CAAS,IAAA,CAAK,sBAAA;AAAA;AAAA,iBAGL,YAAA,CAAa,MAAA,EAAQ,WAAA,GAAc,WAAA;AAAA,iBAI7B,eAAA,CACpB,OAAA,GAAS,sBAAA,GACR,OAAA,CAAQ,iBAAA"}
@@ -0,0 +1,54 @@
1
+ import { existsSync } from "node:fs";
2
+ import { dirname, resolve } from "node:path";
3
+ import { loadConfigFromFile, normalizePath } from "vite";
4
+ //#region src/lib/vite-plugin/config.ts
5
+ const DEFAULT_PHIAL_CONFIG_FILES = [
6
+ "phial.config.ts",
7
+ "phial.config.mts",
8
+ "phial.config.js",
9
+ "phial.config.mjs",
10
+ "phial.config.cts",
11
+ "phial.config.cjs"
12
+ ];
13
+ function defineConfig(config) {
14
+ return config;
15
+ }
16
+ async function loadPhialConfig(options = {}) {
17
+ const searchRoot = resolve(options.root ?? process.cwd());
18
+ const env = {
19
+ command: options.command ?? "serve",
20
+ mode: options.mode ?? process.env.NODE_ENV ?? "development",
21
+ isSsrBuild: options.isSsrBuild ?? false,
22
+ isPreview: options.isPreview ?? false
23
+ };
24
+ const configFile = resolveConfigFile(searchRoot, options.configFile);
25
+ if (!configFile) return {
26
+ searchRoot,
27
+ configRoot: searchRoot,
28
+ config: {},
29
+ env
30
+ };
31
+ const config = (await loadConfigFromFile(env, configFile, searchRoot, options.logLevel ?? "error"))?.config ?? {};
32
+ return {
33
+ file: configFile,
34
+ searchRoot,
35
+ configRoot: resolve(dirname(configFile), config.root ?? "."),
36
+ config,
37
+ env
38
+ };
39
+ }
40
+ function isPhialConfigFile(file) {
41
+ const normalized = normalizePath(file);
42
+ return DEFAULT_PHIAL_CONFIG_FILES.some((configFile) => normalized.endsWith(`/${configFile}`) || normalized === configFile);
43
+ }
44
+ function resolveConfigFile(root, configFile) {
45
+ if (configFile) {
46
+ const resolved = resolve(root, configFile);
47
+ return existsSync(resolved) ? resolved : void 0;
48
+ }
49
+ return DEFAULT_PHIAL_CONFIG_FILES.map((file) => resolve(root, file)).find((file) => existsSync(file));
50
+ }
51
+ //#endregion
52
+ export { defineConfig, isPhialConfigFile, loadPhialConfig };
53
+
54
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","names":[],"sources":["../../../src/lib/vite-plugin/config.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport {\n loadConfigFromFile,\n normalizePath,\n type ConfigEnv,\n type InlineConfig,\n type LogLevel,\n} from \"vite\";\n\nexport const DEFAULT_PHIAL_CONFIG_FILES = [\n \"phial.config.ts\",\n \"phial.config.mts\",\n \"phial.config.js\",\n \"phial.config.mjs\",\n \"phial.config.cts\",\n \"phial.config.cjs\",\n] as const;\n\nexport interface PhialDevConfig {\n host?: string;\n port?: number;\n}\n\nexport interface PhialServerConfig {\n middleware?: readonly string[];\n}\n\nexport interface PhialPluginOptions {\n root?: string;\n appDir?: string;\n extensions?: string[];\n routesDir?: string;\n serverRoutesDir?: string;\n serverMiddlewareDir?: string;\n moduleImportMode?: \"dynamic\" | \"eager\";\n}\n\nexport interface PhialAppConfig {\n middlewares?: readonly string[];\n dataQueryParam?: string;\n injectClientEntry?: boolean;\n clientEntryPath?: string;\n}\n\nexport interface PhialConfig {\n root?: string;\n app?: PhialAppConfig;\n server?: PhialServerConfig;\n dev?: PhialDevConfig;\n vite?: InlineConfig;\n plugin?: PhialPluginOptions;\n}\n\nexport interface LoadPhialConfigOptions {\n root?: string;\n configFile?: string;\n command?: ConfigEnv[\"command\"];\n mode?: string;\n isSsrBuild?: boolean;\n isPreview?: boolean;\n logLevel?: LogLevel;\n}\n\nexport interface LoadedPhialConfig {\n file?: string;\n searchRoot: string;\n configRoot: string;\n config: PhialConfig;\n env: Required<Pick<LoadPhialConfigOptions, \"command\" | \"mode\" | \"isSsrBuild\" | \"isPreview\">>;\n}\n\nexport function defineConfig(config: PhialConfig): PhialConfig {\n return config;\n}\n\nexport async function loadPhialConfig(\n options: LoadPhialConfigOptions = {},\n): Promise<LoadedPhialConfig> {\n const searchRoot = resolve(options.root ?? process.cwd());\n const env = {\n command: options.command ?? \"serve\",\n mode: options.mode ?? process.env.NODE_ENV ?? \"development\",\n isSsrBuild: options.isSsrBuild ?? false,\n isPreview: options.isPreview ?? false,\n };\n const configFile = resolveConfigFile(searchRoot, options.configFile);\n\n if (!configFile) {\n return {\n searchRoot,\n configRoot: searchRoot,\n config: {},\n env,\n };\n }\n\n const loaded = await loadConfigFromFile(env, configFile, searchRoot, options.logLevel ?? \"error\");\n const config = (loaded?.config ?? {}) as PhialConfig;\n\n return {\n file: configFile,\n searchRoot,\n configRoot: resolve(dirname(configFile), config.root ?? \".\"),\n config,\n env,\n };\n}\n\nexport function isPhialConfigFile(file: string): boolean {\n const normalized = normalizePath(file);\n return DEFAULT_PHIAL_CONFIG_FILES.some(\n (configFile) => normalized.endsWith(`/${configFile}`) || normalized === configFile,\n );\n}\n\nfunction resolveConfigFile(root: string, configFile?: string): string | undefined {\n if (configFile) {\n const resolved = resolve(root, configFile);\n return existsSync(resolved) ? resolved : undefined;\n }\n\n return DEFAULT_PHIAL_CONFIG_FILES.map((file) => resolve(root, file)).find((file) =>\n existsSync(file),\n );\n}\n"],"mappings":";;;;AAUA,MAAa,6BAA6B;CACxC;CACA;CACA;CACA;CACA;CACA;CACD;AAuDD,SAAgB,aAAa,QAAkC;AAC7D,QAAO;;AAGT,eAAsB,gBACpB,UAAkC,EAAE,EACR;CAC5B,MAAM,aAAa,QAAQ,QAAQ,QAAQ,QAAQ,KAAK,CAAC;CACzD,MAAM,MAAM;EACV,SAAS,QAAQ,WAAW;EAC5B,MAAM,QAAQ,QAAQ,QAAQ,IAAI,YAAY;EAC9C,YAAY,QAAQ,cAAc;EAClC,WAAW,QAAQ,aAAa;EACjC;CACD,MAAM,aAAa,kBAAkB,YAAY,QAAQ,WAAW;AAEpE,KAAI,CAAC,WACH,QAAO;EACL;EACA,YAAY;EACZ,QAAQ,EAAE;EACV;EACD;CAIH,MAAM,UADS,MAAM,mBAAmB,KAAK,YAAY,YAAY,QAAQ,YAAY,QAAQ,GACzE,UAAU,EAAE;AAEpC,QAAO;EACL,MAAM;EACN;EACA,YAAY,QAAQ,QAAQ,WAAW,EAAE,OAAO,QAAQ,IAAI;EAC5D;EACA;EACD;;AAGH,SAAgB,kBAAkB,MAAuB;CACvD,MAAM,aAAa,cAAc,KAAK;AACtC,QAAO,2BAA2B,MAC/B,eAAe,WAAW,SAAS,IAAI,aAAa,IAAI,eAAe,WACzE;;AAGH,SAAS,kBAAkB,MAAc,YAAyC;AAChF,KAAI,YAAY;EACd,MAAM,WAAW,QAAQ,MAAM,WAAW;AAC1C,SAAO,WAAW,SAAS,GAAG,WAAW,KAAA;;AAG3C,QAAO,2BAA2B,KAAK,SAAS,QAAQ,MAAM,KAAK,CAAC,CAAC,MAAM,SACzE,WAAW,KAAK,CACjB"}
@@ -0,0 +1,36 @@
1
+ //#region src/lib/vite-plugin/generated/client-entry.ts
2
+ const DEFAULT_ID_PREFIX = "/@id/";
3
+ function createClientEntryModule(options = {}) {
4
+ const idPrefix = options.idPrefix ?? DEFAULT_ID_PREFIX;
5
+ return [
6
+ `import integration from "${idPrefix}phial/generated-app-runtime"`,
7
+ "",
8
+ "integration.hydrate().mount()",
9
+ "",
10
+ "let hotReloadScheduled = false",
11
+ "",
12
+ "function reloadPage(reason) {",
13
+ " if (hotReloadScheduled) {",
14
+ " return",
15
+ " }",
16
+ "",
17
+ " hotReloadScheduled = true",
18
+ " console.info(`[phial] ${reason}. Reloading the page to apply route changes.`)",
19
+ " window.location.reload()",
20
+ "}",
21
+ "",
22
+ "if (import.meta.hot) {",
23
+ " import.meta.hot.accept([",
24
+ ` "${idPrefix}phial/generated-app-runtime",`,
25
+ ` "${idPrefix}phial/generated-app-plugin",`,
26
+ ` "${idPrefix}phial/generated-server-plugin"`,
27
+ " ], () => {",
28
+ " reloadPage(\"App runtime or server plugin update detected\")",
29
+ " })",
30
+ "}"
31
+ ].join("\n");
32
+ }
33
+ //#endregion
34
+ export { createClientEntryModule };
35
+
36
+ //# sourceMappingURL=client-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-entry.js","names":[],"sources":["../../../../src/lib/vite-plugin/generated/client-entry.ts"],"sourcesContent":["const DEFAULT_ID_PREFIX = \"/@id/\";\n\nexport interface ClientEntryModuleOptions {\n idPrefix?: string;\n}\n\nexport function createClientEntryModule(options: ClientEntryModuleOptions = {}): string {\n const idPrefix = options.idPrefix ?? DEFAULT_ID_PREFIX;\n\n return [\n `import integration from \"${idPrefix}phial/generated-app-runtime\"`,\n \"\",\n \"integration.hydrate().mount()\",\n \"\",\n \"let hotReloadScheduled = false\",\n \"\",\n \"function reloadPage(reason) {\",\n \" if (hotReloadScheduled) {\",\n \" return\",\n \" }\",\n \"\",\n \" hotReloadScheduled = true\",\n \" console.info(`[phial] ${reason}. Reloading the page to apply route changes.`)\",\n \" window.location.reload()\",\n \"}\",\n \"\",\n \"if (import.meta.hot) {\",\n \" import.meta.hot.accept([\",\n ` \"${idPrefix}phial/generated-app-runtime\",`,\n ` \"${idPrefix}phial/generated-app-plugin\",`,\n ` \"${idPrefix}phial/generated-server-plugin\"`,\n \" ], () => {\",\n ' reloadPage(\"App runtime or server plugin update detected\")',\n \" })\",\n \"}\",\n ].join(\"\\n\");\n}\n"],"mappings":";AAAA,MAAM,oBAAoB;AAM1B,SAAgB,wBAAwB,UAAoC,EAAE,EAAU;CACtF,MAAM,WAAW,QAAQ,YAAY;AAErC,QAAO;EACL,4BAA4B,SAAS;EACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QAAQ,SAAS;EACjB,QAAQ,SAAS;EACjB,QAAQ,SAAS;EACjB;EACA;EACA;EACA;EACD,CAAC,KAAK,KAAK"}