@batijs/cli 0.0.195 → 0.0.197
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/boilerplates/@batijs/auth0/files/$.env.js +5 -9
- package/dist/boilerplates/@batijs/auth0/files/$README.md.js +8 -17
- package/dist/boilerplates/@batijs/authjs/files/server/authjs-handler.ts +100 -0
- package/dist/boilerplates/@batijs/authjs/types/server/authjs-handler.d.ts +16 -0
- package/dist/boilerplates/@batijs/eslint/files/.eslintrc.json +15 -2
- package/dist/boilerplates/@batijs/express/files/$package.json.js +8 -9
- package/dist/boilerplates/@batijs/express/files/express-entry.ts +51 -144
- package/dist/boilerplates/@batijs/express/types/express-entry.d.ts +5 -0
- package/dist/boilerplates/@batijs/fastify/files/$package.json.js +6 -10
- package/dist/boilerplates/@batijs/fastify/files/fastify-entry.ts +63 -149
- package/dist/boilerplates/@batijs/fastify/types/fastify-entry.d.ts +6 -0
- package/dist/boilerplates/@batijs/firebase-auth/files/$package.json.js +8 -0
- package/dist/boilerplates/@batijs/firebase-auth/files/libs/firebaseAdmin.ts +2 -1
- package/dist/boilerplates/@batijs/firebase-auth/files/server/firebase-auth-middleware.ts +72 -0
- package/dist/boilerplates/@batijs/firebase-auth/types/libs/firebaseAdmin.d.ts +2 -1
- package/dist/boilerplates/@batijs/firebase-auth/types/server/firebase-auth-middleware.d.ts +4 -0
- package/dist/boilerplates/@batijs/h3/files/$package.json.js +4 -6
- package/dist/boilerplates/@batijs/h3/files/h3-entry.ts +36 -175
- package/dist/boilerplates/@batijs/h3/types/h3-entry.d.ts +5 -0
- package/dist/boilerplates/@batijs/hattip/files/$package.json.js +7 -3
- package/dist/boilerplates/@batijs/hattip/files/hattip-entry.ts +40 -60
- package/dist/boilerplates/@batijs/hattip/types/hattip-entry.d.ts +1 -0
- package/dist/boilerplates/@batijs/hono/files/$package.json.js +5 -3
- package/dist/boilerplates/@batijs/hono/files/hono-entry.ts +54 -116
- package/dist/boilerplates/@batijs/hono/types/hono-entry.d.ts +5 -0
- package/dist/boilerplates/@batijs/react/files/$.eslintrc.json.js +0 -4
- package/dist/boilerplates/@batijs/react/files/$README.md.js +9 -3
- package/dist/boilerplates/@batijs/shared/files/package.json +1 -0
- package/dist/boilerplates/@batijs/shared-server/files/server/vike-handler.ts +15 -0
- package/dist/boilerplates/@batijs/shared-server/types/server/vike-handler.d.ts +2 -0
- package/dist/boilerplates/@batijs/solid/files/$README.md.js +9 -3
- package/dist/boilerplates/@batijs/telefunc/files/$package.json.js +12 -0
- package/dist/boilerplates/@batijs/telefunc/files/server/telefunc-handler.ts +20 -0
- package/dist/boilerplates/@batijs/telefunc/types/server/telefunc-handler.d.ts +2 -0
- package/dist/boilerplates/@batijs/vue/files/$README.md.js +9 -3
- package/dist/boilerplates/boilerplates.json +35 -0
- package/dist/index.js +2 -5
- package/package.json +5 -5
|
@@ -1,20 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
1
|
+
// BATI.has("auth0")
|
|
2
|
+
import "dotenv/config";
|
|
3
|
+
import { authjsHandler, authjsSessionMiddleware } from "@batijs/authjs/server/authjs-handler";
|
|
4
|
+
import {
|
|
5
|
+
firebaseAuthLoginHandler,
|
|
6
|
+
firebaseAuthLogoutHandler,
|
|
7
|
+
firebaseAuthMiddleware,
|
|
8
|
+
} from "@batijs/firebase-auth/server/firebase-auth-middleware";
|
|
9
|
+
import { vikeHandler } from "@batijs/shared-server/server/vike-handler";
|
|
10
|
+
import { telefuncHandler } from "@batijs/telefunc/server/telefunc-handler";
|
|
3
11
|
import { appRouter } from "@batijs/trpc/trpc/server";
|
|
4
12
|
import { serve } from "@hono/node-server";
|
|
5
13
|
import { serveStatic } from "@hono/node-server/serve-static";
|
|
6
14
|
import { fetchRequestHandler, type FetchCreateContextFnOptions } from "@trpc/server/adapters/fetch";
|
|
7
|
-
import { getAuth } from "firebase-admin/auth";
|
|
8
15
|
import { Hono } from "hono";
|
|
9
16
|
import { compress } from "hono/compress";
|
|
10
|
-
import {
|
|
11
|
-
import { telefunc } from "telefunc";
|
|
12
|
-
import { VikeAuth } from "vike-authjs";
|
|
13
|
-
import { renderPage } from "vike/server";
|
|
17
|
+
import { createMiddleware } from "hono/factory";
|
|
14
18
|
|
|
15
19
|
const isProduction = process.env.NODE_ENV === "production";
|
|
16
20
|
const port = process.env.PORT ? parseInt(process.env.PORT, 10) : 3000;
|
|
17
21
|
|
|
22
|
+
interface Middleware<Context extends Record<string | number | symbol, unknown>> {
|
|
23
|
+
(request: Request, context: Context): Response | void | Promise<Response> | Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function handlerAdapter<Context extends Record<string | number | symbol, unknown>>(
|
|
27
|
+
handler: Middleware<Context>,
|
|
28
|
+
) {
|
|
29
|
+
return createMiddleware(async (context, next) => {
|
|
30
|
+
let ctx = context.get("context");
|
|
31
|
+
if (!ctx) {
|
|
32
|
+
ctx = {};
|
|
33
|
+
context.set("context", ctx);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const res = await handler(context.req.raw, ctx as Context);
|
|
37
|
+
context.set("context", ctx);
|
|
38
|
+
|
|
39
|
+
if (!res) {
|
|
40
|
+
await next();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return res;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
18
47
|
const app = new Hono();
|
|
19
48
|
|
|
20
49
|
app.use(compress());
|
|
@@ -28,86 +57,23 @@ if (isProduction) {
|
|
|
28
57
|
);
|
|
29
58
|
}
|
|
30
59
|
|
|
31
|
-
if (BATI.has("authjs")) {
|
|
60
|
+
if (BATI.has("authjs") || BATI.has("auth0")) {
|
|
32
61
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* TODO: Replace secret {@see https://authjs.dev/reference/core#secret}
|
|
36
|
-
* TODO: Choose and implement providers
|
|
37
|
-
*
|
|
38
|
-
* @link {@see https://authjs.dev/guides/providers/custom-provider}
|
|
62
|
+
* Append Auth.js session to context
|
|
39
63
|
**/
|
|
40
|
-
|
|
41
|
-
secret: "MY_SECRET",
|
|
42
|
-
providers: [
|
|
43
|
-
CredentialsProvider({
|
|
44
|
-
name: "Credentials",
|
|
45
|
-
credentials: {
|
|
46
|
-
username: { label: "Username", type: "text", placeholder: "jsmith" },
|
|
47
|
-
password: { label: "Password", type: "password" },
|
|
48
|
-
},
|
|
49
|
-
async authorize() {
|
|
50
|
-
// Add logic here to look up the user from the credentials supplied
|
|
51
|
-
const user = { id: "1", name: "J Smith", email: "jsmith@example.com" };
|
|
52
|
-
|
|
53
|
-
// Any object returned will be saved in `user` property of the JWT
|
|
54
|
-
// If you return null then an error will be displayed advising the user to check their details.
|
|
55
|
-
// You can also Reject this callback with an Error thus the user will be sent to the error page with the error message as a query parameter
|
|
56
|
-
return user ?? null;
|
|
57
|
-
},
|
|
58
|
-
}),
|
|
59
|
-
],
|
|
60
|
-
});
|
|
64
|
+
app.use(handlerAdapter(authjsSessionMiddleware));
|
|
61
65
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
);
|
|
66
|
+
/**
|
|
67
|
+
* Auth.js route
|
|
68
|
+
* @link {@see https://authjs.dev/getting-started/installation}
|
|
69
|
+
**/
|
|
70
|
+
app.use("/api/auth/**", handlerAdapter(authjsHandler));
|
|
67
71
|
}
|
|
68
72
|
|
|
69
73
|
if (BATI.has("firebase-auth")) {
|
|
70
|
-
app.use(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const auth = getAuth(firebaseAdmin);
|
|
74
|
-
try {
|
|
75
|
-
const decodedIdToken = await auth.verifySessionCookie(sessionCookie, true);
|
|
76
|
-
const user = await auth.getUser(decodedIdToken.sub);
|
|
77
|
-
c.set("user", user);
|
|
78
|
-
} catch (error) {
|
|
79
|
-
console.debug("verifySessionCookie:", error);
|
|
80
|
-
c.set("user", null);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
await next();
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
app.post("/api/sessionLogin", async (c) => {
|
|
87
|
-
const body = await c.req.json();
|
|
88
|
-
const idToken: string = body.idToken || "";
|
|
89
|
-
|
|
90
|
-
let expiresIn = 60 * 60 * 24 * 5 * 1000; // 5 days. The auth.createSessionCookie() function of Firebase expects time to be specified in miliseconds.
|
|
91
|
-
|
|
92
|
-
const auth = getAuth(firebaseAdmin);
|
|
93
|
-
try {
|
|
94
|
-
const sessionCookie = await auth.createSessionCookie(idToken, { expiresIn });
|
|
95
|
-
const options = { maxAge: expiresIn, httpOnly: true, secure: true };
|
|
96
|
-
|
|
97
|
-
expiresIn = 60 * 60 * 24 * 5; // 5 days. The setCookie() function of Hono expects time to be specified in seconds.
|
|
98
|
-
setCookie(c, "__session", sessionCookie, options);
|
|
99
|
-
|
|
100
|
-
return c.json({ status: "success" }, 200);
|
|
101
|
-
} catch (error) {
|
|
102
|
-
console.error("createSessionCookie failed :", error);
|
|
103
|
-
return c.text("Unathorized", 401);
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
app.post("/api/sessionLogout", (c) => {
|
|
108
|
-
deleteCookie(c, "__session");
|
|
109
|
-
return c.text("Logged Out", 200);
|
|
110
|
-
});
|
|
74
|
+
app.use(handlerAdapter(firebaseAuthMiddleware));
|
|
75
|
+
app.post("/api/sessionLogin", handlerAdapter(firebaseAuthLoginHandler));
|
|
76
|
+
app.post("/api/sessionLogout", handlerAdapter(firebaseAuthLogoutHandler));
|
|
111
77
|
}
|
|
112
78
|
|
|
113
79
|
if (BATI.has("trpc")) {
|
|
@@ -134,43 +100,15 @@ if (BATI.has("telefunc")) {
|
|
|
134
100
|
*
|
|
135
101
|
* @link {@see https://telefunc.com}
|
|
136
102
|
**/
|
|
137
|
-
app.post("/_telefunc",
|
|
138
|
-
const httpResponse = await telefunc({
|
|
139
|
-
url: c.req.url.toString(),
|
|
140
|
-
method: c.req.method,
|
|
141
|
-
body: await c.req.text(),
|
|
142
|
-
context: c,
|
|
143
|
-
});
|
|
144
|
-
const { body, statusCode, contentType } = httpResponse;
|
|
145
|
-
|
|
146
|
-
c.status(statusCode);
|
|
147
|
-
c.header("Content-Type", contentType);
|
|
148
|
-
|
|
149
|
-
return c.body(body);
|
|
150
|
-
});
|
|
103
|
+
app.post("/_telefunc", handlerAdapter(telefuncHandler));
|
|
151
104
|
}
|
|
152
105
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
: {
|
|
160
|
-
urlOriginal: c.req.url,
|
|
161
|
-
};
|
|
162
|
-
const pageContext = await renderPage(pageContextInit);
|
|
163
|
-
const { httpResponse } = pageContext;
|
|
164
|
-
if (!httpResponse) {
|
|
165
|
-
return next();
|
|
166
|
-
} else {
|
|
167
|
-
const { body, statusCode, headers } = httpResponse;
|
|
168
|
-
headers.forEach(([name, value]) => c.header(name, value));
|
|
169
|
-
c.status(statusCode);
|
|
170
|
-
|
|
171
|
-
return c.body(body);
|
|
172
|
-
}
|
|
173
|
-
});
|
|
106
|
+
/**
|
|
107
|
+
* Vike route
|
|
108
|
+
*
|
|
109
|
+
* @link {@see https://vike.dev}
|
|
110
|
+
**/
|
|
111
|
+
app.all("*", handlerAdapter(vikeHandler));
|
|
174
112
|
|
|
175
113
|
if (isProduction) {
|
|
176
114
|
console.log(`Server listening on http://localhost:${port}`);
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import "dotenv/config";
|
|
1
2
|
import { Hono } from "hono";
|
|
3
|
+
interface Middleware<Context extends Record<string | number | symbol, unknown>> {
|
|
4
|
+
(request: Request, context: Context): Response | void | Promise<Response> | Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
export declare function handlerAdapter<Context extends Record<string | number | symbol, unknown>>(handler: Middleware<Context>): import("hono").MiddlewareHandler<any, any, {}>;
|
|
2
7
|
declare const app: Hono<import("hono").Env, import("hono/types").BlankSchema, "/">;
|
|
3
8
|
export default app;
|
|
@@ -3,11 +3,7 @@ import { loadAsJson } from "@batijs/core";
|
|
|
3
3
|
async function getEslintConfig(props) {
|
|
4
4
|
if (!props.meta.BATI.has("eslint")) return;
|
|
5
5
|
const eslintConfig = await loadAsJson(props);
|
|
6
|
-
eslintConfig.extends = eslintConfig.extends.filter(
|
|
7
|
-
(p) => p !== "eslint:recommended" && p !== "plugin:@typescript-eslint/recommended"
|
|
8
|
-
);
|
|
9
6
|
eslintConfig.extends.push("plugin:react/recommended");
|
|
10
|
-
eslintConfig.plugins = eslintConfig.plugins.filter((p) => p !== "@typescript-eslint");
|
|
11
7
|
eslintConfig.plugins.push("react");
|
|
12
8
|
eslintConfig.settings ??= {};
|
|
13
9
|
eslintConfig.settings.react = { version: "detect" };
|
|
@@ -3,32 +3,38 @@ import { loadReadme } from "@batijs/core";
|
|
|
3
3
|
async function getReadme(props) {
|
|
4
4
|
const content = await loadReadme(props);
|
|
5
5
|
const about = `
|
|
6
|
+
|
|
6
7
|
This app is ready to start. It's powered by [Vike](https://vike.dev) and [React](https://react.dev/learn).
|
|
7
8
|
|
|
8
9
|
### \`/pages/+config.ts\`
|
|
9
|
-
|
|
10
|
+
|
|
11
|
+
Such \`+\` files are [the interface](https://vike.dev/config) between Vike and your code. It defines:
|
|
10
12
|
- A default [\`<Layout>\` component](https://vike.dev/Layout) (that wraps your [\`<Page>\` components](https://vike.dev/Page)).
|
|
11
13
|
- A default [\`title\`](https://vike.dev/head).
|
|
12
14
|
- Default [\`<head>\` tags](https://vike.dev/head).
|
|
13
15
|
|
|
14
16
|
### Routing
|
|
17
|
+
|
|
15
18
|
[Vike's built-in router](https://vike.dev/routing) lets you choose between:
|
|
16
19
|
- [Filesystem Routing](https://vike.dev/filesystem-routing) (the URL of a page is determined based on where its \`+Page.jsx\` file is located on the filesystem)
|
|
17
20
|
- [Route Strings](https://vike.dev/route-string)
|
|
18
21
|
- [Route Functions](https://vike.dev/route-function)
|
|
19
22
|
|
|
20
23
|
### \`/pages/_error/+Page.jsx\`
|
|
24
|
+
|
|
21
25
|
The [error page](https://vike.dev/error-page) which is rendered when errors occur.
|
|
22
26
|
|
|
23
27
|
### \`/pages/+onPageTransitionStart.ts\` and \`/pages/+onPageTransitionEnd.ts\`
|
|
28
|
+
|
|
24
29
|
The [\`onPageTransitionStart()\` hook](https://vike.dev/onPageTransitionStart), together with [\`onPageTransitionEnd()\`](https://vike.dev/onPageTransitionEnd), enables you to implement page transition animations.
|
|
25
30
|
|
|
26
31
|
### SSR
|
|
32
|
+
|
|
27
33
|
SSR is enabled by default. You can [disable it](https://vike.dev/ssr) for all your pages or only for some pages.
|
|
28
34
|
|
|
29
35
|
### HTML Streaming
|
|
30
|
-
|
|
31
|
-
|
|
36
|
+
|
|
37
|
+
You can enable/disable [HTML streaming](https://vike.dev/streaming) for all your pages, or only for some pages while still using it for others.`;
|
|
32
38
|
content.addAbout(about);
|
|
33
39
|
return content.finalize();
|
|
34
40
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { renderPage } from "vike/server";
|
|
2
|
+
|
|
3
|
+
export async function vikeHandler<Context extends Record<string | number | symbol, unknown>>(
|
|
4
|
+
request: Request,
|
|
5
|
+
context?: Context,
|
|
6
|
+
): Promise<Response> {
|
|
7
|
+
const pageContextInit = { ...(context ?? {}), urlOriginal: request.url };
|
|
8
|
+
const pageContext = await renderPage(pageContextInit);
|
|
9
|
+
const response = pageContext.httpResponse;
|
|
10
|
+
|
|
11
|
+
return new Response(response?.getReadableWebStream(), {
|
|
12
|
+
status: response?.statusCode,
|
|
13
|
+
headers: response?.headers,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
@@ -3,32 +3,38 @@ import { loadReadme } from "@batijs/core";
|
|
|
3
3
|
async function getReadme(props) {
|
|
4
4
|
const content = await loadReadme(props);
|
|
5
5
|
const about = `
|
|
6
|
+
|
|
6
7
|
This app is ready to start. It's powered by [Vike](https://vike.dev) and [SolidJS](https://www.solidjs.com/guides/getting-started).
|
|
7
8
|
|
|
8
9
|
### \`/pages/+config.ts\`
|
|
9
|
-
|
|
10
|
+
|
|
11
|
+
Such \`+\` files are [the interface](https://vike.dev/config) between Vike and your code. It defines:
|
|
10
12
|
- A default [\`<Layout>\` component](https://vike.dev/Layout) (that wraps your [\`<Page>\` components](https://vike.dev/Page)).
|
|
11
13
|
- A default [\`title\`](https://vike.dev/head).
|
|
12
14
|
- Default [\`<head>\` tags](https://vike.dev/head).
|
|
13
15
|
|
|
14
16
|
### Routing
|
|
17
|
+
|
|
15
18
|
[Vike's built-in router](https://vike.dev/routing) lets you choose between:
|
|
16
19
|
- [Filesystem Routing](https://vike.dev/filesystem-routing) (the URL of a page is determined based on where its \`+Page.jsx\` file is located on the filesystem)
|
|
17
20
|
- [Route Strings](https://vike.dev/route-string)
|
|
18
21
|
- [Route Functions](https://vike.dev/route-function)
|
|
19
22
|
|
|
20
23
|
### \`/pages/_error/+Page.jsx\`
|
|
24
|
+
|
|
21
25
|
The [error page](https://vike.dev/error-page) which is rendered when errors occur.
|
|
22
26
|
|
|
23
27
|
### \`/pages/+onPageTransitionStart.ts\` and \`/pages/+onPageTransitionEnd.ts\`
|
|
28
|
+
|
|
24
29
|
The [\`onPageTransitionStart()\` hook](https://vike.dev/onPageTransitionStart), together with [\`onPageTransitionEnd()\`](https://vike.dev/onPageTransitionEnd), enables you to implement page transition animations.
|
|
25
30
|
|
|
26
31
|
### SSR
|
|
32
|
+
|
|
27
33
|
SSR is enabled by default. You can [disable it](https://vike.dev/ssr) for all your pages or only for some pages.
|
|
28
34
|
|
|
29
35
|
### HTML Streaming
|
|
30
|
-
|
|
31
|
-
|
|
36
|
+
|
|
37
|
+
You can enable/disable [HTML streaming](https://vike.dev/streaming) for all your pages, or only for some pages while still using it for others.`;
|
|
32
38
|
content.addAbout(about);
|
|
33
39
|
return content.finalize();
|
|
34
40
|
}
|
|
@@ -57,6 +57,18 @@ var require_package = __commonJS({
|
|
|
57
57
|
if: {
|
|
58
58
|
flag: "telefunc"
|
|
59
59
|
}
|
|
60
|
+
},
|
|
61
|
+
exports: {
|
|
62
|
+
"./server/telefunc-handler": {
|
|
63
|
+
types: "./dist/types/server/telefunc-handler.d.ts"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
typesVersions: {
|
|
67
|
+
"*": {
|
|
68
|
+
"server/telefunc-handler": [
|
|
69
|
+
"./dist/types/server/telefunc-handler.d.ts"
|
|
70
|
+
]
|
|
71
|
+
}
|
|
60
72
|
}
|
|
61
73
|
};
|
|
62
74
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { telefunc } from "telefunc";
|
|
2
|
+
|
|
3
|
+
export async function telefuncHandler<Context extends Record<string | number | symbol, unknown>>(
|
|
4
|
+
request: Request,
|
|
5
|
+
context?: Context,
|
|
6
|
+
): Promise<Response> {
|
|
7
|
+
const httpResponse = await telefunc({
|
|
8
|
+
url: request.url.toString(),
|
|
9
|
+
method: request.method,
|
|
10
|
+
body: await request.text(),
|
|
11
|
+
context,
|
|
12
|
+
});
|
|
13
|
+
const { body, statusCode, contentType } = httpResponse;
|
|
14
|
+
return new Response(body, {
|
|
15
|
+
status: statusCode,
|
|
16
|
+
headers: {
|
|
17
|
+
"content-type": contentType,
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
}
|
|
@@ -3,32 +3,38 @@ import { loadReadme } from "@batijs/core";
|
|
|
3
3
|
async function getReadme(props) {
|
|
4
4
|
const content = await loadReadme(props);
|
|
5
5
|
const about = `
|
|
6
|
+
|
|
6
7
|
This app is ready to start. It's powered by [Vike](https://vike.dev) and [Vue](https://vuejs.org/guide/quick-start.html).
|
|
7
8
|
|
|
8
9
|
### \`/pages/+config.ts\`
|
|
9
|
-
|
|
10
|
+
|
|
11
|
+
Such \`+\` files are [the interface](https://vike.dev/config) between Vike and your code. It defines:
|
|
10
12
|
- A default [\`<Layout>\` component](https://vike.dev/Layout) (that wraps your [\`<Page>\` components](https://vike.dev/Page)).
|
|
11
13
|
- A default [\`title\`](https://vike.dev/head).
|
|
12
14
|
- Default [\`<head>\` tags](https://vike.dev/head).
|
|
13
15
|
|
|
14
16
|
### Routing
|
|
17
|
+
|
|
15
18
|
[Vike's built-in router](https://vike.dev/routing) lets you choose between:
|
|
16
19
|
- [Filesystem Routing](https://vike.dev/filesystem-routing) (the URL of a page is determined based on where its \`+Page.vue\` file is located on the filesystem)
|
|
17
20
|
- [Route Strings](https://vike.dev/route-string)
|
|
18
21
|
- [Route Functions](https://vike.dev/route-function)
|
|
19
22
|
|
|
20
23
|
### \`/pages/_error/+Page.vue\`
|
|
24
|
+
|
|
21
25
|
The [error page](https://vike.dev/error-page) which is rendered when errors occur.
|
|
22
26
|
|
|
23
27
|
### \`/pages/+onPageTransitionStart.ts\` and \`/pages/+onPageTransitionEnd.ts\`
|
|
28
|
+
|
|
24
29
|
The [\`onPageTransitionStart()\` hook](https://vike.dev/onPageTransitionStart), together with [\`onPageTransitionEnd()\`](https://vike.dev/onPageTransitionEnd), enables you to implement page transition animations.
|
|
25
30
|
|
|
26
31
|
### SSR
|
|
32
|
+
|
|
27
33
|
SSR is enabled by default. You can [disable it](https://vike.dev/ssr) for all your pages or only for some pages.
|
|
28
34
|
|
|
29
35
|
### HTML Streaming
|
|
30
|
-
|
|
31
|
-
|
|
36
|
+
|
|
37
|
+
You can enable/disable [HTML streaming](https://vike.dev/streaming) for all your pages, or only for some pages while still using it for others.`;
|
|
32
38
|
content.addAbout(about);
|
|
33
39
|
return content.finalize();
|
|
34
40
|
}
|
|
@@ -10,6 +10,22 @@
|
|
|
10
10
|
"files"
|
|
11
11
|
]
|
|
12
12
|
},
|
|
13
|
+
{
|
|
14
|
+
"config": {
|
|
15
|
+
"if": {
|
|
16
|
+
"flag": {
|
|
17
|
+
"$in": [
|
|
18
|
+
"authjs",
|
|
19
|
+
"auth0"
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"folder": "@batijs/authjs",
|
|
25
|
+
"subfolders": [
|
|
26
|
+
"files"
|
|
27
|
+
]
|
|
28
|
+
},
|
|
13
29
|
{
|
|
14
30
|
"config": {
|
|
15
31
|
"if": {
|
|
@@ -259,6 +275,25 @@
|
|
|
259
275
|
"files"
|
|
260
276
|
]
|
|
261
277
|
},
|
|
278
|
+
{
|
|
279
|
+
"config": {
|
|
280
|
+
"if": {
|
|
281
|
+
"flag": {
|
|
282
|
+
"$in": [
|
|
283
|
+
"h3",
|
|
284
|
+
"hattip",
|
|
285
|
+
"hono",
|
|
286
|
+
"express",
|
|
287
|
+
"fastify"
|
|
288
|
+
]
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
"folder": "@batijs/shared-server",
|
|
293
|
+
"subfolders": [
|
|
294
|
+
"files"
|
|
295
|
+
]
|
|
296
|
+
},
|
|
262
297
|
{
|
|
263
298
|
"config": {
|
|
264
299
|
"if": {
|
package/dist/index.js
CHANGED
|
@@ -1564,7 +1564,7 @@ var import_which_pm_runs = __toESM(require_which_pm_runs(), 1);
|
|
|
1564
1564
|
// package.json
|
|
1565
1565
|
var package_default = {
|
|
1566
1566
|
name: "@batijs/cli",
|
|
1567
|
-
version: "0.0.
|
|
1567
|
+
version: "0.0.197",
|
|
1568
1568
|
type: "module",
|
|
1569
1569
|
scripts: {
|
|
1570
1570
|
"check-types": "tsc --noEmit",
|
|
@@ -1630,9 +1630,6 @@ var rulesMessages = {
|
|
|
1630
1630
|
[RulesMessage.ERROR_COMPILED_R_REACT]: error(
|
|
1631
1631
|
`${inverse(bold("React"))} is required when using ${inverse(bold("Compiled"))}.`
|
|
1632
1632
|
),
|
|
1633
|
-
[RulesMessage.ERROR_AUTH0_E_HONO]: error(
|
|
1634
|
-
`${inverse(bold("Auth0"))} does not support running on ${inverse(bold("Hono"))} with official plugins. Check https://batijs.dev for details`
|
|
1635
|
-
),
|
|
1636
1633
|
[RulesMessage.INFO_HATTIP]: info(`${inverse(bold("HatTip"))} is an experimental project`)
|
|
1637
1634
|
};
|
|
1638
1635
|
|
|
@@ -1688,7 +1685,7 @@ function printOK(dist, flags) {
|
|
|
1688
1685
|
continue;
|
|
1689
1686
|
console.log(list3(green(feature.label)));
|
|
1690
1687
|
}
|
|
1691
|
-
console.log("\n" + bold(arrow0("Ready to start
|
|
1688
|
+
console.log("\n" + bold(arrow0("Ready to start your app:")));
|
|
1692
1689
|
console.log(cmd3(`cd ${dist}`));
|
|
1693
1690
|
switch (pm?.name) {
|
|
1694
1691
|
case "bun": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@batijs/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.197",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"description": "Next-gen scaffolder. Get started with fully-functional apps, and choose any tool you want",
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
"typescript": "^5.4.5",
|
|
22
22
|
"vite": "^5.2.11",
|
|
23
23
|
"which-pm-runs": "^1.1.0",
|
|
24
|
-
"@batijs/build": "0.0.
|
|
25
|
-
"@batijs/compile": "0.0.
|
|
24
|
+
"@batijs/build": "0.0.197",
|
|
25
|
+
"@batijs/compile": "0.0.197"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@batijs/core": "0.0.
|
|
29
|
-
"@batijs/features": "0.0.
|
|
28
|
+
"@batijs/core": "0.0.197",
|
|
29
|
+
"@batijs/features": "0.0.197"
|
|
30
30
|
},
|
|
31
31
|
"bin": "./dist/index.js",
|
|
32
32
|
"exports": {
|