@devlusoft/devix 0.5.2 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/build.js +15 -6
- package/dist/cli/build.js.map +2 -2
- package/dist/cli/dev-server.js +19 -10
- package/dist/cli/dev-server.js.map +2 -2
- package/dist/cli/generate.js +10 -1
- package/dist/cli/generate.js.map +2 -2
- package/dist/cli/index.js +12 -3
- package/dist/cli/index.js.map +2 -2
- package/dist/runtime/index.js +1 -1
- package/dist/runtime/index.js.map +3 -3
- package/dist/runtime/router-provider.d.ts +12 -3
- package/dist/runtime/router-provider.js +1 -1
- package/dist/runtime/router-provider.js.map +3 -3
- package/dist/utils/banner.js +1 -1
- package/dist/vite/codegen/entry-client.js +12 -3
- package/dist/vite/codegen/entry-client.js.map +2 -2
- package/dist/vite/index.js +14 -5
- package/dist/vite/index.js.map +2 -2
- package/package.json +8 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/runtime/router-provider.tsx", "../../src/runtime/head.tsx", "../../src/runtime/context.tsx", "../../src/runtime/error-boundary.tsx", "../../src/runtime/url.ts"],
|
|
4
|
-
"sourcesContent": ["import { ComponentType, ReactNode, useCallback, useContext, useEffect, useRef, useState } from \"react\";\nimport { RouterContext } from 'virtual:devix/context'\nimport { ErrorProps, LayoutProps, PageProps } from \"../server/types\";\nimport { Metadata, Viewport } from \"../types\";\n\nconst DEFAULT_VIEWPORT: Viewport = { width: 'device-width', initialScale: 1 }\nimport { getDefaultErrorPage, loadErrorPage, matchClientRoute } from \"virtual:devix/client-routes\";\nimport { HeadSlot } from \"./head\";\nimport { NavigateOptions, PageMetaContext, RouteDataContext } from \"./context\";\nimport { DevixErrorBoundary } from \"./error-boundary\";\nimport { resolveTo } from \"./url\";\nimport type { Redirect } from \"../utils/response\";\n\ninterface RouteState {\n pathname: string\n params: Record<string, string>\n loaderData: unknown\n layoutsData: unknown[]\n guardData: unknown\n Page: ComponentType<PageProps>\n layouts: ComponentType<LayoutProps>[]\n metadata: Metadata | null\n viewport?: Viewport\n pendingError?: ErrorProps\n ErrorPage?: ComponentType<ErrorProps>\n}\n\nexport function useRouter() {\n return useContext(RouterContext)\n}\n\nconst noopNavigate = () => Promise.resolve()\nconst noopRevalidate = () => Promise.resolve()\n\nexport function useNavigate() {\n const ctx = useContext(RouterContext)\n return ctx?.navigate ?? noopNavigate\n}\n\nexport function useRevalidate() {\n const ctx = useContext(RouterContext)\n return ctx?.revalidate ?? noopRevalidate\n}\n\nexport function useParams<T extends Record<string, string>>() {\n const ctx = useContext(RouteDataContext)\n if (!ctx) throw new Error(\"useParams must be used within a route or layout\")\n return ctx.params as T\n}\n\ntype LoaderReturnType<T> = T extends (...args: any[]) => Promise<infer R>\n ? [Exclude<R, Redirect | void | undefined>] extends [never] ? undefined : Exclude<R, Redirect | void | undefined>\n : T extends (...args: any[]) => infer R\n ? [Exclude<R, Redirect | void | undefined>] extends [never] ? undefined : Exclude<R, Redirect | void | undefined>\n : T\n\nexport function useLoaderData<T>() {\n const ctx = useContext(RouteDataContext)\n if (!ctx) throw new Error(\"useLoaderData must be used within a route or layout\")\n return ctx.loaderData as LoaderReturnType<T>\n}\n\ntype GuardDataReturn<TGuard> =\n TGuard extends (...args: any[]) => infer R\n ? Exclude<Awaited<R>, string | Redirect | null | undefined | { readonly statusCode: number; readonly message: string }>\n : unknown\n\n/**\n * Devuelve el `guardData` resuelto en el \u00FAltimo guard que retorn\u00F3 un objeto\n * (layout \u2192 page, en orden). Tipado al retorno del guard si pasas `typeof guard`.\n *\n * ```ts\n * export async function guard({ request }: LoaderContext) {\n * const session = await getSession(request)\n * if (!session) return '/login'\n * return session\n * }\n *\n * function Header() {\n * const session = useGuardData<typeof guard>()\n * return <span>{session.user.name}</span>\n * }\n * ```\n */\nexport function useGuardData<TGuard = unknown>(): GuardDataReturn<TGuard> {\n const ctx = useContext(RouterContext)\n if (!ctx) throw new Error(\"useGuardData must be used within a route or layout\")\n return ctx.guardData as GuardDataReturn<TGuard>\n}\n\ninterface PrefetchEntry {\n promise: Promise<{ pageMod: any; layoutMods: any[]; data: any } | null>\n controller: AbortController\n}\n\ninterface RouterProviderProps {\n initialData: unknown\n initialParams: Record<string, string>\n initialPage: ComponentType<PageProps>\n initialLayouts?: ComponentType<LayoutProps>[]\n initialLayoutsData?: unknown[]\n initialGuardData?: unknown\n initialMeta?: Metadata | null\n initialViewport?: Viewport\n initialError?: ErrorProps\n initialErrorPage?: ComponentType<ErrorProps>\n clientEntry: string\n}\n\nexport function RouterProvider({\n initialData,\n initialParams,\n initialPage,\n initialLayouts = [],\n initialLayoutsData = [],\n initialGuardData = null,\n initialMeta,\n initialViewport,\n initialError,\n initialErrorPage,\n clientEntry,\n}: RouterProviderProps) {\n\n const [state, setState] = useState<RouteState>({\n pathname: window.location.pathname,\n params: initialParams,\n loaderData: initialData,\n layoutsData: initialLayoutsData,\n guardData: initialGuardData,\n Page: initialPage,\n layouts: initialLayouts,\n metadata: initialMeta ?? null,\n viewport: initialViewport,\n pendingError: initialError,\n ErrorPage: initialErrorPage,\n })\n\n const navigatingRef = useRef<AbortController | null>(null)\n const [isNavigating, setIsNavigating] = useState(false)\n\n const prefetchCacheRef = useRef<Map<string, PrefetchEntry>>(new Map())\n\n const prefetchRoute = useCallback((href: string) => {\n const resolved = resolveTo(href)\n if (resolved.kind === 'external') return\n\n const key = resolved.href\n if (prefetchCacheRef.current.has(key)) return\n const matched = matchClientRoute(resolved.pathname)\n if (!matched) return\n\n const controller = new AbortController()\n const promise = Promise.all([\n Promise.all([matched.load(), ...matched.loadLayouts.map(l => l())]),\n fetch(`/_data${key}`, { headers: { Accept: 'application/json' }, signal: controller.signal })\n ]).then(async ([[pageMod, ...layoutMods], dataRes]) => {\n if (!dataRes.ok || !pageMod.default) return null\n const data = await dataRes.json()\n return { pageMod, layoutMods, data }\n }).catch(() => null)\n\n const expireTimer = setTimeout(() => {\n controller.abort()\n prefetchCacheRef.current.delete(key)\n }, 3000)\n promise.finally(() => clearTimeout(expireTimer))\n\n prefetchCacheRef.current.set(key, { promise, controller })\n }, [])\n\n const loadRoute = useCallback(async (to: string, controller: AbortController) => {\n const pathname = to.split('?')[0].split('#')[0]\n const matched = matchClientRoute(pathname)\n if (!matched) {\n const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()\n setState(prev => ({\n ...prev,\n pathname: pathname,\n pendingError: { statusCode: 404, message: 'Not found' },\n ErrorPage: ErrorPage ?? undefined,\n }))\n return\n }\n\n const cached = prefetchCacheRef.current.get(to)\n if (cached) prefetchCacheRef.current.delete(to)\n const prefetched = cached ? await cached.promise : null\n\n if (controller.signal.aborted) return\n\n let pageMod: any, layoutMods: any[], data: any\n\n if (prefetched) {\n ;({ pageMod, layoutMods, data } = prefetched)\n } else {\n const [[pm, ...lm], dataRes] = await Promise.all([\n Promise.all([\n matched.load(),\n ...matched.loadLayouts.map(l => l()),\n ]),\n fetch(`/_data${to}`, {\n headers: { Accept: 'application/json' },\n signal: controller.signal,\n })\n ])\n\n if (controller.signal.aborted) return\n if (!pm.default) return\n\n if (!dataRes.ok) {\n const ct = dataRes.headers.get('Content-Type') ?? ''\n let errorBody: { statusCode?: number; message?: string; code?: string; data?: unknown } | null = null\n try {\n if (ct.includes('application/json')) errorBody = await dataRes.json()\n else if (ct.includes('text/plain')) errorBody = { message: await dataRes.text() }\n } catch { /* ignorar errores de parsing */ }\n\n const headers: Record<string, string> = {}\n dataRes.headers.forEach((value, key) => { headers[key] = value })\n\n const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()\n setState(prev => ({\n ...prev,\n pathname,\n pendingError: {\n statusCode: errorBody?.statusCode ?? dataRes.status,\n message: errorBody?.message ?? 'Server error',\n code: errorBody?.code,\n data: errorBody?.data,\n headers,\n },\n ErrorPage: ErrorPage ?? undefined,\n }))\n return\n }\n\n pageMod = pm\n layoutMods = lm\n data = await dataRes.json()\n }\n\n if (data.redirect) {\n if (data.redirectReplace) {\n window.history.replaceState(null, '', data.redirect)\n } else {\n window.history.pushState(null, '', data.redirect)\n }\n await loadRoute(data.redirect, controller)\n return\n }\n\n setState({\n pathname,\n params: data.params ?? {},\n loaderData: data.loaderData,\n layoutsData: (data.layouts ?? []).map((l: any) => l.loaderData),\n guardData: data.guardData ?? null,\n Page: pageMod.default,\n layouts: layoutMods.map(m => m.default),\n metadata: data.metadata ?? null,\n viewport: data.viewport ?? DEFAULT_VIEWPORT,\n })\n\n const hash = to.includes('#') ? to.split('#')[1] : null\n const scrollBehavior = getComputedStyle(document.documentElement).scrollBehavior as ScrollBehavior\n if (hash) {\n requestAnimationFrame(() => {\n document.getElementById(hash)?.scrollIntoView({ behavior: scrollBehavior })\n })\n } else {\n window.scrollTo({ top: 0, behavior: scrollBehavior })\n }\n }, [])\n\n const navigate = useCallback(async (to: string, options?: NavigateOptions) => {\n const resolved = resolveTo(to)\n if (resolved.kind === 'external') {\n window.location.href = resolved.url.href\n return\n }\n const href = resolved.href\n\n navigatingRef.current?.abort()\n const controller = new AbortController()\n navigatingRef.current = controller\n\n setIsNavigating(true)\n const run = async () => {\n window.history[options?.replace ? 'replaceState' : 'pushState'](null, '', href)\n await loadRoute(href, controller)\n }\n try {\n if (options?.viewTransition && 'startViewTransition' in document) {\n await (document as any).startViewTransition(run).finished\n } else {\n await run()\n }\n } finally {\n if (!controller.signal.aborted) setIsNavigating(false)\n }\n }, [loadRoute])\n\n const revalidatingRef = useRef<AbortController | null>(null)\n\n const revalidate = useCallback(async () => {\n revalidatingRef.current?.abort()\n const controller = new AbortController()\n revalidatingRef.current = controller\n\n const to = window.location.pathname + window.location.search\n let dataRes: Response\n try {\n dataRes = await fetch(`/_data${to}`, {\n headers: { Accept: 'application/json' },\n signal: controller.signal,\n })\n } catch (err) {\n if ((err as Error).name === 'AbortError') return\n throw err\n }\n\n if (controller.signal.aborted) return\n if (!dataRes.ok) return\n\n const data = await dataRes.json()\n if (controller.signal.aborted) return\n\n if (data.redirect) {\n await navigate(data.redirect, { replace: data.redirectReplace })\n return\n }\n setState(prev => ({\n ...prev,\n loaderData: data.loaderData,\n layoutsData: (data.layouts ?? []).map((l: any) => l.loaderData),\n guardData: data.guardData ?? null,\n params: data.params ?? prev.params,\n metadata: data.metadata ?? prev.metadata,\n viewport: data.viewport ?? prev.viewport,\n }))\n }, [navigate])\n\n useEffect(() => {\n const handlePop = () => {\n navigatingRef.current?.abort()\n const controller = new AbortController()\n navigatingRef.current = controller\n\n const to = window.location.pathname + window.location.search\n loadRoute(to, controller).catch(err => {\n if (err.name !== 'AbortError') console.error('[router] popstate error:', err)\n })\n }\n window.addEventListener(\"popstate\", handlePop)\n return () => window.removeEventListener(\"popstate\", handlePop)\n }, [loadRoute])\n\n let content: ReactNode\n\n if (state.pendingError) {\n content = state.ErrorPage\n ? <state.ErrorPage {...state.pendingError} />\n : <h1>{state.pendingError.statusCode}</h1>\n } else {\n let tree: ReactNode = (\n <RouteDataContext value={{ loaderData: state.loaderData, params: state.params }}>\n <state.Page data={state.loaderData} params={state.params} url={state.pathname} />\n </RouteDataContext>\n )\n\n for (let i = state.layouts.length - 1; i >= 0; i--) {\n const Layout = state.layouts[i]\n const layoutData = state.layoutsData[i]\n tree = (\n <RouteDataContext value={{ loaderData: layoutData, params: state.params }}>\n <Layout data={layoutData} params={state.params}>{tree}</Layout>\n </RouteDataContext>\n )\n }\n\n content = (\n <DevixErrorBoundary key={state.pathname} ErrorPage={state.ErrorPage}>\n {tree}\n </DevixErrorBoundary>\n )\n }\n\n return (\n <PageMetaContext value={{\n metadata: state.metadata,\n viewport: state.viewport,\n clientEntry,\n }}>\n <HeadSlot metadata={state.metadata} viewport={state.viewport} />\n <RouterContext value={{ ...state, isNavigating, navigate, revalidate, prefetchRoute }}>\n {content}\n </RouterContext>\n </PageMetaContext>\n )\n}", "import { Metadata, MetadataIcon, Viewport } from \"../types\";\nimport { ReactNode } from \"react\";\n\ntype MetaTag =\n | { tag: 'title'; children: string }\n | { tag: 'meta'; name?: string; property?: string; content: string }\n | { tag: 'link'; rel: string; href: string; hrefLang?: string; type?: string; sizes?: string }\n\nfunction collectTags(metadata: Metadata, viewport?: Viewport): MetaTag[] {\n const tags: MetaTag[] = []\n\n if (metadata.title)\n tags.push({ tag: 'title', children: metadata.title })\n if (metadata.description)\n tags.push({ tag: 'meta', name: 'description', content: metadata.description })\n if (metadata.keywords?.length)\n tags.push({ tag: 'meta', name: 'keywords', content: metadata.keywords.join(', ') })\n\n const ogTitle = metadata.og?.title ?? metadata.title\n if (ogTitle) tags.push({ tag: 'meta', property: 'og:title', content: ogTitle })\n const ogDesc = metadata.og?.description ?? metadata.description\n if (ogDesc) tags.push({ tag: 'meta', property: 'og:description', content: ogDesc })\n if (metadata.og?.image) tags.push({ tag: 'meta', property: 'og:image', content: metadata.og.image })\n if (metadata.og?.type) tags.push({ tag: 'meta', property: 'og:type', content: metadata.og.type })\n if (metadata.og?.url) tags.push({ tag: 'meta', property: 'og:url', content: metadata.og.url })\n\n const twTitle = metadata.twitter?.title ?? metadata.title\n if (twTitle) tags.push({ tag: 'meta', name: 'twitter:title', content: twTitle })\n const twDesc = metadata.twitter?.description ?? metadata.description\n if (twDesc) tags.push({ tag: 'meta', name: 'twitter:description', content: twDesc })\n if (metadata.twitter?.card) tags.push({\n tag: 'meta', name: 'twitter:card', content:\n metadata.twitter.card\n })\n if (metadata.twitter?.image) tags.push({\n tag: 'meta', name: 'twitter:image', content:\n metadata.twitter.image\n })\n if (metadata.twitter?.creator) tags.push({\n tag: 'meta', name: 'twitter:creator', content:\n metadata.twitter.creator\n })\n\n if (metadata.canonical) tags.push({ tag: 'link', rel: 'canonical', href: metadata.canonical })\n if (metadata.robots) tags.push({ tag: 'meta', name: 'robots', content: metadata.robots })\n if (metadata.alternates) {\n for (const [lang, href] of Object.entries(metadata.alternates))\n tags.push({ tag: 'link', rel: 'alternate', href, hrefLang: lang })\n }\n\n if (metadata.icons) {\n const raw = Array.isArray(metadata.icons) ? metadata.icons : [metadata.icons]\n for (const icon of raw) {\n const resolved: MetadataIcon = typeof icon === 'string' ? { href: icon } : icon\n tags.push({\n tag: 'link',\n rel: resolved.rel ?? 'icon',\n href: resolved.href,\n ...(resolved.type && { type: resolved.type }),\n ...(resolved.sizes && { sizes: resolved.sizes }),\n })\n }\n }\n\n if (viewport) {\n const parts: string[] = []\n if (viewport.width !== undefined) parts.push(`width=${viewport.width}`)\n if (viewport.initialScale !== undefined) parts.push(`initial-scale=${viewport.initialScale}`)\n if (viewport.maximumScale !== undefined) parts.push(`maximum-scale=${viewport.maximumScale}`)\n if (viewport.userScalable !== undefined) parts.push(`user-scalable=${viewport.userScalable ? 'yes' :\n 'no'}`)\n if (parts.length) tags.push({ tag: 'meta', name: 'viewport', content: parts.join(', ') })\n if (viewport.themeColor) tags.push({\n tag: 'meta', name: 'theme-color', content: viewport.themeColor\n })\n }\n\n return tags\n}\n\nexport function HeadSlot({ metadata, viewport }: { metadata: Metadata | null, viewport?: Viewport }) {\n if (typeof window === 'undefined' || !metadata) return null\n return <>{buildHeadNodes(metadata, viewport)}</>\n}\n\nexport function buildHeadNodes(metadata: Metadata, viewport?: Viewport): ReactNode {\n const tags = collectTags(metadata, viewport)\n\n return <>\n {tags.map((t, i) => {\n if (t.tag === 'title') return <title key={i}>{t.children}</title>\n if (t.tag === 'link') return <link key={i} rel={t.rel} href={t.href} hrefLang={t.hrefLang} type={t.type} sizes={t.sizes} />\n return <meta key={i} name={t.name} property={t.property} content={t.content} />\n })}\n </>\n}", "import {createContext, Context, ComponentType} from \"react\";\nimport {Metadata, Viewport} from \"../types\";\nimport {LayoutProps, PageProps} from \"../server/types\";\n\nexport interface NavigateOptions {\n replace?: boolean\n viewTransition?: boolean\n}\n\nexport interface RouterContextValue {\n pathname: string\n params: Record<string, string>\n loaderData: unknown\n layoutsData: unknown[]\n guardData: unknown\n Page: ComponentType<PageProps>\n layouts: ComponentType<LayoutProps>[]\n metadata: Metadata | null\n viewport?: Viewport\n navigate: (to: string, options?: NavigateOptions) => Promise<void>\n revalidate: () => Promise<void>\n prefetchRoute: (href: string) => void\n isNavigating: boolean\n}\n\nexport interface PageMetaContextValue {\n metadata: Metadata | null\n viewport?: Viewport\n clientEntry?: string\n}\n\nexport interface RouteDataContextValue {\n loaderData: unknown\n params: Record<string, string>\n}\n\nconst g = globalThis as any\n\ng.__devix_RouterContext__ ??= createContext<RouterContextValue | null>(null)\nexport const RouterContext: Context<RouterContextValue | null> = g.__devix_RouterContext__\n\ng.__devix_PageMetaContext__ ??= createContext<PageMetaContextValue | null>(null)\ng.__devix_RouteDataContext__ ??= createContext<RouteDataContextValue | null>(null)\n\nexport const PageMetaContext: Context<PageMetaContextValue | null> = g.__devix_PageMetaContext__\nexport const RouteDataContext: Context<RouteDataContextValue | null> = g.__devix_RouteDataContext__\n\n", "import {Component, ComponentType, ReactNode} from \"react\";\nimport {ErrorProps} from \"../server/types\";\n\ninterface Props {\n ErrorPage?: ComponentType<ErrorProps>\n children: ReactNode\n}\n\ninterface State {\n error: ErrorProps | null\n}\n\nexport class DevixErrorBoundary extends Component<Props, State> {\n state: State = { error: null }\n\n static getDerivedStateFromError(err: unknown): State {\n if (err instanceof DevixError) {\n return {\n error: {statusCode: err.statusCode, message: err.message}\n }\n }\n return {\n error: {statusCode: 500, message: err instanceof Error ? err.message : 'Unknown error'}\n }\n }\n\n render() {\n if (this.state.error && this.props.ErrorPage) {\n return <this.props.ErrorPage {...this.state.error} />\n }\n if (this.state.error) {\n return <h1>{this.state.error.statusCode}</h1>\n }\n return this.props.children\n }\n}\n\nexport interface DevixErrorOptions {\n code?: string\n data?: unknown\n}\n\nexport class DevixError extends Error {\n statusCode: number\n code?: string\n data?: unknown\n constructor(statusCode: number, message: string, options?: DevixErrorOptions) {\n super(message)\n this.name = 'DevixError'\n this.statusCode = statusCode\n this.code = options?.code\n this.data = options?.data\n }\n}\n", "export type ResolvedTo =\n | { kind: 'internal'; pathname: string; href: string }\n | { kind: 'external'; url: URL }\n\nexport function resolveTo(to: string): ResolvedTo {\n const base = new URL(window.location.href)\n if (!base.pathname.endsWith('/')) base.pathname += '/'\n\n const url = new URL(to, base)\n\n if (url.origin !== window.location.origin) {\n return { kind: 'external', url }\n }\n\n const pathname = url.pathname.length > 1\n ? url.pathname.replace(/\\/$/, '')\n : url.pathname\n\n return {\n kind: 'internal',\n pathname,\n href: pathname + url.search + url.hash,\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["useCallback", "useContext", "useEffect", "useRef", "useState", "
|
|
4
|
+
"sourcesContent": ["import { ComponentType, ReactNode, useCallback, useContext, useEffect, useRef, useState } from \"react\";\nimport { ErrorProps, LayoutProps, PageProps } from \"../server/types\";\nimport { Metadata, Viewport } from \"../types\";\n\nconst DEFAULT_VIEWPORT: Viewport = { width: 'device-width', initialScale: 1 }\nimport { HeadSlot } from \"./head\";\nimport { NavigateOptions, PageMetaContext, RouteDataContext, RouterContext } from \"./context\";\nimport { DevixErrorBoundary } from \"./error-boundary\";\nimport { resolveTo } from \"./url\";\nimport type { Redirect } from \"../utils/response\";\n\nexport interface ClientRouteMatcher {\n matchClientRoute: (pathname: string) => {\n load: () => Promise<any>\n loadLayouts: (() => Promise<any>)[]\n params: Record<string, string>\n } | null\n loadErrorPage: () => Promise<ComponentType<ErrorProps> | null>\n getDefaultErrorPage: () => ComponentType<ErrorProps> | null\n}\n\ninterface RouteState {\n pathname: string\n params: Record<string, string>\n loaderData: unknown\n layoutsData: unknown[]\n guardData: unknown\n Page: ComponentType<PageProps>\n layouts: ComponentType<LayoutProps>[]\n metadata: Metadata | null\n viewport?: Viewport\n pendingError?: ErrorProps\n ErrorPage?: ComponentType<ErrorProps>\n}\n\nexport function useRouter() {\n return useContext(RouterContext)\n}\n\nconst noopNavigate = () => Promise.resolve()\nconst noopRevalidate = () => Promise.resolve()\n\nexport function useNavigate() {\n const ctx = useContext(RouterContext)\n return ctx?.navigate ?? noopNavigate\n}\n\nexport function useRevalidate() {\n const ctx = useContext(RouterContext)\n return ctx?.revalidate ?? noopRevalidate\n}\n\nexport function useParams<T extends Record<string, string>>() {\n const ctx = useContext(RouteDataContext)\n if (!ctx) throw new Error(\"useParams must be used within a route or layout\")\n return ctx.params as T\n}\n\ntype LoaderReturnType<T> = T extends (...args: any[]) => Promise<infer R>\n ? [Exclude<R, Redirect | void | undefined>] extends [never] ? undefined : Exclude<R, Redirect | void | undefined>\n : T extends (...args: any[]) => infer R\n ? [Exclude<R, Redirect | void | undefined>] extends [never] ? undefined : Exclude<R, Redirect | void | undefined>\n : T\n\nexport function useLoaderData<T>() {\n const ctx = useContext(RouteDataContext)\n if (!ctx) throw new Error(\"useLoaderData must be used within a route or layout\")\n return ctx.loaderData as LoaderReturnType<T>\n}\n\ntype GuardDataReturn<TGuard> =\n TGuard extends (...args: any[]) => infer R\n ? Exclude<Awaited<R>, string | Redirect | null | undefined | { readonly statusCode: number; readonly message: string }>\n : unknown\n\n/**\n * Devuelve el `guardData` resuelto en el \u00FAltimo guard que retorn\u00F3 un objeto\n * (layout \u2192 page, en orden). Tipado al retorno del guard si pasas `typeof guard`.\n *\n * ```ts\n * export async function guard({ request }: LoaderContext) {\n * const session = await getSession(request)\n * if (!session) return '/login'\n * return session\n * }\n *\n * function Header() {\n * const session = useGuardData<typeof guard>()\n * return <span>{session.user.name}</span>\n * }\n * ```\n */\nexport function useGuardData<TGuard = unknown>(): GuardDataReturn<TGuard> {\n const ctx = useContext(RouterContext)\n if (!ctx) throw new Error(\"useGuardData must be used within a route or layout\")\n return ctx.guardData as GuardDataReturn<TGuard>\n}\n\ninterface PrefetchEntry {\n promise: Promise<{ pageMod: any; layoutMods: any[]; data: any } | null>\n controller: AbortController\n}\n\ninterface RouterProviderProps extends ClientRouteMatcher {\n initialData: unknown\n initialParams: Record<string, string>\n initialPage: ComponentType<PageProps>\n initialLayouts?: ComponentType<LayoutProps>[]\n initialLayoutsData?: unknown[]\n initialGuardData?: unknown\n initialMeta?: Metadata | null\n initialViewport?: Viewport\n initialError?: ErrorProps\n initialErrorPage?: ComponentType<ErrorProps>\n clientEntry: string\n}\n\nexport function RouterProvider({\n initialData,\n initialParams,\n initialPage,\n initialLayouts = [],\n initialLayoutsData = [],\n initialGuardData = null,\n initialMeta,\n initialViewport,\n initialError,\n initialErrorPage,\n clientEntry,\n matchClientRoute,\n loadErrorPage,\n getDefaultErrorPage,\n}: RouterProviderProps) {\n\n const [state, setState] = useState<RouteState>({\n pathname: window.location.pathname,\n params: initialParams,\n loaderData: initialData,\n layoutsData: initialLayoutsData,\n guardData: initialGuardData,\n Page: initialPage,\n layouts: initialLayouts,\n metadata: initialMeta ?? null,\n viewport: initialViewport,\n pendingError: initialError,\n ErrorPage: initialErrorPage,\n })\n\n const navigatingRef = useRef<AbortController | null>(null)\n const [isNavigating, setIsNavigating] = useState(false)\n\n const prefetchCacheRef = useRef<Map<string, PrefetchEntry>>(new Map())\n\n const prefetchRoute = useCallback((href: string) => {\n const resolved = resolveTo(href)\n if (resolved.kind === 'external') return\n\n const key = resolved.href\n if (prefetchCacheRef.current.has(key)) return\n const matched = matchClientRoute(resolved.pathname)\n if (!matched) return\n\n const controller = new AbortController()\n const promise = Promise.all([\n Promise.all([matched.load(), ...matched.loadLayouts.map(l => l())]),\n fetch(`/_data${key}`, { headers: { Accept: 'application/json' }, signal: controller.signal })\n ]).then(async ([[pageMod, ...layoutMods], dataRes]) => {\n if (!dataRes.ok || !pageMod.default) return null\n const data = await dataRes.json()\n return { pageMod, layoutMods, data }\n }).catch(() => null)\n\n const expireTimer = setTimeout(() => {\n controller.abort()\n prefetchCacheRef.current.delete(key)\n }, 3000)\n promise.finally(() => clearTimeout(expireTimer))\n\n prefetchCacheRef.current.set(key, { promise, controller })\n }, [])\n\n const loadRoute = useCallback(async (to: string, controller: AbortController) => {\n const pathname = to.split('?')[0].split('#')[0]\n const matched = matchClientRoute(pathname)\n if (!matched) {\n const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()\n setState(prev => ({\n ...prev,\n pathname: pathname,\n pendingError: { statusCode: 404, message: 'Not found' },\n ErrorPage: ErrorPage ?? undefined,\n }))\n return\n }\n\n const cached = prefetchCacheRef.current.get(to)\n if (cached) prefetchCacheRef.current.delete(to)\n const prefetched = cached ? await cached.promise : null\n\n if (controller.signal.aborted) return\n\n let pageMod: any, layoutMods: any[], data: any\n\n if (prefetched) {\n ;({ pageMod, layoutMods, data } = prefetched)\n } else {\n const [[pm, ...lm], dataRes] = await Promise.all([\n Promise.all([\n matched.load(),\n ...matched.loadLayouts.map(l => l()),\n ]),\n fetch(`/_data${to}`, {\n headers: { Accept: 'application/json' },\n signal: controller.signal,\n })\n ])\n\n if (controller.signal.aborted) return\n if (!pm.default) return\n\n if (!dataRes.ok) {\n const ct = dataRes.headers.get('Content-Type') ?? ''\n let errorBody: { statusCode?: number; message?: string; code?: string; data?: unknown } | null = null\n try {\n if (ct.includes('application/json')) errorBody = await dataRes.json()\n else if (ct.includes('text/plain')) errorBody = { message: await dataRes.text() }\n } catch { /* ignorar errores de parsing */ }\n\n const headers: Record<string, string> = {}\n dataRes.headers.forEach((value, key) => { headers[key] = value })\n\n const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()\n setState(prev => ({\n ...prev,\n pathname,\n pendingError: {\n statusCode: errorBody?.statusCode ?? dataRes.status,\n message: errorBody?.message ?? 'Server error',\n code: errorBody?.code,\n data: errorBody?.data,\n headers,\n },\n ErrorPage: ErrorPage ?? undefined,\n }))\n return\n }\n\n pageMod = pm\n layoutMods = lm\n data = await dataRes.json()\n }\n\n if (data.redirect) {\n if (data.redirectReplace) {\n window.history.replaceState(null, '', data.redirect)\n } else {\n window.history.pushState(null, '', data.redirect)\n }\n await loadRoute(data.redirect, controller)\n return\n }\n\n setState({\n pathname,\n params: data.params ?? {},\n loaderData: data.loaderData,\n layoutsData: (data.layouts ?? []).map((l: any) => l.loaderData),\n guardData: data.guardData ?? null,\n Page: pageMod.default,\n layouts: layoutMods.map(m => m.default),\n metadata: data.metadata ?? null,\n viewport: data.viewport ?? DEFAULT_VIEWPORT,\n })\n\n const hash = to.includes('#') ? to.split('#')[1] : null\n const scrollBehavior = getComputedStyle(document.documentElement).scrollBehavior as ScrollBehavior\n if (hash) {\n requestAnimationFrame(() => {\n document.getElementById(hash)?.scrollIntoView({ behavior: scrollBehavior })\n })\n } else {\n window.scrollTo({ top: 0, behavior: scrollBehavior })\n }\n }, [])\n\n const navigate = useCallback(async (to: string, options?: NavigateOptions) => {\n const resolved = resolveTo(to)\n if (resolved.kind === 'external') {\n window.location.href = resolved.url.href\n return\n }\n const href = resolved.href\n\n navigatingRef.current?.abort()\n const controller = new AbortController()\n navigatingRef.current = controller\n\n setIsNavigating(true)\n const run = async () => {\n window.history[options?.replace ? 'replaceState' : 'pushState'](null, '', href)\n await loadRoute(href, controller)\n }\n try {\n if (options?.viewTransition && 'startViewTransition' in document) {\n await (document as any).startViewTransition(run).finished\n } else {\n await run()\n }\n } finally {\n if (!controller.signal.aborted) setIsNavigating(false)\n }\n }, [loadRoute])\n\n const revalidatingRef = useRef<AbortController | null>(null)\n\n const revalidate = useCallback(async () => {\n revalidatingRef.current?.abort()\n const controller = new AbortController()\n revalidatingRef.current = controller\n\n const to = window.location.pathname + window.location.search\n let dataRes: Response\n try {\n dataRes = await fetch(`/_data${to}`, {\n headers: { Accept: 'application/json' },\n signal: controller.signal,\n })\n } catch (err) {\n if ((err as Error).name === 'AbortError') return\n throw err\n }\n\n if (controller.signal.aborted) return\n if (!dataRes.ok) return\n\n const data = await dataRes.json()\n if (controller.signal.aborted) return\n\n if (data.redirect) {\n await navigate(data.redirect, { replace: data.redirectReplace })\n return\n }\n setState(prev => ({\n ...prev,\n loaderData: data.loaderData,\n layoutsData: (data.layouts ?? []).map((l: any) => l.loaderData),\n guardData: data.guardData ?? null,\n params: data.params ?? prev.params,\n metadata: data.metadata ?? prev.metadata,\n viewport: data.viewport ?? prev.viewport,\n }))\n }, [navigate])\n\n useEffect(() => {\n const handlePop = () => {\n navigatingRef.current?.abort()\n const controller = new AbortController()\n navigatingRef.current = controller\n\n const to = window.location.pathname + window.location.search\n loadRoute(to, controller).catch(err => {\n if (err.name !== 'AbortError') console.error('[router] popstate error:', err)\n })\n }\n window.addEventListener(\"popstate\", handlePop)\n return () => window.removeEventListener(\"popstate\", handlePop)\n }, [loadRoute])\n\n let content: ReactNode\n\n if (state.pendingError) {\n content = state.ErrorPage\n ? <state.ErrorPage {...state.pendingError} />\n : <h1>{state.pendingError.statusCode}</h1>\n } else {\n let tree: ReactNode = (\n <RouteDataContext value={{ loaderData: state.loaderData, params: state.params }}>\n <state.Page data={state.loaderData} params={state.params} url={state.pathname} />\n </RouteDataContext>\n )\n\n for (let i = state.layouts.length - 1; i >= 0; i--) {\n const Layout = state.layouts[i]\n const layoutData = state.layoutsData[i]\n tree = (\n <RouteDataContext value={{ loaderData: layoutData, params: state.params }}>\n <Layout data={layoutData} params={state.params}>{tree}</Layout>\n </RouteDataContext>\n )\n }\n\n content = (\n <DevixErrorBoundary key={state.pathname} ErrorPage={state.ErrorPage}>\n {tree}\n </DevixErrorBoundary>\n )\n }\n\n return (\n <PageMetaContext value={{\n metadata: state.metadata,\n viewport: state.viewport,\n clientEntry,\n }}>\n <HeadSlot metadata={state.metadata} viewport={state.viewport} />\n <RouterContext value={{ ...state, isNavigating, navigate, revalidate, prefetchRoute }}>\n {content}\n </RouterContext>\n </PageMetaContext>\n )\n}", "import { Metadata, MetadataIcon, Viewport } from \"../types\";\nimport { ReactNode } from \"react\";\n\ntype MetaTag =\n | { tag: 'title'; children: string }\n | { tag: 'meta'; name?: string; property?: string; content: string }\n | { tag: 'link'; rel: string; href: string; hrefLang?: string; type?: string; sizes?: string }\n\nfunction collectTags(metadata: Metadata, viewport?: Viewport): MetaTag[] {\n const tags: MetaTag[] = []\n\n if (metadata.title)\n tags.push({ tag: 'title', children: metadata.title })\n if (metadata.description)\n tags.push({ tag: 'meta', name: 'description', content: metadata.description })\n if (metadata.keywords?.length)\n tags.push({ tag: 'meta', name: 'keywords', content: metadata.keywords.join(', ') })\n\n const ogTitle = metadata.og?.title ?? metadata.title\n if (ogTitle) tags.push({ tag: 'meta', property: 'og:title', content: ogTitle })\n const ogDesc = metadata.og?.description ?? metadata.description\n if (ogDesc) tags.push({ tag: 'meta', property: 'og:description', content: ogDesc })\n if (metadata.og?.image) tags.push({ tag: 'meta', property: 'og:image', content: metadata.og.image })\n if (metadata.og?.type) tags.push({ tag: 'meta', property: 'og:type', content: metadata.og.type })\n if (metadata.og?.url) tags.push({ tag: 'meta', property: 'og:url', content: metadata.og.url })\n\n const twTitle = metadata.twitter?.title ?? metadata.title\n if (twTitle) tags.push({ tag: 'meta', name: 'twitter:title', content: twTitle })\n const twDesc = metadata.twitter?.description ?? metadata.description\n if (twDesc) tags.push({ tag: 'meta', name: 'twitter:description', content: twDesc })\n if (metadata.twitter?.card) tags.push({\n tag: 'meta', name: 'twitter:card', content:\n metadata.twitter.card\n })\n if (metadata.twitter?.image) tags.push({\n tag: 'meta', name: 'twitter:image', content:\n metadata.twitter.image\n })\n if (metadata.twitter?.creator) tags.push({\n tag: 'meta', name: 'twitter:creator', content:\n metadata.twitter.creator\n })\n\n if (metadata.canonical) tags.push({ tag: 'link', rel: 'canonical', href: metadata.canonical })\n if (metadata.robots) tags.push({ tag: 'meta', name: 'robots', content: metadata.robots })\n if (metadata.alternates) {\n for (const [lang, href] of Object.entries(metadata.alternates))\n tags.push({ tag: 'link', rel: 'alternate', href, hrefLang: lang })\n }\n\n if (metadata.icons) {\n const raw = Array.isArray(metadata.icons) ? metadata.icons : [metadata.icons]\n for (const icon of raw) {\n const resolved: MetadataIcon = typeof icon === 'string' ? { href: icon } : icon\n tags.push({\n tag: 'link',\n rel: resolved.rel ?? 'icon',\n href: resolved.href,\n ...(resolved.type && { type: resolved.type }),\n ...(resolved.sizes && { sizes: resolved.sizes }),\n })\n }\n }\n\n if (viewport) {\n const parts: string[] = []\n if (viewport.width !== undefined) parts.push(`width=${viewport.width}`)\n if (viewport.initialScale !== undefined) parts.push(`initial-scale=${viewport.initialScale}`)\n if (viewport.maximumScale !== undefined) parts.push(`maximum-scale=${viewport.maximumScale}`)\n if (viewport.userScalable !== undefined) parts.push(`user-scalable=${viewport.userScalable ? 'yes' :\n 'no'}`)\n if (parts.length) tags.push({ tag: 'meta', name: 'viewport', content: parts.join(', ') })\n if (viewport.themeColor) tags.push({\n tag: 'meta', name: 'theme-color', content: viewport.themeColor\n })\n }\n\n return tags\n}\n\nexport function HeadSlot({ metadata, viewport }: { metadata: Metadata | null, viewport?: Viewport }) {\n if (typeof window === 'undefined' || !metadata) return null\n return <>{buildHeadNodes(metadata, viewport)}</>\n}\n\nexport function buildHeadNodes(metadata: Metadata, viewport?: Viewport): ReactNode {\n const tags = collectTags(metadata, viewport)\n\n return <>\n {tags.map((t, i) => {\n if (t.tag === 'title') return <title key={i}>{t.children}</title>\n if (t.tag === 'link') return <link key={i} rel={t.rel} href={t.href} hrefLang={t.hrefLang} type={t.type} sizes={t.sizes} />\n return <meta key={i} name={t.name} property={t.property} content={t.content} />\n })}\n </>\n}", "import {createContext, Context, ComponentType} from \"react\";\nimport {Metadata, Viewport} from \"../types\";\nimport {LayoutProps, PageProps} from \"../server/types\";\n\nexport interface NavigateOptions {\n replace?: boolean\n viewTransition?: boolean\n}\n\nexport interface RouterContextValue {\n pathname: string\n params: Record<string, string>\n loaderData: unknown\n layoutsData: unknown[]\n guardData: unknown\n Page: ComponentType<PageProps>\n layouts: ComponentType<LayoutProps>[]\n metadata: Metadata | null\n viewport?: Viewport\n navigate: (to: string, options?: NavigateOptions) => Promise<void>\n revalidate: () => Promise<void>\n prefetchRoute: (href: string) => void\n isNavigating: boolean\n}\n\nexport interface PageMetaContextValue {\n metadata: Metadata | null\n viewport?: Viewport\n clientEntry?: string\n}\n\nexport interface RouteDataContextValue {\n loaderData: unknown\n params: Record<string, string>\n}\n\nconst g = globalThis as any\n\ng.__devix_RouterContext__ ??= createContext<RouterContextValue | null>(null)\nexport const RouterContext: Context<RouterContextValue | null> = g.__devix_RouterContext__\n\ng.__devix_PageMetaContext__ ??= createContext<PageMetaContextValue | null>(null)\ng.__devix_RouteDataContext__ ??= createContext<RouteDataContextValue | null>(null)\n\nexport const PageMetaContext: Context<PageMetaContextValue | null> = g.__devix_PageMetaContext__\nexport const RouteDataContext: Context<RouteDataContextValue | null> = g.__devix_RouteDataContext__\n\n", "import {Component, ComponentType, ReactNode} from \"react\";\nimport {ErrorProps} from \"../server/types\";\n\ninterface Props {\n ErrorPage?: ComponentType<ErrorProps>\n children: ReactNode\n}\n\ninterface State {\n error: ErrorProps | null\n}\n\nexport class DevixErrorBoundary extends Component<Props, State> {\n state: State = { error: null }\n\n static getDerivedStateFromError(err: unknown): State {\n if (err instanceof DevixError) {\n return {\n error: {statusCode: err.statusCode, message: err.message}\n }\n }\n return {\n error: {statusCode: 500, message: err instanceof Error ? err.message : 'Unknown error'}\n }\n }\n\n render() {\n if (this.state.error && this.props.ErrorPage) {\n return <this.props.ErrorPage {...this.state.error} />\n }\n if (this.state.error) {\n return <h1>{this.state.error.statusCode}</h1>\n }\n return this.props.children\n }\n}\n\nexport interface DevixErrorOptions {\n code?: string\n data?: unknown\n}\n\nexport class DevixError extends Error {\n statusCode: number\n code?: string\n data?: unknown\n constructor(statusCode: number, message: string, options?: DevixErrorOptions) {\n super(message)\n this.name = 'DevixError'\n this.statusCode = statusCode\n this.code = options?.code\n this.data = options?.data\n }\n}\n", "export type ResolvedTo =\n | { kind: 'internal'; pathname: string; href: string }\n | { kind: 'external'; url: URL }\n\nexport function resolveTo(to: string): ResolvedTo {\n const base = new URL(window.location.href)\n if (!base.pathname.endsWith('/')) base.pathname += '/'\n\n const url = new URL(to, base)\n\n if (url.origin !== window.location.origin) {\n return { kind: 'external', url }\n }\n\n const pathname = url.pathname.length > 1\n ? url.pathname.replace(/\\/$/, '')\n : url.pathname\n\n return {\n kind: 'internal',\n pathname,\n href: pathname + url.search + url.hash,\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["useCallback", "useContext", "useEffect", "useRef", "useState", "Fragment", "jsx", "collectTags", "metadata", "viewport", "tags", "ogTitle", "ogDesc", "twTitle", "twDesc", "lang", "href", "raw", "icon", "resolved", "parts", "HeadSlot", "buildHeadNodes", "t", "i", "createContext", "g", "RouterContext", "PageMetaContext", "RouteDataContext", "Component", "jsx", "DevixErrorBoundary", "err", "DevixError", "statusCode", "message", "options", "resolveTo", "to", "base", "url", "pathname", "jsx", "jsxs", "DEFAULT_VIEWPORT", "useRouter", "useContext", "RouterContext", "noopNavigate", "noopRevalidate", "useNavigate", "useRevalidate", "useParams", "ctx", "RouteDataContext", "useLoaderData", "useGuardData", "RouterProvider", "initialData", "initialParams", "initialPage", "initialLayouts", "initialLayoutsData", "initialGuardData", "initialMeta", "initialViewport", "initialError", "initialErrorPage", "clientEntry", "matchClientRoute", "loadErrorPage", "getDefaultErrorPage", "state", "setState", "useState", "navigatingRef", "useRef", "isNavigating", "setIsNavigating", "prefetchCacheRef", "prefetchRoute", "useCallback", "href", "resolved", "resolveTo", "key", "matched", "controller", "promise", "l", "pageMod", "layoutMods", "dataRes", "data", "expireTimer", "loadRoute", "to", "pathname", "ErrorPage", "prev", "cached", "prefetched", "pm", "lm", "ct", "errorBody", "headers", "value", "m", "hash", "scrollBehavior", "navigate", "options", "run", "revalidatingRef", "revalidate", "err", "useEffect", "handlePop", "content", "tree", "i", "Layout", "layoutData", "DevixErrorBoundary", "PageMetaContext", "HeadSlot"]
|
|
7
7
|
}
|
package/dist/utils/banner.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"picocolors";import{networkInterfaces as r}from"node:os";function s(e){let l=r();for(let n of Object.values(l))for(let t of n??[])if(t.family==="IPv4"&&!t.internal)return`http://${t.address}:${e}/`;return null}function $(e){let l="0.5.
|
|
1
|
+
import o from"picocolors";import{networkInterfaces as r}from"node:os";function s(e){let l=r();for(let n of Object.values(l))for(let t of n??[])if(t.family==="IPv4"&&!t.internal)return`http://${t.address}:${e}/`;return null}function $(e){let l="0.5.4",n=s(e);console.log(),console.log(` ${o.bold(o.yellow("devix"))} ${o.dim(`v${l}`)}`),console.log(),console.log(` ${o.green("\u279C")} ${o.bold("Local:")} ${o.cyan(`http://localhost:${e}/`)}`),console.log(n?` ${o.green("\u279C")} ${o.bold("Network:")} ${o.cyan(n)}`:` ${o.green("\u279C")} ${o.bold("Network:")} ${o.dim("use --host to expose")}`),console.log()}export{$ as printDevBanner};
|
|
2
2
|
//# sourceMappingURL=banner.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
function
|
|
2
|
-
${t.map(
|
|
1
|
+
function r({cssUrls:t}){return`
|
|
2
|
+
${t.map(e=>`import '${e}'`).join(`
|
|
3
3
|
`)}
|
|
4
4
|
import "@vitejs/plugin-react/preamble"
|
|
5
5
|
import React from "react"
|
|
@@ -25,6 +25,9 @@ if (!window.__DEVIX__) {
|
|
|
25
25
|
const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()
|
|
26
26
|
createRoot(root).render(
|
|
27
27
|
React.createElement(RouterProvider, {
|
|
28
|
+
matchClientRoute,
|
|
29
|
+
loadErrorPage,
|
|
30
|
+
getDefaultErrorPage,
|
|
28
31
|
clientEntry,
|
|
29
32
|
initialData: null,
|
|
30
33
|
initialParams: {},
|
|
@@ -41,6 +44,9 @@ if (!window.__DEVIX__) {
|
|
|
41
44
|
hydrateRoot(
|
|
42
45
|
root,
|
|
43
46
|
React.createElement(RouterProvider, {
|
|
47
|
+
matchClientRoute,
|
|
48
|
+
loadErrorPage,
|
|
49
|
+
getDefaultErrorPage,
|
|
44
50
|
clientEntry,
|
|
45
51
|
initialData: loaderData,
|
|
46
52
|
initialParams: matched.params,
|
|
@@ -64,6 +70,9 @@ if (!window.__DEVIX__) {
|
|
|
64
70
|
const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()
|
|
65
71
|
createRoot(root).render(
|
|
66
72
|
React.createElement(RouterProvider, {
|
|
73
|
+
matchClientRoute,
|
|
74
|
+
loadErrorPage,
|
|
75
|
+
getDefaultErrorPage,
|
|
67
76
|
clientEntry,
|
|
68
77
|
initialData: null,
|
|
69
78
|
initialParams: {},
|
|
@@ -77,5 +86,5 @@ if (!window.__DEVIX__) {
|
|
|
77
86
|
)
|
|
78
87
|
}
|
|
79
88
|
}
|
|
80
|
-
`}export{
|
|
89
|
+
`}export{r as generateEntryClient};
|
|
81
90
|
//# sourceMappingURL=entry-client.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/vite/codegen/entry-client.ts"],
|
|
4
|
-
"sourcesContent": ["interface EntryClientOptions {\n cssUrls: string[]\n}\n\nexport function generateEntryClient({ cssUrls }: EntryClientOptions): string {\n const cssImports = cssUrls.map(u => `import '${u}'`).join('\\n')\n\n return `\n${cssImports}\nimport \"@vitejs/plugin-react/preamble\"\nimport React from \"react\"\nimport {hydrateRoot, createRoot} from 'react-dom/client'\nimport {matchClientRoute, loadErrorPage, getDefaultErrorPage} from 'virtual:devix/client-routes'\nimport {RouterProvider} from '@devlusoft/devix'\n\nconst root = document.getElementById('devix-root')\n\nif (!window.__DEVIX__) {\n const ErrorPage = getDefaultErrorPage()\n createRoot(root).render(React.createElement(ErrorPage, {statusCode: 500, message: 'Server error'}))\n} else {\n const {metadata, viewport, clientEntry} = window.__DEVIX__\n const loaderData = window.__LOADER_DATA__\n const layoutsData = window.__LAYOUTS_DATA__ ?? []\n const guardData = window.__GUARD_DATA__ ?? null\n\n const matched = matchClientRoute(window.location.pathname)\n\n if (window.__LOADER_ERROR__) {\n const {statusCode, message, code, data} = window.__LOADER_ERROR__\n const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()\n createRoot(root).render(\n React.createElement(RouterProvider, {\n clientEntry,\n initialData: null,\n initialParams: {},\n initialPage: () => null,\n initialError: {statusCode, message, code, data},\n initialErrorPage: ErrorPage,\n })\n )\n } else if (matched) {\n const [pageMod, ...layoutMods] = await Promise.all([\n matched.load(),\n ...matched.loadLayouts.map(l => l()),\n ])\n hydrateRoot(\n root,\n React.createElement(RouterProvider, {\n clientEntry,\n initialData: loaderData,\n initialParams: matched.params,\n initialPage: pageMod.default,\n initialLayouts: layoutMods.map(m => m.default),\n initialLayoutsData: layoutsData,\n initialGuardData: guardData,\n initialMeta: metadata,\n initialViewport: viewport,\n })\n )\n\n if (window.location.hash) { \n const id = window.location.hash.slice(1) \n const scrollBehavior = getComputedStyle(document.documentElement).scrollBehavior \n requestAnimationFrame(() => { \n document.getElementById(id)?.scrollIntoView({ behavior: scrollBehavior }) \n }) \n } \n } else {\n const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()\n createRoot(root).render(\n React.createElement(RouterProvider, {\n clientEntry,\n initialData: null,\n initialParams: {},\n initialPage: () => null,\n initialLayouts: [],\n initialLayoutsData: [],\n initialMeta: null,\n initialError: {statusCode: 404, message: 'Not found'},\n initialErrorPage: ErrorPage,\n })\n )\n }\n}\n`\n}"],
|
|
5
|
-
"mappings": "AAIO,SAASA,EAAoB,CAAE,QAAAC,CAAQ,EAA+B,CAGzE,MAAO;AAAA,EAFYA,EAAQ,IAAIC,GAAK,WAAWA,CAAC,GAAG,EAAE,KAAK;AAAA,CAAI,CAGtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["interface EntryClientOptions {\n cssUrls: string[]\n}\n\nexport function generateEntryClient({ cssUrls }: EntryClientOptions): string {\n const cssImports = cssUrls.map(u => `import '${u}'`).join('\\n')\n\n return `\n${cssImports}\nimport \"@vitejs/plugin-react/preamble\"\nimport React from \"react\"\nimport {hydrateRoot, createRoot} from 'react-dom/client'\nimport {matchClientRoute, loadErrorPage, getDefaultErrorPage} from 'virtual:devix/client-routes'\nimport {RouterProvider} from '@devlusoft/devix'\n\nconst root = document.getElementById('devix-root')\n\nif (!window.__DEVIX__) {\n const ErrorPage = getDefaultErrorPage()\n createRoot(root).render(React.createElement(ErrorPage, {statusCode: 500, message: 'Server error'}))\n} else {\n const {metadata, viewport, clientEntry} = window.__DEVIX__\n const loaderData = window.__LOADER_DATA__\n const layoutsData = window.__LAYOUTS_DATA__ ?? []\n const guardData = window.__GUARD_DATA__ ?? null\n\n const matched = matchClientRoute(window.location.pathname)\n\n if (window.__LOADER_ERROR__) {\n const {statusCode, message, code, data} = window.__LOADER_ERROR__\n const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()\n createRoot(root).render(\n React.createElement(RouterProvider, {\n matchClientRoute,\n loadErrorPage,\n getDefaultErrorPage,\n clientEntry,\n initialData: null,\n initialParams: {},\n initialPage: () => null,\n initialError: {statusCode, message, code, data},\n initialErrorPage: ErrorPage,\n })\n )\n } else if (matched) {\n const [pageMod, ...layoutMods] = await Promise.all([\n matched.load(),\n ...matched.loadLayouts.map(l => l()),\n ])\n hydrateRoot(\n root,\n React.createElement(RouterProvider, {\n matchClientRoute,\n loadErrorPage,\n getDefaultErrorPage,\n clientEntry,\n initialData: loaderData,\n initialParams: matched.params,\n initialPage: pageMod.default,\n initialLayouts: layoutMods.map(m => m.default),\n initialLayoutsData: layoutsData,\n initialGuardData: guardData,\n initialMeta: metadata,\n initialViewport: viewport,\n })\n )\n\n if (window.location.hash) { \n const id = window.location.hash.slice(1) \n const scrollBehavior = getComputedStyle(document.documentElement).scrollBehavior \n requestAnimationFrame(() => { \n document.getElementById(id)?.scrollIntoView({ behavior: scrollBehavior }) \n }) \n } \n } else {\n const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()\n createRoot(root).render(\n React.createElement(RouterProvider, {\n matchClientRoute,\n loadErrorPage,\n getDefaultErrorPage,\n clientEntry,\n initialData: null,\n initialParams: {},\n initialPage: () => null,\n initialLayouts: [],\n initialLayoutsData: [],\n initialMeta: null,\n initialError: {statusCode: 404, message: 'Not found'},\n initialErrorPage: ErrorPage,\n })\n )\n }\n}\n`\n}"],
|
|
5
|
+
"mappings": "AAIO,SAASA,EAAoB,CAAE,QAAAC,CAAQ,EAA+B,CAGzE,MAAO;AAAA,EAFYA,EAAQ,IAAIC,GAAK,WAAWA,CAAC,GAAG,EAAE,KAAK;AAAA,CAAI,CAGtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAuFZ",
|
|
6
6
|
"names": ["generateEntryClient", "cssUrls", "u"]
|
|
7
7
|
}
|
package/dist/vite/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{mergeConfig as we}from"vite";import Te from"@vitejs/plugin-react";import{fileURLToPath as Se}from"node:url";import{dirname as
|
|
1
|
+
import{mergeConfig as we}from"vite";import Te from"@vitejs/plugin-react";import{fileURLToPath as Se}from"node:url";import{dirname as De,relative as $e,resolve as p}from"node:path";import{createRequire as Ae}from"node:module";function U({cssUrls:e}){return`
|
|
2
2
|
${e.map(r=>`import '${r}'`).join(`
|
|
3
3
|
`)}
|
|
4
4
|
import "@vitejs/plugin-react/preamble"
|
|
@@ -25,6 +25,9 @@ if (!window.__DEVIX__) {
|
|
|
25
25
|
const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()
|
|
26
26
|
createRoot(root).render(
|
|
27
27
|
React.createElement(RouterProvider, {
|
|
28
|
+
matchClientRoute,
|
|
29
|
+
loadErrorPage,
|
|
30
|
+
getDefaultErrorPage,
|
|
28
31
|
clientEntry,
|
|
29
32
|
initialData: null,
|
|
30
33
|
initialParams: {},
|
|
@@ -41,6 +44,9 @@ if (!window.__DEVIX__) {
|
|
|
41
44
|
hydrateRoot(
|
|
42
45
|
root,
|
|
43
46
|
React.createElement(RouterProvider, {
|
|
47
|
+
matchClientRoute,
|
|
48
|
+
loadErrorPage,
|
|
49
|
+
getDefaultErrorPage,
|
|
44
50
|
clientEntry,
|
|
45
51
|
initialData: loaderData,
|
|
46
52
|
initialParams: matched.params,
|
|
@@ -64,6 +70,9 @@ if (!window.__DEVIX__) {
|
|
|
64
70
|
const ErrorPage = await loadErrorPage() ?? getDefaultErrorPage()
|
|
65
71
|
createRoot(root).render(
|
|
66
72
|
React.createElement(RouterProvider, {
|
|
73
|
+
matchClientRoute,
|
|
74
|
+
loadErrorPage,
|
|
75
|
+
getDefaultErrorPage,
|
|
67
76
|
clientEntry,
|
|
68
77
|
initialData: null,
|
|
69
78
|
initialParams: {},
|
|
@@ -145,7 +154,7 @@ export function handleApiRequest(url, request) {
|
|
|
145
154
|
}
|
|
146
155
|
`}function W(){return`
|
|
147
156
|
export {RouterContext} from '@devlusoft/devix/runtime/context'
|
|
148
|
-
`}import{readFileSync as ce,readdirSync as le,statSync as
|
|
157
|
+
`}import{readFileSync as ce,readdirSync as le,statSync as ue}from"node:fs";import{join as $,relative as pe}from"node:path";var ie=/export\s+(?:const|async\s+function|function)\s+(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS)\b/g;function se(e){return e.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/.*$/gm,"")}function k(e){let t=new Set;for(let r of se(e).matchAll(ie))t.add(r[1]);return[...t]}function V(e){return e.replace(/\.(tsx|ts|jsx|js)$/,"").replace(/\(.*?\)\//g,"").replace(/^index$|\/index$/,"").replace(/\[([^\]]+)]/g,":$1")||"/"}function q(e,t){let r=e.slice(t.length+1).replace(/\\/g,"/"),i=V(r);return i==="/"?"/api":`/api/${i}`.replace("/api//","/api/")}function ae(e,t){return"_api_"+e.slice(`${t}/`.length).replace(/\.(ts|tsx)$/,"").replace(/[^a-zA-Z0-9]/g,"_")}function B(e,t,r){return{filePath:e,urlPattern:q(e,t),identifier:ae(e,t),methods:r}}function D(e,t){if(e.length===0)return`// auto-generado por devix \u2014 no editar
|
|
149
158
|
export {}
|
|
150
159
|
declare module '@devlusoft/devix' {
|
|
151
160
|
interface ApiRoutes {}
|
|
@@ -175,7 +184,7 @@ declare module '@devlusoft/devix' {
|
|
|
175
184
|
${i}
|
|
176
185
|
}
|
|
177
186
|
}
|
|
178
|
-
`}function J(e,t){let r=[];for(let i of le(e)){let o
|
|
187
|
+
`}function J(e,t){let r=[];for(let i of le(e)){let o=$(e,i);ue(o).isDirectory()?r.push(...J(o,t)):/\.(ts|tsx)$/.test(i)&&r.push(pe(t,o).replace(/\\/g,"/"))}return r}function A(e,t){let r=$(t,e,"api"),i;try{i=J(r,t)}catch{return[]}return i.filter(o=>!o.endsWith("middleware.ts")&&!o.endsWith("middleware.tsx")).flatMap(o=>{try{let a=ce($(t,o),"utf-8"),u=k(a);return u.length===0?[]:[B(o,`${e}/api`,u)]}catch{return[]}})}import{mkdirSync as de,readFileSync as fe,writeFileSync as ge,existsSync as me}from"node:fs";import{join as G}from"node:path";function C(e,t){let r=G(t,".devix"),i=G(r,"routes.d.ts");return de(r,{recursive:!0}),me(i)&&fe(i,"utf-8")===e?!1:(ge(i,e,"utf-8"),!0)}import{parseSync as Ce}from"oxc-parser";function X({routesPath:e,envPath:t,honoServerPath:r,honoServerStaticPath:i,honoPath:o}){return`
|
|
179
188
|
import { readFileSync } from 'node:fs'
|
|
180
189
|
import { serve } from '${r}'
|
|
181
190
|
import { serveStatic } from '${i}'
|
|
@@ -254,7 +263,7 @@ import { readFileSync } from 'node:fs'
|
|
|
254
263
|
|
|
255
264
|
process.on('SIGTERM', () => server.close())
|
|
256
265
|
process.on('SIGINT', () => server.close())
|
|
257
|
-
`}import{existsSync as z,mkdirSync as xe,readdirSync as
|
|
266
|
+
`}import{existsSync as z,mkdirSync as xe,readdirSync as he,readFileSync as Y,rmSync as ye,statSync as Re,writeFileSync as ve}from"node:fs";import{join as x,relative as Z}from"node:path";import{parseSync as Ee}from"oxc-parser";function K(e,t){let r=[];for(let i of he(e)){let o=x(e,i);Re(o).isDirectory()?r.push(...K(o,t)):/\.(ts|tsx)$/.test(i)&&i!=="layout.tsx"&&i!=="error.tsx"&&r.push(Z(t,o).replace(/\\/g,"/"))}return r}function Pe(e,t){let r=Ee(t,e,{sourceType:"module"});for(let i of r.program.body){if(i.type!=="ExportNamedDeclaration")continue;let o=i.declaration;if(o?.type==="FunctionDeclaration"&&o.id?.name==="loader")return{exists:!0,isAsync:o.async,isReExport:!1};if(o?.type==="VariableDeclaration"){for(let a of o.declarations)if(a.id.type==="Identifier"&&a.id.name==="loader"){let u=a.init;return{exists:!0,isAsync:u?.type==="ArrowFunctionExpression"&&u.async||u?.type==="FunctionExpression"&&u.async,isReExport:!1}}}for(let a of i.specifiers??[])if(a.exported.type==="Identifier"&&a.exported.name==="loader")return{exists:!0,isAsync:!1,isReExport:!0}}return{exists:!1,isAsync:!1,isReExport:!1}}function _e(e,t){return t?`// auto-generado por devix \u2014 no editar
|
|
258
267
|
import type { loader } from "${e}"
|
|
259
268
|
import type { Redirect } from "@devlusoft/devix"
|
|
260
269
|
|
|
@@ -266,5 +275,5 @@ export type PageParams = NonNullable<Parameters<typeof loader>[0]>["params"]
|
|
|
266
275
|
`:`// auto-generado por devix - no editar
|
|
267
276
|
export type PageData = undefined
|
|
268
277
|
export type PageParams = Record<string, string>
|
|
269
|
-
`}function
|
|
278
|
+
`}function b(e,t){let r=x(t,e),i=Y(r,"utf-8"),o=Pe(i,r),a=[];o.exists&&!o.isAsync&&!o.isReExport&&a.push(`[devix] ${e}: 'loader' must be async. Use 'export async function loader' or 'export const loader = async (...) => ...'.`);let u=x(t,".devix","pages",e.replace(/\.(tsx?|jsx?)$/,"")),h=x(u,"$types.d.ts"),S=r.replace(/\.(tsx?|jsx?)$/,""),y=Z(u,S).replace(/\\/g,"/"),T=_e(y,o.exists);return z(h)&&Y(h,"utf-8")===T?{warnings:a}:(xe(u,{recursive:!0}),ve(h,T,"utf-8"),{warnings:a})}function Q(e,t){let r=x(t,".devix","pages",e.replace(/\.(tsx?|jsx?)$/,"")),i=x(r,"$types.d.ts");z(i)&&ye(i)}function I(e,t){let r=x(t,e,"pages"),i=[],o;try{o=K(r,t)}catch{return{warnings:i}}for(let a of o)try{let u=b(a,t);i.push(...u.warnings)}catch{}return{warnings:i}}var P=De(Se(import.meta.url)),M="virtual:devix/entry-client",F="virtual:devix/client-routes",_="virtual:devix/render",w="virtual:devix/api",O="virtual:devix/context",L="virtual:devix/server-entry",ee=new Set(["loader","guard","generateStaticParams","headers"]);function Rt(e){let t=e.appDir??"app",r=`${t}/pages`,i=(e.css??[]).map(s=>s.startsWith("/")?s:`/${s.replace(/^\.\//,"")}`),o=p(P,"../server/render.js").replace(/\\/g,"/"),a=p(P,"../server/api.js").replace(/\\/g,"/"),u=p(P,"../runtime/client-router.js").replace(/\\/g,"/"),h=p(P,"../server/routes.js").replace(/\\/g,"/"),S=p(P,"../utils/env.js").replace(/\\/g,"/"),y=Ae(import.meta.url),T=y.resolve("@hono/node-server").replace(/\\/g,"/"),te=y.resolve("@hono/node-server/serve-static").replace(/\\/g,"/"),re=y.resolve("hono").replace(/\\/g,"/"),ne={name:"devix",enforce:"pre",resolveId(s){if(s===M)return`\0${M}`;if(s===F)return`\0${F}`;if(s===_)return`\0${_}`;if(s===w)return`\0${w}`;if(s===O)return`\0${O}`;if(s===L)return`\0${L}`},load(s){if(s===`\0${M}`)return U({cssUrls:i});if(s===`\0${F}`)return j({pagesDir:r,matcherPath:u});if(s===`\0${_}`)return H({pagesDir:r,renderPath:o});if(s===`\0${w}`)return N({apiPath:a,appDir:t});if(s===`\0${O}`)return W();if(s===`\0${L}`)return X({routesPath:h,envPath:S,honoServerPath:T,honoServerStaticPath:te,honoPath:re})},transform(s,c,R){if(R?.ssr)return;let m=p(process.cwd(),r);if(!c.startsWith(m))return;let v=Ce(c,s,{sourceType:"module"}),g=[];for(let l of v.program.body){if(l.type!=="ExportNamedDeclaration"||!l.declaration)continue;let n=l.declaration;if(n.type==="FunctionDeclaration"&&n.id&&ee.has(n.id.name)&&g.push({start:l.start,end:l.end,name:n.id.name}),n.type==="VariableDeclaration"){let f=new Set;for(let E of n.declarations)E.id.type==="Identifier"&&ee.has(E.id.name)&&(f.has(l.start)||(f.add(l.start),g.push({start:l.start,end:l.end,name:E.id.name})))}}if(g.length===0)return;g.sort((l,n)=>n.start-l.start);let d=s;for(let{start:l,end:n,name:f}of g)d=d.slice(0,l)+`export const ${f} = undefined`+d.slice(n);return{code:d,map:null}},buildStart(){let s=process.cwd(),c=A(t,s);C(D(c,`${t}/api`),s);let{warnings:R}=I(t,s);for(let m of R)console.warn(m)},configureServer(s){let c=process.cwd(),R=I(t,c);for(let n of R.warnings)console.warn(n);let m=()=>{let n=A(t,c);C(D(n,`${t}/api`),c)},v=n=>n.startsWith(p(c,r))&&!n.endsWith("layout.tsx")&&!n.endsWith("error.tsx"),g=n=>$e(c,n).replace(/\\/g,"/"),d=n=>{let f=s.moduleGraph.getModuleById(`\0${n}`);f&&s.moduleGraph.invalidateModule(f)};s.watcher.add(p(c,"devix.config.ts")),s.watcher.on("change",n=>{n===p(c,"devix.config.ts")&&(console.log("[devix] Config changed, restarting..."),process.exit(75))});let l=n=>{try{let{warnings:f}=b(g(n),c);for(let E of f)console.warn(E)}catch{}};s.watcher.on("add",n=>{n.startsWith(p(c,r))&&d(_),v(n)&&l(n),n.includes(`${t}/api`)&&(d(w),m())}),s.watcher.on("unlink",n=>{n.startsWith(p(c,r))&&d(_),v(n)&&Q(g(n),c),n.includes(`${t}/api`)&&(d(w),m())}),s.watcher.on("change",n=>{v(n)&&l(n),n.includes(`${t}/api`)&&!n.endsWith("middleware.ts")&&m()})}},oe={plugins:[Te(),ne],publicDir:p(process.cwd(),e.publicDir??"public"),ssr:{noExternal:["@devlusoft/devix"]},...e.envPrefix?{envPrefix:e.envPrefix}:{}};return we(oe,e.vite??{})}export{Rt as devix};
|
|
270
279
|
//# sourceMappingURL=index.js.map
|