Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
import { isPortFree } from '../deps'
import { Application } from 'express'

// async function listen(graphExpressApp: Application) {
//   process.on('uncaughtException', uncaughtException => {
//     console.log('UNCAUGT_EXCEPTION')
//     console.log(uncaughtException)
//     console.log('\n\n\n')
//   })
//   // process.on('exit', () => )
//   // process.on('SIGTERM')

//   try {
//     const onListen = () =>
//       console.log('[uxui-graphql] listening http://localhost:4000/graphiql')
//     const gqlApp = graphExpressApp.listen(process.env.API_PORT, onListen)
//     // global.gqlApp = gqlApp

//     if (gqlApp.catch) {
//       gqlApp.catch(exception => console.log('GQL_SERVER_EXCEPTION', exception))
//     }

//     console.warn('@james @fixme')
//     global.gqlApp = await gqlApp
//   } catch (FIXMEJAMESEXCEPTION) {
//     console.log({ FIXMEJAMESEXCEPTION })
//   }
// }

function standalone(app, gql) {
  console.log('[uxui-graphql] - auto standalone')
  gql.startStandalone()
  // const graphExpressApp = gql.createApp()
  // listen(graphExpressApp)
}

// function subapp(app, gql) {
//   console.log('[uxui-graphql] - using graphql as subapp')

//   // should not be needed on same origin...
//   // app.options('/graphql', cors(uxuiGraphql.corsOptions))
//   // app.use('/graphql', cors(uxuiGraphql.corsOptions))

//   app.use('/api', gql.proxyMiddleware)

//   app.use('/graphql', gql.cookieMiddleware)
//   app.use('/graphql', gql.graphqlSubApp)
//   app.get('/graphql', gql.graphqlSubApp)
//   app.post('/graphql', gql.graphqlSubApp)
// }

// function graphiql(app, gql) {
//   console.log('[uxui-graphql] - using graphiql for query playground')
//   app.use('/graphiql', gql.graphiqlSubApp)
//   app.get('/graphiql', gql.graphiqlSubApp)
// }

function loadForEnv(app, gql) {
  if (process.env.AUTO_STANDALONE_GRAPHQL) {
    standalone(app, gql)
    return Promise.resolve(gql)
  }
  // if (process.env.SUBAPP_GRAPHQL) {
  //   subapp(app, gql)
  // }
  // if (process.env.GRAPHIQL) {
  //   graphiql(app, gql)
  // }

  return Promise.resolve(gql)
}

async function isFree() {
  try {
    const isNotAlreadyRunningGraphql = process.env.SKIP_API_PORT_CHECK
      ? true
      : await isPortFree(+process.env.API_PORT)
    return isNotAlreadyRunningGraphql
  } catch (listeningException) {
    return true
  }
}
/**
 * @todo
 *
 * @see https://stackoverflow.com/questions/15601703/difference-between-app-use-and-app-get-in-express-js
 */
async function runGraphqlServer(app) {
  const isNotAlreadyRunningGraphql = await isFree()
  if (isNotAlreadyRunningGraphql) {
    console.log('[uxui-graphql] - starting in skreact')
    // const uxuiGraphql = require('skava-graphql/dist/server.js')
    let uxuiGraphql
    try {
      console.log('[uxui-graphql] requiring server.js')
      uxuiGraphql = require('@skava/graphql/dist/server')
    } catch (requireException) {
      console.log('[uxui-graphql] could not require server.js')
      uxuiGraphql = require('@skava/graphql/dist/server')
    }
    return loadForEnv(app, uxuiGraphql)
  } else {
    console.warn('[uxui-graphql] - already running')
    return Promise.resolve(false)
  }
}

export { runGraphqlServer }