effex-monorepo
    Preparing search index...

    Variable PlatformConst

    Platform: {
        buildStaticSite: (options: BuildStaticSiteOptions) => Promise<void>;
        generateDocument: (
            html: string,
            loaderData: Record<string, unknown>,
            options?: DocumentOptions,
        ) => string;
        generateLoaderDataScript: (loaderData: Record<string, unknown>) => string;
        makeClientLayer: <
            P extends Record<string, unknown>,
            S extends Record<string, unknown>,
            D,
            E,
            R,
        >(
            router: Router<P, S, D, E, R>,
        ) => Layer<NavigationContext | RouteDataProvider, never, never>;
        serializeForHtml: (data: unknown) => string;
        toHttpRoutes: <
            P extends Record<string, unknown>,
            S extends Record<string, unknown>,
            D,
            R,
        >(
            router: Router<P, S, D, never, R>,
            options?: ToHttpRoutesOptions,
        ) => HttpRouter<
            RedirectError
            | RouteNotFound,
            Exclude<
                R,
                | Scope
                | RendererContext
                | SuspenseBoundaryCtx
                | ControlCtx
                | NavigationContext
                | RouteDataContext
                | RouteDataProvider,
            >,
        >;
    } = ...

    Platform utilities namespace.

    Type Declaration

    • buildStaticSite: (options: BuildStaticSiteOptions) => Promise<void>

      Build a static site from a router's Route.static routes.

      Enumerates all static routes, runs their loaders, renders to HTML, and writes the output to outDir.

      await Platform.buildStaticSite({
      router,
      app: App,
      document: {
      title: "My Docs",
      scripts: ["/assets/client.js"],
      styles: ["/assets/styles.css"],
      },
      outDir: "dist",
      layers: Layer.mergeAll(FileSystemLive, MarkdownServiceLive),
      });
    • generateDocument: (
          html: string,
          loaderData: Record<string, unknown>,
          options?: DocumentOptions,
      ) => string

      Generate a full HTML document wrapping rendered content.

    • generateLoaderDataScript: (loaderData: Record<string, unknown>) => string

      Generate the script tag for embedding loader data

    • makeClientLayer: <P extends Record<string, unknown>, S extends Record<string, unknown>, D, E, R>(
          router: Router<P, S, D, E, R>,
      ) => Layer<NavigationContext | RouteDataProvider, never, never>

      Create a client-side Layer that provides NavigationContext and RouteDataProvider.

      On the first call (hydration), reads data from window.__EFFEX_DATA__. On subsequent calls (client-side navigation), fetches from the server via ?_data=1.

      import { hydrate } from "@effex/dom"
      import { Platform } from "@effex/platform"
      import { router } from "./routes"

      const program = Effect.gen(function* () {
      yield* hydrate(App(), document.getElementById("root")!, {
      layer: Platform.makeClientLayer(router),
      })
      })

      Effect.runPromise(Effect.scoped(program))
    • serializeForHtml: (data: unknown) => string

      Serialize data for embedding in HTML (escapes script-breaking characters)

    • toHttpRoutes: <P extends Record<string, unknown>, S extends Record<string, unknown>, D, R>(
          router: Router<P, S, D, never, R>,
          options?: ToHttpRoutesOptions,
      ) => HttpRouter<
          RedirectError
          | RouteNotFound,
          Exclude<
              R,
              | Scope
              | RendererContext
              | SuspenseBoundaryCtx
              | ControlCtx
              | NavigationContext
              | RouteDataContext
              | RouteDataProvider,
          >,
      >

      Convert an Effex Router into an @effect/platform HttpRouter.

      For each route in the Effex Router, registers method-specific handlers:

      • GET: Runs the route's loader (if any), provides data via RouteDataContext, SSR renders the component. If ?_data=1, returns data as JSON.
      • POST/PUT/DELETE: Looks up the handler by ?_action=key, executes it directly with the parsed request body. No component rendering.

      Redirect errors are caught and converted to HTTP redirect responses.