Giter Club home page Giter Club logo

graphcool-framework's Introduction

Prisma

WebsitePrisma 1 DocsPrisma 1 ExamplesBlogSlackTwitterPrisma 2

CircleCI Slack Status


⚠️ Prisma 1 was deprecated on September 1st, 2022. If you are new to Prisma, check out the latest version of Prisma! ⚠️


Prisma 1 replaces traditional ORMs and simplifies database workflows:

  • Access: Type-safe database access with the auto-generated Prisma client
  • Migrate: Declarative data modelling and migrations (optional)
  • Manage: Visual data management with Prisma Admin

It is used to build GraphQL, REST, gRPC APIs and more. Prisma 1 currently supports MySQL, PostgreSQL, MongoDB.

Get started with Prisma 1

You can find installation and usage instructions in the Prisma 1 docs.

Prisma 1 was deprecated on September 1st, 2022. If you are new to Prisma, check out the latest version of Prisma!

Community

Prisma has a community of thousands of amazing developers and contributors. Welcome, please join us! 👋

Channels

Events

Resources

graphcool-framework's People

Contributors

alex-mann avatar alexanderchen1989 avatar antho1404 avatar apoeco avatar c-riq avatar cjoudrey avatar danistefanovic avatar devanb avatar dhruska avatar do4gr avatar dpetrick avatar hankolsen avatar iamclaytonray avatar joestrouth1 avatar josephjorgensen avatar katt avatar kbrandwijk avatar kevlened avatar marktani avatar maticzav avatar mavilein avatar michaelchiche avatar nikolasburk avatar qucode1 avatar schickling avatar sorenbs avatar tamlyn avatar timsuchanek avatar wacii avatar zebapy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

graphcool-framework's Issues

enable multiple file upload

Issue by dohomi
Thursday Feb 23, 2017 at 07:39 GMT
Originally opened as https://github.com/graphcool/prisma/issues/115


Hi Guys,

currently the file API is restricted to work with one file only at a time. I would like to enable multiple file upload:

 const data = new FormData();
                [...files].forEach(file => {
                    data.append('data', file, file.name);
                }); // => works only for one file

it would be great if data could be an array:

 [...files].forEach(file => {
                    data.append('data[]', file, file.name);
                }); // => should work for an array of files.

Hope this makes sense, Cheers

Tweak pluralization rules

Type names ending in -o, get a plural form ending in -oes.
The standard spelling rule is -o -> -os. The -oes is rather an exception than a rule.

Can you change the standard pluralization rule for Types to use -os instead of -oes?

Use Composable Fragments for Permissions

Issue by ejoebstl
Monday Feb 27, 2017 at 21:04 GMT
Originally opened as https://github.com/graphcool/prisma/issues/120


Currently, permissions with a custom audience are implemented by traversing a tree which starts at the node in question:

query permitUsers($nodeId: ID) {
  allUsers(
    filter: {
      id: $nodeId
    }
  ) {
    id
  }
}

I suggest removing that preamble, and working with a fragment instead:

fragment myCustomPermission on User {
  profiles(filter:{active:true}) {
    profileUrl
  }
}

This fragment can be named and internally inserted into the preamble:

  query permitUsers($nodeId: ID) {
  allUsers(
    filter: {
      id: $nodeId
    }
  ) {
    ...myCustomPermission
  }
}

The main advantage is that you could compose these fragments. Since fragments are already supported in graphcool, this should be quite straight forward to achieve.

Care has to be taken from a UX approach though, since the preamble becomes less readable.

Maintenance mode

Issue by sedubois
Monday Oct 03, 2016 at 07:03 GMT
Originally opened as https://github.com/graphcool/prisma/issues/17


It could be useful to disable HTTP access to a project similar to Heroku, for example:

  • to do some bigger backend refactoring
  • if an issue comes up (endpoint compromised, permission rules mixed up etc)
  • simply to put a project "in the fridge" for a while

Single responsibility principle FTW

For the Love of God, choose one lib and deprecate the other. Why the developer would have to think about differences between graphcool and graphcool-framework.

Thank you :-)

Filestack/Cloudinary module

Issue by acorcutt
Thursday Mar 16, 2017 at 16:37 GMT
Originally opened as https://github.com/graphcool/prisma/issues/138


It would be nice to be able to use filestack.com as an alternative to your file api for large file uploading and also allow on-demand image and video processing through a query such as

{
  someFile {
     originalUrl
     mime
     previewImage: transform(format:'jpg', width:300, height:200, crop:'fit')
     largeImage: transform(format:'jpg', width:3000, crop:'limit')
  }
}

