mirror of
https://github.com/makeplane/plane.git
synced 2025-12-16 20:07:56 +01:00
[WEB-5386] refactor: update all apps to use react-router for development and enable SSR for space app. (#8095)
This commit is contained in:
@@ -6,9 +6,9 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "cross-env NODE_ENV=development PORT=3001 node server.mjs",
|
"dev": "react-router dev --port 3001",
|
||||||
"build": "react-router build",
|
"build": "react-router build",
|
||||||
"preview": "react-router build && cross-env NODE_ENV=production PORT=3001 node server.mjs",
|
"preview": "react-router build && serve -s build/client -l 3001",
|
||||||
"start": "serve -s build/client -l 3001",
|
"start": "serve -s build/client -l 3001",
|
||||||
"clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist && rm -rf build",
|
"clean": "rm -rf .turbo && rm -rf .next && rm -rf node_modules && rm -rf dist && rm -rf build",
|
||||||
"check:lint": "eslint . --max-warnings 19",
|
"check:lint": "eslint . --max-warnings 19",
|
||||||
@@ -27,23 +27,17 @@
|
|||||||
"@plane/types": "workspace:*",
|
"@plane/types": "workspace:*",
|
||||||
"@plane/ui": "workspace:*",
|
"@plane/ui": "workspace:*",
|
||||||
"@plane/utils": "workspace:*",
|
"@plane/utils": "workspace:*",
|
||||||
"@react-router/express": "^7.9.3",
|
|
||||||
"@react-router/node": "^7.9.3",
|
"@react-router/node": "^7.9.3",
|
||||||
"@tanstack/react-virtual": "^3.13.12",
|
"@tanstack/react-virtual": "^3.13.12",
|
||||||
"@tanstack/virtual-core": "^3.13.12",
|
"@tanstack/virtual-core": "^3.13.12",
|
||||||
"@vercel/edge": "1.2.2",
|
"@vercel/edge": "1.2.2",
|
||||||
"axios": "catalog:",
|
"axios": "catalog:",
|
||||||
"compression": "^1.8.1",
|
|
||||||
"cross-env": "^7.0.3",
|
|
||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.5",
|
||||||
"express": "^5.1.0",
|
|
||||||
"http-proxy-middleware": "^3.0.5",
|
|
||||||
"isbot": "^5.1.31",
|
"isbot": "^5.1.31",
|
||||||
"lodash-es": "catalog:",
|
"lodash-es": "catalog:",
|
||||||
"lucide-react": "catalog:",
|
"lucide-react": "catalog:",
|
||||||
"mobx": "catalog:",
|
"mobx": "catalog:",
|
||||||
"mobx-react": "catalog:",
|
"mobx-react": "catalog:",
|
||||||
"morgan": "^1.10.1",
|
|
||||||
"next-themes": "^0.2.1",
|
"next-themes": "^0.2.1",
|
||||||
"react": "catalog:",
|
"react": "catalog:",
|
||||||
"react-dom": "catalog:",
|
"react-dom": "catalog:",
|
||||||
@@ -59,10 +53,7 @@
|
|||||||
"@plane/tailwind-config": "workspace:*",
|
"@plane/tailwind-config": "workspace:*",
|
||||||
"@plane/typescript-config": "workspace:*",
|
"@plane/typescript-config": "workspace:*",
|
||||||
"@react-router/dev": "^7.9.1",
|
"@react-router/dev": "^7.9.1",
|
||||||
"@types/compression": "^1.8.1",
|
|
||||||
"@types/express": "4.17.23",
|
|
||||||
"@types/lodash-es": "catalog:",
|
"@types/lodash-es": "catalog:",
|
||||||
"@types/morgan": "^1.9.10",
|
|
||||||
"@types/node": "catalog:",
|
"@types/node": "catalog:",
|
||||||
"@types/react": "catalog:",
|
"@types/react": "catalog:",
|
||||||
"@types/react-dom": "catalog:",
|
"@types/react-dom": "catalog:",
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
import type { Config } from "@react-router/dev/config";
|
import type { Config } from "@react-router/dev/config";
|
||||||
|
import { joinUrlPath } from "@plane/utils";
|
||||||
|
|
||||||
|
const basePath = joinUrlPath(process.env.NEXT_PUBLIC_ADMIN_BASE_PATH ?? "", "/") ?? "/";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
appDirectory: "app",
|
appDirectory: "app",
|
||||||
basename: process.env.NEXT_PUBLIC_ADMIN_BASE_PATH,
|
basename: basePath,
|
||||||
// Admin runs as a client-side app; build a static client bundle only
|
// Admin runs as a client-side app; build a static client bundle only
|
||||||
ssr: false,
|
ssr: false,
|
||||||
} satisfies Config;
|
} satisfies Config;
|
||||||
|
|||||||
@@ -1,76 +0,0 @@
|
|||||||
import path from "node:path";
|
|
||||||
import { fileURLToPath } from "node:url";
|
|
||||||
import compression from "compression";
|
|
||||||
import dotenv from "dotenv";
|
|
||||||
import express from "express";
|
|
||||||
import morgan from "morgan";
|
|
||||||
|
|
||||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
||||||
|
|
||||||
dotenv.config({ path: path.resolve(__dirname, ".env") });
|
|
||||||
|
|
||||||
const BUILD_PATH = "./build/server/index.js";
|
|
||||||
const DEVELOPMENT = process.env.NODE_ENV !== "production";
|
|
||||||
|
|
||||||
// Derive the port from NEXT_PUBLIC_ADMIN_BASE_URL when available, otherwise
|
|
||||||
// default to http://localhost:3001 and fall back to PORT env if explicitly set.
|
|
||||||
const DEFAULT_BASE_URL = "http://localhost:3001";
|
|
||||||
const ADMIN_BASE_URL = process.env.NEXT_PUBLIC_ADMIN_BASE_URL || DEFAULT_BASE_URL;
|
|
||||||
let parsedBaseUrl;
|
|
||||||
try {
|
|
||||||
parsedBaseUrl = new URL(ADMIN_BASE_URL);
|
|
||||||
} catch {
|
|
||||||
parsedBaseUrl = new URL(DEFAULT_BASE_URL);
|
|
||||||
}
|
|
||||||
|
|
||||||
const PORT = Number.parseInt(parsedBaseUrl.port, 10);
|
|
||||||
|
|
||||||
async function start() {
|
|
||||||
const app = express();
|
|
||||||
|
|
||||||
app.use(compression());
|
|
||||||
app.disable("x-powered-by");
|
|
||||||
|
|
||||||
if (DEVELOPMENT) {
|
|
||||||
console.log("Starting development server");
|
|
||||||
|
|
||||||
const vite = await import("vite").then((vite) =>
|
|
||||||
vite.createServer({
|
|
||||||
server: { middlewareMode: true },
|
|
||||||
appType: "custom",
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
app.use(vite.middlewares);
|
|
||||||
|
|
||||||
app.use(async (req, res, next) => {
|
|
||||||
try {
|
|
||||||
const source = await vite.ssrLoadModule("./server/app.ts");
|
|
||||||
return source.app(req, res, next);
|
|
||||||
} catch (error) {
|
|
||||||
if (error instanceof Error) {
|
|
||||||
vite.ssrFixStacktrace(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
next(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
console.log("Starting production server");
|
|
||||||
|
|
||||||
app.use("/assets", express.static("build/client/assets", { immutable: true, maxAge: "1y" }));
|
|
||||||
app.use(morgan("tiny"));
|
|
||||||
app.use(express.static("build/client", { maxAge: "1h" }));
|
|
||||||
app.use(await import(BUILD_PATH).then((mod) => mod.app));
|
|
||||||
}
|
|
||||||
|
|
||||||
app.listen(PORT, () => {
|
|
||||||
const origin = `${parsedBaseUrl.protocol}//${parsedBaseUrl.hostname}:${PORT}`;
|
|
||||||
console.log(`Server is running on ${origin}`);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
start().catch((error) => {
|
|
||||||
console.error(error);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
import "react-router";
|
|
||||||
import { createRequestHandler } from "@react-router/express";
|
|
||||||
import express from "express";
|
|
||||||
import type { Express } from "express";
|
|
||||||
import { createProxyMiddleware } from "http-proxy-middleware";
|
|
||||||
|
|
||||||
const NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL
|
|
||||||
? process.env.NEXT_PUBLIC_API_BASE_URL.replace(/\/$/, "")
|
|
||||||
: "http://127.0.0.1:8000";
|
|
||||||
const NEXT_PUBLIC_API_BASE_PATH = process.env.NEXT_PUBLIC_API_BASE_PATH
|
|
||||||
? process.env.NEXT_PUBLIC_API_BASE_PATH.replace(/\/+$/, "")
|
|
||||||
: "/api";
|
|
||||||
const NORMALIZED_API_BASE_PATH = NEXT_PUBLIC_API_BASE_PATH.startsWith("/")
|
|
||||||
? NEXT_PUBLIC_API_BASE_PATH
|
|
||||||
: `/${NEXT_PUBLIC_API_BASE_PATH}`;
|
|
||||||
const NEXT_PUBLIC_ADMIN_BASE_PATH = process.env.NEXT_PUBLIC_ADMIN_BASE_PATH
|
|
||||||
? process.env.NEXT_PUBLIC_ADMIN_BASE_PATH.replace(/\/$/, "")
|
|
||||||
: "/";
|
|
||||||
|
|
||||||
export const app: Express = express();
|
|
||||||
|
|
||||||
// Ensure proxy-aware hostname/URL handling (e.g., X-Forwarded-Host/Proto)
|
|
||||||
// so generated URLs/redirects reflect the public host when behind Nginx.
|
|
||||||
// See related fix in Remix Express adapter.
|
|
||||||
app.set("trust proxy", true);
|
|
||||||
|
|
||||||
app.use(
|
|
||||||
"/api",
|
|
||||||
createProxyMiddleware({
|
|
||||||
target: NEXT_PUBLIC_API_BASE_URL,
|
|
||||||
changeOrigin: true,
|
|
||||||
secure: false,
|
|
||||||
pathRewrite: (path: string) =>
|
|
||||||
NORMALIZED_API_BASE_PATH === "/api" ? path : path.replace(/^\/api/, NORMALIZED_API_BASE_PATH),
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
const router = express.Router();
|
|
||||||
|
|
||||||
router.use(
|
|
||||||
createRequestHandler({
|
|
||||||
build: () => import("virtual:react-router/server-build"),
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
app.use(NEXT_PUBLIC_ADMIN_BASE_PATH, router);
|
|
||||||
@@ -1,59 +1,39 @@
|
|||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import { reactRouter } from "@react-router/dev/vite";
|
import { reactRouter } from "@react-router/dev/vite";
|
||||||
|
import dotenv from "dotenv";
|
||||||
import { defineConfig } from "vite";
|
import { defineConfig } from "vite";
|
||||||
import tsconfigPaths from "vite-tsconfig-paths";
|
import tsconfigPaths from "vite-tsconfig-paths";
|
||||||
import { joinUrlPath } from "@plane/utils";
|
import { joinUrlPath } from "@plane/utils";
|
||||||
|
|
||||||
const PUBLIC_ENV_KEYS = [
|
dotenv.config({ path: path.resolve(__dirname, ".env") });
|
||||||
"NEXT_PUBLIC_API_BASE_URL",
|
|
||||||
"NEXT_PUBLIC_API_BASE_PATH",
|
|
||||||
"NEXT_PUBLIC_ADMIN_BASE_URL",
|
|
||||||
"NEXT_PUBLIC_ADMIN_BASE_PATH",
|
|
||||||
"NEXT_PUBLIC_SPACE_BASE_URL",
|
|
||||||
"NEXT_PUBLIC_SPACE_BASE_PATH",
|
|
||||||
"NEXT_PUBLIC_LIVE_BASE_URL",
|
|
||||||
"NEXT_PUBLIC_LIVE_BASE_PATH",
|
|
||||||
"NEXT_PUBLIC_WEB_BASE_URL",
|
|
||||||
"NEXT_PUBLIC_WEB_BASE_PATH",
|
|
||||||
"NEXT_PUBLIC_WEBSITE_URL",
|
|
||||||
"NEXT_PUBLIC_SUPPORT_EMAIL",
|
|
||||||
];
|
|
||||||
|
|
||||||
const publicEnv = PUBLIC_ENV_KEYS.reduce<Record<string, string>>((acc, key) => {
|
// Automatically expose all environment variables prefixed with NEXT_PUBLIC_
|
||||||
acc[key] = process.env[key] ?? "";
|
const publicEnv = Object.keys(process.env)
|
||||||
return acc;
|
.filter((key) => key.startsWith("NEXT_PUBLIC_"))
|
||||||
}, {});
|
.reduce<Record<string, string>>((acc, key) => {
|
||||||
|
acc[key] = process.env[key] ?? "";
|
||||||
|
return acc;
|
||||||
|
}, {});
|
||||||
|
|
||||||
export default defineConfig(({ isSsrBuild }) => {
|
const basePath = joinUrlPath(process.env.NEXT_PUBLIC_ADMIN_BASE_PATH ?? "", "/") ?? "/";
|
||||||
// Only produce an SSR bundle when explicitly enabled.
|
|
||||||
// For static deployments (default), we skip the server build entirely.
|
|
||||||
const enableSsrBuild = process.env.ADMIN_ENABLE_SSR_BUILD === "true";
|
|
||||||
const basePath = joinUrlPath(process.env.NEXT_PUBLIC_ADMIN_BASE_PATH ?? "", "/") ?? "/";
|
|
||||||
|
|
||||||
return {
|
export default defineConfig(() => ({
|
||||||
base: basePath,
|
base: basePath,
|
||||||
define: {
|
define: {
|
||||||
"process.env": JSON.stringify(publicEnv),
|
"process.env": JSON.stringify(publicEnv),
|
||||||
|
},
|
||||||
|
build: {
|
||||||
|
assetsInlineLimit: 0,
|
||||||
|
},
|
||||||
|
plugins: [reactRouter(), tsconfigPaths({ projects: [path.resolve(__dirname, "tsconfig.json")] })],
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
// Next.js compatibility shims used within admin
|
||||||
|
"next/image": path.resolve(__dirname, "app/compat/next/image.tsx"),
|
||||||
|
"next/link": path.resolve(__dirname, "app/compat/next/link.tsx"),
|
||||||
|
"next/navigation": path.resolve(__dirname, "app/compat/next/navigation.ts"),
|
||||||
},
|
},
|
||||||
build: {
|
dedupe: ["react", "react-dom"],
|
||||||
assetsInlineLimit: 0,
|
},
|
||||||
rollupOptions:
|
// No SSR-specific overrides needed; alias resolves to ESM build
|
||||||
isSsrBuild && enableSsrBuild
|
}));
|
||||||
? {
|
|
||||||
input: path.resolve(__dirname, "server/app.ts"),
|
|
||||||
}
|
|
||||||
: undefined,
|
|
||||||
},
|
|
||||||
plugins: [reactRouter(), tsconfigPaths({ projects: [path.resolve(__dirname, "tsconfig.json")] })],
|
|
||||||
resolve: {
|
|
||||||
alias: {
|
|
||||||
// Next.js compatibility shims used within admin
|
|
||||||
"next/image": path.resolve(__dirname, "app/compat/next/image.tsx"),
|
|
||||||
"next/link": path.resolve(__dirname, "app/compat/next/link.tsx"),
|
|
||||||
"next/navigation": path.resolve(__dirname, "app/compat/next/navigation.ts"),
|
|
||||||
},
|
|
||||||
dedupe: ["react", "react-dom"],
|
|
||||||
},
|
|
||||||
// No SSR-specific overrides needed; alias resolves to ESM build
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|||||||
@@ -73,14 +73,17 @@ RUN pnpm turbo run build --filter=space
|
|||||||
|
|
||||||
# =========================================================================== #
|
# =========================================================================== #
|
||||||
|
|
||||||
FROM nginx:1.27-alpine AS production
|
FROM base AS runner
|
||||||
|
|
||||||
COPY apps/space/nginx/nginx.conf /etc/nginx/nginx.conf
|
COPY --from=installer /app/apps/space/build ./apps/space/build
|
||||||
COPY --from=installer /app/apps/space/build/client /usr/share/nginx/html/spaces
|
COPY --from=installer /app/apps/space/node_modules ./apps/space/node_modules
|
||||||
|
COPY --from=installer /app/node_modules ./node_modules
|
||||||
|
|
||||||
|
WORKDIR /app/apps/space
|
||||||
|
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
|
|
||||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
||||||
CMD curl -fsS http://127.0.0.1:3000/ >/dev/null || exit 1
|
CMD curl -fsS http://127.0.0.1:3000/ >/dev/null || exit 1
|
||||||
|
|
||||||
CMD ["nginx", "-g", "daemon off;"]
|
CMD ["npx", "react-router-serve", "./build/server/index.js"]
|
||||||
|
|||||||
@@ -1,66 +0,0 @@
|
|||||||
"use client";
|
|
||||||
|
|
||||||
import { observer } from "mobx-react";
|
|
||||||
import { Outlet } from "react-router";
|
|
||||||
import useSWR from "swr";
|
|
||||||
// components
|
|
||||||
import { LogoSpinner } from "@/components/common/logo-spinner";
|
|
||||||
import { PoweredBy } from "@/components/common/powered-by";
|
|
||||||
import { SomethingWentWrongError } from "@/components/issues/issue-layouts/error";
|
|
||||||
import { IssuesNavbarRoot } from "@/components/issues/navbar";
|
|
||||||
// hooks
|
|
||||||
import { usePublish, usePublishList } from "@/hooks/store/publish";
|
|
||||||
import { useIssueFilter } from "@/hooks/store/use-issue-filter";
|
|
||||||
import type { Route } from "./+types/client-layout";
|
|
||||||
|
|
||||||
const IssuesClientLayout = observer((props: Route.ComponentProps) => {
|
|
||||||
const { anchor } = props.params;
|
|
||||||
// store hooks
|
|
||||||
const { fetchPublishSettings } = usePublishList();
|
|
||||||
const publishSettings = usePublish(anchor);
|
|
||||||
const { updateLayoutOptions } = useIssueFilter();
|
|
||||||
// fetch publish settings
|
|
||||||
const { error } = useSWR(
|
|
||||||
anchor ? `PUBLISH_SETTINGS_${anchor}` : null,
|
|
||||||
anchor
|
|
||||||
? async () => {
|
|
||||||
const response = await fetchPublishSettings(anchor);
|
|
||||||
if (response.view_props) {
|
|
||||||
updateLayoutOptions({
|
|
||||||
list: !!response.view_props.list,
|
|
||||||
kanban: !!response.view_props.kanban,
|
|
||||||
calendar: !!response.view_props.calendar,
|
|
||||||
gantt: !!response.view_props.gantt,
|
|
||||||
spreadsheet: !!response.view_props.spreadsheet,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
: null
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!publishSettings && !error) {
|
|
||||||
return (
|
|
||||||
<div className="flex items-center justify-center h-screen w-full">
|
|
||||||
<LogoSpinner />
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (error) return <SomethingWentWrongError />;
|
|
||||||
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<div className="relative flex h-screen min-h-[500px] w-screen flex-col overflow-hidden">
|
|
||||||
<div className="relative flex h-[60px] flex-shrink-0 select-none items-center border-b border-custom-border-300 bg-custom-sidebar-background-100">
|
|
||||||
<IssuesNavbarRoot publishSettings={publishSettings} />
|
|
||||||
</div>
|
|
||||||
<div className="relative h-full w-full overflow-hidden bg-custom-background-90">
|
|
||||||
<Outlet />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<PoweredBy />
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
export default IssuesClientLayout;
|
|
||||||
@@ -1,54 +1,142 @@
|
|||||||
"use server";
|
import { observer } from "mobx-react";
|
||||||
|
import { Outlet } from "react-router";
|
||||||
|
import type { ShouldRevalidateFunctionArgs } from "react-router";
|
||||||
|
import useSWR from "swr";
|
||||||
|
// components
|
||||||
|
import { LogoSpinner } from "@/components/common/logo-spinner";
|
||||||
|
import { PoweredBy } from "@/components/common/powered-by";
|
||||||
|
import { SomethingWentWrongError } from "@/components/issues/issue-layouts/error";
|
||||||
|
import { IssuesNavbarRoot } from "@/components/issues/navbar";
|
||||||
|
// hooks
|
||||||
|
import { PageNotFound } from "@/components/ui/not-found";
|
||||||
|
import { usePublish, usePublishList } from "@/hooks/store/publish";
|
||||||
|
import { useIssueFilter } from "@/hooks/store/use-issue-filter";
|
||||||
|
import type { Route } from "./+types/layout";
|
||||||
|
|
||||||
type Props = {
|
const DEFAULT_TITLE = "Plane";
|
||||||
children: React.ReactNode;
|
const DEFAULT_DESCRIPTION = "Made with Plane, an AI-powered work management platform with publishing capabilities.";
|
||||||
params: {
|
|
||||||
anchor: string;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
// TODO: Convert into SSR in order to generate metadata
|
interface IssueMetadata {
|
||||||
export async function generateMetadata({ params }: Props) {
|
name?: string;
|
||||||
|
description?: string;
|
||||||
|
cover_image?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Loader function runs on the server and fetches metadata
|
||||||
|
export async function loader({ params }: Route.LoaderArgs) {
|
||||||
const { anchor } = params;
|
const { anchor } = params;
|
||||||
const DEFAULT_TITLE = "Plane";
|
|
||||||
const DEFAULT_DESCRIPTION = "Made with Plane, an AI-powered work management platform with publishing capabilities.";
|
|
||||||
// Validate anchor before using in request (only allow alphanumeric, -, _)
|
// Validate anchor before using in request (only allow alphanumeric, -, _)
|
||||||
const ANCHOR_REGEX = /^[a-zA-Z0-9_-]+$/;
|
const ANCHOR_REGEX = /^[a-zA-Z0-9_-]+$/;
|
||||||
if (!ANCHOR_REGEX.test(anchor)) {
|
if (!ANCHOR_REGEX.test(anchor)) {
|
||||||
return { title: DEFAULT_TITLE, description: DEFAULT_DESCRIPTION };
|
return { metadata: null };
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch(`${process.env.NEXT_PUBLIC_API_BASE_URL}/api/public/anchor/${anchor}/meta/`);
|
const response = await fetch(`${process.env.NEXT_PUBLIC_API_BASE_URL}/api/public/anchor/${anchor}/meta/`);
|
||||||
const data = await response.json();
|
|
||||||
return {
|
if (!response.ok) {
|
||||||
title: data?.name || DEFAULT_TITLE,
|
return { metadata: null };
|
||||||
description: data?.description || DEFAULT_DESCRIPTION,
|
}
|
||||||
openGraph: {
|
|
||||||
title: data?.name || DEFAULT_TITLE,
|
const metadata: IssueMetadata = await response.json();
|
||||||
description: data?.description || DEFAULT_DESCRIPTION,
|
return { metadata };
|
||||||
type: "website",
|
} catch (error) {
|
||||||
images: [
|
console.error("Error fetching issue metadata:", error);
|
||||||
{
|
return { metadata: null };
|
||||||
url: data?.cover_image,
|
|
||||||
width: 800,
|
|
||||||
height: 600,
|
|
||||||
alt: data?.name || DEFAULT_TITLE,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
twitter: {
|
|
||||||
card: "summary_large_image",
|
|
||||||
title: data?.name || DEFAULT_TITLE,
|
|
||||||
description: data?.description || DEFAULT_DESCRIPTION,
|
|
||||||
images: [data?.cover_image],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
} catch {
|
|
||||||
return { title: DEFAULT_TITLE, description: DEFAULT_DESCRIPTION };
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function IssuesLayout(_props: Props) {
|
// Meta function uses the loader data to generate metadata
|
||||||
// return <IssuesClientLayout params={{ anchor }}>{children}</IssuesClientLayout>;
|
export function meta({ loaderData }: Route.MetaArgs) {
|
||||||
return null;
|
const metadata = loaderData?.metadata;
|
||||||
|
|
||||||
|
const title = metadata?.name || DEFAULT_TITLE;
|
||||||
|
const description = metadata?.description || DEFAULT_DESCRIPTION;
|
||||||
|
const coverImage = metadata?.cover_image;
|
||||||
|
|
||||||
|
const metaTags = [
|
||||||
|
{ title },
|
||||||
|
{ name: "description", content: description },
|
||||||
|
// OpenGraph metadata
|
||||||
|
{ property: "og:title", content: title },
|
||||||
|
{ property: "og:description", content: description },
|
||||||
|
{ property: "og:type", content: "website" },
|
||||||
|
// Twitter metadata
|
||||||
|
{ name: "twitter:card", content: "summary_large_image" },
|
||||||
|
{ name: "twitter:title", content: title },
|
||||||
|
{ name: "twitter:description", content: description },
|
||||||
|
];
|
||||||
|
|
||||||
|
// Add images if cover image exists
|
||||||
|
if (coverImage) {
|
||||||
|
metaTags.push(
|
||||||
|
{ property: "og:image", content: coverImage },
|
||||||
|
{ property: "og:image:width", content: "800" },
|
||||||
|
{ property: "og:image:height", content: "600" },
|
||||||
|
{ property: "og:image:alt", content: title },
|
||||||
|
{ name: "twitter:image", content: coverImage }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return metaTags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Prevent loader from re-running on anchor param changes
|
||||||
|
export function shouldRevalidate({ currentParams, nextParams }: ShouldRevalidateFunctionArgs) {
|
||||||
|
return currentParams.anchor !== nextParams.anchor;
|
||||||
|
}
|
||||||
|
|
||||||
|
function IssuesLayout(props: Route.ComponentProps) {
|
||||||
|
const { anchor } = props.params;
|
||||||
|
// store hooks
|
||||||
|
const { fetchPublishSettings } = usePublishList();
|
||||||
|
const publishSettings = usePublish(anchor);
|
||||||
|
const { updateLayoutOptions } = useIssueFilter();
|
||||||
|
// fetch publish settings
|
||||||
|
const { error } = useSWR(
|
||||||
|
anchor ? `PUBLISH_SETTINGS_${anchor}` : null,
|
||||||
|
anchor
|
||||||
|
? async () => {
|
||||||
|
const response = await fetchPublishSettings(anchor);
|
||||||
|
if (response.view_props) {
|
||||||
|
updateLayoutOptions({
|
||||||
|
list: !!response.view_props.list,
|
||||||
|
kanban: !!response.view_props.kanban,
|
||||||
|
calendar: !!response.view_props.calendar,
|
||||||
|
gantt: !!response.view_props.gantt,
|
||||||
|
spreadsheet: !!response.view_props.spreadsheet,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
: null
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!publishSettings && !error) {
|
||||||
|
return (
|
||||||
|
<div className="flex items-center justify-center h-screen w-full">
|
||||||
|
<LogoSpinner />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (error?.status === 404) return <PageNotFound />;
|
||||||
|
|
||||||
|
if (error) return <SomethingWentWrongError />;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div className="relative flex h-screen min-h-[500px] w-screen flex-col overflow-hidden">
|
||||||
|
<div className="relative flex h-[60px] flex-shrink-0 select-none items-center border-b border-custom-border-300 bg-custom-sidebar-background-100">
|
||||||
|
<IssuesNavbarRoot publishSettings={publishSettings} />
|
||||||
|
</div>
|
||||||
|
<div className="relative h-full w-full overflow-hidden bg-custom-background-90">
|
||||||
|
<Outlet />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<PoweredBy />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default observer(IssuesLayout);
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import { Links, Meta, Outlet, Scripts } from "react-router";
|
import { Links, Meta, Outlet, Scripts } from "react-router";
|
||||||
import type { LinksFunction } from "react-router";
|
import type { HeadersFunction, LinksFunction } from "react-router";
|
||||||
// assets
|
// assets
|
||||||
import appleTouchIcon from "@/app/assets/favicon/apple-touch-icon.png?url";
|
import appleTouchIcon from "@/app/assets/favicon/apple-touch-icon.png?url";
|
||||||
import favicon16 from "@/app/assets/favicon/favicon-16x16.png?url";
|
import favicon16 from "@/app/assets/favicon/favicon-16x16.png?url";
|
||||||
import favicon32 from "@/app/assets/favicon/favicon-32x32.png?url";
|
import favicon32 from "@/app/assets/favicon/favicon-32x32.png?url";
|
||||||
import faviconIco from "@/app/assets/favicon/favicon.ico?url";
|
import faviconIco from "@/app/assets/favicon/favicon.ico?url";
|
||||||
|
import siteWebmanifest from "@/app/assets/favicon/site.webmanifest?url";
|
||||||
import { LogoSpinner } from "@/components/common/logo-spinner";
|
import { LogoSpinner } from "@/components/common/logo-spinner";
|
||||||
import globalStyles from "@/styles/globals.css?url";
|
import globalStyles from "@/styles/globals.css?url";
|
||||||
// types
|
// types
|
||||||
@@ -21,10 +22,18 @@ export const links: LinksFunction = () => [
|
|||||||
{ rel: "icon", type: "image/png", sizes: "32x32", href: favicon32 },
|
{ rel: "icon", type: "image/png", sizes: "32x32", href: favicon32 },
|
||||||
{ rel: "icon", type: "image/png", sizes: "16x16", href: favicon16 },
|
{ rel: "icon", type: "image/png", sizes: "16x16", href: favicon16 },
|
||||||
{ rel: "shortcut icon", href: faviconIco },
|
{ rel: "shortcut icon", href: faviconIco },
|
||||||
{ rel: "manifest", href: `/site.webmanifest.json` },
|
{ rel: "manifest", href: siteWebmanifest },
|
||||||
{ rel: "stylesheet", href: globalStyles },
|
{ rel: "stylesheet", href: globalStyles },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
export const headers: HeadersFunction = () => ({
|
||||||
|
"Referrer-Policy": "origin-when-cross-origin",
|
||||||
|
"X-Frame-Options": "SAMEORIGIN",
|
||||||
|
"X-Content-Type-Options": "nosniff",
|
||||||
|
"X-DNS-Prefetch-Control": "on",
|
||||||
|
"Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload",
|
||||||
|
});
|
||||||
|
|
||||||
export function Layout({ children }: { children: React.ReactNode }) {
|
export function Layout({ children }: { children: React.ReactNode }) {
|
||||||
return (
|
return (
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { index, layout, route } from "@react-router/dev/routes";
|
|||||||
export default [
|
export default [
|
||||||
index("./page.tsx"),
|
index("./page.tsx"),
|
||||||
route(":workspaceSlug/:projectId", "./[workspaceSlug]/[projectId]/page.tsx"),
|
route(":workspaceSlug/:projectId", "./[workspaceSlug]/[projectId]/page.tsx"),
|
||||||
layout("./issues/[anchor]/client-layout.tsx", [route("issues/:anchor", "./issues/[anchor]/page.tsx")]),
|
layout("./issues/[anchor]/layout.tsx", [route("issues/:anchor", "./issues/[anchor]/page.tsx")]),
|
||||||
// Catch-all route for 404 handling
|
// Catch-all route for 404 handling
|
||||||
route("*", "./not-found.tsx"),
|
route("*", "./not-found.tsx"),
|
||||||
] satisfies RouteConfig;
|
] satisfies RouteConfig;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { Fragment, useEffect, useState } from "react";
|
import { Fragment, useEffect } from "react";
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import { useRouter, useSearchParams } from "next/navigation";
|
import { useRouter, useSearchParams } from "next/navigation";
|
||||||
import { Dialog, Transition } from "@headlessui/react";
|
import { Dialog, Transition } from "@headlessui/react";
|
||||||
@@ -25,19 +25,19 @@ export const IssuePeekOverview: React.FC<TIssuePeekOverview> = observer((props)
|
|||||||
const state = searchParams.get("state") || undefined;
|
const state = searchParams.get("state") || undefined;
|
||||||
const priority = searchParams.get("priority") || undefined;
|
const priority = searchParams.get("priority") || undefined;
|
||||||
const labels = searchParams.get("labels") || undefined;
|
const labels = searchParams.get("labels") || undefined;
|
||||||
// states
|
|
||||||
const [isSidePeekOpen, setIsSidePeekOpen] = useState(false);
|
|
||||||
const [isModalPeekOpen, setIsModalPeekOpen] = useState(false);
|
|
||||||
// store
|
// store
|
||||||
const issueDetailStore = useIssueDetails();
|
const { peekMode, setPeekId, getIssueById, fetchIssueDetails } = useIssueDetails();
|
||||||
|
// derived values
|
||||||
const issueDetails = issueDetailStore.peekId && peekId ? issueDetailStore.details[peekId.toString()] : undefined;
|
const issueDetails = peekId ? getIssueById(peekId.toString()) : undefined;
|
||||||
|
// state
|
||||||
|
const isSidePeekOpen = !!peekId && peekMode === "side";
|
||||||
|
const isModalPeekOpen = !!peekId && (peekMode === "modal" || peekMode === "full");
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (anchor && peekId) {
|
if (anchor && peekId) {
|
||||||
issueDetailStore.fetchIssueDetails(anchor, peekId.toString());
|
fetchIssueDetails(anchor, peekId.toString());
|
||||||
}
|
}
|
||||||
}, [anchor, issueDetailStore, peekId]);
|
}, [anchor, fetchIssueDetails, peekId]);
|
||||||
|
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
// if close logic is passed down, call that instead of the below logic
|
// if close logic is passed down, call that instead of the below logic
|
||||||
@@ -46,7 +46,7 @@ export const IssuePeekOverview: React.FC<TIssuePeekOverview> = observer((props)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
issueDetailStore.setPeekId(null);
|
setPeekId(null);
|
||||||
let queryParams: any = {
|
let queryParams: any = {
|
||||||
board,
|
board,
|
||||||
};
|
};
|
||||||
@@ -57,21 +57,6 @@ export const IssuePeekOverview: React.FC<TIssuePeekOverview> = observer((props)
|
|||||||
router.push(`/issues/${anchor}?${queryParams}`);
|
router.push(`/issues/${anchor}?${queryParams}`);
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (peekId) {
|
|
||||||
if (issueDetailStore.peekMode === "side") {
|
|
||||||
setIsSidePeekOpen(true);
|
|
||||||
setIsModalPeekOpen(false);
|
|
||||||
} else {
|
|
||||||
setIsModalPeekOpen(true);
|
|
||||||
setIsSidePeekOpen(false);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
setIsSidePeekOpen(false);
|
|
||||||
setIsModalPeekOpen(false);
|
|
||||||
}
|
|
||||||
}, [peekId, issueDetailStore.peekMode]);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Transition.Root appear show={isSidePeekOpen} as={Fragment}>
|
<Transition.Root appear show={isSidePeekOpen} as={Fragment}>
|
||||||
@@ -116,13 +101,13 @@ export const IssuePeekOverview: React.FC<TIssuePeekOverview> = observer((props)
|
|||||||
<Dialog.Panel>
|
<Dialog.Panel>
|
||||||
<div
|
<div
|
||||||
className={`fixed left-1/2 top-1/2 z-20 -translate-x-1/2 -translate-y-1/2 rounded-lg bg-custom-background-100 shadow-custom-shadow-xl transition-all duration-300 ${
|
className={`fixed left-1/2 top-1/2 z-20 -translate-x-1/2 -translate-y-1/2 rounded-lg bg-custom-background-100 shadow-custom-shadow-xl transition-all duration-300 ${
|
||||||
issueDetailStore.peekMode === "modal" ? "h-[70%] w-3/5" : "h-[95%] w-[95%]"
|
peekMode === "modal" ? "h-[70%] w-3/5" : "h-[95%] w-[95%]"
|
||||||
}`}
|
}`}
|
||||||
>
|
>
|
||||||
{issueDetailStore.peekMode === "modal" && (
|
{peekMode === "modal" && (
|
||||||
<SidePeekView anchor={anchor} handleClose={handleClose} issueDetails={issueDetails} />
|
<SidePeekView anchor={anchor} handleClose={handleClose} issueDetails={issueDetails} />
|
||||||
)}
|
)}
|
||||||
{issueDetailStore.peekMode === "full" && (
|
{peekMode === "full" && (
|
||||||
<FullScreenPeekView anchor={anchor} handleClose={handleClose} issueDetails={issueDetails} />
|
<FullScreenPeekView anchor={anchor} handleClose={handleClose} issueDetails={issueDetails} />
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
import { next } from "@vercel/edge";
|
|
||||||
|
|
||||||
export default function middleware() {
|
|
||||||
return next({
|
|
||||||
headers: {
|
|
||||||
"Referrer-Policy": "origin-when-cross-origin",
|
|
||||||
"X-Frame-Options": "SAMEORIGIN",
|
|
||||||
"X-Content-Type-Options": "nosniff",
|
|
||||||
"X-DNS-Prefetch-Control": "on",
|
|
||||||
"Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@@ -5,10 +5,10 @@
|
|||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "cross-env NODE_ENV=development PORT=3002 node server.mjs",
|
"dev": "react-router dev --port 3002",
|
||||||
"build": "react-router build",
|
"build": "react-router build",
|
||||||
"preview": "react-router build && cross-env NODE_ENV=production PORT=3002 node server.mjs",
|
"preview": "react-router build && PORT=3002 react-router-serve ./build/server/index.js",
|
||||||
"start": "serve -s build/client -l 3002",
|
"start": "PORT=3002 react-router-serve ./build/server/index.js",
|
||||||
"clean": "rm -rf .turbo && rm -rf .next && rm -rf .react-router && rm -rf node_modules && rm -rf dist && rm -rf build",
|
"clean": "rm -rf .turbo && rm -rf .next && rm -rf .react-router && rm -rf node_modules && rm -rf dist && rm -rf build",
|
||||||
"check:lint": "eslint . --max-warnings 28",
|
"check:lint": "eslint . --max-warnings 28",
|
||||||
"check:types": "react-router typegen && tsc --noEmit",
|
"check:types": "react-router typegen && tsc --noEmit",
|
||||||
@@ -30,24 +30,18 @@
|
|||||||
"@plane/ui": "workspace:*",
|
"@plane/ui": "workspace:*",
|
||||||
"@plane/utils": "workspace:*",
|
"@plane/utils": "workspace:*",
|
||||||
"@popperjs/core": "^2.11.8",
|
"@popperjs/core": "^2.11.8",
|
||||||
"@react-router/express": "^7.9.3",
|
|
||||||
"@react-router/node": "^7.9.3",
|
"@react-router/node": "^7.9.3",
|
||||||
"@vercel/edge": "1.2.2",
|
"@react-router/serve": "^7.9.5",
|
||||||
"axios": "catalog:",
|
"axios": "catalog:",
|
||||||
"clsx": "^2.0.0",
|
"clsx": "^2.0.0",
|
||||||
"compression": "^1.8.1",
|
|
||||||
"cross-env": "^7.0.3",
|
|
||||||
"date-fns": "^4.1.0",
|
"date-fns": "^4.1.0",
|
||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.5",
|
||||||
"express": "^5.1.0",
|
|
||||||
"http-proxy-middleware": "^3.0.5",
|
|
||||||
"isbot": "^5.1.31",
|
"isbot": "^5.1.31",
|
||||||
"lodash-es": "catalog:",
|
"lodash-es": "catalog:",
|
||||||
"lucide-react": "catalog:",
|
"lucide-react": "catalog:",
|
||||||
"mobx": "catalog:",
|
"mobx": "catalog:",
|
||||||
"mobx-react": "catalog:",
|
"mobx-react": "catalog:",
|
||||||
"mobx-utils": "catalog:",
|
"mobx-utils": "catalog:",
|
||||||
"morgan": "^1.10.1",
|
|
||||||
"next-themes": "^0.2.1",
|
"next-themes": "^0.2.1",
|
||||||
"react": "catalog:",
|
"react": "catalog:",
|
||||||
"react-dom": "catalog:",
|
"react-dom": "catalog:",
|
||||||
@@ -56,7 +50,6 @@
|
|||||||
"react-popper": "^2.3.0",
|
"react-popper": "^2.3.0",
|
||||||
"react-router": "^7.9.1",
|
"react-router": "^7.9.1",
|
||||||
"react-router-dom": "^7.9.1",
|
"react-router-dom": "^7.9.1",
|
||||||
"serve": "14.2.5",
|
|
||||||
"swr": "catalog:",
|
"swr": "catalog:",
|
||||||
"uuid": "catalog:"
|
"uuid": "catalog:"
|
||||||
},
|
},
|
||||||
@@ -65,10 +58,7 @@
|
|||||||
"@plane/tailwind-config": "workspace:*",
|
"@plane/tailwind-config": "workspace:*",
|
||||||
"@plane/typescript-config": "workspace:*",
|
"@plane/typescript-config": "workspace:*",
|
||||||
"@react-router/dev": "^7.9.1",
|
"@react-router/dev": "^7.9.1",
|
||||||
"@types/compression": "^1.8.1",
|
|
||||||
"@types/express": "4.17.23",
|
|
||||||
"@types/lodash-es": "catalog:",
|
"@types/lodash-es": "catalog:",
|
||||||
"@types/morgan": "^1.9.10",
|
|
||||||
"@types/node": "catalog:",
|
"@types/node": "catalog:",
|
||||||
"@types/react": "catalog:",
|
"@types/react": "catalog:",
|
||||||
"@types/react-dom": "catalog:",
|
"@types/react-dom": "catalog:",
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
import type { Config } from "@react-router/dev/config";
|
import type { Config } from "@react-router/dev/config";
|
||||||
|
import { joinUrlPath } from "@plane/utils";
|
||||||
|
|
||||||
|
const basePath = joinUrlPath(process.env.NEXT_PUBLIC_SPACE_BASE_PATH ?? "", "/") ?? "/";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
appDirectory: "app",
|
appDirectory: "app",
|
||||||
basename: process.env.NEXT_PUBLIC_SPACE_BASE_PATH,
|
basename: basePath,
|
||||||
// Space runs as a client-side app; build a static client bundle only
|
ssr: true,
|
||||||
ssr: false,
|
|
||||||
} satisfies Config;
|
} satisfies Config;
|
||||||
|
|||||||
@@ -1,76 +0,0 @@
|
|||||||
import path from "node:path";
|
|
||||||
import { fileURLToPath } from "node:url";
|
|
||||||
import compression from "compression";
|
|
||||||
import dotenv from "dotenv";
|
|
||||||
import express from "express";
|
|
||||||
import morgan from "morgan";
|
|
||||||
|
|
||||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
||||||
|
|
||||||
dotenv.config({ path: path.resolve(__dirname, ".env") });
|
|
||||||
|
|
||||||
const BUILD_PATH = "./build/server/index.js";
|
|
||||||
const DEVELOPMENT = process.env.NODE_ENV !== "production";
|
|
||||||
|
|
||||||
// Derive the port from NEXT_PUBLIC_SPACE_BASE_URL when available, otherwise
|
|
||||||
// default to http://localhost:3002 and fall back to PORT env if explicitly set.
|
|
||||||
const DEFAULT_BASE_URL = "http://localhost:3002";
|
|
||||||
const SPACE_BASE_URL = process.env.NEXT_PUBLIC_SPACE_BASE_URL || DEFAULT_BASE_URL;
|
|
||||||
let parsedBaseUrl;
|
|
||||||
try {
|
|
||||||
parsedBaseUrl = new URL(SPACE_BASE_URL);
|
|
||||||
} catch {
|
|
||||||
parsedBaseUrl = new URL(DEFAULT_BASE_URL);
|
|
||||||
}
|
|
||||||
|
|
||||||
const PORT = Number.parseInt(parsedBaseUrl.port, 10);
|
|
||||||
|
|
||||||
async function start() {
|
|
||||||
const app = express();
|
|
||||||
|
|
||||||
app.use(compression());
|
|
||||||
app.disable("x-powered-by");
|
|
||||||
|
|
||||||
if (DEVELOPMENT) {
|
|
||||||
console.log("Starting development server");
|
|
||||||
|
|
||||||
const vite = await import("vite").then((vite) =>
|
|
||||||
vite.createServer({
|
|
||||||
server: { middlewareMode: true },
|
|
||||||
appType: "custom",
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
app.use(vite.middlewares);
|
|
||||||
|
|
||||||
app.use(async (req, res, next) => {
|
|
||||||
try {
|
|
||||||
const source = await vite.ssrLoadModule("./server/app.ts");
|
|
||||||
return source.app(req, res, next);
|
|
||||||
} catch (error) {
|
|
||||||
if (error instanceof Error) {
|
|
||||||
vite.ssrFixStacktrace(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
next(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
console.log("Starting production server");
|
|
||||||
|
|
||||||
app.use("/assets", express.static("build/client/assets", { immutable: true, maxAge: "1y" }));
|
|
||||||
app.use(morgan("tiny"));
|
|
||||||
app.use(express.static("build/client", { maxAge: "1h" }));
|
|
||||||
app.use(await import(BUILD_PATH).then((mod) => mod.app));
|
|
||||||
}
|
|
||||||
|
|
||||||
app.listen(PORT, () => {
|
|
||||||
const origin = `${parsedBaseUrl.protocol}//${parsedBaseUrl.hostname}:${PORT}`;
|
|
||||||
console.log(`Server is running on ${origin}`);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
start().catch((error) => {
|
|
||||||
console.error(error);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
import "react-router";
|
|
||||||
import { createRequestHandler } from "@react-router/express";
|
|
||||||
import express from "express";
|
|
||||||
import type { Express } from "express";
|
|
||||||
import { createProxyMiddleware } from "http-proxy-middleware";
|
|
||||||
|
|
||||||
const NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL
|
|
||||||
? process.env.NEXT_PUBLIC_API_BASE_URL.replace(/\/$/, "")
|
|
||||||
: "http://127.0.0.1:8000";
|
|
||||||
const NEXT_PUBLIC_API_BASE_PATH = process.env.NEXT_PUBLIC_API_BASE_PATH
|
|
||||||
? process.env.NEXT_PUBLIC_API_BASE_PATH.replace(/\/+$/, "")
|
|
||||||
: "/api";
|
|
||||||
const NORMALIZED_API_BASE_PATH = NEXT_PUBLIC_API_BASE_PATH.startsWith("/")
|
|
||||||
? NEXT_PUBLIC_API_BASE_PATH
|
|
||||||
: `/${NEXT_PUBLIC_API_BASE_PATH}`;
|
|
||||||
const NEXT_PUBLIC_SPACE_BASE_PATH = process.env.NEXT_PUBLIC_SPACE_BASE_PATH
|
|
||||||
? process.env.NEXT_PUBLIC_SPACE_BASE_PATH.replace(/\/$/, "")
|
|
||||||
: "/";
|
|
||||||
|
|
||||||
export const app: Express = express();
|
|
||||||
|
|
||||||
// Ensure proxy-aware hostname/URL handling (e.g., X-Forwarded-Host/Proto)
|
|
||||||
// so generated URLs/redirects reflect the public host when behind Nginx.
|
|
||||||
// See related fix in Remix Express adapter.
|
|
||||||
app.set("trust proxy", true);
|
|
||||||
|
|
||||||
app.use(
|
|
||||||
"/api",
|
|
||||||
createProxyMiddleware({
|
|
||||||
target: NEXT_PUBLIC_API_BASE_URL,
|
|
||||||
changeOrigin: true,
|
|
||||||
secure: false,
|
|
||||||
pathRewrite: (path: string) =>
|
|
||||||
NORMALIZED_API_BASE_PATH === "/api" ? path : path.replace(/^\/api/, NORMALIZED_API_BASE_PATH),
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
const router = express.Router();
|
|
||||||
|
|
||||||
router.use(
|
|
||||||
createRequestHandler({
|
|
||||||
build: () => import("virtual:react-router/server-build"),
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
app.use(NEXT_PUBLIC_SPACE_BASE_PATH, router);
|
|
||||||
@@ -1,59 +1,38 @@
|
|||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import { reactRouter } from "@react-router/dev/vite";
|
import { reactRouter } from "@react-router/dev/vite";
|
||||||
|
import dotenv from "dotenv";
|
||||||
import { defineConfig } from "vite";
|
import { defineConfig } from "vite";
|
||||||
import tsconfigPaths from "vite-tsconfig-paths";
|
import tsconfigPaths from "vite-tsconfig-paths";
|
||||||
import { joinUrlPath } from "@plane/utils";
|
import { joinUrlPath } from "@plane/utils";
|
||||||
|
|
||||||
const PUBLIC_ENV_KEYS = [
|
dotenv.config({ path: path.resolve(__dirname, ".env") });
|
||||||
"NEXT_PUBLIC_API_BASE_URL",
|
|
||||||
"NEXT_PUBLIC_API_BASE_PATH",
|
|
||||||
"NEXT_PUBLIC_ADMIN_BASE_URL",
|
|
||||||
"NEXT_PUBLIC_ADMIN_BASE_PATH",
|
|
||||||
"NEXT_PUBLIC_SPACE_BASE_URL",
|
|
||||||
"NEXT_PUBLIC_SPACE_BASE_PATH",
|
|
||||||
"NEXT_PUBLIC_LIVE_BASE_URL",
|
|
||||||
"NEXT_PUBLIC_LIVE_BASE_PATH",
|
|
||||||
"NEXT_PUBLIC_WEB_BASE_URL",
|
|
||||||
"NEXT_PUBLIC_WEB_BASE_PATH",
|
|
||||||
"NEXT_PUBLIC_WEBSITE_URL",
|
|
||||||
"NEXT_PUBLIC_SUPPORT_EMAIL",
|
|
||||||
];
|
|
||||||
|
|
||||||
const publicEnv = PUBLIC_ENV_KEYS.reduce<Record<string, string>>((acc, key) => {
|
// Automatically expose all environment variables prefixed with NEXT_PUBLIC_
|
||||||
acc[key] = process.env[key] ?? "";
|
const publicEnv = Object.keys(process.env)
|
||||||
return acc;
|
.filter((key) => key.startsWith("NEXT_PUBLIC_"))
|
||||||
}, {});
|
.reduce<Record<string, string>>((acc, key) => {
|
||||||
|
acc[key] = process.env[key] ?? "";
|
||||||
|
return acc;
|
||||||
|
}, {});
|
||||||
|
|
||||||
export default defineConfig(({ isSsrBuild }) => {
|
const basePath = joinUrlPath(process.env.NEXT_PUBLIC_SPACE_BASE_PATH ?? "", "/") ?? "/";
|
||||||
// Only produce an SSR bundle when explicitly enabled.
|
|
||||||
// For static deployments (default), we skip the server build entirely.
|
|
||||||
const enableSsrBuild = process.env.SPACE_ENABLE_SSR_BUILD === "true";
|
|
||||||
const basePath = joinUrlPath(process.env.NEXT_PUBLIC_SPACE_BASE_PATH ?? "", "/") ?? "/";
|
|
||||||
|
|
||||||
return {
|
export default defineConfig(() => ({
|
||||||
base: basePath,
|
base: basePath,
|
||||||
define: {
|
define: {
|
||||||
"process.env": JSON.stringify(publicEnv),
|
"process.env": JSON.stringify(publicEnv),
|
||||||
|
},
|
||||||
|
build: {
|
||||||
|
assetsInlineLimit: 0,
|
||||||
|
},
|
||||||
|
plugins: [reactRouter(), tsconfigPaths({ projects: [path.resolve(__dirname, "tsconfig.json")] })],
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
// Next.js compatibility shims used within space
|
||||||
|
"next/image": path.resolve(__dirname, "app/compat/next/image.tsx"),
|
||||||
|
"next/link": path.resolve(__dirname, "app/compat/next/link.tsx"),
|
||||||
|
"next/navigation": path.resolve(__dirname, "app/compat/next/navigation.ts"),
|
||||||
},
|
},
|
||||||
build: {
|
dedupe: ["react", "react-dom"],
|
||||||
assetsInlineLimit: 0,
|
},
|
||||||
rollupOptions:
|
}));
|
||||||
isSsrBuild && enableSsrBuild
|
|
||||||
? {
|
|
||||||
input: path.resolve(__dirname, "server/app.ts"),
|
|
||||||
}
|
|
||||||
: undefined,
|
|
||||||
},
|
|
||||||
plugins: [reactRouter(), tsconfigPaths({ projects: [path.resolve(__dirname, "tsconfig.json")] })],
|
|
||||||
resolve: {
|
|
||||||
alias: {
|
|
||||||
// Next.js compatibility shims used within space
|
|
||||||
"next/image": path.resolve(__dirname, "app/compat/next/image.tsx"),
|
|
||||||
"next/link": path.resolve(__dirname, "app/compat/next/link.tsx"),
|
|
||||||
"next/navigation": path.resolve(__dirname, "app/compat/next/navigation.ts"),
|
|
||||||
},
|
|
||||||
dedupe: ["react", "react-dom"],
|
|
||||||
},
|
|
||||||
// No SSR-specific overrides needed; alias resolves to ESM build
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|||||||
@@ -5,9 +5,9 @@
|
|||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "cross-env NODE_ENV=development PORT=3000 node server.mjs",
|
"dev": "react-router dev --port 3000",
|
||||||
"build": "react-router build",
|
"build": "react-router build",
|
||||||
"preview": "react-router build && cross-env NODE_ENV=production PORT=3000 node server.mjs",
|
"preview": "react-router build && serve -s build/client -l 3000",
|
||||||
"start": "serve -s build/client -l 3000",
|
"start": "serve -s build/client -l 3000",
|
||||||
"clean": "rm -rf .turbo && rm -rf .next && rm -rf .react-router && rm -rf node_modules && rm -rf dist && rm -rf build",
|
"clean": "rm -rf .turbo && rm -rf .next && rm -rf .react-router && rm -rf node_modules && rm -rf dist && rm -rf build",
|
||||||
"check:lint": "eslint . --max-warnings 821",
|
"check:lint": "eslint . --max-warnings 821",
|
||||||
@@ -35,28 +35,22 @@
|
|||||||
"@plane/utils": "workspace:*",
|
"@plane/utils": "workspace:*",
|
||||||
"@popperjs/core": "^2.11.8",
|
"@popperjs/core": "^2.11.8",
|
||||||
"@react-pdf/renderer": "^3.4.5",
|
"@react-pdf/renderer": "^3.4.5",
|
||||||
"@react-router/express": "^7.9.3",
|
|
||||||
"@react-router/node": "^7.9.3",
|
"@react-router/node": "^7.9.3",
|
||||||
"@tanstack/react-table": "^8.21.3",
|
"@tanstack/react-table": "^8.21.3",
|
||||||
"axios": "catalog:",
|
"axios": "catalog:",
|
||||||
"clsx": "^2.0.0",
|
"clsx": "^2.0.0",
|
||||||
"cmdk": "^1.0.0",
|
"cmdk": "^1.0.0",
|
||||||
"comlink": "^4.4.1",
|
"comlink": "^4.4.1",
|
||||||
"compression": "^1.8.1",
|
|
||||||
"cross-env": "^7.0.3",
|
|
||||||
"date-fns": "^4.1.0",
|
"date-fns": "^4.1.0",
|
||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.5",
|
||||||
"emoji-picker-react": "^4.5.16",
|
"emoji-picker-react": "^4.5.16",
|
||||||
"export-to-csv": "^1.4.0",
|
"export-to-csv": "^1.4.0",
|
||||||
"express": "^5.1.0",
|
|
||||||
"http-proxy-middleware": "^3.0.5",
|
|
||||||
"isbot": "^5.1.31",
|
"isbot": "^5.1.31",
|
||||||
"lodash-es": "catalog:",
|
"lodash-es": "catalog:",
|
||||||
"lucide-react": "catalog:",
|
"lucide-react": "catalog:",
|
||||||
"mobx-react": "catalog:",
|
"mobx-react": "catalog:",
|
||||||
"mobx-utils": "catalog:",
|
"mobx-utils": "catalog:",
|
||||||
"mobx": "catalog:",
|
"mobx": "catalog:",
|
||||||
"morgan": "^1.10.1",
|
|
||||||
"next-themes": "^0.2.1",
|
"next-themes": "^0.2.1",
|
||||||
"posthog-js": "^1.131.3",
|
"posthog-js": "^1.131.3",
|
||||||
"react-color": "^2.19.3",
|
"react-color": "^2.19.3",
|
||||||
@@ -85,10 +79,7 @@
|
|||||||
"@plane/tailwind-config": "workspace:*",
|
"@plane/tailwind-config": "workspace:*",
|
||||||
"@plane/typescript-config": "workspace:*",
|
"@plane/typescript-config": "workspace:*",
|
||||||
"@react-router/dev": "^7.9.1",
|
"@react-router/dev": "^7.9.1",
|
||||||
"@types/compression": "^1.8.1",
|
|
||||||
"@types/express": "4.17.23",
|
|
||||||
"@types/lodash-es": "catalog:",
|
"@types/lodash-es": "catalog:",
|
||||||
"@types/morgan": "^1.9.10",
|
|
||||||
"@types/node": "catalog:",
|
"@types/node": "catalog:",
|
||||||
"@types/react-color": "^3.0.6",
|
"@types/react-color": "^3.0.6",
|
||||||
"@types/react-dom": "catalog:",
|
"@types/react-dom": "catalog:",
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import type { Config } from "@react-router/dev/config";
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
appDirectory: "app",
|
appDirectory: "app",
|
||||||
basename: process.env.NEXT_PUBLIC_WEB_BASE_PATH,
|
|
||||||
// Web runs as a client-side app; build a static client bundle only
|
// Web runs as a client-side app; build a static client bundle only
|
||||||
ssr: false,
|
ssr: false,
|
||||||
} satisfies Config;
|
} satisfies Config;
|
||||||
|
|||||||
@@ -1,77 +0,0 @@
|
|||||||
import path from "node:path";
|
|
||||||
import { fileURLToPath } from "node:url";
|
|
||||||
import compression from "compression";
|
|
||||||
import dotenv from "dotenv";
|
|
||||||
import express from "express";
|
|
||||||
import morgan from "morgan";
|
|
||||||
|
|
||||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
||||||
|
|
||||||
dotenv.config({ path: path.resolve(__dirname, ".env") });
|
|
||||||
|
|
||||||
const BUILD_PATH = "./build/server/index.js";
|
|
||||||
const DEVELOPMENT = process.env.NODE_ENV !== "production";
|
|
||||||
|
|
||||||
// Derive the port from NEXT_PUBLIC_WEB_BASE_URL when available, otherwise
|
|
||||||
// default to http://localhost:3000 and fall back to PORT env if explicitly set.
|
|
||||||
const DEFAULT_BASE_URL = "http://localhost:3000";
|
|
||||||
const WEB_BASE_URL = process.env.NEXT_PUBLIC_WEB_BASE_URL || DEFAULT_BASE_URL;
|
|
||||||
let parsedBaseUrl;
|
|
||||||
try {
|
|
||||||
parsedBaseUrl = new URL(WEB_BASE_URL);
|
|
||||||
} catch {
|
|
||||||
parsedBaseUrl = new URL(DEFAULT_BASE_URL);
|
|
||||||
}
|
|
||||||
|
|
||||||
const PORT = Number.parseInt(parsedBaseUrl.port, 10);
|
|
||||||
|
|
||||||
async function start() {
|
|
||||||
const app = express();
|
|
||||||
|
|
||||||
app.use(compression());
|
|
||||||
app.disable("x-powered-by");
|
|
||||||
|
|
||||||
if (DEVELOPMENT) {
|
|
||||||
console.log("Starting development server");
|
|
||||||
|
|
||||||
const vite = await import("vite").then((vite) =>
|
|
||||||
vite.createServer({
|
|
||||||
server: { middlewareMode: true },
|
|
||||||
appType: "custom",
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
app.use(vite.middlewares);
|
|
||||||
|
|
||||||
app.use(async (req, res, next) => {
|
|
||||||
try {
|
|
||||||
const source = await vite.ssrLoadModule("./server/app.ts");
|
|
||||||
return source.app(req, res, next);
|
|
||||||
} catch (error) {
|
|
||||||
if (error instanceof Error) {
|
|
||||||
vite.ssrFixStacktrace(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
next(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
console.log("Starting production server");
|
|
||||||
|
|
||||||
app.use("/assets", express.static("build/client/assets", { immutable: true, maxAge: "1y" }));
|
|
||||||
app.use(morgan("tiny"));
|
|
||||||
app.use(express.static("build/client", { maxAge: "1h" }));
|
|
||||||
app.use(await import(BUILD_PATH).then((mod) => mod.app));
|
|
||||||
}
|
|
||||||
|
|
||||||
app.listen(PORT, () => {
|
|
||||||
const origin = `${parsedBaseUrl.protocol}//${parsedBaseUrl.hostname}:${PORT}`;
|
|
||||||
console.log(`Server is running on ${origin}`);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
start().catch((error) => {
|
|
||||||
console.error(error);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
import "react-router";
|
|
||||||
import { createRequestHandler } from "@react-router/express";
|
|
||||||
import express from "express";
|
|
||||||
import type { Express } from "express";
|
|
||||||
import { createProxyMiddleware } from "http-proxy-middleware";
|
|
||||||
import type { ServerBuild } from "react-router";
|
|
||||||
|
|
||||||
const NEXT_PUBLIC_API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL
|
|
||||||
? process.env.NEXT_PUBLIC_API_BASE_URL.replace(/\/$/, "")
|
|
||||||
: "http://127.0.0.1:8000";
|
|
||||||
const NEXT_PUBLIC_API_BASE_PATH = process.env.NEXT_PUBLIC_API_BASE_PATH
|
|
||||||
? process.env.NEXT_PUBLIC_API_BASE_PATH.replace(/\/+$/, "")
|
|
||||||
: "/api";
|
|
||||||
const NORMALIZED_API_BASE_PATH = NEXT_PUBLIC_API_BASE_PATH.startsWith("/")
|
|
||||||
? NEXT_PUBLIC_API_BASE_PATH
|
|
||||||
: `/${NEXT_PUBLIC_API_BASE_PATH}`;
|
|
||||||
const NEXT_PUBLIC_WEB_BASE_PATH = process.env.NEXT_PUBLIC_WEB_BASE_PATH
|
|
||||||
? process.env.NEXT_PUBLIC_WEB_BASE_PATH.replace(/\/$/, "")
|
|
||||||
: "/";
|
|
||||||
|
|
||||||
export const app: Express = express();
|
|
||||||
|
|
||||||
// Ensure proxy-aware hostname/URL handling (e.g., X-Forwarded-Host/Proto)
|
|
||||||
// so generated URLs/redirects reflect the public host when behind Nginx.
|
|
||||||
// See related fix in Remix Express adapter.
|
|
||||||
app.set("trust proxy", true);
|
|
||||||
|
|
||||||
app.use(
|
|
||||||
"/api",
|
|
||||||
createProxyMiddleware({
|
|
||||||
target: NEXT_PUBLIC_API_BASE_URL,
|
|
||||||
changeOrigin: true,
|
|
||||||
secure: false,
|
|
||||||
pathRewrite: (path: string) =>
|
|
||||||
NORMALIZED_API_BASE_PATH === "/api" ? path : path.replace(/^\/api/, NORMALIZED_API_BASE_PATH),
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
const router = express.Router();
|
|
||||||
|
|
||||||
router.use(
|
|
||||||
createRequestHandler({
|
|
||||||
build: () => import("virtual:react-router/server-build") as Promise<ServerBuild>,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
app.use(NEXT_PUBLIC_WEB_BASE_PATH, router);
|
|
||||||
@@ -1,67 +1,36 @@
|
|||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import { reactRouter } from "@react-router/dev/vite";
|
import { reactRouter } from "@react-router/dev/vite";
|
||||||
|
import dotenv from "dotenv";
|
||||||
import { defineConfig } from "vite";
|
import { defineConfig } from "vite";
|
||||||
import tsconfigPaths from "vite-tsconfig-paths";
|
import tsconfigPaths from "vite-tsconfig-paths";
|
||||||
|
|
||||||
const PUBLIC_ENV_KEYS = [
|
dotenv.config({ path: path.resolve(__dirname, ".env") });
|
||||||
"ENABLE_EXPERIMENTAL_COREPACK",
|
|
||||||
"NEXT_PUBLIC_ADMIN_BASE_PATH",
|
|
||||||
"NEXT_PUBLIC_ADMIN_BASE_URL",
|
|
||||||
"NEXT_PUBLIC_API_BASE_PATH",
|
|
||||||
"NEXT_PUBLIC_API_BASE_URL",
|
|
||||||
"NEXT_PUBLIC_CRISP_ID",
|
|
||||||
"NEXT_PUBLIC_ENABLE_SESSION_RECORDER",
|
|
||||||
"NEXT_PUBLIC_EXTRA_IMAGE_DOMAINS",
|
|
||||||
"NEXT_PUBLIC_LIVE_BASE_PATH",
|
|
||||||
"NEXT_PUBLIC_LIVE_BASE_URL",
|
|
||||||
"NEXT_PUBLIC_PLAUSIBLE_DOMAIN",
|
|
||||||
"NEXT_PUBLIC_POSTHOG_DEBUG",
|
|
||||||
"NEXT_PUBLIC_POSTHOG_HOST",
|
|
||||||
"NEXT_PUBLIC_POSTHOG_KEY",
|
|
||||||
"NEXT_PUBLIC_SESSION_RECORDER_KEY",
|
|
||||||
"NEXT_PUBLIC_SPACE_BASE_PATH",
|
|
||||||
"NEXT_PUBLIC_SPACE_BASE_URL",
|
|
||||||
"NEXT_PUBLIC_SUPPORT_EMAIL",
|
|
||||||
"NEXT_PUBLIC_WEB_BASE_PATH",
|
|
||||||
"NEXT_PUBLIC_WEB_BASE_URL",
|
|
||||||
"NEXT_PUBLIC_WEBSITE_URL",
|
|
||||||
"NODE_ENV",
|
|
||||||
];
|
|
||||||
|
|
||||||
const publicEnv = PUBLIC_ENV_KEYS.reduce<Record<string, string>>((acc, key) => {
|
// Automatically expose all environment variables prefixed with NEXT_PUBLIC_
|
||||||
acc[key] = process.env[key] ?? "";
|
const publicEnv = Object.keys(process.env)
|
||||||
return acc;
|
.filter((key) => key.startsWith("NEXT_PUBLIC_"))
|
||||||
}, {});
|
.reduce<Record<string, string>>((acc, key) => {
|
||||||
|
acc[key] = process.env[key] ?? "";
|
||||||
|
return acc;
|
||||||
|
}, {});
|
||||||
|
|
||||||
export default defineConfig(({ isSsrBuild }) => {
|
export default defineConfig(() => ({
|
||||||
// Only produce an SSR bundle when explicitly enabled.
|
define: {
|
||||||
// For static deployments (default), we skip the server build entirely.
|
"process.env": JSON.stringify(publicEnv),
|
||||||
const enableSsrBuild = process.env.WEB_ENABLE_SSR_BUILD === "true";
|
},
|
||||||
|
build: {
|
||||||
return {
|
assetsInlineLimit: 0,
|
||||||
define: {
|
},
|
||||||
"process.env": JSON.stringify(publicEnv),
|
plugins: [reactRouter(), tsconfigPaths({ projects: [path.resolve(__dirname, "tsconfig.json")] })],
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
// Next.js compatibility shims used within web
|
||||||
|
"next/image": path.resolve(__dirname, "app/compat/next/image.tsx"),
|
||||||
|
"next/link": path.resolve(__dirname, "app/compat/next/link.tsx"),
|
||||||
|
"next/navigation": path.resolve(__dirname, "app/compat/next/navigation.ts"),
|
||||||
|
"next/script": path.resolve(__dirname, "app/compat/next/script.tsx"),
|
||||||
},
|
},
|
||||||
build: {
|
dedupe: ["react", "react-dom", "@headlessui/react"],
|
||||||
assetsInlineLimit: 0,
|
},
|
||||||
rollupOptions:
|
// No SSR-specific overrides needed; alias resolves to ESM build
|
||||||
isSsrBuild && enableSsrBuild
|
}));
|
||||||
? {
|
|
||||||
input: path.resolve(__dirname, "server/app.ts"),
|
|
||||||
}
|
|
||||||
: undefined,
|
|
||||||
},
|
|
||||||
plugins: [reactRouter(), tsconfigPaths({ projects: [path.resolve(__dirname, "tsconfig.json")] })],
|
|
||||||
resolve: {
|
|
||||||
alias: {
|
|
||||||
// Next.js compatibility shims used within web
|
|
||||||
"next/image": path.resolve(__dirname, "app/compat/next/image.tsx"),
|
|
||||||
"next/link": path.resolve(__dirname, "app/compat/next/link.tsx"),
|
|
||||||
"next/navigation": path.resolve(__dirname, "app/compat/next/navigation.ts"),
|
|
||||||
"next/script": path.resolve(__dirname, "app/compat/next/script.tsx"),
|
|
||||||
},
|
|
||||||
dedupe: ["react", "react-dom", "@headlessui/react"],
|
|
||||||
},
|
|
||||||
// No SSR-specific overrides needed; alias resolves to ESM build
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|||||||
483
pnpm-lock.yaml
generated
483
pnpm-lock.yaml
generated
@@ -134,9 +134,6 @@ importers:
|
|||||||
'@plane/utils':
|
'@plane/utils':
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../../packages/utils
|
version: link:../../packages/utils
|
||||||
'@react-router/express':
|
|
||||||
specifier: ^7.9.3
|
|
||||||
version: 7.9.4(express@5.1.0)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
|
||||||
'@react-router/node':
|
'@react-router/node':
|
||||||
specifier: ^7.9.3
|
specifier: ^7.9.3
|
||||||
version: 7.9.4(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
version: 7.9.4(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
||||||
@@ -152,21 +149,9 @@ importers:
|
|||||||
axios:
|
axios:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 1.12.0
|
version: 1.12.0
|
||||||
compression:
|
|
||||||
specifier: ^1.8.1
|
|
||||||
version: 1.8.1
|
|
||||||
cross-env:
|
|
||||||
specifier: ^7.0.3
|
|
||||||
version: 7.0.3
|
|
||||||
dotenv:
|
dotenv:
|
||||||
specifier: ^16.4.5
|
specifier: ^16.4.5
|
||||||
version: 16.6.1
|
version: 16.6.1
|
||||||
express:
|
|
||||||
specifier: ^5.1.0
|
|
||||||
version: 5.1.0
|
|
||||||
http-proxy-middleware:
|
|
||||||
specifier: ^3.0.5
|
|
||||||
version: 3.0.5
|
|
||||||
isbot:
|
isbot:
|
||||||
specifier: ^5.1.31
|
specifier: ^5.1.31
|
||||||
version: 5.1.31
|
version: 5.1.31
|
||||||
@@ -182,9 +167,6 @@ importers:
|
|||||||
mobx-react:
|
mobx-react:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 9.1.1(mobx@6.12.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
version: 9.1.1(mobx@6.12.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
morgan:
|
|
||||||
specifier: ^1.10.1
|
|
||||||
version: 1.10.1
|
|
||||||
next-themes:
|
next-themes:
|
||||||
specifier: ^0.2.1
|
specifier: ^0.2.1
|
||||||
version: 0.2.1(next@14.2.32(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
version: 0.2.1(next@14.2.32(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
@@ -224,19 +206,10 @@ importers:
|
|||||||
version: link:../../packages/typescript-config
|
version: link:../../packages/typescript-config
|
||||||
'@react-router/dev':
|
'@react-router/dev':
|
||||||
specifier: ^7.9.1
|
specifier: ^7.9.1
|
||||||
version: 7.9.4(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.5.1)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.1.11(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1)
|
version: 7.9.4(@react-router/serve@7.9.5(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.5.1)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.1.11(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1)
|
||||||
'@types/compression':
|
|
||||||
specifier: ^1.8.1
|
|
||||||
version: 1.8.1
|
|
||||||
'@types/express':
|
|
||||||
specifier: 4.17.23
|
|
||||||
version: 4.17.23
|
|
||||||
'@types/lodash-es':
|
'@types/lodash-es':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 4.17.12
|
version: 4.17.12
|
||||||
'@types/morgan':
|
|
||||||
specifier: ^1.9.10
|
|
||||||
version: 1.9.10
|
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 22.12.0
|
version: 22.12.0
|
||||||
@@ -415,39 +388,24 @@ importers:
|
|||||||
'@popperjs/core':
|
'@popperjs/core':
|
||||||
specifier: ^2.11.8
|
specifier: ^2.11.8
|
||||||
version: 2.11.8
|
version: 2.11.8
|
||||||
'@react-router/express':
|
|
||||||
specifier: ^7.9.3
|
|
||||||
version: 7.9.4(express@5.1.0)(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
|
||||||
'@react-router/node':
|
'@react-router/node':
|
||||||
specifier: ^7.9.3
|
specifier: ^7.9.3
|
||||||
version: 7.9.4(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
version: 7.9.4(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
||||||
'@vercel/edge':
|
'@react-router/serve':
|
||||||
specifier: 1.2.2
|
specifier: ^7.9.5
|
||||||
version: 1.2.2
|
version: 7.9.5(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
||||||
axios:
|
axios:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 1.12.0
|
version: 1.12.0
|
||||||
clsx:
|
clsx:
|
||||||
specifier: ^2.0.0
|
specifier: ^2.0.0
|
||||||
version: 2.1.1
|
version: 2.1.1
|
||||||
compression:
|
|
||||||
specifier: ^1.8.1
|
|
||||||
version: 1.8.1
|
|
||||||
cross-env:
|
|
||||||
specifier: ^7.0.3
|
|
||||||
version: 7.0.3
|
|
||||||
date-fns:
|
date-fns:
|
||||||
specifier: ^4.1.0
|
specifier: ^4.1.0
|
||||||
version: 4.1.0
|
version: 4.1.0
|
||||||
dotenv:
|
dotenv:
|
||||||
specifier: ^16.4.5
|
specifier: ^16.4.5
|
||||||
version: 16.6.1
|
version: 16.6.1
|
||||||
express:
|
|
||||||
specifier: ^5.1.0
|
|
||||||
version: 5.1.0
|
|
||||||
http-proxy-middleware:
|
|
||||||
specifier: ^3.0.5
|
|
||||||
version: 3.0.5
|
|
||||||
isbot:
|
isbot:
|
||||||
specifier: ^5.1.31
|
specifier: ^5.1.31
|
||||||
version: 5.1.31
|
version: 5.1.31
|
||||||
@@ -466,9 +424,6 @@ importers:
|
|||||||
mobx-utils:
|
mobx-utils:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 6.0.8(mobx@6.12.0)
|
version: 6.0.8(mobx@6.12.0)
|
||||||
morgan:
|
|
||||||
specifier: ^1.10.1
|
|
||||||
version: 1.10.1
|
|
||||||
next-themes:
|
next-themes:
|
||||||
specifier: ^0.2.1
|
specifier: ^0.2.1
|
||||||
version: 0.2.1(next@14.2.32(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
version: 0.2.1(next@14.2.32(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
@@ -493,9 +448,6 @@ importers:
|
|||||||
react-router-dom:
|
react-router-dom:
|
||||||
specifier: ^7.9.1
|
specifier: ^7.9.1
|
||||||
version: 7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
version: 7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
serve:
|
|
||||||
specifier: 14.2.5
|
|
||||||
version: 14.2.5
|
|
||||||
swr:
|
swr:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 2.2.4(react@18.3.1)
|
version: 2.2.4(react@18.3.1)
|
||||||
@@ -514,19 +466,10 @@ importers:
|
|||||||
version: link:../../packages/typescript-config
|
version: link:../../packages/typescript-config
|
||||||
'@react-router/dev':
|
'@react-router/dev':
|
||||||
specifier: ^7.9.1
|
specifier: ^7.9.1
|
||||||
version: 7.9.3(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.5.1)(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.1.11(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1)
|
version: 7.9.3(@react-router/serve@7.9.5(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.5.1)(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.1.11(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1)
|
||||||
'@types/compression':
|
|
||||||
specifier: ^1.8.1
|
|
||||||
version: 1.8.1
|
|
||||||
'@types/express':
|
|
||||||
specifier: 4.17.23
|
|
||||||
version: 4.17.23
|
|
||||||
'@types/lodash-es':
|
'@types/lodash-es':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 4.17.12
|
version: 4.17.12
|
||||||
'@types/morgan':
|
|
||||||
specifier: ^1.9.10
|
|
||||||
version: 1.9.10
|
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 22.12.0
|
version: 22.12.0
|
||||||
@@ -602,9 +545,6 @@ importers:
|
|||||||
'@react-pdf/renderer':
|
'@react-pdf/renderer':
|
||||||
specifier: ^3.4.5
|
specifier: ^3.4.5
|
||||||
version: 3.4.5(react@18.3.1)
|
version: 3.4.5(react@18.3.1)
|
||||||
'@react-router/express':
|
|
||||||
specifier: ^7.9.3
|
|
||||||
version: 7.9.4(express@5.1.0)(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
|
||||||
'@react-router/node':
|
'@react-router/node':
|
||||||
specifier: ^7.9.3
|
specifier: ^7.9.3
|
||||||
version: 7.9.4(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
version: 7.9.4(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
||||||
@@ -623,12 +563,6 @@ importers:
|
|||||||
comlink:
|
comlink:
|
||||||
specifier: ^4.4.1
|
specifier: ^4.4.1
|
||||||
version: 4.4.2
|
version: 4.4.2
|
||||||
compression:
|
|
||||||
specifier: ^1.8.1
|
|
||||||
version: 1.8.1
|
|
||||||
cross-env:
|
|
||||||
specifier: ^7.0.3
|
|
||||||
version: 7.0.3
|
|
||||||
date-fns:
|
date-fns:
|
||||||
specifier: ^4.1.0
|
specifier: ^4.1.0
|
||||||
version: 4.1.0
|
version: 4.1.0
|
||||||
@@ -641,12 +575,6 @@ importers:
|
|||||||
export-to-csv:
|
export-to-csv:
|
||||||
specifier: ^1.4.0
|
specifier: ^1.4.0
|
||||||
version: 1.4.0
|
version: 1.4.0
|
||||||
express:
|
|
||||||
specifier: ^5.1.0
|
|
||||||
version: 5.1.0
|
|
||||||
http-proxy-middleware:
|
|
||||||
specifier: ^3.0.5
|
|
||||||
version: 3.0.5
|
|
||||||
isbot:
|
isbot:
|
||||||
specifier: ^5.1.31
|
specifier: ^5.1.31
|
||||||
version: 5.1.31
|
version: 5.1.31
|
||||||
@@ -665,9 +593,6 @@ importers:
|
|||||||
mobx-utils:
|
mobx-utils:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 6.0.8(mobx@6.12.0)
|
version: 6.0.8(mobx@6.12.0)
|
||||||
morgan:
|
|
||||||
specifier: ^1.10.1
|
|
||||||
version: 1.10.1
|
|
||||||
next-themes:
|
next-themes:
|
||||||
specifier: ^0.2.1
|
specifier: ^0.2.1
|
||||||
version: 0.2.1(next@14.2.32(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
version: 0.2.1(next@14.2.32(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
@@ -746,19 +671,10 @@ importers:
|
|||||||
version: link:../../packages/typescript-config
|
version: link:../../packages/typescript-config
|
||||||
'@react-router/dev':
|
'@react-router/dev':
|
||||||
specifier: ^7.9.1
|
specifier: ^7.9.1
|
||||||
version: 7.9.3(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.5.1)(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.1.11(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1)
|
version: 7.9.3(@react-router/serve@7.9.5(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.5.1)(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.1.11(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1)
|
||||||
'@types/compression':
|
|
||||||
specifier: ^1.8.1
|
|
||||||
version: 1.8.1
|
|
||||||
'@types/express':
|
|
||||||
specifier: 4.17.23
|
|
||||||
version: 4.17.23
|
|
||||||
'@types/lodash-es':
|
'@types/lodash-es':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 4.17.12
|
version: 4.17.12
|
||||||
'@types/morgan':
|
|
||||||
specifier: ^1.9.10
|
|
||||||
version: 1.9.10
|
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 22.12.0
|
version: 22.12.0
|
||||||
@@ -2184,8 +2100,8 @@ packages:
|
|||||||
'@napi-rs/wasm-runtime@0.2.12':
|
'@napi-rs/wasm-runtime@0.2.12':
|
||||||
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
|
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
|
||||||
|
|
||||||
'@napi-rs/wasm-runtime@1.0.5':
|
'@napi-rs/wasm-runtime@1.0.3':
|
||||||
resolution: {integrity: sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==}
|
resolution: {integrity: sha512-rZxtMsLwjdXkMUGC3WwsPwLNVqVqnTJT6MNIB6e+5fhMcSCPP0AOsNWuMQ5mdCq6HNjs/ZeWAEchpqeprqBD2Q==}
|
||||||
|
|
||||||
'@next/env@14.2.32':
|
'@next/env@14.2.32':
|
||||||
resolution: {integrity: sha512-n9mQdigI6iZ/DF6pCTwMKeWgF2e8lg7qgt5M7HXMLtyhZYMnf/u905M18sSpPmHL9MKp9JHo56C6jrD2EvWxng==}
|
resolution: {integrity: sha512-n9mQdigI6iZ/DF6pCTwMKeWgF2e8lg7qgt5M7HXMLtyhZYMnf/u905M18sSpPmHL9MKp9JHo56C6jrD2EvWxng==}
|
||||||
@@ -2803,12 +2719,12 @@ packages:
|
|||||||
wrangler:
|
wrangler:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@react-router/express@7.9.4':
|
'@react-router/express@7.9.5':
|
||||||
resolution: {integrity: sha512-qba2YnZXWz8kyXNxXKDa0qS88ct4MwJKMwINmto/LPb08W/YdgRUBSZIw7QnOdN7aFkvWTRGXKBTCcle8WDnRA==}
|
resolution: {integrity: sha512-Mg94Tw9JSaRuwkvIC6PaODRzsLs6mo70ppz5qdIK/G3iotSxsH08TDNdzot7CaXXevk/pIiD/+Tbn0H/asHsYA==}
|
||||||
engines: {node: '>=20.0.0'}
|
engines: {node: '>=20.0.0'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
express: ^4.17.1 || ^5
|
express: ^4.17.1 || ^5
|
||||||
react-router: 7.9.4
|
react-router: 7.9.5
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
typescript:
|
typescript:
|
||||||
@@ -2834,6 +2750,23 @@ packages:
|
|||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
'@react-router/node@7.9.5':
|
||||||
|
resolution: {integrity: sha512-3mDd32mXh3gEkG0cLPnUaoLkY1pApsTPqn7O1j+P8aLf997uYz5lYDjt33vtMhaotlRM0x+5JziAKtz/76YBpQ==}
|
||||||
|
engines: {node: '>=20.0.0'}
|
||||||
|
peerDependencies:
|
||||||
|
react-router: 7.9.5
|
||||||
|
typescript: 5.8.3
|
||||||
|
peerDependenciesMeta:
|
||||||
|
typescript:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@react-router/serve@7.9.5':
|
||||||
|
resolution: {integrity: sha512-sww8oDNqz8SgaXEQ3maqTuMlibCMpmWvLE0s5zyEyOQb1G99clYMcXceQ2HNU2jtXJkp+P5XI1CngpGpngyTnw==}
|
||||||
|
engines: {node: '>=20.0.0'}
|
||||||
|
hasBin: true
|
||||||
|
peerDependencies:
|
||||||
|
react-router: 7.9.5
|
||||||
|
|
||||||
'@remirror/core-constants@3.0.0':
|
'@remirror/core-constants@3.0.0':
|
||||||
resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==}
|
resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==}
|
||||||
|
|
||||||
@@ -3802,9 +3735,6 @@ packages:
|
|||||||
'@types/http-errors@2.0.5':
|
'@types/http-errors@2.0.5':
|
||||||
resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
|
resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
|
||||||
|
|
||||||
'@types/http-proxy@1.17.16':
|
|
||||||
resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==}
|
|
||||||
|
|
||||||
'@types/json-schema@7.0.15':
|
'@types/json-schema@7.0.15':
|
||||||
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
|
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
|
||||||
|
|
||||||
@@ -3844,9 +3774,6 @@ packages:
|
|||||||
'@types/mime@1.3.5':
|
'@types/mime@1.3.5':
|
||||||
resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
|
resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==}
|
||||||
|
|
||||||
'@types/morgan@1.9.10':
|
|
||||||
resolution: {integrity: sha512-sS4A1zheMvsADRVfT0lYbJ4S9lmsey8Zo2F7cnbYjWHP67Q0AwMYuuzLlkIM2N8gAbb9cubhIVFwcIN2XyYCkA==}
|
|
||||||
|
|
||||||
'@types/ms@2.1.0':
|
'@types/ms@2.1.0':
|
||||||
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
|
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
|
||||||
|
|
||||||
@@ -4191,10 +4118,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
|
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
|
|
||||||
accepts@2.0.0:
|
|
||||||
resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
|
|
||||||
acorn-import-attributes@1.9.5:
|
acorn-import-attributes@1.9.5:
|
||||||
resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
|
resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -4450,10 +4373,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
|
resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
|
||||||
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
|
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
|
||||||
|
|
||||||
body-parser@2.2.0:
|
|
||||||
resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
|
|
||||||
engines: {node: '>=18'}
|
|
||||||
|
|
||||||
boolbase@1.0.0:
|
boolbase@1.0.0:
|
||||||
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
|
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
|
||||||
|
|
||||||
@@ -4719,10 +4638,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
|
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
|
|
||||||
content-disposition@1.0.0:
|
|
||||||
resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
|
|
||||||
content-type@1.0.5:
|
content-type@1.0.5:
|
||||||
resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
|
resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
@@ -4736,10 +4651,6 @@ packages:
|
|||||||
cookie-signature@1.0.6:
|
cookie-signature@1.0.6:
|
||||||
resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
|
resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
|
||||||
|
|
||||||
cookie-signature@1.2.2:
|
|
||||||
resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
|
|
||||||
engines: {node: '>=6.6.0'}
|
|
||||||
|
|
||||||
cookie@0.7.1:
|
cookie@0.7.1:
|
||||||
resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
|
resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
@@ -4765,11 +4676,6 @@ packages:
|
|||||||
crelt@1.0.6:
|
crelt@1.0.6:
|
||||||
resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
|
resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
|
||||||
|
|
||||||
cross-env@7.0.3:
|
|
||||||
resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
|
|
||||||
engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
|
|
||||||
hasBin: true
|
|
||||||
|
|
||||||
cross-fetch@3.2.0:
|
cross-fetch@3.2.0:
|
||||||
resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
|
resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
|
||||||
|
|
||||||
@@ -5439,10 +5345,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==}
|
resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==}
|
||||||
engines: {node: '>= 0.10.0'}
|
engines: {node: '>= 0.10.0'}
|
||||||
|
|
||||||
express@5.1.0:
|
|
||||||
resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==}
|
|
||||||
engines: {node: '>= 18'}
|
|
||||||
|
|
||||||
extend@3.0.2:
|
extend@3.0.2:
|
||||||
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
|
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
|
||||||
|
|
||||||
@@ -5514,10 +5416,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
|
resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
|
||||||
engines: {node: '>= 0.8'}
|
engines: {node: '>= 0.8'}
|
||||||
|
|
||||||
finalhandler@2.1.0:
|
|
||||||
resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
|
|
||||||
engines: {node: '>= 0.8'}
|
|
||||||
|
|
||||||
find-cache-dir@3.3.2:
|
find-cache-dir@3.3.2:
|
||||||
resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
|
resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@@ -5601,10 +5499,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
|
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
|
|
||||||
fresh@2.0.0:
|
|
||||||
resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
|
|
||||||
engines: {node: '>= 0.8'}
|
|
||||||
|
|
||||||
frimousse@0.3.0:
|
frimousse@0.3.0:
|
||||||
resolution: {integrity: sha512-kO6LMoKY/cLAYEhXXtqLRaLIE6L/DagpFPrUZaLv3LsUa1/8Iza3HhwZcgN8eZ+weXnhv69eoclNUPohcCa/IQ==}
|
resolution: {integrity: sha512-kO6LMoKY/cLAYEhXXtqLRaLIE6L/DagpFPrUZaLv3LsUa1/8Iza3HhwZcgN8eZ+weXnhv69eoclNUPohcCa/IQ==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -5659,6 +5553,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
|
resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
|
get-port@5.1.1:
|
||||||
|
resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==}
|
||||||
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
get-proto@1.0.1:
|
get-proto@1.0.1:
|
||||||
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
|
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
@@ -5817,14 +5715,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
|
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
|
||||||
engines: {node: '>= 0.8'}
|
engines: {node: '>= 0.8'}
|
||||||
|
|
||||||
http-proxy-middleware@3.0.5:
|
|
||||||
resolution: {integrity: sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
|
|
||||||
http-proxy@1.18.1:
|
|
||||||
resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
|
|
||||||
engines: {node: '>=8.0.0'}
|
|
||||||
|
|
||||||
human-signals@2.1.0:
|
human-signals@2.1.0:
|
||||||
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
|
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
|
||||||
engines: {node: '>=10.17.0'}
|
engines: {node: '>=10.17.0'}
|
||||||
@@ -5836,14 +5726,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
|
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
iconv-lite@0.6.3:
|
|
||||||
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
|
|
||||||
engines: {node: '>=0.10.0'}
|
|
||||||
|
|
||||||
iconv-lite@0.7.0:
|
|
||||||
resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==}
|
|
||||||
engines: {node: '>=0.10.0'}
|
|
||||||
|
|
||||||
icss-utils@5.1.0:
|
icss-utils@5.1.0:
|
||||||
resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
|
resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
|
||||||
engines: {node: ^10 || ^12 || >= 14}
|
engines: {node: ^10 || ^12 || >= 14}
|
||||||
@@ -6020,17 +5902,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
|
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
|
||||||
is-plain-object@5.0.0:
|
|
||||||
resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
|
|
||||||
engines: {node: '>=0.10.0'}
|
|
||||||
|
|
||||||
is-port-reachable@4.0.0:
|
is-port-reachable@4.0.0:
|
||||||
resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==}
|
resolution: {integrity: sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==}
|
||||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||||
|
|
||||||
is-promise@4.0.0:
|
|
||||||
resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
|
|
||||||
|
|
||||||
is-regex@1.2.1:
|
is-regex@1.2.1:
|
||||||
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
|
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
@@ -6362,10 +6237,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
|
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
|
|
||||||
media-typer@1.1.0:
|
|
||||||
resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
|
|
||||||
engines: {node: '>= 0.8'}
|
|
||||||
|
|
||||||
memfs@3.5.3:
|
memfs@3.5.3:
|
||||||
resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==}
|
resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==}
|
||||||
engines: {node: '>= 4.0.0'}
|
engines: {node: '>= 4.0.0'}
|
||||||
@@ -6376,10 +6247,6 @@ packages:
|
|||||||
merge-descriptors@1.0.3:
|
merge-descriptors@1.0.3:
|
||||||
resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
|
resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
|
||||||
|
|
||||||
merge-descriptors@2.0.0:
|
|
||||||
resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
|
|
||||||
engines: {node: '>=18'}
|
|
||||||
|
|
||||||
merge-stream@2.0.0:
|
merge-stream@2.0.0:
|
||||||
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
|
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
|
||||||
|
|
||||||
@@ -6478,10 +6345,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
|
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
|
|
||||||
mime-types@3.0.1:
|
|
||||||
resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
|
|
||||||
mime@1.6.0:
|
mime@1.6.0:
|
||||||
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
|
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
@@ -6584,10 +6447,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
|
resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
|
|
||||||
negotiator@1.0.0:
|
|
||||||
resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
|
|
||||||
neo-async@2.6.2:
|
neo-async@2.6.2:
|
||||||
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
|
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
|
||||||
|
|
||||||
@@ -6869,9 +6728,6 @@ packages:
|
|||||||
path-to-regexp@3.3.0:
|
path-to-regexp@3.3.0:
|
||||||
resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==}
|
resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==}
|
||||||
|
|
||||||
path-to-regexp@8.3.0:
|
|
||||||
resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
|
|
||||||
|
|
||||||
path-type@4.0.0:
|
path-type@4.0.0:
|
||||||
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
|
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
@@ -7293,10 +7149,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
|
resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
|
||||||
engines: {node: '>= 0.8'}
|
engines: {node: '>= 0.8'}
|
||||||
|
|
||||||
raw-body@3.0.1:
|
|
||||||
resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==}
|
|
||||||
engines: {node: '>= 0.10'}
|
|
||||||
|
|
||||||
rc@1.2.8:
|
rc@1.2.8:
|
||||||
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
|
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
@@ -7559,9 +7411,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==}
|
resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==}
|
||||||
engines: {node: '>=8.6.0'}
|
engines: {node: '>=8.6.0'}
|
||||||
|
|
||||||
requires-port@1.0.0:
|
|
||||||
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
|
|
||||||
|
|
||||||
reselect@5.1.1:
|
reselect@5.1.1:
|
||||||
resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==}
|
resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==}
|
||||||
|
|
||||||
@@ -7628,10 +7477,6 @@ packages:
|
|||||||
rope-sequence@1.3.4:
|
rope-sequence@1.3.4:
|
||||||
resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==}
|
resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==}
|
||||||
|
|
||||||
router@2.2.0:
|
|
||||||
resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
|
|
||||||
engines: {node: '>= 18'}
|
|
||||||
|
|
||||||
run-parallel@1.2.0:
|
run-parallel@1.2.0:
|
||||||
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
|
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
|
||||||
|
|
||||||
@@ -7694,10 +7539,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
|
resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
|
||||||
engines: {node: '>= 0.8.0'}
|
engines: {node: '>= 0.8.0'}
|
||||||
|
|
||||||
send@1.2.0:
|
|
||||||
resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
|
|
||||||
engines: {node: '>= 18'}
|
|
||||||
|
|
||||||
sentence-case@3.0.4:
|
sentence-case@3.0.4:
|
||||||
resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==}
|
resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==}
|
||||||
|
|
||||||
@@ -7711,10 +7552,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
|
resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
|
||||||
engines: {node: '>= 0.8.0'}
|
engines: {node: '>= 0.8.0'}
|
||||||
|
|
||||||
serve-static@2.2.0:
|
|
||||||
resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
|
|
||||||
engines: {node: '>= 18'}
|
|
||||||
|
|
||||||
serve@14.2.5:
|
serve@14.2.5:
|
||||||
resolution: {integrity: sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA==}
|
resolution: {integrity: sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA==}
|
||||||
engines: {node: '>= 14'}
|
engines: {node: '>= 14'}
|
||||||
@@ -8224,10 +8061,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
|
resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
|
|
||||||
type-is@2.0.1:
|
|
||||||
resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
|
|
||||||
engines: {node: '>= 0.6'}
|
|
||||||
|
|
||||||
typed-array-buffer@1.0.3:
|
typed-array-buffer@1.0.3:
|
||||||
resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
|
resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
@@ -9451,7 +9284,7 @@ snapshots:
|
|||||||
'@tybys/wasm-util': 0.10.1
|
'@tybys/wasm-util': 0.10.1
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@napi-rs/wasm-runtime@1.0.5':
|
'@napi-rs/wasm-runtime@1.0.3':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@emnapi/core': 1.5.0
|
'@emnapi/core': 1.5.0
|
||||||
'@emnapi/runtime': 1.5.0
|
'@emnapi/runtime': 1.5.0
|
||||||
@@ -10133,7 +9966,7 @@ snapshots:
|
|||||||
'@react-pdf/primitives': 4.1.1
|
'@react-pdf/primitives': 4.1.1
|
||||||
'@react-pdf/stylesheet': 6.1.0
|
'@react-pdf/stylesheet': 6.1.0
|
||||||
|
|
||||||
'@react-router/dev@7.9.3(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.5.1)(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.1.11(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1)':
|
'@react-router/dev@7.9.3(@react-router/serve@7.9.5(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.5.1)(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.1.11(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.4
|
'@babel/core': 7.28.4
|
||||||
'@babel/generator': 7.28.3
|
'@babel/generator': 7.28.3
|
||||||
@@ -10165,6 +9998,7 @@ snapshots:
|
|||||||
vite: 7.1.11(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.11(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
vite-node: 3.2.4(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)
|
vite-node: 3.2.4(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
|
'@react-router/serve': 7.9.5(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@types/node'
|
- '@types/node'
|
||||||
@@ -10182,7 +10016,7 @@ snapshots:
|
|||||||
- tsx
|
- tsx
|
||||||
- yaml
|
- yaml
|
||||||
|
|
||||||
'@react-router/dev@7.9.4(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.5.1)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.1.11(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1)':
|
'@react-router/dev@7.9.4(@react-router/serve@7.9.5(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3))(@types/node@22.12.0)(babel-plugin-macros@3.1.0)(jiti@2.5.1)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.43.1)(typescript@5.8.3)(vite@7.1.11(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1))(yaml@2.8.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.28.4
|
'@babel/core': 7.28.4
|
||||||
'@babel/generator': 7.28.3
|
'@babel/generator': 7.28.3
|
||||||
@@ -10214,6 +10048,7 @@ snapshots:
|
|||||||
vite: 7.1.11(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)
|
vite: 7.1.11(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
vite-node: 3.2.4(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)
|
vite-node: 3.2.4(@types/node@22.12.0)(jiti@2.5.1)(terser@5.43.1)(yaml@2.8.1)
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
|
'@react-router/serve': 7.9.5(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@types/node'
|
- '@types/node'
|
||||||
@@ -10231,21 +10066,22 @@ snapshots:
|
|||||||
- tsx
|
- tsx
|
||||||
- yaml
|
- yaml
|
||||||
|
|
||||||
'@react-router/express@7.9.4(express@5.1.0)(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)':
|
'@react-router/express@7.9.5(express@4.21.2)(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@react-router/node': 7.9.4(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
'@react-router/node': 7.9.5(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
||||||
express: 5.1.0
|
express: 4.21.2
|
||||||
react-router: 7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
react-router: 7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
|
|
||||||
'@react-router/express@7.9.4(express@5.1.0)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)':
|
'@react-router/express@7.9.5(express@4.21.2)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@react-router/node': 7.9.4(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
'@react-router/node': 7.9.5(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
||||||
express: 5.1.0
|
express: 4.21.2
|
||||||
react-router: 7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
react-router: 7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@react-router/node@7.9.3(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)':
|
'@react-router/node@7.9.3(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -10268,6 +10104,52 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
|
|
||||||
|
'@react-router/node@7.9.5(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)':
|
||||||
|
dependencies:
|
||||||
|
'@mjackson/node-fetch-server': 0.2.0
|
||||||
|
react-router: 7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
|
optionalDependencies:
|
||||||
|
typescript: 5.8.3
|
||||||
|
|
||||||
|
'@react-router/node@7.9.5(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)':
|
||||||
|
dependencies:
|
||||||
|
'@mjackson/node-fetch-server': 0.2.0
|
||||||
|
react-router: 7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
|
optionalDependencies:
|
||||||
|
typescript: 5.8.3
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@react-router/serve@7.9.5(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)':
|
||||||
|
dependencies:
|
||||||
|
'@mjackson/node-fetch-server': 0.2.0
|
||||||
|
'@react-router/express': 7.9.5(express@4.21.2)(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
||||||
|
'@react-router/node': 7.9.5(react-router@7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
||||||
|
compression: 1.8.1
|
||||||
|
express: 4.21.2
|
||||||
|
get-port: 5.1.1
|
||||||
|
morgan: 1.10.1
|
||||||
|
react-router: 7.9.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
|
source-map-support: 0.5.21
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
- typescript
|
||||||
|
|
||||||
|
'@react-router/serve@7.9.5(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)':
|
||||||
|
dependencies:
|
||||||
|
'@mjackson/node-fetch-server': 0.2.0
|
||||||
|
'@react-router/express': 7.9.5(express@4.21.2)(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
||||||
|
'@react-router/node': 7.9.5(react-router@7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.8.3)
|
||||||
|
compression: 1.8.1
|
||||||
|
express: 4.21.2
|
||||||
|
get-port: 5.1.1
|
||||||
|
morgan: 1.10.1
|
||||||
|
react-router: 7.9.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||||
|
source-map-support: 0.5.21
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
- typescript
|
||||||
|
optional: true
|
||||||
|
|
||||||
'@remirror/core-constants@3.0.0': {}
|
'@remirror/core-constants@3.0.0': {}
|
||||||
|
|
||||||
'@remix-run/node-fetch-server@0.9.0': {}
|
'@remix-run/node-fetch-server@0.9.0': {}
|
||||||
@@ -10304,7 +10186,7 @@ snapshots:
|
|||||||
|
|
||||||
'@rolldown/binding-wasm32-wasi@1.0.0-beta.34':
|
'@rolldown/binding-wasm32-wasi@1.0.0-beta.34':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@napi-rs/wasm-runtime': 1.0.5
|
'@napi-rs/wasm-runtime': 1.0.3
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@rolldown/binding-win32-arm64-msvc@1.0.0-beta.34':
|
'@rolldown/binding-win32-arm64-msvc@1.0.0-beta.34':
|
||||||
@@ -11380,10 +11262,6 @@ snapshots:
|
|||||||
|
|
||||||
'@types/http-errors@2.0.5': {}
|
'@types/http-errors@2.0.5': {}
|
||||||
|
|
||||||
'@types/http-proxy@1.17.16':
|
|
||||||
dependencies:
|
|
||||||
'@types/node': 22.12.0
|
|
||||||
|
|
||||||
'@types/json-schema@7.0.15': {}
|
'@types/json-schema@7.0.15': {}
|
||||||
|
|
||||||
'@types/json5@0.0.29': {}
|
'@types/json5@0.0.29': {}
|
||||||
@@ -11420,10 +11298,6 @@ snapshots:
|
|||||||
|
|
||||||
'@types/mime@1.3.5': {}
|
'@types/mime@1.3.5': {}
|
||||||
|
|
||||||
'@types/morgan@1.9.10':
|
|
||||||
dependencies:
|
|
||||||
'@types/node': 22.12.0
|
|
||||||
|
|
||||||
'@types/ms@2.1.0': {}
|
'@types/ms@2.1.0': {}
|
||||||
|
|
||||||
'@types/mysql@2.15.27':
|
'@types/mysql@2.15.27':
|
||||||
@@ -11814,11 +11688,6 @@ snapshots:
|
|||||||
mime-types: 2.1.35
|
mime-types: 2.1.35
|
||||||
negotiator: 0.6.3
|
negotiator: 0.6.3
|
||||||
|
|
||||||
accepts@2.0.0:
|
|
||||||
dependencies:
|
|
||||||
mime-types: 3.0.1
|
|
||||||
negotiator: 1.0.0
|
|
||||||
|
|
||||||
acorn-import-attributes@1.9.5(acorn@8.15.0):
|
acorn-import-attributes@1.9.5(acorn@8.15.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
acorn: 8.15.0
|
acorn: 8.15.0
|
||||||
@@ -12024,7 +11893,7 @@ snapshots:
|
|||||||
|
|
||||||
axios@1.12.0:
|
axios@1.12.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
follow-redirects: 1.15.11(debug@4.4.3)
|
follow-redirects: 1.15.11
|
||||||
form-data: 4.0.4
|
form-data: 4.0.4
|
||||||
proxy-from-env: 1.1.0
|
proxy-from-env: 1.1.0
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -12096,20 +11965,6 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
body-parser@2.2.0:
|
|
||||||
dependencies:
|
|
||||||
bytes: 3.1.2
|
|
||||||
content-type: 1.0.5
|
|
||||||
debug: 4.4.3
|
|
||||||
http-errors: 2.0.0
|
|
||||||
iconv-lite: 0.6.3
|
|
||||||
on-finished: 2.4.1
|
|
||||||
qs: 6.14.0
|
|
||||||
raw-body: 3.0.1
|
|
||||||
type-is: 2.0.1
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
boolbase@1.0.0: {}
|
boolbase@1.0.0: {}
|
||||||
|
|
||||||
boxen@7.0.0:
|
boxen@7.0.0:
|
||||||
@@ -12394,10 +12249,6 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
safe-buffer: 5.2.1
|
safe-buffer: 5.2.1
|
||||||
|
|
||||||
content-disposition@1.0.0:
|
|
||||||
dependencies:
|
|
||||||
safe-buffer: 5.2.1
|
|
||||||
|
|
||||||
content-type@1.0.5: {}
|
content-type@1.0.5: {}
|
||||||
|
|
||||||
convert-source-map@1.9.0: {}
|
convert-source-map@1.9.0: {}
|
||||||
@@ -12406,8 +12257,6 @@ snapshots:
|
|||||||
|
|
||||||
cookie-signature@1.0.6: {}
|
cookie-signature@1.0.6: {}
|
||||||
|
|
||||||
cookie-signature@1.2.2: {}
|
|
||||||
|
|
||||||
cookie@0.7.1: {}
|
cookie@0.7.1: {}
|
||||||
|
|
||||||
cookie@1.0.2: {}
|
cookie@1.0.2: {}
|
||||||
@@ -12434,10 +12283,6 @@ snapshots:
|
|||||||
|
|
||||||
crelt@1.0.6: {}
|
crelt@1.0.6: {}
|
||||||
|
|
||||||
cross-env@7.0.3:
|
|
||||||
dependencies:
|
|
||||||
cross-spawn: 7.0.6
|
|
||||||
|
|
||||||
cross-fetch@3.2.0:
|
cross-fetch@3.2.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
node-fetch: 2.7.0
|
node-fetch: 2.7.0
|
||||||
@@ -13262,38 +13107,6 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
express@5.1.0:
|
|
||||||
dependencies:
|
|
||||||
accepts: 2.0.0
|
|
||||||
body-parser: 2.2.0
|
|
||||||
content-disposition: 1.0.0
|
|
||||||
content-type: 1.0.5
|
|
||||||
cookie: 0.7.1
|
|
||||||
cookie-signature: 1.2.2
|
|
||||||
debug: 4.4.3
|
|
||||||
encodeurl: 2.0.0
|
|
||||||
escape-html: 1.0.3
|
|
||||||
etag: 1.8.1
|
|
||||||
finalhandler: 2.1.0
|
|
||||||
fresh: 2.0.0
|
|
||||||
http-errors: 2.0.0
|
|
||||||
merge-descriptors: 2.0.0
|
|
||||||
mime-types: 3.0.1
|
|
||||||
on-finished: 2.4.1
|
|
||||||
once: 1.4.0
|
|
||||||
parseurl: 1.3.3
|
|
||||||
proxy-addr: 2.0.7
|
|
||||||
qs: 6.14.0
|
|
||||||
range-parser: 1.2.1
|
|
||||||
router: 2.2.0
|
|
||||||
send: 1.2.0
|
|
||||||
serve-static: 2.2.0
|
|
||||||
statuses: 2.0.1
|
|
||||||
type-is: 2.0.1
|
|
||||||
vary: 1.1.2
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
extend@3.0.2: {}
|
extend@3.0.2: {}
|
||||||
|
|
||||||
fast-deep-equal@3.1.3: {}
|
fast-deep-equal@3.1.3: {}
|
||||||
@@ -13365,17 +13178,6 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
finalhandler@2.1.0:
|
|
||||||
dependencies:
|
|
||||||
debug: 4.4.3
|
|
||||||
encodeurl: 2.0.0
|
|
||||||
escape-html: 1.0.3
|
|
||||||
on-finished: 2.4.1
|
|
||||||
parseurl: 1.3.3
|
|
||||||
statuses: 2.0.1
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
find-cache-dir@3.3.2:
|
find-cache-dir@3.3.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
commondir: 1.0.1
|
commondir: 1.0.1
|
||||||
@@ -13416,9 +13218,7 @@ snapshots:
|
|||||||
|
|
||||||
fn.name@1.1.0: {}
|
fn.name@1.1.0: {}
|
||||||
|
|
||||||
follow-redirects@1.15.11(debug@4.4.3):
|
follow-redirects@1.15.11: {}
|
||||||
optionalDependencies:
|
|
||||||
debug: 4.4.3
|
|
||||||
|
|
||||||
fontfaceobserver@2.1.0: {}
|
fontfaceobserver@2.1.0: {}
|
||||||
|
|
||||||
@@ -13476,8 +13276,6 @@ snapshots:
|
|||||||
|
|
||||||
fresh@0.5.2: {}
|
fresh@0.5.2: {}
|
||||||
|
|
||||||
fresh@2.0.0: {}
|
|
||||||
|
|
||||||
frimousse@0.3.0(react@18.3.1)(typescript@5.8.3):
|
frimousse@0.3.0(react@18.3.1)(typescript@5.8.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
react: 18.3.1
|
react: 18.3.1
|
||||||
@@ -13535,6 +13333,8 @@ snapshots:
|
|||||||
|
|
||||||
get-nonce@1.0.1: {}
|
get-nonce@1.0.1: {}
|
||||||
|
|
||||||
|
get-port@5.1.1: {}
|
||||||
|
|
||||||
get-proto@1.0.1:
|
get-proto@1.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
dunder-proto: 1.0.1
|
dunder-proto: 1.0.1
|
||||||
@@ -13699,25 +13499,6 @@ snapshots:
|
|||||||
statuses: 2.0.1
|
statuses: 2.0.1
|
||||||
toidentifier: 1.0.1
|
toidentifier: 1.0.1
|
||||||
|
|
||||||
http-proxy-middleware@3.0.5:
|
|
||||||
dependencies:
|
|
||||||
'@types/http-proxy': 1.17.16
|
|
||||||
debug: 4.4.3
|
|
||||||
http-proxy: 1.18.1(debug@4.4.3)
|
|
||||||
is-glob: 4.0.3
|
|
||||||
is-plain-object: 5.0.0
|
|
||||||
micromatch: 4.0.8
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
http-proxy@1.18.1(debug@4.4.3):
|
|
||||||
dependencies:
|
|
||||||
eventemitter3: 4.0.7
|
|
||||||
follow-redirects: 1.15.11(debug@4.4.3)
|
|
||||||
requires-port: 1.0.0
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- debug
|
|
||||||
|
|
||||||
human-signals@2.1.0: {}
|
human-signals@2.1.0: {}
|
||||||
|
|
||||||
hyphen@1.10.6: {}
|
hyphen@1.10.6: {}
|
||||||
@@ -13726,14 +13507,6 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
safer-buffer: 2.1.2
|
safer-buffer: 2.1.2
|
||||||
|
|
||||||
iconv-lite@0.6.3:
|
|
||||||
dependencies:
|
|
||||||
safer-buffer: 2.1.2
|
|
||||||
|
|
||||||
iconv-lite@0.7.0:
|
|
||||||
dependencies:
|
|
||||||
safer-buffer: 2.1.2
|
|
||||||
|
|
||||||
icss-utils@5.1.0(postcss@8.5.6):
|
icss-utils@5.1.0(postcss@8.5.6):
|
||||||
dependencies:
|
dependencies:
|
||||||
postcss: 8.5.6
|
postcss: 8.5.6
|
||||||
@@ -13919,12 +13692,8 @@ snapshots:
|
|||||||
|
|
||||||
is-plain-obj@4.1.0: {}
|
is-plain-obj@4.1.0: {}
|
||||||
|
|
||||||
is-plain-object@5.0.0: {}
|
|
||||||
|
|
||||||
is-port-reachable@4.0.0: {}
|
is-port-reachable@4.0.0: {}
|
||||||
|
|
||||||
is-promise@4.0.0: {}
|
|
||||||
|
|
||||||
is-regex@1.2.1:
|
is-regex@1.2.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
call-bound: 1.0.4
|
call-bound: 1.0.4
|
||||||
@@ -14265,8 +14034,6 @@ snapshots:
|
|||||||
|
|
||||||
media-typer@0.3.0: {}
|
media-typer@0.3.0: {}
|
||||||
|
|
||||||
media-typer@1.1.0: {}
|
|
||||||
|
|
||||||
memfs@3.5.3:
|
memfs@3.5.3:
|
||||||
dependencies:
|
dependencies:
|
||||||
fs-monkey: 1.1.0
|
fs-monkey: 1.1.0
|
||||||
@@ -14277,8 +14044,6 @@ snapshots:
|
|||||||
|
|
||||||
merge-descriptors@1.0.3: {}
|
merge-descriptors@1.0.3: {}
|
||||||
|
|
||||||
merge-descriptors@2.0.0: {}
|
|
||||||
|
|
||||||
merge-stream@2.0.0: {}
|
merge-stream@2.0.0: {}
|
||||||
|
|
||||||
merge2@1.4.1: {}
|
merge2@1.4.1: {}
|
||||||
@@ -14437,10 +14202,6 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
mime-db: 1.52.0
|
mime-db: 1.52.0
|
||||||
|
|
||||||
mime-types@3.0.1:
|
|
||||||
dependencies:
|
|
||||||
mime-db: 1.54.0
|
|
||||||
|
|
||||||
mime@1.6.0: {}
|
mime@1.6.0: {}
|
||||||
|
|
||||||
mimic-fn@2.1.0: {}
|
mimic-fn@2.1.0: {}
|
||||||
@@ -14515,8 +14276,6 @@ snapshots:
|
|||||||
|
|
||||||
negotiator@0.6.4: {}
|
negotiator@0.6.4: {}
|
||||||
|
|
||||||
negotiator@1.0.0: {}
|
|
||||||
|
|
||||||
neo-async@2.6.2: {}
|
neo-async@2.6.2: {}
|
||||||
|
|
||||||
next-themes@0.2.1(next@14.2.32(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
|
next-themes@0.2.1(next@14.2.32(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
|
||||||
@@ -14809,8 +14568,6 @@ snapshots:
|
|||||||
|
|
||||||
path-to-regexp@3.3.0: {}
|
path-to-regexp@3.3.0: {}
|
||||||
|
|
||||||
path-to-regexp@8.3.0: {}
|
|
||||||
|
|
||||||
path-type@4.0.0: {}
|
path-type@4.0.0: {}
|
||||||
|
|
||||||
pathe@1.1.2: {}
|
pathe@1.1.2: {}
|
||||||
@@ -15174,13 +14931,6 @@ snapshots:
|
|||||||
iconv-lite: 0.4.24
|
iconv-lite: 0.4.24
|
||||||
unpipe: 1.0.0
|
unpipe: 1.0.0
|
||||||
|
|
||||||
raw-body@3.0.1:
|
|
||||||
dependencies:
|
|
||||||
bytes: 3.1.2
|
|
||||||
http-errors: 2.0.0
|
|
||||||
iconv-lite: 0.7.0
|
|
||||||
unpipe: 1.0.0
|
|
||||||
|
|
||||||
rc@1.2.8:
|
rc@1.2.8:
|
||||||
dependencies:
|
dependencies:
|
||||||
deep-extend: 0.6.0
|
deep-extend: 0.6.0
|
||||||
@@ -15529,8 +15279,6 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
requires-port@1.0.0: {}
|
|
||||||
|
|
||||||
reselect@5.1.1: {}
|
reselect@5.1.1: {}
|
||||||
|
|
||||||
resolve-from@4.0.0: {}
|
resolve-from@4.0.0: {}
|
||||||
@@ -15629,16 +15377,6 @@ snapshots:
|
|||||||
|
|
||||||
rope-sequence@1.3.4: {}
|
rope-sequence@1.3.4: {}
|
||||||
|
|
||||||
router@2.2.0:
|
|
||||||
dependencies:
|
|
||||||
debug: 4.4.3
|
|
||||||
depd: 2.0.0
|
|
||||||
is-promise: 4.0.0
|
|
||||||
parseurl: 1.3.3
|
|
||||||
path-to-regexp: 8.3.0
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
run-parallel@1.2.0:
|
run-parallel@1.2.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
queue-microtask: 1.2.3
|
queue-microtask: 1.2.3
|
||||||
@@ -15722,22 +15460,6 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
send@1.2.0:
|
|
||||||
dependencies:
|
|
||||||
debug: 4.4.3
|
|
||||||
encodeurl: 2.0.0
|
|
||||||
escape-html: 1.0.3
|
|
||||||
etag: 1.8.1
|
|
||||||
fresh: 2.0.0
|
|
||||||
http-errors: 2.0.0
|
|
||||||
mime-types: 3.0.1
|
|
||||||
ms: 2.1.3
|
|
||||||
on-finished: 2.4.1
|
|
||||||
range-parser: 1.2.1
|
|
||||||
statuses: 2.0.1
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
sentence-case@3.0.4:
|
sentence-case@3.0.4:
|
||||||
dependencies:
|
dependencies:
|
||||||
no-case: 3.0.4
|
no-case: 3.0.4
|
||||||
@@ -15767,15 +15489,6 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
serve-static@2.2.0:
|
|
||||||
dependencies:
|
|
||||||
encodeurl: 2.0.0
|
|
||||||
escape-html: 1.0.3
|
|
||||||
parseurl: 1.3.3
|
|
||||||
send: 1.2.0
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
serve@14.2.5:
|
serve@14.2.5:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@zeit/schemas': 2.36.0
|
'@zeit/schemas': 2.36.0
|
||||||
@@ -16320,12 +16033,6 @@ snapshots:
|
|||||||
media-typer: 0.3.0
|
media-typer: 0.3.0
|
||||||
mime-types: 2.1.35
|
mime-types: 2.1.35
|
||||||
|
|
||||||
type-is@2.0.1:
|
|
||||||
dependencies:
|
|
||||||
content-type: 1.0.5
|
|
||||||
media-typer: 1.1.0
|
|
||||||
mime-types: 3.0.1
|
|
||||||
|
|
||||||
typed-array-buffer@1.0.3:
|
typed-array-buffer@1.0.3:
|
||||||
dependencies:
|
dependencies:
|
||||||
call-bound: 1.0.4
|
call-bound: 1.0.4
|
||||||
|
|||||||
Reference in New Issue
Block a user