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

nx-mesh

v4.0.0

Published

GraphQL Mesh support for Nx

Downloads

419

Readme

nx–mesh — GraphQL Mesh support for Nx.

Contents

Features

  • Use GraphQL Mesh to combine multiple APIs into a single GraphQL API.
  • Create a new Nx workspace with a GraphQL Mesh preset.
  • Generate a GraphQL Mesh API Gateway
    • A standalone application for running GraphQL Mesh.
    • Choose from multiple starter templates.
  • Generate a GraphQL Mesh SDK
    • Supports deploying to Vercel as a NextJS route.
    • Choose from multiple starter templates.
  • Supports all GraphQL CLI commands (build, dev, start, validate)
  • Use SWC to compile a GraphQL Mesh SDK
  • Use graphql-codegen to build custom SDKs from GraphQL Mesh.
  • Automatically use the first available port when running dev, start, or serve.
  • Supports NX Cypress plugin

Installing

Using pnpm:

pnpm add -D nx-mesh
npm install -D nx-mesh
yarn add -D nx-mesh

Peer Dependencies

| Name | Version | Required | Auto-installed by generators | | --------------------- | ---------- | :------: | :--------------------------: | | nx | >=15.7.1 | ✅ | - | | @graphql-mesh/cli | >=0.71.0 | ✅ | ✅ | | @graphql-codgen/cli | >=2.16.1 | ✅ | ✅ |

Preset

Create a new Nx workspace with a GraphQL Mesh SDK!

npx create-nx-workspace@latest myorg --preset=nx-mesh

See the sdk generator for available options.

Generators

application

Create a GraphQL Mesh API Gateway application for Nx.

nx generate nx-mesh:application my-api-gateway

# Alias
nx generate nx-mesh:app my-api-gateway
>  NX  Generating nx-mesh:application

CREATE apps/my-api-gateway/.meshrc.yml
CREATE apps/my-api-gateway/tsconfig.app.json
CREATE apps/my-api-gateway/tsconfig.json
CREATE apps/my-api-gateway/project.json
UPDATE workspace.json
CREATE apps/my-api-gateway-e2e/cypress.json
CREATE apps/my-api-gateway-e2e/src/fixtures/example.json
CREATE apps/my-api-gateway-e2e/src/integration/app.spec.ts
CREATE apps/my-api-gateway-e2e/src/support/app.po.ts
CREATE apps/my-api-gateway-e2e/src/support/commands.ts
CREATE apps/my-api-gateway-e2e/src/support/index.ts
CREATE apps/my-api-gateway-e2e/tsconfig.json
CREATE apps/my-api-gateway-e2e/project.json
CREATE apps/my-api-gateway-e2e/.eslintrc.json
CREATE apps/my-api-gateway/jest.config.ts
CREATE apps/my-api-gateway/tsconfig.spec.json
CREATE apps/my-api-gateway/.eslintrc.json

| Name | Alias | Type | Required | Default | Description | | ------------------------- | ----- | -------------------------------------------------------------------------------------------------------- | :------: | ----------- | --------------------------------------------------------------------------------------------------------------------------------- | | name | - | string | ✅ | - | What name would you like to use for the application? | | directory | d | string | - | - | The directory of the new application. | | meshConfig | mc | cjs, js, json, yml | - | yml | Which config format would you like to use? | | example | - | country-info, fake-api, javascript-wiki, movies, rfam, stackexchange, star-wars, trippin | - | star-wars | Which example project would you like to use? | | babelJest | - | boolean | - | false | Use babel instead of ts-jest? | | e2eTestRunner | - | cypress, none | - | cypress | Test runner to use for end to end (E2E) tests. | | linter | - | eslint, tslint | - | eslint | The tool to use for running lint checks | | setParserOptionsProject | - | boolean | - | false | Whether or not to configure the ESLint parserOptions.project option. We do not do this by default for lint performance reasons. | | skipFormat | - | boolean | - | false | Skip formatting files. | | standaloneConfig | - | boolean | - | false | Split the project configuration into <projectRoot>/project.json rather than including it inside workspace.json | | tags | t | string | - | - | Add tags to the application (used for linting). | | unitTestRunner | - | jest, none | - | jest | Test runner to use for unit tests. |

sdk

Create a GraphQL Mesh SDK library for Nx.

nx generate nx-mesh:sdk my-mesh-sdk

# Alias
nx generate nx-mesh:sdk-library my-mesh-sdk
nx generate nx-mesh:library my-mesh-sdk
>  NX  Generating nx-mesh:sdk

CREATE libs/my-mesh-sdk/README.md
CREATE libs/my-mesh-sdk/.babelrc
CREATE libs/my-mesh-sdk/package.json
CREATE libs/my-mesh-sdk/src/index.ts
CREATE libs/my-mesh-sdk/tsconfig.json
CREATE libs/my-mesh-sdk/tsconfig.lib.json
UPDATE tsconfig.base.json
CREATE libs/my-mesh-sdk/project.json
UPDATE workspace.json
CREATE libs/my-mesh-sdk/.eslintrc.json
CREATE libs/my-mesh-sdk/jest.config.ts
CREATE libs/my-mesh-sdk/tsconfig.spec.json
CREATE libs/my-mesh-sdk/.meshrc.yml
CREATE libs/my-mesh-sdk/src/lib/sdk.ts
CREATE libs/my-mesh-sdk/codegen.ts
CREATE libs/my-mesh-sdk/src/lib/client.ts
UPDATE nx.json
>  NX  Generating nx-mesh:sdk

CREATE libs/my-mesh-sdk/README.md
CREATE libs/my-mesh-sdk/package.json
CREATE libs/my-mesh-sdk/src/index.ts
CREATE libs/my-mesh-sdk/tsconfig.json
CREATE libs/my-mesh-sdk/tsconfig.lib.json
UPDATE tsconfig.base.json
CREATE libs/my-mesh-sdk/project.json
UPDATE workspace.json
CREATE libs/my-mesh-sdk/.eslintrc.json
CREATE libs/my-mesh-sdk/jest.config.ts
CREATE libs/my-mesh-sdk/tsconfig.spec.json
CREATE libs/my-mesh-sdk/.swcrc
CREATE libs/my-mesh-sdk/.meshrc.json
CREATE libs/my-mesh-sdk/src/lib/sdk.ts
CREATE libs/my-mesh-sdk/codegen.ts
CREATE libs/my-mesh-sdk/src/lib/client.ts

| Name | Alias | Type | Required | Default | Description | | ------------------------- | ----- | ----------------------------------------------------------- | :------: | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | name | - | string | ✅ | - | What name would you like to use? | | directory | d | string | - | - | The directory of the new sdk. | | meshConfig | mc | cjs, js, json, yml | - | yml | Which config format would you like to use? | | example | - | javascriptWiki, stackexchange, trippin, countryInfo | - | javascript-wiki | Which example project would you like to use? | | codegen | - | boolean | - | true | Use graphql-codegen to generate custom files from the GraphQL Mesh schema. | | babelJest | - | boolean | - | false | Use babel instead of ts-jest. | | compiler | - | tsc, swc | - | tsc | The compiler used by the build and test targets. | | importPath | - | string | - | - | The library name used to import it, like @myorg/my-awesome-lib. Must be a valid npm name. | | js | - | boolean | - | false | Generate JavaScript files rather than TypeScript files. | | linter | - | eslint, tslint | - | eslint | The tool to use for running lint checks.? | | pascalCaseFiles | p | boolean | - | false | Use pascal case file names. | | rootDir | - | string | - | - | Sets the rootDir for TypeScript compilation. When not defined, it uses the project's root property, or srcRootForCompilationRoot if it is defined. | | setParserOptionsProject | - | boolean | - | false | Whether or not to configure the ESLint parserOptions.project option. We do not do this by default for lint performance reasons. | | simpleModuleName | - | boolean | - | false | Keep the module name simple (when using --directory). | | skipFormat | - | boolean | - | false | Skip formatting files. | | skipTsConfig | - | boolean | - | false | Do not update tsconfig.base.json for development experience. | | standaloneConfig | - | boolean | - | false | Split the project configuration into <projectRoot>/project.json rather than including it inside workspace.json | | strict | - | boolean | - | false | Whether to enable tsconfig strict mode or not. | | tags | t | string | - | - | Add tags to the application (used for linting). | | testEnvironment | - | jsdom, none | - | jsdom | The test environment to use if unitTestRunner is set to jest. | | unitTestRunner | - | jest, none | - | jest | Test runner to use for unit tests. |

