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

@hdsydsvenskan/graphql-partials

v0.3.1

Published

Experimental transformer implementing support for partials in GraphQL Schemas

Downloads

13

Readme

GraphQL Partials

Experimental transformer implementing support for partials in GraphQL Schemas.

This module's sole purpose is as an experimental implementation of the concepts brought up in graphql/graphql-js#703. It's not intended as a long term solution by itself, but as an experiment with a possible future extension of the GraphQL Schema itself.

js-semistandard-style

Usage

Command line

npm install -g @hdsydsvenskan/graphql-partials

Then run it to output the transformed schema:

graphql-partials <path-to-schema-with-partials.graphql>

npm script build step

npm install --save-dev @hdsydsvenskan/graphql-partials

Then:

"scripts": {
  "build": "graphql-partials schema-partials.graphql > schema.graphql"
}

Programmatic use

npm install --save @hdsydsvenskan/graphql-partials
const renderSchemaWithPartials = require('@hdsydsvenskan/graphql-partials');

const schemaWithoutPartials = renderSchemaWithPartials('partial abc { ... } type xyz using abc { ... }');

Experimental GraphQL Schema syntax

This transformer provides a way to import field definitions from a defined partial to an interface and/or type, thus complementing interface:s by providing a mechanism to reduce repition of fields while not messing with any existing semantics.

This model is similar to what eg. PHP does with traits, but as GraphQL Schema's interface and type are more similar than interface and class in PHP, the using keyword here applies to both interface and type, allowing field definitions to be imported into both of them.

Syntax

Entity: partial

This transformer introduced a new experimental entity with the name partial. This entity defines a set of fields, similar to what an interface does, and it's sole purpose is to be referenced by the new using keyword.

Keyword: using

Similar to how a type can reference an interface using the implements keyword both a type and an interface can reference a partial through the experimental keyword using that this transformer introduces. Like implements it accepts a comma separated list if one wants to apply multiple partials to the same definition.

The transformer makes no checks whether multiple partials conflicts with each other or whether any partial and the definition of the interface/type itself conflicts with each other. The only check it makes is whether a partial of the stated name actually exists and then it prepends the field definitions of that partial to the field definitions of the interface/type itself.