UNPKG

chimp

Version:

Your development companion for doing quality, faster.

90 lines (78 loc) 2.65 kB
const fs = require('fs'); const { pascalCase } = require('pascal-case'); const { isObjectType, Source, buildSchema } = require('graphql'); let schemaString = fs .readFileSync(`${process.env.PROJECT_PATH}/schema.graphql`) .toString() .replace(/extend type/g, `type`); schemaString = `${schemaString} ## Federation Types scalar _FieldSet directive @external on FIELD_DEFINITION directive @requires(fields: _FieldSet!) on FIELD_DEFINITION directive @provides(fields: _FieldSet!) on FIELD_DEFINITION directive @key(fields: _FieldSet!) on OBJECT | INTERFACE directive @extends on OBJECT scalar Upload ` .replace('@entity(embedded: Boolean)', '@entity(embedded: Boolean, additionalFields: [AdditionalEntityFields])') .replace( '@union(discriminatorField: String)', '@union(discriminatorField: String, additionalFields: [AdditionalEntityFields])', ) .replace('@chimp(embedded: Boolean)', '@chimp(embedded: Boolean, additionalFields: [AdditionalEntityFields])'); const source = new Source(schemaString); const schema = buildSchema(source, { assumeValidSDL: true }); const typeMap = schema.getTypeMap(); const getConfig = (type) => (type.toConfig ? type.toConfig().astNode : type.astNode); const mappers = {}; for (const typeName in typeMap) { const type = schema.getType(typeName); if (isObjectType(type)) { if (getConfig(type)) { if (!['Query', 'Mutation', 'Subscription'].includes(getConfig(type).name.value)) { mappers[typeName] = `${pascalCase(typeName)}DbObject`; } } } } module.exports = function ({ contextType } = {}) { return { overwrite: true, schema: schemaString, generates: { [`${process.env.PROJECT_PATH}/generated/graphql/types.ts`]: { config: { contextType: contextType || `${process.env.APP_PREFIX}/context#GqlContext`, idFieldName: 'id', objectIdType: 'string', federation: true, mappers, makeResolverTypeCallable: true, scalars: { Upload: 'Promise<GraphQLFileUpload>', }, }, plugins: [ 'typescript', 'typescript-resolvers', 'typescript-operations', 'chimp-graphql-codegen-plugin', { add: { content: 'export {GqlContext};' } }, { add: { content: ` import { ReadStream } from "fs-capacitor"; interface GraphQLFileUpload { filename: string; mimetype: string; encoding: string; createReadStream(options?:{encoding?: string, highWaterMark?: number}): ReadStream; }`, }, }, ], }, }, }; };