Executors

build

Builds artifacts for a GraphQL Mesh library.

This is the equivalent of using graphql-mesh dev, but with extra steps for packaging the library.

"targets": {
  "build": {
    "executor": "nx-mesh:build",
    "options": {
      "dir": "libs/example-lib",
      "outputPath": "dist/libs/example-lib",
      "tsConfig": "libs/example-lib/tsconfig.lib.json",
      "main": "libs/example-lib/src/index.ts"
    },
  },
}

| Name | Type | Required | Default | Description | | ----------------------------------------- | ------------------------------------ | :------: | ------------------ | -------------------------------------------------------------------------------------------------------------------------------- | | assets | string[] | - | - | List of static assets. | | buildableProjectDepsInPackageJsonType | dependencies or peerDependencies | - | peerDependencies | When updateBuildableProjectDepsInPackageJson is true, this adds dependencies to either peerDependencies or dependencies. | | codegen | object | - | - | GraphQL Codegen settings | | codegen.config | string | ✅ | - | Path to GraphQL codegen YAML config file, defaults to codegen.yml on the current directory. | | codegen.overwrite | boolean | - | true | Overwrites existing files. | | codegen.profile | boolean | - | false | Use profiler to measure performance. | | codegen.project | string | - | `` | Name of a project in GraphQL Config. | | codegen.require | string[] | - | [] | Loads specific require.extensions before running the codegen and reading the configuration. | | codegen.silent | boolean | - | false | Suppresses printing errors. | | codegen.watch | boolean | - | false | Watch for changes and execute generation automatically. | | debug | boolean | - | false | Display debugging info by applying the DEBUG env variable. | | dir | string | ✅ | - | The path of the directory containing the GraphQL Mesh config. | | fileType | json, ts or js | - | ts | The filetype. | | main | string | ✅ | - | The name of the main entry-point file. | | outputPath | string | ✅ | - | The output path of the generated files. | | require | string[] | - | [] | Loads specific require.extensions before running the codegen and reading the configuration. | | transformers | string[] | - | - | List of TypeScript Transformer Plugins. | | tsConfig | string | ✅ | - | The path to the Typescript configuration file. | | updateBuildableProjectDepsInPackageJson | boolean | - | true | Whether to update the buildable project dependencies in package.json. | | watch | boolean | - | false | Rebuild upon file changes. |

build-gateway

Builds artifacts for a GraphQL Mesh API Gateway app.

This is the equivalent of using graphql-mesh build, but with extra steps for compiling an app.

"targets": {
  "build": {
    "executor": "nx-mesh:build-gateway",
    "options": {
      "dir": "apps/example-app",
      "outputPath": "dist/apps/example-app"
    },
  },
}

| Name | Type | Required | Default | Description | | ---------- | -------------------- | :------: | ------- | ------------------------------------------------------------------------------------------- | | debug | boolean | - | false | Display debugging info by applying the DEBUG env variable. | | dir | string | ✅ | - | The path of the directory containing the GraphQL Mesh config. | | fileType | json, ts or js | - | ts | The filetype. | | require | string[] | - | [] | Loads specific require.extensions before running the codegen and reading the configuration. |

build-swc

Builds artifacts for a GraphQL Mesh library.

