graphql-compose-json
Advanced tools
Comparing version 4.1.2 to 5.0.0
"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. |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
27
1
22508
22
250
257