Skip to content

Commit

Permalink
Merge pull request #6 from robak86/add_decorator_for_default_value
Browse files Browse the repository at this point in the history
Add decorator for default value
  • Loading branch information
robak86 committed Jan 6, 2018
2 parents 1822f56 + 56ef0af commit 46897b5
Show file tree
Hide file tree
Showing 12 changed files with 85 additions and 49 deletions.
6 changes: 1 addition & 5 deletions .travis.yml
Expand Up @@ -2,13 +2,9 @@ sudo: required
language: node_js
node_js:
- "8"
- "7"
# - "6"
# - "5"
# - "4"
- "9"

before_script:
- yarn add graphql --no-save
- npm run build:dist

after_script:
Expand Down
8 changes: 6 additions & 2 deletions CHANGELOG.md
Expand Up @@ -4,8 +4,12 @@
- move graphql to peerDependencies
- upgrade dependencies

## 0.4.0
## 0.5.0
- complete rewrite of internals
- upgrade dependencies
- remove `@args` and `@argsType` decorators in favor of `@params` and `@input`. [**Breaking change**]
- remove `@args` and `@argsType` decorators in favor of `@params` and `@input`. [**Breaking change**]

## 0.5.1
- add @defaultValue decorator


2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -240,7 +240,7 @@ decorateEnum('Status', JobStatus); // it makes JobStatus acceptable by @field de
@type()
class BackgroundJob {
@field(JobStatus) @nonNull()
status:string;
status:JobStatus;
}
```

Expand Down
4 changes: 4 additions & 0 deletions lib/decorators/fields.ts
Expand Up @@ -29,6 +29,10 @@ export const params = (argsType:ArgsType):PropertyDecorator => createFieldDecora
fieldConfig.setParamsType(argsType)
});

export const defaultValue = (val):PropertyDecorator => createFieldDecorator(fieldConfig => {
fieldConfig.setDefaultValue(val)
});

export const paramsThunk = (argsType:() => ArgsType):PropertyDecorator => createFieldDecorator(fieldConfig => {
fieldConfig.setParamsThunk(argsType)
});
Expand Down
2 changes: 1 addition & 1 deletion lib/utils/metadata.ts
Expand Up @@ -2,5 +2,5 @@ import {someOrThrow} from "./core";
import {GRAPHQL_METADATA_KEY, IBaseMetadata} from "../types-metadata/IBaseMetadata";

export function getMetadata(klass:Object):IBaseMetadata<any> {
return someOrThrow(Reflect.getMetadata(GRAPHQL_METADATA_KEY, klass), `Missing GraphQL metadata for ${klass.constructor.name}`);
return someOrThrow(Reflect.getMetadata(GRAPHQL_METADATA_KEY, klass), `Missing GraphQL metadata for ${klass}`);
}
18 changes: 13 additions & 5 deletions package.json
@@ -1,9 +1,14 @@
{
"name": "gql-schema",
"version": "0.5.0",
"version": "0.5.1",
"description": "Yet another experimental library for defining graphql schemas using decorators.",
"repository": "https://github.com/robak86/gql-schema",
"main": "lib/index.js",
"main": "index.js",
"types": "index.d.ts",
"engines": {
"node": ">=6.0.0",
"yarn": ">=1.0.2 <2.0.0"
},
"scripts": {
"test": "mocha --require dist/spec/SpecHelper.js dist/spec/**/*.spec.js",
"build:clean": "rm -rf ./dist && mkdir -p dist/lib",
Expand All @@ -12,7 +17,8 @@
"build:dist": "npm run build:clean && npm run build:copy && npm run build:compile",
"build:watch": "npm run build:clean && npm run build:copy && tsc --watch --sourceMap --pretty",
"build:coverage": "nyc --reporter=text-lcov mocha -- -- spec dist/spec/**/*.spec.js | coveralls",
"build:coverage:local": "nyc mocha -- -- spec dist/spec/**/*.spec.js"
"build:coverage:local": "nyc mocha -- -- spec dist/spec/**/*.spec.js",
"link": "cd dist/lib && yarn install --prod && yarn link"
},
"author": "Tomasz Robaczewski",
"license": "MIT",
Expand All @@ -29,13 +35,15 @@
"reflect-metadata": "^0.1.10",
"sinon": "^4.1.3",
"source-map-support": "^0.4.15",
"typescript": "^2.6.1"
"typescript": "^2.6.1",
"graphql": "^0.11.7"
},
"dependencies": {
"lodash": "^4.17.4"
},
"peerDependencies": {
"graphql": "^0.11.7"
"graphql": "^0.11.7",
"reflect-metadata": "^0.1.10"
},
"nyc": {
"exclude": [
Expand Down
6 changes: 3 additions & 3 deletions spec/integration/buildingSchema.spec.ts
Expand Up @@ -12,7 +12,7 @@ function createdSchemaFromDecoratedClasses():GraphQLSchema {

function createSchemaFromDefinition():GraphQLSchema {
const definition = `
"""User search address params"""
# User search address params
input UserSearchAddressParams {
street: String
}
Expand All @@ -28,7 +28,7 @@ function createSchemaFromDefinition():GraphQLSchema {
firstNameUpperCase: String
address: Address
employers: [Company!]!
role: UserRole!
roles: [UserRole!]!
}
type Address {
Expand All @@ -47,7 +47,7 @@ function createSchemaFromDefinition():GraphQLSchema {
}
type Mutation {
createUser(firstName: String!, lastName: String!, address: CreateAddressParams): User
createUser(firstName: String!, lastName: String!, address: CreateAddressParams, roles: [UserRole] = []): User
createAddress(streetName: String, city: String): Address
createCompany(companyName: String): Company
createCompanyWrapped(input: CreateCompanyParams!): Company
Expand Down
8 changes: 4 additions & 4 deletions spec/integration/queries.spec.ts
Expand Up @@ -18,7 +18,7 @@ describe("root query", () => {
id
firstName
firstNameUpperCase
role
roles
employers {
id
name
Expand All @@ -33,7 +33,7 @@ describe("root query", () => {
id: '1',
firstName: 'Jane',
firstNameUpperCase: 'JANE',
role: 'admin',
roles: ['admin'],
employers: [
{
id: "1",
Expand All @@ -45,7 +45,7 @@ describe("root query", () => {
id: '2',
firstName: 'John',
firstNameUpperCase: 'JOHN',
role: 'stuff',
roles: ['stuff'],
employers: [
{
id: "2",
Expand All @@ -57,7 +57,7 @@ describe("root query", () => {
id: '3',
firstName: 'Adam',
firstNameUpperCase: 'ADAM',
role: 'guest',
roles: ['guest'],
employers: [
{
id: "3",
Expand Down
8 changes: 4 additions & 4 deletions spec/integration/resolvers/data.ts
Expand Up @@ -2,7 +2,7 @@ import {Company} from "../types/Company";
import {UserRole} from "../types/UserRole";

export type CompanyEntity = { id:string; name:string; employeesIds:string[], type:'company' };
export type UserEntity = { id:string; firstName:string; employersIds:string[], role:UserRole, type:'user' };
export type UserEntity = { id:string; firstName:string; employersIds:string[], roles:UserRole[], type:'user' };

export function getCompanyById(id:string):CompanyEntity {
return getAllCompanies().filter(company => company.id === id)[0];
Expand All @@ -18,9 +18,9 @@ export function getAllCompanies():CompanyEntity[] {

export function getAllUsers():UserEntity[] {
return [
{id: '1', firstName: 'Jane', role: UserRole.admin, employersIds: ['1'], type: 'user'},
{id: '2', firstName: 'John', role: UserRole.stuff, employersIds: ['2'], type: 'user'},
{id: '3', firstName: 'Adam', role: UserRole.guest, employersIds: ['3'], type: 'user'},
{id: '1', firstName: 'Jane', roles: [UserRole.admin], employersIds: ['1'], type: 'user'},
{id: '2', firstName: 'John', roles: [UserRole.stuff], employersIds: ['2'], type: 'user'},
{id: '3', firstName: 'Adam', roles: [UserRole.guest], employersIds: ['3'], type: 'user'},
]
}

Expand Down
8 changes: 6 additions & 2 deletions spec/integration/types/CreateUserParams.ts
@@ -1,6 +1,7 @@
import {field, input, nonNull} from "../../../lib";
import {defaultValue, field, input, list, nonNull} from "../../../lib";
import {GraphQLString} from "graphql";
import {CreateAddressParams} from "./CreateAddressParams";
import {UserRole} from "./UserRole";

@input()
export class CreateUserParams {
Expand All @@ -11,5 +12,8 @@ export class CreateUserParams {
lastName:string;

@field(CreateAddressParams)
address:CreateAddressParams
address:CreateAddressParams;

@list(UserRole) @defaultValue([])
roles: UserRole[];
}
6 changes: 3 additions & 3 deletions spec/integration/types/User.ts
@@ -1,7 +1,7 @@
import {Company} from "./Company";
import {field, id, listThunk, nonNull, nonNullItems, resolve} from "../../../lib/";
import {GraphQLString} from "graphql";
import {type} from "../../../lib";
import {list, type} from "../../../lib";
import {resolveEmployersForUser} from "../resolvers/queries";
import {UserRole} from "./UserRole";
import {Address} from "./Address";
Expand All @@ -25,6 +25,6 @@ export class User {
@resolve(resolveEmployersForUser)
employers:Company[];

@field(UserRole) @nonNull()
role:UserRole
@list(UserRole) @nonNull() @nonNullItems()
roles:UserRole[]
}
58 changes: 39 additions & 19 deletions yarn.lock
Expand Up @@ -15,8 +15,14 @@
resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.91.tgz#794611b28056d16b5436059c6d800b39d573cd3a"

"@types/mocha@^2.2.41":
version "2.2.44"
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.44.tgz#1d4a798e53f35212fd5ad4d04050620171cd5b5e"
version "2.2.45"
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.45.tgz#816572b6e45164526a36d4faa123e8267d6d5d0a"
dependencies:
"@types/node" "*"

"@types/node@*":
version "8.5.2"
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.5.2.tgz#83b8103fa9a2c2e83d78f701a9aa7c9539739aa5"

"@types/sinon@^4.1.2":
version "4.1.2"
Expand Down Expand Up @@ -638,6 +644,12 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2:
version "1.0.1"
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"

graphql@^0.11.7:
version "0.11.7"
resolved "https://registry.yarnpkg.com/graphql/-/graphql-0.11.7.tgz#e5abaa9cb7b7cccb84e9f0836bf4370d268750c6"
dependencies:
iterall "1.1.3"

growl@1.9.2:
version "1.9.2"
resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
Expand Down Expand Up @@ -784,8 +796,8 @@ is-glob@^2.0.0, is-glob@^2.0.1:
is-extglob "^1.0.0"

is-my-json-valid@^2.12.4:
version "2.16.1"
resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11"
version "2.17.1"
resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz#3da98914a70a22f0a8563ef1511a246c6fc55471"
dependencies:
generate-function "^2.0.0"
generate-object-property "^1.1.0"
Expand Down Expand Up @@ -897,6 +909,10 @@ istanbul-reports@^1.1.3:
dependencies:
handlebars "^4.0.3"

iterall@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.1.3.tgz#1cbbff96204056dde6656e2ed2e2226d0e6d72c9"

js-tokens@^3.0.0, js-tokens@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
Expand Down Expand Up @@ -1089,10 +1105,10 @@ mem@^1.1.0:
mimic-fn "^1.0.0"

merge-source-map@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.0.4.tgz#a5de46538dae84d4114cc5ea02b4772a6346701f"
version "1.1.0"
resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
dependencies:
source-map "^0.5.6"
source-map "^0.6.1"

micromatch@^2.3.11:
version "2.3.11"
Expand Down Expand Up @@ -1207,8 +1223,8 @@ number-is-nan@^1.0.0:
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"

nyc@^11.0.3:
version "11.3.0"
resolved "https://registry.yarnpkg.com/nyc/-/nyc-11.3.0.tgz#a42bc17b3cfa41f7b15eb602bc98b2633ddd76f0"
version "11.4.1"
resolved "https://registry.yarnpkg.com/nyc/-/nyc-11.4.1.tgz#13fdf7e7ef22d027c61d174758f6978a68f4f5e5"
dependencies:
archy "^1.0.0"
arrify "^1.0.1"
Expand All @@ -1233,7 +1249,7 @@ nyc@^11.0.3:
resolve-from "^2.0.0"
rimraf "^2.5.4"
signal-exit "^3.0.1"
spawn-wrap "=1.3.8"
spawn-wrap "^1.4.2"
test-exclude "^4.1.1"
yargs "^10.0.3"
yargs-parser "^8.0.0"
Expand Down Expand Up @@ -1480,7 +1496,7 @@ right-align@^0.1.1:
dependencies:
align-text "^0.1.1"

rimraf@^2.3.3, rimraf@^2.5.4, rimraf@^2.6.1:
rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
dependencies:
Expand Down Expand Up @@ -1550,16 +1566,20 @@ source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"

spawn-wrap@=1.3.8:
version "1.3.8"
resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.3.8.tgz#fa2a79b990cbb0bb0018dca6748d88367b19ec31"
source-map@^0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"

spawn-wrap@^1.4.2:
version "1.4.2"
resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.2.tgz#cff58e73a8224617b6561abdc32586ea0c82248c"
dependencies:
foreground-child "^1.5.6"
mkdirp "^0.5.0"
os-homedir "^1.0.1"
rimraf "^2.3.3"
rimraf "^2.6.2"
signal-exit "^3.0.2"
which "^1.2.4"
which "^1.3.0"

spdx-correct@~1.0.0:
version "1.0.2"
Expand Down Expand Up @@ -1736,7 +1756,7 @@ which-module@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"

which@^1.2.4, which@^1.2.9:
which@^1.2.9, which@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
dependencies:
Expand Down Expand Up @@ -1786,8 +1806,8 @@ yallist@^2.1.2:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"

yargs-parser@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.0.0.tgz#21d476330e5a82279a4b881345bf066102e219c6"
version "8.1.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950"
dependencies:
camelcase "^4.1.0"

Expand Down

0 comments on commit 46897b5

Please sign in to comment.