This is the equivalent of using graphql-mesh build, but with extra steps for packaging the library with SWC.

"targets": {
  "build": {
    "executor": "nx-mesh:build-swc",
    "options": {
      "dir": "libs/example-lib",
      "outputPath": "dist/libs/example-lib",
      "tsConfig": "libs/example-lib/tsconfig.lib.json",
      "main": "libs/example-lib/src/index.ts"
    },
  },
}

| Name | Type | Required | Default | Description | | ----------------------------------------- | ------------------------------------ | :------: | ------------------ | -------------------------------------------------------------------------------------------------------------------------------- | | assets | string[] | - | - | List of static assets. | | buildableProjectDepsInPackageJsonType | dependencies or peerDependencies | - | peerDependencies | When updateBuildableProjectDepsInPackageJson is true, this adds dependencies to either peerDependencies or dependencies. | | codegen | object | - | - | GraphQL Codegen settings | | codegen.config | string | ✅ | - | Path to GraphQL codegen YAML config file, defaults to codegen.yml on the current directory. | | codegen.overwrite | boolean | - | true | Overwrites existing files. | | codegen.profile | boolean | - | false | Use profiler to measure performance. | | codegen.project | string | - | `` | Name of a project in GraphQL Config. | | codegen.require | string[] | - | [] | Loads specific require.extensions before running the codegen and reading the configuration. | | codegen.silent | boolean | - | false | Suppresses printing errors. | | codegen.watch | boolean | - | false | Watch for changes and execute generation automatically. | | debug | boolean | - | false | Display debugging info by applying the DEBUG env variable. | | dir | string | ✅ | - | The path of the directory containing the GraphQL Mesh config. | | fileType | json, ts or js | - | ts | The filetype. | | main | string | ✅ | - | The name of the main entry-point file. | | outputPath | string | ✅ | - | The output path of the generated files. | | require | string[] | - | [] | Loads specific require.extensions before running the codegen and reading the configuration. | | skipTypeCheck | boolean | - | false | Whether to skip TypeScript type checking. | | swcrc | string | - | .swcrc | The path to the SWC configuration file. | | transformers | string[] | - | - | List of TypeScript Transformer Plugins. | | tsConfig | string | ✅ | - | The path to the Typescript configuration file. | | updateBuildableProjectDepsInPackageJson | boolean | - | true | Whether to update the buildable project dependencies in package.json. | | watch | boolean | - | false | Rebuild upon file changes. |

dev

Serves a GraphQL server with a GraphQL interface by building artifacts on the fly.

This is the equivalent of using graphql-mesh dev.

"targets": {
  "dev": {
    "executor": "nx-mesh:dev",
    "options": {
      "dir": "path/to/app/or/lib",
    },
  },
}

| Name | Type | Required | Default | Description | | ----------------- | -------------- | :------: | ----------- | -------------------------------------------------------------------------------------------------- | | debug | boolean | - | false | Display debugging info by applying the DEBUG env variable. | | dir | string | ✅ | - | The path of the directory containing the GraphQL Mesh config. | | port | object | - | - | Port selection settings | | port.auto | boolean | - | true | Use the first available port | | port.number | number | - | 4200 | Define the preferred port to use when auto is set to false | | port.range | object | - | - | The range of ports to select from. | | port.range.from | number | - | - | The first port of the range. Must be in the range 1024...65535 | | port.range.to | number | - | - | The last port of the range. Must be in the range 1024...65535 and must be greater than from. | | port.fallback | auto, none | - | auto | The fallback strategy to use when the preferred port is unavailable. | | port.host | string | - | localhost | The host to listen on (only used for port number lookup). | | require | string[] | - | [] | Loads specific require.extensions before running the codegen and reading the configuration. |

start

Serves a GraphQL server with a GraphQL interface based on your generated artifacts.

This is the equivalent of using graphql-mesh start.

"targets": {
  "start": {
    "executor": "nx-mesh:start",
    "options": {
      "dir": "path/to/app/or/lib",
    },
  },
}

