Socket
Socket
Sign inDemoInstall

graphql-compose-json

Package Overview
Dependencies
4
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 4.1.2 to 5.0.0

lib/__fixtures__/app.d.ts

39

lib/__fixtures__/app.js
"use strict";
var _express = _interopRequireDefault(require("express"));
var _expressGraphql = _interopRequireDefault(require("express-graphql"));
var _Schema = _interopRequireDefault(require("./Schema"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const PORT = 4000;
const app = (0, _express.default)();
app.use('/graphql', (0, _expressGraphql.default)(req => ({
schema: _Schema.default,
graphiql: true,
context: req
})));
app.listen(PORT, () => {
console.log(`App running on port ${PORT}`); //eslint-disable-line
console.log(`Open http://localhost:${PORT}/graphql`); //eslint-disable-line
});
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var express_1 = __importDefault(require("express"));
var express_graphql_1 = __importDefault(require("express-graphql"));
var Schema_1 = __importDefault(require("./Schema"));
var PORT = 4000;
var app = express_1.default();
app.use('/graphql', express_graphql_1.default(function (req) { return ({
schema: Schema_1.default,
graphiql: true,
context: req,
}); }));
app.listen(PORT, function () {
console.log("App running on port " + PORT); //eslint-disable-line
console.log("Open http://localhost:" + PORT + "/graphql"); //eslint-disable-line
});
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.FilmTC = void 0;
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
var _index = require("../index");
var _People = require("./People");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const restApiResponse = {
title: 'The Empire Strikes Back',
episode_id: 5,
opening_crawl: 'It is a dark time for ...',
director: 'Irvin Kershner',
producer: 'Gary Kurtz, Rick McCallum',
release_date: '1980-05-17',
characters: ['https://swapi.co/api/people/1/', 'https://swapi.co/api/people/2/', 'https://swapi.co/api/people/3/']
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
const FilmTC = (0, _index.composeWithJson)('Film', restApiResponse); // //////////////
Object.defineProperty(exports, "__esModule", { value: true });
var node_fetch_1 = __importDefault(require("node-fetch"));
var index_1 = require("../index");
var People_1 = require("./People");
var restApiResponse = {
title: 'The Empire Strikes Back',
episode_id: 5,
opening_crawl: 'It is a dark time for ...',
director: 'Irvin Kershner',
producer: 'Gary Kurtz, Rick McCallum',
release_date: '1980-05-17',
characters: [
'https://swapi.co/api/people/1/',
'https://swapi.co/api/people/2/',
'https://swapi.co/api/people/3/',
],
};
exports.FilmTC = index_1.composeWithJson('Film', restApiResponse);
// //////////////
// RESOLVERS aka FieldConfig in GraphQL
// //////////////
exports.FilmTC = FilmTC;
FilmTC.addResolver({
name: 'findById',
type: FilmTC,
args: {
id: 'Int!'
},
resolve: rp => {
return (0, _nodeFetch.default)(`https://swapi.co/api/films/${rp.args.id}/`).then(r => r.json());
}
exports.FilmTC.addResolver({
name: 'findById',
type: exports.FilmTC,
args: {
id: 'Int!',
},
resolve: function (rp) {
return node_fetch_1.default("https://swapi.co/api/films/" + rp.args.id + "/").then(function (r) { return r.json(); });
},
});
FilmTC.addResolver({
name: 'findByUrl',
type: FilmTC,
args: {
url: 'String!'
},
resolve: rp => (0, _nodeFetch.default)(rp.args.url).then(r => r.json())
exports.FilmTC.addResolver({
name: 'findByUrl',
type: exports.FilmTC,
args: {
url: 'String!',
},
resolve: function (rp) { return node_fetch_1.default(rp.args.url).then(function (r) { return r.json(); }); },
});
FilmTC.addResolver({
name: 'findByUrlList',
type: [FilmTC],
args: {
urls: '[String]!'
},
resolve: rp => {
return Promise.all(rp.args.urls.map(url => (0, _nodeFetch.default)(url).then(r => r.json())));
}
}); // //////////////
exports.FilmTC.addResolver({
name: 'findByUrlList',
type: [exports.FilmTC],
args: {
urls: '[String]!',
},
resolve: function (rp) {
return Promise.all(rp.args.urls.map(function (url) { return node_fetch_1.default(url).then(function (r) { return r.json(); }); }));
},
});
// //////////////
// RELATIONS
// //////////////
FilmTC.addRelation('characters', {
resolver: () => _People.PeopleTC.getResolver('findByUrlList'),
prepareArgs: {
urls: source => source.characters
}
exports.FilmTC.addRelation('characters', {
resolver: function () { return People_1.PeopleTC.getResolver('findByUrlList'); },
prepareArgs: {
urls: function (source) { return source.characters; },
},
});
FilmTC.addFields({
currentTime: {
type: 'String',
resolve: () => Date.now()
}
});
exports.FilmTC.addFields({
currentTime: { type: 'String', resolve: function () { return Date.now(); } },
});
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.PeopleTC = void 0;
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
var _index = require("../index");
var _Film = require("./Film");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const restApiResponse = {
name: 'Luke Skywalker',
height: '172',
mass: '77',
hair_color: 'blond',
skin_color: 'fair',
eye_color: 'blue',
birth_year: '19BBY',
gender: 'male',
films: ['https://swapi.co/api/films/2/', 'https://swapi.co/api/films/6/', 'https://swapi.co/api/films/3/']
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
const PeopleTC = (0, _index.composeWithJson)('People', restApiResponse); // //////////////
Object.defineProperty(exports, "__esModule", { value: true });
var node_fetch_1 = __importDefault(require("node-fetch"));
var index_1 = require("../index");
var Film_1 = require("./Film");
var restApiResponse = {
name: 'Luke Skywalker',
height: '172',
mass: '77',
hair_color: 'blond',
skin_color: 'fair',
eye_color: 'blue',
birth_year: '19BBY',
gender: 'male',
films: [
'https://swapi.co/api/films/2/',
'https://swapi.co/api/films/6/',
'https://swapi.co/api/films/3/',
],
};
exports.PeopleTC = index_1.composeWithJson('People', restApiResponse);
// //////////////
// RESOLVERS aka FieldConfig in GraphQL
// //////////////
exports.PeopleTC = PeopleTC;
PeopleTC.addResolver({
name: 'findById',
type: PeopleTC,
args: {
id: 'Int!'
},
resolve: rp => {
return (0, _nodeFetch.default)(`https://swapi.co/api/people/${rp.args.id}/`).then(r => r.json());
}
exports.PeopleTC.addResolver({
name: 'findById',
type: exports.PeopleTC,
args: {
id: 'Int!',
},
resolve: function (rp) {
return node_fetch_1.default("https://swapi.co/api/people/" + rp.args.id + "/").then(function (r) { return r.json(); });
},
});
PeopleTC.addResolver({
name: 'findByUrl',
type: PeopleTC,
args: {
url: 'String!'
},
resolve: rp => (0, _nodeFetch.default)(rp.args.url).then(r => r.json())
exports.PeopleTC.addResolver({
name: 'findByUrl',
type: exports.PeopleTC,
args: {
url: 'String!',
},
resolve: function (rp) { return node_fetch_1.default(rp.args.url).then(function (r) { return r.json(); }); },
});
PeopleTC.addResolver({
name: 'findByUrlList',
type: [PeopleTC],
args: {
urls: '[String]!'
},
resolve: rp => {
return Promise.all(rp.args.urls.map(url => (0, _nodeFetch.default)(url).then(r => r.json())));
}
}); // //////////////
exports.PeopleTC.addResolver({
name: 'findByUrlList',
type: [exports.PeopleTC],
args: {
urls: '[String]!',
},
resolve: function (rp) {
return Promise.all(rp.args.urls.map(function (url) { return node_fetch_1.default(url).then(function (r) { return r.json(); }); }));
},
});
// //////////////
// RELATIONS
// //////////////
PeopleTC.addRelation('filmObjs', {
resolver: () => _Film.FilmTC.getResolver('findByUrlList'),
prepareArgs: {
urls: source => source.films
}
});
exports.PeopleTC.addRelation('filmObjs', {
resolver: function () { return Film_1.FilmTC.getResolver('findByUrlList'); },
prepareArgs: {
urls: function (source) { return source.films; },
},
});
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_compose_1 = require("graphql-compose");
var Film_1 = require("./Film");
var People_1 = require("./People");
graphql_compose_1.schemaComposer.Query.addFields({
film: Film_1.FilmTC.getResolver('findById'),
people: People_1.PeopleTC.getResolver('findById'),
peopleByUrl: People_1.PeopleTC.getResolver('findByUrl'),
peopleByUrls: People_1.PeopleTC.getResolver('findByUrlList'),
});
exports.default = void 0;
var _graphqlCompose = require("graphql-compose");
var _Film = require("./Film");
var _People = require("./People");
_graphqlCompose.schemaComposer.Query.addFields({
film: _Film.FilmTC.getResolver('findById'),
people: _People.PeopleTC.getResolver('findById'),
peopleByUrl: _People.PeopleTC.getResolver('findByUrl'),
peopleByUrls: _People.PeopleTC.getResolver('findByUrlList')
});
const schema = _graphqlCompose.schemaComposer.buildSchema();
var _default = schema;
exports.default = _default;
var schema = graphql_compose_1.schemaComposer.buildSchema();
exports.default = schema;
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.composeWithJson = exports.default = void 0;
var _ObjectParser = _interopRequireDefault(require("./ObjectParser"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const composeWithJson = _ObjectParser.default.createTC.bind(_ObjectParser.default);
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var ObjectParser_1 = __importDefault(require("./ObjectParser"));
var composeWithJson = ObjectParser_1.default.createTC.bind(ObjectParser_1.default);
exports.composeWithJson = composeWithJson;
var _default = composeWithJson;
exports.default = _default;
exports.default = composeWithJson;
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _graphqlCompose = require("graphql-compose");
class ObjectParser {
static createTC(name, json) {
if (!json || typeof json !== 'object') {
throw new Error('You provide empty object in second arg for `createTC` method.');
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_compose_1 = require("graphql-compose");
var ObjectParser = /** @class */ (function () {
function ObjectParser() {
}
const tc = _graphqlCompose.ObjectTypeComposer.createTemp(name);
Object.keys(json).forEach(fieldName => {
const fieldConfig = this.getFieldConfig(json[fieldName], {
typeName: name,
fieldName
});
tc.setField(fieldName, fieldConfig);
});
return tc;
}
static getFieldConfig(value, opts) {
const typeOf = typeof value;
if (typeOf === 'number') return 'Float';
if (typeOf === 'string') return 'String';
if (typeOf === 'boolean') return 'Boolean';
if (typeOf === 'object') {
if (value === null) return 'JSON';
if (Array.isArray(value)) {
if (Array.isArray(value[0])) return ['JSON'];
const val = typeof value[0] === 'object' && value[0] !== null ? Object.assign({}, ...value) : value[0];
const args = opts && opts.typeName && opts.fieldName ? {
typeName: opts.typeName,
fieldName: opts.fieldName
} : {};
return [this.getFieldConfig(val, args)];
}
if (opts && opts.typeName && opts.fieldName) {
return this.createTC(`${opts.typeName}_${(0, _graphqlCompose.upperFirst)(opts.fieldName)}`, value);
}
}
if (typeOf === 'function') {
return value();
}
return 'JSON';
}
}
exports.default = ObjectParser;
ObjectParser.createTC = function (name, json) {
var _this = this;
if (!json || typeof json !== 'object') {
throw new Error('You provide empty object in second arg for `createTC` method.');
}
var tc = graphql_compose_1.ObjectTypeComposer.createTemp(name);
Object.keys(json).forEach(function (fieldName) {
var fieldConfig = _this.getFieldConfig(json[fieldName], { typeName: name, fieldName: fieldName });
tc.setField(fieldName, fieldConfig);
});
return tc;
};
ObjectParser.getFieldConfig = function (value, opts) {
var typeOf = typeof value;
if (typeOf === 'number')
return 'Float';
if (typeOf === 'string')
return 'String';
if (typeOf === 'boolean')
return 'Boolean';
if (typeOf === 'object') {
if (value === null)
return 'JSON';
if (Array.isArray(value)) {
if (Array.isArray(value[0]))
return ['JSON'];
var val = typeof value[0] === 'object' && value[0] !== null
? Object.assign.apply(Object, __spreadArrays([{}], value)) : value[0];
var args = opts && opts.typeName && opts.fieldName
? {
typeName: opts.typeName,
fieldName: opts.fieldName,
}
: {};
return [this.getFieldConfig(val, args)];
}
if (opts && opts.typeName && opts.fieldName) {
return this.createTC(opts.typeName + "_" + graphql_compose_1.upperFirst(opts.fieldName), value);
}
}
if (typeOf === 'function') {
return value();
}
return 'JSON';
};
return ObjectParser;
}());
exports.default = ObjectParser;
{
"name": "graphql-compose-json",
"version": "4.1.2",
"version": "5.0.0",
"description": "This is a plugin for `graphql-compose`, which generates GraphQLTypes from any JSON.",
"files": [
"lib",
"mjs"
"lib"
],
"main": "lib/index.js",
"module": "mjs/index.mjs",
"types": "lib/index.d.ts",
"repository": {

@@ -29,14 +28,11 @@ "type": "git",

"devDependencies": {
"@babel/cli": "7.8.4",
"@babel/core": "7.8.4",
"@babel/node": "7.8.4",
"@babel/plugin-proposal-object-rest-spread": "7.8.3",
"@babel/plugin-transform-flow-strip-types": "7.8.3",
"@babel/plugin-transform-runtime": "7.8.3",
"@babel/preset-env": "7.8.4",
"@babel/preset-flow": "7.8.3",
"babel-core": "^7.0.0-bridge.0",
"babel-eslint": "^10.0.3",
"babel-jest": "25.1.0",
"cross-env": "7.0.0",
"@types/express": "^4.17.3",
"@types/express-graphql": "^0.9.0",
"@types/graphql": "^14.5.0",
"@types/jest": "^25.1.4",
"@types/node": "^13.9.0",
"@types/node-fetch": "^2.5.5",
"@typescript-eslint/eslint-plugin": "^2.23.0",
"@typescript-eslint/parser": "^2.23.0",
"cross-env": "7.0.2",
"eslint": "6.8.0",

@@ -50,5 +46,4 @@ "eslint-config-airbnb-base": "^14.0.0",

"express-graphql": "^0.9.0",
"flow-bin": "0.118.0",
"graphql": "14.6.0",
"graphql-compose": "7.12.0",
"graphql-compose": "7.14.0",
"jest": "25.1.0",

@@ -58,18 +53,18 @@ "node-fetch": "^2.6.0",

"rimraf": "3.0.2",
"semantic-release": "^15.13.28"
"semantic-release": "17.0.4",
"ts-jest": "^25.2.1",
"ts-node": "^8.6.2",
"typescript": "^3.8.3"
},
"scripts": {
"build": "npm run build-cjs && npm run build-mjs",
"build-cjs": "rimraf lib && BABEL_ENV=cjs babel src --ignore __tests__,__mocks__,__fixtures__ -d lib && COPY_TO_FOLDER=lib npm run build-flow",
"build-mjs": "rimraf mjs && BABEL_ENV=mjs babel src --ignore __tests__,__mocks__ -d mjs && yarn build-mjs-rename && COPY_TO_FOLDER=mjs npm run build-flow",
"build-mjs-rename": "find ./mjs -name \"*.js\" -exec bash -c 'mv \"$1\" \"${1%.js}\".mjs' - '{}' \\;",
"build-flow": "find ./src -name '*.js' -not -path '*/__*' | while read filepath; do cp $filepath `echo ./${COPY_TO_FOLDER:-lib}$filepath | sed 's/.\\/src\\//\\//g'`.flow; done",
"build": "rimraf lib && tsc -p ./tsconfig.build.json",
"watch": "jest --watch",
"coverage": "jest --coverage --maxWorkers 2",
"lint": "eslint --ext .js ./src",
"flow": "./node_modules/.bin/flow",
"test": "cross-env NODE_ENV=test npm run coverage && npm run lint && npm run flow",
"lint": "yarn eslint && yarn tscheck",
"eslint": "eslint --ext .ts ./src",
"tscheck": "tsc --noEmit",
"test": "cross-env NODE_ENV=test npm run coverage && npm run lint",
"semantic-release": "semantic-release",
"fixture-demo": "./node_modules/.bin/babel-node ./src/__fixtures__/app.js"
"fixture-demo": "ts-node ./src/__fixtures__/app.ts"
}
}

@@ -8,3 +8,2 @@ # graphql-compose-json

[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)
[![Greenkeeper badge](https://badges.greenkeeper.io/graphql-compose/graphql-compose-json.svg)](https://greenkeeper.io/)

@@ -11,0 +10,0 @@ This is a plugin for [graphql-compose](https://github.com/nodkz/graphql-compose), which generates GraphQLTypes from REST response or any JSON. It takes fields from object, determines their types and construct GraphQLObjectType with same shape.

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc