@closure-next/next
TypeScript icon, indicating that this package has built-in type declarations

1.1.0 • Public • Published

Closure Next Next.js Integration

Server-side rendering support for Closure Next components in Next.js applications.

Installation

npm install @closure-next/next

Usage

Page Wrapper

// pages/index.tsx
import { withClosureNext } from '@closure-next/next';
import { MyComponent } from '../components/MyComponent';

function HomePage() {
  return (
    <div>
      <ClosureComponent
        component={MyComponent}
        props={{
          title: 'Server-rendered component'
        }}
        ssr={true}
      />
    </div>
  );
}

export default withClosureNext(HomePage, {
  ssr: true,
  hydration: 'progressive'
});

Component Usage

// components/MyPage.tsx
import { ClosureComponent } from '@closure-next/next';
import { MyClosureComponent } from './MyClosureComponent';

export function MyPage() {
  return (
    <ClosureComponent
      component={MyClosureComponent}
      props={{
        title: 'SSR Component'
      }}
    />
  );
}

Features

  • 🔌 Plug-and-play integration
  • 🖥️ Server-side rendering
  • 💧 Progressive hydration
  • ⚡️ Client-side fallback
  • 🔄 Automatic cleanup
  • 📦 TypeScript support

API Reference

withClosureNext(PageComponent, options?)

Higher-order component for Next.js pages.

Options

  • ssr: Enable server-side rendering (default: true)
  • hydration: Hydration strategy (default: 'progressive')
    • 'client-only': No SSR, client-side only
    • 'server-first': SSR with client hydration
    • 'progressive': Progressive hydration

ClosureComponent

React component for rendering Closure components.

Props

  • component: Closure component class
  • props: Component props
  • ssr: Enable SSR for this instance (default: true)

renderToString(ComponentClass, props?)

Server-side renderer for Closure components.

hydrateComponent(ComponentClass, element, props?)

Client-side hydration utility.

TypeScript Support

import type { Component } from '@closure-next/core';
import { withClosureNext, ClosureComponent } from '@closure-next/next';

interface MyComponentProps {
  title: string;
}

class MyComponent extends Component {
  // Implementation
}

function MyPage() {
  return (
    <ClosureComponent<MyComponent>
      component={MyComponent}
      props={{
        title: 'Hello' // Type-checked
      }}
    />
  );
}

export default withClosureNext(MyPage);

Server-Side Rendering

Custom Document

// pages/_document.tsx
import { Html, Head, Main, NextScript } from 'next/document';

export default function Document() {
  return (
    <Html>
      <Head />
      <body>
        <Main />
        <NextScript />
      </body>
    </Html>
  );
}

Custom App

// pages/_app.tsx
import type { AppProps } from 'next/app';
import { withClosureNext } from '@closure-next/next';

function MyApp({ Component, pageProps }: AppProps) {
  return <Component {...pageProps} />;
}

export default withClosureNext(MyApp);

Hydration Strategies

Client-only

withClosureNext(Page, {
  ssr: false
});

Server-first

withClosureNext(Page, {
  ssr: true,
  hydration: 'server-first'
});

Progressive

withClosureNext(Page, {
  ssr: true,
  hydration: 'progressive'
});

Development Mode

// next.config.js
import path from 'path';

export default {
  webpack: (config) => {
    // Add Closure Next support
    config.resolve.alias['@closure-next'] = path.resolve(__dirname, 'node_modules/@closure-next');
    return config;
  }
};

Package Sidebar

Install

npm i @closure-next/next

Weekly Downloads

4

Version

1.1.0

License

Apache-2.0

Unpacked Size

82.6 kB

Total Files

9

Last publish

Collaborators

  • milesonerd