| Name | Type | Required | Default | Description | | ----------------- | -------------- | :------: | ----------- | -------------------------------------------------------------------------------------------------- | | debug | boolean | - | false | Display debugging info by applying the DEBUG env variable. | | dir | string | ✅ | - | The path of the directory containing the GraphQL Mesh config. | | port | object | - | - | Port selection settings | | port.auto | boolean | - | true | Use the first available port | | port.number | number | - | 4200 | Define the preferred port to use when auto is set to false | | port.range | object | - | - | The range of ports to select from. | | port.range.from | number | - | - | The first port of the range. Must be in the range 1024...65535 | | port.range.to | number | - | - | The last port of the range. Must be in the range 1024...65535 and must be greater than from. | | port.fallback | auto, none | - | auto | The fallback strategy to use when the preferred port is unavailable. | | port.host | string | - | localhost | The host to listen on (only used for port number lookup). | | require | string[] | - | [] | Loads specific require.extensions before running the codegen and reading the configuration. |

serve

Serves a GraphQL server.

This combines dev & start via a dev option toggle.

"targets": {
  "serve": {
    "executor": "nx-mesh:serve",
    "options": {
      "dir": "path/to/app/or/lib",
      "dev": true,
    },
    "configuration": {
      "production": {
        "dev": false,
      }
    }
  },
}

| Name | Type | Required | Default | Description | | ----------------- | -------------- | :------: | ----------- | -------------------------------------------------------------------------------------------------- | | debug | boolean | - | false | Display debugging info by applying the DEBUG env variable. | | dev | string | - | false | Run the server in dev or production mode. | | dir | string | ✅ | - | The path of the directory containing the GraphQL Mesh config. | | port | object | - | - | Port selection settings | | port.auto | boolean | - | true | Use the first available port | | port.number | number | - | 4200 | Define the preferred port to use when auto is set to false | | port.range | object | - | - | The range of ports to select from. | | port.range.from | number | - | - | The first port of the range. Must be in the range 1024...65535 | | port.range.to | number | - | - | The last port of the range. Must be in the range 1024...65535 and must be greater than from. | | port.fallback | auto, none | - | auto | The fallback strategy to use when the preferred port is unavailable. | | port.host | string | - | localhost | The host to listen on (only used for port number lookup). | | require | string[] | - | [] | Loads specific require.extensions before running the codegen and reading the configuration. |

validate

Validates artifacts.

This is the equivalent of using graphql-mesh validate.

"targets": {
  "validate": {
    "executor": "nx-mesh:validate",
    "options": {
      "dir": "path/to/app/or/lib",
    },
  },
}

| Name | Type | Required | Default | Description | | --------- | ---------- | :------: | ------- | ------------------------------------------------------------------------------------------- | | debug | boolean | - | false | Display debugging info by applying the DEBUG env variable. | | dir | string | ✅ | - | The path of the directory containing the GraphQL Mesh config. | | require | string[] | - | [] | Loads specific require.extensions before running the codegen and reading the configuration. |

Examples

| Name | Type | Source Handler | Config | Notes | | ---------------------------------------------------------------------------------------------------------------- | ------- | -------------- | ------ | -------------------------------------------------------------------------------------------------- | | country-info | sdk | soap | cjs | - | | fake-api | sdk | json-schema | yml | - | | javascript-wiki | gateway | openapi | json | - | | javascript-wiki | sdk | openapi | yml | - | | movies | sdk | neo4j | yml | - | | nextjs with sdks | - | - | - | Deployed to Vercel | | rfam | sdk | mysql | yml | - | | stackexchange | sdk | openapi | json | - | | star-wars | sdk | graphql | yml | - | | trippin | sdk | odata | js | API Key documentation |

Compatibility

| nx-mesh | Nx | | --------- | --------- | | ^4.0.0 | ^15.7.1 | | ^3.0.0 | ^15.4.0 |

Credits

This plugin wouldn't be possible without the projects from these great teams:

Please show them your support! ❤️