spectaql
Version:
A powerful library for autogenerating static GraphQL API documentation
138 lines (124 loc) • 2.65 kB
JavaScript
;Object.defineProperty(exports, "__esModule", { value: true });exports.hljsFunction = hljsFunction;exports.ourFunction = ourFunction;
function ourFunction(hljs) {
const VARIABLES = {
className: 'code',
begin: '\\$',
end: '\\w+',
excludeEnd: false
};
const TYPES = {
className: 'type',
begin: '[^\\w][A-Z][a-z]',
end: '[!\\W]',
excludeEnd: false
};
const FRAGMENT = {
className: 'type',
begin: /\.\.\./,
end: /Fragment\b/,
excludeEnd: false
};
const ARGS = {
className: 'tag',
begin: /\(/,
end: /\)/,
excludeBegin: false,
excludeEnd: false,
contains: [TYPES, hljs.NUMBER_MODE, VARIABLES]
};
const LITERALS = {
keyword:
'query mutation subscription|10 input schema directive interface union scalar fragment|10 enum on ...',
literal: 'true false null'
};
const FIELD = {
className: 'symbol',
begin: /\w/,
end: /\n/,
keywords: LITERALS,
excludeEnd: true
};
const QUERY = {
className: 'tag',
begin: /{/,
end: /}/,
contains: [FIELD, FRAGMENT],
excludeBegin: false,
excludeEnd: false,
relevance: 0,
illegal: '\\S'
};
FIELD.contains = [ARGS, QUERY];
const INLINE_FRAGMENT = {
className: 'type',
begin: / \.\.\. on /,
end: /\}/,
contains: [QUERY]
};
QUERY.contains.push(INLINE_FRAGMENT);
return {
aliases: ['gql'],
keywords: LITERALS,
contains: [QUERY, FIELD],
illegal: /([;<']|BEGIN)/
};
}
function hljsFunction(hljs) {
const regex = hljs.regex;
const GQL_NAME = /[_A-Za-z][_0-9A-Za-z]*/;
return {
name: 'GraphQL',
aliases: ['gql'],
case_insensitive: true,
disableAutodetect: false,
keywords: {
keyword: [
'query',
'mutation',
'subscription',
'type',
'input',
'schema',
'directive',
'interface',
'union',
'scalar',
'fragment',
'enum',
'on'],
literal: ['true', 'false', 'null']
},
contains: [
hljs.HASH_COMMENT_MODE,
hljs.QUOTE_STRING_MODE,
hljs.NUMBER_MODE,
{
scope: 'punctuation',
match: /[.]{3}/,
relevance: 0
},
{
scope: 'punctuation',
begin: /[!():=[\]{|}]{1}/,
relevance: 0
},
{
scope: 'variable',
begin: /\$/,
end: /\W/,
excludeEnd: true,
relevance: 0
},
{
scope: 'meta',
match: /@\w+/,
excludeEnd: true
},
{
scope: 'symbol',
begin: regex.concat(GQL_NAME, regex.lookahead(/\s*:/)),
relevance: 0
}],
illegal: [/[;<']/, /BEGIN/]
};
}