{"action":"created","comment":{"url":"https://api.github.com/repos/strongloop/loopback-next/pulls/comments/212013033","pull_request_review_id":148539080,"id":212013033,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMjAxMzAzMw==","diff_hunk":"@@ -78,36 +91,38 @@ export function hasOne(definition?: Object) {\n  * @returns {(target:any, key:string)}\n  */\n export function hasMany<T extends typeof Entity>(\n-  targetModel: T,\n+  targetModel: T | ModelResolver<T>,\n   definition?: Partial<HasManyDefinition>,\n ) {\n   // todo(shimks): extract out common logic (such as @property.array) to\n   // @relation\n   return function(target: Object, key: string) {\n     property.array(targetModel)(target, key);\n \n-    const defaultFkName = camelCase(target.constructor.name + '_id');\n-    const hasKeyTo = definition && definition.keyTo;\n-    const hasDefaultFkProperty =\n-      targetModel.definition &&\n-      targetModel.definition.properties &&\n-      targetModel.definition.properties[defaultFkName];\n-    if (!(hasKeyTo || hasDefaultFkProperty)) {\n-      // note(shimks): should we also check for the existence of explicitly\n-      // given foreign key name on the juggler definition?\n-      throw new Error(\n-        `foreign key ${defaultFkName} not found on ${\n-          targetModel.name\n-        } model's juggler definition`,\n-      );\n+    const meta: Partial<HasManyDefinition> = {target: targetModel};\n+\n+    if (!isModelResolver(targetModel)) {\n+      const defaultFkName = camelCase(target.constructor.name + '_id');\n+      const hasKeyTo = definition && definition.keyTo;\n+      const hasDefaultFkProperty =\n+        targetModel.definition &&\n+        targetModel.definition.properties &&\n+        targetModel.definition.properties[defaultFkName];\n+      if (!(hasKeyTo || hasDefaultFkProperty)) {\n+        // note(shimks): should we also check for the existence of explicitly\n+        // given foreign key name on the juggler definition?\n+        throw new Error(\n+          `foreign key ${defaultFkName} not found on ${\n+            targetModel.name\n+          } model's juggler definition`,","path":"packages/repository/src/decorators/relation.decorator.ts","position":125,"original_position":94,"commit_id":"3acb81d62709613eff424b749f9b75115c751913","original_commit_id":"41593ee2c5e66118b003e706fc3e2ffefcbf1c17","user":{"login":"virkt25","id":3311536,"node_id":"MDQ6VXNlcjMzMTE1MzY=","avatar_url":"https://avatars1.githubusercontent.com/u/3311536?v=4","gravatar_id":"","url":"https://api.github.com/users/virkt25","html_url":"https://github.com/virkt25","followers_url":"https://api.github.com/users/virkt25/followers","following_url":"https://api.github.com/users/virkt25/following{/other_user}","gists_url":"https://api.github.com/users/virkt25/gists{/gist_id}","starred_url":"https://api.github.com/users/virkt25/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/virkt25/subscriptions","organizations_url":"https://api.github.com/users/virkt25/orgs","repos_url":"https://api.github.com/users/virkt25/repos","events_url":"https://api.github.com/users/virkt25/events{/privacy}","received_events_url":"https://api.github.com/users/virkt25/received_events","type":"User","site_admin":false},"body":"Will people know what `juggler` is? I would like it at `model's definition`. ","created_at":"2018-08-22T16:02:20Z","updated_at":"2018-08-22T16:29:42Z","html_url":"https://github.com/strongloop/loopback-next/pull/1618#discussion_r212013033","pull_request_url":"https://api.github.com/repos/strongloop/loopback-next/pulls/1618","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/strongloop/loopback-next/pulls/comments/212013033"},"html":{"href":"https://github.com/strongloop/loopback-next/pull/1618#discussion_r212013033"},"pull_request":{"href":"https://api.github.com/repos/strongloop/loopback-next/pulls/1618"}}},"pull_request":{"url":"https://api.github.com/repos/strongloop/loopback-next/pulls/1618","id":209198525,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA5MTk4NTI1","html_url":"https://github.com/strongloop/loopback-next/pull/1618","diff_url":"https://github.com/strongloop/loopback-next/pull/1618.diff","patch_url":"https://github.com/strongloop/loopback-next/pull/1618.patch","issue_url":"https://api.github.com/repos/strongloop/loopback-next/issues/1618","number":1618,"state":"open","locked":false,"title":"feat(repository): introduce resolver and hasMany key inferrence with belongsTo decorator AND add belongsTo repository","user":{"login":"shimks","id":18518689,"node_id":"MDQ6VXNlcjE4NTE4Njg5","avatar_url":"https://avatars2.githubusercontent.com/u/18518689?v=4","gravatar_id":"","url":"https://api.github.com/users/shimks","html_url":"https://github.com/shimks","followers_url":"https://api.github.com/users/shimks/followers","following_url":"https://api.github.com/users/shimks/following{/other_user}","gists_url":"https://api.github.com/users/shimks/gists{/gist_id}","starred_url":"https://api.github.com/users/shimks/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shimks/subscriptions","organizations_url":"https://api.github.com/users/shimks/orgs","repos_url":"https://api.github.com/users/shimks/repos","events_url":"https://api.github.com/users/shimks/events{/privacy}","received_events_url":"https://api.github.com/users/shimks/received_events","type":"User","site_admin":false},"body":"### **1st and 2nd commit: Type resolver and `keyTo` inferrence**\r\n\r\nThere is an issue with relation and decorators where model resolution doesn't occur properly. A short example to illustrate the problem:\r\n```ts\r\nclass Customer {\r\nid: number;\r\n@hasMany(Order) orders: Order[];\r\n}\r\n// in another file\r\nclass Order {\r\n@belongsTo(Customer) customerId: number;\r\n}\r\n```\r\nWhen Customer is being defined, Order will be read and be attempted to be defined. As Order is being defined, it comes across Customer which has yet to be defined, so the metadata being stored by the decorators is incomplete at the time it's being stored.\r\n\r\nThe work around for this is to introduce a resolver; a resolver is a function that would return the given model when called. So instead of passing in the Models themselves these decorators, you would pass in their resolver instead: `@hasMany(() => Order)` and `@belongsTo(() => Customer)`.\r\n\r\nAnother feature included in these commits is automatic building of hasMany metadata based on existing metadata on belongsTo. More specifically, `keyTo` is inferred from the name of the property key in which belongsTo metadata exists.\r\n\r\nIn summary, this PR introduces:\r\n- logic to detect circular dependency (only with `@hasMany` and `@property.array`)\r\n- `keyTo` inference from the key decorated by `@belongsTo`\r\n\r\n### **3rd commit: belongsTo repository**\r\n\r\nThere is a problem where if belongsTo and hasMany relations are defined on the repositories, our context system will throw an error due to the cyclic dependence the relations create. To illustrate the example in a dirty dirty code snippet:\r\n```js\r\n// ... customer repo constructor\r\nconstructor(@repository(OrderRepository) orderRepo)\r\n// ... order repo constructor\r\nconstructor(@repository(CustomerRepository) customerRepo)\r\n```\r\nTake an event where customer repository needs to be instantiated. An injection on `orderRepo` will attempted to be made and an order repository will be instantiated. When an order repository is being instantiated, a customer repository needs to be injected, and therefore a circular dependency is established.\r\n\r\nThe solution to solving the dependency is to use a resolver like we did for the commits before. Take a look at [this code snippet](https://github.com/strongloop/loopback-next/blob/3acb81d62709613eff424b749f9b75115c751913/packages/repository/test/fixtures/repositories/customer.repository.ts) and [this](https://github.com/strongloop/loopback-next/blob/3acb81d62709613eff424b749f9b75115c751913/packages/repository/test/fixtures/repositories/order.repository.ts) to see how the UX would look like. I'll probably work on introducing a decorator that won't promisify the repositories here.\r\n\r\nrelated to #1361\r\n\r\n### Things that have not been done:\r\n- [ ] Create a decorator to replace `@inject.getter` usage in our relation repositories\r\n- [ ] Extraction of common code between hasMany and belongsTo\r\n- [ ] Extensive test coverage\r\n- [ ] License headers\r\n- [ ] Docs and TSDocs\r\n\r\n## Checklist\r\n\r\n- [ ] `npm test` passes on your machine\r\n- [ ] New tests added or existing tests modified to cover all changes\r\n- [ ] Code conforms with the [style guide](http://loopback.io/doc/en/contrib/style-guide.html)\r\n- [ ] API Documentation in code was updated\r\n- [ ] Documentation in [/docs/site](../tree/master/docs/site) was updated\r\n- [ ] Affected artifact templates in `packages/cli` were updated\r\n- [ ] Affected example projects in `examples/*` were updated\r\n","created_at":"2018-08-17T16:31:42Z","updated_at":"2018-08-22T16:29:42Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5589301000c8f45da57dd80c23f9f59cc2fdd5df","assignee":null,"assignees":[],"requested_reviewers":[{"login":"bajtos","id":1140553,"node_id":"MDQ6VXNlcjExNDA1NTM=","avatar_url":"https://avatars1.githubusercontent.com/u/1140553?v=4","gravatar_id":"","url":"https://api.github.com/users/bajtos","html_url":"https://github.com/bajtos","followers_url":"https://api.github.com/users/bajtos/followers","following_url":"https://api.github.com/users/bajtos/following{/other_user}","gists_url":"https://api.github.com/users/bajtos/gists{/gist_id}","starred_url":"https://api.github.com/users/bajtos/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bajtos/subscriptions","organizations_url":"https://api.github.com/users/bajtos/orgs","repos_url":"https://api.github.com/users/bajtos/repos","events_url":"https://api.github.com/users/bajtos/events{/privacy}","received_events_url":"https://api.github.com/users/bajtos/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":{"url":"https://api.github.com/repos/strongloop/loopback-next/milestones/42","html_url":"https://github.com/strongloop/loopback-next/milestone/42","labels_url":"https://api.github.com/repos/strongloop/loopback-next/milestones/42/labels","id":3384880,"node_id":"MDk6TWlsZXN0b25lMzM4NDg4MA==","number":42,"title":"August Milestone","description":"","creator":{"login":"dhmlau","id":25489897,"node_id":"MDQ6VXNlcjI1NDg5ODk3","avatar_url":"https://avatars3.githubusercontent.com/u/25489897?v=4","gravatar_id":"","url":"https://api.github.com/users/dhmlau","html_url":"https://github.com/dhmlau","followers_url":"https://api.github.com/users/dhmlau/followers","following_url":"https://api.github.com/users/dhmlau/following{/other_user}","gists_url":"https://api.github.com/users/dhmlau/gists{/gist_id}","starred_url":"https://api.github.com/users/dhmlau/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dhmlau/subscriptions","organizations_url":"https://api.github.com/users/dhmlau/orgs","repos_url":"https://api.github.com/users/dhmlau/repos","events_url":"https://api.github.com/users/dhmlau/events{/privacy}","received_events_url":"https://api.github.com/users/dhmlau/received_events","type":"User","site_admin":false},"open_issues":11,"closed_issues":18,"state":"open","created_at":"2018-05-29T17:26:16Z","updated_at":"2018-08-21T21:39:40Z","due_on":"2018-08-31T07:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/strongloop/loopback-next/pulls/1618/commits","review_comments_url":"https://api.github.com/repos/strongloop/loopback-next/pulls/1618/comments","review_comment_url":"https://api.github.com/repos/strongloop/loopback-next/pulls/comments{/number}","comments_url":"https://api.github.com/repos/strongloop/loopback-next/issues/1618/comments","statuses_url":"https://api.github.com/repos/strongloop/loopback-next/statuses/3acb81d62709613eff424b749f9b75115c751913","head":{"label":"strongloop:belongsTo","ref":"belongsTo","sha":"3acb81d62709613eff424b749f9b75115c751913","user":{"login":"strongloop","id":3020012,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMwMjAwMTI=","avatar_url":"https://avatars1.githubusercontent.com/u/3020012?v=4","gravatar_id":"","url":"https://api.github.com/users/strongloop","html_url":"https://github.com/strongloop","followers_url":"https://api.github.com/users/strongloop/followers","following_url":"https://api.github.com/users/strongloop/following{/other_user}","gists_url":"https://api.github.com/users/strongloop/gists{/gist_id}","starred_url":"https://api.github.com/users/strongloop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/strongloop/subscriptions","organizations_url":"https://api.github.com/users/strongloop/orgs","repos_url":"https://api.github.com/users/strongloop/repos","events_url":"https://api.github.com/users/strongloop/events{/privacy}","received_events_url":"https://api.github.com/users/strongloop/received_events","type":"Organization","site_admin":false},"repo":{"id":78452015,"node_id":"MDEwOlJlcG9zaXRvcnk3ODQ1MjAxNQ==","name":"loopback-next","full_name":"strongloop/loopback-next","owner":{"login":"strongloop","id":3020012,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMwMjAwMTI=","avatar_url":"https://avatars1.githubusercontent.com/u/3020012?v=4","gravatar_id":"","url":"https://api.github.com/users/strongloop","html_url":"https://github.com/strongloop","followers_url":"https://api.github.com/users/strongloop/followers","following_url":"https://api.github.com/users/strongloop/following{/other_user}","gists_url":"https://api.github.com/users/strongloop/gists{/gist_id}","starred_url":"https://api.github.com/users/strongloop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/strongloop/subscriptions","organizations_url":"https://api.github.com/users/strongloop/orgs","repos_url":"https://api.github.com/users/strongloop/repos","events_url":"https://api.github.com/users/strongloop/events{/privacy}","received_events_url":"https://api.github.com/users/strongloop/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/strongloop/loopback-next","description":"LoopBack makes it easy to build modern API applications that require complex integrations.","fork":false,"url":"https://api.github.com/repos/strongloop/loopback-next","forks_url":"https://api.github.com/repos/strongloop/loopback-next/forks","keys_url":"https://api.github.com/repos/strongloop/loopback-next/keys{/key_id}","collaborators_url":"https://api.github.com/repos/strongloop/loopback-next/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/strongloop/loopback-next/teams","hooks_url":"https://api.github.com/repos/strongloop/loopback-next/hooks","issue_events_url":"https://api.github.com/repos/strongloop/loopback-next/issues/events{/number}","events_url":"https://api.github.com/repos/strongloop/loopback-next/events","assignees_url":"https://api.github.com/repos/strongloop/loopback-next/assignees{/user}","branches_url":"https://api.github.com/repos/strongloop/loopback-next/branches{/branch}","tags_url":"https://api.github.com/repos/strongloop/loopback-next/tags","blobs_url":"https://api.github.com/repos/strongloop/loopback-next/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/strongloop/loopback-next/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/strongloop/loopback-next/git/refs{/sha}","trees_url":"https://api.github.com/repos/strongloop/loopback-next/git/trees{/sha}","statuses_url":"https://api.github.com/repos/strongloop/loopback-next/statuses/{sha}","languages_url":"https://api.github.com/repos/strongloop/loopback-next/languages","stargazers_url":"https://api.github.com/repos/strongloop/loopback-next/stargazers","contributors_url":"https://api.github.com/repos/strongloop/loopback-next/contributors","subscribers_url":"https://api.github.com/repos/strongloop/loopback-next/subscribers","subscription_url":"https://api.github.com/repos/strongloop/loopback-next/subscription","commits_url":"https://api.github.com/repos/strongloop/loopback-next/commits{/sha}","git_commits_url":"https://api.github.com/repos/strongloop/loopback-next/git/commits{/sha}","comments_url":"https://api.github.com/repos/strongloop/loopback-next/comments{/number}","issue_comment_url":"https://api.github.com/repos/strongloop/loopback-next/issues/comments{/number}","contents_url":"https://api.github.com/repos/strongloop/loopback-next/contents/{+path}","compare_url":"https://api.github.com/repos/strongloop/loopback-next/compare/{base}...{head}","merges_url":"https://api.github.com/repos/strongloop/loopback-next/merges","archive_url":"https://api.github.com/repos/strongloop/loopback-next/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/strongloop/loopback-next/downloads","issues_url":"https://api.github.com/repos/strongloop/loopback-next/issues{/number}","pulls_url":"https://api.github.com/repos/strongloop/loopback-next/pulls{/number}","milestones_url":"https://api.github.com/repos/strongloop/loopback-next/milestones{/number}","notifications_url":"https://api.github.com/repos/strongloop/loopback-next/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/strongloop/loopback-next/labels{/name}","releases_url":"https://api.github.com/repos/strongloop/loopback-next/releases{/id}","deployments_url":"https://api.github.com/repos/strongloop/loopback-next/deployments","created_at":"2017-01-09T17:27:14Z","updated_at":"2018-08-22T15:18:27Z","pushed_at":"2018-08-22T16:02:08Z","git_url":"git://github.com/strongloop/loopback-next.git","ssh_url":"git@github.com:strongloop/loopback-next.git","clone_url":"https://github.com/strongloop/loopback-next.git","svn_url":"https://github.com/strongloop/loopback-next","homepage":"http://loopback.io","size":7862,"stargazers_count":762,"watchers_count":762,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":82,"mirror_url":null,"archived":false,"open_issues_count":244,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":82,"open_issues":244,"watchers":762,"default_branch":"master"}},"base":{"label":"strongloop:master","ref":"master","sha":"b23272f91cd60c17c4663c98bfcd50865fc61d0b","user":{"login":"strongloop","id":3020012,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMwMjAwMTI=","avatar_url":"https://avatars1.githubusercontent.com/u/3020012?v=4","gravatar_id":"","url":"https://api.github.com/users/strongloop","html_url":"https://github.com/strongloop","followers_url":"https://api.github.com/users/strongloop/followers","following_url":"https://api.github.com/users/strongloop/following{/other_user}","gists_url":"https://api.github.com/users/strongloop/gists{/gist_id}","starred_url":"https://api.github.com/users/strongloop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/strongloop/subscriptions","organizations_url":"https://api.github.com/users/strongloop/orgs","repos_url":"https://api.github.com/users/strongloop/repos","events_url":"https://api.github.com/users/strongloop/events{/privacy}","received_events_url":"https://api.github.com/users/strongloop/received_events","type":"Organization","site_admin":false},"repo":{"id":78452015,"node_id":"MDEwOlJlcG9zaXRvcnk3ODQ1MjAxNQ==","name":"loopback-next","full_name":"strongloop/loopback-next","owner":{"login":"strongloop","id":3020012,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMwMjAwMTI=","avatar_url":"https://avatars1.githubusercontent.com/u/3020012?v=4","gravatar_id":"","url":"https://api.github.com/users/strongloop","html_url":"https://github.com/strongloop","followers_url":"https://api.github.com/users/strongloop/followers","following_url":"https://api.github.com/users/strongloop/following{/other_user}","gists_url":"https://api.github.com/users/strongloop/gists{/gist_id}","starred_url":"https://api.github.com/users/strongloop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/strongloop/subscriptions","organizations_url":"https://api.github.com/users/strongloop/orgs","repos_url":"https://api.github.com/users/strongloop/repos","events_url":"https://api.github.com/users/strongloop/events{/privacy}","received_events_url":"https://api.github.com/users/strongloop/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/strongloop/loopback-next","description":"LoopBack makes it easy to build modern API applications that require complex integrations.","fork":false,"url":"https://api.github.com/repos/strongloop/loopback-next","forks_url":"https://api.github.com/repos/strongloop/loopback-next/forks","keys_url":"https://api.github.com/repos/strongloop/loopback-next/keys{/key_id}","collaborators_url":"https://api.github.com/repos/strongloop/loopback-next/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/strongloop/loopback-next/teams","hooks_url":"https://api.github.com/repos/strongloop/loopback-next/hooks","issue_events_url":"https://api.github.com/repos/strongloop/loopback-next/issues/events{/number}","events_url":"https://api.github.com/repos/strongloop/loopback-next/events","assignees_url":"https://api.github.com/repos/strongloop/loopback-next/assignees{/user}","branches_url":"https://api.github.com/repos/strongloop/loopback-next/branches{/branch}","tags_url":"https://api.github.com/repos/strongloop/loopback-next/tags","blobs_url":"https://api.github.com/repos/strongloop/loopback-next/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/strongloop/loopback-next/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/strongloop/loopback-next/git/refs{/sha}","trees_url":"https://api.github.com/repos/strongloop/loopback-next/git/trees{/sha}","statuses_url":"https://api.github.com/repos/strongloop/loopback-next/statuses/{sha}","languages_url":"https://api.github.com/repos/strongloop/loopback-next/languages","stargazers_url":"https://api.github.com/repos/strongloop/loopback-next/stargazers","contributors_url":"https://api.github.com/repos/strongloop/loopback-next/contributors","subscribers_url":"https://api.github.com/repos/strongloop/loopback-next/subscribers","subscription_url":"https://api.github.com/repos/strongloop/loopback-next/subscription","commits_url":"https://api.github.com/repos/strongloop/loopback-next/commits{/sha}","git_commits_url":"https://api.github.com/repos/strongloop/loopback-next/git/commits{/sha}","comments_url":"https://api.github.com/repos/strongloop/loopback-next/comments{/number}","issue_comment_url":"https://api.github.com/repos/strongloop/loopback-next/issues/comments{/number}","contents_url":"https://api.github.com/repos/strongloop/loopback-next/contents/{+path}","compare_url":"https://api.github.com/repos/strongloop/loopback-next/compare/{base}...{head}","merges_url":"https://api.github.com/repos/strongloop/loopback-next/merges","archive_url":"https://api.github.com/repos/strongloop/loopback-next/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/strongloop/loopback-next/downloads","issues_url":"https://api.github.com/repos/strongloop/loopback-next/issues{/number}","pulls_url":"https://api.github.com/repos/strongloop/loopback-next/pulls{/number}","milestones_url":"https://api.github.com/repos/strongloop/loopback-next/milestones{/number}","notifications_url":"https://api.github.com/repos/strongloop/loopback-next/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/strongloop/loopback-next/labels{/name}","releases_url":"https://api.github.com/repos/strongloop/loopback-next/releases{/id}","deployments_url":"https://api.github.com/repos/strongloop/loopback-next/deployments","created_at":"2017-01-09T17:27:14Z","updated_at":"2018-08-22T15:18:27Z","pushed_at":"2018-08-22T16:02:08Z","git_url":"git://github.com/strongloop/loopback-next.git","ssh_url":"git@github.com:strongloop/loopback-next.git","clone_url":"https://github.com/strongloop/loopback-next.git","svn_url":"https://github.com/strongloop/loopback-next","homepage":"http://loopback.io","size":7862,"stargazers_count":762,"watchers_count":762,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":82,"mirror_url":null,"archived":false,"open_issues_count":244,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":82,"open_issues":244,"watchers":762,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/strongloop/loopback-next/pulls/1618"},"html":{"href":"https://github.com/strongloop/loopback-next/pull/1618"},"issue":{"href":"https://api.github.com/repos/strongloop/loopback-next/issues/1618"},"comments":{"href":"https://api.github.com/repos/strongloop/loopback-next/issues/1618/comments"},"review_comments":{"href":"https://api.github.com/repos/strongloop/loopback-next/pulls/1618/comments"},"review_comment":{"href":"https://api.github.com/repos/strongloop/loopback-next/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/strongloop/loopback-next/pulls/1618/commits"},"statuses":{"href":"https://api.github.com/repos/strongloop/loopback-next/statuses/3acb81d62709613eff424b749f9b75115c751913"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"virkt25"}}