Terminal command graphcool-framework not found

I installed graphcool-framework globally by npm.
npm install -g graphcool-framework
Version is 0.11.5.

After installation I typed graphcool-framework init server
and get -bash: graphcool-framework: command not found error.

I think that problem might be with npm

TypeScriptBuilder does not stop on compilation errors

Current behavior

Typescript compilation options include "strictNullChecks": true

Reproduction

If you write a function with something like

var existingAppointment: Appointment = undefined;

The compilation error TS2322: Type 'undefined' is not assignable to type 'Appointment'. is ignored. The bundling process goes on and may deploy invalid code.

Expected behavior?

The bundling process should stop.

Automatically create a user if a request is made with an unknown Auth0 id token

Issue by lpil
Saturday Mar 18, 2017 at 15:32 GMT
Originally opened as https://github.com/graphcool/prisma/issues/140


Using the Auth0 lock widget with just the single sign on there is no way of knowing if the user is new or existing, so there is no clear point at which to perform createUser.

Currently I'm looking at running createUser always and catching the error.

On slack @sorenbs suggested that possibly we would able to use the id_token directly in the Authorization header, and Graphcool automatically creates a user if doesn’t exist. This seemed like the ideal solution to me. :)

Analytics/Metrics/Monitoring

Issue by Twinski
Thursday Jan 12, 2017 at 10:48 GMT
Originally opened as https://github.com/graphcool/prisma/issues/63


Would be cool to monitor the speed/performance of a specific GraphQL query. To see how many effective queries were executed under the hood.
( for example: https://youtu.be/c35bj1AT3X8?t=41m39s )

This makes sure the developer knows what happens under the hood instead of just relying on 'magic'. :)

Maybe the amount of queries interests me & also execution time in total (and even better, per individual query under the hood)

Improve lambda proxy error detection

Current behavior

I may be wrong but I think that the lambda proxy is not bullet proof to errors.

I have a typescript function that is running fine when deployed locally on Docker but fails on shared cluster with the following error.

{
  "data": {
    "addMeeting": null
  },
  "errors": [
    {
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "addMeeting"
      ],
      "code": 5000,
      "message": "A function returned an unhandled error. Please check the logs for executionId 'us-west-2:simple:cjckwpsnu0n0a0184zhw7fyoa'",
      "requestId": "us-west-2:simple:cjckwpsnu0n0a0184zhw7fyoa"
    }
  ]
}

Expected behavior?

A meaningful error message.

Enable Auth0 rules

Issue by jeffgorder
Monday Feb 13, 2017 at 14:06 GMT
Originally opened as https://github.com/graphcool/prisma/issues/98


When integrating with Auth0, the way to create users now is to use the idToken return from the authentication request.

Auth0 provides a rules pipeline that allows any code to be executed on the user object before the authentication process is completed. Since we have to wait for the idToken before we can create the user in graphcool, that means that we can't use the rules pipeline.

Every user has a unique id in auth0. So, it would be great to be able to create and query graphcool users with that auth0UserId in the rules pipeline.

Beyond creation querying of users, the rules pipeline is very helpful in user engagement. Check this list for types of things you can do: https://manage.auth0.com/#/rules/new

Access control for collaboration

Issue by marktani
Wednesday Feb 08, 2017 at 17:48 GMT
Originally opened as https://github.com/graphcool/prisma/issues/94


This is an improvement for #19.

Thanks for @matthiasak's suggestion:

An additional need here. Allowing team administration abilities here (CMS features mentioned above) it would be awesome to be able to specify a team member's access level, so that they can (in decreasing tiers):
SuperAdmin - create/edit schema, configure user access levels, as well as below
Admin - create/edit rows in certain tables, as well as below
User - read rows in certain tables

More datacenters for the shared cluster

Issue by schickling
Sunday Jan 08, 2017 at 20:37 GMT
Originally opened as https://github.com/graphcool/prisma/issues/61


In order to guarantee even better response times there should be additional datacenters in...

  • US East
  • US West
  • Asia Pacific

Note that private clusters can be hosted in any of these 12 AWS regions:

  • us-east-2
  • us-east-1
  • us-west-2
  • us-west-1
  • ca-central-1
  • eu-central-1
  • eu-west-2
  • eu-west-1
  • ap-northeast-2
  • ap-northeast-1
  • ap-southeast-2
  • ap-southeast-1

Allow integration with Auth0 rules and createUser

Issue by mypark
Thursday Nov 17, 2016 at 17:11 GMT
Originally opened as https://github.com/graphcool/prisma/issues/37


