graphql-js-tree
Advanced tools
Comparing version 0.1.6 to 0.1.7
@@ -5,2 +5,3 @@ import { Directive, OperationType, FieldType } from "./Spec"; | ||
name: string; | ||
id: string; | ||
type: { | ||
@@ -7,0 +8,0 @@ fieldType: FieldType; |
@@ -23,2 +23,3 @@ "use strict"; | ||
const ParserUtils_1 = require("./ParserUtils"); | ||
const shared_1 = require("../shared"); | ||
class Parser { | ||
@@ -41,2 +42,3 @@ static findComments(schema) { | ||
if ((0, graphql_1.isTypeSystemDefinitionNode)(d) || (0, graphql_1.isTypeSystemExtensionNode)(d)) { | ||
const args = typeResolver_1.TypeResolver.resolveFieldsFromDefinition(d); | ||
if ('name' in d) { | ||
@@ -52,3 +54,3 @@ return Object.assign(Object.assign({ name: d.name.value, type: d.kind === 'DirectiveDefinition' | ||
type: d.kind, | ||
} }, ('description' in d && ((_a = d.description) === null || _a === void 0 ? void 0 : _a.value) ? { description: d.description.value } : {})), { interfaces: 'interfaces' in d && d.interfaces ? d.interfaces.map((i) => i.name.value) : [], directives: 'directives' in d && d.directives ? typeResolver_1.TypeResolver.iterateDirectives(d.directives) : [], args: typeResolver_1.TypeResolver.resolveFieldsFromDefinition(d) }); | ||
} }, ('description' in d && ((_a = d.description) === null || _a === void 0 ? void 0 : _a.value) ? { description: d.description.value } : {})), { interfaces: 'interfaces' in d && d.interfaces ? d.interfaces.map((i) => i.name.value) : [], directives: 'directives' in d && d.directives ? typeResolver_1.TypeResolver.iterateDirectives(d.directives) : [], args, id: (0, shared_1.generateNodeId)(d.name.value, d.kind, args) }); | ||
} | ||
@@ -91,3 +93,3 @@ } | ||
.filter((d) => !!d); | ||
const comments = Parser.findComments(schema).map((description) => ({ | ||
const comments = Parser.findComments(schema).map((description) => (0, shared_1.createParserField)({ | ||
name: Spec_1.Helpers.Comment, | ||
@@ -100,5 +102,2 @@ type: { | ||
}, | ||
args: [], | ||
directives: [], | ||
interfaces: [], | ||
data: { | ||
@@ -105,0 +104,0 @@ type: Spec_1.Helpers.Comment, |
@@ -6,2 +6,3 @@ "use strict"; | ||
const Spec_1 = require("../Models/Spec"); | ||
const shared_1 = require("../shared"); | ||
class TypeResolver { | ||
@@ -27,7 +28,11 @@ static resolveSingleFieldType(n) { | ||
static iterateObjectTypeFields(fields) { | ||
return fields.map((n) => (Object.assign(Object.assign({ name: n.name.value }, (n.description ? { description: n.description.value } : {})), { args: n.arguments ? TypeResolver.iterateInputValueFields(n.arguments) : [], type: { fieldType: TypeResolver.resolveSingleFieldType(n.type) }, directives: n.directives ? TypeResolver.iterateDirectives(n.directives) : [], interfaces: [], data: { | ||
type: Spec_1.TypeSystemDefinition.FieldDefinition, | ||
} }))); | ||
return fields.map((n) => { | ||
const args = n.arguments ? TypeResolver.iterateInputValueFields(n.arguments) : []; | ||
return Object.assign(Object.assign({ name: n.name.value }, (n.description ? { description: n.description.value } : {})), { args, type: { fieldType: TypeResolver.resolveSingleFieldType(n.type) }, directives: n.directives ? TypeResolver.iterateDirectives(n.directives) : [], interfaces: [], data: { | ||
type: Spec_1.TypeSystemDefinition.FieldDefinition, | ||
}, id: (0, shared_1.generateNodeId)(n.name.value, Spec_1.TypeSystemDefinition.FieldDefinition, args) }); | ||
}); | ||
} | ||
static resolveObjectField(f) { | ||
const args = TypeResolver.resolveValue(f.value); | ||
return [ | ||
@@ -44,3 +49,4 @@ { | ||
directives: [], | ||
args: TypeResolver.resolveValue(f.value), | ||
args, | ||
id: (0, shared_1.generateNodeId)(f.name.value, Spec_1.Instances.Argument, args), | ||
}, | ||
@@ -51,2 +57,3 @@ ]; | ||
if (value.kind === 'ListValue') { | ||
const args = value.values.map((f) => TypeResolver.resolveValue(f)).reduce((a, b) => [...a, ...b], []); | ||
return [ | ||
@@ -57,3 +64,3 @@ { | ||
interfaces: [], | ||
args: value.values.map((f) => TypeResolver.resolveValue(f)).reduce((a, b) => [...a, ...b], []), | ||
args, | ||
data: { | ||
@@ -68,2 +75,3 @@ type: value.kind, | ||
}, | ||
id: (0, shared_1.generateNodeId)(value.kind, value.kind, args), | ||
}, | ||
@@ -73,8 +81,9 @@ ]; | ||
if (value.kind === 'ObjectValue') { | ||
const args = value.fields.map((f) => TypeResolver.resolveObjectField(f)).reduce((a, b) => [...a, ...b], []); | ||
return [ | ||
{ | ||
args, | ||
name: value.kind, | ||
directives: [], | ||
interfaces: [], | ||
args: value.fields.map((f) => TypeResolver.resolveObjectField(f)).reduce((a, b) => [...a, ...b], []), | ||
data: { | ||
@@ -89,2 +98,3 @@ type: value.kind, | ||
}, | ||
id: (0, shared_1.generateNodeId)(value.kind, value.kind, args), | ||
}, | ||
@@ -109,2 +119,3 @@ ]; | ||
}, | ||
id: (0, shared_1.generateNodeId)(value.value, value.kind, []), | ||
}, | ||
@@ -114,5 +125,6 @@ ]; | ||
if (value.kind in Spec_1.Value) { | ||
const name = 'value' in value ? value.value.toString() : 'name' in value ? value.name.value : ''; | ||
return [ | ||
{ | ||
name: 'value' in value ? value.value.toString() : 'name' in value ? value.name.value : '', | ||
name, | ||
type: { | ||
@@ -130,2 +142,3 @@ fieldType: { | ||
}, | ||
id: (0, shared_1.generateNodeId)(name, value.kind, []), | ||
}, | ||
@@ -137,36 +150,47 @@ ]; | ||
static iterateDirectives(directives) { | ||
return directives.map((n) => ({ | ||
name: n.name.value, | ||
type: { | ||
fieldType: { | ||
name: n.name.value, | ||
type: Models_1.Options.name, | ||
return directives.map((n) => { | ||
const args = n.arguments ? TypeResolver.iterateArgumentFields(n.arguments) : []; | ||
return { | ||
name: n.name.value, | ||
type: { | ||
fieldType: { | ||
name: n.name.value, | ||
type: Models_1.Options.name, | ||
}, | ||
}, | ||
}, | ||
directives: [], | ||
interfaces: [], | ||
data: { | ||
type: Spec_1.Instances.Directive, | ||
}, | ||
args: n.arguments ? TypeResolver.iterateArgumentFields(n.arguments) : [], | ||
})); | ||
directives: [], | ||
interfaces: [], | ||
data: { | ||
type: Spec_1.Instances.Directive, | ||
}, | ||
args, | ||
id: (0, shared_1.generateNodeId)(n.name.value, Spec_1.Instances.Directive, args), | ||
}; | ||
}); | ||
} | ||
static iterateArgumentFields(fields) { | ||
return fields.map((n) => ({ | ||
name: n.name.value, | ||
type: { | ||
fieldType: TypeResolver.resolveInputValueOptions(n.value, n.name.value), | ||
}, | ||
data: { | ||
type: Spec_1.Instances.Argument, | ||
}, | ||
args: TypeResolver.resolveValue(n.value), | ||
directives: [], | ||
interfaces: [], | ||
})); | ||
return fields.map((n) => { | ||
const args = TypeResolver.resolveValue(n.value); | ||
return { | ||
name: n.name.value, | ||
type: { | ||
fieldType: TypeResolver.resolveInputValueOptions(n.value, n.name.value), | ||
}, | ||
data: { | ||
type: Spec_1.Instances.Argument, | ||
}, | ||
directives: [], | ||
interfaces: [], | ||
args, | ||
id: (0, shared_1.generateNodeId)(n.name.value, Spec_1.Instances.Argument, args), | ||
}; | ||
}); | ||
} | ||
static iterateInputValueFields(fields) { | ||
return fields.map((n) => (Object.assign(Object.assign({ name: n.name.value }, (n.description ? { description: n.description.value } : {})), { directives: n.directives ? TypeResolver.iterateDirectives(n.directives) : [], type: { fieldType: TypeResolver.resolveSingleFieldType(n.type) }, data: { | ||
type: Spec_1.ValueDefinition.InputValueDefinition, | ||
}, interfaces: [], args: n.defaultValue ? TypeResolver.resolveValue(n.defaultValue) : [] }))); | ||
return fields.map((n) => { | ||
const args = n.defaultValue ? TypeResolver.resolveValue(n.defaultValue) : []; | ||
return Object.assign(Object.assign({ name: n.name.value }, (n.description ? { description: n.description.value } : {})), { directives: n.directives ? TypeResolver.iterateDirectives(n.directives) : [], type: { fieldType: TypeResolver.resolveSingleFieldType(n.type) }, data: { | ||
type: Spec_1.ValueDefinition.InputValueDefinition, | ||
}, args, interfaces: [], id: (0, shared_1.generateNodeId)(n.name.value, Spec_1.ValueDefinition.InputValueDefinition, args) }); | ||
}); | ||
} | ||
@@ -186,3 +210,3 @@ static resolveInterfaces(n) { | ||
type: Spec_1.ValueDefinition.EnumValueDefinition, | ||
} }))); | ||
}, id: (0, shared_1.generateNodeId)(v.name.value, Spec_1.ValueDefinition.EnumValueDefinition, []) }))); | ||
} | ||
@@ -205,2 +229,3 @@ if (n.kind === 'ScalarTypeDefinition') { | ||
}, | ||
id: (0, shared_1.generateNodeId)(t.name.value, Spec_1.TypeSystemDefinition.UnionMemberDefinition, []), | ||
})); | ||
@@ -225,3 +250,3 @@ } | ||
type: Spec_1.ValueDefinition.EnumValueDefinition, | ||
} }))); | ||
}, id: (0, shared_1.generateNodeId)(v.name.value, Spec_1.ValueDefinition.EnumValueDefinition, []) }))); | ||
} | ||
@@ -238,2 +263,3 @@ if ('types' in n && n.types) { | ||
}, | ||
id: (0, shared_1.generateNodeId)(t.name.value, Spec_1.TypeSystemDefinition.UnionMemberDefinition, []), | ||
})); | ||
@@ -240,0 +266,0 @@ } |
@@ -1,4 +0,9 @@ | ||
import { FieldType } from "../Models"; | ||
import { AllTypes, FieldType, ParserField } from "../Models"; | ||
export declare const getTypeName: (f: FieldType) => string; | ||
export declare const compileType: (f: FieldType) => string; | ||
export declare const decompileType: (typeName: string) => FieldType; | ||
export declare const generateNodeId: (name: string, dataType: AllTypes, args: ParserField[]) => string; | ||
declare type NodeCreation = Pick<ParserField, 'data' | 'name' | 'type'> & Partial<Omit<ParserField, 'data' | 'name' | 'type'>>; | ||
export declare const createParserField: (props: NodeCreation) => ParserField; | ||
export declare const compareParserFields: (f1: ParserField) => (f2: ParserField) => boolean; | ||
export {}; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.decompileType = exports.compileType = exports.getTypeName = void 0; | ||
exports.compareParserFields = exports.createParserField = exports.generateNodeId = exports.decompileType = exports.compileType = exports.getTypeName = void 0; | ||
const Models_1 = require("../Models"); | ||
@@ -43,1 +43,23 @@ const getTypeName = (f) => { | ||
exports.decompileType = decompileType; | ||
const generateNodeId = (name, dataType, args) => { | ||
const s = [name, dataType, args.map((a) => a.name)].join('-'); | ||
return cyrb53(s); | ||
}; | ||
exports.generateNodeId = generateNodeId; | ||
const cyrb53 = (str, seed = 0) => { | ||
let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed; | ||
for (let i = 0, ch; i < str.length; i++) { | ||
ch = str.charCodeAt(i); | ||
h1 = Math.imul(h1 ^ ch, 2654435761); | ||
h2 = Math.imul(h2 ^ ch, 1597334677); | ||
} | ||
h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909); | ||
h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909); | ||
return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString(16); | ||
}; | ||
const createParserField = (props) => { | ||
return Object.assign({ args: [], directives: [], interfaces: [], id: (0, exports.generateNodeId)(props.name, props.data.type, props.args || []) }, props); | ||
}; | ||
exports.createParserField = createParserField; | ||
const compareParserFields = (f1) => (f2) => f1.id === f2.id; | ||
exports.compareParserFields = compareParserFields; |
{ | ||
"name": "graphql-js-tree", | ||
"version": "0.1.6", | ||
"version": "0.1.7", | ||
"private": false, | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
64870
1348