@jay-framework/dev-server 0.5.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/dist/index.cjs +118 -0
- package/dist/index.d.ts +23 -0
- package/package.json +46 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const vite = require("vite");
|
|
4
|
+
const stackRouteScanner = require("@jay-framework/stack-route-scanner");
|
|
5
|
+
const stackServerRuntime = require("@jay-framework/stack-server-runtime");
|
|
6
|
+
const vitePlugin = require("@jay-framework/vite-plugin");
|
|
7
|
+
const path = require("node:path");
|
|
8
|
+
async function initRoutes(pagesBaseFolder) {
|
|
9
|
+
return await stackRouteScanner.scanRoutes(pagesBaseFolder, {
|
|
10
|
+
jayHtmlFilename: "page.jay-html",
|
|
11
|
+
compFilename: "page.ts"
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
function defaults(options) {
|
|
15
|
+
const serverBase = options.serverBase || process.env.BASE || "/";
|
|
16
|
+
const pagesBase = path.resolve(serverBase, options.pagesBase || "./src/pages");
|
|
17
|
+
const tsConfigFilePath = options.jayRollupConfig.tsConfigFilePath || path.resolve(serverBase, "./tsconfig.json");
|
|
18
|
+
return {
|
|
19
|
+
serverBase,
|
|
20
|
+
pagesBase,
|
|
21
|
+
dontCacheSlowly: options.dontCacheSlowly,
|
|
22
|
+
jayRollupConfig: {
|
|
23
|
+
...options.jayRollupConfig || {},
|
|
24
|
+
tsConfigFilePath
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function handleOtherResponseCodes(res, renderedResult) {
|
|
29
|
+
if (renderedResult.kind === `ServerError`)
|
|
30
|
+
res.status(renderedResult.status).end("server error");
|
|
31
|
+
else if (renderedResult.kind === `ClientError`)
|
|
32
|
+
res.status(renderedResult.status).end("client error");
|
|
33
|
+
else
|
|
34
|
+
res.status(renderedResult.status).end("redirect to " + renderedResult.location);
|
|
35
|
+
}
|
|
36
|
+
function mkRoute(route, vite2, slowlyPhase, options) {
|
|
37
|
+
const path2 = stackRouteScanner.routeToExpressRoute(route);
|
|
38
|
+
const handler = async (req, res) => {
|
|
39
|
+
try {
|
|
40
|
+
const url = req.originalUrl.replace(options.serverBase, "");
|
|
41
|
+
const pageParams = req.params;
|
|
42
|
+
const pageProps = {
|
|
43
|
+
language: "en",
|
|
44
|
+
url
|
|
45
|
+
};
|
|
46
|
+
let viewState, carryForward;
|
|
47
|
+
const pageParts = await stackServerRuntime.loadPageParts(
|
|
48
|
+
vite2,
|
|
49
|
+
route,
|
|
50
|
+
options.pagesBase,
|
|
51
|
+
options.jayRollupConfig
|
|
52
|
+
);
|
|
53
|
+
if (pageParts.val) {
|
|
54
|
+
const renderedSlowly = await slowlyPhase.runSlowlyForPage(
|
|
55
|
+
pageParams,
|
|
56
|
+
pageProps,
|
|
57
|
+
pageParts.val
|
|
58
|
+
);
|
|
59
|
+
if (renderedSlowly.kind === "PartialRender") {
|
|
60
|
+
const renderedFast = await stackServerRuntime.renderFastChangingData(
|
|
61
|
+
pageParams,
|
|
62
|
+
pageProps,
|
|
63
|
+
renderedSlowly.carryForward,
|
|
64
|
+
pageParts.val
|
|
65
|
+
);
|
|
66
|
+
if (renderedFast.kind === "PartialRender") {
|
|
67
|
+
viewState = { ...renderedSlowly.rendered, ...renderedFast.rendered };
|
|
68
|
+
carryForward = renderedFast.carryForward;
|
|
69
|
+
const pageHtml = stackServerRuntime.generateClientScript(
|
|
70
|
+
viewState,
|
|
71
|
+
carryForward,
|
|
72
|
+
pageParts.val,
|
|
73
|
+
route.jayHtmlPath
|
|
74
|
+
);
|
|
75
|
+
const compiledPageHtml = await vite2.transformIndexHtml(
|
|
76
|
+
!!url ? url : "/",
|
|
77
|
+
pageHtml
|
|
78
|
+
);
|
|
79
|
+
res.status(200).set({ "Content-Type": "text/html" }).send(compiledPageHtml);
|
|
80
|
+
} else {
|
|
81
|
+
handleOtherResponseCodes(res, renderedFast);
|
|
82
|
+
}
|
|
83
|
+
} else if (renderedSlowly.kind === "ClientError") {
|
|
84
|
+
handleOtherResponseCodes(res, renderedSlowly);
|
|
85
|
+
}
|
|
86
|
+
} else {
|
|
87
|
+
console.log(pageParts.validations.join("\n"));
|
|
88
|
+
res.status(500).end(pageParts.validations.join("\n"));
|
|
89
|
+
}
|
|
90
|
+
} catch (e) {
|
|
91
|
+
vite2?.ssrFixStacktrace(e);
|
|
92
|
+
console.log(e.stack);
|
|
93
|
+
res.status(500).end(e.stack);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
return { path: path2, handler };
|
|
97
|
+
}
|
|
98
|
+
async function mkDevServer(options) {
|
|
99
|
+
const { serverBase, pagesBase, jayRollupConfig, dontCacheSlowly } = defaults(options);
|
|
100
|
+
const vite$1 = await vite.createServer({
|
|
101
|
+
server: { middlewareMode: true },
|
|
102
|
+
plugins: [vitePlugin.jayRuntime(jayRollupConfig)],
|
|
103
|
+
appType: "custom",
|
|
104
|
+
base: serverBase,
|
|
105
|
+
root: pagesBase
|
|
106
|
+
});
|
|
107
|
+
const routes = await initRoutes(pagesBase);
|
|
108
|
+
const slowlyPhase = new stackServerRuntime.DevSlowlyChangingPhase(dontCacheSlowly);
|
|
109
|
+
const devServerRoutes = routes.map(
|
|
110
|
+
(route) => mkRoute(route, vite$1, slowlyPhase, options)
|
|
111
|
+
);
|
|
112
|
+
return {
|
|
113
|
+
server: vite$1.middlewares,
|
|
114
|
+
viteServer: vite$1,
|
|
115
|
+
routes: devServerRoutes
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
exports.mkDevServer = mkDevServer;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Connect, ViteDevServer } from 'vite';
|
|
2
|
+
import { RequestHandler } from 'express-serve-static-core';
|
|
3
|
+
import { JayRollupConfig } from '@jay-framework/rollup-plugin';
|
|
4
|
+
|
|
5
|
+
interface DevServerOptions {
|
|
6
|
+
serverBase?: string;
|
|
7
|
+
pagesBase?: string;
|
|
8
|
+
jayRollupConfig: JayRollupConfig;
|
|
9
|
+
dontCacheSlowly: boolean;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface DevServerRoute {
|
|
13
|
+
path: string;
|
|
14
|
+
handler: RequestHandler;
|
|
15
|
+
}
|
|
16
|
+
interface DevServer {
|
|
17
|
+
server: Connect.Server;
|
|
18
|
+
viteServer: ViteDevServer;
|
|
19
|
+
routes: DevServerRoute[];
|
|
20
|
+
}
|
|
21
|
+
declare function mkDevServer(options: DevServerOptions): Promise<DevServer>;
|
|
22
|
+
|
|
23
|
+
export { type DevServer, type DevServerOptions, type DevServerRoute, mkDevServer };
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jay-framework/dev-server",
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"main": "dist/index.cjs",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist",
|
|
9
|
+
"readme.md"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "npm run build:js && npm run build:types",
|
|
13
|
+
"build:watch": "npm run build:js -- --watch & npm run build:types -- --watch",
|
|
14
|
+
"build:js": "vite build",
|
|
15
|
+
"build:types": "tsup lib/index.ts --dts-only --format esm",
|
|
16
|
+
"build:check-types": "tsc",
|
|
17
|
+
"test-definitions": "jay-cli definitions test",
|
|
18
|
+
"test-runtime": "jay-cli runtime test",
|
|
19
|
+
"clean": "rimraf dist",
|
|
20
|
+
"confirm": "npm run clean && npm run build && npm run build:check-types && npm run test",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"test:watch": "vitest"
|
|
23
|
+
},
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@jay-framework/component": "workspace:^",
|
|
26
|
+
"@jay-framework/fullstack-component": "workspace:^",
|
|
27
|
+
"@jay-framework/runtime": "workspace:^",
|
|
28
|
+
"@jay-framework/stack-client-runtime": "workspace:^",
|
|
29
|
+
"@jay-framework/stack-route-scanner": "workspace:^",
|
|
30
|
+
"@jay-framework/stack-server-runtime": "workspace:^",
|
|
31
|
+
"vite": "^5.0.11"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@jay-framework/dev-environment": "workspace:^",
|
|
35
|
+
"@jay-framework/jay-cli": "workspace:^",
|
|
36
|
+
"@jay-framework/stack-client-runtime": "workspace:^",
|
|
37
|
+
"@types/express": "^5.0.2",
|
|
38
|
+
"@types/node": "^22.15.21",
|
|
39
|
+
"nodemon": "^3.0.3",
|
|
40
|
+
"replace-in-file": "^7.1.0",
|
|
41
|
+
"rimraf": "^5.0.5",
|
|
42
|
+
"tsup": "^8.0.1",
|
|
43
|
+
"typescript": "^5.3.3",
|
|
44
|
+
"vitest": "^1.2.1"
|
|
45
|
+
}
|
|
46
|
+
}
|