To make auth0 user integration simpler, allow an insert into createUser by auth0 userId rather than an auth0 token. This could be restricted to admin roles.

Auth0 has a server side rule trigger than can post user data and userId to an http endpoint on user registration. Unfortunately, it doesn't have a userId token that it can pass along to the graphcool endpoint.

This would make auth0 integration pretty simple.

Customer support integration

Issue by sedubois
Friday Mar 03, 2017 at 10:01 GMT
Originally opened as https://github.com/graphcool/prisma/issues/123


  • allow users to add Intercom to their Graphcool app right from the Integrations tab
  • sync Graphcool's user model with Intercom
  • allow to customize the connection (e.g which users shall be taken into account, which custom attributes to add to each user)
  • allow to hook up custom events

If there's any workaround to make this integration possible meanwhile, would be great to know too.

EDIT: could be something else than Intercom, because their pricing is so prohibitive.

Improve code generation

Issue by marktani
Wednesday Feb 15, 2017 at 10:17 GMT
Originally opened as https://github.com/graphcool/prisma/issues/100


Another idea for the playground:

when clicking on a query/mutation in the Playground docs, the query will be added to the playground to be executed.

Thanks to @sun2rise for these suggestions 👍

Let's collect more suggestions here.

Add a .gitignore in the base template

For feature requests, please fill in the next sections:

What feature are you missing?

Very simple, add a basic .gitignore on the init template (provide by https://www.gitignore.io/)

How could this feature look like in detail? Tradeoffs?
Just have a better quick start with git 😉

Usability of graphcool console

Issue by ejoebstl
Thursday Feb 16, 2017 at 09:32 GMT
Originally opened as https://github.com/graphcool/prisma/issues/103


The following features, which are supported by most other database tools, would be nice to have:

  • By shift-clicking two nodes A and B: selecting all successive nodes (or table rows in the UI) between A and B.
  • Support undo with ctrl-z.
  • Do not commit changes when the field in the data browser looses focus, commit all current changes when a save button is pressed. Sometimes, I would like to make changes consistently across multiple fields. This is already done for schema, but not for data views.
  • Support copy/paste. I can imagine that JSON would be a great representation for the clipboard.

Currently, the GC console is the only UI-based way to edit live data. Without the features mentioned above, it's very easy to bring the data into inconsistent state or accidentally edit or delete data.

Misleading quickstart flow on graph.cool

For bug reports, please fill in the next sections:

Current behavior

The first step of the visitor onboarding seems broken because of a confusion between graphcool and graphcool-framework, so I don't know how to proceed (I consider myself a visitor because I haven't coded with Graphcool in several months and was hoping that the website would get me up to speed again).

Reproduction

  • visit www.graph.cool: it instructs to do npm i -g graphcool-framework
  • click on the "get started" button: it leads to a page which instructs to do npm i -g graphcool. So which one is it?

gc_1

gc_2

Expected behavior?

Ideally there should be one integrated way to manage grapcool instead of multiple binaries, and at the very least the different documentation pages shouldn't contradict each other, especially when onboarding visitors.

It also led me to the question of whether there are still any plans to actively develop the graphcool-framework, so any clarifications would be appreciated.

Based on the repo names (graphcool/graphcool-framework vs graphcool/prisma), I thought I should report here, even though this repo doesn't seem to have much attention (maybe it will soon?). Clarification about this would be appreciated as well. Thanks for your time and keep up the good work 🙂

Allow Auth0 Users to have multiple signins / auth0ids after they merge their auth0 accounts

Issue by carlpeaslee
Thursday Dec 15, 2016 at 14:49 GMT
Originally opened as https://github.com/graphcool/prisma/issues/50


Example: If a user creates an account through Auth0 username/password (auth|etc...) and then later returns to the site and attempts to login with facebook, a new account will be created (facebook|etc...). If the Auth0 Admin has created a rule that automerges accounts, the original username/password account will get merged on the auth0 database with the facebook one under the facebook auth0id. If the user then attempts to login to their graph.cool app with the original Auth0 username/password credentials, they'll find that they are now in their second duplicate facebook account and that their original account is unreachable (two accounts exist on the graph.cool db––one for the facebook|... and one for the auth|... but only one account exists on the auth0 database with both identities merged under a single id).

Rename fields, mutation callbacks, etc properly when modifying a relation

Issue by sedubois
Wednesday Feb 22, 2017 at 12:00 GMT
Originally opened as https://github.com/graphcool/prisma/issues/112


When renaming a relation, we're currently only warned that it will break everything, or it can even refuse altogether when there are existing nodes.

Instead, it should transitively modify things as appropriate. Otherwise this renaming feature is kind of useless. This appears critical to be able to modify/refactor an existing backend.

