Ready to take your JavaScript development to the next level? Meet npm Enterprise - the ultimate in enterprise JavaScript. Learn more »

kentico-cloud-graphql-schema-generator

1.0.2 • Public • Published

Kentico GraphQL schema generator

Build Status npm version npm Maintainability Test Coverage

GraphQL schema generator used to generate schema based on specified project.

This schema could be used when creating GraphQL endpoint from Kentico Cloud Delivery API REST endpoint.

This schema is primarily meant to be used in combination with the Official JavaScript SDK on the top of the Kentico Cloud REST API. If you are using REST API directly, you won't get all elements' properties set, because some of them are set by the JS SDK.

Showcase could be see on apollo express boilerplate.

Get started

Prerequisites

Installation

npm i kentico-cloud-graphql-schema-generator -g

Generating schema with NPM script

Provide a project ID of your project.

Write type definition to the standard output

  • kc-generate-gql-schema --projectId xxx

Generate file with definition exported as a constant fo file config.js

  • kc-generate-gql-schema --projectId xxx --createModule --outputFile "config.js"

Configuration

  • projectId - represents the Kentico Cloud Project Id from which schema will be generated
  • secureAccessKey - Secure access key required to authenticate requests with enabled secure access in Kentico Cloud project
  • outputFile - specifies output file name (possible with the path), if not specified - output is written to standard output
  • createModule - output is defined as a constant and exported as a module (see Example Output)

Development

  1. Clone the repository
  2. Run npm install to install all required dependencies
  3. Run npm run build to build the solution

Run

Run node ./_commonjs/index.js --projectId xxx

Test

  • Run npm test to run all tests

Run watch mode

  • Run npm run watch to run the watch mode

Example output

Without module encapsulation (w/o `createModule`)
type SystemInfo {
  id: String!
  name: String!
  codename: String!
  language: String!
  type: String!
  lastModified: String!
}
interface ContentItem {
  system: SystemInfo!
}
type MultipleChoiceElementOption {
  name: String!
  codename: String
}
type TaxonomyTerm {
  name: String!
  codename: String
}
type Asset {
  name: String
  type: String
  size: Int
  description: String
  url: String,
}
type Link {
  codename: String
  itemID: String
  urlSlug: String
  type: String
}
type TextElement {
  type: String!
  name: String!
  value: String
}
type NumberElement {
  type: String!
  name: String!
  value: String
  number: Int
}
type DateTimeElement {
  type: String!
  name: String!
  value: String
  datetime: String
}
type MultipleChoiceElement {
  type: String!
  name: String!
  value: String
  options: [MultipleChoiceElementOption]
}
type UrlSlugElement {
  type: String!
  name: String!
  value: String
  data: String
}
type TaxonomyElement {
  type: String!
  name: String!
  value: String
  taxonomyGroup: String
  taxonomyTerms: [TaxonomyTerm]
}
type AssetElement {
  type: String!
  name: String!
  value: String
  assets: [Asset]
}
type RichTextElement {
  type: String!
  name: String!
  value: String
  linkedItemCodenames: [String]
  links: [Link]
}

type AboutUsContentType implements ContentItem {
  system: SystemInfo!
  metadata__og_description: TextElement
  metadata__meta_title: TextElement
  metadata__og_title: TextElement
  metadata__meta_description: TextElement
  metadata__twitter_site: TextElement
  url_pattern: UrlSlugElement
  metadata__twitter_image: AssetElement
  metadata__twitter_creator: TextElement
  metadata__twitter_title: TextElement
  metadata__twitter_description: TextElement
  metadata__og_image: AssetElement
  facts: [ContentItem]
}

With module encapsulation
const TYPE_DEFINITION = `type SystemInfo {
  id: String!
  name: String!
  codename: String!
  language: String!
  type: String!
  lastModified: String!
}
interface ContentItem {
  system: SystemInfo!
}
type MultipleChoiceElementOption {
  name: String!
  codename: String
}
type TaxonomyTerm {
  name: String!
  codename: String
}
type Asset {
  name: String
  type: String
  size: Int
  description: String
  url: String,
}
type Link {
  codename: String
  itemID: String
  urlSlug: String
  type: String
}
type TextElement {
  type: String!
  name: String!
  value: String
}
type NumberElement {
  type: String!
  name: String!
  value: String
  number: Int
}
type DateTimeElement {
  type: String!
  name: String!
  value: String
  datetime: String
}
type MultipleChoiceElement {
  type: String!
  name: String!
  value: String
  options: [MultipleChoiceElementOption]
}
type UrlSlugElement {
  type: String!
  name: String!
  value: String
  data: String
}
type TaxonomyElement {
  type: String!
  name: String!
  value: String
  taxonomyGroup: String
  taxonomyTerms: [TaxonomyTerm]
}
type AssetElement {
  type: String!
  name: String!
  value: String
  assets: [Asset]
}
type RichTextElement {
  type: String!
  name: String!
  value: String
  linkedItemCodenames: [String]
  links: [Link]
}

type AboutUsContentType implements ContentItem {
  system: SystemInfo!
  metadata__og_description: TextElement
  metadata__meta_title: TextElement
  metadata__og_title: TextElement
  metadata__meta_description: TextElement
  metadata__twitter_site: TextElement
  url_pattern: UrlSlugElement
  metadata__twitter_image: AssetElement
  metadata__twitter_creator: TextElement
  metadata__twitter_title: TextElement
  metadata__twitter_description: TextElement
  metadata__og_image: AssetElement
  facts: [ContentItem]
}`;

module.exports = {
  TYPE_DEFINITION
}

Analytics

install

npm i kentico-cloud-graphql-schema-generator

Downloadsweekly downloads

27

version

1.0.2

license

MIT

homepage

github.com

repository

Gitgithub

last publish

collaborators

  • avatar
  • avatar
  • avatar
  • avatar
Report a vulnerability