mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
5ff7c0742c
* Lint examples/with-apollo-and-redux-saga * Lint examples/with-apollo-auth * Lint examples/with-apollo * Lint exampels/with-google-analytics * Lint examples/with-higher-order-component * Lint examples/with-react-i18next * Lint exampels/with-redux * Lint exampels/with-relay-modern * Lint examples/with-universal-configuration-runtime * Add **/examples/**/lib/** to linter
51 lines
1.3 KiB
JavaScript
51 lines
1.3 KiB
JavaScript
import { Environment, Network, RecordSource, Store } from 'relay-runtime'
|
|
import fetch from 'isomorphic-unfetch'
|
|
|
|
let relayEnvironment = null
|
|
|
|
// Define a function that fetches the results of an operation (query/mutation/etc)
|
|
// and returns its results as a Promise:
|
|
function fetchQuery (
|
|
operation,
|
|
variables,
|
|
cacheConfig,
|
|
uploadables
|
|
) {
|
|
return fetch(process.env.RELAY_ENDPOINT, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Accept': 'application/json',
|
|
'Content-Type': 'application/json'
|
|
}, // Add authentication and other headers here
|
|
body: JSON.stringify({
|
|
query: operation.text, // GraphQL text from input
|
|
variables
|
|
})
|
|
}).then(response => response.json())
|
|
}
|
|
|
|
export default function initEnvironment ({ records = {} } = {}) {
|
|
// Create a network layer from the fetch function
|
|
const network = Network.create(fetchQuery)
|
|
const store = new Store(new RecordSource(records))
|
|
|
|
// Make sure to create a new Relay environment for every server-side request so that data
|
|
// isn't shared between connections (which would be bad)
|
|
if (!process.browser) {
|
|
return new Environment({
|
|
network,
|
|
store
|
|
})
|
|
}
|
|
|
|
// reuse Relay environment on client-side
|
|
if (!relayEnvironment) {
|
|
relayEnvironment = new Environment({
|
|
network,
|
|
store
|
|
})
|
|
}
|
|
|
|
return relayEnvironment
|
|
}
|