Graphcool on macOS High Sierra

Hi, I've so far been working in a Linux VM, but I'd like to move on my Mac (my native host).

My system:

  • macOS High Sierra (10.13.1)
  • MBP touch-bar
  • Homebrew
  • Fish Shell

I installed the following with brew

  • docker (version 17.10.0-ce, build f4ffd25)
  • docker-compose (version 1.17.1, build unknown)
  • NodeJS (8.9.1)

I then installed graphcool (0.9.2) via npm.

Current problematic behaviour

I run gc local up and I get the following (debug output):

$ gc local up 

  config CWD /Users/vincenzo/Drive/Vagrant/zoo/data/graphcool/cms +0ms
  config HOME /Users/vincenzo +2ms
  config definitionDir /Users/vincenzo/Drive/Vagrant/zoo/data/graphcool/cms +0ms
  config definitionPath /Users/vincenzo/Drive/Vagrant/zoo/data/graphcool/cms/graphcool.yml +1ms
  config homepath /Users/vincenzo/.graphcoolrc +0ms
  config localRCPath /Users/vincenzo/Drive/Vagrant/zoo/data/graphcool/cms/.graphcoolrc +0ms
  config globalRCPath /Users/vincenzo/.graphcoolrc +0ms
  cli command id local:up +0ms
  cli:plugincache Got plugin from cache +0ms
  cli:plugincache /Users/vincenzo/Library/Caches/graphcool/plugins.json +0ms
  cli:plugincache Got plugin from cache +1ms
  cli:plugincache /Users/vincenzo/Library/Caches/graphcool/plugins.json +0ms
  plugins findCommand graphcool-cli-core +0ms
  plugin requiring command +0ms
  cli-engine:plugins:manager requiring /usr/local/lib/node_modules/graphcool/node_modules/graphcool-cli-core +0ms
  cli-engine:plugins:manager required +367ms
  plugin required command +370ms
