graphile-settings
Version:
graphile settings
108 lines (107 loc) • 3.62 kB
JavaScript
import PgManyToMany from '@graphile-contrib/pg-many-to-many';
import { getEnvOptions } from '@launchql/env';
import PgPostgis from '@pyramation/postgis';
// @ts-ignore
import FulltextFilterPlugin from '@pyramation/postgraphile-plugin-fulltext-filter';
import { NodePlugin } from 'graphile-build';
import { additionalGraphQLContextFromRequest as langAdditional, LangPlugin,
// @ts-ignore
} from 'graphile-i18n';
// @ts-ignore
import PgMetaschema from 'graphile-meta-schema';
// @ts-ignore
import PgSearch from 'graphile-search-plugin';
// @ts-ignore
import PgSimpleInflector from 'graphile-simple-inflector';
import ConnectionFilterPlugin from 'postgraphile-plugin-connection-filter';
// @ts-ignore
import PgPostgisFilter from 'postgraphile-plugin-connection-filter-postgis';
import LqlTypesPlugin from './plugins/types';
import UploadPostGraphilePlugin from './plugins/upload-postgraphile-plugin';
import { Uploader } from './resolvers/upload';
export const getGraphileSettings = (rawOpts) => {
const opts = getEnvOptions(rawOpts);
const { server, graphile, features, cdn } = opts;
// Instantiate uploader with merged cdn opts
const uploader = new Uploader({
bucketName: cdn.bucketName,
awsRegion: cdn.awsRegion,
awsAccessKey: cdn.awsAccessKey,
awsSecretKey: cdn.awsSecretKey,
minioEndpoint: cdn.minioEndpoint,
});
const resolveUpload = uploader.resolveUpload.bind(uploader);
const plugins = [
ConnectionFilterPlugin,
FulltextFilterPlugin,
LqlTypesPlugin,
UploadPostGraphilePlugin,
PgMetaschema,
PgManyToMany,
PgSearch,
];
if (features?.postgis) {
plugins.push(PgPostgis, PgPostgisFilter);
}
if (features?.simpleInflection) {
plugins.push(PgSimpleInflector);
}
plugins.push(LangPlugin);
return {
graphileBuildOptions: {
uploadFieldDefinitions: [
{
name: 'upload',
namespaceName: 'public',
type: 'JSON',
resolve: resolveUpload,
},
{
name: 'attachment',
namespaceName: 'public',
type: 'String',
resolve: resolveUpload,
},
{
name: 'image',
namespaceName: 'public',
type: 'JSON',
resolve: resolveUpload,
},
{
tag: 'upload',
resolve: resolveUpload,
},
],
pgSimplifyOppositeBaseNames: features?.oppositeBaseNames,
connectionFilterComputedColumns: false,
},
appendPlugins: plugins,
skipPlugins: [NodePlugin],
dynamicJson: true,
disableGraphiql: false,
enhanceGraphiql: true,
enableQueryBatching: true,
graphiql: true,
watch: false,
port: server?.port,
host: server?.host,
schema: graphile?.schema,
ignoreRBAC: false,
legacyRelations: 'omit',
showErrorStack: false,
// @ts-ignore
extendedErrors: false,
disableQueryLog: false,
includeExtensionResources: true,
setofFunctionsContainNulls: false,
retryOnInitFail: async (_error) => {
return false;
},
additionalGraphQLContextFromRequest: (req, res) => ({
...langAdditional(req, res),
req,
res,
}),
};
};