npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@newskit-render/core

v4.39.7

Published

Newskit Render - Core package

Downloads

4,357

Readme

@newskit-render/core

А template website built using the React framework Next.js.

This package is used by @newskit-render/create-render-app as a template structure to scaffold the newly created project which the users of @newskit-render/create-render-app can use and modify for their purposes.

Running

To get the data used by the website, you will first need to add a .env.local file with the following keys:

NEWSKIT_API_ENV_URL=""
NEWSKIT_API_X_API_KEY=""
yarn start

or with npm

npm start

Rquired Environment Variables

In order to run the application, we need the following required environment variables.

NEWSKIT_API_ENV_URL=""
NEWSKIT_API_X_API_KEY=""
OKTA_CLIENT_ID=""
OKTA_CLIENT_SECRET=""
OKTA_DOMAIN=""
PUBLISHER=""

Endpoints

GET /api/recommendations - Returns a list on recommendations articles based on the recommendations slug.The recommendations slug is provided be the query param articleId.Also accepts a userId which allows us to fetch personalised recommendations.

Ads Library

Reach out to the Commercial team to discuss the ad slots names and to get a custom ads.min.js file which should be placed in the public directory / or the url to file on their CDN.

More information on the names of the slots can be found here: https://nidigitalsolutions.jira.com/wiki/spaces/COMM/pages/2370339149/Naming+convention+for+Ad+slots

The ad slots should be placed as an id propery of the component.

In order to test ads locally you should enable SourcePoint integration and add a new entry on your host file, e.g. 127.0.0.1 newskit.render.

sudo nano /etc/hosts

After that you will be able to see them on your custom site domain (for example newskit.render:3000) instead of localhost:3000.

3rd Party Integrations supported

If you have enabled integrations during the generation process, make sure to add the following keys in your .env.local file.

SourcePoint

SOURCEPOINT_ACCOUNT_ID=""
SOURCEPOINT_PROPERTY_HREF=""

OptimizelyWeb

EXPERIMENTATION_WEB=""

Tealium

TEALIUM_ACCOUNT_ID=""
TEALIUM_PROFILE_ID=""
TEALIUM_ENV=""

Contract testing

We use Pact to run consumer and provider contract tests.

Contract tests are run against a mocked service. The service address is configurable and runs by default on localhost:4343. If you want to change it just update NEWSKIT_API_ENV_URL in the pact:test script. Keep in mind that if you change the port, you will also need to update jest.config.pact.js with the same port.

You can run the contract tests by executing:

npm run pact:test

In order to publish the contracts from your local machine to the Pact Broker you need to add to the following keys to .env.local

PACT_BROKER_URL=""
PACT_BROKER_TOKEN=""

In order to publish the contracts you need to execute:

npm run pact:publish

Multi-tenant application

A multi-tenant application allows you to run an application from various (sub-)domains and show different content depending on the domain that is used.

This means that the titles would be able to load different brands' content and themes, while running the same application. The codebase will be the same across all brands.

Getting started

How to configure your application for multitenancy

  1. If you want to build a project from scratch, that will have everything from newskit-render, you need to run create-render-app (See Newskit-Render Getting started).

When creating a new project a question whether you'd like your application to be multi tenant will prompt in the terminal.

  1. If you already have a Next application and you want to make it multi-tenant you need to add the following files:

In config folder: config/multiTenancy.ts:

import { sharedTheme, timesTheme } from '@newskit-render/shared-components'
import { Publisher } from '@newskit-render/api'
import { demoStrings, timesStrings } from '../theme/strings'

export const translationsMap = {
  [Publisher.DEMO]: demoStrings,
  [Publisher.TIMES]: timesStrings,
}

export const themesMap = {
  [Publisher.DEMO]: sharedTheme,
  [Publisher.TIMES]: timesTheme,
}
  • translationsMap is used for re-mapping variables like site title, or any other string for each brand. Example:
export const demoStrings = {
    title: 'Demo Site'
}

export const timesStrings = {
    title: 'Times Site'
}
  • themesMap is used for mapping the theme for each brand. Brand names live in the PUBLISHER object

In context folder context/multi-tenancy Add a multi-tenancy context that will keep the current tenant:

import React, { createContext, useContext } from 'react'
import get from 'lodash.get'
import { Publisher } from '@newskit-render/api'
import { translationsMap } from '../../config'

export interface MultiTenancyContextProps {
  tenant?: Publisher
  getTenantString?: (key: string, defaultValue?: string) => string
}

const MultiTenancyContext = createContext<MultiTenancyContextProps>({})

const MultiTenancyProvider: React.FC<MultiTenancyContextProps> = ({
  tenant,
  children,
}) => (
  <MultiTenancyContext.Provider
    value={{
      tenant,
      getTenantString: (key: string, defaultValue: string = ''): string => {
        const data = translationsMap[tenant]
        return get(data, key, defaultValue)
      },
    }}
  >
    {children}
  </MultiTenancyContext.Provider>
)

export const useMultiTenancy = () => useContext(MultiTenancyContext)
export default MultiTenancyProvider

Now you need to update _app.js. To pass the tenant to the app, you need to wrap it in MultitenancyProvide:

interface MyAppProps extends AppProps {
  tenant: Publisher
}

function MyApp({ Component, pageProps, tenant }: MyAppProps) {
  return (
    <MultiTenancyProvider tenant={tenant}>
      <AppContextProvider>
	    ………
      </AppContextProvider>
    </MultiTenancyProvider>
  )
}

export default MyApp

Then call the getTenant() helper function in getInitialProps(). This function extracts the brands' hostname ( domain name ) from the request headers and then we save the tenant in the context provider:

MyApp.getInitialProps = async ({ Component, ctx }: AppContextType) => {
  let pageProps = {}
  const tenant = getTenant(ctx.req?.headers?.host as string)

  if (Component.getInitialProps) {
    pageProps = await Component.getInitialProps(ctx)
  }
  return { pageProps, tenant }
}

How to set the theme for each tenant

You can use the useMultiTenancy hook anywhere in the code to get the current tenant

In context/app-context.js:

const AppContext = React.createContext({
  theme: sharedTheme,
} as AppContextType)

const AppContextProvider = ({ children }: { children: JSX.Element }) => {
  const { tenant } = useMultiTenancy()
  const tenantTheme = themesMap[tenant]
  const [theme, setTheme] = useState(tenantTheme)

  return (
    <AppContext.Provider value={{ theme, setTheme }}>
      {children}
    </AppContext.Provider>
  )
}

export { AppContextProvider, AppContext }

cra-effected comments

You may see some lines of code that have comments next to them:

code here. /* cra-effected */

Or around them:

/* start cra-effected */
code here.
/* end cra-effected */

This comment denotes that the line or lines in between are effected by the running of the @newskit-render/create-render-app package.

If you are touching / modifiying code with these comments you need to be aware that you may affect the successful running of the @newskit-render/create-render-app package