WARNING: Error: Could not find cluster local defined for target loc in /Users/vincenzo/Drive/Vagrant/zoo/data/graphcool/cms/.graphcoolrc.
Please run graphcool local up to start the local cluster.
    at /usr/local/lib/node_modules/graphcool/node_modules/graphcool-cli-engine/src/Output/index.ts:205:41
    at SimpleAction.ActionBase.pause (/usr/local/lib/node_modules/graphcool/node_modules/graphcool-cli-engine/src/Output/actions/ActionBase.ts:65:17)
    at Output.warn (/usr/local/lib/node_modules/graphcool/node_modules/graphcool-cli-engine/src/Output/index.ts:202:17)
    at /usr/local/lib/node_modules/graphcool/node_modules/graphcool-cli-engine/src/Environment.ts:505:14
    at Array.forEach (<anonymous>)
    at Environment.checkClusters (/usr/local/lib/node_modules/graphcool/node_modules/graphcool-cli-engine/src/Environment.ts:496:26)
    at Environment.deserializeRCs (/usr/local/lib/node_modules/graphcool/node_modules/graphcool-cli-engine/src/Environment.ts:490:10)
    at Environment.get [as rc] (/usr/local/lib/node_modules/graphcool/node_modules/graphcool-cli-engine/src/Environment.ts:37:17)
    at Environment.<anonymous> (/usr/local/lib/node_modules/graphcool/node_modules/graphcool-cli-engine/src/Environment.ts:436:14)
    at step (/usr/local/lib/node_modules/graphcool/node_modules/graphcool-cli-engine/dist/Environment.js:40:23)
    at Object.next (/usr/local/lib/node_modules/graphcool/node_modules/graphcool-cli-engine/dist/Environment.js:21:53)
    at fulfilled (/usr/local/lib/node_modules/graphcool/node_modules/graphcool-cli-engine/dist/Environment.js:12:58)
    at <anonymous>
  portfinder:defaultHosts exports._defaultHosts is: [ '0.0.0.0', '127.0.0.1', '::1', 'fe80::1', 'fe80::aede:48ff:fe00:1122', 'fe80::b0:da70:e70:ebb1', '192.168.1.104', 'fdaa:bbcc:ddee:0:823:835a:257f:b5ad', 'fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5', '2a00:23c4:478a:b400:18d0:bed2:d32e:65c0', '2a00:23c4:478a:b400:4986:56fa:72e8:16e1', 'fe80::749d:1eff:fec1:9460', 'fe80::ab67:7c8f:de07:c72b', 'fe80::6316:bfe9:8391:733a' ] +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 0.0.0.0 +3ms
  portfinder:testPort entered testPort(): trying 0.0.0.0 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 0.0.0.0 port 60000 +4ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +1ms
  portfinder:getPort in eachSeries() iteration callback: host is 127.0.0.1 +0ms
  portfinder:testPort entered testPort(): trying 127.0.0.1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 127.0.0.1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +1ms
  portfinder:getPort in eachSeries() iteration callback: host is ::1 +0ms
  portfinder:testPort entered testPort(): trying ::1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK ::1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is fe80::1 +0ms
  portfinder:testPort entered testPort(): trying fe80::1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): failed fe80::1 w/ port 60000 with error EADDRNOTAVAIL +1ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with an err: EADDRNOTAVAIL +0ms
  portfinder:getPort in eachSeries() result callback: err is { Error: listen EADDRNOTAVAIL fe80::1:60000
    at Object._errnoException (util.js:1024:11)
    at _exceptionWithHostPort (util.js:1046:20)
    at Server.setupListenHandle [as _listen2] (net.js:1334:19)
    at listenInCluster (net.js:1392:12)
    at doListen (net.js:1501:7)
    at _combinedTickCallback (internal/process/next_tick.js:141:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
  code: 'EADDRNOTAVAIL',
  errno: 'EADDRNOTAVAIL',
  syscall: 'listen',
  address: 'fe80::1',
  port: 60000 } +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 0.0.0.0 +1ms
  portfinder:testPort entered testPort(): trying 0.0.0.0 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 0.0.0.0 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +1ms
  portfinder:getPort in eachSeries() iteration callback: host is 127.0.0.1 +0ms
  portfinder:testPort entered testPort(): trying 127.0.0.1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 127.0.0.1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is ::1 +0ms
  portfinder:testPort entered testPort(): trying ::1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK ::1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is fe80::aede:48ff:fe00:1122 +0ms
  portfinder:testPort entered testPort(): trying fe80::aede:48ff:fe00:1122 port 60000 +0ms
  portfinder:testPort done w/ testPort(): failed fe80::aede:48ff:fe00:1122 w/ port 60000 with error EADDRNOTAVAIL +1ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with an err: EADDRNOTAVAIL +0ms
  portfinder:getPort in eachSeries() result callback: err is { Error: listen EADDRNOTAVAIL fe80::aede:48ff:fe00:1122:60000
    at Object._errnoException (util.js:1024:11)
    at _exceptionWithHostPort (util.js:1046:20)
    at Server.setupListenHandle [as _listen2] (net.js:1334:19)
    at listenInCluster (net.js:1392:12)
    at doListen (net.js:1501:7)
    at _combinedTickCallback (internal/process/next_tick.js:141:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
  code: 'EADDRNOTAVAIL',
  errno: 'EADDRNOTAVAIL',
  syscall: 'listen',
  address: 'fe80::aede:48ff:fe00:1122',
  port: 60000 } +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 0.0.0.0 +0ms
  portfinder:testPort entered testPort(): trying 0.0.0.0 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 0.0.0.0 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 127.0.0.1 +0ms
  portfinder:testPort entered testPort(): trying 127.0.0.1 port 60000 +1ms
  portfinder:testPort done w/ testPort(): OK 127.0.0.1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is ::1 +0ms
  portfinder:testPort entered testPort(): trying ::1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK ::1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is fe80::b0:da70:e70:ebb1 +0ms
  portfinder:testPort entered testPort(): trying fe80::b0:da70:e70:ebb1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): failed fe80::b0:da70:e70:ebb1 w/ port 60000 with error EADDRNOTAVAIL +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with an err: EADDRNOTAVAIL +1ms
  portfinder:getPort in eachSeries() result callback: err is { Error: listen EADDRNOTAVAIL fe80::b0:da70:e70:ebb1:60000
    at Object._errnoException (util.js:1024:11)
    at _exceptionWithHostPort (util.js:1046:20)
    at Server.setupListenHandle [as _listen2] (net.js:1334:19)
    at listenInCluster (net.js:1392:12)
    at doListen (net.js:1501:7)
    at _combinedTickCallback (internal/process/next_tick.js:141:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
  code: 'EADDRNOTAVAIL',
  errno: 'EADDRNOTAVAIL',
  syscall: 'listen',
  address: 'fe80::b0:da70:e70:ebb1',
  port: 60000 } +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 0.0.0.0 +0ms
  portfinder:testPort entered testPort(): trying 0.0.0.0 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 0.0.0.0 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 127.0.0.1 +0ms
  portfinder:testPort entered testPort(): trying 127.0.0.1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 127.0.0.1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +1ms
  portfinder:getPort in eachSeries() iteration callback: host is ::1 +0ms
  portfinder:testPort entered testPort(): trying ::1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK ::1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 192.168.1.104 +0ms
  portfinder:testPort entered testPort(): trying 192.168.1.104 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 192.168.1.104 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is fdaa:bbcc:ddee:0:823:835a:257f:b5ad +0ms
  portfinder:testPort entered testPort(): trying fdaa:bbcc:ddee:0:823:835a:257f:b5ad port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK fdaa:bbcc:ddee:0:823:835a:257f:b5ad port 60000 +1ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5 +0ms
  portfinder:testPort entered testPort(): trying fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 2a00:23c4:478a:b400:18d0:bed2:d32e:65c0 +0ms
  portfinder:testPort entered testPort(): trying 2a00:23c4:478a:b400:18d0:bed2:d32e:65c0 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 2a00:23c4:478a:b400:18d0:bed2:d32e:65c0 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 2a00:23c4:478a:b400:4986:56fa:72e8:16e1 +0ms
  portfinder:testPort entered testPort(): trying 2a00:23c4:478a:b400:4986:56fa:72e8:16e1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 2a00:23c4:478a:b400:4986:56fa:72e8:16e1 port 60000 +1ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is fe80::749d:1eff:fec1:9460 +0ms
  portfinder:testPort entered testPort(): trying fe80::749d:1eff:fec1:9460 port 60000 +0ms
  portfinder:testPort done w/ testPort(): failed fe80::749d:1eff:fec1:9460 w/ port 60000 with error EADDRNOTAVAIL +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with an err: EADDRNOTAVAIL +0ms
  portfinder:getPort in eachSeries() result callback: err is { Error: listen EADDRNOTAVAIL fe80::749d:1eff:fec1:9460:60000
    at Object._errnoException (util.js:1024:11)
    at _exceptionWithHostPort (util.js:1046:20)
    at Server.setupListenHandle [as _listen2] (net.js:1334:19)
    at listenInCluster (net.js:1392:12)
    at doListen (net.js:1501:7)
    at _combinedTickCallback (internal/process/next_tick.js:141:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
  code: 'EADDRNOTAVAIL',
  errno: 'EADDRNOTAVAIL',
  syscall: 'listen',
  address: 'fe80::749d:1eff:fec1:9460',
  port: 60000 } +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 0.0.0.0 +1ms
  portfinder:testPort entered testPort(): trying 0.0.0.0 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 0.0.0.0 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 127.0.0.1 +0ms
  portfinder:testPort entered testPort(): trying 127.0.0.1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 127.0.0.1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is ::1 +0ms
  portfinder:testPort entered testPort(): trying ::1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK ::1 port 60000 +1ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 192.168.1.104 +0ms
  portfinder:testPort entered testPort(): trying 192.168.1.104 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 192.168.1.104 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is fdaa:bbcc:ddee:0:823:835a:257f:b5ad +0ms
  portfinder:testPort entered testPort(): trying fdaa:bbcc:ddee:0:823:835a:257f:b5ad port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK fdaa:bbcc:ddee:0:823:835a:257f:b5ad port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5 +0ms
  portfinder:testPort entered testPort(): trying fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5 port 60000 +1ms
  portfinder:testPort done w/ testPort(): OK fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 2a00:23c4:478a:b400:18d0:bed2:d32e:65c0 +0ms
  portfinder:testPort entered testPort(): trying 2a00:23c4:478a:b400:18d0:bed2:d32e:65c0 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 2a00:23c4:478a:b400:18d0:bed2:d32e:65c0 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 2a00:23c4:478a:b400:4986:56fa:72e8:16e1 +0ms
  portfinder:testPort entered testPort(): trying 2a00:23c4:478a:b400:4986:56fa:72e8:16e1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 2a00:23c4:478a:b400:4986:56fa:72e8:16e1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +1ms
  portfinder:getPort in eachSeries() iteration callback: host is fe80::ab67:7c8f:de07:c72b +0ms
  portfinder:testPort entered testPort(): trying fe80::ab67:7c8f:de07:c72b port 60000 +0ms
  portfinder:testPort done w/ testPort(): failed fe80::ab67:7c8f:de07:c72b w/ port 60000 with error EADDRNOTAVAIL +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with an err: EADDRNOTAVAIL +0ms
  portfinder:getPort in eachSeries() result callback: err is { Error: listen EADDRNOTAVAIL fe80::ab67:7c8f:de07:c72b:60000
    at Object._errnoException (util.js:1024:11)
    at _exceptionWithHostPort (util.js:1046:20)
    at Server.setupListenHandle [as _listen2] (net.js:1334:19)
    at listenInCluster (net.js:1392:12)
    at doListen (net.js:1501:7)
    at _combinedTickCallback (internal/process/next_tick.js:141:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
  code: 'EADDRNOTAVAIL',
  errno: 'EADDRNOTAVAIL',
  syscall: 'listen',
  address: 'fe80::ab67:7c8f:de07:c72b',
  port: 60000 } +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 0.0.0.0 +0ms
  portfinder:testPort entered testPort(): trying 0.0.0.0 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 0.0.0.0 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +1ms
  portfinder:getPort in eachSeries() iteration callback: host is 127.0.0.1 +0ms
  portfinder:testPort entered testPort(): trying 127.0.0.1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 127.0.0.1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is ::1 +0ms
  portfinder:testPort entered testPort(): trying ::1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK ::1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 192.168.1.104 +0ms
  portfinder:testPort entered testPort(): trying 192.168.1.104 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 192.168.1.104 port 60000 +1ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is fdaa:bbcc:ddee:0:823:835a:257f:b5ad +0ms
  portfinder:testPort entered testPort(): trying fdaa:bbcc:ddee:0:823:835a:257f:b5ad port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK fdaa:bbcc:ddee:0:823:835a:257f:b5ad port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5 +0ms
  portfinder:testPort entered testPort(): trying fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 2a00:23c4:478a:b400:18d0:bed2:d32e:65c0 +0ms
  portfinder:testPort entered testPort(): trying 2a00:23c4:478a:b400:18d0:bed2:d32e:65c0 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 2a00:23c4:478a:b400:18d0:bed2:d32e:65c0 port 60000 +1ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 2a00:23c4:478a:b400:4986:56fa:72e8:16e1 +0ms
  portfinder:testPort entered testPort(): trying 2a00:23c4:478a:b400:4986:56fa:72e8:16e1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 2a00:23c4:478a:b400:4986:56fa:72e8:16e1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is fe80::6316:bfe9:8391:733a +0ms
  portfinder:testPort entered testPort(): trying fe80::6316:bfe9:8391:733a port 60000 +0ms
  portfinder:testPort done w/ testPort(): failed fe80::6316:bfe9:8391:733a w/ port 60000 with error EADDRNOTAVAIL +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with an err: EADDRNOTAVAIL +0ms
  portfinder:getPort in eachSeries() result callback: err is { Error: listen EADDRNOTAVAIL fe80::6316:bfe9:8391:733a:60000
    at Object._errnoException (util.js:1024:11)
    at _exceptionWithHostPort (util.js:1046:20)
    at Server.setupListenHandle [as _listen2] (net.js:1334:19)
    at listenInCluster (net.js:1392:12)
    at doListen (net.js:1501:7)
    at _combinedTickCallback (internal/process/next_tick.js:141:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
  code: 'EADDRNOTAVAIL',
  errno: 'EADDRNOTAVAIL',
  syscall: 'listen',
  address: 'fe80::6316:bfe9:8391:733a',
  port: 60000 } +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 0.0.0.0 +1ms
  portfinder:testPort entered testPort(): trying 0.0.0.0 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 0.0.0.0 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 127.0.0.1 +0ms
  portfinder:testPort entered testPort(): trying 127.0.0.1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 127.0.0.1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is ::1 +0ms
  portfinder:testPort entered testPort(): trying ::1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK ::1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 192.168.1.104 +1ms
  portfinder:testPort entered testPort(): trying 192.168.1.104 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 192.168.1.104 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is fdaa:bbcc:ddee:0:823:835a:257f:b5ad +0ms
  portfinder:testPort entered testPort(): trying fdaa:bbcc:ddee:0:823:835a:257f:b5ad port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK fdaa:bbcc:ddee:0:823:835a:257f:b5ad port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5 +0ms
  portfinder:testPort entered testPort(): trying fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 2a00:23c4:478a:b400:18d0:bed2:d32e:65c0 +0ms
  portfinder:testPort entered testPort(): trying 2a00:23c4:478a:b400:18d0:bed2:d32e:65c0 port 60000 +1ms
  portfinder:testPort done w/ testPort(): OK 2a00:23c4:478a:b400:18d0:bed2:d32e:65c0 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 2a00:23c4:478a:b400:4986:56fa:72e8:16e1 +0ms
  portfinder:testPort entered testPort(): trying 2a00:23c4:478a:b400:4986:56fa:72e8:16e1 port 60000 +0ms
  portfinder:testPort done w/ testPort(): OK 2a00:23c4:478a:b400:4986:56fa:72e8:16e1 port 60000 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60000 +0ms
  portfinder:getPort in eachSeries() result callback: openPorts is [ 60000, 60000, 60000, 60000, 60000, 60000, 60000, 60000 ] +1ms
  portfinder:getPort in eachSeries() iteration callback: host is 0.0.0.0 +0ms
  portfinder:testPort entered testPort(): trying 0.0.0.0 port 60050 +0ms
  portfinder:testPort done w/ testPort(): OK 0.0.0.0 port 60050 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60050 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 127.0.0.1 +0ms
  portfinder:testPort entered testPort(): trying 127.0.0.1 port 60050 +1ms
  portfinder:testPort done w/ testPort(): OK 127.0.0.1 port 60050 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60050 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is ::1 +0ms
  portfinder:testPort entered testPort(): trying ::1 port 60050 +0ms
  portfinder:testPort done w/ testPort(): OK ::1 port 60050 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60050 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 192.168.1.104 +0ms
  portfinder:testPort entered testPort(): trying 192.168.1.104 port 60050 +0ms
  portfinder:testPort done w/ testPort(): OK 192.168.1.104 port 60050 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60050 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is fdaa:bbcc:ddee:0:823:835a:257f:b5ad +0ms
  portfinder:testPort entered testPort(): trying fdaa:bbcc:ddee:0:823:835a:257f:b5ad port 60050 +0ms
  portfinder:testPort done w/ testPort(): OK fdaa:bbcc:ddee:0:823:835a:257f:b5ad port 60050 +1ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60050 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5 +0ms
  portfinder:testPort entered testPort(): trying fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5 port 60050 +0ms
  portfinder:testPort done w/ testPort(): OK fdaa:bbcc:ddee:0:295e:a5b4:9680:4c5 port 60050 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60050 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 2a00:23c4:478a:b400:18d0:bed2:d32e:65c0 +0ms
  portfinder:testPort entered testPort(): trying 2a00:23c4:478a:b400:18d0:bed2:d32e:65c0 port 60050 +0ms
  portfinder:testPort done w/ testPort(): OK 2a00:23c4:478a:b400:18d0:bed2:d32e:65c0 port 60050 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60050 +0ms
  portfinder:getPort in eachSeries() iteration callback: host is 2a00:23c4:478a:b400:4986:56fa:72e8:16e1 +0ms
  portfinder:testPort entered testPort(): trying 2a00:23c4:478a:b400:4986:56fa:72e8:16e1 port 60050 +0ms
  portfinder:testPort done w/ testPort(): OK 2a00:23c4:478a:b400:4986:56fa:72e8:16e1 port 60050 +0ms
  portfinder:getPort in eachSeries() iteration callback testPort() callback with a success for port 60050 +1ms
  portfinder:getPort in eachSeries() result callback: openPorts is [ 60050, 60050, 60050, 60050, 60050, 60050, 60050, 60050 ] +0ms
  Docker customVars +0ms
  Docker { PORT: '60000',
  Docker   FUNCTIONS_PORT: '60050',
  Docker   FUNCTION_ENDPOINT_INTERNAL: 'http://localfaas:60050',
  Docker   FUNCTION_ENDPOINT_EXTERNAL: 'http://localhost:60050' } +0ms
Running local Graphcool cluster at http://localhost:60000
Running local FaaS runtime at http://localhost:60050
This may take several minutes
$ docker-compose up -d --remove-orphans

docker   Couldn't connect to Docker daemon - you might need to run `docker-machine start default`.
1
Exiting with code: 1

So I run docker-machine start default as suggested, but I get this:

$ docker-machine start default

Docker machine "default" does not exist. Use "docker-machine ls" to list machines. Use "docker-machine create" to add a new one.

And this is the output for docker-machine ls:

$ docker-machine ls

NAME   ACTIVE   DRIVER   STATE   URL   SWARM   DOCKER   ERRORS

Expected behavior?

It should bring up the docker environment.

Add a .graphqlconfig in the template

What feature are you missing?
I want to be able to load my new project with graphql-playground (electron) just after doing gcf init myproject

How could this feature look like in detail? Tradeoffs?
Add a default .graphqlconfig file

image

createdBy and updatedBy

Issue by kimf
Sunday Feb 19, 2017 at 22:35 GMT
Originally opened as https://github.com/graphcool/prisma/issues/107


In almost all of the applications I worked on I needed to be able to see who created and/or updated a record.

I figure this could work exactly as createdAt/updatedAt, and just get auto-populated.

One use-case I'm working on right now is to show a "notification" when a new item comes in on a subscribtion, but not for the user who performed the mutation.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.