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

monoql

v1.0.2

Published

A code generation toolkit for GraphQL.

Downloads

6

Readme

MonoQL

MonoQL is library that builds over top The Guild's GraphQL Code Generation tool and libraries.

In addition to type generation, it supports in-memory AST transformations, to allow for features like automatic generation of Relay-style connections or schema simplification.

Features

  • GraphQL Codegen Compatibility - MonoQL is designed to work with The Guild's GraphQL Code Generation eco system. This means that you can use any of the available plugins to generate code for your GraphQL server or client.
  • Schema normalization - Performs automatic schema normalization to reduce boilerplate and improve developer experience. Normalization of schema includes:
    • Automatic implementation of missing interface fields for object types.
    • Automatic implementation of missing base definitions for object, interface, enum, union, and input types.
    • Automatic flattening of extension types into base types.
  • Relay Connection Generation - Automatically generates Relay-style connections within your schema using the @connection directive.

Getting Started

Install the monoql command line tool and library:

npm install -D monoql

Add the following to your package.json file:

{
  "scripts": {
    "monoql": "monoql"
  }
}

Create a monoql.config.ts file in the root of your project and call the monoql function with your desired configuration.

Here's an example configuration:

import { monoql, normalizeSchema, relayConnections, writeSchema, generateResolvers, runCodegen } from "monoql";

monoql({
    // the path to your GraphQL schema files
    schema: "./schema/**/*.graphqls",
    // perform code generation
    pipeline: [

        // normalize the schema by flattening extensions, implementing missing interface fields,
        // implementing missing base definitions, and so on
        normalizeSchema(),

        // generate Relay-style connections for all object types that have the @connection directive
        relayConnections(),

        // save the resulting schema to a file location
        writeSchema({
            outputPath: "./schema.gen.graphqls",
        }),

        // preset for generating server types and resolvers for Typescript
        generateResolvers({
            // where should resolver type definitions go?
            resolverTypesOutput: "./src/types/resolvers.gen.ts",
            // what approach should we use for scaffolding out resolvers by default?
            defaultScaffoldMode: "file",
            // where should scaffolded resolvers go?
            resolversOutputDir: "./src/resolvers",
        }),

        // preset for generating client types for Typescript
        generateOperations({
            // where should we save the generated client code?
            outputPath: "./src/lib/graphql.gen.ts",
            // where should we look for the operations and fragments?
            documents: "./src/**/*.graphql",
            // should we automatically remove the "Query" and "Mutation" suffixes
            // from generated operation types if they exist more than once?
            dedupeOperationSuffix: true,
            // default type to use for scalars on the client
            defaultScalarType: "string",
            // use the "import type" syntax for imports
            useTypeImports: true,
            // perform additional code generation to the result using ts-morph
            modifyTsOutput({ sourceFile, ast, documentsAst }) {
              sourceFile.addStatements(`console.log("Hello World!");`);
            },
        }),

        // execute a standard GraphQL Codegen pipeline
        runCodegen({
            // where should we save the generated client code?
            outputPath: "./src/lib/api.gen.ts",
            // where should we look for the operations?
            documents: "./queries/**/*.graphql",
            // plugins to use for code generation
            plugins: [],
            // configuration for the plugins
            config: {},
            // perform additional code generation to the result using ts-morph
            modifyTsOutput(sourceFile) {
                sourceFile.addStatements(`console.log("Hello World!");`);
            },
        }),

    ],
});