fumapress 0.5.2 → 0.5.3
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/components/image.d.ts +1 -2
- package/dist/components/link.d.ts +1 -2
- package/dist/lib/pathname.js +7 -4
- package/dist/lib/shared.d.ts +1 -0
- package/dist/lib/types.d.ts +7 -4
- package/dist/plugins/blog.js +2 -7
- package/dist/plugins/image/cloudflare.client.js +36 -0
- package/dist/plugins/image/cloudflare.d.ts +22 -0
- package/dist/plugins/image/cloudflare.js +21 -0
- package/dist/plugins/image/cloudflare.utils.js +32 -0
- package/dist/plugins/llms.txt.js +11 -8
- package/dist/plugins/openapi.d.ts +5 -1
- package/dist/plugins/openapi.js +4 -2
- package/dist/router/index.d.ts +4 -1
- package/dist/router/index.js +5 -24
- package/package.json +9 -8
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
1
|
import { ImgHTMLAttributes, ReactNode } from "react";
|
|
3
2
|
|
|
4
3
|
//#region src/components/image.d.ts
|
|
@@ -25,6 +24,6 @@ declare function Image({
|
|
|
25
24
|
unoptimized,
|
|
26
25
|
preload,
|
|
27
26
|
...rest
|
|
28
|
-
}: ImageProps):
|
|
27
|
+
}: ImageProps): import("react").JSX.Element;
|
|
29
28
|
//#endregion
|
|
30
29
|
export { Image, ImageProps, StaticImageData };
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
1
|
import { ComponentProps, ReactNode, TransitionFunction } from "react";
|
|
3
2
|
|
|
4
3
|
//#region src/components/link.d.ts
|
|
@@ -20,6 +19,6 @@ declare function Link({
|
|
|
20
19
|
href,
|
|
21
20
|
children,
|
|
22
21
|
...props
|
|
23
|
-
}: LinkProps):
|
|
22
|
+
}: LinkProps): import("react").JSX.Element;
|
|
24
23
|
//#endregion
|
|
25
24
|
export { Link, LinkProps };
|
package/dist/lib/pathname.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
//#region src/lib/pathname.ts
|
|
2
2
|
function joinPathname(...paths) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
const segs = [];
|
|
4
|
+
for (let p of paths) {
|
|
5
|
+
if (p.startsWith("/")) p = p.slice(1);
|
|
6
|
+
if (p.endsWith("/")) p = p.slice(0, -1);
|
|
7
|
+
if (p.length > 0) segs.push(p);
|
|
8
|
+
}
|
|
9
|
+
return "/" + segs.join("/");
|
|
7
10
|
}
|
|
8
11
|
const PATHNAME_SEGMENT_REGEX = /^[A-Za-z0-9\-._~!$&'()*+,;=:@]+$/;
|
|
9
12
|
/** Check if the string is a full pathname (one that does not include `.` or `..`) */
|
package/dist/lib/shared.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { Adapter, AppContextData, Awaitable, ServerPlugin } from "./types.js";
|
|
|
3
3
|
import { ReactNode } from "react";
|
|
4
4
|
import { LoaderOutput } from "fumadocs-core/source";
|
|
5
5
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
6
|
+
|
|
6
7
|
//#region src/lib/shared.d.ts
|
|
7
8
|
interface AppContext<C extends ConfigContext = ConfigContext> {
|
|
8
9
|
mode: BuildMode;
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -7,9 +7,10 @@ import { RootLayoutContextData } from "../layouts/root.js";
|
|
|
7
7
|
import { ReactNode } from "react";
|
|
8
8
|
import { ContentStorage, LoaderOptions, LoaderPluginOption, Page } from "fumadocs-core/source";
|
|
9
9
|
import { I18nConfig } from "fumadocs-core/i18n";
|
|
10
|
-
import { CreateApi, CreateLayout, CreatePage, CreateRoot, CreateSlice, createPages } from "waku/router/server";
|
|
11
|
-
import { TOCItemType } from "fumadocs-core/toc";
|
|
10
|
+
import { CreateApi, CreateInterceptor, CreateLayout, CreatePage, CreateRoot, CreateSlice, createPages } from "waku/router/server";
|
|
12
11
|
import { StructuredData } from "fumadocs-core/mdx-plugins";
|
|
12
|
+
import { TOCItemType } from "fumadocs-core/toc";
|
|
13
|
+
import { Hono } from "hono/tiny";
|
|
13
14
|
import { MiddlewareHandler } from "hono";
|
|
14
15
|
import { unstable_createServerEntryAdapter } from "waku/adapter-builders";
|
|
15
16
|
|
|
@@ -56,8 +57,9 @@ interface ServerPlugin<C extends ConfigContext = ConfigContext> {
|
|
|
56
57
|
/** resolve content loader options */
|
|
57
58
|
configureLoader?: (this: AppContext<C>, options: PressLoaderOptions) => Awaitable<PressLoaderOptions>;
|
|
58
59
|
/** create Hono middlewares */
|
|
59
|
-
createMiddlewares?: (this: AppContext<C
|
|
60
|
-
|
|
60
|
+
createMiddlewares?: (this: AppContext<C>, env: {
|
|
61
|
+
app: Hono;
|
|
62
|
+
}) => Awaitable<MiddlewareHandler[] | undefined>;
|
|
61
63
|
unstable_onServerEntry?: (entry: ReturnType<ReturnType<typeof unstable_createServerEntryAdapter>>) => ReturnType<ReturnType<typeof unstable_createServerEntryAdapter>>;
|
|
62
64
|
}
|
|
63
65
|
interface BaseRouteFns {
|
|
@@ -66,6 +68,7 @@ interface BaseRouteFns {
|
|
|
66
68
|
createRoot: CreateRoot;
|
|
67
69
|
createApi: CreateApi;
|
|
68
70
|
createSlice: CreateSlice;
|
|
71
|
+
createInterceptor: CreateInterceptor;
|
|
69
72
|
}
|
|
70
73
|
type CreatePagesResult = ReturnType<typeof createPages>;
|
|
71
74
|
interface RouteFns extends BaseRouteFns {
|
package/dist/plugins/blog.js
CHANGED
|
@@ -33,15 +33,10 @@ function blogPlugin({ paths = {}, isBlog = (page) => page.type === "blog", layou
|
|
|
33
33
|
})
|
|
34
34
|
});
|
|
35
35
|
},
|
|
36
|
-
|
|
37
|
-
return [(_c, next) => blogContext.run(blogCtx, next)];
|
|
38
|
-
},
|
|
39
|
-
unstable_onSSGRequest(_req, next) {
|
|
40
|
-
return blogContext.run(blogCtx, next);
|
|
41
|
-
},
|
|
42
|
-
async createPages({ createPage, createLayout }) {
|
|
36
|
+
async createPages({ createPage, createLayout, createInterceptor }) {
|
|
43
37
|
const renderMode = this.mode === "default" ? "static" : this.mode;
|
|
44
38
|
const blogPages = (await this.getLoader()).getPages().filter(isBlog.bind(this));
|
|
39
|
+
createInterceptor((next) => blogContext.run(blogCtx, next));
|
|
45
40
|
createLayout({
|
|
46
41
|
render: renderMode,
|
|
47
42
|
path: this.i18nConfig ? "/[lang]/(blog)" : "/(blog)",
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { ImageProvider } from "../../components/image.js";
|
|
3
|
+
import { joinPathname } from "../../lib/pathname.js";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
import { useMemo } from "react";
|
|
6
|
+
//#region src/plugins/image/cloudflare.client.tsx
|
|
7
|
+
function createProvider(config) {
|
|
8
|
+
return {
|
|
9
|
+
name: "cloudflare",
|
|
10
|
+
defaultQuality: config.defaultQuality,
|
|
11
|
+
deviceSizes: config.sizes,
|
|
12
|
+
sizes: config.sizes,
|
|
13
|
+
buildImageUrl({ src, width, quality }) {
|
|
14
|
+
const parts = [
|
|
15
|
+
`width=${width}`,
|
|
16
|
+
`quality=${quality}`,
|
|
17
|
+
`format=${config.format}`
|
|
18
|
+
];
|
|
19
|
+
if (config.fit) parts.push(`fit=${config.fit}`);
|
|
20
|
+
return joinPathname(config.path, parts.join(","), src);
|
|
21
|
+
},
|
|
22
|
+
canOptimize(src) {
|
|
23
|
+
if (import.meta.env.DEV) return false;
|
|
24
|
+
if (!config.dangerouslyAllowSVG && src.split("?", 1)[0].endsWith(".svg")) return false;
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function CloudflareImageProvider({ config, children }) {
|
|
30
|
+
return /* @__PURE__ */ jsx(ImageProvider, {
|
|
31
|
+
provider: useMemo(() => createProvider(config), [config]),
|
|
32
|
+
children
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
export { CloudflareImageProvider };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ConfigContext } from "../../config.js";
|
|
2
|
+
import { ServerPlugin } from "../../lib/types.js";
|
|
3
|
+
|
|
4
|
+
//#region src/plugins/image/cloudflare.d.ts
|
|
5
|
+
/** @see https://developers.cloudflare.com/images/transform-images/transform-via-url/ */
|
|
6
|
+
interface CloudflareImageOptions {
|
|
7
|
+
/** Image transformation path prefix. @default "/cdn-cgi/image" */
|
|
8
|
+
path?: string;
|
|
9
|
+
/** Allowed image widths for optimization and srcSet generation. (ascending order) */
|
|
10
|
+
sizes?: number[];
|
|
11
|
+
/** Allowed quality values (1–100). @default [75] */
|
|
12
|
+
qualities?: number[];
|
|
13
|
+
/** Output format. @default "auto" */
|
|
14
|
+
format?: "auto" | "avif" | "webp" | "jpeg" | "png" | "json";
|
|
15
|
+
/** How the image fits the requested dimensions. */
|
|
16
|
+
fit?: "scale-down" | "contain" | "cover" | "crop" | "pad";
|
|
17
|
+
/** Allow SVG optimization. @default false */
|
|
18
|
+
dangerouslyAllowSVG?: boolean;
|
|
19
|
+
}
|
|
20
|
+
declare function imagePlugin<C extends ConfigContext = ConfigContext>(options?: CloudflareImageOptions): ServerPlugin<C>;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { CloudflareImageOptions, imagePlugin };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CloudflareImageProvider } from "./cloudflare.client.js";
|
|
2
|
+
import { resolveCloudflareImageConfig } from "./cloudflare.utils.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
//#region src/plugins/image/cloudflare.tsx
|
|
5
|
+
function imagePlugin(options = {}) {
|
|
6
|
+
const config = resolveCloudflareImageConfig(options);
|
|
7
|
+
return {
|
|
8
|
+
name: "image:cloudflare",
|
|
9
|
+
init() {
|
|
10
|
+
(this.data["core:provider"] ??= []).push((props) => {
|
|
11
|
+
props.children = /* @__PURE__ */ jsx(CloudflareImageProvider, {
|
|
12
|
+
config,
|
|
13
|
+
children: props.children
|
|
14
|
+
});
|
|
15
|
+
return props;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { imagePlugin };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//#region src/plugins/image/cloudflare.utils.ts
|
|
2
|
+
function resolveCloudflareImageConfig(options = {}) {
|
|
3
|
+
const qualities = options.qualities ?? [75];
|
|
4
|
+
return {
|
|
5
|
+
path: options.path ?? "/cdn-cgi/image",
|
|
6
|
+
dangerouslyAllowSVG: options.dangerouslyAllowSVG ?? false,
|
|
7
|
+
format: options.format ?? "auto",
|
|
8
|
+
fit: options.fit,
|
|
9
|
+
sizes: options.sizes ? options.sizes.sort((a, b) => a - b) : [
|
|
10
|
+
16,
|
|
11
|
+
32,
|
|
12
|
+
48,
|
|
13
|
+
64,
|
|
14
|
+
96,
|
|
15
|
+
128,
|
|
16
|
+
256,
|
|
17
|
+
384,
|
|
18
|
+
640,
|
|
19
|
+
750,
|
|
20
|
+
828,
|
|
21
|
+
1080,
|
|
22
|
+
1200,
|
|
23
|
+
1920,
|
|
24
|
+
2048,
|
|
25
|
+
3840
|
|
26
|
+
],
|
|
27
|
+
qualities,
|
|
28
|
+
defaultQuality: Math.max(...qualities)
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { resolveCloudflareImageConfig };
|
package/dist/plugins/llms.txt.js
CHANGED
|
@@ -38,7 +38,7 @@ function llmsPlugin(options = {}) {
|
|
|
38
38
|
return res;
|
|
39
39
|
});
|
|
40
40
|
},
|
|
41
|
-
createMiddlewares() {
|
|
41
|
+
createMiddlewares({ app }) {
|
|
42
42
|
if (this.mode === "static") return;
|
|
43
43
|
const middlewares = [];
|
|
44
44
|
const parsePathname = (pathname) => {
|
|
@@ -49,23 +49,26 @@ function llmsPlugin(options = {}) {
|
|
|
49
49
|
} : void 0;
|
|
50
50
|
return { slugs };
|
|
51
51
|
};
|
|
52
|
-
if (autoRedirect) middlewares.push(async ({ req
|
|
52
|
+
if (autoRedirect) middlewares.push(async ({ req }, next) => {
|
|
53
53
|
if (req.path.endsWith(".md") || !isMarkdownPreferred(req.raw)) return next();
|
|
54
54
|
const parsed = parsePathname(req.path);
|
|
55
55
|
if (!parsed) return next();
|
|
56
56
|
const { lang, slugs } = parsed;
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
const url = new URL(slugsToMarkdownPath(slugs, lang).pathname, req.url);
|
|
58
|
+
const res = await app.fetch(new Request(url));
|
|
59
|
+
if (!res.ok) return next();
|
|
60
|
+
return res;
|
|
59
61
|
});
|
|
60
|
-
if (this.mode === "dynamic") middlewares.push(async ({ req
|
|
62
|
+
if (this.mode === "dynamic") middlewares.push(async ({ req }, next) => {
|
|
61
63
|
if (!req.path.endsWith(".md")) return next();
|
|
62
64
|
const parsed = parsePathname(req.path);
|
|
63
65
|
if (!parsed || parsed.slugs[0] === "_llms.txt") return next();
|
|
64
66
|
const { lang, slugs } = parsed;
|
|
65
|
-
const loader = await this.getLoader();
|
|
66
67
|
slugs[slugs.length - 1] = slugs[slugs.length - 1].replace(/\.md$/, "");
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
const url = new URL(slugsToMarkdownPath(slugs, lang).pathname, req.url);
|
|
69
|
+
const res = await app.fetch(new Request(url));
|
|
70
|
+
if (!res.ok) return next();
|
|
71
|
+
return res;
|
|
69
72
|
});
|
|
70
73
|
return middlewares;
|
|
71
74
|
},
|
|
@@ -11,7 +11,11 @@ interface OpenAPIOptions {
|
|
|
11
11
|
disableLoaderPlugin?: boolean;
|
|
12
12
|
/** must be a client component */
|
|
13
13
|
ClientAPIPage?: FC<ClientApiPageProps>;
|
|
14
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Create proxy server.
|
|
16
|
+
*
|
|
17
|
+
* By default, it will create one when `proxyUrl` is specified in `createOpenAPI()`.
|
|
18
|
+
*/
|
|
15
19
|
createProxy?: boolean | (() => Awaitable<ReturnType<OpenAPIServer["createProxy"]>>);
|
|
16
20
|
}
|
|
17
21
|
/**
|
package/dist/plugins/openapi.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isPlainPathname } from "../lib/pathname.js";
|
|
1
2
|
import { PayloadProvider, WithPayload } from "../components/openapi.payload.js";
|
|
2
3
|
import { jsx } from "react/jsx-runtime";
|
|
3
4
|
//#region src/plugins/openapi.tsx
|
|
@@ -5,7 +6,7 @@ import { jsx } from "react/jsx-runtime";
|
|
|
5
6
|
* this will register the OpenAPI adapter & required layout configs.
|
|
6
7
|
*/
|
|
7
8
|
function openapiPlugin(options) {
|
|
8
|
-
const { server, disableLoaderPlugin = false
|
|
9
|
+
const { server, disableLoaderPlugin = false } = options;
|
|
9
10
|
function initRenderers(data) {
|
|
10
11
|
(data.renderers ??= []).push(function(data) {
|
|
11
12
|
if (isOpenAPI(this.page.data)) data.pageProps.full ??= true;
|
|
@@ -42,8 +43,9 @@ function openapiPlugin(options) {
|
|
|
42
43
|
return options;
|
|
43
44
|
},
|
|
44
45
|
async createPages({ createApi }) {
|
|
46
|
+
const proxyUrl = server.options.proxyUrl;
|
|
47
|
+
const { createProxy = typeof proxyUrl === "string" && isPlainPathname(proxyUrl) } = options;
|
|
45
48
|
if (createProxy) {
|
|
46
|
-
const proxyUrl = server.options.proxyUrl;
|
|
47
49
|
if (!proxyUrl) throw new Error(`[Fumapress] The "proxyUrl" option in createOpenAPI() is required to create proxy server`);
|
|
48
50
|
if (this.mode === "static") throw new Error(`[Fumapress] static mode is not compatible with proxy server`);
|
|
49
51
|
createApi({
|
package/dist/router/index.d.ts
CHANGED
|
@@ -3,13 +3,16 @@ import { ConfigBuilder, ConfigContext } from "../config.js";
|
|
|
3
3
|
import { Awaitable, RouteFns } from "../lib/types.js";
|
|
4
4
|
import { createPages } from "waku";
|
|
5
5
|
import { unstable_notFound as notFound, unstable_redirect as redirect } from "waku/router/server";
|
|
6
|
+
import { Hono } from "hono/tiny";
|
|
6
7
|
import { MiddlewareHandler } from "hono";
|
|
7
8
|
import { unstable_createServerEntryAdapter } from "waku/adapter-builders";
|
|
8
9
|
|
|
9
10
|
//#region src/router/index.d.ts
|
|
10
11
|
interface Router<C extends ConfigContext = ConfigContext> {
|
|
11
12
|
createPages: (fn?: (this: AppContext<C>, fns: RouteFns) => Awaitable<void>, options?: Options) => ReturnType<typeof createPages>;
|
|
12
|
-
createMiddlewares: () => ((
|
|
13
|
+
createMiddlewares: () => ((opts: {
|
|
14
|
+
app: Hono;
|
|
15
|
+
}) => MiddlewareHandler)[];
|
|
13
16
|
patchAdapter: <Options>(adapter: ReturnType<typeof unstable_createServerEntryAdapter<Options>>) => ReturnType<typeof unstable_createServerEntryAdapter<Options>>;
|
|
14
17
|
}
|
|
15
18
|
declare function createRouter<C extends ConfigContext>(userConfig: ConfigBuilder<C>): Promise<Router<C>>;
|
package/dist/router/index.js
CHANGED
|
@@ -39,6 +39,7 @@ async function createRouter(userConfig) {
|
|
|
39
39
|
}
|
|
40
40
|
return page;
|
|
41
41
|
}
|
|
42
|
+
fns.createInterceptor((next) => appContext.run(context, next));
|
|
42
43
|
await base?.call(context, fns);
|
|
43
44
|
for (const plugin of context.plugins) await plugin.createPages?.call(context, fns);
|
|
44
45
|
const staticPaths = [];
|
|
@@ -132,13 +133,10 @@ async function createRouter(userConfig) {
|
|
|
132
133
|
}, createPagesOptions);
|
|
133
134
|
return result;
|
|
134
135
|
}
|
|
135
|
-
function
|
|
136
|
-
return (_c, next) => appContext.run(context, next);
|
|
137
|
-
}
|
|
138
|
-
function pluginsMiddleware() {
|
|
136
|
+
function pluginsMiddleware(opts) {
|
|
139
137
|
async function init() {
|
|
140
138
|
const out = [];
|
|
141
|
-
const resolved = await Promise.all(context.plugins.map((plugin) => plugin.createMiddlewares?.call(context)));
|
|
139
|
+
const resolved = await Promise.all(context.plugins.map((plugin) => plugin.createMiddlewares?.call(context, opts)));
|
|
142
140
|
for (const v of resolved) if (v) out.push(...v);
|
|
143
141
|
return out;
|
|
144
142
|
}
|
|
@@ -160,24 +158,7 @@ async function createRouter(userConfig) {
|
|
|
160
158
|
}
|
|
161
159
|
function patchAdapter(adapter) {
|
|
162
160
|
return (handlers, options) => {
|
|
163
|
-
let entry = adapter(
|
|
164
|
-
...handlers,
|
|
165
|
-
handleBuild(utils) {
|
|
166
|
-
const hooks = [];
|
|
167
|
-
hooks.push(utils.withRequest);
|
|
168
|
-
hooks.push((_req, fn) => appContext.run(context, fn));
|
|
169
|
-
for (const plugin of context.plugins) if (plugin.unstable_onSSGRequest) hooks.push(plugin.unstable_onSSGRequest);
|
|
170
|
-
function runHook(req, fn, index = 0) {
|
|
171
|
-
const hook = hooks[index];
|
|
172
|
-
if (!hook) return fn();
|
|
173
|
-
return hook(req, () => runHook(req, fn, index + 1));
|
|
174
|
-
}
|
|
175
|
-
return handlers.handleBuild({
|
|
176
|
-
...utils,
|
|
177
|
-
withRequest: runHook
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
}, options);
|
|
161
|
+
let entry = adapter(handlers, options);
|
|
181
162
|
for (const plugin of context.plugins) if (plugin.unstable_onServerEntry) entry = plugin.unstable_onServerEntry(entry);
|
|
182
163
|
return entry;
|
|
183
164
|
};
|
|
@@ -186,7 +167,7 @@ async function createRouter(userConfig) {
|
|
|
186
167
|
createPages: createPages$2,
|
|
187
168
|
patchAdapter,
|
|
188
169
|
createMiddlewares() {
|
|
189
|
-
return [
|
|
170
|
+
return [pluginsMiddleware];
|
|
190
171
|
}
|
|
191
172
|
};
|
|
192
173
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fumapress",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.3",
|
|
4
4
|
"description": "An opinionated docs framework powered by Fumadocs",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Docs",
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"./layouts/switch": "./dist/layouts/switch.js",
|
|
35
35
|
"./plugins/blog": "./dist/plugins/blog.js",
|
|
36
36
|
"./plugins/flexsearch": "./dist/plugins/flexsearch.js",
|
|
37
|
+
"./plugins/image/cloudflare": "./dist/plugins/image/cloudflare.js",
|
|
37
38
|
"./plugins/image/self-hosted": "./dist/plugins/image/self-hosted.js",
|
|
38
39
|
"./plugins/image/vercel": "./dist/plugins/image/vercel.js",
|
|
39
40
|
"./plugins/image/vercel.enhancer": "./dist/plugins/image/vercel.enhancer.js",
|
|
@@ -60,7 +61,7 @@
|
|
|
60
61
|
"flexsearch": "^0.8.212",
|
|
61
62
|
"lucide-react": "^1.17.0",
|
|
62
63
|
"tailwind-merge": "^3.6.0",
|
|
63
|
-
"vite": "^8.0.
|
|
64
|
+
"vite": "^8.0.16",
|
|
64
65
|
"xml-js": "^1.6.11",
|
|
65
66
|
"zod": "^4.4.3"
|
|
66
67
|
},
|
|
@@ -70,20 +71,20 @@
|
|
|
70
71
|
"@types/http-cache-semantics": "^4.2.0",
|
|
71
72
|
"@types/mdx": "^2.0.13",
|
|
72
73
|
"@types/node": "^25.9.1",
|
|
73
|
-
"@types/react": "^19.2.
|
|
74
|
+
"@types/react": "^19.2.16",
|
|
74
75
|
"@types/react-dom": "^19.2.3",
|
|
75
76
|
"fumadocs-core": "^16.9.3",
|
|
76
77
|
"fumadocs-mdx": "^15.0.10",
|
|
77
|
-
"fumadocs-openapi": "^10.
|
|
78
|
+
"fumadocs-openapi": "^10.10.3",
|
|
78
79
|
"fumadocs-ui": "^16.9.3",
|
|
79
80
|
"hono": "^4.12.23",
|
|
80
81
|
"http-cache-semantics": "^4.2.0",
|
|
81
|
-
"react": "^19.2.
|
|
82
|
-
"react-dom": "^19.2.
|
|
82
|
+
"react": "^19.2.7",
|
|
83
|
+
"react-dom": "^19.2.7",
|
|
83
84
|
"sharp": "^0.34.5",
|
|
84
|
-
"tsdown": "0.22.
|
|
85
|
+
"tsdown": "0.22.1",
|
|
85
86
|
"typescript": "^6.0.3",
|
|
86
|
-
"waku": "1.0.0-beta.
|
|
87
|
+
"waku": "1.0.0-beta.2"
|
|
87
88
|
},
|
|
88
89
|
"peerDependencies": {
|
|
89
90
|
"@types/mdx": "*",
|