From cd66a816e236912d27daf6e2c4e510ae418d33bf Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Sat, 10 Mar 2018 13:21:19 -0500 Subject: [PATCH 01/90] Major updates --- src/API.js | 85 --------- src/Models/GroupProjects.js | 18 -- src/Models/Groups.js | 53 ------ src/Models/Issues.js | 9 - src/Models/MergeRequests.js | 9 - src/Models/ProjectDeployKeys.js | 24 --- src/Models/ProjectEnvironments.js | 12 -- src/Models/ProjectHooks.js | 36 ---- src/Models/ProjectIssues.js | 62 ------ src/Models/ProjectJobs.js | 12 -- src/Models/ProjectLabels.js | 42 ----- src/Models/ProjectMergeRequestChanges.js | 12 -- src/Models/ProjectMergeRequestCommits.js | 12 -- src/Models/ProjectMergeRequestVersions.js | 18 -- src/Models/ProjectMergeRequests.js | 120 ------------ src/Models/ProjectPipelines.js | 12 -- src/Models/ProjectProtectedBranches.js | 30 --- src/Models/ProjectRepository.js | 55 ------ src/Models/ProjectRepositoryBranches.js | 42 ----- src/Models/ProjectRepositoryCommitComments.js | 18 -- src/Models/ProjectRepositoryCommits.js | 37 ---- src/Models/ProjectRepositoryFiles.js | 44 ----- src/Models/ProjectRepositoryTags.js | 30 --- src/Models/ProjectRunners.js | 26 --- src/Models/ProjectServices.js | 24 --- src/Models/ProjectTriggers.js | 36 ---- src/Models/Projects.js | 142 -------------- src/Models/ResourceAccessRequests.js | 45 ----- src/Models/ResourceCustomAttributes.js | 36 ---- src/Models/ResourceMembers.js | 47 ----- src/Models/ResourceMilestoneIssues.js | 18 -- src/Models/ResourceMilestoneMergeRequests.js | 18 -- src/Models/ResourceMilestones.js | 40 ---- src/Models/ResourceNotes.js | 47 ----- src/Models/Runners.js | 38 ---- src/Models/UserKeys.js | 28 --- src/Models/Users.js | 46 ----- src/Models/Version.js | 9 - src/Models/index.js | 17 -- src/Utils.js | 9 - src/index.js | 10 +- .../BaseService.js} | 33 +--- src/infrastructure/RequestHelper.js | 59 ++++++ src/infrastructure/index.js | 2 + src/services/Branches.js | 57 ++++++ src/services/Commits.js | 59 ++++++ src/services/DeployKeys.js | 23 +++ src/services/Environments.js | 11 ++ src/services/GroupAccessRequests.js | 9 + src/services/GroupCustomAttributes.js | 9 + src/services/GroupMembers.js | 9 + src/services/GroupMilestones.js | 9 + src/services/GroupProjects.js | 17 ++ src/services/Groups.js | 37 ++++ src/services/Issues.js | 72 +++++++ src/services/Jobs.js | 11 ++ src/services/Labels.js | 54 ++++++ src/services/MergeRequestNotes.js | 9 + src/services/MergeRequestVersions.js | 23 +++ src/services/MergeRequests.js | 176 ++++++++++++++++++ src/services/Pipelines.js | 11 ++ src/services/ProjectAccessRequests.js | 9 + src/services/ProjectCustomAttributes.js | 9 + src/services/ProjectHooks.js | 43 +++++ src/services/ProjectMembers.js | 9 + src/services/ProjectMilestones.js | 9 + src/services/ProjectRunners.js | 25 +++ src/services/ProjectSnippets.js | 9 + src/services/Projects.js | 108 +++++++++++ src/services/ProtectedBranches.js | 39 ++++ src/services/Repositories.js | 49 +++++ src/services/RepositoryFiles.js | 56 ++++++ src/services/Runners.js | 37 ++++ src/services/Services.js | 30 +++ src/services/SystemHooks.js | 41 ++++ src/services/Tags.js | 35 ++++ src/services/Triggers.js | 35 ++++ src/services/UserCustomAttributes.js | 9 + src/services/Users.js | 174 +++++++++++++++++ src/services/Version.js | 9 + src/services/index.js | 41 ++++ src/templates/ResourceAccessRequests.js | 57 ++++++ src/templates/ResourceCustomAttributes.js | 48 +++++ src/templates/ResourceMembers.js | 56 ++++++ src/templates/ResourceMilestones.js | 50 +++++ src/templates/ResourceNotes.js | 46 +++++ src/templates/index.js | 5 + 87 files changed, 1712 insertions(+), 1444 deletions(-) delete mode 100644 src/API.js delete mode 100644 src/Models/GroupProjects.js delete mode 100644 src/Models/Groups.js delete mode 100644 src/Models/Issues.js delete mode 100644 src/Models/MergeRequests.js delete mode 100644 src/Models/ProjectDeployKeys.js delete mode 100644 src/Models/ProjectEnvironments.js delete mode 100644 src/Models/ProjectHooks.js delete mode 100644 src/Models/ProjectIssues.js delete mode 100644 src/Models/ProjectJobs.js delete mode 100644 src/Models/ProjectLabels.js delete mode 100644 src/Models/ProjectMergeRequestChanges.js delete mode 100644 src/Models/ProjectMergeRequestCommits.js delete mode 100644 src/Models/ProjectMergeRequestVersions.js delete mode 100644 src/Models/ProjectMergeRequests.js delete mode 100644 src/Models/ProjectPipelines.js delete mode 100644 src/Models/ProjectProtectedBranches.js delete mode 100644 src/Models/ProjectRepository.js delete mode 100644 src/Models/ProjectRepositoryBranches.js delete mode 100644 src/Models/ProjectRepositoryCommitComments.js delete mode 100644 src/Models/ProjectRepositoryCommits.js delete mode 100644 src/Models/ProjectRepositoryFiles.js delete mode 100644 src/Models/ProjectRepositoryTags.js delete mode 100644 src/Models/ProjectRunners.js delete mode 100644 src/Models/ProjectServices.js delete mode 100644 src/Models/ProjectTriggers.js delete mode 100644 src/Models/Projects.js delete mode 100644 src/Models/ResourceAccessRequests.js delete mode 100644 src/Models/ResourceCustomAttributes.js delete mode 100644 src/Models/ResourceMembers.js delete mode 100644 src/Models/ResourceMilestoneIssues.js delete mode 100644 src/Models/ResourceMilestoneMergeRequests.js delete mode 100644 src/Models/ResourceMilestones.js delete mode 100644 src/Models/ResourceNotes.js delete mode 100644 src/Models/Runners.js delete mode 100644 src/Models/UserKeys.js delete mode 100644 src/Models/Users.js delete mode 100644 src/Models/Version.js delete mode 100644 src/Models/index.js delete mode 100644 src/Utils.js rename src/{Models/BaseModel.js => infrastructure/BaseService.js} (53%) create mode 100644 src/infrastructure/RequestHelper.js create mode 100644 src/infrastructure/index.js create mode 100644 src/services/Branches.js create mode 100644 src/services/Commits.js create mode 100644 src/services/DeployKeys.js create mode 100644 src/services/Environments.js create mode 100644 src/services/GroupAccessRequests.js create mode 100644 src/services/GroupCustomAttributes.js create mode 100644 src/services/GroupMembers.js create mode 100644 src/services/GroupMilestones.js create mode 100644 src/services/GroupProjects.js create mode 100644 src/services/Groups.js create mode 100644 src/services/Issues.js create mode 100644 src/services/Jobs.js create mode 100644 src/services/Labels.js create mode 100644 src/services/MergeRequestNotes.js create mode 100644 src/services/MergeRequestVersions.js create mode 100644 src/services/MergeRequests.js create mode 100644 src/services/Pipelines.js create mode 100644 src/services/ProjectAccessRequests.js create mode 100644 src/services/ProjectCustomAttributes.js create mode 100644 src/services/ProjectHooks.js create mode 100644 src/services/ProjectMembers.js create mode 100644 src/services/ProjectMilestones.js create mode 100644 src/services/ProjectRunners.js create mode 100644 src/services/ProjectSnippets.js create mode 100644 src/services/Projects.js create mode 100644 src/services/ProtectedBranches.js create mode 100644 src/services/Repositories.js create mode 100644 src/services/RepositoryFiles.js create mode 100644 src/services/Runners.js create mode 100644 src/services/Services.js create mode 100644 src/services/SystemHooks.js create mode 100644 src/services/Tags.js create mode 100644 src/services/Triggers.js create mode 100644 src/services/UserCustomAttributes.js create mode 100644 src/services/Users.js create mode 100644 src/services/Version.js create mode 100644 src/services/index.js create mode 100644 src/templates/ResourceAccessRequests.js create mode 100644 src/templates/ResourceCustomAttributes.js create mode 100644 src/templates/ResourceMembers.js create mode 100644 src/templates/ResourceMilestones.js create mode 100644 src/templates/ResourceNotes.js create mode 100644 src/templates/index.js diff --git a/src/API.js b/src/API.js deleted file mode 100644 index 1023dccd..00000000 --- a/src/API.js +++ /dev/null @@ -1,85 +0,0 @@ -import Request from 'request-promise'; -import { Groups, Projects, Issues, Runners, Users, MergeRequests, Version } from './Models'; - -function defaultRequest(url, endpoint, { - headers, - body, - qs, - formData, - resolveWithFullResponse = false, -}) { - const params = { - url: `${url}${endpoint}`, - headers, - json: true, - }; - - if (body) params.body = body; - if (qs) params.qs = qs; - if (formData) params.formData = formData; - - params.resolveWithFullResponse = resolveWithFullResponse; - - return params; -} - -class API { - constructor({ url = 'https://gitlab.com', token, oauthToken }) { - this.url = `${url}/api/v4/`; - this.headers = {}; - - if (oauthToken) { - this.headers.Authorization = `Bearer ${oauthToken}`; - } else if (token) { - this.headers['private-token'] = token; - } else { - throw new Error('`token` (private-token) or `oauth_token` is mandatory'); - } - - this.groups = new Groups(this); - this.projects = new Projects(this); - this.issues = new Issues(this); - this.users = new Users(this); - this.runners = new Runners(this); - this.mergeRequests = new MergeRequests(this); - this.version = new Version(this); - } - - get(endpoint, options, fullResponse = false) { - return Request.get(defaultRequest(this.url, endpoint, { - headers: this.headers, - qs: options, - resolveWithFullResponse: fullResponse, - })); - } - - post(endpoint, options) { - return Request.post(defaultRequest(this.url, endpoint, { - headers: this.headers, - body: options, - })); - } - - postForm(endpoint, options) { - return Request.post(defaultRequest(this.url, endpoint, { - headers: this.headers, - formData: options, - })); - } - - put(endpoint, options) { - return Request.put(defaultRequest(this.url, endpoint, { - headers: this.headers, - body: options, - })); - } - - delete(endpoint, options) { - return Request.delete(defaultRequest(this.url, endpoint, { - headers: this.headers, - qs: options, - })); - } -} - -export default API; diff --git a/src/Models/GroupProjects.js b/src/Models/GroupProjects.js deleted file mode 100644 index 36684c64..00000000 --- a/src/Models/GroupProjects.js +++ /dev/null @@ -1,18 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class GroupProjects extends BaseModel { - all(groupId, options = {}) { - const gId = parse(groupId); - - return this.get(`groups/${gId}/projects`, options); - } - - add(groupId, projectId) { - const [gId, pId] = [groupId, projectId].map(parse); - - return this.post(`groups/${gId}/projects/${pId}`); - } -} - -export default GroupProjects; diff --git a/src/Models/Groups.js b/src/Models/Groups.js deleted file mode 100644 index 56f42867..00000000 --- a/src/Models/Groups.js +++ /dev/null @@ -1,53 +0,0 @@ -import BaseModel from './BaseModel'; -import GroupProjects from './GroupProjects'; -import ResourceAccessRequests from './ResourceAccessRequests'; -import ResourceCustomAttributes from './ResourceCustomAttributes'; -import ResourceMembers from './ResourceMembers'; -import ResourceMilestones from './ResourceMilestones'; -import { parse } from '../Utils'; - -class Groups extends BaseModel { - constructor(...args) { - super(...args); - - this.projects = new GroupProjects(...args); - this.accessRequests = new ResourceAccessRequests('groups', ...args); - this.customAttributes = new ResourceCustomAttributes('groups', ...args); - this.members = new ResourceMembers('groups', ...args); - this.milestones = new ResourceMilestones('groups', ...args); - } - - all(options = {}) { - return this.get('groups', options); - } - - allSubgroups(groupId, options = {}) { - const gId = parse(groupId); - - return this.get(`groups/${gId}/subgroups`, options); - } - - show(groupId) { - const gId = parse(groupId); - - return this.get(`groups/${gId}`); - } - - create(options = {}) { - return this.post('groups', options); - } - - remove(groupId) { - const gId = parse(groupId); - - return this.delete(`groups/${gId}`); - } - - search(nameOrPath) { - return this.get('groups', { - search: nameOrPath, - }); - } -} - -export default Groups; diff --git a/src/Models/Issues.js b/src/Models/Issues.js deleted file mode 100644 index cf42690c..00000000 --- a/src/Models/Issues.js +++ /dev/null @@ -1,9 +0,0 @@ -import BaseModel from './BaseModel'; - -class Issues extends BaseModel { - all(options = {}) { - return this.get('issues', options); - } -} - -export default Issues; diff --git a/src/Models/MergeRequests.js b/src/Models/MergeRequests.js deleted file mode 100644 index a5928ad9..00000000 --- a/src/Models/MergeRequests.js +++ /dev/null @@ -1,9 +0,0 @@ -import BaseModel from './BaseModel'; - -class MergeRequests extends BaseModel { - all(options = {}) { - return this.get('merge_requests', options); - } -} - -export default MergeRequests; diff --git a/src/Models/ProjectDeployKeys.js b/src/Models/ProjectDeployKeys.js deleted file mode 100644 index 2bc86727..00000000 --- a/src/Models/ProjectDeployKeys.js +++ /dev/null @@ -1,24 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ProjectDeployKeys extends BaseModel { - add(projectId, options = {}) { - const pId = parse(projectId); - - return this.post(`projects/${pId}/deploy_keys`, options); - } - - all(projectId) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/deploy_keys`); - } - - show(projectId, keyId) { - const [pId, kId] = [projectId, keyId].map(parse); - - return this.get(`projects/${pId}/deploy_keys/${kId}`); - } -} - -export default ProjectDeployKeys; diff --git a/src/Models/ProjectEnvironments.js b/src/Models/ProjectEnvironments.js deleted file mode 100644 index 8f61d7e4..00000000 --- a/src/Models/ProjectEnvironments.js +++ /dev/null @@ -1,12 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class Environments extends BaseModel { - all(projectId, options = {}) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/environments`, options); - } -} - -export default Environments; diff --git a/src/Models/ProjectHooks.js b/src/Models/ProjectHooks.js deleted file mode 100644 index bfe0c55a..00000000 --- a/src/Models/ProjectHooks.js +++ /dev/null @@ -1,36 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ProjectHooks extends BaseModel { - all(projectId) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/hooks`); - } - - show(projectId, hookId) { - const [pId, hId] = [projectId, hookId].map(parse); - - return this.get(`projects/${pId}/hooks/${hId}`); - } - - add(projectId, url, options = {}) { - const pId = parse(projectId); - - return this.post(`projects/${pId}/hooks`, Object.assign({ url }, options)); - } - - edit(projectId, hookId, url, options = {}) { - const [pId, hId] = [projectId, hookId].map(parse); - - return this.put(`projects/${pId}/hooks/${hId}`, Object.assign({ url }, options)); - } - - remove(projectId, hookId) { - const [pId, hId] = [projectId, hookId].map(parse); - - return this.delete(`projects/${pId}/hooks/${hId}`); - } -} - -export default ProjectHooks; diff --git a/src/Models/ProjectIssues.js b/src/Models/ProjectIssues.js deleted file mode 100644 index 91794206..00000000 --- a/src/Models/ProjectIssues.js +++ /dev/null @@ -1,62 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; -import ResourceNotes from './ResourceNotes'; - -class ProjectIssues extends BaseModel { - constructor(...args) { - super(...args); - - this.notes = new ResourceNotes('projects', 'issues', ...args); - } - - all(projectId, options = {}) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/issues`, options); - } - - create(projectId, options = {}) { - const pId = parse(projectId); - - return this.post(`projects/${pId}/issues`, options); - } - - edit(projectId, issueId, options = {}) { - const [pId, iId] = [projectId, issueId].map(parse); - - return this.put(`projects/${pId}/issues/${iId}`, options); - } - - link(projectId, issueIId, targetProjectId, targetIssueId, options = {}) { - const [pId, iId] = [projectId, issueIId].map(parse); - const [targetpId, targetIId] = [targetProjectId, targetIssueId].map(parse); - - return this.post(`projects/${pId}/issues/${iId}/links`, Object.assign({ target_project_id: targetpId, target_issue_id: targetIId }, options)); - } - - remove(projectId, issueId) { - const [pId, iId] = [projectId, issueId].map(parse); - - return this.delete(`projects/${pId}/issues/${iId}`); - } - - show(projectId, issueId) { - const [pId, iId] = [projectId, issueId].map(parse); - - return this.get(`projects/${pId}/issues/${iId}`); - } - - subscribe(projectId, issueId, options = {}) { - const [pId, iId] = [projectId, issueId].map(parse); - - return this.post(`projects/${pId}/issues/${iId}/subscribe`, options); - } - - unsubscribe(projectId, issueId) { - const [pId, iId] = [projectId, issueId].map(parse); - - return this.delete(`projects/${pId}/issues/${iId}/unsubscribe`); - } -} - -export default ProjectIssues; diff --git a/src/Models/ProjectJobs.js b/src/Models/ProjectJobs.js deleted file mode 100644 index a38a9ef2..00000000 --- a/src/Models/ProjectJobs.js +++ /dev/null @@ -1,12 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class Jobs extends BaseModel { - all(projectId, options = {}) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/jobs`, options); - } -} - -export default Jobs; diff --git a/src/Models/ProjectLabels.js b/src/Models/ProjectLabels.js deleted file mode 100644 index 58b8bcfa..00000000 --- a/src/Models/ProjectLabels.js +++ /dev/null @@ -1,42 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ProjectLabels extends BaseModel { - all(projectId, options = {}) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/labels`, options); - } - - create(projectId, options = {}) { - const pId = parse(projectId); - - return this.post(`projects/${pId}/labels`, options); - } - - edit(projectId, labelName, options = {}) { - const pId = parse(projectId); - - return this.put(`projects/${pId}/labels`, Object.assign({ name: labelName }, options)); - } - - remove(projectId, labelName) { - const pId = parse(projectId); - - return this.delete(`projects/${pId}/labels`, { name: labelName }); - } - - subscribe(projectId, labelId, options = {}) { - const [pId, lId] = [projectId, labelId].map(parse); - - return this.post(`projects/${pId}/issues/${lId}/subscribe`, options); - } - - unsubscribe(projectId, labelId) { - const [pId, lId] = [projectId, labelId].map(parse); - - return this.delete(`projects/${pId}/issues/${lId}/unsubscribe`); - } -} - -export default ProjectLabels; diff --git a/src/Models/ProjectMergeRequestChanges.js b/src/Models/ProjectMergeRequestChanges.js deleted file mode 100644 index 4ea2bed3..00000000 --- a/src/Models/ProjectMergeRequestChanges.js +++ /dev/null @@ -1,12 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ProjectMergeRequestChanges extends BaseModel { - show(projectId, mergerequestId) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.get(`projects/${pId}/merge_requests/${mId}/changes`); - } -} - -export default ProjectMergeRequestChanges; diff --git a/src/Models/ProjectMergeRequestCommits.js b/src/Models/ProjectMergeRequestCommits.js deleted file mode 100644 index b0038239..00000000 --- a/src/Models/ProjectMergeRequestCommits.js +++ /dev/null @@ -1,12 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ProjectMergeRequestCommits extends BaseModel { - show(projectId, mergerequestId) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.get(`projects/${pId}/merge_requests/${mId}/commits`); - } -} - -export default ProjectMergeRequestCommits; diff --git a/src/Models/ProjectMergeRequestVersions.js b/src/Models/ProjectMergeRequestVersions.js deleted file mode 100644 index 81330c15..00000000 --- a/src/Models/ProjectMergeRequestVersions.js +++ /dev/null @@ -1,18 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ProjectMergeRequestVersions extends BaseModel { - all(projectId, mergerequestId) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.get(`projects/${pId}/merge_requests/${mId}/versions`); - } - - show(projectId, mergerequestId, versionId) { - const [pId, mId, vId] = [projectId, mergerequestId, versionId].map(parse); - - return this.get(`projects/${pId}/merge_requests/${mId}/versions/${vId}`); - } -} - -export default ProjectMergeRequestVersions; diff --git a/src/Models/ProjectMergeRequests.js b/src/Models/ProjectMergeRequests.js deleted file mode 100644 index 48edb9e1..00000000 --- a/src/Models/ProjectMergeRequests.js +++ /dev/null @@ -1,120 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; -import ProjectMergeRequestVersions from './ProjectMergeRequestVersions'; -import ProjectMergeRequestChanges from './ProjectMergeRequestChanges'; -import ProjectMergeRequestCommits from './ProjectMergeRequestCommits'; -import ResourceNotes from './ResourceNotes'; - -class ProjectMergeRequests extends BaseModel { - constructor(...args) { - super(...args); - - this.commits = new ProjectMergeRequestCommits(...args); - this.changes = new ProjectMergeRequestChanges(...args); - this.versions = new ProjectMergeRequestVersions(...args); - this.notes = new ResourceNotes('projects', 'merge_requests', ...args); - } - - accept(projectId, mergerequestId, options = {}) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.put(`projects/${pId}/merge_requests/${mId}/merge`, options); - } - - all(projectId, options = {}) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/merge_requests`, options); - } - - cancelOnPipelineSucess(projectId, mergerequestId) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.put(`projects/${pId}/merge_requests/${mId}/cancel_merge_when_pipeline_succeeds`); - } - - closesIssues(projectId, mergerequestId) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.get(`projects/${pId}/merge_requests/${mId}/closes_issues`); - } - - create(projectId, sourceBranch, targetBranch, title, options = {}) { - const pId = parse(projectId); - - return this.post(`projects/${pId}/merge_requests`, Object.assign({ - id: pId, - source_branch: sourceBranch, - target_branch: targetBranch, - title, - }, options)); - } - - createTodo(projectId, mergerequestId) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.post(`projects/${pId}/merge_requests/${mId}/todo`); - } - - edit(projectId, mergerequestId, options = {}) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.put(`projects/${pId}/merge_requests/${mId}`, options); - } - - remove(projectId, mergerequestId) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.delete(`projects/${pId}/merge_requests/${mId}`); - } - - show(projectId, mergerequestId) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.get(`projects/${pId}/merge_requests/${mId}`); - } - - subscribe(projectId, mergerequestId, options = {}) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.post(`projects/${pId}/merge_requests/${mId}/subscribe`, options); - } - - resetSpentTime(projectId, mergerequestId) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.post(`projects/${pId}/merge_requests/${mId}/reset_spent_time`); - } - - resetTimeEstimate(projectId, mergerequestId) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.post(`projects/${pId}/merge_requests/${mId}/reset_time_estimate`); - } - - spentTime(projectId, mergerequestId, duration) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.post(`projects/${pId}/merge_requests/${mId}/add_spent_time`, { duration }); - } - - timeEstimate(projectId, mergerequestId, duration) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.post(`projects/${pId}/merge_requests/${mId}/time_estimate`, { duration }); - } - - timeStats(projectId, mergerequestId) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.get(`projects/${pId}/merge_requests/${mId}/time_stats`); - } - - unsubscribe(projectId, mergerequestId) { - const [pId, mId] = [projectId, mergerequestId].map(parse); - - return this.delete(`projects/${pId}/merge_requests/${mId}/unsubscribe`); - } -} - -export default ProjectMergeRequests; diff --git a/src/Models/ProjectPipelines.js b/src/Models/ProjectPipelines.js deleted file mode 100644 index b75a90b9..00000000 --- a/src/Models/ProjectPipelines.js +++ /dev/null @@ -1,12 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class Pipelines extends BaseModel { - all(projectId, options = {}) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/pipelines`, options); - } -} - -export default Pipelines; diff --git a/src/Models/ProjectProtectedBranches.js b/src/Models/ProjectProtectedBranches.js deleted file mode 100644 index 55393315..00000000 --- a/src/Models/ProjectProtectedBranches.js +++ /dev/null @@ -1,30 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ProjectProtectedBranches extends BaseModel { - all(projectId) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/protected_branches`); - } - - protect(projectId, branchName, options = {}) { - const pId = parse(projectId); - - return this.post(`projects/${pId}/protected_branches`, Object.assign(options, { name: branchName })); - } - - show(projectId, branchName) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/protected_branches/${branchName}`); - } - - unprotect(projectId, branchName) { - const pId = parse(projectId); - - return this.delete(`projects/${pId}/protected_branches/${branchName}`); - } -} - -export default ProjectProtectedBranches; diff --git a/src/Models/ProjectRepository.js b/src/Models/ProjectRepository.js deleted file mode 100644 index f3580b32..00000000 --- a/src/Models/ProjectRepository.js +++ /dev/null @@ -1,55 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; -import ProjectRepositoryBranches from './ProjectRepositoryBranches'; -import ProjectRepositoryTags from './ProjectRepositoryTags'; -import ProjectRepositoryCommits from './ProjectRepositoryCommits'; -import ProjectRepositoryFiles from './ProjectRepositoryFiles'; - -class ProjectRepository extends BaseModel { - constructor(...args) { - super(...args); - - this.branches = new ProjectRepositoryBranches(...args); - this.tags = new ProjectRepositoryTags(...args); - this.commits = new ProjectRepositoryCommits(...args); - this.files = new ProjectRepositoryFiles(...args); - } - - compare(projectId, from, to) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/repository/compare`, { from, to }); - } - - contributors(projectId) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/repository/contributors`); - } - - showArchive(projectId, { sha }) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/repository/archive`, { sha }); - } - - showBlob(projectId, sha) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/repository/blobs/${sha}`); - } - - showBlobRaw(projectId, sha) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/repository/blobs/${sha}/raw`); - } - - tree(projectId, options = {}) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/repository/tree`, options); - } -} - -export default ProjectRepository; diff --git a/src/Models/ProjectRepositoryBranches.js b/src/Models/ProjectRepositoryBranches.js deleted file mode 100644 index eb9fef1a..00000000 --- a/src/Models/ProjectRepositoryBranches.js +++ /dev/null @@ -1,42 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ProjectRepositoryBranches extends BaseModel { - all(projectId) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/repository/branches`); - } - - create(projectId, branchName, ref) { - const pId = parse(projectId); - - return this.post(`projects/${pId}/repository/branches`, { branch: branchName, ref }); - } - - protect(projectId, branchName, options = {}) { - const pId = parse(projectId); - - return this.put(`projects/${pId}/repository/branches/${branchName}/protect`, options); - } - - remove(projectId, branchName) { - const pId = parse(projectId); - - return this.delete(`projects/${pId}/repository/branches/${branchName}`); - } - - show(projectId, branchName) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/repository/branches/${branchName}`); - } - - unprotect(projectId, branchName) { - const pId = parse(projectId); - - return this.put(`projects/${pId}/repository/branches/${branchName}/unprotect`); - } -} - -export default ProjectRepositoryBranches; diff --git a/src/Models/ProjectRepositoryCommitComments.js b/src/Models/ProjectRepositoryCommitComments.js deleted file mode 100644 index 77dc9ac9..00000000 --- a/src/Models/ProjectRepositoryCommitComments.js +++ /dev/null @@ -1,18 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ProjectRepositoryCommitComments extends BaseModel { - all(projectId, sha, options = {}) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/repository/commits/${sha}/comments`, options); - } - - create(projectId, sha, note, options = {}) { - const pId = parse(projectId); - - return this.post(`projects/${pId}/repository/commits/${sha}/comments`, Object.assign({ note }, options)); - } -} - -export default ProjectRepositoryCommitComments; diff --git a/src/Models/ProjectRepositoryCommits.js b/src/Models/ProjectRepositoryCommits.js deleted file mode 100644 index eef345d6..00000000 --- a/src/Models/ProjectRepositoryCommits.js +++ /dev/null @@ -1,37 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; -import ProjectRepositoryCommitComments from './ProjectRepositoryCommitComments'; - -class ProjectRepositoryCommits extends BaseModel { - constructor(...args) { - super(...args); - - this.comments = new ProjectRepositoryCommitComments(...args); - } - - all(projectId, options = {}) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/repository/commits`, options); - } - - diff(projectId, sha) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/repository/commits/${sha}/diff`); - } - - show(projectId, sha) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/repository/commits/${sha}`); - } - - statuses(projectId, sha, options = {}) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/repository/commits/${sha}/statuses`, options); - } -} - -export default ProjectRepositoryCommits; diff --git a/src/Models/ProjectRepositoryFiles.js b/src/Models/ProjectRepositoryFiles.js deleted file mode 100644 index 84956295..00000000 --- a/src/Models/ProjectRepositoryFiles.js +++ /dev/null @@ -1,44 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ProjectRepositoryFiles extends BaseModel { - create(projectId, filePath, branch, options = {}) { - const pId = parse(projectId); - const path = parse(filePath); - const extendedOptions = Object.assign({ branch }, options); - - return this.post(`projects/${pId}/repository/files/${path}`, extendedOptions); - } - - edit(projectId, filePath, branch, options = {}) { - const pId = parse(projectId); - const path = parse(filePath); - const extendedOptions = Object.assign({ branch }, options); - - return this.put(`projects/${pId}/repository/files/${path}`, extendedOptions); - } - - remove(projectId, filePath, branch, options = {}) { - const pId = parse(projectId); - const path = parse(filePath); - const extendedOptions = Object.assign({ branch }, options); - - return this.delete(`projects/${pId}/repository/files/${path}`, extendedOptions); - } - - show(projectId, filePath, ref) { - const pId = parse(projectId); - const path = parse(filePath); - - return this.get(`projects/${pId}/repository/files/${path}`, { ref }); - } - - showRaw(projectId, filePath, ref) { - const pId = parse(projectId); - const path = parse(filePath); - - return this.get(`projects/${pId}/repository/files/${path}/raw`, { ref }); - } -} - -export default ProjectRepositoryFiles; diff --git a/src/Models/ProjectRepositoryTags.js b/src/Models/ProjectRepositoryTags.js deleted file mode 100644 index 5759c7ad..00000000 --- a/src/Models/ProjectRepositoryTags.js +++ /dev/null @@ -1,30 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ProjectRepositoryTags extends BaseModel { - all(projectId, options = {}) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/repository/tags`, options); - } - - create(projectId, options = {}) { - const pId = parse(projectId); - - return this.post(`projects/${pId}/repository/tags`, options); - } - - remove(projectId, tagName) { - const pId = parse(projectId); - - return this.delete(`projects/${pId}/repository/tags/${encodeURI(tagName)}`); - } - - show(projectId, tagName) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/repository/tags/${encodeURI(tagName)}`); - } -} - -export default ProjectRepositoryTags; diff --git a/src/Models/ProjectRunners.js b/src/Models/ProjectRunners.js deleted file mode 100644 index bea160dc..00000000 --- a/src/Models/ProjectRunners.js +++ /dev/null @@ -1,26 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ProjectRunners extends BaseModel { - all(projectId, options = {}) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/runners`, options); - } - - enable(projectId, runnerId) { - const [pId, rId] = [projectId, runnerId].map(parse); - - return this.post(`projects/${pId}/runners`, { - runner_id: rId, - }); - } - - disable(projectId, runnerId) { - const [pId, rId] = [projectId, runnerId].map(parse); - - return this.delete(`projects/${pId}/runners/${rId}`); - } -} - -export default ProjectRunners; diff --git a/src/Models/ProjectServices.js b/src/Models/ProjectServices.js deleted file mode 100644 index fb83f964..00000000 --- a/src/Models/ProjectServices.js +++ /dev/null @@ -1,24 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ProjectServices extends BaseModel { - edit(projectId, serviceName, options = {}) { - const pId = parse(projectId); - - return this.put(`projects/${pId}/services/${serviceName}`, options); - } - - remove(projectId, serviceName) { - const pId = parse(projectId); - - return this.delete(`projects/${pId}/services/${serviceName}`); - } - - show(projectId, serviceName) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/services/${serviceName}`); - } -} - -export default ProjectServices; diff --git a/src/Models/ProjectTriggers.js b/src/Models/ProjectTriggers.js deleted file mode 100644 index e016de2d..00000000 --- a/src/Models/ProjectTriggers.js +++ /dev/null @@ -1,36 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ProjectTriggers extends BaseModel { - add(projectId, options = {}) { - const pId = parse(projectId); - - return this.post(`projects/${pId}/triggers`, options); - } - - all(projectId) { - const pId = parse(projectId); - - return this.get(`projects/${pId}/triggers`); - } - - edit(projectId, triggerId, options = {}) { - const [pId, tId] = [projectId, triggerId].map(parse); - - return this.put(`projects/${pId}/triggers/${tId}`, options); - } - - remove(projectId, triggerId) { - const [pId, tId] = [projectId, triggerId].map(parse); - - return this.delete(`projects/${pId}/triggers/${tId}`); - } - - show(projectId, triggerId) { - const [pId, tId] = [projectId, triggerId].map(parse); - - return this.get(`projects/${pId}/triggers/${tId}`); - } -} - -export default ProjectTriggers; diff --git a/src/Models/Projects.js b/src/Models/Projects.js deleted file mode 100644 index af7ad30a..00000000 --- a/src/Models/Projects.js +++ /dev/null @@ -1,142 +0,0 @@ -import Fs from 'fs'; -import Path from 'path'; -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; -import ProjectHooks from './ProjectHooks'; -import ProjectIssues from './ProjectIssues'; -import ProjectLabels from './ProjectLabels'; -import ProjectRepository from './ProjectRepository'; -import ProjectProtectedBranches from './ProjectProtectedBranches'; -import ProjectDeployKeys from './ProjectDeployKeys'; -import ProjectMergeRequests from './ProjectMergeRequests'; -import ProjectServices from './ProjectServices'; -import ProjectTriggers from './ProjectTriggers'; -import ProjectRunners from './ProjectRunners'; -import ProjectPipelines from './ProjectPipelines'; -import ProjectJobs from './ProjectJobs'; -import ProjectEnvironments from './ProjectEnvironments'; -import ResourceCustomAttributes from './ResourceCustomAttributes'; -import ResourceMembers from './ResourceMembers'; -import ResourceAccessRequests from './ResourceAccessRequests'; -import ResourceMilestones from './ResourceMilestones'; -import ResourceNotes from './ResourceNotes'; - - -class Projects extends BaseModel { - constructor(...args) { - super(...args); - - this.hooks = new ProjectHooks(...args); - this.issues = new ProjectIssues(...args); - this.labels = new ProjectLabels(...args); - this.repository = new ProjectRepository(...args); - this.protectedBranches = new ProjectProtectedBranches(...args); - this.deployKeys = new ProjectDeployKeys(...args); - this.mergeRequests = new ProjectMergeRequests(...args); - this.services = new ProjectServices(...args); - this.triggers = new ProjectTriggers(...args); - this.pipelines = new ProjectPipelines(...args); - this.jobs = new ProjectJobs(...args); - this.environments = new ProjectEnvironments(...args); - this.runners = new ProjectRunners(...args); - this.customAttributes = new ResourceCustomAttributes('projects', ...args); - this.members = new ResourceMembers('projects', ...args); - this.accessRequests = new ResourceAccessRequests('projects', ...args); - this.milestones = new ResourceMilestones('projects', ...args); - this.snippets = new ResourceNotes('projects', 'snippets', ...args); - } - - all(options = {}) { - return this.get('projects', options); - } - - create(options = {}) { - if (options.userId) { - const uId = parse(options.userId); - - return this.post(`projects/user/${uId}`, options); - } - - return this.post('projects', options); - } - - edit(projectId, options = {}) { - const pId = parse(projectId); - - return this.put(`projects/${pId}`, options); - } - - fork(projectId, options = {}) { - const pId = parse(projectId); - - return this.post(`projects/${pId}/fork`, options); - } - - remove(projectId) { - const pId = parse(projectId); - - return this.delete(`projects/${pId}`); - } - - search(projectName) { - return this.get('projects', { search: projectName }); - } - - share(projectId, groupId, groupAccess, options) { - const pId = parse(projectId); - - if (!groupId || !groupAccess) throw new Error('Missing required arguments'); - - options.group_id = groupId; - options.group_access = groupAccess; - - return this.post(`projects/${pId}/share`, options); - } - - show(projectId) { - const pId = parse(projectId); - - return this.get(`projects/${pId}`); - } - - star(projectId) { - const pId = parse(projectId); - - return this.post(`projects/${pId}/star`); - } - - statuses(projectId, sha, state, options = {}) { - const pId = parse(projectId); - - return this.post(`projects/${pId}/statuses/${sha}`, Object.assign({ state }, options)); - } - - unshare(projectId, groupId) { - const [pId, gId] = [projectId, groupId].map(parse); - - return this.delete(`projects/${pId}/share${gId}`); - } - - unstar(projectId) { - const pId = parse(projectId); - - return this.post(`projects/${pId}/unstar`); - } - - upload(projectId, filePath, { fileName = Path.basename(filePath) } = {}) { - const pId = parse(projectId); - const file = Fs.readFileSync(filePath); - - return this.postForm(`projects/${pId}/uploads`, { - file: { - value: file, - options: { - filename: fileName, - contentType: 'application/octet-stream', - }, - }, - }); - } -} - -module.exports = Projects; diff --git a/src/Models/ResourceAccessRequests.js b/src/Models/ResourceAccessRequests.js deleted file mode 100644 index 828f22e5..00000000 --- a/src/Models/ResourceAccessRequests.js +++ /dev/null @@ -1,45 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -const ACCESS_LEVELS = { - GUEST: 10, - REPORTER: 20, - DEVELOPER: 30, - MASTER: 40, - OWNER: 50, -}; - -class ResourceAccessRequests extends BaseModel { - constructor(resourceType, ...args) { - super(...args); - - this.resourceType = resourceType; - this.ACCESS_LEVELS = ACCESS_LEVELS; - } - - all(resourceId) { - const rId = parse(resourceId); - - return this.get(`${this.resourceType}/${rId}/access_requests`); - } - - request(resourceId) { - const rId = parse(resourceId); - - return this.post(`${this.resourceType}/${rId}/access_requests`); - } - - approve(resourceId, userId, { access_level = 30 }) { - const [rId, uId] = [resourceId, userId].map(parse); - - return this.post(`${this.resourceType}/${rId}/access_requests/${uId}/approve`, { access_level }); - } - - deny(resourceId, userId) { - const [rId, uId] = [resourceId, userId].map(parse); - - return this.delete(`${this.resourceType}/${rId}/access_requests/${uId}/approve`); - } -} - -export default ResourceAccessRequests; diff --git a/src/Models/ResourceCustomAttributes.js b/src/Models/ResourceCustomAttributes.js deleted file mode 100644 index 1fff9f1d..00000000 --- a/src/Models/ResourceCustomAttributes.js +++ /dev/null @@ -1,36 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ResourceCustomAttributes extends BaseModel { - constructor(resourceType, ...args) { - super(...args); - - this.resourceType = resourceType; - } - - all(resourceId) { - const rId = parse(resourceId); - - return this.get(`${this.resourceType}/${rId}/custom_attributes`); - } - - set(resourceId, customAttributeId, value) { - const [rId, cId] = [resourceId, customAttributeId].map(parse); - - return this.put(`${this.resourceType}/${rId}/custom_attributes/${cId}`, { value }); - } - - remove(resourceId, customAttributeId) { - const [rId, cId] = [resourceId, customAttributeId].map(parse); - - return this.delete(`${this.resourceType}/${rId}/custom_attributes/${cId}`); - } - - show(resourceId, customAttributeId) { - const [rId, cId] = [resourceId, customAttributeId].map(parse); - - return this.get(`${this.resourceType}/${rId}/custom_attributes/${cId}`); - } -} - -export default ResourceCustomAttributes; diff --git a/src/Models/ResourceMembers.js b/src/Models/ResourceMembers.js deleted file mode 100644 index 604b0052..00000000 --- a/src/Models/ResourceMembers.js +++ /dev/null @@ -1,47 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ResourceMembers extends BaseModel { - constructor(resourceType, ...args) { - super(...args); - - this.resourceType = resourceType; - } - - all(resourceId) { - const rId = parse(resourceId); - - return this.get(`${this.resourceType}/${rId}/members`); - } - - add(resourceId, userId, accessLevel) { - const [rId, uId] = [resourceId, userId].map(parse); - - return this.post(`${this.resourceType}/${rId}/members`, { - user_id: uId, - access_level: parseInt(accessLevel, 10), - }); - } - - edit(resourceId, userId, accessLevel) { - const [rId, uId] = [resourceId, userId].map(parse); - - return this.put(`${this.resourceType}/${rId}/members/${uId}`, { - access_level: parseInt(accessLevel, 10), - }); - } - - show(resourceId, userId) { - const [rId, uId] = [resourceId, userId].map(parse); - - return this.get(`${this.resourceType}/${rId}/members/${uId}`); - } - - remove(resourceId, userId) { - const [rId, uId] = [resourceId, userId].map(parse); - - return this.delete(`${this.resourceType}/${rId}/members/${uId}`); - } -} - -export default ResourceMembers; diff --git a/src/Models/ResourceMilestoneIssues.js b/src/Models/ResourceMilestoneIssues.js deleted file mode 100644 index a7b9d640..00000000 --- a/src/Models/ResourceMilestoneIssues.js +++ /dev/null @@ -1,18 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class GroupMilestoneIssues extends BaseModel { - constructor(resourceType, ...args) { - super(...args); - - this.resourceType = resourceType; - } - - all(resourceId, milestoneId) { - const [rId, mId] = [resourceId, milestoneId].map(parse); - - return this.get(`${this.resourceType}/${rId}/milestones/${mId}/issues`); - } -} - -export default GroupMilestoneIssues; diff --git a/src/Models/ResourceMilestoneMergeRequests.js b/src/Models/ResourceMilestoneMergeRequests.js deleted file mode 100644 index f7fdae85..00000000 --- a/src/Models/ResourceMilestoneMergeRequests.js +++ /dev/null @@ -1,18 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ResourceMilestoneMergeRequests extends BaseModel { - constructor(resourceType, ...args) { - super(...args); - - this.resourceType = resourceType; - } - - all(resourceId, milestoneId) { - const [rId, mId] = [resourceId, milestoneId].map(parse); - - return this.get(`${this.resourceType}/${rId}/milestones/${mId}/merge_requests`); - } -} - -export default ResourceMilestoneMergeRequests; diff --git a/src/Models/ResourceMilestones.js b/src/Models/ResourceMilestones.js deleted file mode 100644 index 96d61a1e..00000000 --- a/src/Models/ResourceMilestones.js +++ /dev/null @@ -1,40 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; -import ResourceMilestoneIssues from './ResourceMilestoneIssues'; -import ResourceMilestoneMergeRequests from './ResourceMilestoneMergeRequests'; - -class ResourceMilestones extends BaseModel { - constructor(resourceType, ...args) { - super(...args); - - this.resourceType = resourceType; - this.issues = new ResourceMilestoneIssues(resourceType, ...args); - this.mergeRequests = new ResourceMilestoneMergeRequests(resourceType, ...args); - } - - all(resourceId, options = {}) { - const rId = parse(resourceId); - - return this.get(`${this.resourceType}/${rId}/milestones`, options); - } - - create(resourceId, title, options) { - const rId = parse(resourceId); - - return this.post(`${this.resourceType}/${rId}/milestones`, options); - } - - edit(resourceId, milestoneId, options) { - const [rId, mId] = [resourceId, milestoneId].map(parse); - - return this.put(`${this.resourceType}/${rId}/milestones/${mId}`, options); - } - - show(resourceId, milestoneId) { - const [rId, mId] = [resourceId, milestoneId].map(parse); - - return this.get(`${this.resourceType}/${rId}/milestones/${mId}`); - } -} - -export default ResourceMilestones; diff --git a/src/Models/ResourceNotes.js b/src/Models/ResourceNotes.js deleted file mode 100644 index 95443000..00000000 --- a/src/Models/ResourceNotes.js +++ /dev/null @@ -1,47 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class ResourceNotes extends BaseModel { - constructor(resourceType, resource2Type, ...args) { - super(...args); - - this.resourceType = resourceType; - this.resource2Type = resource2Type; - } - - all(resourceId, resource2Id, options = {}) { - const [rId, r2Id] = [resourceId, resource2Id].map(parse); - - return this.get(`${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes`, options); - } - - create(resourceId, resource2Id, options = {}) { - if (!options.body) throw new Error('Missing required property: body'); - - const [rId, r2Id] = [resourceId, resource2Id].map(parse); - - return this.post(`${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes`, options); - } - - edit(resourceId, resource2Id, noteId, options = {}) { - if (!options.body) throw new Error('Missing required property: body'); - - const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(parse); - - return this.put(`${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, options); - } - - remove(resourceId, resource2Id, noteId) { - const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(parse); - - return this.delete(`${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`); - } - - show(resourceId, resource2Id, noteId) { - const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(parse); - - return this.get(`${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`); - } -} - -export default ResourceNotes; diff --git a/src/Models/Runners.js b/src/Models/Runners.js deleted file mode 100644 index 30a35323..00000000 --- a/src/Models/Runners.js +++ /dev/null @@ -1,38 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class Runners extends BaseModel { - all(options = {}) { - return this.get('runners/all', options); - } - - allOwned(options = {}) { - return this.get('runners', options); - } - - edit(runnerId, attributes) { - const rId = parse(runnerId); - - return this.put(`runners/${rId}`, attributes); - } - - remove(runnerId) { - const rId = parse(runnerId); - - return this.delete(`runners/${rId}`); - } - - show(runnerId) { - const rId = parse(runnerId); - - return this.get(`runners/${rId}`); - } - - showJobs(runnerId) { - const rId = parse(runnerId); - - return this.get(`runners/${rId}/jobs`); - } -} - -export default Runners; diff --git a/src/Models/UserKeys.js b/src/Models/UserKeys.js deleted file mode 100644 index 7ef3dc1a..00000000 --- a/src/Models/UserKeys.js +++ /dev/null @@ -1,28 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; - -class UserKeys extends BaseModel { - add(userId, title, key) { - const uId = parse(userId); - - return this.post(`users/${uId}/keys`, { - title, - key, - }); - } - - remove(userId, keyId) { - const uId = parse(userId); - const kId = parse(keyId); - - return this.delete(`users/${uId}/keys/${kId}`); - } - - all(userId) { - const uId = parse(userId); - - return this.get(`users/${uId}/keys`); - } -} - -export default UserKeys; diff --git a/src/Models/Users.js b/src/Models/Users.js deleted file mode 100644 index b5a93682..00000000 --- a/src/Models/Users.js +++ /dev/null @@ -1,46 +0,0 @@ -import BaseModel from './BaseModel'; -import { parse } from '../Utils'; -import UserKeys from './UserKeys'; -import ResourceCustomAttributes from './ResourceCustomAttributes'; - -class Users extends BaseModel { - constructor(...args) { - super(...args); - - this.customAttributes = new ResourceCustomAttributes('users', ...args); - this.keys = new UserKeys(...args); - } - - all(options = {}) { - return this.get('users', options); - } - - create(options = {}) { - return this.post('users', options); - } - - current() { - return this.get('user'); - } - - session(email, password) { - return this.post('session', { - email, - password, - }); - } - - search(emailOrUsername) { - return this.get('users', { - search: emailOrUsername, - }); - } - - show(userId) { - const uId = parse(userId); - - return this.get(`users/${uId}`); - } -} - -export default Users; diff --git a/src/Models/Version.js b/src/Models/Version.js deleted file mode 100644 index 42b69801..00000000 --- a/src/Models/Version.js +++ /dev/null @@ -1,9 +0,0 @@ -import BaseModel from './BaseModel'; - -class Version extends BaseModel { - show() { - return this.get('version'); - } -} - -export default Version; diff --git a/src/Models/index.js b/src/Models/index.js deleted file mode 100644 index b050b3f6..00000000 --- a/src/Models/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import Groups from './Groups'; -import Projects from './Projects'; -import Issues from './Issues'; -import Users from './Users'; -import Runners from './Runners'; -import MergeRequests from './MergeRequests'; -import Version from './Version'; - -export { - Groups, - Projects, - Runners, - Issues, - Users, - MergeRequests, - Version, -}; diff --git a/src/Utils.js b/src/Utils.js deleted file mode 100644 index 10014106..00000000 --- a/src/Utils.js +++ /dev/null @@ -1,9 +0,0 @@ -function parse(value) { - if (Number.isInteger(value)) return value; - - return encodeURIComponent(value); -} - -export { - parse, -}; diff --git a/src/index.js b/src/index.js index 4409e9b9..36cd7cc4 100644 --- a/src/index.js +++ b/src/index.js @@ -1,3 +1,9 @@ -import API from './API'; +import * as Services from './services'; -module.exports = ({ url, token, oauthToken }) => new API({ url, token, oauthToken }); +export const API = credentials => + Object.entries(Services).reduce( + (output, [key, Value]) => { output[key] = new Value(credentials); return output; }, + {}, + ); + +export * from './services'; diff --git a/src/Models/BaseModel.js b/src/infrastructure/BaseService.js similarity index 53% rename from src/Models/BaseModel.js rename to src/infrastructure/BaseService.js index 8c0598e6..652d85e2 100644 --- a/src/Models/BaseModel.js +++ b/src/infrastructure/BaseService.js @@ -19,32 +19,17 @@ async function getAllPages(client, endpoint, options, results = []) { } class BaseModel { - constructor(APIClient) { - this.client = APIClient; - } + constructor({ url = 'https://gitlab.com', token, oauthToken }) { + this.url = `${url}/api/v4/`; + this.headers = {}; - get(endpoint, options = {}) { - if (!options.page) { - return getAllPages(this.client, endpoint, options); + if (oauthToken) { + this.headers.Authorization = `Bearer ${oauthToken}`; + } else if (token) { + this.headers['private-token'] = token; + } else { + throw new Error('`token` (private-token) or `oauth_token` is mandatory'); } - - return this.client.get(endpoint, options); - } - - post(endpoint, options = {}) { - return this.client.post(endpoint, options); - } - - postForm(endpoint, options = {}) { - return this.client.postForm(endpoint, options); - } - - put(endpoint, options = {}) { - return this.client.put(endpoint, options); - } - - delete(endpoint, options = {}) { - return this.client.delete(endpoint, options); } } diff --git a/src/infrastructure/RequestHelper.js b/src/infrastructure/RequestHelper.js new file mode 100644 index 00000000..c0fe6271 --- /dev/null +++ b/src/infrastructure/RequestHelper.js @@ -0,0 +1,59 @@ +import Request from 'request-promise'; +import Humps from 'humps'; + +function defaultRequest(url, endpoint, { + headers, + body, + qs, + formData, + resolveWithFullResponse = false, +}) { + const params = { + url: `${url}${endpoint}`, + headers, + json: true, + }; + + if (body) params.body = Humps.decamelizeKeys(body); + if (qs) params.qs = Humps.decamelizeKeys(qs); + if (formData) params.formData = formData; + + params.resolveWithFullResponse = resolveWithFullResponse; + + return params; +} + +class RequestHelper { + static get(service, endpoint, options, fullResponse = false) { + return Request.get(defaultRequest(service.url, endpoint, { + headers: service.headers, + qs: options, + resolveWithFullResponse: fullResponse, + })); + } + + static post(service, endpoint, options, form = false) { + const body = form ? 'fromData' : 'body'; + + return Request.post(defaultRequest(service.url, endpoint, { + headers: service.headers, + [body]: options, + })); + } + + static put(service, endpoint, options) { + return Request.put(defaultRequest(service.url, endpoint, { + headers: service.headers, + body: options, + })); + } + + static delete(service, endpoint, options) { + return Request.delete(defaultRequest(service.url, endpoint, { + headers: service.headers, + qs: options, + })); + } +} + +export default RequestHelper; diff --git a/src/infrastructure/index.js b/src/infrastructure/index.js new file mode 100644 index 00000000..fdbb748f --- /dev/null +++ b/src/infrastructure/index.js @@ -0,0 +1,2 @@ +export { default as BaseService } from './BaseService'; +export { default as RequestHelper } from './RequestHelper'; diff --git a/src/services/Branches.js b/src/services/Branches.js new file mode 100644 index 00000000..8e5eeb25 --- /dev/null +++ b/src/services/Branches.js @@ -0,0 +1,57 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class Branches extends BaseService { + all(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/repository/branches`, options); + } + + create(projectId, branchName, ref) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/repository/branches`, { + branch: branchName, + ref, + }); + } + + protect(projectId, branchName, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.put( + this, + `projects/${pId}/repository/branches/${branchName}/protect`, + options, + ); + } + + remove(projectId, branchName) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.delete( + this, + `projects/${pId}/repository/branches/${branchName}`, + ); + } + + show(projectId, branchName) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get( + this, + `projects/${pId}/repository/branches/${branchName}`, + ); + } + + unprotect(projectId, branchName) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.put( + this, + `projects/${pId}/repository/branches/${branchName}/unprotect`, + ); + } +} + +export default Branches; diff --git a/src/services/Commits.js b/src/services/Commits.js new file mode 100644 index 00000000..2ee5149a --- /dev/null +++ b/src/services/Commits.js @@ -0,0 +1,59 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class Commits extends BaseService { + all(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get( + this, + `projects/${pId}/repository/commits`, + options, + ); + } + + allComments(projectId, sha) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get( + this, + `projects/${pId}/repository/commits/${sha}/comments`, + ); + } + + createComment(projectId, sha, note, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post( + this, + `projects/${pId}/repository/commits/${sha}/comments`, + Object.assign({ note }, options), + ); + } + + diff(projectId, sha) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get( + this, + `projects/${pId}/repository/commits/${sha}/diff`, + ); + } + + show(projectId, sha) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}`); + } + + statuses(projectId, sha, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get( + this, + `projects/${pId}/repository/commits/${sha}/statuses`, + options, + ); + } +} + +export default Commits; diff --git a/src/services/DeployKeys.js b/src/services/DeployKeys.js new file mode 100644 index 00000000..c972758e --- /dev/null +++ b/src/services/DeployKeys.js @@ -0,0 +1,23 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class DeployKeys extends BaseService { + add(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/deploy_keys`, options); + } + + all(projectId) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/deploy_keys`); + } + + show(projectId, keyId) { + const [pId, kId] = [projectId, keyId].map(encodeURIComponent); + + return RequestHelper.get(this, `projects/${pId}/deploy_keys/${kId}`); + } +} + +export default DeployKeys; diff --git a/src/services/Environments.js b/src/services/Environments.js new file mode 100644 index 00000000..44595275 --- /dev/null +++ b/src/services/Environments.js @@ -0,0 +1,11 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class Environments extends BaseService { + all(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/environments`, options); + } +} + +export default Environments; diff --git a/src/services/GroupAccessRequests.js b/src/services/GroupAccessRequests.js new file mode 100644 index 00000000..d8445ef7 --- /dev/null +++ b/src/services/GroupAccessRequests.js @@ -0,0 +1,9 @@ +import { ResourceAccessRequests } from '../templates'; + +export class GroupAccessRequests { + constructor(options) { + return new ResourceAccessRequests('groups', options); + } +} + +export default GroupAccessRequests; diff --git a/src/services/GroupCustomAttributes.js b/src/services/GroupCustomAttributes.js new file mode 100644 index 00000000..1d5cc914 --- /dev/null +++ b/src/services/GroupCustomAttributes.js @@ -0,0 +1,9 @@ +import { ResourceCustomAttributes } from '../templates'; + +export class GroupCustomAttributes { + constructor(options) { + return new ResourceCustomAttributes('groups', options); + } +} + +export default GroupCustomAttributes; diff --git a/src/services/GroupMembers.js b/src/services/GroupMembers.js new file mode 100644 index 00000000..36dc86a9 --- /dev/null +++ b/src/services/GroupMembers.js @@ -0,0 +1,9 @@ +import { ResourceMembers } from '../templates'; + +export class GroupMembers { + constructor(options) { + return new ResourceMembers('groups', options); + } +} + +export default GroupMembers; diff --git a/src/services/GroupMilestones.js b/src/services/GroupMilestones.js new file mode 100644 index 00000000..febbaba7 --- /dev/null +++ b/src/services/GroupMilestones.js @@ -0,0 +1,9 @@ +import { ResourceMilestones } from '../templates'; + +export class GroupMilestones { + constructor(options) { + return new ResourceMilestones('groups', options); + } +} + +export default GroupMilestones; diff --git a/src/services/GroupProjects.js b/src/services/GroupProjects.js new file mode 100644 index 00000000..96c62ebf --- /dev/null +++ b/src/services/GroupProjects.js @@ -0,0 +1,17 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class GroupProjects extends BaseService { + all(groupId, options = {}) { + const gId = encodeURIComponent(groupId); + + return RequestHelper.get(this, `groups/${gId}/projects`, options); + } + + add(groupId, projectId) { + const [gId, pId] = [groupId, projectId].map(encodeURIComponent); + + return RequestHelper.post(this, `groups/${gId}/projects/${pId}`); + } +} + +export default GroupProjects; diff --git a/src/services/Groups.js b/src/services/Groups.js new file mode 100644 index 00000000..8375c29e --- /dev/null +++ b/src/services/Groups.js @@ -0,0 +1,37 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class Groups extends BaseService { + all(options = {}) { + return RequestHelper.get(this, 'groups', options); + } + + allSubgroups(groupId, options = {}) { + const gId = encodeURIComponent(groupId); + + return RequestHelper.get(this, `groups/${gId}/subgroups`, options); + } + + show(groupId) { + const gId = encodeURIComponent(groupId); + + return RequestHelper.get(this, `groups/${gId}`); + } + + create(options = {}) { + return RequestHelper.post(this, 'groups', options); + } + + remove(groupId) { + const gId = encodeURIComponent(groupId); + + return RequestHelper.delete(this, `groups/${gId}`); + } + + search(nameOrPath) { + return RequestHelper.get(this, 'groups', { + search: nameOrPath, + }); + } +} + +export default Groups; diff --git a/src/services/Issues.js b/src/services/Issues.js new file mode 100644 index 00000000..478ef328 --- /dev/null +++ b/src/services/Issues.js @@ -0,0 +1,72 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class Issues extends BaseService { + all(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + if (projectId) { + return RequestHelper.get(this, `projects/${pId}/issues`, options); + } + + return RequestHelper.get(this, 'issues', options); + } + + create(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/issues`, options); + } + + edit(projectId, issueId, options = {}) { + const [pId, iId] = [projectId, issueId].map(encodeURIComponent); + + return RequestHelper.put(this, `projects/${pId}/issues/${iId}`, options); + } + + link(projectId, issueIId, targetProjectId, targetIssueId, options = {}) { + const [pId, iId] = [projectId, issueIId].map(encodeURIComponent); + const [targetpId, targetIId] = [targetProjectId, targetIssueId].map(encodeURIComponent); + + return RequestHelper.post( + this, + `projects/${pId}/issues/${iId}/links`, + Object.assign( + { target_project_id: targetpId, target_issue_id: targetIId }, + options, + ), + ); + } + + remove(projectId, issueId) { + const [pId, iId] = [projectId, issueId].map(encodeURIComponent); + + return RequestHelper.delete(this, `projects/${pId}/issues/${iId}`); + } + + show(projectId, issueId) { + const [pId, iId] = [projectId, issueId].map(encodeURIComponent); + + return RequestHelper.get(this, `projects/${pId}/issues/${iId}`); + } + + subscribe(projectId, issueId, options = {}) { + const [pId, iId] = [projectId, issueId].map(encodeURIComponent); + + return RequestHelper.post( + this, + `projects/${pId}/issues/${iId}/subscribe`, + options, + ); + } + + unsubscribe(projectId, issueId) { + const [pId, iId] = [projectId, issueId].map(encodeURIComponent); + + return RequestHelper.delete( + this, + `projects/${pId}/issues/${iId}/unsubscribe`, + ); + } +} + +export default Issues; diff --git a/src/services/Jobs.js b/src/services/Jobs.js new file mode 100644 index 00000000..8812630f --- /dev/null +++ b/src/services/Jobs.js @@ -0,0 +1,11 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class Jobs extends BaseService { + all(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/jobs`, options); + } +} + +export default Jobs; diff --git a/src/services/Labels.js b/src/services/Labels.js new file mode 100644 index 00000000..57cf24e9 --- /dev/null +++ b/src/services/Labels.js @@ -0,0 +1,54 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class Labels extends BaseService { + all(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/labels`, options); + } + + create(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/labels`, options); + } + + edit(projectId, labelName, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.put( + this, + `projects/${pId}/labels`, + Object.assign({ name: labelName }, options), + ); + } + + remove(projectId, labelName) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.delete(this, `projects/${pId}/labels`, { + name: labelName, + }); + } + + subscribe(projectId, labelId, options = {}) { + const [pId, lId] = [projectId, labelId].map(encodeURIComponent); + + return RequestHelper.post( + this, + `projects/${pId}/issues/${lId}/subscribe`, + options, + ); + } + + unsubscribe(projectId, labelId) { + const [pId, lId] = [projectId, labelId].map(encodeURIComponent); + + return RequestHelper.delete( + this, + `projects/${pId}/issues/${lId}/unsubscribe`, + ); + } +} + +export default Labels; diff --git a/src/services/MergeRequestNotes.js b/src/services/MergeRequestNotes.js new file mode 100644 index 00000000..1b196637 --- /dev/null +++ b/src/services/MergeRequestNotes.js @@ -0,0 +1,9 @@ +import { ResourceNotes } from '../templates'; + +export class MergeRequestNotes { + constructor(options) { + return new ResourceNotes('mergerequests', 'notes', options); + } +} + +export default MergeRequestNotes; diff --git a/src/services/MergeRequestVersions.js b/src/services/MergeRequestVersions.js new file mode 100644 index 00000000..b7c404ef --- /dev/null +++ b/src/services/MergeRequestVersions.js @@ -0,0 +1,23 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class MergeRequestVersions extends BaseService { + all(projectId, mergerequestId) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.get( + this, + `projects/${pId}/merge_requests/${mId}/versions`, + ); + } + + show(projectId, mergerequestId, versionId) { + const [pId, mId, vId] = [projectId, mergerequestId, versionId].map(encodeURIComponent); + + return RequestHelper.get( + this, + `projects/${pId}/merge_requests/${mId}/versions/${vId}`, + ); + } +} + +export default MergeRequestVersions; diff --git a/src/services/MergeRequests.js b/src/services/MergeRequests.js new file mode 100644 index 00000000..5330c1e4 --- /dev/null +++ b/src/services/MergeRequests.js @@ -0,0 +1,176 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class MergeRequests extends BaseService { + accept(projectId, mergerequestId, options = {}) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.put( + this, + `projects/${pId}/merge_requests/${mId}/merge`, + options, + ); + } + + all(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + if (projectId) { + return RequestHelper.get(this, `projects/${pId}/merge_requests`, options); + } + + return RequestHelper.get(this, 'merge_requests', options); + } + + cancelOnPipelineSucess(projectId, mergerequestId) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.put( + this, + `projects/${pId}/merge_requests/${mId}/cancel_merge_when_pipeline_succeeds`, + ); + } + + changes(projectId, mergerequestId) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.get( + this, + `projects/${pId}/merge_requests/${mId}/changes`, + ); + } + + closesIssues(projectId, mergerequestId) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.get( + this, + `projects/${pId}/merge_requests/${mId}/closes_issues`, + ); + } + + commits(projectId, mergerequestId) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.get( + this, + `projects/${pId}/merge_requests/${mId}/commits`, + ); + } + + create(projectId, sourceBranch, targetBranch, title, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post( + this, + `projects/${pId}/merge_requests`, + Object.assign( + { + id: pId, + source_branch: sourceBranch, + target_branch: targetBranch, + title, + }, + options, + ), + ); + } + + createTodo(projectId, mergerequestId) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.post( + this, + `projects/${pId}/merge_requests/${mId}/todo`, + ); + } + + edit(projectId, mergerequestId, options = {}) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.put( + this, + `projects/${pId}/merge_requests/${mId}`, + options, + ); + } + + remove(projectId, mergerequestId) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.delete(this, `projects/${pId}/merge_requests/${mId}`); + } + + show(projectId, mergerequestId) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}`); + } + + subscribe(projectId, mergerequestId, options = {}) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.post( + this, + `projects/${pId}/merge_requests/${mId}/subscribe`, + options, + ); + } + + resetSpentTime(projectId, mergerequestId) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.post( + this, + `projects/${pId}/merge_requests/${mId}/reset_spent_time`, + ); + } + + resetTimeEstimate(projectId, mergerequestId) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.post( + this, + `projects/${pId}/merge_requests/${mId}/reset_time_estimate`, + ); + } + + spentTime(projectId, mergerequestId, duration) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.post( + this, + `projects/${pId}/merge_requests/${mId}/add_spent_time`, + { duration }, + ); + } + + timeEstimate(projectId, mergerequestId, duration) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.post( + this, + `projects/${pId}/merge_requests/${mId}/time_estimate`, + { duration }, + ); + } + + timeStats(projectId, mergerequestId) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.get( + this, + `projects/${pId}/merge_requests/${mId}/time_stats`, + ); + } + + unsubscribe(projectId, mergerequestId) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.delete( + this, + `projects/${pId}/merge_requests/${mId}/unsubscribe`, + ); + } +} + +export default MergeRequests; diff --git a/src/services/Pipelines.js b/src/services/Pipelines.js new file mode 100644 index 00000000..562a1774 --- /dev/null +++ b/src/services/Pipelines.js @@ -0,0 +1,11 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class Pipelines extends BaseService { + all(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/pipelines`, options); + } +} + +export default Pipelines; diff --git a/src/services/ProjectAccessRequests.js b/src/services/ProjectAccessRequests.js new file mode 100644 index 00000000..45388ef1 --- /dev/null +++ b/src/services/ProjectAccessRequests.js @@ -0,0 +1,9 @@ +import { ResourceAccessRequests } from '../templates'; + +export class ProjectAccessRequests { + constructor(options) { + return new ResourceAccessRequests('projects', options); + } +} + +export default ProjectAccessRequests; diff --git a/src/services/ProjectCustomAttributes.js b/src/services/ProjectCustomAttributes.js new file mode 100644 index 00000000..7f0271f9 --- /dev/null +++ b/src/services/ProjectCustomAttributes.js @@ -0,0 +1,9 @@ +import { ResourceCustomAttributes } from '../templates'; + +export class ProjectCustomAttributes { + constructor(options) { + return new ResourceCustomAttributes('projects', options); + } +} + +export default ProjectCustomAttributes; diff --git a/src/services/ProjectHooks.js b/src/services/ProjectHooks.js new file mode 100644 index 00000000..f29462db --- /dev/null +++ b/src/services/ProjectHooks.js @@ -0,0 +1,43 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class ProjectHooks extends BaseService { + all(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/hooks`, options); + } + + show(projectId, hookId) { + const [pId, hId] = [projectId, hookId].map(encodeURIComponent); + + return RequestHelper.get(this, `projects/${pId}/hooks/${hId}`); + } + + add(projectId, url, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post( + this, + `projects/${pId}/hooks`, + Object.assign({ url }, options), + ); + } + + edit(projectId, hookId, url, options = {}) { + const [pId, hId] = [projectId, hookId].map(encodeURIComponent); + + return RequestHelper.put( + this, + `projects/${pId}/hooks/${hId}`, + Object.assign({ url }, options), + ); + } + + remove(projectId, hookId) { + const [pId, hId] = [projectId, hookId].map(encodeURIComponent); + + return RequestHelper.delete(this, `projects/${pId}/hooks/${hId}`); + } +} + +export default ProjectHooks; diff --git a/src/services/ProjectMembers.js b/src/services/ProjectMembers.js new file mode 100644 index 00000000..40e97276 --- /dev/null +++ b/src/services/ProjectMembers.js @@ -0,0 +1,9 @@ +import { ResourceMembers } from '../templates'; + +export class ProjectMembers { + constructor(options) { + return new ResourceMembers('projects', options); + } +} + +export default ProjectMembers; diff --git a/src/services/ProjectMilestones.js b/src/services/ProjectMilestones.js new file mode 100644 index 00000000..cf109576 --- /dev/null +++ b/src/services/ProjectMilestones.js @@ -0,0 +1,9 @@ +import { ResourceMilestones } from '../templates'; + +export class ProjectMilestones { + constructor(options) { + return new ResourceMilestones('projects', options); + } +} + +export default ProjectMilestones; diff --git a/src/services/ProjectRunners.js b/src/services/ProjectRunners.js new file mode 100644 index 00000000..93392b0f --- /dev/null +++ b/src/services/ProjectRunners.js @@ -0,0 +1,25 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class ProjectRunners extends BaseService { + all(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/runners`, options); + } + + enable(projectId, runnerId) { + const [pId, rId] = [projectId, runnerId].map(encodeURIComponent); + + return RequestHelper.post(this, `projects/${pId}/runners`, { + runner_id: rId, + }); + } + + disable(projectId, runnerId) { + const [pId, rId] = [projectId, runnerId].map(encodeURIComponent); + + return RequestHelper.delete(this, `projects/${pId}/runners/${rId}`); + } +} + +export default ProjectRunners; diff --git a/src/services/ProjectSnippets.js b/src/services/ProjectSnippets.js new file mode 100644 index 00000000..0a292ce0 --- /dev/null +++ b/src/services/ProjectSnippets.js @@ -0,0 +1,9 @@ +import { ResourceNotes } from '../templates'; + +export class ProjectSnippets { + constructor(options) { + return new ResourceNotes('projects', 'snippets', options); + } +} + +export default ProjectSnippets; diff --git a/src/services/Projects.js b/src/services/Projects.js new file mode 100644 index 00000000..796ea90b --- /dev/null +++ b/src/services/Projects.js @@ -0,0 +1,108 @@ +import Fs from 'fs'; +import Path from 'path'; +import { BaseService, RequestHelper } from '../infrastructure'; + +export class Projects extends BaseService { + all(options = {}) { + return RequestHelper.get(this, 'projects', options); + } + + create(options = {}) { + if (options.userId) { + const uId = encodeURIComponent(options.userId); + + return RequestHelper.post(this, `projects/user/${uId}`, options); + } + + return RequestHelper.post(this, 'projects', options); + } + + edit(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.put(this, `projects/${pId}`, options); + } + + fork(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/fork`, options); + } + + remove(projectId) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.delete(this, `projects/${pId}`); + } + + search(projectName) { + return RequestHelper.get(this, 'projects', { search: projectName }); + } + + share(projectId, groupId, groupAccess, options) { + const pId = encodeURIComponent(projectId); + + if (!groupId || !groupAccess) throw new Error('Missing required arguments'); + + options.group_id = groupId; + options.group_access = groupAccess; + + return RequestHelper.post(this, `projects/${pId}/share`, options); + } + + show(projectId) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}`); + } + + star(projectId) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/star`); + } + + statuses(projectId, sha, state, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post( + this, + `projects/${pId}/statuses/${sha}`, + Object.assign({ state }, options), + ); + } + + unshare(projectId, groupId) { + const [pId, gId] = [projectId, groupId].map(encodeURIComponent); + + return RequestHelper.delete(this, `projects/${pId}/share${gId}`); + } + + unstar(projectId) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/unstar`); + } + + upload(projectId, filePath, { fileName = Path.basename(filePath) } = {}) { + const pId = encodeURIComponent(projectId); + const file = Fs.readFileSync(filePath); + + return RequestHelper.post( + this, + `projects/${pId}/uploads`, + { + file: { + value: file, + options: { + filename: fileName, + contentType: 'application/octet-stream', + }, + }, + }, + true, + ); + } +} + +export default Projects; diff --git a/src/services/ProtectedBranches.js b/src/services/ProtectedBranches.js new file mode 100644 index 00000000..5c9582d7 --- /dev/null +++ b/src/services/ProtectedBranches.js @@ -0,0 +1,39 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class ProtectedBranches extends BaseService { + all(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/protected_branches`, options); + } + + protect(projectId, branchName, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post( + this, + `projects/${pId}/protected_branches`, + Object.assign(options, { name: branchName }), + ); + } + + show(projectId, branchName) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get( + this, + `projects/${pId}/protected_branches/${branchName}`, + ); + } + + unprotect(projectId, branchName) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.delete( + this, + `projects/${pId}/protected_branches/${branchName}`, + ); + } +} + +export default ProtectedBranches; diff --git a/src/services/Repositories.js b/src/services/Repositories.js new file mode 100644 index 00000000..5ed10d7d --- /dev/null +++ b/src/services/Repositories.js @@ -0,0 +1,49 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class Repositories extends BaseService { + compare(projectId, from, to) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/repository/compare`, { + from, + to, + }); + } + + contributors(projectId) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/repository/contributors`); + } + + showArchive(projectId, { sha }) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/repository/archive`, { + sha, + }); + } + + showBlob(projectId, sha) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/repository/blobs/${sha}`); + } + + showBlobRaw(projectId, sha) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get( + this, + `projects/${pId}/repository/blobs/${sha}/raw`, + ); + } + + tree(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/repository/tree`, options); + } +} + +export default Repositories; diff --git a/src/services/RepositoryFiles.js b/src/services/RepositoryFiles.js new file mode 100644 index 00000000..e67f2595 --- /dev/null +++ b/src/services/RepositoryFiles.js @@ -0,0 +1,56 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class RepositoryFiles extends BaseService { + create(projectId, filePath, branch, options = {}) { + const [pId, path] = [projectId, filePath].map(encodeURIComponent); + const extendedOptions = Object.assign({ branch }, options); + + return RequestHelper.post( + this, + `projects/${pId}/repository/files/${path}`, + extendedOptions, + ); + } + + edit(projectId, filePath, branch, options = {}) { + const [pId, path] = [projectId, filePath].map(encodeURIComponent); + const extendedOptions = Object.assign({ branch }, options); + + return RequestHelper.put( + this, + `projects/${pId}/repository/files/${path}`, + extendedOptions, + ); + } + + remove(projectId, filePath, branch, options = {}) { + const [pId, path] = [projectId, filePath].map(encodeURIComponent); + const extendedOptions = Object.assign({ branch }, options); + + return RequestHelper.delete( + this, + `projects/${pId}/repository/files/${path}`, + extendedOptions, + ); + } + + show(projectId, filePath, ref) { + const [pId, path] = [projectId, filePath].map(encodeURIComponent); + + return RequestHelper.get(this, `projects/${pId}/repository/files/${path}`, { + ref, + }); + } + + showRaw(projectId, filePath, ref) { + const [pId, path] = [projectId, filePath].map(encodeURIComponent); + + return RequestHelper.get( + this, + `projects/${pId}/repository/files/${path}/raw`, + { ref }, + ); + } +} + +export default RepositoryFiles; diff --git a/src/services/Runners.js b/src/services/Runners.js new file mode 100644 index 00000000..c52f0833 --- /dev/null +++ b/src/services/Runners.js @@ -0,0 +1,37 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class Runners extends BaseService { + all(options = {}) { + return RequestHelper.get(this, 'runners/all', options); + } + + allOwned(options = {}) { + return RequestHelper.get(this, 'runners', options); + } + + edit(runnerId, attributes) { + const rId = encodeURIComponent(runnerId); + + return RequestHelper.put(this, `runners/${rId}`, attributes); + } + + remove(runnerId) { + const rId = encodeURIComponent(runnerId); + + return RequestHelper.delete(this, `runners/${rId}`); + } + + show(runnerId) { + const rId = encodeURIComponent(runnerId); + + return RequestHelper.get(this, `runners/${rId}`); + } + + showJobs(runnerId) { + const rId = encodeURIComponent(runnerId); + + return RequestHelper.get(this, `runners/${rId}/jobs`); + } +} + +export default Runners; diff --git a/src/services/Services.js b/src/services/Services.js new file mode 100644 index 00000000..d2960281 --- /dev/null +++ b/src/services/Services.js @@ -0,0 +1,30 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class Services extends BaseService { + edit(projectId, serviceName, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.put( + this, + `projects/${pId}/services/${serviceName}`, + options, + ); + } + + remove(projectId, serviceName) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.delete( + this, + `projects/${pId}/services/${serviceName}`, + ); + } + + show(projectId, serviceName) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/services/${serviceName}`); + } +} + +export default Services; diff --git a/src/services/SystemHooks.js b/src/services/SystemHooks.js new file mode 100644 index 00000000..323362d4 --- /dev/null +++ b/src/services/SystemHooks.js @@ -0,0 +1,41 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class SystemHooks extends BaseService { + all(options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `hooks`, options); + } + + show(hookId) { + const hId = encodeURIComponent(hookId); + + return RequestHelper.get(this, `hooks/${hId}`); + } + + add(url, options = {}) { + return RequestHelper.post( + this, + `hooks`, + Object.assign({ url }, options), + ); + } + + edit(hookId, url, options = {}) { + const hId = encodeURIComponent(hookId); + + return RequestHelper.put( + this, + `hooks/${hId}`, + Object.assign({ url }, options), + ); + } + + remove(projectId, hookId) { + const hId = encodeURIComponent(hookId); + + return RequestHelper.delete(this, `hooks/${hId}`); + } +} + +export default SystemHooks; diff --git a/src/services/Tags.js b/src/services/Tags.js new file mode 100644 index 00000000..dafe50e1 --- /dev/null +++ b/src/services/Tags.js @@ -0,0 +1,35 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class Tags extends BaseService { + all(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/repository/tags`, options); + } + + create(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/repository/tags`, options); + } + + remove(projectId, tagName) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.delete( + this, + `projects/${pId}/repository/tags/${encodeURI(tagName)}`, + ); + } + + show(projectId, tagName) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get( + this, + `projects/${pId}/repository/tags/${encodeURI(tagName)}`, + ); + } +} + +export default Tags; diff --git a/src/services/Triggers.js b/src/services/Triggers.js new file mode 100644 index 00000000..b036d891 --- /dev/null +++ b/src/services/Triggers.js @@ -0,0 +1,35 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class Triggers extends BaseService { + add(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/triggers`, options); + } + + all(projectId) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/triggers`); + } + + edit(projectId, triggerId, options = {}) { + const [pId, tId] = [projectId, triggerId].map(encodeURIComponent); + + return RequestHelper.put(this, `projects/${pId}/triggers/${tId}`, options); + } + + remove(projectId, triggerId) { + const [pId, tId] = [projectId, triggerId].map(encodeURIComponent); + + return RequestHelper.delete(this, `projects/${pId}/triggers/${tId}`); + } + + show(projectId, triggerId) { + const [pId, tId] = [projectId, triggerId].map(encodeURIComponent); + + return RequestHelper.get(this, `projects/${pId}/triggers/${tId}`); + } +} + +export default Triggers; diff --git a/src/services/UserCustomAttributes.js b/src/services/UserCustomAttributes.js new file mode 100644 index 00000000..68a7ea27 --- /dev/null +++ b/src/services/UserCustomAttributes.js @@ -0,0 +1,9 @@ +import { ResourceCustomAttributes } from '../templates'; + +export class UserCustomAttributes { + constructor(options) { + return new ResourceCustomAttributes('users', options); + } +} + +export default UserCustomAttributes; diff --git a/src/services/Users.js b/src/services/Users.js new file mode 100644 index 00000000..63b52e29 --- /dev/null +++ b/src/services/Users.js @@ -0,0 +1,174 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class Users extends BaseService { + all(options = {}) { + return RequestHelper.get(this, 'users', options); + } + + activities() { + return RequestHelper.get(this, 'users/activities'); + } + + block(userId) { + const uId = encodeURIComponent(userId); + + return RequestHelper.post(this, `users/${uId}/block`); + } + + create(options = {}) { + return RequestHelper.post(this, 'users', options); + } + + current() { + return RequestHelper.get(this, 'user'); + } + + session(email, password) { + return RequestHelper.post(this, 'session', { + email, + password, + }); + } + + search(emailOrUsername) { + return RequestHelper.get(this, 'users', { + search: emailOrUsername, + }); + } + + show(userId) { + const uId = encodeURIComponent(userId); + + return RequestHelper.get(this, `users/${uId}`); + } + + remove(userId) { + const uId = encodeURIComponent(userId); + + return RequestHelper.delete(this, `users/${uId}`); + } + + unblock(userId) { + const uId = encodeURIComponent(userId); + + return RequestHelper.post(this, `users/${uId}/unblock`); + } + + // Emails + addEmail(email, userId) { + const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; + + return RequestHelper.post(this, url, { + email, + }); + } + + allEmails(userId) { + const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; + + return RequestHelper.get(this, url); + } + + showEmail(emailId) { + const eId = encodeURIComponent(emailId); + + return RequestHelper.get(this, `users/emails/${eId}`); + } + + removeEmail(emailId, userId) { + const eId = encodeURIComponent(emailId); + const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; + + return RequestHelper.delete(this, `${url}/${eId}`); + } + + // Impersonation Tokens + allImpersonationTokens(userId) { + const uId = encodeURIComponent(userId); + + return RequestHelper.get(this, `users/${uId}/impersonation_tokens`); + } + + createImpersonationToken(userId, name, scopes, expiresAt) { + const uId = encodeURIComponent(userId); + + return RequestHelper.post(this, `users/${uId}/impersonation_tokens`, { + name, + expiresAt, + scopes, + }); + } + + showImpersonationToken(userId, tokenId) { + const [uId, tId] = [userId, tokenId].map(encodeURIComponent); + + return RequestHelper.get(this, `users/${uId}/impersonation_tokens/${tId}`); + } + + revokeImpersonationToken(userId, tokenId) { + const [uId, tId] = [userId, tokenId].map(encodeURIComponent); + + return RequestHelper.delete(this, `users/${uId}/impersonation_tokens/${tId}`); + } + + // GPG Keys + allGPGKeys(userId) { + const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; + + return RequestHelper.get(this, url); + } + + addGPGKey(title, key, userId) { + const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; + + return RequestHelper.post(this, url, { + title, + key, + }); + } + + showGPGKey(keyId, userId) { + const kId = encodeURIComponent(keyId); + const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; + + return RequestHelper.get(this, `${url}/${kId}`); + } + + removeGPGKey(keyId, userId) { + const kId = encodeURIComponent(keyId); + const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; + + return RequestHelper.delete(this, `${url}/${kId}`); + } + + // SSH Keys + allKeys(userId) { + const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'; + + return RequestHelper.get(this, url); + } + + addKey(title, key, userId) { + const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'; + + return RequestHelper.post(this, url, { + title, + key, + }); + } + + showKey(keyId) { + const kId = encodeURIComponent(keyId); + + return RequestHelper.get(this, `users/keys/${kId}`); + } + + removeKey(keyId, userId) { + const kId = encodeURIComponent(keyId); + const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'; + + return RequestHelper.delete(this, `${url}/${kId}`); + } +} + +export default Users; diff --git a/src/services/Version.js b/src/services/Version.js new file mode 100644 index 00000000..92360ad7 --- /dev/null +++ b/src/services/Version.js @@ -0,0 +1,9 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class Version extends BaseService { + show() { + return RequestHelper.get(this, 'version'); + } +} + +export default Version; diff --git a/src/services/index.js b/src/services/index.js new file mode 100644 index 00000000..6a81873f --- /dev/null +++ b/src/services/index.js @@ -0,0 +1,41 @@ +// Groups +export * from './GroupAccessRequests'; +export * from './GroupCustomAttributes'; +export * from './GroupMembers'; +export * from './GroupMilestones'; +export * from './GroupProjects'; +export * from './Groups'; + +// Projects +export * from './Branches'; +export * from './Commits'; +export * from './CommitNotes'; +export * from './DeployKeys'; +export * from './Environments'; +export * from './Issues'; +export * from './Jobs'; +export * from './Labels'; +export * from './MergeRequests'; +export * from './MergeRequestNotes'; +export * from './MergeRequestVersions'; +export * from './Pipelines'; +export * from './Projects'; +export * from './ProjectAccessRequests'; +export * from './ProjectCustomAttributes'; +export * from './ProjectHooks'; +export * from './ProjectMembers'; +export * from './ProjectMilestones'; +export * from './ProjectSnippets'; +export * from './ProtectedBranches'; +export * from './Repositories'; +export * from './RepositoryFiles'; +export * from './Runners'; +export * from './Services'; +export * from './Tags'; +export * from './Triggers'; + +// General +export * from './SystemHooks'; +export * from './Users'; +// export * from './UserKeys'; +// export * from './UserGPGKeys'; diff --git a/src/templates/ResourceAccessRequests.js b/src/templates/ResourceAccessRequests.js new file mode 100644 index 00000000..36a160f8 --- /dev/null +++ b/src/templates/ResourceAccessRequests.js @@ -0,0 +1,57 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export const ACCESS_LEVELS = { + GUEST: 10, + REPORTER: 20, + DEVELOPER: 30, + MASTER: 40, + OWNER: 50, +}; + +export class ResourceAccessRequests extends BaseService { + constructor(resourceType, ...args) { + super(...args); + + this.resourceType = resourceType; + this.ACCESS_LEVELS = ACCESS_LEVELS; + } + + all(resourceId) { + const rId = encodeURIComponent(resourceId); + + return RequestHelper.get( + this, + `${this.resourceType}/${rId}/access_requests`, + ); + } + + request(resourceId) { + const rId = encodeURIComponent(resourceId); + + return RequestHelper.post( + this, + `${this.resourceType}/${rId}/access_requests`, + ); + } + + approve(resourceId, userId, { accessLevel = 30 }) { + const [rId, uId] = [resourceId, userId].map(encodeURIComponent); + + return RequestHelper.post( + this, + `${this.resourceType}/${rId}/access_requests/${uId}/approve`, + { accessLevel }, + ); + } + + deny(resourceId, userId) { + const [rId, uId] = [resourceId, userId].map(encodeURIComponent); + + return RequestHelper.delete( + this, + `${this.resourceType}/${rId}/access_requests/${uId}/approve`, + ); + } +} + +export default ResourceAccessRequests; diff --git a/src/templates/ResourceCustomAttributes.js b/src/templates/ResourceCustomAttributes.js new file mode 100644 index 00000000..0ae6faa4 --- /dev/null +++ b/src/templates/ResourceCustomAttributes.js @@ -0,0 +1,48 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class ResourceCustomAttributes extends BaseService { + constructor(resourceType, ...args) { + super(...args); + + this.resourceType = resourceType; + } + + all(resourceId) { + const rId = encodeURIComponent(resourceId); + + return RequestHelper.get( + this, + `${this.resourceType}/${rId}/custom_attributes`, + ); + } + + set(resourceId, customAttributeId, value) { + const [rId, cId] = [resourceId, customAttributeId].map(encodeURIComponent); + + return RequestHelper.put( + this, + `${this.resourceType}/${rId}/custom_attributes/${cId}`, + { value }, + ); + } + + remove(resourceId, customAttributeId) { + const [rId, cId] = [resourceId, customAttributeId].map(encodeURIComponent); + + return RequestHelper.delete( + this, + `${this.resourceType}/${rId}/custom_attributes/${cId}`, + ); + } + + show(resourceId, customAttributeId) { + const [rId, cId] = [resourceId, customAttributeId].map(encodeURIComponent); + + return RequestHelper.get( + this, + `${this.resourceType}/${rId}/custom_attributes/${cId}`, + ); + } +} + +export default ResourceCustomAttributes; diff --git a/src/templates/ResourceMembers.js b/src/templates/ResourceMembers.js new file mode 100644 index 00000000..7ec45fd0 --- /dev/null +++ b/src/templates/ResourceMembers.js @@ -0,0 +1,56 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class ResourceMembers extends BaseService { + constructor(resourceType, ...args) { + super(...args); + + this.resourceType = resourceType; + } + + all(resourceId) { + const rId = encodeURIComponent(resourceId); + + return RequestHelper.get(this, `${this.resourceType}/${rId}/members`); + } + + add(resourceId, userId, accessLevel) { + const [rId, uId] = [resourceId, userId].map(encodeURIComponent); + + return RequestHelper.post(this, `${this.resourceType}/${rId}/members`, { + user_id: uId, + access_level: parseInt(accessLevel, 10), + }); + } + + edit(resourceId, userId, accessLevel) { + const [rId, uId] = [resourceId, userId].map(encodeURIComponent); + + return RequestHelper.put( + this, + `${this.resourceType}/${rId}/members/${uId}`, + { + access_level: parseInt(accessLevel, 10), + }, + ); + } + + show(resourceId, userId) { + const [rId, uId] = [resourceId, userId].map(encodeURIComponent); + + return RequestHelper.get( + this, + `${this.resourceType}/${rId}/members/${uId}`, + ); + } + + remove(resourceId, userId) { + const [rId, uId] = [resourceId, userId].map(encodeURIComponent); + + return RequestHelper.delete( + this, + `${this.resourceType}/${rId}/members/${uId}`, + ); + } +} + +export default ResourceMembers; diff --git a/src/templates/ResourceMilestones.js b/src/templates/ResourceMilestones.js new file mode 100644 index 00000000..379166d2 --- /dev/null +++ b/src/templates/ResourceMilestones.js @@ -0,0 +1,50 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class ResourceMilestones extends BaseService { + constructor(resourceType, ...args) { + super(...args); + + this.resourceType = resourceType; + } + + all(resourceId, options = {}) { + const rId = encodeURIComponent(resourceId); + + return RequestHelper.get(this, `${this.resourceType}/${rId}/milestones`, options); + } + + create(resourceId, title, options) { + const rId = encodeURIComponent(resourceId); + + return RequestHelper.post(this, `${this.resourceType}/${rId}/milestones`, options); + } + + edit(resourceId, milestoneId, options) { + const [rId, mId] = [resourceId, milestoneId].map(encodeURIComponent); + + return RequestHelper.put(this, `${this.resourceType}/${rId}/milestones/${mId}`, options); + } + + issues(resourceId, milestoneId) { + const [rId, mId] = [resourceId, milestoneId].map(encodeURIComponent); + + return RequestHelper.get( + this, + `${this.resourceType}/${rId}/milestones/${mId}/issues`, + ); + } + + mergeRequests(resourceId, milestoneId) { + const [rId, mId] = [resourceId, milestoneId].map(encodeURIComponent); + + return RequestHelper.get(this, `${this.resourceType}/${rId}/milestones/${mId}/merge_requests`); + } + + show(resourceId, milestoneId) { + const [rId, mId] = [resourceId, milestoneId].map(encodeURIComponent); + + return RequestHelper.get(this, `${this.resourceType}/${rId}/milestones/${mId}`); + } +} + +export default ResourceMilestones; diff --git a/src/templates/ResourceNotes.js b/src/templates/ResourceNotes.js new file mode 100644 index 00000000..e7a11ce8 --- /dev/null +++ b/src/templates/ResourceNotes.js @@ -0,0 +1,46 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +export class ResourceNotes extends BaseService { + constructor(resourceType, resource2Type, ...args) { + super(...args); + + this.resourceType = resourceType; + this.resource2Type = resource2Type; + } + + all(resourceId, resource2Id, options = {}) { + const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); + + return RequestHelper.get(this, `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes`, options); + } + + create(resourceId, resource2Id, options = {}) { + if (!options.body) throw new Error('Missing required property: body'); + + const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); + + return RequestHelper.post(this, `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes`, options); + } + + edit(resourceId, resource2Id, noteId, options = {}) { + if (!options.body) throw new Error('Missing required property: body'); + + const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent); + + return RequestHelper.put(this, `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, options); + } + + remove(resourceId, resource2Id, noteId) { + const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent); + + return RequestHelper.delete(this, `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`); + } + + show(resourceId, resource2Id, noteId) { + const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent); + + return RequestHelper.get(this, `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`); + } +} + +export default ResourceNotes; diff --git a/src/templates/index.js b/src/templates/index.js new file mode 100644 index 00000000..5ae496a5 --- /dev/null +++ b/src/templates/index.js @@ -0,0 +1,5 @@ +export * from './ResourceNotes'; +export * from './ResourceAccessRequests'; +export * from './ResourceMembers'; +export * from './ResourceMilestones'; +export * from './ResourceCustomAttributes'; From a657671f52b70279cd26b6843de748a65d072dd1 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Sat, 10 Mar 2018 13:38:41 -0500 Subject: [PATCH 02/90] Added support for events --- src/services/Events.js | 46 ++++++++++++++++++++++++++++++++++++++++ src/services/Projects.js | 9 ++++++++ src/services/Users.js | 9 ++++++++ 3 files changed, 64 insertions(+) create mode 100644 src/services/Events.js diff --git a/src/services/Events.js b/src/services/Events.js new file mode 100644 index 00000000..e052a326 --- /dev/null +++ b/src/services/Events.js @@ -0,0 +1,46 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +const ACTION_TYPES = [ + 'created', + 'updated', + 'closed', + 'reopened', + 'pushed', + 'commented', + 'merged', + 'joined', + 'left', + 'destroyed', + 'expired', +]; + +const TARGET_TYPES = [ + 'issue', + 'milestone', + 'merge_request', + 'note', + 'project', + 'snippet', + 'user', +]; + +function validateEventOptions(action, target) { + if (!ACTION_TYPES.includes(action)) { + throw new Error(`This action is not supported. Pleased use one of following options: ${ACTION_TYPES}`); + } + + if (!TARGET_TYPES.includes(target)) { + throw new Error(`This target is not supported. Pleased use one of following options: ${TARGET_TYPES}`); + } +} + +export class Events extends BaseService { + all(options) { + validateEventOptions(options.action, options.targetType); + + return RequestHelper.get(this, 'events', options); + } +} + +export default Events; +export { validateEventOptions }; diff --git a/src/services/Projects.js b/src/services/Projects.js index 796ea90b..2911b441 100644 --- a/src/services/Projects.js +++ b/src/services/Projects.js @@ -1,6 +1,7 @@ import Fs from 'fs'; import Path from 'path'; import { BaseService, RequestHelper } from '../infrastructure'; +import { validateEventOptions } from './Events'; export class Projects extends BaseService { all(options = {}) { @@ -23,6 +24,14 @@ export class Projects extends BaseService { return RequestHelper.put(this, `projects/${pId}`, options); } + events(projectId, options) { + validateEventOptions(options.action, options.targetType); + + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/events`, options); + } + fork(projectId, options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/Users.js b/src/services/Users.js index 63b52e29..78d82843 100644 --- a/src/services/Users.js +++ b/src/services/Users.js @@ -1,4 +1,5 @@ import { BaseService, RequestHelper } from '../infrastructure'; +import { validateEventOptions } from './Events'; export class Users extends BaseService { all(options = {}) { @@ -23,6 +24,14 @@ export class Users extends BaseService { return RequestHelper.get(this, 'user'); } + events(userId, options) { + validateEventOptions(options.action, options.targetType); + + const uId = encodeURIComponent(userId); + + return RequestHelper.get(this, `users/${uId}/events`, options); + } + session(email, password) { return RequestHelper.post(this, 'session', { email, From bc9c081d0ecfcb2fc1242f9811b12d6747219140 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Sat, 10 Mar 2018 13:40:41 -0500 Subject: [PATCH 03/90] Renaming user functions --- src/services/Users.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/services/Users.js b/src/services/Users.js index 78d82843..7ad35f38 100644 --- a/src/services/Users.js +++ b/src/services/Users.js @@ -72,7 +72,7 @@ export class Users extends BaseService { }); } - allEmails(userId) { + emails(userId) { const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; return RequestHelper.get(this, url); @@ -92,7 +92,7 @@ export class Users extends BaseService { } // Impersonation Tokens - allImpersonationTokens(userId) { + impersonationTokens(userId) { const uId = encodeURIComponent(userId); return RequestHelper.get(this, `users/${uId}/impersonation_tokens`); @@ -121,7 +121,7 @@ export class Users extends BaseService { } // GPG Keys - allGPGKeys(userId) { + gpgKeys(userId) { const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; return RequestHelper.get(this, url); @@ -151,7 +151,7 @@ export class Users extends BaseService { } // SSH Keys - allKeys(userId) { + keys(userId) { const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'; return RequestHelper.get(this, url); From d78e194bcc57738cea25da2c1c480f3738bbf96d Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Sat, 10 Mar 2018 13:48:20 -0500 Subject: [PATCH 04/90] Adding variables to groups and projects --- src/services/Groups.js | 31 +++++++++++++++++++++++++++++++ src/services/Projects.js | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/src/services/Groups.js b/src/services/Groups.js index 8375c29e..736b10ed 100644 --- a/src/services/Groups.js +++ b/src/services/Groups.js @@ -32,6 +32,37 @@ export class Groups extends BaseService { search: nameOrPath, }); } + + // Variables + createVariable(groupId, options) { + const gId = encodeURIComponent(groupId); + + return RequestHelper.post(this, `groups/${gId}/variables`, options); + } + + editVariable(groupId, keyId, options) { + const [gId, kId] = [groupId, keyId].map(encodeURIComponent); + + return RequestHelper.put(this, `groups/${gId}/variables/${kId}`, options); + } + + variables(groupId) { + const gId = encodeURIComponent(groupId); + + return RequestHelper.get(this, `groups/${gId}/variables`); + } + + showVariable(groupId, keyId) { + const [gId, kId] = [groupId, keyId].map(encodeURIComponent); + + return RequestHelper.get(this, `groups/${gId}/variables/${kId}`); + } + + removeVariable(groupId, keyId) { + const [gId, kId] = [groupId, keyId].map(encodeURIComponent); + + return RequestHelper.delete(this, `groups/${gId}/variables/${kId}`); + } } export default Groups; diff --git a/src/services/Projects.js b/src/services/Projects.js index 2911b441..77f4dee0 100644 --- a/src/services/Projects.js +++ b/src/services/Projects.js @@ -18,7 +18,7 @@ export class Projects extends BaseService { return RequestHelper.post(this, 'projects', options); } - edit(projectId, options = {}) { + edit(projectId, options) { const pId = encodeURIComponent(projectId); return RequestHelper.put(this, `projects/${pId}`, options); @@ -32,7 +32,7 @@ export class Projects extends BaseService { return RequestHelper.get(this, `projects/${pId}/events`, options); } - fork(projectId, options = {}) { + fork(projectId, options) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/fork`, options); @@ -112,6 +112,37 @@ export class Projects extends BaseService { true, ); } + + // Variables + createVariable(projectId, options) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/variables`, options); + } + + editVariable(projectId, keyId, options) { + const [pId, kId] = [projectId, keyId].map(encodeURIComponent); + + return RequestHelper.put(this, `projects/${pId}/variables/${kId}`, options); + } + + variables(projectId) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/variables`); + } + + showVariable(projectId, keyId) { + const [pId, kId] = [projectId, keyId].map(encodeURIComponent); + + return RequestHelper.get(this, `projects/${pId}/variables/${kId}`); + } + + removeVariable(projectId, keyId) { + const [pId, kId] = [projectId, keyId].map(encodeURIComponent); + + return RequestHelper.delete(this, `projects/${pId}/variables/${kId}`); + } } export default Projects; From bea06a6f7a9454c53b00647cb08c7c0f440e5e1a Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Sat, 10 Mar 2018 13:49:10 -0500 Subject: [PATCH 05/90] Cleaning up order of functions in groups --- src/services/Groups.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/services/Groups.js b/src/services/Groups.js index 736b10ed..8ac4ab94 100644 --- a/src/services/Groups.js +++ b/src/services/Groups.js @@ -5,18 +5,6 @@ export class Groups extends BaseService { return RequestHelper.get(this, 'groups', options); } - allSubgroups(groupId, options = {}) { - const gId = encodeURIComponent(groupId); - - return RequestHelper.get(this, `groups/${gId}/subgroups`, options); - } - - show(groupId) { - const gId = encodeURIComponent(groupId); - - return RequestHelper.get(this, `groups/${gId}`); - } - create(options = {}) { return RequestHelper.post(this, 'groups', options); } @@ -33,6 +21,18 @@ export class Groups extends BaseService { }); } + show(groupId) { + const gId = encodeURIComponent(groupId); + + return RequestHelper.get(this, `groups/${gId}`); + } + + subgroups(groupId, options = {}) { + const gId = encodeURIComponent(groupId); + + return RequestHelper.get(this, `groups/${gId}/subgroups`, options); + } + // Variables createVariable(groupId, options) { const gId = encodeURIComponent(groupId); From b65e5ec28777c027cb4bb3ab9313b0c2e0cda10f Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Fri, 16 Mar 2018 20:40:52 -0400 Subject: [PATCH 06/90] Lots of updates - Updated to the latest version of babel - Added the correct export of each of the services, their combined namespaces and the full initialized api - Added functionality to the Projects api and the Users api --- .babelrc | 8 +- package-lock.json | 2860 ++++++++++----------- package.json | 28 +- src/index.js | 108 +- src/infrastructure/Namespace.js | 11 + src/infrastructure/index.js | 5 +- src/services/Branches.js | 2 +- src/services/Commits.js | 2 +- src/services/DeployKeys.js | 2 +- src/services/Environments.js | 2 +- src/services/Events.js | 2 +- src/services/GroupAccessRequests.js | 2 +- src/services/GroupCustomAttributes.js | 2 +- src/services/GroupMembers.js | 2 +- src/services/GroupMilestones.js | 2 +- src/services/GroupProjects.js | 2 +- src/services/GroupVariables.js | 9 + src/services/Groups.js | 39 +- src/services/Issues.js | 2 +- src/services/Jobs.js | 2 +- src/services/Labels.js | 2 +- src/services/MergeRequestNotes.js | 2 +- src/services/MergeRequestVersions.js | 2 +- src/services/MergeRequests.js | 2 +- src/services/Pipelines.js | 2 +- src/services/ProjectAccessRequests.js | 2 +- src/services/ProjectCustomAttributes.js | 2 +- src/services/ProjectHooks.js | 2 +- src/services/ProjectMembers.js | 2 +- src/services/ProjectMilestones.js | 2 +- src/services/ProjectRunners.js | 2 +- src/services/ProjectSnippets.js | 2 +- src/services/ProjectVariables.js | 9 + src/services/Projects.js | 62 +- src/services/ProtectedBranches.js | 2 +- src/services/Repositories.js | 2 +- src/services/RepositoryFiles.js | 2 +- src/services/Runners.js | 2 +- src/services/Services.js | 2 +- src/services/SystemHooks.js | 2 +- src/services/Tags.js | 2 +- src/services/Triggers.js | 2 +- src/services/UserCustomAttributes.js | 2 +- src/services/UserEmails.js | 32 + src/services/UserGPGKeys.js | 34 + src/services/UserImpersonationTokens.js | 33 + src/services/UserKeys.js | 33 + src/services/Users.js | 118 +- src/services/index.js | 77 +- src/templates/ResourceAccessRequests.js | 2 +- src/templates/ResourceCustomAttributes.js | 2 +- src/templates/ResourceMembers.js | 2 +- src/templates/ResourceMilestones.js | 2 +- src/templates/ResourceNotes.js | 2 +- src/templates/ResourceVariables.js | 41 + src/templates/index.js | 11 +- 56 files changed, 1773 insertions(+), 1821 deletions(-) create mode 100644 src/infrastructure/Namespace.js create mode 100644 src/services/GroupVariables.js create mode 100644 src/services/ProjectVariables.js create mode 100644 src/services/UserEmails.js create mode 100644 src/services/UserGPGKeys.js create mode 100644 src/services/UserImpersonationTokens.js create mode 100644 src/services/UserKeys.js create mode 100644 src/templates/ResourceVariables.js diff --git a/.babelrc b/.babelrc index 5f8c28fb..ea6d331e 100644 --- a/.babelrc +++ b/.babelrc @@ -1,9 +1,13 @@ { "presets": [ - ["env", { + ["@babel/preset-env", { "targets": { - "node": "8.9.0" + "node": "9.80" } }] + ], + "plugins": [ + "@babel/plugin-proposal-export-default-from", + "@babel/plugin-proposal-export-namespace-from" ] } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8fb87b90..bf9ceb53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,111 +1,974 @@ { "name": "node-gitlab-api", - "version": "2.2.4", + "version": "3.0.0-beta", "lockfileVersion": 1, "requires": true, "dependencies": { - "@babel/code-frame": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.36.tgz", - "integrity": "sha512-sW77BFwJ48YvQp3Gzz5xtAUiXuYOL2aMJKDwiaY3OcvdqBFurtYfOpSa4QrNyDxmOGRFSYzUpabU2m9QrlWE7w==", + "@babel/cli": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.0.0-beta.42.tgz", + "integrity": "sha512-I3kv9SU0A0nfT1xTdnQhmZl/b1L4XidY+IGSn3g5zidE2It7lD2paAQ4jROGlYE/gq/fzfNdNy5Mt6RQuqmUWQ==", "dev": true, "requires": { - "chalk": "2.3.0", + "chokidar": "1.7.0", + "commander": "2.15.0", + "convert-source-map": "1.5.1", + "fs-readdir-recursive": "1.1.0", + "glob": "7.1.2", + "lodash": "4.17.4", + "output-file-sync": "2.0.1", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "@babel/code-frame": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.42.tgz", + "integrity": "sha512-L8i94FLSyaLQpRfDo/qqSm8Ndb44zMtXParXo0MebJICG1zoCCL4+GkzUOlB4BNTRSXXQdb3feam/qw7bKPipQ==", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0-beta.42" + } + }, + "@babel/core": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.0.0-beta.42.tgz", + "integrity": "sha512-jcjZRewF/xqROfbk8EGyWlykaIR3IwrcefjWHu8xh4QnULSv3nfkjPM35v1itDgAT4/Jj5b4mPf4eZSC2HoRQA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.42", + "@babel/generator": "7.0.0-beta.42", + "@babel/helpers": "7.0.0-beta.42", + "@babel/template": "7.0.0-beta.42", + "@babel/traverse": "7.0.0-beta.42", + "@babel/types": "7.0.0-beta.42", + "babylon": "7.0.0-beta.42", + "convert-source-map": "1.5.1", + "debug": "3.1.0", + "json5": "0.5.1", + "lodash": "4.17.4", + "micromatch": "2.3.11", + "resolve": "1.5.0", + "semver": "5.5.0", + "source-map": "0.5.7" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.42.tgz", + "integrity": "sha512-h6E/OkkvcBw/JimbL0p8dIaxrcuQn3QmIYGC/GtJlRYif5LTKBYPHXYwqluJpfS/kOXoz0go+9mkmOVC0M+zWw==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.42.tgz", + "integrity": "sha512-9x3zS4nG/6GAvJWB8fAK+5g/Di36xdubB43dMNSucNJTwPvmyfCippir/0I8zyG+ID66hLCLi8V9bomlWRYaHA==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.42", + "jsesc": "2.5.1", + "lodash": "4.17.4", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", + "dev": true + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.42.tgz", + "integrity": "sha512-2lmcB7mHRSXZjDV9fdnWGRco+5fbI0PdUtsL7mNA2GtJs0GPoKdV3sCx0N4cpzG2YRR4dNCiB2riYIrzWjmQ1Q==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.42" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.42.tgz", + "integrity": "sha512-lI14OS85dMAvsjTNTLrk3qqqvmy4CNxgXGpWkjMuKlYzwnC7LQvdrdH7wf3CBl8C0GSZHbgvADMUtrKiNjxJ5w==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "7.0.0-beta.42", + "@babel/types": "7.0.0-beta.42" + } + }, + "@babel/helper-call-delegate": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0-beta.42.tgz", + "integrity": "sha512-iGZJrRSKIvla9m8VJNv8wlbPReOLmVqFTpefl07v6e5cMPvP2XOgVWR2B4HZ9UwVo7Lx8rPAQ8/UZgjvq+pJ+A==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "7.0.0-beta.42", + "@babel/traverse": "7.0.0-beta.42", + "@babel/types": "7.0.0-beta.42" + } + }, + "@babel/helper-define-map": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.0.0-beta.42.tgz", + "integrity": "sha512-MKaHNaciAiPc7q4AS2XRqk+I0d2ADryuIxd6r0EykkQ57w2nQxFx/CTWWQEnob9OSAP5dPO1stWIZ9j/VeKtIQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "7.0.0-beta.42", + "@babel/types": "7.0.0-beta.42", + "lodash": "4.17.4" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0-beta.42.tgz", + "integrity": "sha512-fT1kVF2PoogggBT9QBgb4IXjbpC3VzFh1sJ6p/k3fZhOXbyqqco7oQ6lzvcIAO6rA7b15/iaIyLj0E+SLCHbwQ==", + "dev": true, + "requires": { + "@babel/traverse": "7.0.0-beta.42", + "@babel/types": "7.0.0-beta.42" + } + }, + "@babel/helper-function-name": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.42.tgz", + "integrity": "sha512-6IZ+kkPypwJrnmNzI3y31qAps2kXoPtCE241SvBva2YzB0n/YORWx2YM0jHPYOJBU9Xx5KkUhOKuWkeXZQgtTA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "7.0.0-beta.42", + "@babel/template": "7.0.0-beta.42", + "@babel/types": "7.0.0-beta.42" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.42.tgz", + "integrity": "sha512-hF5KKcn+V/5PwU7KZ1aVwo535woLC9eV+djaoyNPZeMMJ2s+8bZlEa66Tarei0T68VRL5LXIs1Ao4hSabSkpBg==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.42" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0-beta.42.tgz", + "integrity": "sha512-07NJrcvE2a5oOYiQUzSzih21R6nOpfoIe9saelKxORKXr9cOXcpoLXDi9XIAbRJoww8hqp57JbQxRK09FltZhQ==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.42" + } + }, + "@babel/helper-module-imports": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.42.tgz", + "integrity": "sha512-0kTX0cjuVKUKDJmHjmAb504kNrwae0Ja32hGii7zSHDKm0tVZvvpT8Cc1yYHo6UsIkUmzEvfGwIrNYemx1jTtQ==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.42", + "lodash": "4.17.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-beta.42.tgz", + "integrity": "sha512-XfCGsf6ijExiXw+oKL1Cp7VJttvgq8qalTGRqz4pviVNEjHU89Pfjsi1K/shdy5x4x+PiTSqn4zZ2PKfVp+vgg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "7.0.0-beta.42", + "@babel/helper-simple-access": "7.0.0-beta.42", + "@babel/helper-split-export-declaration": "7.0.0-beta.42", + "@babel/template": "7.0.0-beta.42", + "@babel/types": "7.0.0-beta.42", + "lodash": "4.17.4" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0-beta.42.tgz", + "integrity": "sha512-4Sssg3iFnLH/1fZQFCPNJ7ISZzrRwq/X8/T5OaURGP3NMVTR4mnEUqrc3v8/SfL3pfa57q3Fe4zIC2h7FuPkww==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.42" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.42.tgz", + "integrity": "sha512-hZLw8Iz9/YOxI9mgWyPOP1S84OcdQo1WFkZrS1sSf45g16sEb4dVslds2uvZgmx9BiG94PoWyABGf48Py6D6CA==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0-beta.42.tgz", + "integrity": "sha512-QdwTsTPjJ63StltU6cEtqmB0Lc+L/OkK9Pz2bL9rylDF3UloyXinBA+SI/FkVyXi5HhDbBRf4T/OeVhWrsK68A==", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0-beta.42.tgz", + "integrity": "sha512-At+ipbHRYoN0AaafqPvTPqyVYi+beantKZ2orCYSb/AzP2+JywaWlOPH0wyXLOGzjkJX548Is4cV2wGbEG7++Q==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "7.0.0-beta.42", + "@babel/helper-wrap-function": "7.0.0-beta.42", + "@babel/template": "7.0.0-beta.42", + "@babel/traverse": "7.0.0-beta.42", + "@babel/types": "7.0.0-beta.42" + } + }, + "@babel/helper-replace-supers": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0-beta.42.tgz", + "integrity": "sha512-5OwdkTm7TaEBiBMOUV97j8a2goD3+avek9EOl/UdE/CYdtdQ/8RPdUPqtqXApay30aZ/EjIpBItcNlBtt29WBw==", + "dev": true, + "requires": { + "@babel/helper-optimise-call-expression": "7.0.0-beta.42", + "@babel/template": "7.0.0-beta.42", + "@babel/traverse": "7.0.0-beta.42", + "@babel/types": "7.0.0-beta.42" + } + }, + "@babel/helper-simple-access": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.0.0-beta.42.tgz", + "integrity": "sha512-SK1nb/sx+Q/0N8USPR+/5G1D1U9tCo82MzJknmK7X4yexDacHmDHtqNP7xqUlSSo3xfMfyHgT7mAH17Cwik/gA==", + "dev": true, + "requires": { + "@babel/template": "7.0.0-beta.42", + "@babel/types": "7.0.0-beta.42", + "lodash": "4.17.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.42.tgz", + "integrity": "sha512-2r8pZG6SAJTTaI2OhxCmz5PKlMUPY5adOHrHtb1gM3ibJPDOzPAeOQNzItdxNnM33jjRakEGitXX6iYg7Sz73w==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.42" + } + }, + "@babel/helper-wrap-function": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0-beta.42.tgz", + "integrity": "sha512-jpZDbZROEw2HfmlImLXDB7BFoyo6M/Wn8jOOc1+JfCpg2uaZ+n6Q0C3sA6mCN6o7ZgpJkgT7IHQwdB3RMV6KLA==", + "dev": true, + "requires": { + "@babel/helper-function-name": "7.0.0-beta.42", + "@babel/template": "7.0.0-beta.42", + "@babel/traverse": "7.0.0-beta.42", + "@babel/types": "7.0.0-beta.42" + } + }, + "@babel/helpers": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.0.0-beta.42.tgz", + "integrity": "sha512-att9SiG9GxOUdjai87LqjSstgNsdo1nXiGu+Eh078zwRiN8bM5Ww8vrbYkAm9PF4HaW6OzOKqyKxv595RT79bA==", + "dev": true, + "requires": { + "@babel/template": "7.0.0-beta.42", + "@babel/traverse": "7.0.0-beta.42", + "@babel/types": "7.0.0-beta.42" + } + }, + "@babel/highlight": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.42.tgz", + "integrity": "sha512-X3Ur/A/lIbbP8W0pmwgqtDXIxhQmxPaiwY9SKP7kF9wvZfjZRwMvbJE92ozUhF3UDK3DCKaV7oGqmI1rP/zqWA==", + "dev": true, + "requires": { + "chalk": "2.3.2", "esutils": "2.0.2", "js-tokens": "3.0.2" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "supports-color": "5.3.0" } }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "3.0.0" } } } }, - "@babel/helper-function-name": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.36.tgz", - "integrity": "sha512-/SGPOyifPf20iTrMN+WdlY2MbKa7/o4j7B/4IAsdOusASp2icT+Wcdjf4tjJHaXNX8Pe9bpgVxLNxhRvcf8E5w==", + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0-beta.42.tgz", + "integrity": "sha512-fPPsSCajWzefDSb49JEeZfd/UeMK3xEQSRAz/H3BZ1uaRatwNNZoOJq4/WRH/xDeISmYUdkLRtqs39VPWLKYVg==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "7.0.0-beta.36", - "@babel/template": "7.0.0-beta.36", - "@babel/types": "7.0.0-beta.36" + "@babel/helper-plugin-utils": "7.0.0-beta.42", + "@babel/helper-remap-async-to-generator": "7.0.0-beta.42", + "@babel/plugin-syntax-async-generators": "7.0.0-beta.42" } }, - "@babel/helper-get-function-arity": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.36.tgz", - "integrity": "sha512-vPPcx2vsSoDbcyWr9S3nd0FM3B4hEXnt0p1oKpwa08GwK0fSRxa98MyaRGf8suk8frdQlG1P3mDrz5p/Rr3pbA==", + "@babel/plugin-proposal-export-default-from": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.0.0-beta.42.tgz", + "integrity": "sha512-1V7gigonXxR+3BWFsyf78AGGBseFqqQGTROEp3BtpnQVeXMzNNIMkcXoN8PDT2AO6MBR4rN2iaBwy2jLMQm6CQ==", "dev": true, "requires": { - "@babel/types": "7.0.0-beta.36" + "@babel/helper-plugin-utils": "7.0.0-beta.42", + "@babel/plugin-syntax-export-default-from": "7.0.0-beta.42" + } + }, + "@babel/plugin-proposal-export-namespace": { + "version": "7.0.0-beta.32", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace/-/plugin-proposal-export-namespace-7.0.0-beta.32.tgz", + "integrity": "sha512-vSnkdadqxvkOtNgoY8lo3cpXkBkRBLS6Z/2IoHZRplp1e/V6a/wGRBwwJGEQoi24WDIMwzlOl6V0I7q/MTo9jA==", + "dev": true, + "requires": { + "@babel/plugin-syntax-export-extensions": "7.0.0-beta.32" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.0.0-beta.42.tgz", + "integrity": "sha512-F48NJRViqyiW2iAxEx9MvTSDz52y93+9UQIcqwnfQmI/H+YFCmzJGTa5w1htz4BvxOxAFFJZI+UUPPQqiR1Vjg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42", + "@babel/plugin-syntax-export-namespace-from": "7.0.0-beta.42" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0-beta.42.tgz", + "integrity": "sha512-L4z5R8k3GxQKVYE2zGwftQ9K/IIIXMZKnY4C0lDyyMJAVk+H+cFUD0NfD4KTyZACc8DPqjkw6aEtC/AKCKUvEA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42", + "@babel/plugin-syntax-object-rest-spread": "7.0.0-beta.42" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0-beta.42.tgz", + "integrity": "sha512-hD8HTOKzLqMXwKkqX+Qiig8aqsCoZ9k9Y0I3zLjkpYh7HBPoPhUhlN6McxtPHGRjM/qBCNcLCwtWuJetK/cNZg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42", + "@babel/plugin-syntax-optional-catch-binding": "7.0.0-beta.42" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0-beta.42.tgz", + "integrity": "sha512-aUEpQFuQydhs20dQSkz7edWkRaNHt8rVfcqHy5ykR4dqflq7+EclnuljuzIS+MJ3V8i5cyLMEXv/W1uWWf7UGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42", + "@babel/helper-regex": "7.0.0-beta.42", + "regexpu-core": "4.1.3" + }, + "dependencies": { + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "dev": true + }, + "regexpu-core": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.1.3.tgz", + "integrity": "sha512-mB+njEzO7oezA57IbQxxd6fVPOeWKDmnGvJ485CwmfNchjHe5jWwqKepapmzUEj41yxIAqOg+C4LbXuJlkiO8A==", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regenerate-unicode-properties": "5.1.3", + "regjsgen": "0.3.0", + "regjsparser": "0.2.1", + "unicode-match-property-ecmascript": "1.0.3", + "unicode-match-property-value-ecmascript": "1.0.1" + } + }, + "regjsgen": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.3.0.tgz", + "integrity": "sha1-DuSj6SdkMM2iXx54nqbBW4ewy0M=", + "dev": true + }, + "regjsparser": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.2.1.tgz", + "integrity": "sha1-w3h1U/rwTndcMCEC7zRtmVAA7Bw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + } + } + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0-beta.42.tgz", + "integrity": "sha512-k6oVMsmY/mcp+rPRcK4dJL/J1ahtIRucXtNHNvAVRV9WFc7G3r1rrb1GlM4iNHareXBNdRlf7mkxyVaVpyJ3TQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-syntax-export-default-from": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.0.0-beta.42.tgz", + "integrity": "sha512-ojPKqeQq4+IMME06swIrH5lDK7Eo2zTPRowNla+z3dO/HcMoEE23P6vbf8oEYiguby0chPyk+FMkTC2EUfKImw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-syntax-export-extensions": { + "version": "7.0.0-beta.32", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-extensions/-/plugin-syntax-export-extensions-7.0.0-beta.32.tgz", + "integrity": "sha512-rPCgRGdA2nUGRGsDlfII8g665+ECp0IpKtjRtpBJB7GMBG+WpAbWVM6P4h40IsEe9wv38jl0Nuv3lVVvKTi/Mw==", + "dev": true + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.0.0-beta.42.tgz", + "integrity": "sha512-2tiaohyLuwFgo/OYiB4EyXkalhcpUMNBCjkA18F4r81RJLnCqke4Ni0XpVS9ts8LoEZ7/9pNnlzvzrSWoqY++w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0-beta.42.tgz", + "integrity": "sha512-Zhz6MdSpEviY3UFh/DUlrvf/Tn4wWosHXrnR52PBRtP/8ESWVaFuk57xWcBon3jJh0z5hYyRUr+D0wR7W7ZmnQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0-beta.42.tgz", + "integrity": "sha512-TXJpGMX/M9r0tkJPgZtoaBCdrhFMeAZtOiwNtVf5dWoA6TOmDwnnnbaUqynbBZm16jE7quWW5VhfFjDlOP1vMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0-beta.42.tgz", + "integrity": "sha512-/tpAo2Ur8m32U9pBcGQ6JKplWNEh462zxCnwVKL9yVwG02lttC4QSYBvreRK1wBidDz8JgRZFGGeB9N4l23/Sg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0-beta.42.tgz", + "integrity": "sha512-TTu8z0xz/mS8H98nCVw3wp86RSzdvUhtM4hX32sItrauJX1X8shVZDKbDtG8ZdA1FMKLgfvmn/hxtPOqjOkkpw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "7.0.0-beta.42", + "@babel/helper-plugin-utils": "7.0.0-beta.42", + "@babel/helper-remap-async-to-generator": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0-beta.42.tgz", + "integrity": "sha512-Ib3bSf7pYLbqe+46RrJFJae1DrNYvIrGleYjzaN/MFYNaG9ePaOevSBmFHPxuW1SM5l2tTloeu5a7mhs9h0oxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0-beta.42.tgz", + "integrity": "sha512-qvlAR1L7gZ1gqdj81a2AEfuar3lFsr7FSad4JrN5CJinQlVn/1eJe8oB1DQ7U8ocAzDDjn3tGit9lN7uKBWZsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42", + "lodash": "4.17.4" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0-beta.42.tgz", + "integrity": "sha512-0GCv1wNyfMXKuaulype6+TF02Bxq/zQZ4NUbn2w9aQxzIZviAe1jcA7IRrNN2eVQL9L4oi8N6B26Wf8xFoBNrQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "7.0.0-beta.42", + "@babel/helper-define-map": "7.0.0-beta.42", + "@babel/helper-function-name": "7.0.0-beta.42", + "@babel/helper-optimise-call-expression": "7.0.0-beta.42", + "@babel/helper-plugin-utils": "7.0.0-beta.42", + "@babel/helper-replace-supers": "7.0.0-beta.42", + "@babel/helper-split-export-declaration": "7.0.0-beta.42", + "globals": "11.3.0" + }, + "dependencies": { + "globals": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz", + "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==", + "dev": true + } + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0-beta.42.tgz", + "integrity": "sha512-WYGXfe2uo2FdACubMhwV6Oq1Zx3SNSeBUHRe2X53WKbIKLMZlxRR5GfoLv4V2CeDGHL3mb97wYhmXSb56bIXeg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0-beta.42.tgz", + "integrity": "sha512-G3hwLdgeKCZ8EWqwMqeOEoXxRBc5aJthMUD5kN7sAIko+lvwIVQ0do9Op/+DAGVnrvC+g0Ool2Mihcej2NsCPQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0-beta.42.tgz", + "integrity": "sha512-g/XbJzib6qmbHOJv/2n/bVKLcfJUBRSo9zO73O7lvJEYh8JvHWM/oVU829ztVPpdPT3xgHMiTVhnV/O5r5dYNA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42", + "@babel/helper-regex": "7.0.0-beta.42", + "regexpu-core": "4.1.3" + }, + "dependencies": { + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "dev": true + }, + "regexpu-core": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.1.3.tgz", + "integrity": "sha512-mB+njEzO7oezA57IbQxxd6fVPOeWKDmnGvJ485CwmfNchjHe5jWwqKepapmzUEj41yxIAqOg+C4LbXuJlkiO8A==", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regenerate-unicode-properties": "5.1.3", + "regjsgen": "0.3.0", + "regjsparser": "0.2.1", + "unicode-match-property-ecmascript": "1.0.3", + "unicode-match-property-value-ecmascript": "1.0.1" + } + }, + "regjsgen": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.3.0.tgz", + "integrity": "sha1-DuSj6SdkMM2iXx54nqbBW4ewy0M=", + "dev": true + }, + "regjsparser": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.2.1.tgz", + "integrity": "sha1-w3h1U/rwTndcMCEC7zRtmVAA7Bw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + } + } + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0-beta.42.tgz", + "integrity": "sha512-Nze+na6pnoZdrMtQv5Ct/i3031ib+kctDwt8KgcrtnOr52qUlbogPe1jY2WxpwSMtiowdPY93XsRFZeq6ogMTA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0-beta.42.tgz", + "integrity": "sha512-ylnAziSEho282hxQROK5tbNtxm0sSoQaQS74OCSE52eFeDNqSNGapyiNiWMZ71gqs8q5aqYsPgfa/vTccLT7uA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "7.0.0-beta.42", + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0-beta.42.tgz", + "integrity": "sha512-pn+fmrr6pfXeEUMyx7JrKAOG/XCiABvXFOmQYqLoCl0POcW8sE75r8w/Lu2wHFayrNgDqR7/RCb7RW4h/U2u1Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0-beta.42.tgz", + "integrity": "sha512-OopJXZQAgBsPUAHr49Z4S4X24XJa9Iu0zPUPCML9weHloyFnkw5SGQIDLC6BxxPOmqfiB49gfIuHjbtJfUsOJw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "7.0.0-beta.42", + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0-beta.42.tgz", + "integrity": "sha512-mWEayRwUCY3/u8LZpcdR96TiWqofP60jjfVZUJ6agK6ifwEBgamv1Db8syIwUCjaZww5bjyZqX61AmP4fx3dvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0-beta.42.tgz", + "integrity": "sha512-JCNM+WPKImpNHVLZG6x9F87AyX+K8KpMCkuCqyE7YgxAJWB+5FHVnpkdF6lprDilE/LXGwplmNb9OrWulMss2g==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "7.0.0-beta.42", + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0-beta.42.tgz", + "integrity": "sha512-tCN0FFdTHaXpuJokvW8iWtbDpjKDNDO2dIyb8rr0GMQxsA62914e8oclcDUPEbC5iF5SCDEF0CmVHXbxnvANfQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "7.0.0-beta.42", + "@babel/helper-plugin-utils": "7.0.0-beta.42", + "@babel/helper-simple-access": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0-beta.42.tgz", + "integrity": "sha512-IEN3HVHpMPWrnI2EAEHg0248+Axkg2nrdspajefIyeZMlrN0dUt0gDgVsZtza5PK/1a+RZlpli7dDgcA7heTMg==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "7.0.0-beta.42", + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0-beta.42.tgz", + "integrity": "sha512-yOA2qnk4snRxkdgKDp6xN+by3V3z8q14cDf/aB0j36Jv2YqpDWUWMMWLQjabCEE/l7ptePBS4qbFH8dffCm4Tg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "7.0.0-beta.42", + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0-beta.42.tgz", + "integrity": "sha512-P2zwIIeTOev0Xjo//4p7ugtsWazIsycbs/T6I/ghiV2lREFxo9s93fygbXNXt5ALRPRWDthiAYIDA9n1vrgkVg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0-beta.42.tgz", + "integrity": "sha512-d+gki0bYQtlleX4LnvpwjIkjmZScKQuHhDsD3N3nHLpwxbANp3YGtIfuf8dbY/PIbUKtd55/ErCvdsyuGlxAlw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42", + "@babel/helper-replace-supers": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0-beta.42.tgz", + "integrity": "sha512-z2iXwael/zMHkOvvkJSirg1jIxGA00JOIwdERB+x+VGxLfLb+1IdyiytVw9+w5RTNSVAGYt6R4jhvUdAeQwMiQ==", + "dev": true, + "requires": { + "@babel/helper-call-delegate": "7.0.0-beta.42", + "@babel/helper-get-function-arity": "7.0.0-beta.42", + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0-beta.42.tgz", + "integrity": "sha512-E1s/MBk8ztbXqxbeUvFH26x8vAWq/7qX3UdbB8fKoN3EX2Wg9+yXWyuI50jOhXOq7jfmbOrVe0BWoUOjCOqWPQ==", + "dev": true, + "requires": { + "regenerator-transform": "0.12.3" + }, + "dependencies": { + "regenerator-transform": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.12.3.tgz", + "integrity": "sha512-y2uxO/6u+tVmtEDIKo+tLCtI0GcbQr0OreosKgCd7HP4VypGjtTrw79DezuwT+W5QX0YWuvpeBOgumrepwM1kA==", + "dev": true, + "requires": { + "private": "0.1.7" + } + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0-beta.42.tgz", + "integrity": "sha512-GID8z2s6R/XOHgaoxrKBH+zdBOBqFJTDYDS91w30fJGiHxVM4qFVOpYDNIMxmsjqW6bKVHyLeHBezp0OHv+9QQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0-beta.42.tgz", + "integrity": "sha512-ZzWt7RvGcV+9DcOTBwE6ArNqDpUMpzZhCToj3UNtULol9gGBbrGgUK/LdGwGInj+Z2aIdOjbAMFtEuC6626lJg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0-beta.42.tgz", + "integrity": "sha512-zQI5NhVfnSNNFiG8JhoXXzTV89aLTfHW22inWefATRmtqe64iHZ4bivBTkDbxt6X/St1yH0aZB+4XtBDZjzcKQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42", + "@babel/helper-regex": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0-beta.42.tgz", + "integrity": "sha512-sCQmaa8fd3uPdy/J/qOkvPtxo3RtiH6SyW5bzdnUSOQ3+ND3Bj4OfJNziZxJwZZ8Y40lHrM0dKxZ8YnihlCETQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "7.0.0-beta.42", + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0-beta.42.tgz", + "integrity": "sha512-cuDOzCv7kpMqaLypTEN90ErVmKUV3vjTuO8qzCGlmJMZwCcteTpxCiwISJLnAxcGtj++fMVY0vntbcj4nXf9XQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0-beta.42.tgz", + "integrity": "sha512-iqQ8bhkRPZE2Vl5gR7GF0x4xUVlkncMxr7ve7Rjp/TMzNbO3S2XLr+1SPu+B+U3fIPDDA4I97enw5YL5V7QFOA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.0.0-beta.42", + "@babel/helper-regex": "7.0.0-beta.42", + "regexpu-core": "4.1.3" + }, + "dependencies": { + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "dev": true + }, + "regexpu-core": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.1.3.tgz", + "integrity": "sha512-mB+njEzO7oezA57IbQxxd6fVPOeWKDmnGvJ485CwmfNchjHe5jWwqKepapmzUEj41yxIAqOg+C4LbXuJlkiO8A==", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regenerate-unicode-properties": "5.1.3", + "regjsgen": "0.3.0", + "regjsparser": "0.2.1", + "unicode-match-property-ecmascript": "1.0.3", + "unicode-match-property-value-ecmascript": "1.0.1" + } + }, + "regjsgen": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.3.0.tgz", + "integrity": "sha1-DuSj6SdkMM2iXx54nqbBW4ewy0M=", + "dev": true + }, + "regjsparser": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.2.1.tgz", + "integrity": "sha1-w3h1U/rwTndcMCEC7zRtmVAA7Bw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + } + } + } + }, + "@babel/preset-env": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.0.0-beta.42.tgz", + "integrity": "sha512-DawmnYYDbOpMqq0H64iwtZJ7C1xjdwqJXBvAjRKv9WVnKPqZbMMli4JhwO30WnPELzOMGRwtLFAchPcEeyyCpQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "7.0.0-beta.42", + "@babel/helper-plugin-utils": "7.0.0-beta.42", + "@babel/plugin-proposal-async-generator-functions": "7.0.0-beta.42", + "@babel/plugin-proposal-object-rest-spread": "7.0.0-beta.42", + "@babel/plugin-proposal-optional-catch-binding": "7.0.0-beta.42", + "@babel/plugin-proposal-unicode-property-regex": "7.0.0-beta.42", + "@babel/plugin-syntax-async-generators": "7.0.0-beta.42", + "@babel/plugin-syntax-object-rest-spread": "7.0.0-beta.42", + "@babel/plugin-syntax-optional-catch-binding": "7.0.0-beta.42", + "@babel/plugin-transform-arrow-functions": "7.0.0-beta.42", + "@babel/plugin-transform-async-to-generator": "7.0.0-beta.42", + "@babel/plugin-transform-block-scoped-functions": "7.0.0-beta.42", + "@babel/plugin-transform-block-scoping": "7.0.0-beta.42", + "@babel/plugin-transform-classes": "7.0.0-beta.42", + "@babel/plugin-transform-computed-properties": "7.0.0-beta.42", + "@babel/plugin-transform-destructuring": "7.0.0-beta.42", + "@babel/plugin-transform-dotall-regex": "7.0.0-beta.42", + "@babel/plugin-transform-duplicate-keys": "7.0.0-beta.42", + "@babel/plugin-transform-exponentiation-operator": "7.0.0-beta.42", + "@babel/plugin-transform-for-of": "7.0.0-beta.42", + "@babel/plugin-transform-function-name": "7.0.0-beta.42", + "@babel/plugin-transform-literals": "7.0.0-beta.42", + "@babel/plugin-transform-modules-amd": "7.0.0-beta.42", + "@babel/plugin-transform-modules-commonjs": "7.0.0-beta.42", + "@babel/plugin-transform-modules-systemjs": "7.0.0-beta.42", + "@babel/plugin-transform-modules-umd": "7.0.0-beta.42", + "@babel/plugin-transform-new-target": "7.0.0-beta.42", + "@babel/plugin-transform-object-super": "7.0.0-beta.42", + "@babel/plugin-transform-parameters": "7.0.0-beta.42", + "@babel/plugin-transform-regenerator": "7.0.0-beta.42", + "@babel/plugin-transform-shorthand-properties": "7.0.0-beta.42", + "@babel/plugin-transform-spread": "7.0.0-beta.42", + "@babel/plugin-transform-sticky-regex": "7.0.0-beta.42", + "@babel/plugin-transform-template-literals": "7.0.0-beta.42", + "@babel/plugin-transform-typeof-symbol": "7.0.0-beta.42", + "@babel/plugin-transform-unicode-regex": "7.0.0-beta.42", + "browserslist": "3.1.2", + "invariant": "2.2.2", + "semver": "5.3.0" + }, + "dependencies": { + "browserslist": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.1.2.tgz", + "integrity": "sha512-iO5MiK7MZXejqfnCK8onktxxb+mcW+KMiL/5gGF/UCWvVgPzbgbkA5cyYfqj/IIHHo7X1z0znrSHPw9AIfpvrw==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000815", + "electron-to-chromium": "1.3.39" + } + }, + "caniuse-lite": { + "version": "1.0.30000815", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000815.tgz", + "integrity": "sha512-PGSOPK6gFe5fWd+eD0u2bG0aOsN1qC4B1E66tl3jOsIoKkTIcBYAc2+O6AeNzKW8RsFykWgnhkTlfOyuTzgI9A==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.39", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.39.tgz", + "integrity": "sha1-16RpZAnKCZXidQFW2mEsIhr62E0=", + "dev": true + } } }, "@babel/template": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.36.tgz", - "integrity": "sha512-mUBi90WRyZ9iVvlWLEdeo8gn/tROyJdjKNC4W5xJTSZL+9MS89rTJSqiaJKXIkxk/YRDL/g/8snrG/O0xl33uA==", + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.42.tgz", + "integrity": "sha512-EK7YdTe47j4VxlwNvz5bnlk5Jx/wWublnqfgOY2IuSNdxCQgXrLD34PfTnabGxywNSkJkcSo6jwr2JGT+S48dA==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.36", - "@babel/types": "7.0.0-beta.36", - "babylon": "7.0.0-beta.36", + "@babel/code-frame": "7.0.0-beta.42", + "@babel/types": "7.0.0-beta.42", + "babylon": "7.0.0-beta.42", "lodash": "4.17.4" }, "dependencies": { "babylon": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.36.tgz", - "integrity": "sha512-rw4YdadGwajAMMRl6a5swhQ0JCOOFyaYCfJ0AsmNBD8uBD/r4J8mux7wBaqavvFKqUKQYWOzA1Speams4YDzsQ==", + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.42.tgz", + "integrity": "sha512-h6E/OkkvcBw/JimbL0p8dIaxrcuQn3QmIYGC/GtJlRYif5LTKBYPHXYwqluJpfS/kOXoz0go+9mkmOVC0M+zWw==", "dev": true } } }, "@babel/traverse": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.36.tgz", - "integrity": "sha512-OTUb6iSKVR/98dGThRJ1BiyfwbuX10BVnkz89IpaerjTPRhDfMBfLsqmzxz5MiywUOW4M0Clta0o7rSxkfcuzw==", + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.42.tgz", + "integrity": "sha512-DZwMuZBfYVIn/cxpXZzHDgKmarW/MWqplLv1k7QJYhK5r5l6GAac/DkKl75A0CjPYrD3VGco6H6ZQp12QaYKSw==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.36", - "@babel/helper-function-name": "7.0.0-beta.36", - "@babel/types": "7.0.0-beta.36", - "babylon": "7.0.0-beta.36", + "@babel/code-frame": "7.0.0-beta.42", + "@babel/generator": "7.0.0-beta.42", + "@babel/helper-function-name": "7.0.0-beta.42", + "@babel/helper-split-export-declaration": "7.0.0-beta.42", + "@babel/types": "7.0.0-beta.42", + "babylon": "7.0.0-beta.42", "debug": "3.1.0", - "globals": "11.1.0", + "globals": "11.3.0", "invariant": "2.2.2", "lodash": "4.17.4" }, "dependencies": { "babylon": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.36.tgz", - "integrity": "sha512-rw4YdadGwajAMMRl6a5swhQ0JCOOFyaYCfJ0AsmNBD8uBD/r4J8mux7wBaqavvFKqUKQYWOzA1Speams4YDzsQ==", + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.42.tgz", + "integrity": "sha512-h6E/OkkvcBw/JimbL0p8dIaxrcuQn3QmIYGC/GtJlRYif5LTKBYPHXYwqluJpfS/kOXoz0go+9mkmOVC0M+zWw==", "dev": true }, "debug": { @@ -118,17 +981,17 @@ } }, "globals": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.1.0.tgz", - "integrity": "sha512-uEuWt9mqTlPDwSqi+sHjD4nWU/1N+q0fiWI9T1mZpD2UENqX20CFD5T/ziLZvztPaBKl7ZylUi1q6Qfm7E2CiQ==", + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz", + "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==", "dev": true } } }, "@babel/types": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.36.tgz", - "integrity": "sha512-PyAORDO9um9tfnrddXgmWN9e6Sq9qxraQIt5ynqBOSXKA5qvK1kUr+Q3nSzKFdzorsiK+oqcUnAFvEoKxv9D+Q==", + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", + "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", "dev": true, "requires": { "esutils": "2.0.2", @@ -145,9 +1008,9 @@ } }, "acorn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz", - "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", "dev": true }, "acorn-jsx": { @@ -171,10 +1034,9 @@ "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, "requires": { "co": "4.6.0", - "fast-deep-equal": "1.0.0", + "fast-deep-equal": "1.1.0", "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1" } @@ -215,9 +1077,9 @@ } }, "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "1.0.3" @@ -237,7 +1099,6 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, - "optional": true, "requires": { "arr-flatten": "1.1.0" } @@ -246,8 +1107,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "optional": true + "dev": true }, "array-includes": { "version": "3.0.3", @@ -278,8 +1138,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true, - "optional": true + "dev": true }, "arrify": { "version": "1.0.1", @@ -298,6 +1157,11 @@ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -316,6 +1180,11 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, "aws4": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", @@ -330,47 +1199,6 @@ "ast-types-flow": "0.0.7" } }, - "babel-cli": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", - "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "babel-polyfill": "6.26.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "chokidar": "1.7.0", - "commander": "2.12.2", - "convert-source-map": "1.5.1", - "fs-readdir-recursive": "1.1.0", - "glob": "7.1.2", - "lodash": "4.17.4", - "output-file-sync": "1.1.2", - "path-is-absolute": "1.0.1", - "slash": "1.0.0", - "source-map": "0.5.7", - "v8flags": "2.1.1" - }, - "dependencies": { - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.11.1" - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } - } - }, "babel-code-frame": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", @@ -382,855 +1210,28 @@ "js-tokens": "3.0.2" } }, - "babel-core": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", - "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.0", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.1", - "debug": "2.6.8", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.7", - "slash": "1.0.0", - "source-map": "0.5.7" - }, - "dependencies": { - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.11.1" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.8", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } - } - }, "babel-eslint": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.1.tgz", - "integrity": "sha512-RzdVOyWKQRUnLXhwLk+eKb4oyW+BykZSkpYwFhM4tnfzAG5OWfvG0w/uyzMp5XKEU0jN82+JefHr39bG2+KhRQ==", + "version": "8.2.2", + "resolved": "http://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.2.tgz", + "integrity": "sha512-Qt2lz2egBxNYWqN9JIO2z4NOOf8i4b5JS6CFoYrOZZTDssueiV1jH/jsefyg+86SeNY3rB361/mi3kE1WK2WYQ==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0-beta.36", - "@babel/traverse": "7.0.0-beta.36", - "@babel/types": "7.0.0-beta.36", - "babylon": "7.0.0-beta.36", + "@babel/code-frame": "7.0.0-beta.42", + "@babel/traverse": "7.0.0-beta.42", + "@babel/types": "7.0.0-beta.42", + "babylon": "7.0.0-beta.42", "eslint-scope": "3.7.1", "eslint-visitor-keys": "1.0.0" }, "dependencies": { "babylon": { - "version": "7.0.0-beta.36", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.36.tgz", - "integrity": "sha512-rw4YdadGwajAMMRl6a5swhQ0JCOOFyaYCfJ0AsmNBD8uBD/r4J8mux7wBaqavvFKqUKQYWOzA1Speams4YDzsQ==", + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.42.tgz", + "integrity": "sha512-h6E/OkkvcBw/JimbL0p8dIaxrcuQn3QmIYGC/GtJlRYif5LTKBYPHXYwqluJpfS/kOXoz0go+9mkmOVC0M+zWw==", "dev": true } } }, - "babel-generator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", - "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" - }, - "dependencies": { - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.11.1" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, - "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.23.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" - } - }, - "babel-helper-define-map": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz", - "integrity": "sha1-epdH8ljYlH0y1RX2qhx70CIEoIA=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "lodash": "4.17.4" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" - } - }, - "babel-helper-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz", - "integrity": "sha1-024i+rEAjXnYhkjjIRaGgShFbOg=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "lodash": "4.17.4" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz", - "integrity": "sha1-dsKV3DpHQbFmWt/TFnIV3P8ypXY=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0", - "lodash": "4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "requires": { - "babel-helper-define-map": "6.24.1", - "babel-helper-function-name": "6.24.1", - "babel-helper-optimise-call-expression": "6.24.1", - "babel-helper-replace-supers": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz", - "integrity": "sha1-0+MQtA72ZKNmIiAAl8bUQCmPK/4=", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-types": "6.25.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "requires": { - "babel-helper-regex": "6.24.1", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "requires": { - "babel-helper-regex": "6.24.1", - "babel-runtime": "6.23.0", - "regexpu-core": "2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz", - "integrity": "sha1-uNowWtQ8PJm0hI5P5AN7dw0jxBg=", - "dev": true, - "requires": { - "regenerator-transform": "0.9.11" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" - } - }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "dev": true, - "requires": { - "babel-runtime": "6.26.0", - "core-js": "2.5.3", - "regenerator-runtime": "0.10.5" - }, - "dependencies": { - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.5.3", - "regenerator-runtime": "0.11.1" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } - } - }, - "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", - "dev": true - } - } - }, - "babel-preset-env": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", - "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.24.1", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.24.1", - "browserslist": "2.10.0", - "invariant": "2.2.2", - "semver": "5.3.0" - } - }, - "babel-preset-es2015": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", - "babel-plugin-transform-es2015-block-scoping": "6.24.1", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.24.1", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "babel-plugin-transform-es2015-template-literals": "6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "6.24.1", - "babel-plugin-transform-regenerator": "6.24.1" - } - }, - "babel-preset-es2016": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2016/-/babel-preset-es2016-6.24.1.tgz", - "integrity": "sha1-+QC/k+LrwNJ235uKtZck6/2Vn4s=", - "dev": true, - "requires": { - "babel-plugin-transform-exponentiation-operator": "6.24.1" - } - }, - "babel-preset-es2017": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2017/-/babel-preset-es2017-6.24.1.tgz", - "integrity": "sha1-WXvq37n38gi8/YoS6bKym4svFNE=", - "dev": true, - "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "requires": { - "babel-core": "6.26.0", - "babel-runtime": "6.26.0", - "core-js": "2.5.3", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" - }, - "dependencies": { - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "2.5.3", - "regenerator-runtime": "0.11.1" - } - }, - "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } - } - }, - "babel-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", - "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", - "dev": true, - "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.10.5" - } - }, - "babel-template": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", - "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0", - "babylon": "6.17.4", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", - "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", - "dev": true, - "requires": { - "babel-code-frame": "6.22.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "babylon": "6.17.4", - "debug": "2.6.8", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } - }, - "babel-types": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", - "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.17.4", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz", - "integrity": "sha512-kChlV+0SXkjE0vUn9OZ7pBMWRFd8uq3mZe8x1K6jhuNcAFAtEnjchFAqB+dYEXKyd+JpT6eppRR78QAr5gTsUw==", - "dev": true - }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -1258,10 +1259,18 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "requires": { + "hoek": "4.2.1" + } + }, "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "1.0.0", @@ -1273,23 +1282,12 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, - "optional": true, "requires": { "expand-range": "1.8.2", "preserve": "0.2.0", "repeat-element": "1.1.2" } }, - "browserslist": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.10.0.tgz", - "integrity": "sha512-WyvzSLsuAVPOjbljXnyeWl14Ae+ukAT8MUuagKVzIDvwBxl4UAwD1xqtyQs2eWYPGUKMeC3Ol62goqYuKqTTcw==", - "dev": true, - "requires": { - "caniuse-lite": "1.0.30000783", - "electron-to-chromium": "1.3.28" - } - }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -1311,12 +1309,6 @@ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", "dev": true }, - "caniuse-lite": { - "version": "1.0.30000783", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000783.tgz", - "integrity": "sha1-m1SZ+xtQPSNF0SqmuGEoUvQnb/0=", - "dev": true - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -1401,17 +1393,17 @@ "dev": true }, "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "requires": { "delayed-stream": "1.0.0" } }, "commander": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", - "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.0.tgz", + "integrity": "sha512-7B1ilBwtYSbetCgTY1NJFg+gVpestg0fdA1MhC1Vs4ssyfSXnCAjFr+QcQM9/RedXC0EaUx1sG8Smgw2VfgKEg==", "dev": true }, "concat-map": { @@ -1421,13 +1413,13 @@ "dev": true }, "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==", "dev": true, "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.3", + "readable-stream": "2.3.5", "typedarray": "0.0.6" } }, @@ -1443,17 +1435,10 @@ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", "dev": true }, - "core-js": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", - "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", - "dev": true - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cross-spawn": { "version": "5.1.0", @@ -1461,11 +1446,29 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "shebang-command": "1.2.0", "which": "1.3.0" } }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "requires": { + "hoek": "4.2.1" + } + } + } + }, "crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", @@ -1483,13 +1486,6 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, "debug": { @@ -1537,23 +1533,13 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, "doctrine": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "2.0.2" } }, "ecc-jsbn": { @@ -1565,12 +1551,6 @@ "jsbn": "0.1.1" } }, - "electron-to-chromium": { - "version": "1.3.28", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz", - "integrity": "sha1-jdTmRYCGZE6fnwoc8y4qH53/2e4=", - "dev": true - }, "emoji-regex": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", @@ -1583,7 +1563,7 @@ "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "dev": true, "requires": { - "iconv-lite": "0.4.18" + "iconv-lite": "0.4.19" } }, "error-ex": { @@ -1625,32 +1605,32 @@ "dev": true }, "eslint": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.16.0.tgz", - "integrity": "sha512-YVXV4bDhNoHHcv0qzU4Meof7/P26B4EuaktMi5L1Tnt52Aov85KmYA8c5D+xyZr/BkhvwUqr011jDSD/QTULxg==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.0.tgz", + "integrity": "sha512-r83L5CuqaocDvfwdojbz68b6tCUk8KJkqfppO+gmSAQqYCzTr0bCSMu6A6yFCLKG65j5eKcKUw4Cw4Yl4gfWkg==", "dev": true, "requires": { "ajv": "5.5.2", "babel-code-frame": "6.22.0", - "chalk": "2.3.0", - "concat-stream": "1.6.0", + "chalk": "2.3.2", + "concat-stream": "1.6.1", "cross-spawn": "5.1.0", "debug": "3.1.0", "doctrine": "2.1.0", "eslint-scope": "3.7.1", "eslint-visitor-keys": "1.0.0", - "espree": "3.5.2", + "espree": "3.5.4", "esquery": "1.0.0", "esutils": "2.0.2", "file-entry-cache": "2.0.0", "functional-red-black-tree": "1.0.1", "glob": "7.1.2", - "globals": "11.1.0", + "globals": "11.3.0", "ignore": "3.3.7", "imurmurhash": "0.1.4", "inquirer": "3.3.0", "is-resolvable": "1.1.0", - "js-yaml": "3.10.0", + "js-yaml": "3.11.0", "json-stable-stringify-without-jsonify": "1.0.1", "levn": "0.3.0", "lodash": "4.17.4", @@ -1661,6 +1641,7 @@ "path-is-inside": "1.0.2", "pluralize": "7.0.0", "progress": "2.0.0", + "regexpp": "1.0.1", "require-uncached": "1.0.3", "semver": "5.3.0", "strip-ansi": "4.0.0", @@ -1676,23 +1657,23 @@ "dev": true }, "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "supports-color": "5.3.0" } }, "debug": { @@ -1704,19 +1685,10 @@ "ms": "2.0.0" } }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "2.0.2" - } - }, "globals": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.1.0.tgz", - "integrity": "sha512-uEuWt9mqTlPDwSqi+sHjD4nWU/1N+q0fiWI9T1mZpD2UENqX20CFD5T/ziLZvztPaBKl7ZylUi1q6Qfm7E2CiQ==", + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz", + "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==", "dev": true }, "strip-ansi": { @@ -1729,12 +1701,12 @@ } }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "3.0.0" } } } @@ -1760,13 +1732,24 @@ } }, "eslint-import-resolver-node": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz", - "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", "dev": true, "requires": { - "debug": "2.6.8", - "resolve": "1.3.3" + "debug": "2.6.9", + "resolve": "1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "eslint-module-utils": { @@ -1780,19 +1763,19 @@ } }, "eslint-plugin-import": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz", - "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz", + "integrity": "sha1-JgAu+/ylmJtyiKwEdQi9JPIXsWk=", "dev": true, "requires": { "builtin-modules": "1.1.1", "contains-path": "0.1.0", "debug": "2.6.8", "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.1", + "eslint-import-resolver-node": "0.3.2", "eslint-module-utils": "2.1.1", "has": "1.0.1", - "lodash.cond": "4.5.2", + "lodash": "4.17.4", "minimatch": "3.0.4", "read-pkg-up": "2.0.0" }, @@ -1825,26 +1808,15 @@ } }, "eslint-plugin-react": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz", - "integrity": "sha512-YGSjB9Qu6QbVTroUZi66pYky3DfoIPLdHQ/wmrBGyBRnwxQsBXAov9j2rpXt/55i8nyMv6IRWJv2s4d4YnduzQ==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz", + "integrity": "sha512-KC7Snr4YsWZD5flu6A5c0AcIZidzW3Exbqp7OT67OaD2AppJtlBr/GuPrW/vaQM/yfZotEvKAdrxrO+v8vwYJA==", "dev": true, "requires": { - "doctrine": "2.0.0", + "doctrine": "2.1.0", "has": "1.0.1", "jsx-ast-utils": "2.0.1", - "prop-types": "15.6.0" - }, - "dependencies": { - "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", - "dev": true, - "requires": { - "array-includes": "3.0.3" - } - } + "prop-types": "15.6.1" } }, "eslint-restricted-globals": { @@ -1859,7 +1831,7 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "esrecurse": "4.2.0", + "esrecurse": "4.2.1", "estraverse": "4.2.0" } }, @@ -1870,12 +1842,12 @@ "dev": true }, "espree": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", - "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "5.3.0", + "acorn": "5.5.3", "acorn-jsx": "3.0.1" } }, @@ -1895,13 +1867,12 @@ } }, "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" + "estraverse": "4.2.0" } }, "estraverse": { @@ -1921,7 +1892,6 @@ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, - "optional": true, "requires": { "is-posix-bracket": "0.1.1" } @@ -1931,7 +1901,6 @@ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, - "optional": true, "requires": { "fill-range": "2.2.3" } @@ -1948,7 +1917,7 @@ "dev": true, "requires": { "chardet": "0.4.2", - "iconv-lite": "0.4.18", + "iconv-lite": "0.4.19", "tmp": "0.0.33" } }, @@ -1957,20 +1926,19 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, - "optional": true, "requires": { "is-extglob": "1.0.0" } }, "extsprintf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -2029,15 +1997,13 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true, - "optional": true + "dev": true }, "fill-range": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true, - "optional": true, "requires": { "is-number": "2.1.0", "isobject": "2.1.0", @@ -2072,15 +2038,13 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "optional": true + "dev": true }, "for-own": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, - "optional": true, "requires": { "for-in": "1.0.2" } @@ -2096,6 +2060,16 @@ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, "fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", @@ -2115,7 +2089,7 @@ "dev": true, "optional": true, "requires": { - "nan": "2.8.0", + "nan": "2.10.0", "node-pre-gyp": "0.6.39" }, "dependencies": { @@ -3030,13 +3004,6 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, "glob": { @@ -3058,7 +3025,6 @@ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, - "optional": true, "requires": { "glob-parent": "2.0.0", "is-glob": "2.0.1" @@ -3073,12 +3039,6 @@ "is-glob": "2.0.1" } }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, "globby": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", @@ -3099,6 +3059,20 @@ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, "has": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", @@ -3118,31 +3092,47 @@ } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.1", + "sntp": "2.1.0" } }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + }, "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", "dev": true }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, "iconv-lite": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", - "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==", + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", "dev": true }, "ignore": { @@ -3180,7 +3170,7 @@ "dev": true, "requires": { "ansi-escapes": "3.0.0", - "chalk": "2.3.0", + "chalk": "2.3.2", "cli-cursor": "2.1.0", "cli-width": "2.2.0", "external-editor": "2.1.0", @@ -3202,23 +3192,23 @@ "dev": true }, "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "supports-color": "5.3.0" } }, "strip-ansi": { @@ -3231,12 +3221,12 @@ } }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "3.0.0" } } } @@ -3297,15 +3287,13 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true, - "optional": true + "dev": true }, "is-equal-shallow": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, - "optional": true, "requires": { "is-primitive": "2.0.0" } @@ -3314,8 +3302,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "optional": true + "dev": true }, "is-extglob": { "version": "1.0.0", @@ -3323,15 +3310,6 @@ "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -3352,7 +3330,6 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, - "optional": true, "requires": { "kind-of": "3.2.2" } @@ -3381,19 +3358,23 @@ "path-is-inside": "1.0.2" } }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, "is-posix-bracket": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true, - "optional": true + "dev": true }, "is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true, - "optional": true + "dev": true }, "is-promise": { "version": "2.1.0", @@ -3450,7 +3431,6 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, - "optional": true, "requires": { "isarray": "1.0.0" } @@ -3477,12 +3457,12 @@ "dev": true }, "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", "dev": true, "requires": { - "argparse": "1.0.9", + "argparse": "1.0.10", "esprima": "4.0.0" } }, @@ -3526,21 +3506,14 @@ "dev": true }, "jsprim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "requires": { "assert-plus": "1.0.0", - "extsprintf": "1.0.2", + "extsprintf": "1.3.0", "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } + "verror": "1.10.0" } }, "jsx-ast-utils": { @@ -3606,12 +3579,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" }, - "lodash.cond": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", - "dev": true - }, "loose-envify": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", @@ -3622,9 +3589,9 @@ } }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { "pseudomap": "1.0.2", @@ -3636,7 +3603,6 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, - "optional": true, "requires": { "arr-diff": "2.0.0", "array-unique": "0.2.1", @@ -3653,10 +3619,23 @@ "regex-cache": "0.4.4" } }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + }, "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, "minimatch": { @@ -3665,7 +3644,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -3696,9 +3675,9 @@ "dev": true }, "nan": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", - "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", "dev": true, "optional": true }, @@ -3724,10 +3703,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.5.0", + "hosted-git-info": "2.6.0", "is-builtin-module": "1.0.0", "semver": "5.3.0", - "validate-npm-package-license": "3.0.1" + "validate-npm-package-license": "3.0.3" } }, "normalize-path": { @@ -3739,12 +3718,6 @@ "remove-trailing-separator": "1.1.0" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, "oauth-sign": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", @@ -3767,7 +3740,6 @@ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, - "optional": true, "requires": { "for-own": "0.1.5", "is-extendable": "0.1.1" @@ -3788,7 +3760,7 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "1.2.0" } }, "optionator": { @@ -3805,12 +3777,6 @@ "wordwrap": "1.0.0" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -3818,21 +3784,24 @@ "dev": true }, "output-file-sync": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", - "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz", + "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==", "dev": true, "requires": { "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1" + "is-plain-obj": "1.1.0", + "mkdirp": "0.5.1" } }, "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "dev": true, + "requires": { + "p-try": "1.0.0" + } }, "p-locate": { "version": "2.0.0", @@ -3840,15 +3809,20 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.1.0" + "p-limit": "1.2.0" } }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, "parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, - "optional": true, "requires": { "glob-base": "0.3.0", "is-dotfile": "1.0.3", @@ -3909,6 +3883,11 @@ "pify": "2.3.0" } }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", @@ -3955,8 +3934,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true, - "optional": true + "dev": true }, "private": { "version": "0.1.7", @@ -3965,9 +3943,9 @@ "dev": true }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, "progress": { @@ -3986,9 +3964,9 @@ } }, "prop-types": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", - "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", + "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", "dev": true, "requires": { "fbjs": "0.8.16", @@ -4007,12 +3985,16 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, "randomatic": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, - "optional": true, "requires": { "is-number": "3.0.0", "kind-of": "4.0.0" @@ -4023,7 +4005,6 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, - "optional": true, "requires": { "kind-of": "3.2.2" }, @@ -4033,7 +4014,6 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, - "optional": true, "requires": { "is-buffer": "1.1.6" } @@ -4045,7 +4025,6 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, - "optional": true, "requires": { "is-buffer": "1.1.6" } @@ -4085,15 +4064,15 @@ } }, "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", - "process-nextick-args": "1.0.7", + "process-nextick-args": "2.0.0", "safe-buffer": "5.1.1", "string_decoder": "1.0.3", "util-deprecate": "1.0.2" @@ -4108,31 +4087,25 @@ "requires": { "graceful-fs": "4.1.11", "minimatch": "3.0.4", - "readable-stream": "2.3.3", + "readable-stream": "2.3.5", "set-immediate-shim": "1.0.1" } }, - "regenerate": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", - "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=", - "dev": true - }, - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - }, - "regenerator-transform": { - "version": "0.9.11", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.9.11.tgz", - "integrity": "sha1-On0GdSDLe3F2dp61/4aGkb7+EoM=", + "regenerate-unicode-properties": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-5.1.3.tgz", + "integrity": "sha512-Yjy6t7jFQczDhYE+WVm7pg6gWYE258q4sUkk9qDErwXJIqx7jU9jGrMFHutJK/SRfcg7MEkXjGaYiVlOZyev/A==", "dev": true, "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "private": "0.1.7" + "regenerate": "1.3.3" + }, + "dependencies": { + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "dev": true + } } }, "regex-cache": { @@ -4140,37 +4113,16 @@ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, - "optional": true, "requires": { "is-equal-shallow": "0.1.3" } }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "requires": { - "regenerate": "1.3.2", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "regexpp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.0.1.tgz", + "integrity": "sha512-8Ph721maXiOYSLtaDGKVmDn5wdsNaF6Px85qFNeMPQq0r8K5Y10tgP6YuR65Ws35n4DvzFcCxEnRNBIXQunzLw==", "dev": true }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "0.5.0" - } - }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -4187,183 +4139,35 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "optional": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } + "dev": true }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "version": "2.85.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", + "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "requires": { "aws-sign2": "0.7.0", "aws4": "1.6.0", "caseless": "0.12.0", - "combined-stream": "1.0.5", + "combined-stream": "1.0.6", "extend": "3.0.1", "forever-agent": "0.6.1", - "form-data": "2.3.1", + "form-data": "2.3.2", "har-validator": "5.0.3", "hawk": "6.0.2", "http-signature": "1.2.0", "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", + "mime-types": "2.1.18", "oauth-sign": "0.8.2", "performance-now": "2.1.0", "qs": "6.5.1", "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.3", + "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", - "uuid": "3.1.0" - }, - "dependencies": { - "ajv": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", - "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "requires": { - "hoek": "4.2.0" - } - }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "requires": { - "hoek": "4.2.0" - } - } - } - }, - "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "requires": { - "ajv": "5.3.0", - "har-schema": "2.0.0" - } - }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.0", - "sntp": "2.1.0" - } - }, - "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.0", - "sshpk": "1.13.1" - } - }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "requires": { - "mime-db": "1.30.0" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" - }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", - "requires": { - "hoek": "4.2.0" - } - }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "requires": { - "punycode": "1.4.1" - } - } + "uuid": "3.2.1" } }, "request-promise": { @@ -4406,9 +4210,9 @@ } }, "resolve": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", - "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", + "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", "dev": true, "requires": { "path-parse": "1.0.5" @@ -4523,40 +4327,50 @@ "is-fullwidth-code-point": "2.0.0" } }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "requires": { + "hoek": "4.2.1" + } + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" } }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", "dev": true }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", "dev": true }, "sprintf-js": { @@ -4566,9 +4380,9 @@ "dev": true }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "requires": { "asn1": "0.2.3", "assert-plus": "1.0.0", @@ -4578,13 +4392,6 @@ "getpass": "0.1.7", "jsbn": "0.1.1", "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, "stealthy-require": { @@ -4668,39 +4475,39 @@ "requires": { "ajv": "5.5.2", "ajv-keywords": "2.1.1", - "chalk": "2.3.0", + "chalk": "2.3.2", "lodash": "4.17.4", "slice-ansi": "1.0.0", "string-width": "2.1.1" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", + "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "supports-color": "5.3.0" } }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "3.0.0" } } } @@ -4740,11 +4547,13 @@ "os-tmpdir": "1.0.2" } }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "requires": { + "punycode": "1.4.1" + } }, "trim-right": { "version": "1.0.1", @@ -4787,6 +4596,34 @@ "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", "dev": true }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.3.tgz", + "integrity": "sha512-iG/2t0F2LAU8aZYPkX5gi7ebukHnr3sWFESpb+zPQeeaQwOkfoO6ZW17YX7MdRPNG9pCy+tjzGill+Ah0Em0HA==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.3.tgz", + "integrity": "sha512-nFcaBFcr08UQNF15ZgI5ISh3yUnQm7SJRRxwYrL5VYX46pS+6Q7TCTv4zbK+j6/l7rQt0mMiTL2zpmeygny6rA==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "1.0.3", + "unicode-property-aliases-ecmascript": "1.0.3" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.1.tgz", + "integrity": "sha512-lM8B0FDZQh9yYGgiabRQcyWicB27VLOolSBRIxsO7FeQPtg+79Oe7sC8Mzr8BObDs+G9CeYmC/shHo6OggNEog==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.3.tgz", + "integrity": "sha512-TdDmDOTxEf2ad1g3ZBpM6cqKIb2nJpVlz1Q++casDryKz18tpeMBhSng9hjC1CTQCkOV9Rw2knlSB6iRo7ad1w==", + "dev": true + }, "unique-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", @@ -4795,12 +4632,6 @@ "crypto-random-string": "1.0.0" } }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4808,35 +4639,28 @@ "dev": true }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" - }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "1.1.1" - } + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" }, "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" } }, "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "extsprintf": "1.0.2" + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" } }, "whatwg-fetch": { diff --git a/package.json b/package.json index f2a9e6a7..061c5b03 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "name": "node-gitlab-api", - "version": "2.2.4", + "version": "3.0.0-beta", "description": "Full NodeJS implementation of the GitLab API. Supports Promises, Async/Await.", "main": "dist/latest/index.js", "engines": { - "node": ">=8.0.0" + "node": ">=8.9.0" }, "scripts": { - "build:es6": "babel src --out-dir dist/latest", - "build:es5": "babel src --out-dir dist/es5 --no-babelrc --presets=es2015,es2016,es2017", + "build:es6": "babel src -d dist/latest", + "build:es5": "babel src -d dist/es5 --no-babelrc --presets=@babel/env --plugins=@babel/plugin-proposal-export-default-from,@babel/plugin-proposal-export-namespace-from", "build": "npm run build:es6 && npm run build:es5", "prepublishOnly": "npm run build" }, @@ -27,21 +27,21 @@ "license": "MIT", "readmeFilename": "README.md", "devDependencies": { - "babel-cli": "^6.26.0", - "babel-eslint": "^8.2.1", - "babel-preset-env": "^1.6.1", - "babel-preset-es2015": "^6.24.1", - "babel-preset-es2016": "^6.24.1", - "babel-preset-es2017": "^6.24.1", - "eslint": "^4.16.0", + "@babel/cli": "^7.0.0-beta.42", + "@babel/core": "^7.0.0-beta.42", + "@babel/plugin-proposal-export-default-from": "^7.0.0-beta.42", + "@babel/plugin-proposal-export-namespace-from": "^7.0.0-beta.42", + "@babel/preset-env": "^7.0.0-beta.42", + "babel-eslint": "^8.2.2", + "eslint": "^4.18.1", "eslint-config-airbnb": "^16.1.0", - "eslint-plugin-import": "^2.8.0", + "eslint-plugin-import": "^2.9.0", "eslint-plugin-jsx-a11y": "^6.0.3", - "eslint-plugin-react": "^7.5.1" + "eslint-plugin-react": "^7.7.0" }, "dependencies": { "parse-link-header": "^1.0.1", - "request": "^2.83.0", + "request": "^2.85.0", "request-promise": "^4.2.2", "tempy": "^0.2.1" } diff --git a/src/index.js b/src/index.js index 36cd7cc4..76b5e50d 100644 --- a/src/index.js +++ b/src/index.js @@ -1,9 +1,105 @@ import * as Services from './services'; +import { init } from './infrastructure/Namespace'; -export const API = credentials => - Object.entries(Services).reduce( - (output, [key, Value]) => { output[key] = new Value(credentials); return output; }, - {}, - ); +// All not initialized +// export * from './services'; -export * from './services'; +// Groups +const { + Groups, + GroupAccessRequests, + GroupCustomAttributes, + GroupMembers, + GroupMilestones, + GroupProjects, + GroupVariables, +} = Services; + +// export const GroupNamespace = options => init(options, { +// Groups, +// GroupAccessRequests, +// GroupCustomAttributes, +// GroupMembers, +// GroupMilestones, +// GroupProjects, +// GroupVariables, +// }); + +// // Users +// const { +// Users, +// UserEmails, +// UserImpersonationTokens, +// UserKeys, +// UserGPGKeys, +// } = Services; + +// export const UserNamespace = options => init(options, { +// Users, +// UserEmails, +// UserImpersonationTokens, +// UserKeys, +// UserGPGKeys, +// }); + +// // // Projects +// const { +// Branches, +// Commits, +// DeployKeys, +// Environments, +// Issues, +// Jobs, +// Labels, +// MergeRequests, +// MergeRequestNotes, +// MergeRequestVersions, +// Pipelines, +// Projects, +// ProjectAccessRequests, +// ProjectCustomAttributes, +// ProjectHooks, +// ProjectMembers, +// ProjectMilestones, +// ProjectSnippets, +// ProtectedBranches, +// ProjectVariables, +// Repositories, +// RepositoryFiles, +// Runners, +// Services, +// Tags, +// Triggers, +// } = Services; + +// export const ProjectNamespace = options => init(options, { +// Branches, +// Commits, +// DeployKeys, +// Environments, +// Issues, +// Jobs, +// Labels, +// MergeRequests, +// MergeRequestNotes, +// MergeRequestVersions, +// Pipelines, +// Projects, +// ProjectAccessRequests, +// ProjectCustomAttributes, +// ProjectHooks, +// ProjectMembers, +// ProjectMilestones, +// ProjectSnippets, +// ProtectedBranches, +// ProjectVariables, +// Repositories, +// RepositoryFiles, +// Runners, +// Services, +// Tags, +// Triggers, +// }); + +// // All initialized +// export default options => init(options, Services); diff --git a/src/infrastructure/Namespace.js b/src/infrastructure/Namespace.js new file mode 100644 index 00000000..d6639afa --- /dev/null +++ b/src/infrastructure/Namespace.js @@ -0,0 +1,11 @@ +function init(options, ...services) { + const combined = Object.assign({}, ...services); + + return Object.entries(combined).reduce((output, [name, Service]) => { + output[name] = new Service(options); return output; + }, {}); +} + +export { + init, +}; diff --git a/src/infrastructure/index.js b/src/infrastructure/index.js index fdbb748f..65f31799 100644 --- a/src/infrastructure/index.js +++ b/src/infrastructure/index.js @@ -1,2 +1,3 @@ -export { default as BaseService } from './BaseService'; -export { default as RequestHelper } from './RequestHelper'; +export BaseService from './BaseService'; +export RequestHelper from './RequestHelper'; +export Namespace from './Namespace'; diff --git a/src/services/Branches.js b/src/services/Branches.js index 8e5eeb25..cddc4cdb 100644 --- a/src/services/Branches.js +++ b/src/services/Branches.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class Branches extends BaseService { +class Branches extends BaseService { all(projectId, options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/Commits.js b/src/services/Commits.js index 2ee5149a..3bdc66dd 100644 --- a/src/services/Commits.js +++ b/src/services/Commits.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class Commits extends BaseService { +class Commits extends BaseService { all(projectId, options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/DeployKeys.js b/src/services/DeployKeys.js index c972758e..63b85797 100644 --- a/src/services/DeployKeys.js +++ b/src/services/DeployKeys.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class DeployKeys extends BaseService { +class DeployKeys extends BaseService { add(projectId, options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/Environments.js b/src/services/Environments.js index 44595275..953f6ebe 100644 --- a/src/services/Environments.js +++ b/src/services/Environments.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class Environments extends BaseService { +class Environments extends BaseService { all(projectId, options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/Events.js b/src/services/Events.js index e052a326..2f80c234 100644 --- a/src/services/Events.js +++ b/src/services/Events.js @@ -34,7 +34,7 @@ function validateEventOptions(action, target) { } } -export class Events extends BaseService { +class Events extends BaseService { all(options) { validateEventOptions(options.action, options.targetType); diff --git a/src/services/GroupAccessRequests.js b/src/services/GroupAccessRequests.js index d8445ef7..b5527d68 100644 --- a/src/services/GroupAccessRequests.js +++ b/src/services/GroupAccessRequests.js @@ -1,6 +1,6 @@ import { ResourceAccessRequests } from '../templates'; -export class GroupAccessRequests { +class GroupAccessRequests { constructor(options) { return new ResourceAccessRequests('groups', options); } diff --git a/src/services/GroupCustomAttributes.js b/src/services/GroupCustomAttributes.js index 1d5cc914..e31031cc 100644 --- a/src/services/GroupCustomAttributes.js +++ b/src/services/GroupCustomAttributes.js @@ -1,6 +1,6 @@ import { ResourceCustomAttributes } from '../templates'; -export class GroupCustomAttributes { +class GroupCustomAttributes { constructor(options) { return new ResourceCustomAttributes('groups', options); } diff --git a/src/services/GroupMembers.js b/src/services/GroupMembers.js index 36dc86a9..50c2c3ce 100644 --- a/src/services/GroupMembers.js +++ b/src/services/GroupMembers.js @@ -1,6 +1,6 @@ import { ResourceMembers } from '../templates'; -export class GroupMembers { +class GroupMembers { constructor(options) { return new ResourceMembers('groups', options); } diff --git a/src/services/GroupMilestones.js b/src/services/GroupMilestones.js index febbaba7..4a31c5a2 100644 --- a/src/services/GroupMilestones.js +++ b/src/services/GroupMilestones.js @@ -1,6 +1,6 @@ import { ResourceMilestones } from '../templates'; -export class GroupMilestones { +class GroupMilestones { constructor(options) { return new ResourceMilestones('groups', options); } diff --git a/src/services/GroupProjects.js b/src/services/GroupProjects.js index 96c62ebf..f31ca01c 100644 --- a/src/services/GroupProjects.js +++ b/src/services/GroupProjects.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class GroupProjects extends BaseService { +class GroupProjects extends BaseService { all(groupId, options = {}) { const gId = encodeURIComponent(groupId); diff --git a/src/services/GroupVariables.js b/src/services/GroupVariables.js new file mode 100644 index 00000000..0ea819f5 --- /dev/null +++ b/src/services/GroupVariables.js @@ -0,0 +1,9 @@ +import { ResourceVariables } from '../templates'; + +class GroupVariables { + constructor(options) { + return new ResourceVariables('groups', options); + } +} + +export default GroupVariables; diff --git a/src/services/Groups.js b/src/services/Groups.js index 8ac4ab94..fa451599 100644 --- a/src/services/Groups.js +++ b/src/services/Groups.js @@ -1,11 +1,11 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class Groups extends BaseService { - all(options = {}) { +class Groups extends BaseService { + all(options) { return RequestHelper.get(this, 'groups', options); } - create(options = {}) { + create(options) { return RequestHelper.post(this, 'groups', options); } @@ -27,42 +27,11 @@ export class Groups extends BaseService { return RequestHelper.get(this, `groups/${gId}`); } - subgroups(groupId, options = {}) { + subgroups(groupId, options) { const gId = encodeURIComponent(groupId); return RequestHelper.get(this, `groups/${gId}/subgroups`, options); } - - // Variables - createVariable(groupId, options) { - const gId = encodeURIComponent(groupId); - - return RequestHelper.post(this, `groups/${gId}/variables`, options); - } - - editVariable(groupId, keyId, options) { - const [gId, kId] = [groupId, keyId].map(encodeURIComponent); - - return RequestHelper.put(this, `groups/${gId}/variables/${kId}`, options); - } - - variables(groupId) { - const gId = encodeURIComponent(groupId); - - return RequestHelper.get(this, `groups/${gId}/variables`); - } - - showVariable(groupId, keyId) { - const [gId, kId] = [groupId, keyId].map(encodeURIComponent); - - return RequestHelper.get(this, `groups/${gId}/variables/${kId}`); - } - - removeVariable(groupId, keyId) { - const [gId, kId] = [groupId, keyId].map(encodeURIComponent); - - return RequestHelper.delete(this, `groups/${gId}/variables/${kId}`); - } } export default Groups; diff --git a/src/services/Issues.js b/src/services/Issues.js index 478ef328..01fc405d 100644 --- a/src/services/Issues.js +++ b/src/services/Issues.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class Issues extends BaseService { +class Issues extends BaseService { all(projectId, options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/Jobs.js b/src/services/Jobs.js index 8812630f..378eaa8d 100644 --- a/src/services/Jobs.js +++ b/src/services/Jobs.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class Jobs extends BaseService { +class Jobs extends BaseService { all(projectId, options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/Labels.js b/src/services/Labels.js index 57cf24e9..ddcc0678 100644 --- a/src/services/Labels.js +++ b/src/services/Labels.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class Labels extends BaseService { +class Labels extends BaseService { all(projectId, options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/MergeRequestNotes.js b/src/services/MergeRequestNotes.js index 1b196637..a9b21209 100644 --- a/src/services/MergeRequestNotes.js +++ b/src/services/MergeRequestNotes.js @@ -1,6 +1,6 @@ import { ResourceNotes } from '../templates'; -export class MergeRequestNotes { +class MergeRequestNotes { constructor(options) { return new ResourceNotes('mergerequests', 'notes', options); } diff --git a/src/services/MergeRequestVersions.js b/src/services/MergeRequestVersions.js index b7c404ef..90083381 100644 --- a/src/services/MergeRequestVersions.js +++ b/src/services/MergeRequestVersions.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class MergeRequestVersions extends BaseService { +class MergeRequestVersions extends BaseService { all(projectId, mergerequestId) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); diff --git a/src/services/MergeRequests.js b/src/services/MergeRequests.js index 5330c1e4..13b56656 100644 --- a/src/services/MergeRequests.js +++ b/src/services/MergeRequests.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class MergeRequests extends BaseService { +class MergeRequests extends BaseService { accept(projectId, mergerequestId, options = {}) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); diff --git a/src/services/Pipelines.js b/src/services/Pipelines.js index 562a1774..86b08066 100644 --- a/src/services/Pipelines.js +++ b/src/services/Pipelines.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class Pipelines extends BaseService { +class Pipelines extends BaseService { all(projectId, options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/ProjectAccessRequests.js b/src/services/ProjectAccessRequests.js index 45388ef1..9bea05e0 100644 --- a/src/services/ProjectAccessRequests.js +++ b/src/services/ProjectAccessRequests.js @@ -1,6 +1,6 @@ import { ResourceAccessRequests } from '../templates'; -export class ProjectAccessRequests { +class ProjectAccessRequests { constructor(options) { return new ResourceAccessRequests('projects', options); } diff --git a/src/services/ProjectCustomAttributes.js b/src/services/ProjectCustomAttributes.js index 7f0271f9..419f7db4 100644 --- a/src/services/ProjectCustomAttributes.js +++ b/src/services/ProjectCustomAttributes.js @@ -1,6 +1,6 @@ import { ResourceCustomAttributes } from '../templates'; -export class ProjectCustomAttributes { +class ProjectCustomAttributes { constructor(options) { return new ResourceCustomAttributes('projects', options); } diff --git a/src/services/ProjectHooks.js b/src/services/ProjectHooks.js index f29462db..8586c244 100644 --- a/src/services/ProjectHooks.js +++ b/src/services/ProjectHooks.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class ProjectHooks extends BaseService { +class ProjectHooks extends BaseService { all(projectId, options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/ProjectMembers.js b/src/services/ProjectMembers.js index 40e97276..1a649111 100644 --- a/src/services/ProjectMembers.js +++ b/src/services/ProjectMembers.js @@ -1,6 +1,6 @@ import { ResourceMembers } from '../templates'; -export class ProjectMembers { +class ProjectMembers { constructor(options) { return new ResourceMembers('projects', options); } diff --git a/src/services/ProjectMilestones.js b/src/services/ProjectMilestones.js index cf109576..477053e3 100644 --- a/src/services/ProjectMilestones.js +++ b/src/services/ProjectMilestones.js @@ -1,6 +1,6 @@ import { ResourceMilestones } from '../templates'; -export class ProjectMilestones { +class ProjectMilestones { constructor(options) { return new ResourceMilestones('projects', options); } diff --git a/src/services/ProjectRunners.js b/src/services/ProjectRunners.js index 93392b0f..591399b4 100644 --- a/src/services/ProjectRunners.js +++ b/src/services/ProjectRunners.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class ProjectRunners extends BaseService { +class ProjectRunners extends BaseService { all(projectId, options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/ProjectSnippets.js b/src/services/ProjectSnippets.js index 0a292ce0..30f3f732 100644 --- a/src/services/ProjectSnippets.js +++ b/src/services/ProjectSnippets.js @@ -1,6 +1,6 @@ import { ResourceNotes } from '../templates'; -export class ProjectSnippets { +class ProjectSnippets { constructor(options) { return new ResourceNotes('projects', 'snippets', options); } diff --git a/src/services/ProjectVariables.js b/src/services/ProjectVariables.js new file mode 100644 index 00000000..65811cdc --- /dev/null +++ b/src/services/ProjectVariables.js @@ -0,0 +1,9 @@ +import { ResourceVariables } from '../templates'; + +class ProjectVariables { + constructor(options) { + return new ResourceVariables('projects', options); + } +} + +export default ProjectVariables; diff --git a/src/services/Projects.js b/src/services/Projects.js index 77f4dee0..1496210a 100644 --- a/src/services/Projects.js +++ b/src/services/Projects.js @@ -3,19 +3,15 @@ import Path from 'path'; import { BaseService, RequestHelper } from '../infrastructure'; import { validateEventOptions } from './Events'; -export class Projects extends BaseService { - all(options = {}) { +class Projects extends BaseService { + all(options) { return RequestHelper.get(this, 'projects', options); } - create(options = {}) { - if (options.userId) { - const uId = encodeURIComponent(options.userId); + create(options) { + const url = options.userId ? `projects/user/${encodeURIComponent(options.userId)}` : 'projects'; - return RequestHelper.post(this, `projects/user/${uId}`, options); - } - - return RequestHelper.post(this, 'projects', options); + return RequestHelper.post(this, url, options); } edit(projectId, options) { @@ -38,6 +34,12 @@ export class Projects extends BaseService { return RequestHelper.post(this, `projects/${pId}/fork`, options); } + forks(projectId, options) { + const pId = encodeURIComponent(projectId); + + return this.get(`projects/${pId}/forks`, options); + } + remove(projectId) { const pId = encodeURIComponent(projectId); @@ -53,8 +55,7 @@ export class Projects extends BaseService { if (!groupId || !groupAccess) throw new Error('Missing required arguments'); - options.group_id = groupId; - options.group_access = groupAccess; + Object.assign(options, { groupId, groupAccess }); return RequestHelper.post(this, `projects/${pId}/share`, options); } @@ -71,14 +72,10 @@ export class Projects extends BaseService { return RequestHelper.post(this, `projects/${pId}/star`); } - statuses(projectId, sha, state, options = {}) { + statuses(projectId, sha, state, options) { const pId = encodeURIComponent(projectId); - return RequestHelper.post( - this, - `projects/${pId}/statuses/${sha}`, - Object.assign({ state }, options), - ); + return RequestHelper.post(this, `projects/${pId}/statuses/${sha}`, Object.assign(options, { state })); } unshare(projectId, groupId) { @@ -112,37 +109,6 @@ export class Projects extends BaseService { true, ); } - - // Variables - createVariable(projectId, options) { - const pId = encodeURIComponent(projectId); - - return RequestHelper.post(this, `projects/${pId}/variables`, options); - } - - editVariable(projectId, keyId, options) { - const [pId, kId] = [projectId, keyId].map(encodeURIComponent); - - return RequestHelper.put(this, `projects/${pId}/variables/${kId}`, options); - } - - variables(projectId) { - const pId = encodeURIComponent(projectId); - - return RequestHelper.get(this, `projects/${pId}/variables`); - } - - showVariable(projectId, keyId) { - const [pId, kId] = [projectId, keyId].map(encodeURIComponent); - - return RequestHelper.get(this, `projects/${pId}/variables/${kId}`); - } - - removeVariable(projectId, keyId) { - const [pId, kId] = [projectId, keyId].map(encodeURIComponent); - - return RequestHelper.delete(this, `projects/${pId}/variables/${kId}`); - } } export default Projects; diff --git a/src/services/ProtectedBranches.js b/src/services/ProtectedBranches.js index 5c9582d7..73034d9e 100644 --- a/src/services/ProtectedBranches.js +++ b/src/services/ProtectedBranches.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class ProtectedBranches extends BaseService { +class ProtectedBranches extends BaseService { all(projectId, options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/Repositories.js b/src/services/Repositories.js index 5ed10d7d..07d0e528 100644 --- a/src/services/Repositories.js +++ b/src/services/Repositories.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class Repositories extends BaseService { +class Repositories extends BaseService { compare(projectId, from, to) { const pId = encodeURIComponent(projectId); diff --git a/src/services/RepositoryFiles.js b/src/services/RepositoryFiles.js index e67f2595..45e74523 100644 --- a/src/services/RepositoryFiles.js +++ b/src/services/RepositoryFiles.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class RepositoryFiles extends BaseService { +class RepositoryFiles extends BaseService { create(projectId, filePath, branch, options = {}) { const [pId, path] = [projectId, filePath].map(encodeURIComponent); const extendedOptions = Object.assign({ branch }, options); diff --git a/src/services/Runners.js b/src/services/Runners.js index c52f0833..c0d772a4 100644 --- a/src/services/Runners.js +++ b/src/services/Runners.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class Runners extends BaseService { +class Runners extends BaseService { all(options = {}) { return RequestHelper.get(this, 'runners/all', options); } diff --git a/src/services/Services.js b/src/services/Services.js index d2960281..f5a48060 100644 --- a/src/services/Services.js +++ b/src/services/Services.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class Services extends BaseService { +class Services extends BaseService { edit(projectId, serviceName, options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/SystemHooks.js b/src/services/SystemHooks.js index 323362d4..c453d88c 100644 --- a/src/services/SystemHooks.js +++ b/src/services/SystemHooks.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class SystemHooks extends BaseService { +class SystemHooks extends BaseService { all(options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/Tags.js b/src/services/Tags.js index dafe50e1..09568fcc 100644 --- a/src/services/Tags.js +++ b/src/services/Tags.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class Tags extends BaseService { +class Tags extends BaseService { all(projectId, options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/Triggers.js b/src/services/Triggers.js index b036d891..5ae462ca 100644 --- a/src/services/Triggers.js +++ b/src/services/Triggers.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class Triggers extends BaseService { +class Triggers extends BaseService { add(projectId, options = {}) { const pId = encodeURIComponent(projectId); diff --git a/src/services/UserCustomAttributes.js b/src/services/UserCustomAttributes.js index 68a7ea27..9ad18e17 100644 --- a/src/services/UserCustomAttributes.js +++ b/src/services/UserCustomAttributes.js @@ -1,6 +1,6 @@ import { ResourceCustomAttributes } from '../templates'; -export class UserCustomAttributes { +class UserCustomAttributes { constructor(options) { return new ResourceCustomAttributes('users', options); } diff --git a/src/services/UserEmails.js b/src/services/UserEmails.js new file mode 100644 index 00000000..d3649a7c --- /dev/null +++ b/src/services/UserEmails.js @@ -0,0 +1,32 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class UserEmails extends BaseService { + all({ userId }) { + const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; + + return RequestHelper.get(this, url); + } + + add(email, { userId }) { + const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; + + return RequestHelper.post(this, url, { + email, + }); + } + + show(emailId) { + const eId = encodeURIComponent(emailId); + + return RequestHelper.get(this, `users/emails/${eId}`); + } + + remove(emailId, { userId }) { + const eId = encodeURIComponent(emailId); + const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; + + return RequestHelper.delete(this, `${url}/${eId}`); + } +} + +export default UserEmails; diff --git a/src/services/UserGPGKeys.js b/src/services/UserGPGKeys.js new file mode 100644 index 00000000..2c9b869c --- /dev/null +++ b/src/services/UserGPGKeys.js @@ -0,0 +1,34 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class UserGPGKeys extends BaseService { + all({ userId }) { + const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; + + return RequestHelper.get(this, url); + } + + add(title, key, { userId }) { + const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; + + return RequestHelper.post(this, url, { + title, + key, + }); + } + + show(keyId, { userId }) { + const kId = encodeURIComponent(keyId); + const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; + + return RequestHelper.get(this, `${url}/${kId}`); + } + + remove(keyId, { userId }) { + const kId = encodeURIComponent(keyId); + const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; + + return RequestHelper.delete(this, `${url}/${kId}`); + } +} + +export default UserGPGKeys; diff --git a/src/services/UserImpersonationTokens.js b/src/services/UserImpersonationTokens.js new file mode 100644 index 00000000..d2596c65 --- /dev/null +++ b/src/services/UserImpersonationTokens.js @@ -0,0 +1,33 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class UserImpersonationTokens extends BaseService { + all(userId) { + const uId = encodeURIComponent(userId); + + return RequestHelper.get(this, `users/${uId}/impersonation_tokens`); + } + + add(userId, name, scopes, expiresAt) { + const uId = encodeURIComponent(userId); + + return RequestHelper.post(this, `users/${uId}/impersonation_tokens`, { + name, + expiresAt, + scopes, + }); + } + + show(userId, tokenId) { + const [uId, tId] = [userId, tokenId].map(encodeURIComponent); + + return RequestHelper.get(this, `users/${uId}/impersonation_tokens/${tId}`); + } + + revoke(userId, tokenId) { + const [uId, tId] = [userId, tokenId].map(encodeURIComponent); + + return RequestHelper.delete(this, `users/${uId}/impersonation_tokens/${tId}`); + } +} + +export default UserImpersonationTokens; diff --git a/src/services/UserKeys.js b/src/services/UserKeys.js new file mode 100644 index 00000000..cb7bf52d --- /dev/null +++ b/src/services/UserKeys.js @@ -0,0 +1,33 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class UserKeys extends BaseService { + all({ userId }) { + const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'; + + return RequestHelper.get(this, url); + } + + create(title, key, { userId }) { + const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'; + + return RequestHelper.post(this, url, { + title, + key, + }); + } + + show(keyId) { + const kId = encodeURIComponent(keyId); + + return RequestHelper.get(this, `users/keys/${kId}`); + } + + remove(keyId, { userId }) { + const kId = encodeURIComponent(keyId); + const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'; + + return RequestHelper.delete(this, `${url}/${kId}`); + } +} + +export default UserKeys; diff --git a/src/services/Users.js b/src/services/Users.js index 7ad35f38..0c496d2b 100644 --- a/src/services/Users.js +++ b/src/services/Users.js @@ -1,7 +1,7 @@ import { BaseService, RequestHelper } from '../infrastructure'; import { validateEventOptions } from './Events'; -export class Users extends BaseService { +class Users extends BaseService { all(options = {}) { return RequestHelper.get(this, 'users', options); } @@ -62,122 +62,6 @@ export class Users extends BaseService { return RequestHelper.post(this, `users/${uId}/unblock`); } - - // Emails - addEmail(email, userId) { - const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; - - return RequestHelper.post(this, url, { - email, - }); - } - - emails(userId) { - const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; - - return RequestHelper.get(this, url); - } - - showEmail(emailId) { - const eId = encodeURIComponent(emailId); - - return RequestHelper.get(this, `users/emails/${eId}`); - } - - removeEmail(emailId, userId) { - const eId = encodeURIComponent(emailId); - const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; - - return RequestHelper.delete(this, `${url}/${eId}`); - } - - // Impersonation Tokens - impersonationTokens(userId) { - const uId = encodeURIComponent(userId); - - return RequestHelper.get(this, `users/${uId}/impersonation_tokens`); - } - - createImpersonationToken(userId, name, scopes, expiresAt) { - const uId = encodeURIComponent(userId); - - return RequestHelper.post(this, `users/${uId}/impersonation_tokens`, { - name, - expiresAt, - scopes, - }); - } - - showImpersonationToken(userId, tokenId) { - const [uId, tId] = [userId, tokenId].map(encodeURIComponent); - - return RequestHelper.get(this, `users/${uId}/impersonation_tokens/${tId}`); - } - - revokeImpersonationToken(userId, tokenId) { - const [uId, tId] = [userId, tokenId].map(encodeURIComponent); - - return RequestHelper.delete(this, `users/${uId}/impersonation_tokens/${tId}`); - } - - // GPG Keys - gpgKeys(userId) { - const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; - - return RequestHelper.get(this, url); - } - - addGPGKey(title, key, userId) { - const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; - - return RequestHelper.post(this, url, { - title, - key, - }); - } - - showGPGKey(keyId, userId) { - const kId = encodeURIComponent(keyId); - const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; - - return RequestHelper.get(this, `${url}/${kId}`); - } - - removeGPGKey(keyId, userId) { - const kId = encodeURIComponent(keyId); - const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; - - return RequestHelper.delete(this, `${url}/${kId}`); - } - - // SSH Keys - keys(userId) { - const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'; - - return RequestHelper.get(this, url); - } - - addKey(title, key, userId) { - const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'; - - return RequestHelper.post(this, url, { - title, - key, - }); - } - - showKey(keyId) { - const kId = encodeURIComponent(keyId); - - return RequestHelper.get(this, `users/keys/${kId}`); - } - - removeKey(keyId, userId) { - const kId = encodeURIComponent(keyId); - const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'; - - return RequestHelper.delete(this, `${url}/${kId}`); - } } export default Users; diff --git a/src/services/index.js b/src/services/index.js index 6a81873f..fe7bcc33 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -1,41 +1,46 @@ // Groups -export * from './GroupAccessRequests'; -export * from './GroupCustomAttributes'; -export * from './GroupMembers'; -export * from './GroupMilestones'; -export * from './GroupProjects'; -export * from './Groups'; +export Groups from './Groups'; +export GroupAccessRequests from './GroupAccessRequests'; +export GroupCustomAttributes from './GroupCustomAttributes'; +export GroupMembers from './GroupMembers'; +export GroupMilestones from './GroupMilestones'; +export GroupProjects from './GroupProjects'; +export GroupVariables from './GroupVariables'; + +// Users +export Users from './Users'; +export UserEmails from './UserEmails'; +export UserImpersonationTokens from './UserImpersonationTokens'; +export UserKeys from './UserKeys'; +export UserGPGKeys from './UserGPGKeys'; // Projects -export * from './Branches'; -export * from './Commits'; -export * from './CommitNotes'; -export * from './DeployKeys'; -export * from './Environments'; -export * from './Issues'; -export * from './Jobs'; -export * from './Labels'; -export * from './MergeRequests'; -export * from './MergeRequestNotes'; -export * from './MergeRequestVersions'; -export * from './Pipelines'; -export * from './Projects'; -export * from './ProjectAccessRequests'; -export * from './ProjectCustomAttributes'; -export * from './ProjectHooks'; -export * from './ProjectMembers'; -export * from './ProjectMilestones'; -export * from './ProjectSnippets'; -export * from './ProtectedBranches'; -export * from './Repositories'; -export * from './RepositoryFiles'; -export * from './Runners'; -export * from './Services'; -export * from './Tags'; -export * from './Triggers'; +export Branches from './Branches'; +export Commits from './Commits'; +export DeployKeys from './DeployKeys'; +export Environments from './Environments'; +export Issues from './Issues'; +export Jobs from './Jobs'; +export Labels from './Labels'; +export MergeRequests from './MergeRequests'; +export MergeRequestNotes from './MergeRequestNotes'; +export MergeRequestVersions from './MergeRequestVersions'; +export Pipelines from './Pipelines'; +export Projects from './Projects'; +export ProjectAccessRequests from './ProjectAccessRequests'; +export ProjectCustomAttributes from './ProjectCustomAttributes'; +export ProjectHooks from './ProjectHooks'; +export ProjectMembers from './ProjectMembers'; +export ProjectMilestones from './ProjectMilestones'; +export ProjectSnippets from './ProjectSnippets'; +export ProtectedBranches from './ProtectedBranches'; +export ProjectVariables from './ProjectVariables'; +export Repositories from './Repositories'; +export RepositoryFiles from './RepositoryFiles'; +export Runners from './Runners'; +export Services from './Services'; +export Tags from './Tags'; +export Triggers from './Triggers'; // General -export * from './SystemHooks'; -export * from './Users'; -// export * from './UserKeys'; -// export * from './UserGPGKeys'; +export SystemHooks from './SystemHooks'; diff --git a/src/templates/ResourceAccessRequests.js b/src/templates/ResourceAccessRequests.js index 36a160f8..33454b21 100644 --- a/src/templates/ResourceAccessRequests.js +++ b/src/templates/ResourceAccessRequests.js @@ -8,7 +8,7 @@ export const ACCESS_LEVELS = { OWNER: 50, }; -export class ResourceAccessRequests extends BaseService { +class ResourceAccessRequests extends BaseService { constructor(resourceType, ...args) { super(...args); diff --git a/src/templates/ResourceCustomAttributes.js b/src/templates/ResourceCustomAttributes.js index 0ae6faa4..48b4ab64 100644 --- a/src/templates/ResourceCustomAttributes.js +++ b/src/templates/ResourceCustomAttributes.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class ResourceCustomAttributes extends BaseService { +class ResourceCustomAttributes extends BaseService { constructor(resourceType, ...args) { super(...args); diff --git a/src/templates/ResourceMembers.js b/src/templates/ResourceMembers.js index 7ec45fd0..7dbf9961 100644 --- a/src/templates/ResourceMembers.js +++ b/src/templates/ResourceMembers.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class ResourceMembers extends BaseService { +class ResourceMembers extends BaseService { constructor(resourceType, ...args) { super(...args); diff --git a/src/templates/ResourceMilestones.js b/src/templates/ResourceMilestones.js index 379166d2..799ca40f 100644 --- a/src/templates/ResourceMilestones.js +++ b/src/templates/ResourceMilestones.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class ResourceMilestones extends BaseService { +class ResourceMilestones extends BaseService { constructor(resourceType, ...args) { super(...args); diff --git a/src/templates/ResourceNotes.js b/src/templates/ResourceNotes.js index e7a11ce8..1c5baf57 100644 --- a/src/templates/ResourceNotes.js +++ b/src/templates/ResourceNotes.js @@ -1,6 +1,6 @@ import { BaseService, RequestHelper } from '../infrastructure'; -export class ResourceNotes extends BaseService { +class ResourceNotes extends BaseService { constructor(resourceType, resource2Type, ...args) { super(...args); diff --git a/src/templates/ResourceVariables.js b/src/templates/ResourceVariables.js new file mode 100644 index 00000000..2533a3b2 --- /dev/null +++ b/src/templates/ResourceVariables.js @@ -0,0 +1,41 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class ResourceVariables extends BaseService { + constructor(resourceType, ...args) { + super(...args); + + this.resourceType = resourceType; + } + + all(resourceId) { + const rId = encodeURIComponent(resourceId); + + return RequestHelper.get(this, `${this.resourceType}/${rId}/s`); + } + + create(resourceId, options) { + const rId = encodeURIComponent(resourceId); + + return RequestHelper.post(this, `${this.resourceType}/${rId}/s`, options); + } + + edit(resourceId, keyId, options) { + const [rId, kId] = [resourceId, keyId].map(encodeURIComponent); + + return RequestHelper.put(this, `${this.resourceType}/${rId}/s/${kId}`, options); + } + + show(resourceId, keyId) { + const [rId, kId] = [resourceId, keyId].map(encodeURIComponent); + + return RequestHelper.get(this, `${this.resourceType}/${rId}/s/${kId}`); + } + + remove(resourceId, keyId) { + const [rId, kId] = [resourceId, keyId].map(encodeURIComponent); + + return RequestHelper.delete(this, `${this.resourceType}/${rId}/s/${kId}`); + } +} + +export default ResourceVariables; diff --git a/src/templates/index.js b/src/templates/index.js index 5ae496a5..ac4d25c4 100644 --- a/src/templates/index.js +++ b/src/templates/index.js @@ -1,5 +1,6 @@ -export * from './ResourceNotes'; -export * from './ResourceAccessRequests'; -export * from './ResourceMembers'; -export * from './ResourceMilestones'; -export * from './ResourceCustomAttributes'; +export ResourceNotes from './ResourceNotes'; +export ResourceAccessRequests from './ResourceAccessRequests'; +export ResourceMembers from './ResourceMembers'; +export ResourceMilestones from './ResourceMilestones'; +export ResourceCustomAttributes from './ResourceCustomAttributes'; +export ResourceVariables from './ResourceVariables'; From 9cf13411b5ec97da1c91d729ad14296f4a614a40 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Fri, 16 Mar 2018 20:49:49 -0400 Subject: [PATCH 07/90] Adding more information to the readme --- README.md | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7477fe9d..27cbd0a0 100644 --- a/README.md +++ b/README.md @@ -68,13 +68,13 @@ Using the await/async method ```javascript // Listing users -let users = await GitlabAPI.users.all(); +let users = await GitlabAPI.Users.all(); ``` Or using Promise-Then notation ```javascript // Listing projects -GitlabAPI.projects.all() +GitlabAPI.Projects.all() .then((projects) => { console.log(projects) }) @@ -87,7 +87,7 @@ General rule about all the function parameters: ie. ```javascript -GitlabAPI.projects.create(projectId, { +GitlabAPI.Projects.create(projectId, { //options defined in the Gitlab API documentation }) ``` @@ -99,7 +99,7 @@ For any .all() function on a resource, it will return all the items from Gitlab. ```javascript // Listing projects -let projects = await GitlabAPI.projects.all({max_pages:2}); +let projects = await GitlabAPI.Projects.all({maxPages:2}); ``` @@ -107,7 +107,7 @@ You can also use this in conjunction to the perPage argument which would overrid ```javascript // Listing projects -let projects = await GitlabAPI.projects.all({max_pages:2, per_page:40}); +let projects = await GitlabAPI.Projects.all({maxPages:2, perPage:40}); ``` @@ -146,6 +146,24 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod ## Changelog +[3.0.0](https://github.com/jdalrymple/node-gitlab-api/) (2018-3-16) +------------------ +- Exporting all services seperatly ie. const { Projects } from 'node-gitlab-api'; as well as the usual default export: const Gitlab from 'node-gitlab-api' +- Exporting namespaces which are groups of related API's. These include: ProjectsNamespace, UsersNamespace and GroupsNamespace +- Added activies support to the Users service +- Added events support to the Projects, and Users +- Added full support for ProjectVariables and GroupVariables +- Added support for UserGPGKeys +- Added support for UserImpersonationTokens +- Added support for SystemHooks + +...to be continued + + +### Breaking Changes between 2.2.4 and 3.0.0 +- All services being exported are not capitalized for clarity that they are themselves api's and not properties. ie. GitlabAPI.Projects vs GitlabAPI.projects +- + [2.2.4](https://github.com/jdalrymple/node-gitlab-api/5d7c031ca2b833b28633647195560379d88ba5b3) (2018-2-12) ------------------ - Fixed the missing options for tags.all #40 From bdbf1e5fed5f4547ce5c6876add9d48fc4f0fef9 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Sat, 17 Mar 2018 00:04:21 -0400 Subject: [PATCH 08/90] Updated docs and fixed templates --- README.md | 10 +- package-lock.json | 20 +-- package.json | 4 +- src/index.js | 172 ++++++++++++------------ src/services/GroupAccessRequests.js | 4 +- src/services/GroupCustomAttributes.js | 4 +- src/services/GroupMembers.js | 4 +- src/services/GroupMilestones.js | 4 +- src/services/GroupVariables.js | 4 +- src/services/MergeRequestNotes.js | 4 +- src/services/ProjectAccessRequests.js | 4 +- src/services/ProjectCustomAttributes.js | 4 +- src/services/ProjectMembers.js | 4 +- src/services/ProjectMilestones.js | 4 +- src/services/ProjectSnippets.js | 4 +- src/services/ProjectVariables.js | 4 +- src/services/UserCustomAttributes.js | 4 +- 17 files changed, 127 insertions(+), 131 deletions(-) diff --git a/README.md b/README.md index 27cbd0a0..f397ce4d 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,9 @@ URL to your GitLab instance should not include `/api/v4` path. Instantiate the library using a basic token created in your [Gitlab Profile](https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html) ```javascript -const GitlabAPI = require('node-gitlab-api')({ +import GitlabAPI from 'node-gitlab-api'; + +const API = GitlabAPI({ url: 'http://example.com', // Defaults to http://gitlab.com token: 'abcdefghij123456' //Can be created in your profile. }) @@ -47,7 +49,9 @@ const GitlabAPI = require('node-gitlab-api')({ Or, use a OAuth token instead! ```javascript -const GitlabAPI = require('node-gitlab-api')({ +import GitlabAPI from 'node-gitlab-api'; + +const API = GitlabAPI({ url: 'http://example.com', // Defaults to http://gitlab.com oauthToken: 'abcdefghij123456' }) @@ -56,7 +60,7 @@ const GitlabAPI = require('node-gitlab-api')({ The same parameters as above, but the require url inclues a `/dist/es5`: ```javascript -const GitlabAPI = require('node-gitlab-api/dist/es5')({ +const GitlabAPI = require('node-gitlab-api/dist/es5').default({ ... }) ``` diff --git a/package-lock.json b/package-lock.json index bf9ceb53..cf790ce7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -356,15 +356,6 @@ "@babel/plugin-syntax-export-default-from": "7.0.0-beta.42" } }, - "@babel/plugin-proposal-export-namespace": { - "version": "7.0.0-beta.32", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace/-/plugin-proposal-export-namespace-7.0.0-beta.32.tgz", - "integrity": "sha512-vSnkdadqxvkOtNgoY8lo3cpXkBkRBLS6Z/2IoHZRplp1e/V6a/wGRBwwJGEQoi24WDIMwzlOl6V0I7q/MTo9jA==", - "dev": true, - "requires": { - "@babel/plugin-syntax-export-extensions": "7.0.0-beta.32" - } - }, "@babel/plugin-proposal-export-namespace-from": { "version": "7.0.0-beta.42", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.0.0-beta.42.tgz", @@ -461,12 +452,6 @@ "@babel/helper-plugin-utils": "7.0.0-beta.42" } }, - "@babel/plugin-syntax-export-extensions": { - "version": "7.0.0-beta.32", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-extensions/-/plugin-syntax-export-extensions-7.0.0-beta.32.tgz", - "integrity": "sha512-rPCgRGdA2nUGRGsDlfII8g665+ECp0IpKtjRtpBJB7GMBG+WpAbWVM6P4h40IsEe9wv38jl0Nuv3lVVvKTi/Mw==", - "dev": true - }, "@babel/plugin-syntax-export-namespace-from": { "version": "7.0.0-beta.42", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.0.0-beta.42.tgz", @@ -3129,6 +3114,11 @@ "sshpk": "1.14.1" } }, + "humps": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/humps/-/humps-2.0.1.tgz", + "integrity": "sha1-3QLqYIG9BWjcXQcxhEY5V7qe+ao=" + }, "iconv-lite": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", diff --git a/package.json b/package.json index 061c5b03..c5808da4 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,10 @@ "node": ">=8.9.0" }, "scripts": { + "build:clean": "rimraf -rf dist && mkdirp -p dist", "build:es6": "babel src -d dist/latest", "build:es5": "babel src -d dist/es5 --no-babelrc --presets=@babel/env --plugins=@babel/plugin-proposal-export-default-from,@babel/plugin-proposal-export-namespace-from", - "build": "npm run build:es6 && npm run build:es5", + "build": "npm run build:clean && npm run build:es6 && npm run build:es5", "prepublishOnly": "npm run build" }, "repository": { @@ -40,6 +41,7 @@ "eslint-plugin-react": "^7.7.0" }, "dependencies": { + "humps": "^2.0.1", "parse-link-header": "^1.0.1", "request": "^2.85.0", "request-promise": "^4.2.2", diff --git a/src/index.js b/src/index.js index 76b5e50d..c29cb635 100644 --- a/src/index.js +++ b/src/index.js @@ -1,8 +1,8 @@ -import * as Services from './services'; +import * as APIServices from './services'; import { init } from './infrastructure/Namespace'; // All not initialized -// export * from './services'; +export * from './services'; // Groups const { @@ -13,93 +13,93 @@ const { GroupMilestones, GroupProjects, GroupVariables, -} = Services; +} = APIServices; -// export const GroupNamespace = options => init(options, { -// Groups, -// GroupAccessRequests, -// GroupCustomAttributes, -// GroupMembers, -// GroupMilestones, -// GroupProjects, -// GroupVariables, -// }); +export const GroupNamespace = options => init(options, { + Groups, + GroupAccessRequests, + GroupCustomAttributes, + GroupMembers, + GroupMilestones, + GroupProjects, + GroupVariables, +}); -// // Users -// const { -// Users, -// UserEmails, -// UserImpersonationTokens, -// UserKeys, -// UserGPGKeys, -// } = Services; +// Users +const { + Users, + UserEmails, + UserImpersonationTokens, + UserKeys, + UserGPGKeys, +} = APIServices; -// export const UserNamespace = options => init(options, { -// Users, -// UserEmails, -// UserImpersonationTokens, -// UserKeys, -// UserGPGKeys, -// }); +export const UserNamespace = options => init(options, { + Users, + UserEmails, + UserImpersonationTokens, + UserKeys, + UserGPGKeys, +}); -// // // Projects -// const { -// Branches, -// Commits, -// DeployKeys, -// Environments, -// Issues, -// Jobs, -// Labels, -// MergeRequests, -// MergeRequestNotes, -// MergeRequestVersions, -// Pipelines, -// Projects, -// ProjectAccessRequests, -// ProjectCustomAttributes, -// ProjectHooks, -// ProjectMembers, -// ProjectMilestones, -// ProjectSnippets, -// ProtectedBranches, -// ProjectVariables, -// Repositories, -// RepositoryFiles, -// Runners, -// Services, -// Tags, -// Triggers, -// } = Services; +// Projects +const { + Branches, + Commits, + DeployKeys, + Environments, + Issues, + Jobs, + Labels, + MergeRequests, + MergeRequestNotes, + MergeRequestVersions, + Pipelines, + Projects, + ProjectAccessRequests, + ProjectCustomAttributes, + ProjectHooks, + ProjectMembers, + ProjectMilestones, + ProjectSnippets, + ProtectedBranches, + ProjectVariables, + Repositories, + RepositoryFiles, + Runners, + Services, + Tags, + Triggers, +} = APIServices; -// export const ProjectNamespace = options => init(options, { -// Branches, -// Commits, -// DeployKeys, -// Environments, -// Issues, -// Jobs, -// Labels, -// MergeRequests, -// MergeRequestNotes, -// MergeRequestVersions, -// Pipelines, -// Projects, -// ProjectAccessRequests, -// ProjectCustomAttributes, -// ProjectHooks, -// ProjectMembers, -// ProjectMilestones, -// ProjectSnippets, -// ProtectedBranches, -// ProjectVariables, -// Repositories, -// RepositoryFiles, -// Runners, -// Services, -// Tags, -// Triggers, -// }); +export const ProjectNamespace = options => init(options, { + Branches, + Commits, + DeployKeys, + Environments, + Issues, + Jobs, + Labels, + MergeRequests, + MergeRequestNotes, + MergeRequestVersions, + Pipelines, + Projects, + ProjectAccessRequests, + ProjectCustomAttributes, + ProjectHooks, + ProjectMembers, + ProjectMilestones, + ProjectSnippets, + ProtectedBranches, + ProjectVariables, + Repositories, + RepositoryFiles, + Runners, + Services, + Tags, + Triggers, +}); -// // All initialized -// export default options => init(options, Services); +// All initialized +export default options => init(options, Services); diff --git a/src/services/GroupAccessRequests.js b/src/services/GroupAccessRequests.js index b5527d68..b6a5327f 100644 --- a/src/services/GroupAccessRequests.js +++ b/src/services/GroupAccessRequests.js @@ -1,8 +1,8 @@ import { ResourceAccessRequests } from '../templates'; -class GroupAccessRequests { +class GroupAccessRequests extends ResourceAccessRequests { constructor(options) { - return new ResourceAccessRequests('groups', options); + super('groups', options); } } diff --git a/src/services/GroupCustomAttributes.js b/src/services/GroupCustomAttributes.js index e31031cc..6a9a05d5 100644 --- a/src/services/GroupCustomAttributes.js +++ b/src/services/GroupCustomAttributes.js @@ -1,8 +1,8 @@ import { ResourceCustomAttributes } from '../templates'; -class GroupCustomAttributes { +class GroupCustomAttributes extends ResourceCustomAttributes { constructor(options) { - return new ResourceCustomAttributes('groups', options); + super('groups', options); } } diff --git a/src/services/GroupMembers.js b/src/services/GroupMembers.js index 50c2c3ce..a76c0919 100644 --- a/src/services/GroupMembers.js +++ b/src/services/GroupMembers.js @@ -1,8 +1,8 @@ import { ResourceMembers } from '../templates'; -class GroupMembers { +class GroupMembers extends ResourceMembers { constructor(options) { - return new ResourceMembers('groups', options); + super('groups', options); } } diff --git a/src/services/GroupMilestones.js b/src/services/GroupMilestones.js index 4a31c5a2..b13306c1 100644 --- a/src/services/GroupMilestones.js +++ b/src/services/GroupMilestones.js @@ -1,8 +1,8 @@ import { ResourceMilestones } from '../templates'; -class GroupMilestones { +class GroupMilestones extends ResourceMilestones { constructor(options) { - return new ResourceMilestones('groups', options); + super('groups', options); } } diff --git a/src/services/GroupVariables.js b/src/services/GroupVariables.js index 0ea819f5..7bd40792 100644 --- a/src/services/GroupVariables.js +++ b/src/services/GroupVariables.js @@ -1,8 +1,8 @@ import { ResourceVariables } from '../templates'; -class GroupVariables { +class GroupVariables extends ResourceVariables { constructor(options) { - return new ResourceVariables('groups', options); + super('groups', options); } } diff --git a/src/services/MergeRequestNotes.js b/src/services/MergeRequestNotes.js index a9b21209..4e07fb22 100644 --- a/src/services/MergeRequestNotes.js +++ b/src/services/MergeRequestNotes.js @@ -1,8 +1,8 @@ import { ResourceNotes } from '../templates'; -class MergeRequestNotes { +class MergeRequestNotes extends ResourceNotes { constructor(options) { - return new ResourceNotes('mergerequests', 'notes', options); + super('mergerequests', 'notes', options); } } diff --git a/src/services/ProjectAccessRequests.js b/src/services/ProjectAccessRequests.js index 9bea05e0..39c686ac 100644 --- a/src/services/ProjectAccessRequests.js +++ b/src/services/ProjectAccessRequests.js @@ -1,8 +1,8 @@ import { ResourceAccessRequests } from '../templates'; -class ProjectAccessRequests { +class ProjectAccessRequests extends ResourceAccessRequests { constructor(options) { - return new ResourceAccessRequests('projects', options); + super('projects', options); } } diff --git a/src/services/ProjectCustomAttributes.js b/src/services/ProjectCustomAttributes.js index 419f7db4..6f3bb339 100644 --- a/src/services/ProjectCustomAttributes.js +++ b/src/services/ProjectCustomAttributes.js @@ -1,8 +1,8 @@ import { ResourceCustomAttributes } from '../templates'; -class ProjectCustomAttributes { +class ProjectCustomAttributes extends ResourceCustomAttributes { constructor(options) { - return new ResourceCustomAttributes('projects', options); + super('projects', options); } } diff --git a/src/services/ProjectMembers.js b/src/services/ProjectMembers.js index 1a649111..59c8acb5 100644 --- a/src/services/ProjectMembers.js +++ b/src/services/ProjectMembers.js @@ -1,8 +1,8 @@ import { ResourceMembers } from '../templates'; -class ProjectMembers { +class ProjectMembers extends ResourceMembers { constructor(options) { - return new ResourceMembers('projects', options); + super('projects', options); } } diff --git a/src/services/ProjectMilestones.js b/src/services/ProjectMilestones.js index 477053e3..300687a3 100644 --- a/src/services/ProjectMilestones.js +++ b/src/services/ProjectMilestones.js @@ -1,8 +1,8 @@ import { ResourceMilestones } from '../templates'; -class ProjectMilestones { +class ProjectMilestones extends ResourceMilestones { constructor(options) { - return new ResourceMilestones('projects', options); + super('projects', options); } } diff --git a/src/services/ProjectSnippets.js b/src/services/ProjectSnippets.js index 30f3f732..58cfe3bb 100644 --- a/src/services/ProjectSnippets.js +++ b/src/services/ProjectSnippets.js @@ -1,8 +1,8 @@ import { ResourceNotes } from '../templates'; -class ProjectSnippets { +class ProjectSnippets extends ResourceNotes { constructor(options) { - return new ResourceNotes('projects', 'snippets', options); + super('projects', 'snippets', options); } } diff --git a/src/services/ProjectVariables.js b/src/services/ProjectVariables.js index 65811cdc..dedac47d 100644 --- a/src/services/ProjectVariables.js +++ b/src/services/ProjectVariables.js @@ -1,8 +1,8 @@ import { ResourceVariables } from '../templates'; -class ProjectVariables { +class ProjectVariables extends ResourceVariables { constructor(options) { - return new ResourceVariables('projects', options); + super('projects', options); } } diff --git a/src/services/UserCustomAttributes.js b/src/services/UserCustomAttributes.js index 9ad18e17..109fb9aa 100644 --- a/src/services/UserCustomAttributes.js +++ b/src/services/UserCustomAttributes.js @@ -1,8 +1,8 @@ import { ResourceCustomAttributes } from '../templates'; -class UserCustomAttributes { +class UserCustomAttributes extends ResourceCustomAttributes { constructor(options) { - return new ResourceCustomAttributes('users', options); + super('users', options); } } From 18edae4e8331cd2ff69f4737f38c3cff147ae15e Mon Sep 17 00:00:00 2001 From: sha162 Date: Mon, 19 Mar 2018 20:50:19 +1300 Subject: [PATCH 09/90] Added optional parameters for adding and editing resource members --- .babelrc | 3 ++- package.json | 2 +- src/templates/ResourceMembers.js | 6 ++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.babelrc b/.babelrc index ea6d331e..09e0a2f4 100644 --- a/.babelrc +++ b/.babelrc @@ -8,6 +8,7 @@ ], "plugins": [ "@babel/plugin-proposal-export-default-from", - "@babel/plugin-proposal-export-namespace-from" + "@babel/plugin-proposal-export-namespace-from", + "@babel/plugin-proposal-object-rest-spread" ] } \ No newline at end of file diff --git a/package.json b/package.json index c5808da4..046c411d 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "scripts": { "build:clean": "rimraf -rf dist && mkdirp -p dist", "build:es6": "babel src -d dist/latest", - "build:es5": "babel src -d dist/es5 --no-babelrc --presets=@babel/env --plugins=@babel/plugin-proposal-export-default-from,@babel/plugin-proposal-export-namespace-from", + "build:es5": "babel src -d dist/es5 --no-babelrc --presets=@babel/env --plugins=@babel/plugin-proposal-export-default-from,@babel/plugin-proposal-export-namespace-from,@babel/plugin-proposal-object-rest-spread", "build": "npm run build:clean && npm run build:es6 && npm run build:es5", "prepublishOnly": "npm run build" }, diff --git a/src/templates/ResourceMembers.js b/src/templates/ResourceMembers.js index 7dbf9961..de7ec16a 100644 --- a/src/templates/ResourceMembers.js +++ b/src/templates/ResourceMembers.js @@ -13,16 +13,17 @@ class ResourceMembers extends BaseService { return RequestHelper.get(this, `${this.resourceType}/${rId}/members`); } - add(resourceId, userId, accessLevel) { + add(resourceId, userId, accessLevel, options = {}) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); return RequestHelper.post(this, `${this.resourceType}/${rId}/members`, { user_id: uId, access_level: parseInt(accessLevel, 10), + ...options, }); } - edit(resourceId, userId, accessLevel) { + edit(resourceId, userId, accessLevel, options = {}) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); return RequestHelper.put( @@ -30,6 +31,7 @@ class ResourceMembers extends BaseService { `${this.resourceType}/${rId}/members/${uId}`, { access_level: parseInt(accessLevel, 10), + ...options, }, ); } From 530907f224fa9c3f922609e1cda2565eb1b0532b Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Mon, 19 Mar 2018 08:25:32 -0400 Subject: [PATCH 10/90] More updates - Ensure new operator with API instatiations - Updating readme --- README.md | 71 +++++++++++++++++++++++---------- src/index.js | 8 ++-- src/infrastructure/Namespace.js | 12 ++++-- 3 files changed, 62 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index f397ce4d..650e9fc6 100644 --- a/README.md +++ b/README.md @@ -32,37 +32,66 @@ npm install node-gitlab-api ``` ## Usage -### Import -#### ES6 (>=node 8.0.0) +### Basic Import + URL to your GitLab instance should not include `/api/v4` path. Instantiate the library using a basic token created in your [Gitlab Profile](https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html) -```javascript -import GitlabAPI from 'node-gitlab-api'; -const API = GitlabAPI({ +```javascript +// ES6 (>=node 8.0.0) +import Gitlab from 'node-gitlab-api'; + +// ES5 +const Gitlab = require('node-gitlab-api/dist/es5').default + + +// Instantiating +const api = new Gitlab({ url: 'http://example.com', // Defaults to http://gitlab.com token: 'abcdefghij123456' //Can be created in your profile. }) -``` -Or, use a OAuth token instead! +// Or, use a OAuth token instead! -```javascript -import GitlabAPI from 'node-gitlab-api'; - -const API = GitlabAPI({ +const api = new Gitlab({ url: 'http://example.com', // Defaults to http://gitlab.com oauthToken: 'abcdefghij123456' }) + ``` -#### ES5 -The same parameters as above, but the require url inclues a `/dist/es5`: + +### Specific Imports + +Sometimes you dont want to import and instantiate the whole gitlab api, perhaps you only want access to the Projects API. To do this, one only needs to import and instantiate this specific API: ```javascript -const GitlabAPI = require('node-gitlab-api/dist/es5').default({ - ... +import { Projects } from 'node-gitlab-api'; + +const service = new Projects({ + url: 'http://example.com', // Defaults to http://gitlab.com + token: 'abcdefghij123456' //Can be created in your profile. }) + +``` + +### Namespace Imports + +It can be annoying to have to import all the API's pertaining to a specific resource. For example, the Projects resource is composed of many API's, Projects, Issues, Labels, MergeRequests, etc. For convience, there is a Namespace export for importing and instantiating all these related API's at once. + + +```javascript +import { ProjectsNamespace } from 'node-gitlab-api'; + +const services = new ProjectsNamespace({ + url: 'http://example.com', // Defaults to http://gitlab.com + token: 'abcdefghij123456' //Can be created in your profile. +}) + +services.Projects.all() +services.MergeRequests.all() +etc.. + ``` ### Examples @@ -72,13 +101,13 @@ Using the await/async method ```javascript // Listing users -let users = await GitlabAPI.Users.all(); +let users = await api.Users.all(); ``` Or using Promise-Then notation ```javascript // Listing projects -GitlabAPI.Projects.all() +api.Projects.all() .then((projects) => { console.log(projects) }) @@ -91,7 +120,7 @@ General rule about all the function parameters: ie. ```javascript -GitlabAPI.Projects.create(projectId, { +api.Projects.create(projectId, { //options defined in the Gitlab API documentation }) ``` @@ -103,7 +132,7 @@ For any .all() function on a resource, it will return all the items from Gitlab. ```javascript // Listing projects -let projects = await GitlabAPI.Projects.all({maxPages:2}); +let projects = await api.Projects.all({maxPages:2}); ``` @@ -111,7 +140,7 @@ You can also use this in conjunction to the perPage argument which would overrid ```javascript // Listing projects -let projects = await GitlabAPI.Projects.all({maxPages:2, perPage:40}); +let projects = await api.Projects.all({maxPages:2, perPage:40}); ``` @@ -165,7 +194,7 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod ### Breaking Changes between 2.2.4 and 3.0.0 -- All services being exported are not capitalized for clarity that they are themselves api's and not properties. ie. GitlabAPI.Projects vs GitlabAPI.projects +- All services being exported are not capitalized for clarity that they are themselves api's and not properties. ie. Gitlab.Projects vs Gitlab.projects - [2.2.4](https://github.com/jdalrymple/node-gitlab-api/5d7c031ca2b833b28633647195560379d88ba5b3) (2018-2-12) diff --git a/src/index.js b/src/index.js index c29cb635..795ae6e5 100644 --- a/src/index.js +++ b/src/index.js @@ -15,7 +15,7 @@ const { GroupVariables, } = APIServices; -export const GroupNamespace = options => init(options, { +export const GroupNamespace = init({ Groups, GroupAccessRequests, GroupCustomAttributes, @@ -34,7 +34,7 @@ const { UserGPGKeys, } = APIServices; -export const UserNamespace = options => init(options, { +export const UserNamespace = init({ Users, UserEmails, UserImpersonationTokens, @@ -72,7 +72,7 @@ const { Triggers, } = APIServices; -export const ProjectNamespace = options => init(options, { +export const ProjectNamespace = init({ Branches, Commits, DeployKeys, @@ -102,4 +102,4 @@ export const ProjectNamespace = options => init(options, { }); // All initialized -export default options => init(options, Services); +export default init(Services); diff --git a/src/infrastructure/Namespace.js b/src/infrastructure/Namespace.js index d6639afa..05d69d87 100644 --- a/src/infrastructure/Namespace.js +++ b/src/infrastructure/Namespace.js @@ -1,9 +1,13 @@ -function init(options, ...services) { +function init(...services) { const combined = Object.assign({}, ...services); - return Object.entries(combined).reduce((output, [name, Service]) => { - output[name] = new Service(options); return output; - }, {}); + return class Namespace { + constructor(options) { + Object.entries(combined).forEach(([name, Service]) => { + this[name] = new Service(options); + }); + } + }; } export { From e7b3d4acc5c437dd27489229b32b87618cab2104 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Mon, 19 Mar 2018 08:30:56 -0400 Subject: [PATCH 11/90] Updating readme to include latest PR #45 --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 650e9fc6..70ba472e 100644 --- a/README.md +++ b/README.md @@ -172,6 +172,7 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod - [fewieden](https://github.com/fewieden) - [Jeff Pelton](https://github.com/comster) - [Claude Abounegm](https://github.com/claude-abounegm) +- [Stefan Hall](https://github.com/Marethyu1) ## License @@ -189,6 +190,8 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod - Added support for UserGPGKeys - Added support for UserImpersonationTokens - Added support for SystemHooks +- Fixed the missing options parameter for the ProjectMembers and GroupMemebers APIs in PR [#45] thanks to [Stefan Hall](https://github.com/Marethyu1) +- Supporting both camelCase and snake_case option properties: `projects.all({perPage:5}) === projects.all({per_page: 5})` ...to be continued From b644d48d3d05f30b242fec35aefeb8d142fa4d9a Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Mon, 19 Mar 2018 11:30:01 -0400 Subject: [PATCH 12/90] Compiling down to lts --- .babelrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.babelrc b/.babelrc index 09e0a2f4..a4cced43 100644 --- a/.babelrc +++ b/.babelrc @@ -2,7 +2,7 @@ "presets": [ ["@babel/preset-env", { "targets": { - "node": "9.80" + "node": "8.9.0" } }] ], From d68b5b61c65f4bf66eb038bd9db3e91237d0d939 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Mon, 19 Mar 2018 12:38:57 -0400 Subject: [PATCH 13/90] Fixing up some defaults --- src/templates/ResourceMembers.js | 4 ++-- src/templates/ResourceMilestones.js | 2 +- src/templates/ResourceNotes.js | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/templates/ResourceMembers.js b/src/templates/ResourceMembers.js index de7ec16a..4185fe37 100644 --- a/src/templates/ResourceMembers.js +++ b/src/templates/ResourceMembers.js @@ -13,7 +13,7 @@ class ResourceMembers extends BaseService { return RequestHelper.get(this, `${this.resourceType}/${rId}/members`); } - add(resourceId, userId, accessLevel, options = {}) { + add(resourceId, userId, accessLevel, options) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); return RequestHelper.post(this, `${this.resourceType}/${rId}/members`, { @@ -23,7 +23,7 @@ class ResourceMembers extends BaseService { }); } - edit(resourceId, userId, accessLevel, options = {}) { + edit(resourceId, userId, accessLevel, options) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); return RequestHelper.put( diff --git a/src/templates/ResourceMilestones.js b/src/templates/ResourceMilestones.js index 799ca40f..dda70927 100644 --- a/src/templates/ResourceMilestones.js +++ b/src/templates/ResourceMilestones.js @@ -7,7 +7,7 @@ class ResourceMilestones extends BaseService { this.resourceType = resourceType; } - all(resourceId, options = {}) { + all(resourceId, options) { const rId = encodeURIComponent(resourceId); return RequestHelper.get(this, `${this.resourceType}/${rId}/milestones`, options); diff --git a/src/templates/ResourceNotes.js b/src/templates/ResourceNotes.js index 1c5baf57..293fac4a 100644 --- a/src/templates/ResourceNotes.js +++ b/src/templates/ResourceNotes.js @@ -8,13 +8,13 @@ class ResourceNotes extends BaseService { this.resource2Type = resource2Type; } - all(resourceId, resource2Id, options = {}) { + all(resourceId, resource2Id, options) { const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); return RequestHelper.get(this, `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes`, options); } - create(resourceId, resource2Id, options = {}) { + create(resourceId, resource2Id, options) { if (!options.body) throw new Error('Missing required property: body'); const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); @@ -22,7 +22,7 @@ class ResourceNotes extends BaseService { return RequestHelper.post(this, `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes`, options); } - edit(resourceId, resource2Id, noteId, options = {}) { + edit(resourceId, resource2Id, noteId, options) { if (!options.body) throw new Error('Missing required property: body'); const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent); From e75062aa97117f6c9efd633510281369c1afb445 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Mon, 19 Mar 2018 13:56:35 -0400 Subject: [PATCH 14/90] Linting --- src/index.js | 8 +---- src/infrastructure/Namespace.js | 4 +-- src/infrastructure/RequestHelper.js | 12 +++---- src/services/Branches.js | 19 +++------- src/services/Commits.js | 32 +++++------------ src/services/DeployKeys.js | 2 +- src/services/Environments.js | 2 +- src/services/GroupProjects.js | 2 +- src/services/Issues.js | 25 ++++++-------- src/services/Labels.js | 6 ++-- src/services/MergeRequests.js | 24 +++++-------- src/services/ProjectHooks.js | 4 +-- src/services/ProjectRunners.js | 4 +-- src/services/Projects.js | 6 ++-- src/services/ProtectedBranches.js | 23 +++++-------- src/services/Repositories.js | 7 ++-- src/services/RepositoryFiles.js | 42 +++++++++-------------- src/services/Runners.js | 4 +-- src/services/Services.js | 13 ++----- src/services/SystemHooks.js | 22 ++++-------- src/services/Tags.js | 4 +-- src/services/Triggers.js | 4 +-- src/services/UserEmails.js | 6 ++-- src/services/UserGPGKeys.js | 8 ++--- src/services/UserKeys.js | 4 +-- src/services/Users.js | 4 +-- src/templates/ResourceAccessRequests.js | 23 ++++--------- src/templates/ResourceCustomAttributes.js | 23 ++++--------- src/templates/ResourceMembers.js | 22 ++++-------- src/templates/ResourceMilestones.js | 5 +-- src/templates/ResourceNotes.js | 28 ++++++++++++--- 31 files changed, 145 insertions(+), 247 deletions(-) diff --git a/src/index.js b/src/index.js index 795ae6e5..521a848d 100644 --- a/src/index.js +++ b/src/index.js @@ -26,13 +26,7 @@ export const GroupNamespace = init({ }); // Users -const { - Users, - UserEmails, - UserImpersonationTokens, - UserKeys, - UserGPGKeys, -} = APIServices; +const { Users, UserEmails, UserImpersonationTokens, UserKeys, UserGPGKeys } = APIServices; export const UserNamespace = init({ Users, diff --git a/src/infrastructure/Namespace.js b/src/infrastructure/Namespace.js index 05d69d87..2c2ba4dc 100644 --- a/src/infrastructure/Namespace.js +++ b/src/infrastructure/Namespace.js @@ -10,6 +10,4 @@ function init(...services) { }; } -export { - init, -}; +export { init }; diff --git a/src/infrastructure/RequestHelper.js b/src/infrastructure/RequestHelper.js index c0fe6271..01210725 100644 --- a/src/infrastructure/RequestHelper.js +++ b/src/infrastructure/RequestHelper.js @@ -1,13 +1,11 @@ import Request from 'request-promise'; import Humps from 'humps'; -function defaultRequest(url, endpoint, { - headers, - body, - qs, - formData, - resolveWithFullResponse = false, -}) { +function defaultRequest( + url, + endpoint, + { headers, body, qs, formData, resolveWithFullResponse = false }, +) { const params = { url: `${url}${endpoint}`, headers, diff --git a/src/services/Branches.js b/src/services/Branches.js index cddc4cdb..f0ba0f07 100644 --- a/src/services/Branches.js +++ b/src/services/Branches.js @@ -1,7 +1,7 @@ import { BaseService, RequestHelper } from '../infrastructure'; class Branches extends BaseService { - all(projectId, options = {}) { + all(projectId, options) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/repository/branches`, options); @@ -16,7 +16,7 @@ class Branches extends BaseService { }); } - protect(projectId, branchName, options = {}) { + protect(projectId, branchName, options) { const pId = encodeURIComponent(projectId); return RequestHelper.put( @@ -29,28 +29,19 @@ class Branches extends BaseService { remove(projectId, branchName) { const pId = encodeURIComponent(projectId); - return RequestHelper.delete( - this, - `projects/${pId}/repository/branches/${branchName}`, - ); + return RequestHelper.delete(this, `projects/${pId}/repository/branches/${branchName}`); } show(projectId, branchName) { const pId = encodeURIComponent(projectId); - return RequestHelper.get( - this, - `projects/${pId}/repository/branches/${branchName}`, - ); + return RequestHelper.get(this, `projects/${pId}/repository/branches/${branchName}`); } unprotect(projectId, branchName) { const pId = encodeURIComponent(projectId); - return RequestHelper.put( - this, - `projects/${pId}/repository/branches/${branchName}/unprotect`, - ); + return RequestHelper.put(this, `projects/${pId}/repository/branches/${branchName}/unprotect`); } } diff --git a/src/services/Commits.js b/src/services/Commits.js index 3bdc66dd..f7b2d7be 100644 --- a/src/services/Commits.js +++ b/src/services/Commits.js @@ -1,42 +1,32 @@ import { BaseService, RequestHelper } from '../infrastructure'; class Commits extends BaseService { - all(projectId, options = {}) { + all(projectId, options) { const pId = encodeURIComponent(projectId); - return RequestHelper.get( - this, - `projects/${pId}/repository/commits`, - options, - ); + return RequestHelper.get(this, `projects/${pId}/repository/commits`, options); } - allComments(projectId, sha) { + comments(projectId, sha) { const pId = encodeURIComponent(projectId); - return RequestHelper.get( - this, - `projects/${pId}/repository/commits/${sha}/comments`, - ); + return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}/comments`); } - createComment(projectId, sha, note, options = {}) { + createComment(projectId, sha, note, options) { const pId = encodeURIComponent(projectId); return RequestHelper.post( this, `projects/${pId}/repository/commits/${sha}/comments`, - Object.assign({ note }, options), + { note, ...options }, ); } diff(projectId, sha) { const pId = encodeURIComponent(projectId); - return RequestHelper.get( - this, - `projects/${pId}/repository/commits/${sha}/diff`, - ); + return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}/diff`); } show(projectId, sha) { @@ -45,14 +35,10 @@ class Commits extends BaseService { return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}`); } - statuses(projectId, sha, options = {}) { + statuses(projectId, sha, options) { const pId = encodeURIComponent(projectId); - return RequestHelper.get( - this, - `projects/${pId}/repository/commits/${sha}/statuses`, - options, - ); + return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}/statuses`, options); } } diff --git a/src/services/DeployKeys.js b/src/services/DeployKeys.js index 63b85797..4236d2eb 100644 --- a/src/services/DeployKeys.js +++ b/src/services/DeployKeys.js @@ -1,7 +1,7 @@ import { BaseService, RequestHelper } from '../infrastructure'; class DeployKeys extends BaseService { - add(projectId, options = {}) { + add(projectId, options) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/deploy_keys`, options); diff --git a/src/services/Environments.js b/src/services/Environments.js index 953f6ebe..16236b37 100644 --- a/src/services/Environments.js +++ b/src/services/Environments.js @@ -1,7 +1,7 @@ import { BaseService, RequestHelper } from '../infrastructure'; class Environments extends BaseService { - all(projectId, options = {}) { + all(projectId, options) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/environments`, options); diff --git a/src/services/GroupProjects.js b/src/services/GroupProjects.js index f31ca01c..cf85ae94 100644 --- a/src/services/GroupProjects.js +++ b/src/services/GroupProjects.js @@ -1,7 +1,7 @@ import { BaseService, RequestHelper } from '../infrastructure'; class GroupProjects extends BaseService { - all(groupId, options = {}) { + all(groupId, options) { const gId = encodeURIComponent(groupId); return RequestHelper.get(this, `groups/${gId}/projects`, options); diff --git a/src/services/Issues.js b/src/services/Issues.js index 01fc405d..691bc50e 100644 --- a/src/services/Issues.js +++ b/src/services/Issues.js @@ -1,23 +1,19 @@ import { BaseService, RequestHelper } from '../infrastructure'; class Issues extends BaseService { - all(projectId, options = {}) { - const pId = encodeURIComponent(projectId); + all(projectId, options) { + const url = projectId ? `projects/${encodeURIComponent(projectId)}/issues` : 'issues'; - if (projectId) { - return RequestHelper.get(this, `projects/${pId}/issues`, options); - } - - return RequestHelper.get(this, 'issues', options); + return RequestHelper.get(this, url, options); } - create(projectId, options = {}) { + create(projectId, options) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/issues`, options); } - edit(projectId, issueId, options = {}) { + edit(projectId, issueId, options) { const [pId, iId] = [projectId, issueId].map(encodeURIComponent); return RequestHelper.put(this, `projects/${pId}/issues/${iId}`, options); @@ -30,10 +26,11 @@ class Issues extends BaseService { return RequestHelper.post( this, `projects/${pId}/issues/${iId}/links`, - Object.assign( - { target_project_id: targetpId, target_issue_id: targetIId }, - options, - ), + { + targetProjectId: targetpId, + targetIssueId: targetIId, + ...options, + }, ); } @@ -49,7 +46,7 @@ class Issues extends BaseService { return RequestHelper.get(this, `projects/${pId}/issues/${iId}`); } - subscribe(projectId, issueId, options = {}) { + subscribe(projectId, issueId, options) { const [pId, iId] = [projectId, issueId].map(encodeURIComponent); return RequestHelper.post( diff --git a/src/services/Labels.js b/src/services/Labels.js index ddcc0678..8a168901 100644 --- a/src/services/Labels.js +++ b/src/services/Labels.js @@ -19,16 +19,14 @@ class Labels extends BaseService { return RequestHelper.put( this, `projects/${pId}/labels`, - Object.assign({ name: labelName }, options), + { name: labelName, ...options }, ); } remove(projectId, labelName) { const pId = encodeURIComponent(projectId); - return RequestHelper.delete(this, `projects/${pId}/labels`, { - name: labelName, - }); + return RequestHelper.delete(this, `projects/${pId}/labels`, { name: labelName }); } subscribe(projectId, labelId, options = {}) { diff --git a/src/services/MergeRequests.js b/src/services/MergeRequests.js index 13b56656..ae9c31bb 100644 --- a/src/services/MergeRequests.js +++ b/src/services/MergeRequests.js @@ -12,13 +12,9 @@ class MergeRequests extends BaseService { } all(projectId, options = {}) { - const pId = encodeURIComponent(projectId); + const url = projectId ? `projects/${encodeURIComponent(projectId)}/merge_requests` : 'merge_requests'; - if (projectId) { - return RequestHelper.get(this, `projects/${pId}/merge_requests`, options); - } - - return RequestHelper.get(this, 'merge_requests', options); + return RequestHelper.get(this, url, options); } cancelOnPipelineSucess(projectId, mergerequestId) { @@ -63,15 +59,13 @@ class MergeRequests extends BaseService { return RequestHelper.post( this, `projects/${pId}/merge_requests`, - Object.assign( - { - id: pId, - source_branch: sourceBranch, - target_branch: targetBranch, - title, - }, - options, - ), + { + id: pId, + source_branch: sourceBranch, + target_branch: targetBranch, + title, + ...options, + }, ); } diff --git a/src/services/ProjectHooks.js b/src/services/ProjectHooks.js index 8586c244..de70d614 100644 --- a/src/services/ProjectHooks.js +++ b/src/services/ProjectHooks.js @@ -19,7 +19,7 @@ class ProjectHooks extends BaseService { return RequestHelper.post( this, `projects/${pId}/hooks`, - Object.assign({ url }, options), + { url, ...options }, ); } @@ -29,7 +29,7 @@ class ProjectHooks extends BaseService { return RequestHelper.put( this, `projects/${pId}/hooks/${hId}`, - Object.assign({ url }, options), + { url, ...options }, ); } diff --git a/src/services/ProjectRunners.js b/src/services/ProjectRunners.js index 591399b4..27640456 100644 --- a/src/services/ProjectRunners.js +++ b/src/services/ProjectRunners.js @@ -10,9 +10,7 @@ class ProjectRunners extends BaseService { enable(projectId, runnerId) { const [pId, rId] = [projectId, runnerId].map(encodeURIComponent); - return RequestHelper.post(this, `projects/${pId}/runners`, { - runner_id: rId, - }); + return RequestHelper.post(this, `projects/${pId}/runners`, { runnerId: rId }); } disable(projectId, runnerId) { diff --git a/src/services/Projects.js b/src/services/Projects.js index 1496210a..66f4d1d2 100644 --- a/src/services/Projects.js +++ b/src/services/Projects.js @@ -55,9 +55,7 @@ class Projects extends BaseService { if (!groupId || !groupAccess) throw new Error('Missing required arguments'); - Object.assign(options, { groupId, groupAccess }); - - return RequestHelper.post(this, `projects/${pId}/share`, options); + return RequestHelper.post(this, `projects/${pId}/share`, { groupId, groupAccess, ...options }); } show(projectId) { @@ -75,7 +73,7 @@ class Projects extends BaseService { statuses(projectId, sha, state, options) { const pId = encodeURIComponent(projectId); - return RequestHelper.post(this, `projects/${pId}/statuses/${sha}`, Object.assign(options, { state })); + return RequestHelper.post(this, `projects/${pId}/statuses/${sha}`, { state, ...options }); } unshare(projectId, groupId) { diff --git a/src/services/ProtectedBranches.js b/src/services/ProtectedBranches.js index 73034d9e..52dcc5dc 100644 --- a/src/services/ProtectedBranches.js +++ b/src/services/ProtectedBranches.js @@ -1,38 +1,31 @@ import { BaseService, RequestHelper } from '../infrastructure'; class ProtectedBranches extends BaseService { - all(projectId, options = {}) { + all(projectId, options) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/protected_branches`, options); } - protect(projectId, branchName, options = {}) { + protect(projectId, branchName, options) { const pId = encodeURIComponent(projectId); - return RequestHelper.post( - this, - `projects/${pId}/protected_branches`, - Object.assign(options, { name: branchName }), - ); + return RequestHelper.post(this, `projects/${pId}/protected_branches`, { + name: branchName, + ...options, + }); } show(projectId, branchName) { const pId = encodeURIComponent(projectId); - return RequestHelper.get( - this, - `projects/${pId}/protected_branches/${branchName}`, - ); + return RequestHelper.get(this, `projects/${pId}/protected_branches/${branchName}`); } unprotect(projectId, branchName) { const pId = encodeURIComponent(projectId); - return RequestHelper.delete( - this, - `projects/${pId}/protected_branches/${branchName}`, - ); + return RequestHelper.delete(this, `projects/${pId}/protected_branches/${branchName}`); } } diff --git a/src/services/Repositories.js b/src/services/Repositories.js index 07d0e528..0f6f692d 100644 --- a/src/services/Repositories.js +++ b/src/services/Repositories.js @@ -33,13 +33,10 @@ class Repositories extends BaseService { showBlobRaw(projectId, sha) { const pId = encodeURIComponent(projectId); - return RequestHelper.get( - this, - `projects/${pId}/repository/blobs/${sha}/raw`, - ); + return RequestHelper.get(this, `projects/${pId}/repository/blobs/${sha}/raw`); } - tree(projectId, options = {}) { + tree(projectId, options) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/repository/tree`, options); diff --git a/src/services/RepositoryFiles.js b/src/services/RepositoryFiles.js index 45e74523..2623932d 100644 --- a/src/services/RepositoryFiles.js +++ b/src/services/RepositoryFiles.js @@ -1,37 +1,31 @@ import { BaseService, RequestHelper } from '../infrastructure'; class RepositoryFiles extends BaseService { - create(projectId, filePath, branch, options = {}) { + create(projectId, filePath, branch, options) { const [pId, path] = [projectId, filePath].map(encodeURIComponent); - const extendedOptions = Object.assign({ branch }, options); - return RequestHelper.post( - this, - `projects/${pId}/repository/files/${path}`, - extendedOptions, - ); + return RequestHelper.post(this, `projects/${pId}/repository/files/${path}`, { + branch, + ...options, + }); } - edit(projectId, filePath, branch, options = {}) { + edit(projectId, filePath, branch, options) { const [pId, path] = [projectId, filePath].map(encodeURIComponent); - const extendedOptions = Object.assign({ branch }, options); - return RequestHelper.put( - this, - `projects/${pId}/repository/files/${path}`, - extendedOptions, - ); + return RequestHelper.put(this, `projects/${pId}/repository/files/${path}`, { + branch, + ...options, + }); } - remove(projectId, filePath, branch, options = {}) { + remove(projectId, filePath, branch, options) { const [pId, path] = [projectId, filePath].map(encodeURIComponent); - const extendedOptions = Object.assign({ branch }, options); - return RequestHelper.delete( - this, - `projects/${pId}/repository/files/${path}`, - extendedOptions, - ); + return RequestHelper.delete(this, `projects/${pId}/repository/files/${path}`, { + branch, + ...options, + }); } show(projectId, filePath, ref) { @@ -45,11 +39,7 @@ class RepositoryFiles extends BaseService { showRaw(projectId, filePath, ref) { const [pId, path] = [projectId, filePath].map(encodeURIComponent); - return RequestHelper.get( - this, - `projects/${pId}/repository/files/${path}/raw`, - { ref }, - ); + return RequestHelper.get(this, `projects/${pId}/repository/files/${path}/raw`, { ref }); } } diff --git a/src/services/Runners.js b/src/services/Runners.js index c0d772a4..a3dc687a 100644 --- a/src/services/Runners.js +++ b/src/services/Runners.js @@ -1,11 +1,11 @@ import { BaseService, RequestHelper } from '../infrastructure'; class Runners extends BaseService { - all(options = {}) { + all(options) { return RequestHelper.get(this, 'runners/all', options); } - allOwned(options = {}) { + allOwned(options) { return RequestHelper.get(this, 'runners', options); } diff --git a/src/services/Services.js b/src/services/Services.js index f5a48060..c017647b 100644 --- a/src/services/Services.js +++ b/src/services/Services.js @@ -1,23 +1,16 @@ import { BaseService, RequestHelper } from '../infrastructure'; class Services extends BaseService { - edit(projectId, serviceName, options = {}) { + edit(projectId, serviceName, options) { const pId = encodeURIComponent(projectId); - return RequestHelper.put( - this, - `projects/${pId}/services/${serviceName}`, - options, - ); + return RequestHelper.put(this, `projects/${pId}/services/${serviceName}`, options); } remove(projectId, serviceName) { const pId = encodeURIComponent(projectId); - return RequestHelper.delete( - this, - `projects/${pId}/services/${serviceName}`, - ); + return RequestHelper.delete(this, `projects/${pId}/services/${serviceName}`); } show(projectId, serviceName) { diff --git a/src/services/SystemHooks.js b/src/services/SystemHooks.js index c453d88c..3eac7246 100644 --- a/src/services/SystemHooks.js +++ b/src/services/SystemHooks.js @@ -1,10 +1,8 @@ import { BaseService, RequestHelper } from '../infrastructure'; class SystemHooks extends BaseService { - all(options = {}) { - const pId = encodeURIComponent(projectId); - - return RequestHelper.get(this, `hooks`, options); + all(options) { + return RequestHelper.get(this, 'hooks', options); } show(hookId) { @@ -13,22 +11,14 @@ class SystemHooks extends BaseService { return RequestHelper.get(this, `hooks/${hId}`); } - add(url, options = {}) { - return RequestHelper.post( - this, - `hooks`, - Object.assign({ url }, options), - ); + add(url, options) { + return RequestHelper.post(this, 'hooks', { url, ...options }); } - edit(hookId, url, options = {}) { + edit(hookId, url, options) { const hId = encodeURIComponent(hookId); - return RequestHelper.put( - this, - `hooks/${hId}`, - Object.assign({ url }, options), - ); + return RequestHelper.put(this, `hooks/${hId}`, { url, ...options }); } remove(projectId, hookId) { diff --git a/src/services/Tags.js b/src/services/Tags.js index 09568fcc..252a217c 100644 --- a/src/services/Tags.js +++ b/src/services/Tags.js @@ -1,13 +1,13 @@ import { BaseService, RequestHelper } from '../infrastructure'; class Tags extends BaseService { - all(projectId, options = {}) { + all(projectId, options) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/repository/tags`, options); } - create(projectId, options = {}) { + create(projectId, options) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/repository/tags`, options); diff --git a/src/services/Triggers.js b/src/services/Triggers.js index 5ae462ca..207c29b9 100644 --- a/src/services/Triggers.js +++ b/src/services/Triggers.js @@ -1,7 +1,7 @@ import { BaseService, RequestHelper } from '../infrastructure'; class Triggers extends BaseService { - add(projectId, options = {}) { + add(projectId, options) { const pId = encodeURIComponent(projectId); return RequestHelper.post(this, `projects/${pId}/triggers`, options); @@ -13,7 +13,7 @@ class Triggers extends BaseService { return RequestHelper.get(this, `projects/${pId}/triggers`); } - edit(projectId, triggerId, options = {}) { + edit(projectId, triggerId, options) { const [pId, tId] = [projectId, triggerId].map(encodeURIComponent); return RequestHelper.put(this, `projects/${pId}/triggers/${tId}`, options); diff --git a/src/services/UserEmails.js b/src/services/UserEmails.js index d3649a7c..40600a88 100644 --- a/src/services/UserEmails.js +++ b/src/services/UserEmails.js @@ -1,13 +1,13 @@ import { BaseService, RequestHelper } from '../infrastructure'; class UserEmails extends BaseService { - all({ userId }) { + all({ userId } = {}) { const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; return RequestHelper.get(this, url); } - add(email, { userId }) { + add(email, { userId } = {}) { const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; return RequestHelper.post(this, url, { @@ -21,7 +21,7 @@ class UserEmails extends BaseService { return RequestHelper.get(this, `users/emails/${eId}`); } - remove(emailId, { userId }) { + remove(emailId, { userId } = {}) { const eId = encodeURIComponent(emailId); const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; diff --git a/src/services/UserGPGKeys.js b/src/services/UserGPGKeys.js index 2c9b869c..e868f471 100644 --- a/src/services/UserGPGKeys.js +++ b/src/services/UserGPGKeys.js @@ -1,13 +1,13 @@ import { BaseService, RequestHelper } from '../infrastructure'; class UserGPGKeys extends BaseService { - all({ userId }) { + all({ userId } = {}) { const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; return RequestHelper.get(this, url); } - add(title, key, { userId }) { + add(title, key, { userId } = {}) { const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; return RequestHelper.post(this, url, { @@ -16,14 +16,14 @@ class UserGPGKeys extends BaseService { }); } - show(keyId, { userId }) { + show(keyId, { userId } = {}) { const kId = encodeURIComponent(keyId); const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; return RequestHelper.get(this, `${url}/${kId}`); } - remove(keyId, { userId }) { + remove(keyId, { userId } = {}) { const kId = encodeURIComponent(keyId); const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; diff --git a/src/services/UserKeys.js b/src/services/UserKeys.js index cb7bf52d..af7c729c 100644 --- a/src/services/UserKeys.js +++ b/src/services/UserKeys.js @@ -7,7 +7,7 @@ class UserKeys extends BaseService { return RequestHelper.get(this, url); } - create(title, key, { userId }) { + create(title, key, { userId } = {}) { const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'; return RequestHelper.post(this, url, { @@ -22,7 +22,7 @@ class UserKeys extends BaseService { return RequestHelper.get(this, `users/keys/${kId}`); } - remove(keyId, { userId }) { + remove(keyId, { userId } = {}) { const kId = encodeURIComponent(keyId); const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'; diff --git a/src/services/Users.js b/src/services/Users.js index 0c496d2b..86375892 100644 --- a/src/services/Users.js +++ b/src/services/Users.js @@ -2,7 +2,7 @@ import { BaseService, RequestHelper } from '../infrastructure'; import { validateEventOptions } from './Events'; class Users extends BaseService { - all(options = {}) { + all(options) { return RequestHelper.get(this, 'users', options); } @@ -16,7 +16,7 @@ class Users extends BaseService { return RequestHelper.post(this, `users/${uId}/block`); } - create(options = {}) { + create(options) { return RequestHelper.post(this, 'users', options); } diff --git a/src/templates/ResourceAccessRequests.js b/src/templates/ResourceAccessRequests.js index 33454b21..7f3732f3 100644 --- a/src/templates/ResourceAccessRequests.js +++ b/src/templates/ResourceAccessRequests.js @@ -19,38 +19,27 @@ class ResourceAccessRequests extends BaseService { all(resourceId) { const rId = encodeURIComponent(resourceId); - return RequestHelper.get( - this, - `${this.resourceType}/${rId}/access_requests`, - ); + return RequestHelper.get(this, `${this.resourceType}/${rId}/access_requests`); } request(resourceId) { const rId = encodeURIComponent(resourceId); - return RequestHelper.post( - this, - `${this.resourceType}/${rId}/access_requests`, - ); + return RequestHelper.post(this, `${this.resourceType}/${rId}/access_requests`); } approve(resourceId, userId, { accessLevel = 30 }) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); - return RequestHelper.post( - this, - `${this.resourceType}/${rId}/access_requests/${uId}/approve`, - { accessLevel }, - ); + return RequestHelper.post(this, `${this.resourceType}/${rId}/access_requests/${uId}/approve`, { + accessLevel, + }); } deny(resourceId, userId) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); - return RequestHelper.delete( - this, - `${this.resourceType}/${rId}/access_requests/${uId}/approve`, - ); + return RequestHelper.delete(this, `${this.resourceType}/${rId}/access_requests/${uId}/approve`); } } diff --git a/src/templates/ResourceCustomAttributes.js b/src/templates/ResourceCustomAttributes.js index 48b4ab64..136673df 100644 --- a/src/templates/ResourceCustomAttributes.js +++ b/src/templates/ResourceCustomAttributes.js @@ -10,38 +10,27 @@ class ResourceCustomAttributes extends BaseService { all(resourceId) { const rId = encodeURIComponent(resourceId); - return RequestHelper.get( - this, - `${this.resourceType}/${rId}/custom_attributes`, - ); + return RequestHelper.get(this, `${this.resourceType}/${rId}/custom_attributes`); } set(resourceId, customAttributeId, value) { const [rId, cId] = [resourceId, customAttributeId].map(encodeURIComponent); - return RequestHelper.put( - this, - `${this.resourceType}/${rId}/custom_attributes/${cId}`, - { value }, - ); + return RequestHelper.put(this, `${this.resourceType}/${rId}/custom_attributes/${cId}`, { + value, + }); } remove(resourceId, customAttributeId) { const [rId, cId] = [resourceId, customAttributeId].map(encodeURIComponent); - return RequestHelper.delete( - this, - `${this.resourceType}/${rId}/custom_attributes/${cId}`, - ); + return RequestHelper.delete(this, `${this.resourceType}/${rId}/custom_attributes/${cId}`); } show(resourceId, customAttributeId) { const [rId, cId] = [resourceId, customAttributeId].map(encodeURIComponent); - return RequestHelper.get( - this, - `${this.resourceType}/${rId}/custom_attributes/${cId}`, - ); + return RequestHelper.get(this, `${this.resourceType}/${rId}/custom_attributes/${cId}`); } } diff --git a/src/templates/ResourceMembers.js b/src/templates/ResourceMembers.js index 4185fe37..b66dd02c 100644 --- a/src/templates/ResourceMembers.js +++ b/src/templates/ResourceMembers.js @@ -26,32 +26,22 @@ class ResourceMembers extends BaseService { edit(resourceId, userId, accessLevel, options) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); - return RequestHelper.put( - this, - `${this.resourceType}/${rId}/members/${uId}`, - { - access_level: parseInt(accessLevel, 10), - ...options, - }, - ); + return RequestHelper.put(this, `${this.resourceType}/${rId}/members/${uId}`, { + access_level: parseInt(accessLevel, 10), + ...options, + }); } show(resourceId, userId) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); - return RequestHelper.get( - this, - `${this.resourceType}/${rId}/members/${uId}`, - ); + return RequestHelper.get(this, `${this.resourceType}/${rId}/members/${uId}`); } remove(resourceId, userId) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); - return RequestHelper.delete( - this, - `${this.resourceType}/${rId}/members/${uId}`, - ); + return RequestHelper.delete(this, `${this.resourceType}/${rId}/members/${uId}`); } } diff --git a/src/templates/ResourceMilestones.js b/src/templates/ResourceMilestones.js index dda70927..7b0ee6e2 100644 --- a/src/templates/ResourceMilestones.js +++ b/src/templates/ResourceMilestones.js @@ -28,10 +28,7 @@ class ResourceMilestones extends BaseService { issues(resourceId, milestoneId) { const [rId, mId] = [resourceId, milestoneId].map(encodeURIComponent); - return RequestHelper.get( - this, - `${this.resourceType}/${rId}/milestones/${mId}/issues`, - ); + return RequestHelper.get(this, `${this.resourceType}/${rId}/milestones/${mId}/issues`); } mergeRequests(resourceId, milestoneId) { diff --git a/src/templates/ResourceNotes.js b/src/templates/ResourceNotes.js index 293fac4a..d88161ee 100644 --- a/src/templates/ResourceNotes.js +++ b/src/templates/ResourceNotes.js @@ -11,7 +11,11 @@ class ResourceNotes extends BaseService { all(resourceId, resource2Id, options) { const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); - return RequestHelper.get(this, `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes`, options); + return RequestHelper.get( + this, + `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes`, + options, + ); } create(resourceId, resource2Id, options) { @@ -19,7 +23,11 @@ class ResourceNotes extends BaseService { const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); - return RequestHelper.post(this, `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes`, options); + return RequestHelper.post( + this, + `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes`, + options, + ); } edit(resourceId, resource2Id, noteId, options) { @@ -27,19 +35,29 @@ class ResourceNotes extends BaseService { const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent); - return RequestHelper.put(this, `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, options); + return RequestHelper.put( + this, + `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, + options, + ); } remove(resourceId, resource2Id, noteId) { const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent); - return RequestHelper.delete(this, `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`); + return RequestHelper.delete( + this, + `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, + ); } show(resourceId, resource2Id, noteId) { const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent); - return RequestHelper.get(this, `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`); + return RequestHelper.get( + this, + `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, + ); } } From 480e3673aa03563a2750a7e9a32f205839230f58 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Mon, 19 Mar 2018 14:41:10 -0400 Subject: [PATCH 15/90] Merging some resources and updating readme --- README.md | 30 ++++++- src/index.js | 2 - src/services/Commits.js | 9 +- src/services/Issues.js | 27 ++---- src/services/MergeRequestVersions.js | 23 ------ src/services/MergeRequests.js | 118 ++++++++++----------------- src/services/ProjectHooks.js | 18 ++-- src/services/ProjectRunners.js | 23 ------ src/services/Runners.js | 30 +++++-- src/services/index.js | 2 +- 10 files changed, 113 insertions(+), 169 deletions(-) delete mode 100644 src/services/MergeRequestVersions.js delete mode 100644 src/services/ProjectRunners.js diff --git a/README.md b/README.md index 70ba472e..f0fe9213 100644 --- a/README.md +++ b/README.md @@ -190,6 +190,7 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod - Added support for UserGPGKeys - Added support for UserImpersonationTokens - Added support for SystemHooks +- Added support for Events. This is also exposed in Projects and Users under the events function - Fixed the missing options parameter for the ProjectMembers and GroupMemebers APIs in PR [#45] thanks to [Stefan Hall](https://github.com/Marethyu1) - Supporting both camelCase and snake_case option properties: `projects.all({perPage:5}) === projects.all({per_page: 5})` @@ -197,8 +198,35 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod ### Breaking Changes between 2.2.4 and 3.0.0 +- Instantiation of the API must use the new operator consistently. See usage above. - All services being exported are not capitalized for clarity that they are themselves api's and not properties. ie. Gitlab.Projects vs Gitlab.projects -- +- All subservices (services exposed as properties of other services) have been moved out into their own service +``` +ProjectRepository -> Repositories, Tags, Commits, Branches and RepositoryFiles +Users -> Users, UserKeys, UserGPGKeys, UserCustomAttributes, UserVariables + +``` + +- Many services have been renamed: +``` +ProjectProtectedBranches -> ProtectedBranches +ProjectDeployKeys -> DeployKeys +ProjectEnvironments -> Enviroments +ProjectJobs -> Jobs +ProjectLabels -> Labels +ProjectPipelines -> Pipelines +ProjectRepository -> Repositories +ProjectServices -> Services +ProjectTriggers -> Triggers +``` + +- Some services were merged: +``` +Issues = ProjectIssues + Issues. ProjectId is optional for all() +MergeRequests = ProjectMergeRequests + MergeRequests + MergeRequestsChanges + MergeRequestsCommits + MergeRequestVersions. ProjectId is optional for all() +Runners = ProjectRunners + Runners. ProjectId is optional for all() + +``` [2.2.4](https://github.com/jdalrymple/node-gitlab-api/5d7c031ca2b833b28633647195560379d88ba5b3) (2018-2-12) ------------------ diff --git a/src/index.js b/src/index.js index 521a848d..40b91b62 100644 --- a/src/index.js +++ b/src/index.js @@ -47,7 +47,6 @@ const { Labels, MergeRequests, MergeRequestNotes, - MergeRequestVersions, Pipelines, Projects, ProjectAccessRequests, @@ -76,7 +75,6 @@ export const ProjectNamespace = init({ Labels, MergeRequests, MergeRequestNotes, - MergeRequestVersions, Pipelines, Projects, ProjectAccessRequests, diff --git a/src/services/Commits.js b/src/services/Commits.js index f7b2d7be..61b0cab8 100644 --- a/src/services/Commits.js +++ b/src/services/Commits.js @@ -16,11 +16,10 @@ class Commits extends BaseService { createComment(projectId, sha, note, options) { const pId = encodeURIComponent(projectId); - return RequestHelper.post( - this, - `projects/${pId}/repository/commits/${sha}/comments`, - { note, ...options }, - ); + return RequestHelper.post(this, `projects/${pId}/repository/commits/${sha}/comments`, { + note, + ...options, + }); } diff(projectId, sha) { diff --git a/src/services/Issues.js b/src/services/Issues.js index 691bc50e..09fe1249 100644 --- a/src/services/Issues.js +++ b/src/services/Issues.js @@ -1,7 +1,7 @@ import { BaseService, RequestHelper } from '../infrastructure'; class Issues extends BaseService { - all(projectId, options) { + all({ projectId, ...options }) { const url = projectId ? `projects/${encodeURIComponent(projectId)}/issues` : 'issues'; return RequestHelper.get(this, url, options); @@ -23,15 +23,11 @@ class Issues extends BaseService { const [pId, iId] = [projectId, issueIId].map(encodeURIComponent); const [targetpId, targetIId] = [targetProjectId, targetIssueId].map(encodeURIComponent); - return RequestHelper.post( - this, - `projects/${pId}/issues/${iId}/links`, - { - targetProjectId: targetpId, - targetIssueId: targetIId, - ...options, - }, - ); + return RequestHelper.post(this, `projects/${pId}/issues/${iId}/links`, { + targetProjectId: targetpId, + targetIssueId: targetIId, + ...options, + }); } remove(projectId, issueId) { @@ -49,20 +45,13 @@ class Issues extends BaseService { subscribe(projectId, issueId, options) { const [pId, iId] = [projectId, issueId].map(encodeURIComponent); - return RequestHelper.post( - this, - `projects/${pId}/issues/${iId}/subscribe`, - options, - ); + return RequestHelper.post(this, `projects/${pId}/issues/${iId}/subscribe`, options); } unsubscribe(projectId, issueId) { const [pId, iId] = [projectId, issueId].map(encodeURIComponent); - return RequestHelper.delete( - this, - `projects/${pId}/issues/${iId}/unsubscribe`, - ); + return RequestHelper.delete(this, `projects/${pId}/issues/${iId}/unsubscribe`); } } diff --git a/src/services/MergeRequestVersions.js b/src/services/MergeRequestVersions.js deleted file mode 100644 index 90083381..00000000 --- a/src/services/MergeRequestVersions.js +++ /dev/null @@ -1,23 +0,0 @@ -import { BaseService, RequestHelper } from '../infrastructure'; - -class MergeRequestVersions extends BaseService { - all(projectId, mergerequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - - return RequestHelper.get( - this, - `projects/${pId}/merge_requests/${mId}/versions`, - ); - } - - show(projectId, mergerequestId, versionId) { - const [pId, mId, vId] = [projectId, mergerequestId, versionId].map(encodeURIComponent); - - return RequestHelper.get( - this, - `projects/${pId}/merge_requests/${mId}/versions/${vId}`, - ); - } -} - -export default MergeRequestVersions; diff --git a/src/services/MergeRequests.js b/src/services/MergeRequests.js index ae9c31bb..6435b3a7 100644 --- a/src/services/MergeRequests.js +++ b/src/services/MergeRequests.js @@ -1,18 +1,16 @@ import { BaseService, RequestHelper } from '../infrastructure'; class MergeRequests extends BaseService { - accept(projectId, mergerequestId, options = {}) { + accept(projectId, mergerequestId, options) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - return RequestHelper.put( - this, - `projects/${pId}/merge_requests/${mId}/merge`, - options, - ); + return RequestHelper.put(this, `projects/${pId}/merge_requests/${mId}/merge`, options); } - all(projectId, options = {}) { - const url = projectId ? `projects/${encodeURIComponent(projectId)}/merge_requests` : 'merge_requests'; + all({ projectId, ...options } = {}) { + const url = projectId + ? `projects/${encodeURIComponent(projectId)}/merge_requests` + : 'merge_requests'; return RequestHelper.get(this, url, options); } @@ -29,63 +27,43 @@ class MergeRequests extends BaseService { changes(projectId, mergerequestId) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - return RequestHelper.get( - this, - `projects/${pId}/merge_requests/${mId}/changes`, - ); + return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}/changes`); } closesIssues(projectId, mergerequestId) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - return RequestHelper.get( - this, - `projects/${pId}/merge_requests/${mId}/closes_issues`, - ); + return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}/closes_issues`); } commits(projectId, mergerequestId) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - return RequestHelper.get( - this, - `projects/${pId}/merge_requests/${mId}/commits`, - ); + return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}/commits`); } - create(projectId, sourceBranch, targetBranch, title, options = {}) { + create(projectId, sourceBranch, targetBranch, title, options) { const pId = encodeURIComponent(projectId); - return RequestHelper.post( - this, - `projects/${pId}/merge_requests`, - { - id: pId, - source_branch: sourceBranch, - target_branch: targetBranch, - title, - ...options, - }, - ); + return RequestHelper.post(this, `projects/${pId}/merge_requests`, { + id: pId, + sourceBranch, + targetBranch, + title, + ...options, + }); } createTodo(projectId, mergerequestId) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - return RequestHelper.post( - this, - `projects/${pId}/merge_requests/${mId}/todo`, - ); + return RequestHelper.post(this, `projects/${pId}/merge_requests/${mId}/todo`); } - edit(projectId, mergerequestId, options = {}) { + edit(projectId, mergerequestId, options) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - return RequestHelper.put( - this, - `projects/${pId}/merge_requests/${mId}`, - options, - ); + return RequestHelper.put(this, `projects/${pId}/merge_requests/${mId}`, options); } remove(projectId, mergerequestId) { @@ -100,70 +78,62 @@ class MergeRequests extends BaseService { return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}`); } - subscribe(projectId, mergerequestId, options = {}) { + subscribe(projectId, mergerequestId, options) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - return RequestHelper.post( - this, - `projects/${pId}/merge_requests/${mId}/subscribe`, - options, - ); + return RequestHelper.post(this, `projects/${pId}/merge_requests/${mId}/subscribe`, options); } resetSpentTime(projectId, mergerequestId) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - return RequestHelper.post( - this, - `projects/${pId}/merge_requests/${mId}/reset_spent_time`, - ); + return RequestHelper.post(this, `projects/${pId}/merge_requests/${mId}/reset_spent_time`); } resetTimeEstimate(projectId, mergerequestId) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - return RequestHelper.post( - this, - `projects/${pId}/merge_requests/${mId}/reset_time_estimate`, - ); + return RequestHelper.post(this, `projects/${pId}/merge_requests/${mId}/reset_time_estimate`); } spentTime(projectId, mergerequestId, duration) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - return RequestHelper.post( - this, - `projects/${pId}/merge_requests/${mId}/add_spent_time`, - { duration }, - ); + return RequestHelper.post(this, `projects/${pId}/merge_requests/${mId}/add_spent_time`, { + duration, + }); } timeEstimate(projectId, mergerequestId, duration) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - return RequestHelper.post( - this, - `projects/${pId}/merge_requests/${mId}/time_estimate`, - { duration }, - ); + return RequestHelper.post(this, `projects/${pId}/merge_requests/${mId}/time_estimate`, { + duration, + }); } timeStats(projectId, mergerequestId) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - return RequestHelper.get( - this, - `projects/${pId}/merge_requests/${mId}/time_stats`, - ); + return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}/time_stats`); + } + + version(projectId, mergerequestId, versionId) { + const [pId, mId, vId] = [projectId, mergerequestId, versionId].map(encodeURIComponent); + + return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}/versions/${vId}`); + } + + versions(projectId, mergerequestId) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}/versions`); } unsubscribe(projectId, mergerequestId) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - return RequestHelper.delete( - this, - `projects/${pId}/merge_requests/${mId}/unsubscribe`, - ); + return RequestHelper.delete(this, `projects/${pId}/merge_requests/${mId}/unsubscribe`); } } diff --git a/src/services/ProjectHooks.js b/src/services/ProjectHooks.js index de70d614..5fe4c5d0 100644 --- a/src/services/ProjectHooks.js +++ b/src/services/ProjectHooks.js @@ -1,7 +1,7 @@ import { BaseService, RequestHelper } from '../infrastructure'; class ProjectHooks extends BaseService { - all(projectId, options = {}) { + all(projectId, options) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/hooks`, options); @@ -13,24 +13,16 @@ class ProjectHooks extends BaseService { return RequestHelper.get(this, `projects/${pId}/hooks/${hId}`); } - add(projectId, url, options = {}) { + add(projectId, url, options) { const pId = encodeURIComponent(projectId); - return RequestHelper.post( - this, - `projects/${pId}/hooks`, - { url, ...options }, - ); + return RequestHelper.post(this, `projects/${pId}/hooks`, { url, ...options }); } - edit(projectId, hookId, url, options = {}) { + edit(projectId, hookId, url, options) { const [pId, hId] = [projectId, hookId].map(encodeURIComponent); - return RequestHelper.put( - this, - `projects/${pId}/hooks/${hId}`, - { url, ...options }, - ); + return RequestHelper.put(this, `projects/${pId}/hooks/${hId}`, { url, ...options }); } remove(projectId, hookId) { diff --git a/src/services/ProjectRunners.js b/src/services/ProjectRunners.js deleted file mode 100644 index 27640456..00000000 --- a/src/services/ProjectRunners.js +++ /dev/null @@ -1,23 +0,0 @@ -import { BaseService, RequestHelper } from '../infrastructure'; - -class ProjectRunners extends BaseService { - all(projectId, options = {}) { - const pId = encodeURIComponent(projectId); - - return RequestHelper.get(this, `projects/${pId}/runners`, options); - } - - enable(projectId, runnerId) { - const [pId, rId] = [projectId, runnerId].map(encodeURIComponent); - - return RequestHelper.post(this, `projects/${pId}/runners`, { runnerId: rId }); - } - - disable(projectId, runnerId) { - const [pId, rId] = [projectId, runnerId].map(encodeURIComponent); - - return RequestHelper.delete(this, `projects/${pId}/runners/${rId}`); - } -} - -export default ProjectRunners; diff --git a/src/services/Runners.js b/src/services/Runners.js index a3dc687a..59ec7220 100644 --- a/src/services/Runners.js +++ b/src/services/Runners.js @@ -1,8 +1,10 @@ import { BaseService, RequestHelper } from '../infrastructure'; class Runners extends BaseService { - all(options) { - return RequestHelper.get(this, 'runners/all', options); + all({ projectId, ...options } = {}) { + const url = projectId ? `projects/${encodeURIComponent(projectId)}/runners` : 'runners/all'; + + return RequestHelper.get(this, url, options); } allOwned(options) { @@ -15,6 +17,24 @@ class Runners extends BaseService { return RequestHelper.put(this, `runners/${rId}`, attributes); } + enable(projectId, runnerId) { + const [pId, rId] = [projectId, runnerId].map(encodeURIComponent); + + return RequestHelper.post(this, `projects/${pId}/runners`, { runnerId: rId }); + } + + disable(projectId, runnerId) { + const [pId, rId] = [projectId, runnerId].map(encodeURIComponent); + + return RequestHelper.delete(this, `projects/${pId}/runners/${rId}`); + } + + jobs(runnerId) { + const rId = encodeURIComponent(runnerId); + + return RequestHelper.get(this, `runners/${rId}/jobs`); + } + remove(runnerId) { const rId = encodeURIComponent(runnerId); @@ -26,12 +46,6 @@ class Runners extends BaseService { return RequestHelper.get(this, `runners/${rId}`); } - - showJobs(runnerId) { - const rId = encodeURIComponent(runnerId); - - return RequestHelper.get(this, `runners/${rId}/jobs`); - } } export default Runners; diff --git a/src/services/index.js b/src/services/index.js index fe7bcc33..fa66b189 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -24,7 +24,6 @@ export Jobs from './Jobs'; export Labels from './Labels'; export MergeRequests from './MergeRequests'; export MergeRequestNotes from './MergeRequestNotes'; -export MergeRequestVersions from './MergeRequestVersions'; export Pipelines from './Pipelines'; export Projects from './Projects'; export ProjectAccessRequests from './ProjectAccessRequests'; @@ -44,3 +43,4 @@ export Triggers from './Triggers'; // General export SystemHooks from './SystemHooks'; +export Events from './Events'; From 8b6312bc1c7345dd571422a514e0ae4772feddfe Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Mon, 19 Mar 2018 14:43:38 -0400 Subject: [PATCH 16/90] More readme updates --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index f0fe9213..bbbc0f57 100644 --- a/README.md +++ b/README.md @@ -194,8 +194,6 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod - Fixed the missing options parameter for the ProjectMembers and GroupMemebers APIs in PR [#45] thanks to [Stefan Hall](https://github.com/Marethyu1) - Supporting both camelCase and snake_case option properties: `projects.all({perPage:5}) === projects.all({per_page: 5})` -...to be continued - ### Breaking Changes between 2.2.4 and 3.0.0 - Instantiation of the API must use the new operator consistently. See usage above. From 2354b9537c7638d01f18393efcb9e30f27940336 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Mon, 19 Mar 2018 14:47:46 -0400 Subject: [PATCH 17/90] More readme updates --- README.md | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/README.md b/README.md index bbbc0f57..35a3295d 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,56 @@ etc.. ``` +Currently there are three Namespaces: +1. ProjectsNamespace which includes: +``` +Branches, +Commits, +DeployKeys, +Environments, +Issues, +Jobs, +Labels, +MergeRequests, +MergeRequestNotes, +Pipelines, +Projects, +ProjectAccessRequests, +ProjectCustomAttributes, +ProjectHooks, +ProjectMembers, +ProjectMilestones, +ProjectSnippets, +ProtectedBranches, +ProjectVariables, +Repositories, +RepositoryFiles, +Runners, +Services, +Tags, +Triggers +``` + +2. UsersNamespace which includes: +``` +Users, +UserEmails, +UserImpersonationTokens, +UserKeys, +UserGPGKeys +``` + +3. GroupsNamespace which includes: +``` +Groups, +GroupAccessRequests, +GroupCustomAttributes, +GroupMembers, +GroupMilestones, +GroupProjects, +GroupVariables +``` + ### Examples Once you have your library instantiated, you can utilize many of the API's functionality: From c2484fa3d7f368a2f8d5a7a725b9122044f8692a Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Mon, 19 Mar 2018 14:53:54 -0400 Subject: [PATCH 18/90] Updating version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 046c411d..3450dd19 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-gitlab-api", - "version": "3.0.0-beta", + "version": "3.0.0-rc.1", "description": "Full NodeJS implementation of the GitLab API. Supports Promises, Async/Await.", "main": "dist/latest/index.js", "engines": { From e5e105bc7dcc7504edc2fdeb70b39fa0141f8405 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Mon, 19 Mar 2018 15:08:34 -0400 Subject: [PATCH 19/90] Adding fixes to the es5 compilation from es5-support-fixes branch --- .babelrc-es5 | 13 +++++++++++++ package-lock.json | 12 +++++++++++- package.json | 5 +++-- 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 .babelrc-es5 diff --git a/.babelrc-es5 b/.babelrc-es5 new file mode 100644 index 00000000..c719e1e2 --- /dev/null +++ b/.babelrc-es5 @@ -0,0 +1,13 @@ +{ + "presets": [ + ["@babel/preset-env", { + "useBuiltIns": false, + }] + ], + "plugins": [ + "@babel/plugin-proposal-export-default-from", + "@babel/plugin-proposal-export-namespace-from", + "@babel/plugin-proposal-object-rest-spread", + "@babel/plugin-transform-runtime" + ] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index cf790ce7..93eeb868 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "node-gitlab-api", - "version": "3.0.0-beta", + "version": "3.0.0-rc.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -746,6 +746,16 @@ } } }, + "@babel/plugin-transform-runtime": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.0.0-beta.42.tgz", + "integrity": "sha512-4LcNdjMvKzCwK/eqfbUiXFAZht8OTx0Gv2Ok42o+zhb8DvNUaYUndgW9AU4Q6nbpxzw2vTWNUXSIRvdGsxpgQQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "7.0.0-beta.42", + "@babel/helper-plugin-utils": "7.0.0-beta.42" + } + }, "@babel/plugin-transform-shorthand-properties": { "version": "7.0.0-beta.42", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0-beta.42.tgz", diff --git a/package.json b/package.json index 3450dd19..6d2b899c 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ }, "scripts": { "build:clean": "rimraf -rf dist && mkdirp -p dist", - "build:es6": "babel src -d dist/latest", - "build:es5": "babel src -d dist/es5 --no-babelrc --presets=@babel/env --plugins=@babel/plugin-proposal-export-default-from,@babel/plugin-proposal-export-namespace-from,@babel/plugin-proposal-object-rest-spread", + "build:es6": "babel src -d dist/latest --config-file=./.babelrc", + "build:es5": "babel src -d dist/es5 --config-file=./.babelrc-es5", "build": "npm run build:clean && npm run build:es6 && npm run build:es5", "prepublishOnly": "npm run build" }, @@ -32,6 +32,7 @@ "@babel/core": "^7.0.0-beta.42", "@babel/plugin-proposal-export-default-from": "^7.0.0-beta.42", "@babel/plugin-proposal-export-namespace-from": "^7.0.0-beta.42", + "@babel/plugin-transform-runtime": "^7.0.0-beta.42", "@babel/preset-env": "^7.0.0-beta.42", "babel-eslint": "^8.2.2", "eslint": "^4.18.1", From fe12f73530690e8231c0435804f8c548c76c5862 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Mon, 19 Mar 2018 15:09:26 -0400 Subject: [PATCH 20/90] Updating version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6d2b899c..1cfcb2e6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-gitlab-api", - "version": "3.0.0-rc.1", + "version": "3.0.0-rc.2", "description": "Full NodeJS implementation of the GitLab API. Supports Promises, Async/Await.", "main": "dist/latest/index.js", "engines": { From 93ed9a3dae5372161f7782babf411d2b79358e0f Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Tue, 20 Mar 2018 16:24:01 -0400 Subject: [PATCH 21/90] Adding more docs! --- README.md | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 35a3295d..6a9f9244 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,57 @@ const service = new Projects({ ``` +The API's that are currently supported are: +``` +// Groups +Groups +GroupAccessRequests +GroupCustomAttributes +GroupMembers +GroupMilestones +GroupProjects +GroupVariables + +// Users +Users +UserEmails +UserImpersonationTokens +UserKeys +UserGPGKeys + +// Projects +Branches +Commits +DeployKeys +Environments +Issues +Jobs +Labels +MergeRequests +MergeRequestNotes +Pipelines +Projects +ProjectAccessRequests +ProjectCustomAttributes +ProjectHooks +ProjectMembers +ProjectMilestones +ProjectSnippets +ProtectedBranches +ProjectVariables +Repositories +RepositoryFiles +Runners +Services +Tags +Triggers + +// General +SystemHooks +Events + +``` + ### Namespace Imports It can be annoying to have to import all the API's pertaining to a specific resource. For example, the Projects resource is composed of many API's, Projects, Issues, Labels, MergeRequests, etc. For convience, there is a Namespace export for importing and instantiating all these related API's at once. @@ -150,13 +201,14 @@ Once you have your library instantiated, you can utilize many of the API's funct Using the await/async method ```javascript +import Gitlab from 'node-gitlab-api'; + +const api = new Gitlab({ my credentials here }); + // Listing users let users = await api.Users.all(); -``` -Or using Promise-Then notation -```javascript -// Listing projects +// Or using Promise-Then notation api.Projects.all() .then((projects) => { console.log(projects) @@ -170,6 +222,10 @@ General rule about all the function parameters: ie. ```javascript +import Gitlab from 'node-gitlab-api'; + +const api = new Gitlab({ my credentials here }); + api.Projects.create(projectId, { //options defined in the Gitlab API documentation }) From e1e44191a25c4d63d6e1a28594e9430ba524c57e Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Tue, 20 Mar 2018 16:25:58 -0400 Subject: [PATCH 22/90] Even more docs --- README.md | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6a9f9244..7423bbfc 100644 --- a/README.md +++ b/README.md @@ -203,7 +203,10 @@ Using the await/async method ```javascript import Gitlab from 'node-gitlab-api'; -const api = new Gitlab({ my credentials here }); +const api = new Gitlab({ + url: 'http://example.com', // Defaults to http://gitlab.com + token: 'abcdefghij123456' //Can be created in your profile. +}); // Listing users let users = await api.Users.all(); @@ -224,7 +227,10 @@ ie. ```javascript import Gitlab from 'node-gitlab-api'; -const api = new Gitlab({ my credentials here }); +const api = new Gitlab({ + url: 'http://example.com', // Defaults to http://gitlab.com + token: 'abcdefghij123456' //Can be created in your profile. +}); api.Projects.create(projectId, { //options defined in the Gitlab API documentation @@ -237,7 +243,13 @@ For any .all() function on a resource, it will return all the items from Gitlab. ```javascript -// Listing projects +import Gitlab from 'node-gitlab-api'; + +const api = new Gitlab({ + url: 'http://example.com', // Defaults to http://gitlab.com + token: 'abcdefghij123456' //Can be created in your profile. +}); + let projects = await api.Projects.all({maxPages:2}); ``` @@ -245,7 +257,13 @@ let projects = await api.Projects.all({maxPages:2}); You can also use this in conjunction to the perPage argument which would override the default of 30 per page set by Gitlab: ```javascript -// Listing projects +import Gitlab from 'node-gitlab-api'; + +const api = new Gitlab({ + url: 'http://example.com', // Defaults to http://gitlab.com + token: 'abcdefghij123456' //Can be created in your profile. +}); + let projects = await api.Projects.all({maxPages:2, perPage:40}); ``` From e68cf47e426ef31a0445adaabc2572fa4f878198 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Tue, 20 Mar 2018 16:31:37 -0400 Subject: [PATCH 23/90] Fixing toc --- README.md | 136 +++++++++++++++++++++++++++--------------------------- 1 file changed, 69 insertions(+), 67 deletions(-) diff --git a/README.md b/README.md index 7423bbfc..42ebfab3 100644 --- a/README.md +++ b/README.md @@ -9,72 +9,6 @@ [GitLab](https://github.com/gitlabhq/gitlabhq) API NodeJS library. It wraps the HTTP v4 API library described [here](https://github.com/gitlabhq/gitlabhq/tree/master/doc/api). -## Table of Contents - -* [Install](#install) -* [Usage](#usage) - * [Import](#import) - * [Examples](#examples) - * [Pagination](#pagination) -* [Docs](#docs) - * [Projects](https://github.com/jdalrymple/node-gitlab-api/blob/master/docs/projects.md) - * [Groups](https://github.com/jdalrymple/node-gitlab-api/blob/master/docs/groups.md) -* [Contributors](#contributors) -* [Tests](#tests) -* [License](#licence) -* [Changelog](#changelog) - -## Install - -```bash -# Install from npm -npm install node-gitlab-api -``` - -## Usage -### Basic Import - -URL to your GitLab instance should not include `/api/v4` path. - -Instantiate the library using a basic token created in your [Gitlab Profile](https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html) - -```javascript -// ES6 (>=node 8.0.0) -import Gitlab from 'node-gitlab-api'; - -// ES5 -const Gitlab = require('node-gitlab-api/dist/es5').default - - -// Instantiating -const api = new Gitlab({ - url: 'http://example.com', // Defaults to http://gitlab.com - token: 'abcdefghij123456' //Can be created in your profile. -}) - -// Or, use a OAuth token instead! - -const api = new Gitlab({ - url: 'http://example.com', // Defaults to http://gitlab.com - oauthToken: 'abcdefghij123456' -}) - -``` - -### Specific Imports - -Sometimes you dont want to import and instantiate the whole gitlab api, perhaps you only want access to the Projects API. To do this, one only needs to import and instantiate this specific API: - -```javascript -import { Projects } from 'node-gitlab-api'; - -const service = new Projects({ - url: 'http://example.com', // Defaults to http://gitlab.com - token: 'abcdefghij123456' //Can be created in your profile. -}) - -``` - The API's that are currently supported are: ``` // Groups @@ -126,7 +60,75 @@ Events ``` -### Namespace Imports +## Table of Contents + +* [Install](#install) +* [Usage](#usage) + * [Import](#import) + * [Specific Imports](#specific-imports) + * [Namespace Imports](#namespace-imports) + * [Examples](#examples) + * [Pagination](#pagination) +* [Docs](#docs) + * [Projects](https://github.com/jdalrymple/node-gitlab-api/blob/master/docs/projects.md) + * [Groups](https://github.com/jdalrymple/node-gitlab-api/blob/master/docs/groups.md) +* [Contributors](#contributors) +* [Tests](#tests) +* [License](#licence) +* [Changelog](#changelog) + +## Install + +```bash +# Install from npm +npm install node-gitlab-api +``` + +## Usage +### Import + +URL to your GitLab instance should not include `/api/v4` path. + +Instantiate the library using a basic token created in your [Gitlab Profile](https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html) + +```javascript +// ES6 (>=node 8.0.0) +import Gitlab from 'node-gitlab-api'; + +// ES5 +const Gitlab = require('node-gitlab-api/dist/es5').default + + +// Instantiating +const api = new Gitlab({ + url: 'http://example.com', // Defaults to http://gitlab.com + token: 'abcdefghij123456' //Can be created in your profile. +}) + +// Or, use a OAuth token instead! + +const api = new Gitlab({ + url: 'http://example.com', // Defaults to http://gitlab.com + oauthToken: 'abcdefghij123456' +}) + +``` + +#### Specific Imports + +Sometimes you dont want to import and instantiate the whole gitlab api, perhaps you only want access to the Projects API. To do this, one only needs to import and instantiate this specific API: + +```javascript +import { Projects } from 'node-gitlab-api'; + +const service = new Projects({ + url: 'http://example.com', // Defaults to http://gitlab.com + token: 'abcdefghij123456' //Can be created in your profile. +}) + +``` + +#### Namespace Imports It can be annoying to have to import all the API's pertaining to a specific resource. For example, the Projects resource is composed of many API's, Projects, Issues, Labels, MergeRequests, etc. For convience, there is a Namespace export for importing and instantiating all these related API's at once. From 6c3b7176cee5a420f7818fbbcffc3d8bce66e2d8 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Tue, 20 Mar 2018 16:36:50 -0400 Subject: [PATCH 24/90] Moving support lower --- README.md | 54 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 42ebfab3..c5169eec 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,34 @@ [GitLab](https://github.com/gitlabhq/gitlabhq) API NodeJS library. It wraps the HTTP v4 API library described [here](https://github.com/gitlabhq/gitlabhq/tree/master/doc/api). +## Table of Contents + +* [Install](#install) +* [Usage](#usage) + * [Supported APIs](#supported-apis) + * [Import](#import) + * [Specific Imports](#specific-imports) + * [Namespace Imports](#namespace-imports) + * [Examples](#examples) + * [Pagination](#pagination) +* [Docs](#docs) + * [Projects](https://github.com/jdalrymple/node-gitlab-api/blob/master/docs/projects.md) + * [Groups](https://github.com/jdalrymple/node-gitlab-api/blob/master/docs/groups.md) +* [Contributors](#contributors) +* [Tests](#tests) +* [License](#licence) +* [Changelog](#changelog) + + +## Install + +```bash +# Install from npm +npm install node-gitlab-api +``` + +## Usage +### Supported APIs The API's that are currently supported are: ``` // Groups @@ -59,32 +87,6 @@ SystemHooks Events ``` - -## Table of Contents - -* [Install](#install) -* [Usage](#usage) - * [Import](#import) - * [Specific Imports](#specific-imports) - * [Namespace Imports](#namespace-imports) - * [Examples](#examples) - * [Pagination](#pagination) -* [Docs](#docs) - * [Projects](https://github.com/jdalrymple/node-gitlab-api/blob/master/docs/projects.md) - * [Groups](https://github.com/jdalrymple/node-gitlab-api/blob/master/docs/groups.md) -* [Contributors](#contributors) -* [Tests](#tests) -* [License](#licence) -* [Changelog](#changelog) - -## Install - -```bash -# Install from npm -npm install node-gitlab-api -``` - -## Usage ### Import URL to your GitLab instance should not include `/api/v4` path. From 51af5ee1d027097b1b240cc55437a9da821d3987 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Wed, 21 Mar 2018 09:53:15 -0400 Subject: [PATCH 25/90] Adding fix for #48 --- src/infrastructure/BaseService.js | 22 ++-------------------- src/infrastructure/RequestHelper.js | 3 ++- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/src/infrastructure/BaseService.js b/src/infrastructure/BaseService.js index 652d85e2..688bb3b0 100644 --- a/src/infrastructure/BaseService.js +++ b/src/infrastructure/BaseService.js @@ -1,26 +1,8 @@ -import LinkParser from 'parse-link-header'; - -async function getAllPages(client, endpoint, options, results = []) { - const response = await client.get(endpoint, options, true); - - if (!response.headers['x-page']) { - return response.body; - } - - const links = LinkParser(response.headers.link); - const limit = options.max_pages ? response.headers['x-page'] < options.max_pages : true; - const moreResults = results.concat(response.body); - - if (links.next && limit) { - return getAllPages(client, links.next.url.replace(client.url, ''), options, moreResults); - } - - return moreResults; -} +import URL from 'url'; class BaseModel { constructor({ url = 'https://gitlab.com', token, oauthToken }) { - this.url = `${url}/api/v4/`; + this.url = URL.resolve(url, 'api/v4'); this.headers = {}; if (oauthToken) { diff --git a/src/infrastructure/RequestHelper.js b/src/infrastructure/RequestHelper.js index 01210725..b76cce60 100644 --- a/src/infrastructure/RequestHelper.js +++ b/src/infrastructure/RequestHelper.js @@ -1,5 +1,6 @@ import Request from 'request-promise'; import Humps from 'humps'; +import URL from 'url'; function defaultRequest( url, @@ -7,7 +8,7 @@ function defaultRequest( { headers, body, qs, formData, resolveWithFullResponse = false }, ) { const params = { - url: `${url}${endpoint}`, + url: URL.resolve(url, endpoint), headers, json: true, }; From 7ded2aa8d902d8bef0a617f60b7b5b994c294ab7 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Wed, 21 Mar 2018 09:53:33 -0400 Subject: [PATCH 26/90] Adding back proper getAll functionality --- src/infrastructure/RequestHelper.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/infrastructure/RequestHelper.js b/src/infrastructure/RequestHelper.js index b76cce60..05ffd843 100644 --- a/src/infrastructure/RequestHelper.js +++ b/src/infrastructure/RequestHelper.js @@ -1,5 +1,6 @@ import Request from 'request-promise'; import Humps from 'humps'; +import LinkParser from 'parse-link-header'; import URL from 'url'; function defaultRequest( @@ -23,12 +24,23 @@ function defaultRequest( } class RequestHelper { - static get(service, endpoint, options, fullResponse = false) { - return Request.get(defaultRequest(service.url, endpoint, { + static async get(service, endpoint, options, fullResponse = false) { + const response = await Request.get(defaultRequest(service.url, endpoint, { headers: service.headers, qs: options, - resolveWithFullResponse: fullResponse, + resolveWithFullResponse: options.page ? true : fullResponse, })); + + const links = LinkParser(response.headers.link); + const page = response.headers['x-page']; + const limit = options.maxPages ? page < options.maxPages : true; + let more = []; + + if (page && limit && links.next) { + more = await RequestHelper.get(service, links.next.url.replace(service.url, ''), options); + } + + return [...response.body, ...more]; } static post(service, endpoint, options, form = false) { From aec74051b888fd888b479c8d8d5e3c2dacbae33c Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Wed, 21 Mar 2018 10:27:51 -0400 Subject: [PATCH 27/90] Updating log --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c5169eec..bd88c9c1 100644 --- a/README.md +++ b/README.md @@ -323,7 +323,7 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod - Supporting both camelCase and snake_case option properties: `projects.all({perPage:5}) === projects.all({per_page: 5})` -### Breaking Changes between 2.2.4 and 3.0.0 +### Breaking Changes between 2.2.5 and 3.0.0 - Instantiation of the API must use the new operator consistently. See usage above. - All services being exported are not capitalized for clarity that they are themselves api's and not properties. ie. Gitlab.Projects vs Gitlab.projects - All subservices (services exposed as properties of other services) have been moved out into their own service @@ -354,6 +354,11 @@ Runners = ProjectRunners + Runners. ProjectId is optional for all() ``` +[2.2.5](https://github.com/jdalrymple/node-gitlab-api/tags/2.2.5) (2018-3-15) +------------------ +- Fixed #48 - Problem with trailing `\` in url + + [2.2.4](https://github.com/jdalrymple/node-gitlab-api/5d7c031ca2b833b28633647195560379d88ba5b3) (2018-2-12) ------------------ - Fixed the missing options for tags.all #40 From 7b31faf171b44857afc7ed2f8971ddb4c2efd095 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Wed, 21 Mar 2018 10:33:06 -0400 Subject: [PATCH 28/90] updating package.lock --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 93eeb868..42da0c20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "node-gitlab-api", - "version": "3.0.0-rc.1", + "version": "3.0.0-rc.2", "lockfileVersion": 1, "requires": true, "dependencies": { From e08ac4d44d28581fbfbd7c865bae50e5528f496a Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Wed, 21 Mar 2018 10:47:47 -0400 Subject: [PATCH 29/90] Fixing incorrect services reference, and update default options param in the RequestHelper class --- src/index.js | 2 +- src/infrastructure/RequestHelper.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/index.js b/src/index.js index 40b91b62..a9806700 100644 --- a/src/index.js +++ b/src/index.js @@ -94,4 +94,4 @@ export const ProjectNamespace = init({ }); // All initialized -export default init(Services); +export default init(APIServices); diff --git a/src/infrastructure/RequestHelper.js b/src/infrastructure/RequestHelper.js index 05ffd843..ba7ce2c6 100644 --- a/src/infrastructure/RequestHelper.js +++ b/src/infrastructure/RequestHelper.js @@ -24,7 +24,7 @@ function defaultRequest( } class RequestHelper { - static async get(service, endpoint, options, fullResponse = false) { + static async get(service, endpoint, options = {}, fullResponse = false) { const response = await Request.get(defaultRequest(service.url, endpoint, { headers: service.headers, qs: options, @@ -43,7 +43,7 @@ class RequestHelper { return [...response.body, ...more]; } - static post(service, endpoint, options, form = false) { + static post(service, endpoint, options = {}, form = false) { const body = form ? 'fromData' : 'body'; return Request.post(defaultRequest(service.url, endpoint, { @@ -52,14 +52,14 @@ class RequestHelper { })); } - static put(service, endpoint, options) { + static put(service, endpoint, options = {}) { return Request.put(defaultRequest(service.url, endpoint, { headers: service.headers, body: options, })); } - static delete(service, endpoint, options) { + static delete(service, endpoint, options = {}) { return Request.delete(defaultRequest(service.url, endpoint, { headers: service.headers, qs: options, From 31508ebb009003171720a6cb0b16f1e36166db39 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Wed, 21 Mar 2018 14:36:08 -0400 Subject: [PATCH 30/90] Fixing more url problems and getAll functionality --- package-lock.json | 5 +++++ package.json | 3 ++- src/infrastructure/BaseService.js | 4 ++-- src/infrastructure/RequestHelper.js | 13 ++++++++----- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 42da0c20..1278a3c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4632,6 +4632,11 @@ "crypto-random-string": "1.0.0" } }, + "url-join": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=" + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index 1cfcb2e6..7015cd0d 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "parse-link-header": "^1.0.1", "request": "^2.85.0", "request-promise": "^4.2.2", - "tempy": "^0.2.1" + "tempy": "^0.2.1", + "url-join": "^4.0.0" } } diff --git a/src/infrastructure/BaseService.js b/src/infrastructure/BaseService.js index 688bb3b0..cdbf78cc 100644 --- a/src/infrastructure/BaseService.js +++ b/src/infrastructure/BaseService.js @@ -1,8 +1,8 @@ -import URL from 'url'; +import URLJoin from 'url-join'; class BaseModel { constructor({ url = 'https://gitlab.com', token, oauthToken }) { - this.url = URL.resolve(url, 'api/v4'); + this.url = URLJoin(url, 'api', 'v4'); this.headers = {}; if (oauthToken) { diff --git a/src/infrastructure/RequestHelper.js b/src/infrastructure/RequestHelper.js index ba7ce2c6..0794896e 100644 --- a/src/infrastructure/RequestHelper.js +++ b/src/infrastructure/RequestHelper.js @@ -1,7 +1,7 @@ import Request from 'request-promise'; import Humps from 'humps'; import LinkParser from 'parse-link-header'; -import URL from 'url'; +import URLJoin from 'url-join'; function defaultRequest( url, @@ -9,7 +9,7 @@ function defaultRequest( { headers, body, qs, formData, resolveWithFullResponse = false }, ) { const params = { - url: URL.resolve(url, endpoint), + url: URLJoin(url, endpoint), headers, json: true, }; @@ -24,11 +24,12 @@ function defaultRequest( } class RequestHelper { - static async get(service, endpoint, options = {}, fullResponse = false) { + static async get(service, endpoint, options = {}) { + const response = await Request.get(defaultRequest(service.url, endpoint, { headers: service.headers, qs: options, - resolveWithFullResponse: options.page ? true : fullResponse, + resolveWithFullResponse: true, })); const links = LinkParser(response.headers.link); @@ -38,9 +39,11 @@ class RequestHelper { if (page && limit && links.next) { more = await RequestHelper.get(service, links.next.url.replace(service.url, ''), options); + + return [...response.body, ...more]; } - return [...response.body, ...more]; + return response.body; } static post(service, endpoint, options = {}, form = false) { From 242f21441cc0dc910120b374fb0726c35e0223d5 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Wed, 21 Mar 2018 15:12:26 -0400 Subject: [PATCH 31/90] Adding merge request approvals API https://docs.gitlab.com/ee/api/merge_request_approvals.html --- src/services/MergeRequests.js | 39 +++++++++++++++++++++++++++++++++++ src/services/Projects.js | 2 +- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/services/MergeRequests.js b/src/services/MergeRequests.js index 6435b3a7..7f49f3c6 100644 --- a/src/services/MergeRequests.js +++ b/src/services/MergeRequests.js @@ -7,6 +7,21 @@ class MergeRequests extends BaseService { return RequestHelper.put(this, `projects/${pId}/merge_requests/${mId}/merge`, options); } + approve(projectId, mergerequestId, { sha }) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.post(this, `projects/${pId}/merge_requests/${mId}/approve`, { sha }); + } + + approvals(projectId, { mergerequestId } = {}) { + const pId = encodeURIComponent(projectId); + const mergeRequest = mergerequestId + ? `merge_requests/${encodeURIComponent(mergerequestId)}` + : ''; + + return RequestHelper.get(this, `projects/${pId}/${mergeRequest}/approvals`); + } + all({ projectId, ...options } = {}) { const url = projectId ? `projects/${encodeURIComponent(projectId)}/merge_requests` @@ -66,6 +81,24 @@ class MergeRequests extends BaseService { return RequestHelper.put(this, `projects/${pId}/merge_requests/${mId}`, options); } + editApprovals(projectId, { mergerequestId, ...options }) { + const pId = encodeURIComponent(projectId); + const mergeRequest = mergerequestId + ? `merge_requests/${encodeURIComponent(mergerequestId)}/` + : ''; + + return RequestHelper.get(this, `projects/${pId}/${mergeRequest}approvals`, options); + } + + editApprovers(projectId, { mergerequestId, ...options }) { + const pId = encodeURIComponent(projectId); + const mergeRequest = mergerequestId + ? `merge_requests/${encodeURIComponent(mergerequestId)}/` + : ''; + + return RequestHelper.get(this, `projects/${pId}/${mergeRequest}approvers`, options); + } + remove(projectId, mergerequestId) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); @@ -130,6 +163,12 @@ class MergeRequests extends BaseService { return RequestHelper.get(this, `projects/${pId}/merge_requests/${mId}/versions`); } + unapprove(projectId, mergerequestId) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.post(this, `projects/${pId}/merge_requests/${mId}/approve`); + } + unsubscribe(projectId, mergerequestId) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); diff --git a/src/services/Projects.js b/src/services/Projects.js index 66f4d1d2..cdacae58 100644 --- a/src/services/Projects.js +++ b/src/services/Projects.js @@ -19,7 +19,7 @@ class Projects extends BaseService { return RequestHelper.put(this, `projects/${pId}`, options); } - + events(projectId, options) { validateEventOptions(options.action, options.targetType); From 496399d2aa7e1489e23a3a999b13c1f4cc310a69 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Wed, 21 Mar 2018 15:17:03 -0400 Subject: [PATCH 32/90] Updating version --- README.md | 12 +++++++++--- package.json | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index bd88c9c1..4f8d0939 100644 --- a/README.md +++ b/README.md @@ -308,7 +308,7 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod ## Changelog -[3.0.0](https://github.com/jdalrymple/node-gitlab-api/) (2018-3-16) +[3.0.0](https://github.com/jdalrymple/node-gitlab-api/tags/3.0.0) (2018-3-16) ------------------ - Exporting all services seperatly ie. const { Projects } from 'node-gitlab-api'; as well as the usual default export: const Gitlab from 'node-gitlab-api' - Exporting namespaces which are groups of related API's. These include: ProjectsNamespace, UsersNamespace and GroupsNamespace @@ -321,9 +321,10 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod - Added support for Events. This is also exposed in Projects and Users under the events function - Fixed the missing options parameter for the ProjectMembers and GroupMemebers APIs in PR [#45] thanks to [Stefan Hall](https://github.com/Marethyu1) - Supporting both camelCase and snake_case option properties: `projects.all({perPage:5}) === projects.all({per_page: 5})` +- Added support for Merge Request Approvals #49 +- Fixed problem with .all() functions where only the some of the results were being returned - -### Breaking Changes between 2.2.5 and 3.0.0 +### Breaking Changes between 2.2.6 and 3.0.0 - Instantiation of the API must use the new operator consistently. See usage above. - All services being exported are not capitalized for clarity that they are themselves api's and not properties. ie. Gitlab.Projects vs Gitlab.projects - All subservices (services exposed as properties of other services) have been moved out into their own service @@ -354,6 +355,11 @@ Runners = ProjectRunners + Runners. ProjectId is optional for all() ``` +[2.2.6](https://github.com/jdalrymple/node-gitlab-api/tags/2.2.6) (2018-3-15) +------------------ +- Fixed more issues within the url concatenation + + [2.2.5](https://github.com/jdalrymple/node-gitlab-api/tags/2.2.5) (2018-3-15) ------------------ - Fixed #48 - Problem with trailing `\` in url diff --git a/package.json b/package.json index 7015cd0d..87e33164 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-gitlab-api", - "version": "3.0.0-rc.2", + "version": "3.0.0-rc.3", "description": "Full NodeJS implementation of the GitLab API. Supports Promises, Async/Await.", "main": "dist/latest/index.js", "engines": { From 6f8f7f6f9414a04448a926f7c3f6d7bc44a031bb Mon Sep 17 00:00:00 2001 From: Jordan Wallet Date: Thu, 22 Mar 2018 09:32:45 -0700 Subject: [PATCH 33/90] Fix current user "keys" routes --- src/services/UserKeys.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/services/UserKeys.js b/src/services/UserKeys.js index af7c729c..a3453964 100644 --- a/src/services/UserKeys.js +++ b/src/services/UserKeys.js @@ -2,13 +2,13 @@ import { BaseService, RequestHelper } from '../infrastructure'; class UserKeys extends BaseService { all({ userId }) { - const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'; + const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'user/keys'; return RequestHelper.get(this, url); } create(title, key, { userId } = {}) { - const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'; + const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'user/keys'; return RequestHelper.post(this, url, { title, @@ -19,12 +19,12 @@ class UserKeys extends BaseService { show(keyId) { const kId = encodeURIComponent(keyId); - return RequestHelper.get(this, `users/keys/${kId}`); + return RequestHelper.get(this, `user/keys/${kId}`); } remove(keyId, { userId } = {}) { const kId = encodeURIComponent(keyId); - const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'; + const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'user/keys'; return RequestHelper.delete(this, `${url}/${kId}`); } From 7e1a5bba9a3e14afeb8d8e7fabfaa17841826f87 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Thu, 22 Mar 2018 13:37:23 -0400 Subject: [PATCH 34/90] Update version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1278a3c7..ed51feed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "node-gitlab-api", - "version": "3.0.0-rc.2", + "version": "3.0.0-rc.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 87e33164..ce8ff9a3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-gitlab-api", - "version": "3.0.0-rc.3", + "version": "3.0.0-rc.4", "description": "Full NodeJS implementation of the GitLab API. Supports Promises, Async/Await.", "main": "dist/latest/index.js", "engines": { From 07c08093659928f75ad43122a97f8f2d0a3afd2f Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Fri, 23 Mar 2018 20:29:06 -0400 Subject: [PATCH 35/90] Updating readme and adding full support for environments --- README.md | 1 + src/services/Environments.js | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/README.md b/README.md index 4f8d0939..801574f5 100644 --- a/README.md +++ b/README.md @@ -323,6 +323,7 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod - Supporting both camelCase and snake_case option properties: `projects.all({perPage:5}) === projects.all({per_page: 5})` - Added support for Merge Request Approvals #49 - Fixed problem with .all() functions where only the some of the results were being returned +- Added full support for Enviroments ### Breaking Changes between 2.2.6 and 3.0.0 - Instantiation of the API must use the new operator consistently. See usage above. diff --git a/src/services/Environments.js b/src/services/Environments.js index 16236b37..4c66796b 100644 --- a/src/services/Environments.js +++ b/src/services/Environments.js @@ -6,6 +6,30 @@ class Environments extends BaseService { return RequestHelper.get(this, `projects/${pId}/environments`, options); } + + create(projectId, options) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.put(this, `projects/${pId}/environments`, options); + } + + edit(projectId, environmentId, options) { + const [pId, eId] = [projectId, environmentId].map(encodeURIComponent); + + return RequestHelper.put(this, `projects/${pId}/environments/${eId}`, options); + } + + remove(projectId, environmentId) { + const [pId, eId] = [projectId, environmentId].map(encodeURIComponent); + + return RequestHelper.delete(this, `projects/${pId}/environments/${eId}`); + } + + stop(projectId, environmentId) { + const [pId, eId] = [projectId, environmentId].map(encodeURIComponent); + + return RequestHelper.post(this, `projects/${pId}/environments/${eId}/stop`); + } } export default Environments; From f7cbe2293eea864695e8aab902edde830a3ca435 Mon Sep 17 00:00:00 2001 From: Justin Date: Sun, 25 Mar 2018 21:02:14 -0400 Subject: [PATCH 36/90] Renamed Namespace to Bundle Added Todos support Cleaned up Tags Moved createTodo to Todos API --- README.md | 22 ++++++++++++---------- src/index.js | 6 +++--- src/services/MergeRequests.js | 6 ------ src/services/Tags.js | 14 ++++---------- src/services/Todos.js | 21 +++++++++++++++++++++ src/services/index.js | 1 + 6 files changed, 41 insertions(+), 29 deletions(-) create mode 100644 src/services/Todos.js diff --git a/README.md b/README.md index 801574f5..1d977cb1 100644 --- a/README.md +++ b/README.md @@ -83,8 +83,9 @@ Tags Triggers // General -SystemHooks Events +SystemHooks +Todos ``` ### Import @@ -130,15 +131,15 @@ const service = new Projects({ ``` -#### Namespace Imports +#### Bundle Imports -It can be annoying to have to import all the API's pertaining to a specific resource. For example, the Projects resource is composed of many API's, Projects, Issues, Labels, MergeRequests, etc. For convience, there is a Namespace export for importing and instantiating all these related API's at once. +It can be annoying to have to import all the API's pertaining to a specific resource. For example, the Projects resource is composed of many API's, Projects, Issues, Labels, MergeRequests, etc. For convience, there is a Bundle export for importing and instantiating all these related API's at once. ```javascript -import { ProjectsNamespace } from 'node-gitlab-api'; +import { ProjectsBundle } from 'node-gitlab-api'; -const services = new ProjectsNamespace({ +const services = new ProjectsBundle({ url: 'http://example.com', // Defaults to http://gitlab.com token: 'abcdefghij123456' //Can be created in your profile. }) @@ -149,8 +150,8 @@ etc.. ``` -Currently there are three Namespaces: -1. ProjectsNamespace which includes: +Currently there are three Bundles: +1. ProjectsBundle which includes: ``` Branches, Commits, @@ -179,7 +180,7 @@ Tags, Triggers ``` -2. UsersNamespace which includes: +2. UsersBundle which includes: ``` Users, UserEmails, @@ -188,7 +189,7 @@ UserKeys, UserGPGKeys ``` -3. GroupsNamespace which includes: +3. GroupsBundle which includes: ``` Groups, GroupAccessRequests, @@ -324,6 +325,7 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod - Added support for Merge Request Approvals #49 - Fixed problem with .all() functions where only the some of the results were being returned - Added full support for Enviroments +- Added support for Todos ### Breaking Changes between 2.2.6 and 3.0.0 - Instantiation of the API must use the new operator consistently. See usage above. @@ -334,7 +336,7 @@ ProjectRepository -> Repositories, Tags, Commits, Branches and RepositoryFiles Users -> Users, UserKeys, UserGPGKeys, UserCustomAttributes, UserVariables ``` - +- Moved createTodo function from MergeRequests API to Todos API - Many services have been renamed: ``` ProjectProtectedBranches -> ProtectedBranches diff --git a/src/index.js b/src/index.js index a9806700..e18301e3 100644 --- a/src/index.js +++ b/src/index.js @@ -15,7 +15,7 @@ const { GroupVariables, } = APIServices; -export const GroupNamespace = init({ +export const GroupsBundle = init({ Groups, GroupAccessRequests, GroupCustomAttributes, @@ -28,7 +28,7 @@ export const GroupNamespace = init({ // Users const { Users, UserEmails, UserImpersonationTokens, UserKeys, UserGPGKeys } = APIServices; -export const UserNamespace = init({ +export const UsersBundle = init({ Users, UserEmails, UserImpersonationTokens, @@ -65,7 +65,7 @@ const { Triggers, } = APIServices; -export const ProjectNamespace = init({ +export const ProjectsBundle = init({ Branches, Commits, DeployKeys, diff --git a/src/services/MergeRequests.js b/src/services/MergeRequests.js index 7f49f3c6..0ec1e06c 100644 --- a/src/services/MergeRequests.js +++ b/src/services/MergeRequests.js @@ -69,12 +69,6 @@ class MergeRequests extends BaseService { }); } - createTodo(projectId, mergerequestId) { - const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - - return RequestHelper.post(this, `projects/${pId}/merge_requests/${mId}/todo`); - } - edit(projectId, mergerequestId, options) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); diff --git a/src/services/Tags.js b/src/services/Tags.js index 252a217c..20085d62 100644 --- a/src/services/Tags.js +++ b/src/services/Tags.js @@ -14,21 +14,15 @@ class Tags extends BaseService { } remove(projectId, tagName) { - const pId = encodeURIComponent(projectId); + const [pId, tId] = [projectId, tagName].map(encodeURIComponent); - return RequestHelper.delete( - this, - `projects/${pId}/repository/tags/${encodeURI(tagName)}`, - ); + return RequestHelper.delete(this, `projects/${pId}/repository/tags/${tId}`); } show(projectId, tagName) { - const pId = encodeURIComponent(projectId); + const [pId, tId] = [projectId, tagName].map(encodeURIComponent); - return RequestHelper.get( - this, - `projects/${pId}/repository/tags/${encodeURI(tagName)}`, - ); + return RequestHelper.get(this, `projects/${pId}/repository/tags/${tId}`); } } diff --git a/src/services/Todos.js b/src/services/Todos.js new file mode 100644 index 00000000..42a95c0b --- /dev/null +++ b/src/services/Todos.js @@ -0,0 +1,21 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class Todos extends BaseService { + all(options) { + return RequestHelper.get(this, 'todos, options); + } + + create(projectId, mergerequestId) { + const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); + + return RequestHelper.post(this, `projects/${pId}/merge_requests/${mId}/todo`); + } + + done({ todoId } = {}) { + const tId = encodeURIComponent(todoId); + + return RequestHelper.delete(this,`todos/${tId}/mark_as_done`); + } +} + +export default Todos; diff --git a/src/services/index.js b/src/services/index.js index fa66b189..5b5a1444 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -39,6 +39,7 @@ export RepositoryFiles from './RepositoryFiles'; export Runners from './Runners'; export Services from './Services'; export Tags from './Tags'; +export Todos from '/Todos'; export Triggers from './Triggers'; // General From 10cccc97767fb54a08174e44d5665230414c2954 Mon Sep 17 00:00:00 2001 From: Justin Date: Sun, 25 Mar 2018 21:05:11 -0400 Subject: [PATCH 37/90] Cleaning up readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1d977cb1..07629f41 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ It wraps the HTTP v4 API library described [here](https://github.com/gitlabhq/gi * [Supported APIs](#supported-apis) * [Import](#import) * [Specific Imports](#specific-imports) - * [Namespace Imports](#namespace-imports) + * [Bundle Imports](#bundle-imports) * [Examples](#examples) * [Pagination](#pagination) * [Docs](#docs) @@ -312,7 +312,7 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod [3.0.0](https://github.com/jdalrymple/node-gitlab-api/tags/3.0.0) (2018-3-16) ------------------ - Exporting all services seperatly ie. const { Projects } from 'node-gitlab-api'; as well as the usual default export: const Gitlab from 'node-gitlab-api' -- Exporting namespaces which are groups of related API's. These include: ProjectsNamespace, UsersNamespace and GroupsNamespace +- Exporting bunbles which are groups of related API's. These include: ProjectsBundle, UsersBundle and GroupsBundle - Added activies support to the Users service - Added events support to the Projects, and Users - Added full support for ProjectVariables and GroupVariables From 4c0a42170f2de9a36866d6a14a43572078619f22 Mon Sep 17 00:00:00 2001 From: Justin Date: Sun, 25 Mar 2018 21:08:05 -0400 Subject: [PATCH 38/90] Updating version to prep for release --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index ed51feed..bd6f3fd4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "node-gitlab-api", - "version": "3.0.0-rc.4", + "version": "3.0.0-rc.5", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ce8ff9a3..3609f751 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-gitlab-api", - "version": "3.0.0-rc.4", + "version": "3.0.0-rc.5", "description": "Full NodeJS implementation of the GitLab API. Supports Promises, Async/Await.", "main": "dist/latest/index.js", "engines": { From f4a6a718d29c60bec7c75f1716e13f85c746ef57 Mon Sep 17 00:00:00 2001 From: Justin Date: Sun, 25 Mar 2018 21:17:36 -0400 Subject: [PATCH 39/90] Typo --- src/services/Todos.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/Todos.js b/src/services/Todos.js index 42a95c0b..c75969ac 100644 --- a/src/services/Todos.js +++ b/src/services/Todos.js @@ -2,7 +2,7 @@ import { BaseService, RequestHelper } from '../infrastructure'; class Todos extends BaseService { all(options) { - return RequestHelper.get(this, 'todos, options); + return RequestHelper.get(this, 'todos', options); } create(projectId, mergerequestId) { From 34b08eb78269480bf954d4475d56c7d8e843e9ab Mon Sep 17 00:00:00 2001 From: Jordan Wallet Date: Tue, 27 Mar 2018 15:08:52 -0700 Subject: [PATCH 40/90] Fix getting forks of a project --- src/services/Projects.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/Projects.js b/src/services/Projects.js index cdacae58..fb07323b 100644 --- a/src/services/Projects.js +++ b/src/services/Projects.js @@ -19,7 +19,7 @@ class Projects extends BaseService { return RequestHelper.put(this, `projects/${pId}`, options); } - + events(projectId, options) { validateEventOptions(options.action, options.targetType); @@ -37,7 +37,7 @@ class Projects extends BaseService { forks(projectId, options) { const pId = encodeURIComponent(projectId); - return this.get(`projects/${pId}/forks`, options); + return RequestHelper.get(this, `projects/${pId}/forks`, options); } remove(projectId) { From ce2c022fbd39513bccdfa0237c63bd1960a00a5a Mon Sep 17 00:00:00 2001 From: Justin Date: Wed, 28 Mar 2018 00:14:50 -0400 Subject: [PATCH 41/90] Broken request call --- src/services/Projects.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/Projects.js b/src/services/Projects.js index cdacae58..fb07323b 100644 --- a/src/services/Projects.js +++ b/src/services/Projects.js @@ -19,7 +19,7 @@ class Projects extends BaseService { return RequestHelper.put(this, `projects/${pId}`, options); } - + events(projectId, options) { validateEventOptions(options.action, options.targetType); @@ -37,7 +37,7 @@ class Projects extends BaseService { forks(projectId, options) { const pId = encodeURIComponent(projectId); - return this.get(`projects/${pId}/forks`, options); + return RequestHelper.get(this, `projects/${pId}/forks`, options); } remove(projectId) { From 041fdb3b26976aa143e045aaf83c3d0d92170788 Mon Sep 17 00:00:00 2001 From: Justin Date: Wed, 28 Mar 2018 00:44:10 -0400 Subject: [PATCH 42/90] Updating lint --- package-lock.json | 2 +- package.json | 2 +- src/services/Todos.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index bd6f3fd4..bb11198a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "node-gitlab-api", - "version": "3.0.0-rc.5", + "version": "3.0.0-rc.6", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 3609f751..2508a1ce 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-gitlab-api", - "version": "3.0.0-rc.5", + "version": "3.0.0-rc.6", "description": "Full NodeJS implementation of the GitLab API. Supports Promises, Async/Await.", "main": "dist/latest/index.js", "engines": { diff --git a/src/services/Todos.js b/src/services/Todos.js index c75969ac..24499778 100644 --- a/src/services/Todos.js +++ b/src/services/Todos.js @@ -14,7 +14,7 @@ class Todos extends BaseService { done({ todoId } = {}) { const tId = encodeURIComponent(todoId); - return RequestHelper.delete(this,`todos/${tId}/mark_as_done`); + return RequestHelper.delete(this, `todos/${tId}/mark_as_done`); } } From 194eadf14c40157f3df0ba37835e2b63806514e6 Mon Sep 17 00:00:00 2001 From: Justin Date: Wed, 28 Mar 2018 00:52:39 -0400 Subject: [PATCH 43/90] Found error in export --- src/services/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/index.js b/src/services/index.js index 5b5a1444..6bc9889a 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -39,7 +39,7 @@ export RepositoryFiles from './RepositoryFiles'; export Runners from './Runners'; export Services from './Services'; export Tags from './Tags'; -export Todos from '/Todos'; +export Todos from './Todos'; export Triggers from './Triggers'; // General From f068a92046969424c53904ab0e5d88711dfdf4ba Mon Sep 17 00:00:00 2001 From: Justin Date: Wed, 28 Mar 2018 00:56:52 -0400 Subject: [PATCH 44/90] Updating version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index bb11198a..fa7b1467 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "node-gitlab-api", - "version": "3.0.0-rc.6", + "version": "3.0.0-rc.7", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 2508a1ce..3bc1941a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-gitlab-api", - "version": "3.0.0-rc.6", + "version": "3.0.0-rc.7", "description": "Full NodeJS implementation of the GitLab API. Supports Promises, Async/Await.", "main": "dist/latest/index.js", "engines": { From cda5f18d26293d4670cc361c6a994fca7d44a030 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Wed, 28 Mar 2018 13:37:18 -0400 Subject: [PATCH 45/90] Cleaning up some maintability problems --- package-lock.json | 917 +--------------------------------------------- package.json | 1 + src/index.js | 129 +++---- 3 files changed, 51 insertions(+), 996 deletions(-) diff --git a/package-lock.json b/package-lock.json index fa7b1467..86b394c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1337,7 +1337,6 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", - "fsevents": "1.1.3", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -2077,910 +2076,6 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", - "dev": true, - "optional": true, - "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.6.39" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.39", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - } - } - }, "function-bind": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", @@ -3579,6 +2674,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" + }, "loose-envify": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", @@ -3674,13 +2774,6 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "dev": true, - "optional": true - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", diff --git a/package.json b/package.json index 3bc1941a..67856d92 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ }, "dependencies": { "humps": "^2.0.1", + "lodash.pick": "^4.4.0", "parse-link-header": "^1.0.1", "request": "^2.85.0", "request-promise": "^4.2.2", diff --git a/src/index.js b/src/index.js index e18301e3..4530a74a 100644 --- a/src/index.js +++ b/src/index.js @@ -1,97 +1,58 @@ +import Pick from 'lodash.pick'; import * as APIServices from './services'; import { init } from './infrastructure/Namespace'; -// All not initialized +// All seperatly export * from './services'; // Groups -const { - Groups, - GroupAccessRequests, - GroupCustomAttributes, - GroupMembers, - GroupMilestones, - GroupProjects, - GroupVariables, -} = APIServices; - -export const GroupsBundle = init({ - Groups, - GroupAccessRequests, - GroupCustomAttributes, - GroupMembers, - GroupMilestones, - GroupProjects, - GroupVariables, -}); +export const GroupsBundle = init(Pick(APIServices, [ + 'Groups', + 'GroupAccessRequests', + 'GroupCustomAttributes', + 'GroupMembers', + 'GroupMilestones', + 'GroupProjects', + 'GroupVariables' +])); // Users -const { Users, UserEmails, UserImpersonationTokens, UserKeys, UserGPGKeys } = APIServices; - -export const UsersBundle = init({ - Users, - UserEmails, - UserImpersonationTokens, - UserKeys, - UserGPGKeys, -}); +export const UsersBundle = init(Pick(APIServices, [ + 'Users', + 'UserEmails', + 'UserImpersonationTokens', + 'UserKeys', + 'UserGPGKeys', +])); // Projects -const { - Branches, - Commits, - DeployKeys, - Environments, - Issues, - Jobs, - Labels, - MergeRequests, - MergeRequestNotes, - Pipelines, - Projects, - ProjectAccessRequests, - ProjectCustomAttributes, - ProjectHooks, - ProjectMembers, - ProjectMilestones, - ProjectSnippets, - ProtectedBranches, - ProjectVariables, - Repositories, - RepositoryFiles, - Runners, - Services, - Tags, - Triggers, -} = APIServices; - -export const ProjectsBundle = init({ - Branches, - Commits, - DeployKeys, - Environments, - Issues, - Jobs, - Labels, - MergeRequests, - MergeRequestNotes, - Pipelines, - Projects, - ProjectAccessRequests, - ProjectCustomAttributes, - ProjectHooks, - ProjectMembers, - ProjectMilestones, - ProjectSnippets, - ProtectedBranches, - ProjectVariables, - Repositories, - RepositoryFiles, - Runners, - Services, - Tags, - Triggers, -}); +export const ProjectsBundle = init(Pick(APIServices, [ + 'Branches', + 'Commits', + 'DeployKeys', + 'Environments', + 'Issues', + 'Jobs', + 'Labels', + 'MergeRequests', + 'MergeRequestNotes', + 'Pipelines', + 'Projects', + 'ProjectAccessRequests', + 'ProjectCustomAttributes', + 'ProjectHooks', + 'ProjectMembers', + 'ProjectMilestones', + 'ProjectSnippets', + 'ProtectedBranches', + 'ProjectVariables', + 'Repositories', + 'RepositoryFiles', + 'Runners', + 'Services', + 'Tags', + 'Triggers', +])); // All initialized export default init(APIServices); From 02e6bc019f606bda501dcac5eaa5b109b89f161b Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Wed, 28 Mar 2018 14:15:06 -0400 Subject: [PATCH 46/90] More linting --- .codeclimate.yml | 5 +++++ src/services/MergeRequests.js | 21 +++++---------------- src/services/UserGPGKeys.js | 16 ++++++---------- 3 files changed, 16 insertions(+), 26 deletions(-) diff --git a/.codeclimate.yml b/.codeclimate.yml index 04fe87d7..f7e53999 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -7,6 +7,11 @@ engines: languages: javascript: mass_threshold: 65 + shellcheck: + enabled: true +checks: + method-count: + enabled: false ratings: paths: - "**.js" \ No newline at end of file diff --git a/src/services/MergeRequests.js b/src/services/MergeRequests.js index 0ec1e06c..ed62dd97 100644 --- a/src/services/MergeRequests.js +++ b/src/services/MergeRequests.js @@ -15,17 +15,13 @@ class MergeRequests extends BaseService { approvals(projectId, { mergerequestId } = {}) { const pId = encodeURIComponent(projectId); - const mergeRequest = mergerequestId - ? `merge_requests/${encodeURIComponent(mergerequestId)}` - : ''; + const mergeRequest = mergerequestId ? `merge_requests/${encodeURIComponent(mergerequestId)}` : ''; return RequestHelper.get(this, `projects/${pId}/${mergeRequest}/approvals`); } all({ projectId, ...options } = {}) { - const url = projectId - ? `projects/${encodeURIComponent(projectId)}/merge_requests` - : 'merge_requests'; + const url = projectId ? `projects/${encodeURIComponent(projectId)}/merge_requests` : 'merge_requests'; return RequestHelper.get(this, url, options); } @@ -33,10 +29,7 @@ class MergeRequests extends BaseService { cancelOnPipelineSucess(projectId, mergerequestId) { const [pId, mId] = [projectId, mergerequestId].map(encodeURIComponent); - return RequestHelper.put( - this, - `projects/${pId}/merge_requests/${mId}/cancel_merge_when_pipeline_succeeds`, - ); + return RequestHelper.put(this, `projects/${pId}/merge_requests/${mId}/cancel_merge_when_pipeline_succeeds`); } changes(projectId, mergerequestId) { @@ -77,18 +70,14 @@ class MergeRequests extends BaseService { editApprovals(projectId, { mergerequestId, ...options }) { const pId = encodeURIComponent(projectId); - const mergeRequest = mergerequestId - ? `merge_requests/${encodeURIComponent(mergerequestId)}/` - : ''; + const mergeRequest = mergerequestId ? `merge_requests/${encodeURIComponent(mergerequestId)}` : ''; return RequestHelper.get(this, `projects/${pId}/${mergeRequest}approvals`, options); } editApprovers(projectId, { mergerequestId, ...options }) { const pId = encodeURIComponent(projectId); - const mergeRequest = mergerequestId - ? `merge_requests/${encodeURIComponent(mergerequestId)}/` - : ''; + const mergeRequest = mergerequestId ? `merge_requests/${encodeURIComponent(mergerequestId)}` : ''; return RequestHelper.get(this, `projects/${pId}/${mergeRequest}approvers`, options); } diff --git a/src/services/UserGPGKeys.js b/src/services/UserGPGKeys.js index e868f471..8981162b 100644 --- a/src/services/UserGPGKeys.js +++ b/src/services/UserGPGKeys.js @@ -1,16 +1,14 @@ import { BaseService, RequestHelper } from '../infrastructure'; +const url = userId => (userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'); + class UserGPGKeys extends BaseService { all({ userId } = {}) { - const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; - - return RequestHelper.get(this, url); + return RequestHelper.get(this, url(userId)); } add(title, key, { userId } = {}) { - const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; - - return RequestHelper.post(this, url, { + return RequestHelper.post(this, url(userId), { title, key, }); @@ -18,16 +16,14 @@ class UserGPGKeys extends BaseService { show(keyId, { userId } = {}) { const kId = encodeURIComponent(keyId); - const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; - return RequestHelper.get(this, `${url}/${kId}`); + return RequestHelper.get(this, `${url(userId)}/${kId}`); } remove(keyId, { userId } = {}) { const kId = encodeURIComponent(keyId); - const url = userId ? `users/${encodeURIComponent(userId)}/gpg_keys` : 'users/gpg_keys'; - return RequestHelper.delete(this, `${url}/${kId}`); + return RequestHelper.delete(this, `${url(userId)}/${kId}`); } } From 0977803528cfcf7930f2fd6978fe5235e2bd3286 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Wed, 28 Mar 2018 15:37:21 -0400 Subject: [PATCH 47/90] Clean up --- src/index.js | 4 ++-- src/infrastructure/Namespace.js | 2 +- src/infrastructure/RequestHelper.js | 1 - src/templates/ResourceAccessRequests.js | 11 ++++++----- src/templates/ResourceCustomAttributes.js | 11 ++++++----- src/templates/ResourceMembers.js | 13 +++++++------ src/templates/ResourceMilestones.js | 15 ++++++++------- src/templates/ResourceNotes.js | 13 +++++++------ src/templates/ResourceVariables.js | 13 +++++++------ 9 files changed, 44 insertions(+), 39 deletions(-) diff --git a/src/index.js b/src/index.js index 4530a74a..2b9f60b3 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,6 @@ import Pick from 'lodash.pick'; import * as APIServices from './services'; -import { init } from './infrastructure/Namespace'; +import init from './infrastructure/Namespace'; // All seperatly export * from './services'; @@ -13,7 +13,7 @@ export const GroupsBundle = init(Pick(APIServices, [ 'GroupMembers', 'GroupMilestones', 'GroupProjects', - 'GroupVariables' + 'GroupVariables', ])); // Users diff --git a/src/infrastructure/Namespace.js b/src/infrastructure/Namespace.js index 2c2ba4dc..bc230ab1 100644 --- a/src/infrastructure/Namespace.js +++ b/src/infrastructure/Namespace.js @@ -10,4 +10,4 @@ function init(...services) { }; } -export { init }; +default export init; diff --git a/src/infrastructure/RequestHelper.js b/src/infrastructure/RequestHelper.js index 0794896e..5fee2a0e 100644 --- a/src/infrastructure/RequestHelper.js +++ b/src/infrastructure/RequestHelper.js @@ -25,7 +25,6 @@ function defaultRequest( class RequestHelper { static async get(service, endpoint, options = {}) { - const response = await Request.get(defaultRequest(service.url, endpoint, { headers: service.headers, qs: options, diff --git a/src/templates/ResourceAccessRequests.js b/src/templates/ResourceAccessRequests.js index 7f3732f3..752b8d80 100644 --- a/src/templates/ResourceAccessRequests.js +++ b/src/templates/ResourceAccessRequests.js @@ -1,3 +1,4 @@ +import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; export const ACCESS_LEVELS = { @@ -12,26 +13,26 @@ class ResourceAccessRequests extends BaseService { constructor(resourceType, ...args) { super(...args); - this.resourceType = resourceType; + this.url = URLJoin(this.url, resourceType); this.ACCESS_LEVELS = ACCESS_LEVELS; } all(resourceId) { const rId = encodeURIComponent(resourceId); - return RequestHelper.get(this, `${this.resourceType}/${rId}/access_requests`); + return RequestHelper.get(this, `${rId}/access_requests`); } request(resourceId) { const rId = encodeURIComponent(resourceId); - return RequestHelper.post(this, `${this.resourceType}/${rId}/access_requests`); + return RequestHelper.post(this, `${rId}/access_requests`); } approve(resourceId, userId, { accessLevel = 30 }) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); - return RequestHelper.post(this, `${this.resourceType}/${rId}/access_requests/${uId}/approve`, { + return RequestHelper.post(this, `${rId}/access_requests/${uId}/approve`, { accessLevel, }); } @@ -39,7 +40,7 @@ class ResourceAccessRequests extends BaseService { deny(resourceId, userId) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); - return RequestHelper.delete(this, `${this.resourceType}/${rId}/access_requests/${uId}/approve`); + return RequestHelper.delete(this, `${rId}/access_requests/${uId}`); } } diff --git a/src/templates/ResourceCustomAttributes.js b/src/templates/ResourceCustomAttributes.js index 136673df..a23d5224 100644 --- a/src/templates/ResourceCustomAttributes.js +++ b/src/templates/ResourceCustomAttributes.js @@ -1,22 +1,23 @@ +import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; class ResourceCustomAttributes extends BaseService { constructor(resourceType, ...args) { super(...args); - this.resourceType = resourceType; + this.url = URLJoin(this.url, resourceType); } all(resourceId) { const rId = encodeURIComponent(resourceId); - return RequestHelper.get(this, `${this.resourceType}/${rId}/custom_attributes`); + return RequestHelper.get(this, `${rId}/custom_attributes`); } set(resourceId, customAttributeId, value) { const [rId, cId] = [resourceId, customAttributeId].map(encodeURIComponent); - return RequestHelper.put(this, `${this.resourceType}/${rId}/custom_attributes/${cId}`, { + return RequestHelper.put(this, `${rId}/custom_attributes/${cId}`, { value, }); } @@ -24,13 +25,13 @@ class ResourceCustomAttributes extends BaseService { remove(resourceId, customAttributeId) { const [rId, cId] = [resourceId, customAttributeId].map(encodeURIComponent); - return RequestHelper.delete(this, `${this.resourceType}/${rId}/custom_attributes/${cId}`); + return RequestHelper.delete(this, `${rId}/custom_attributes/${cId}`); } show(resourceId, customAttributeId) { const [rId, cId] = [resourceId, customAttributeId].map(encodeURIComponent); - return RequestHelper.get(this, `${this.resourceType}/${rId}/custom_attributes/${cId}`); + return RequestHelper.get(this, `${rId}/custom_attributes/${cId}`); } } diff --git a/src/templates/ResourceMembers.js b/src/templates/ResourceMembers.js index b66dd02c..2b2ca6a5 100644 --- a/src/templates/ResourceMembers.js +++ b/src/templates/ResourceMembers.js @@ -1,22 +1,23 @@ +import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; class ResourceMembers extends BaseService { constructor(resourceType, ...args) { super(...args); - this.resourceType = resourceType; + this.url = URLJoin(this.url, resourceType); } all(resourceId) { const rId = encodeURIComponent(resourceId); - return RequestHelper.get(this, `${this.resourceType}/${rId}/members`); + return RequestHelper.get(this, `${rId}/members`); } add(resourceId, userId, accessLevel, options) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); - return RequestHelper.post(this, `${this.resourceType}/${rId}/members`, { + return RequestHelper.post(this, `${rId}/members`, { user_id: uId, access_level: parseInt(accessLevel, 10), ...options, @@ -26,7 +27,7 @@ class ResourceMembers extends BaseService { edit(resourceId, userId, accessLevel, options) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); - return RequestHelper.put(this, `${this.resourceType}/${rId}/members/${uId}`, { + return RequestHelper.put(this, `${rId}/members/${uId}`, { access_level: parseInt(accessLevel, 10), ...options, }); @@ -35,13 +36,13 @@ class ResourceMembers extends BaseService { show(resourceId, userId) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); - return RequestHelper.get(this, `${this.resourceType}/${rId}/members/${uId}`); + return RequestHelper.get(this, `${rId}/members/${uId}`); } remove(resourceId, userId) { const [rId, uId] = [resourceId, userId].map(encodeURIComponent); - return RequestHelper.delete(this, `${this.resourceType}/${rId}/members/${uId}`); + return RequestHelper.delete(this, `${rId}/members/${uId}`); } } diff --git a/src/templates/ResourceMilestones.js b/src/templates/ResourceMilestones.js index 7b0ee6e2..f908602f 100644 --- a/src/templates/ResourceMilestones.js +++ b/src/templates/ResourceMilestones.js @@ -1,46 +1,47 @@ +import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; class ResourceMilestones extends BaseService { constructor(resourceType, ...args) { super(...args); - this.resourceType = resourceType; + this.url = URLJoin(this.url, resourceType); } all(resourceId, options) { const rId = encodeURIComponent(resourceId); - return RequestHelper.get(this, `${this.resourceType}/${rId}/milestones`, options); + return RequestHelper.get(this, `${rId}/milestones`, options); } create(resourceId, title, options) { const rId = encodeURIComponent(resourceId); - return RequestHelper.post(this, `${this.resourceType}/${rId}/milestones`, options); + return RequestHelper.post(this, `${rId}/milestones`, options); } edit(resourceId, milestoneId, options) { const [rId, mId] = [resourceId, milestoneId].map(encodeURIComponent); - return RequestHelper.put(this, `${this.resourceType}/${rId}/milestones/${mId}`, options); + return RequestHelper.put(this, `${rId}/milestones/${mId}`, options); } issues(resourceId, milestoneId) { const [rId, mId] = [resourceId, milestoneId].map(encodeURIComponent); - return RequestHelper.get(this, `${this.resourceType}/${rId}/milestones/${mId}/issues`); + return RequestHelper.get(this, `${rId}/milestones/${mId}/issues`); } mergeRequests(resourceId, milestoneId) { const [rId, mId] = [resourceId, milestoneId].map(encodeURIComponent); - return RequestHelper.get(this, `${this.resourceType}/${rId}/milestones/${mId}/merge_requests`); + return RequestHelper.get(this, `${rId}/milestones/${mId}/merge_requests`); } show(resourceId, milestoneId) { const [rId, mId] = [resourceId, milestoneId].map(encodeURIComponent); - return RequestHelper.get(this, `${this.resourceType}/${rId}/milestones/${mId}`); + return RequestHelper.get(this, `${rId}/milestones/${mId}`); } } diff --git a/src/templates/ResourceNotes.js b/src/templates/ResourceNotes.js index d88161ee..b6b46bc5 100644 --- a/src/templates/ResourceNotes.js +++ b/src/templates/ResourceNotes.js @@ -1,10 +1,11 @@ +import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; class ResourceNotes extends BaseService { constructor(resourceType, resource2Type, ...args) { super(...args); - this.resourceType = resourceType; + this.url = URLJoin(this.url, resourceType); this.resource2Type = resource2Type; } @@ -13,7 +14,7 @@ class ResourceNotes extends BaseService { return RequestHelper.get( this, - `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes`, + `${rId}/${this.resource2Type}/${r2Id}/notes`, options, ); } @@ -25,7 +26,7 @@ class ResourceNotes extends BaseService { return RequestHelper.post( this, - `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes`, + `${rId}/${this.resource2Type}/${r2Id}/notes`, options, ); } @@ -37,7 +38,7 @@ class ResourceNotes extends BaseService { return RequestHelper.put( this, - `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, + `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, options, ); } @@ -47,7 +48,7 @@ class ResourceNotes extends BaseService { return RequestHelper.delete( this, - `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, + `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, ); } @@ -56,7 +57,7 @@ class ResourceNotes extends BaseService { return RequestHelper.get( this, - `${this.resourceType}/${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, + `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, ); } } diff --git a/src/templates/ResourceVariables.js b/src/templates/ResourceVariables.js index 2533a3b2..e437b417 100644 --- a/src/templates/ResourceVariables.js +++ b/src/templates/ResourceVariables.js @@ -1,40 +1,41 @@ +import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; class ResourceVariables extends BaseService { constructor(resourceType, ...args) { super(...args); - this.resourceType = resourceType; + this.url = URLJoin(this.url, resourceType); } all(resourceId) { const rId = encodeURIComponent(resourceId); - return RequestHelper.get(this, `${this.resourceType}/${rId}/s`); + return RequestHelper.get(this, `${rId}/variables`); } create(resourceId, options) { const rId = encodeURIComponent(resourceId); - return RequestHelper.post(this, `${this.resourceType}/${rId}/s`, options); + return RequestHelper.post(this, `${rId}/variables`, options); } edit(resourceId, keyId, options) { const [rId, kId] = [resourceId, keyId].map(encodeURIComponent); - return RequestHelper.put(this, `${this.resourceType}/${rId}/s/${kId}`, options); + return RequestHelper.put(this, `${rId}/variables/${kId}`, options); } show(resourceId, keyId) { const [rId, kId] = [resourceId, keyId].map(encodeURIComponent); - return RequestHelper.get(this, `${this.resourceType}/${rId}/s/${kId}`); + return RequestHelper.get(this, `${rId}/variables/${kId}`); } remove(resourceId, keyId) { const [rId, kId] = [resourceId, keyId].map(encodeURIComponent); - return RequestHelper.delete(this, `${this.resourceType}/${rId}/s/${kId}`); + return RequestHelper.delete(this, `${rId}/variables/${kId}`); } } From 8d7fecf01a4de807d24e0b340c9501a8990b4f55 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Wed, 28 Mar 2018 16:14:31 -0400 Subject: [PATCH 48/90] Fixing export syntax --- src/infrastructure/Namespace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/infrastructure/Namespace.js b/src/infrastructure/Namespace.js index bc230ab1..d833ef3c 100644 --- a/src/infrastructure/Namespace.js +++ b/src/infrastructure/Namespace.js @@ -10,4 +10,4 @@ function init(...services) { }; } -default export init; +export default init; From aeebf67f571f5fd803e0c06dc9bf78c860396a14 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Wed, 28 Mar 2018 16:33:33 -0400 Subject: [PATCH 49/90] More cleaning --- src/services/UserEmails.js | 13 +++++-------- src/services/UserKeys.js | 13 +++++-------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/services/UserEmails.js b/src/services/UserEmails.js index 40600a88..602d11b6 100644 --- a/src/services/UserEmails.js +++ b/src/services/UserEmails.js @@ -1,16 +1,14 @@ import { BaseService, RequestHelper } from '../infrastructure'; +const url = userId => (userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'); + class UserEmails extends BaseService { all({ userId } = {}) { - const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; - - return RequestHelper.get(this, url); + return RequestHelper.get(this, url(userId)); } add(email, { userId } = {}) { - const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; - - return RequestHelper.post(this, url, { + return RequestHelper.post(this, url(userId), { email, }); } @@ -23,9 +21,8 @@ class UserEmails extends BaseService { remove(emailId, { userId } = {}) { const eId = encodeURIComponent(emailId); - const url = userId ? `users/${encodeURIComponent(userId)}/emails` : 'users/emails'; - return RequestHelper.delete(this, `${url}/${eId}`); + return RequestHelper.delete(this, `${url(userId)}/${eId}`); } } diff --git a/src/services/UserKeys.js b/src/services/UserKeys.js index a3453964..2de0da90 100644 --- a/src/services/UserKeys.js +++ b/src/services/UserKeys.js @@ -1,16 +1,14 @@ import { BaseService, RequestHelper } from '../infrastructure'; +const url = userId => (userId ? `users/${encodeURIComponent(userId)}/keys` : 'users/keys'); + class UserKeys extends BaseService { all({ userId }) { - const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'user/keys'; - - return RequestHelper.get(this, url); + return RequestHelper.get(this, url(userId)); } create(title, key, { userId } = {}) { - const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'user/keys'; - - return RequestHelper.post(this, url, { + return RequestHelper.post(this, url(userId), { title, key, }); @@ -24,9 +22,8 @@ class UserKeys extends BaseService { remove(keyId, { userId } = {}) { const kId = encodeURIComponent(keyId); - const url = userId ? `users/${encodeURIComponent(userId)}/keys` : 'user/keys'; - return RequestHelper.delete(this, `${url}/${kId}`); + return RequestHelper.delete(this, `${url(userId)}/${kId}`); } } From 73367639dad98d93156427d117a0825f11620cc7 Mon Sep 17 00:00:00 2001 From: Justin Dalrymple Date: Wed, 28 Mar 2018 16:48:54 -0400 Subject: [PATCH 50/90] Updating npmignore file --- .npmignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.npmignore b/.npmignore index c578d0a2..475c70bf 100644 --- a/.npmignore +++ b/.npmignore @@ -1,3 +1,3 @@ node_modules -logs npm-debug.log +dist \ No newline at end of file From 34e3779e7c24fa80f475d3c24080c12cecea1d59 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 13:40:34 -0400 Subject: [PATCH 51/90] Adding extra endpoints to commits --- src/services/Commits.js | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/services/Commits.js b/src/services/Commits.js index 61b0cab8..f0ea6f0f 100644 --- a/src/services/Commits.js +++ b/src/services/Commits.js @@ -7,12 +7,29 @@ class Commits extends BaseService { return RequestHelper.get(this, `projects/${pId}/repository/commits`, options); } + cherryPick(projectId, sha, branch) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/repository/commits/${sha}/cherry_pick`, { branch }); + } + comments(projectId, sha) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}/comments`); } + create(projectId, branch, message, actions = [], options) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/repository/commits`, { + branch, + commitMessage: message, + actions, + ...options, + }); + } + createComment(projectId, sha, note, options) { const pId = encodeURIComponent(projectId); @@ -28,13 +45,25 @@ class Commits extends BaseService { return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}/diff`); } + editStatus(projectId, sha, options) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}/statuses`, options); + } + + references(projectId, sha) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}/refs`); + } + show(projectId, sha) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}`); } - statuses(projectId, sha, options) { + status(projectId, sha, options) { const pId = encodeURIComponent(projectId); return RequestHelper.get(this, `projects/${pId}/repository/commits/${sha}/statuses`, options); From 0cd148527a22ae848965cb0a2dfc0c2852b56a86 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 14:37:12 -0400 Subject: [PATCH 52/90] Adding AwardEmojis --- src/services/IssueAwardEmojis.js | 9 ++++++ src/services/MergeRequestAwardEmojis.js | 9 ++++++ src/services/SnippetAwardEmojis.js | 9 ++++++ src/templates/ResourceAwardEmojis.js | 39 +++++++++++++++++++++++++ src/templates/index.js | 1 + 5 files changed, 67 insertions(+) create mode 100644 src/services/IssueAwardEmojis.js create mode 100644 src/services/MergeRequestAwardEmojis.js create mode 100644 src/services/SnippetAwardEmojis.js create mode 100644 src/templates/ResourceAwardEmojis.js diff --git a/src/services/IssueAwardEmojis.js b/src/services/IssueAwardEmojis.js new file mode 100644 index 00000000..02d237bb --- /dev/null +++ b/src/services/IssueAwardEmojis.js @@ -0,0 +1,9 @@ +import { ResourceAwardEmojis } from '../templates'; + +class IssueAwardEmojis extends ResourceAwardEmojis { + constructor(options) { + super('issues', options); + } +} + +export default IssueAwardEmojis; diff --git a/src/services/MergeRequestAwardEmojis.js b/src/services/MergeRequestAwardEmojis.js new file mode 100644 index 00000000..0ed72027 --- /dev/null +++ b/src/services/MergeRequestAwardEmojis.js @@ -0,0 +1,9 @@ +import { ResourceAwardEmojis } from '../templates'; + +class MergeRequestAwardEmojis extends ResourceAwardEmojis { + constructor(options) { + super('issues', options); + } +} + +export default MergeRequestAwardEmojis; diff --git a/src/services/SnippetAwardEmojis.js b/src/services/SnippetAwardEmojis.js new file mode 100644 index 00000000..af1bda79 --- /dev/null +++ b/src/services/SnippetAwardEmojis.js @@ -0,0 +1,9 @@ +import { ResourceAwardEmojis } from '../templates'; + +class SnippetAwardEmojis extends ResourceAwardEmojis { + constructor(options) { + super('issues', options); + } +} + +export default SnippetAwardEmojis; diff --git a/src/templates/ResourceAwardEmojis.js b/src/templates/ResourceAwardEmojis.js new file mode 100644 index 00000000..d1b42f37 --- /dev/null +++ b/src/templates/ResourceAwardEmojis.js @@ -0,0 +1,39 @@ +import URLJoin from 'url-join'; +import { BaseService, RequestHelper } from '../infrastructure'; + +const url = (projectId, resourceId, noteId) => { + const [pId, rId] = [projectId, resourceId].map(encodeURIComponent); + + if (noteId) { + return `${pId}/${this.resourceId}/${rId}/notes/${encodeURIComponent(noteId)}/award_emoji`; + } + + return `${pId}/${this.resourceId}/${rId}/award_emoji`; +}; + +class ResourceAwardsEmojis extends BaseService { + constructor(resourceType, ...args) { + super(...args); + + this.url = URLJoin(this.url, 'projects'); + this.resourceType = resourceType; + } + + all(projectId, resourceId, options, noteId) { + return RequestHelper.get(this, url(projectId, resourceId, noteId), options); + } + + create(projectId, resourceId, name, noteId) { + return RequestHelper.post(this, url(projectId, resourceId, noteId), { name }); + } + + remove(projectId, resourceId, awardId, noteId) { + return RequestHelper.delete(this, url(projectId, resourceId, noteId)); + } + + show(projectId, resourceId, awardId, noteId) { + return RequestHelper.get(this, url(projectId, resourceId, noteId)); + } +} + +export default ResourceAwardsEmojis; diff --git a/src/templates/index.js b/src/templates/index.js index ac4d25c4..3e1fd6a7 100644 --- a/src/templates/index.js +++ b/src/templates/index.js @@ -4,3 +4,4 @@ export ResourceMembers from './ResourceMembers'; export ResourceMilestones from './ResourceMilestones'; export ResourceCustomAttributes from './ResourceCustomAttributes'; export ResourceVariables from './ResourceVariables'; +export ResourceAwardEmojis from './ResourceAwardEmojis'; From 22f825f17e9c01999a2dd1d381980ed27bb88853 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 14:47:32 -0400 Subject: [PATCH 53/90] -Fixed errors with enviroment edits -Added broadcast messages -update exports --- src/services/BroadcastMessages.js | 31 +++++++++++++++++++ src/services/Environments.js | 2 +- ...Emojis.js => ProjectSnippetAwardEmojis.js} | 4 +-- src/services/index.js | 4 +++ 4 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 src/services/BroadcastMessages.js rename src/services/{SnippetAwardEmojis.js => ProjectSnippetAwardEmojis.js} (52%) diff --git a/src/services/BroadcastMessages.js b/src/services/BroadcastMessages.js new file mode 100644 index 00000000..9b48ae8a --- /dev/null +++ b/src/services/BroadcastMessages.js @@ -0,0 +1,31 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class BroadcastMessages extends BaseService { + all(options) { + return RequestHelper.get(this, 'broadcast_messages', options); + } + + create(options) { + return RequestHelper.post(this, 'broadcast_messages', options); + } + + edit(broadcastMessageId, options) { + const bId = encodeURIComponent(broadcastMessageId); + + return RequestHelper.put(this, `broadcast_messages/${bId}`, options); + } + + remove(broadcastMessageId) { + const bId = encodeURIComponent(broadcastMessageId); + + return RequestHelper.delete(this, `broadcast_messages/${bId}`); + } + + show(broadcastMessageId, options) { + const bId = encodeURIComponent(broadcastMessageId); + + return RequestHelper.get(this, `broadcast_messages/${bId}`, options); + } +} + +export default BroadcastMessages; diff --git a/src/services/Environments.js b/src/services/Environments.js index 4c66796b..b8e8a774 100644 --- a/src/services/Environments.js +++ b/src/services/Environments.js @@ -10,7 +10,7 @@ class Environments extends BaseService { create(projectId, options) { const pId = encodeURIComponent(projectId); - return RequestHelper.put(this, `projects/${pId}/environments`, options); + return RequestHelper.post(this, `projects/${pId}/environments`, options); } edit(projectId, environmentId, options) { diff --git a/src/services/SnippetAwardEmojis.js b/src/services/ProjectSnippetAwardEmojis.js similarity index 52% rename from src/services/SnippetAwardEmojis.js rename to src/services/ProjectSnippetAwardEmojis.js index af1bda79..c3be063e 100644 --- a/src/services/SnippetAwardEmojis.js +++ b/src/services/ProjectSnippetAwardEmojis.js @@ -1,9 +1,9 @@ import { ResourceAwardEmojis } from '../templates'; -class SnippetAwardEmojis extends ResourceAwardEmojis { +class ProjectSnippetAwardEmojis extends ResourceAwardEmojis { constructor(options) { super('issues', options); } } -export default SnippetAwardEmojis; +export default ProjectSnippetAwardEmojis; diff --git a/src/services/index.js b/src/services/index.js index 6bc9889a..44e64e78 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -20,9 +20,11 @@ export Commits from './Commits'; export DeployKeys from './DeployKeys'; export Environments from './Environments'; export Issues from './Issues'; +export IssueAwardEmojis from './IssueAwardEmojis'; export Jobs from './Jobs'; export Labels from './Labels'; export MergeRequests from './MergeRequests'; +export MergeRequestAwardEmojis from './MergeRequestAwardEmojis'; export MergeRequestNotes from './MergeRequestNotes'; export Pipelines from './Pipelines'; export Projects from './Projects'; @@ -32,6 +34,7 @@ export ProjectHooks from './ProjectHooks'; export ProjectMembers from './ProjectMembers'; export ProjectMilestones from './ProjectMilestones'; export ProjectSnippets from './ProjectSnippets'; +export ProjectSnippetAwardEmojis from './ProjectSnippetAwardEmojis'; export ProtectedBranches from './ProtectedBranches'; export ProjectVariables from './ProjectVariables'; export Repositories from './Repositories'; @@ -45,3 +48,4 @@ export Triggers from './Triggers'; // General export SystemHooks from './SystemHooks'; export Events from './Events'; +export BroadcastMessages from './BroadcastMessages'; From f4da9d8ce9f13eba3eb960249bbf845fcb5a3df6 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 14:53:24 -0400 Subject: [PATCH 54/90] Adding deployments API --- src/index.js | 1 + src/services/Deployments.js | 17 +++++++++++++++++ src/services/index.js | 1 + 3 files changed, 19 insertions(+) create mode 100644 src/services/Deployments.js diff --git a/src/index.js b/src/index.js index 2b9f60b3..aa207f80 100644 --- a/src/index.js +++ b/src/index.js @@ -30,6 +30,7 @@ export const ProjectsBundle = init(Pick(APIServices, [ 'Branches', 'Commits', 'DeployKeys', + 'Deployments', 'Environments', 'Issues', 'Jobs', diff --git a/src/services/Deployments.js b/src/services/Deployments.js new file mode 100644 index 00000000..08c5c878 --- /dev/null +++ b/src/services/Deployments.js @@ -0,0 +1,17 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class Deployments extends BaseService { + all(projectId, options) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/deployments`, options); + } + + show(projectId, deploymentId) { + const [pId, dId] = [projectId, deploymentId].map(encodeURIComponent); + + return RequestHelper.post(this, `projects/${pId}/deployments/${dId}`); + } +} + +export default Deployments; diff --git a/src/services/index.js b/src/services/index.js index 44e64e78..2a2c8c41 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -17,6 +17,7 @@ export UserGPGKeys from './UserGPGKeys'; // Projects export Branches from './Branches'; export Commits from './Commits'; +export Deployments from './Deployments'; export DeployKeys from './DeployKeys'; export Environments from './Environments'; export Issues from './Issues'; From 8b606467c0bee2023c83c7b5745c7c1cfb730a33 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 15:14:32 -0400 Subject: [PATCH 55/90] Epics and EpicIssues --- src/index.js | 2 ++ src/services/EpicIssues.js | 29 +++++++++++++++++++++++++++++ src/services/Epics.js | 35 +++++++++++++++++++++++++++++++++++ src/services/index.js | 2 ++ 4 files changed, 68 insertions(+) create mode 100644 src/services/EpicIssues.js create mode 100644 src/services/Epics.js diff --git a/src/index.js b/src/index.js index aa207f80..6ab30449 100644 --- a/src/index.js +++ b/src/index.js @@ -14,6 +14,8 @@ export const GroupsBundle = init(Pick(APIServices, [ 'GroupMilestones', 'GroupProjects', 'GroupVariables', + 'Epics', + 'EpicIssues', ])); // Users diff --git a/src/services/EpicIssues.js b/src/services/EpicIssues.js new file mode 100644 index 00000000..d663b77d --- /dev/null +++ b/src/services/EpicIssues.js @@ -0,0 +1,29 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class EpicIssues extends BaseService { + all(groupId, epicId) { + const [gId, eId] = [groupId, epicId].map(encodeURIComponent); + + return RequestHelper.get(this, `groups/${gId}/epics/${eId}/issues`); + } + + assign(groupId, epicId, issueId) { + const [gId, eId, iId] = [groupId, epicId, issueId].map(encodeURIComponent); + + return RequestHelper.put(this, `groups/${gId}/epics/${eId}/issues/${iId}`); + } + + edit(groupId, epicId, issueId, options) { + const [gId, eId, iId] = [groupId, epicId, issueId].map(encodeURIComponent); + + return RequestHelper.delete(this, `groups/${gId}/epics/${eId}/issues/${iId}`, options); + } + + remove(groupId, epicId, issueId) { + const [gId, eId, iId] = [groupId, epicId, issueId].map(encodeURIComponent); + + return RequestHelper.delete(this, `groups/${gId}/epics/${eId}/issues/${iId}`); + } +} + +export default EpicIssues; diff --git a/src/services/Epics.js b/src/services/Epics.js new file mode 100644 index 00000000..9c292309 --- /dev/null +++ b/src/services/Epics.js @@ -0,0 +1,35 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class Epics extends BaseService { + all(groupId) { + const gId = encodeURIComponent(groupId); + + return RequestHelper.get(this, `groups/${gId}/epics`); + } + + create(groupId, title, options) { + const gId = encodeURIComponent(groupId); + + return RequestHelper.post(this, `groups/${gId}/epics`, { title, ...options }); + } + + edit(groupId, epicId, options) { + const [gId, eId] = [groupId, epicId].map(encodeURIComponent); + + return RequestHelper.put(this, `groups/${gId}/epics/${eId}`, options); + } + + remove(groupId, epicId) { + const [gId, eId] = [groupId, epicId].map(encodeURIComponent); + + return RequestHelper.delete(this, `groups/${gId}/epics/${eId}`); + } + + show(groupId, epicId) { + const [gId, eId] = [groupId, epicId].map(encodeURIComponent); + + return RequestHelper.get(this, `groups/${gId}/epics/${eId}`); + } +} + +export default Epics; diff --git a/src/services/index.js b/src/services/index.js index 2a2c8c41..2f6e1a26 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -6,6 +6,8 @@ export GroupMembers from './GroupMembers'; export GroupMilestones from './GroupMilestones'; export GroupProjects from './GroupProjects'; export GroupVariables from './GroupVariables'; +export Epics from './Epics'; +export EpicIssues from './EpicIssues'; // Users export Users from './Users'; From 913f8863915dbe490a423e96f5e21a29567c2357 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 15:26:34 -0400 Subject: [PATCH 56/90] Adding Feature Flags --- src/services/FeatureFlags.js | 15 +++++++++++++++ src/services/index.js | 1 + 2 files changed, 16 insertions(+) create mode 100644 src/services/FeatureFlags.js diff --git a/src/services/FeatureFlags.js b/src/services/FeatureFlags.js new file mode 100644 index 00000000..6105fd91 --- /dev/null +++ b/src/services/FeatureFlags.js @@ -0,0 +1,15 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class FeatureFlags extends BaseService { + all(options) { + return RequestHelper.get(this, 'features', options); + } + + set(name, options) { + const encodedName = encodeURIComponent(name); + + return RequestHelper.post(this, `features/${encodedName}`, options); + } +} + +export default FeatureFlags; diff --git a/src/services/index.js b/src/services/index.js index 2f6e1a26..bc5801f1 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -52,3 +52,4 @@ export Triggers from './Triggers'; export SystemHooks from './SystemHooks'; export Events from './Events'; export BroadcastMessages from './BroadcastMessages'; +export FeatureFlags from './FeatureFlags'; From 590a32f2ed5396901a652b95fbcffda9e3dfa5d1 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 15:26:39 -0400 Subject: [PATCH 57/90] Changing create to award for award emojis --- src/templates/ResourceAwardEmojis.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/templates/ResourceAwardEmojis.js b/src/templates/ResourceAwardEmojis.js index d1b42f37..b516469d 100644 --- a/src/templates/ResourceAwardEmojis.js +++ b/src/templates/ResourceAwardEmojis.js @@ -23,7 +23,7 @@ class ResourceAwardsEmojis extends BaseService { return RequestHelper.get(this, url(projectId, resourceId, noteId), options); } - create(projectId, resourceId, name, noteId) { + award(projectId, resourceId, name, noteId) { return RequestHelper.post(this, url(projectId, resourceId, noteId), { name }); } From bfb2d07b08337075449e5f5492a6ed14924083b3 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 15:41:43 -0400 Subject: [PATCH 58/90] Adding Keys API --- src/services/Keys.js | 11 +++++++++++ src/services/index.js | 5 +++-- 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 src/services/Keys.js diff --git a/src/services/Keys.js b/src/services/Keys.js new file mode 100644 index 00000000..ece15fc6 --- /dev/null +++ b/src/services/Keys.js @@ -0,0 +1,11 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class Keys extends BaseService { + show(keyId) { + const kId = encodeURIComponent(keyId); + + return RequestHelper.get(this, `keys/${kId}`); + } +} + +export default Keys; diff --git a/src/services/index.js b/src/services/index.js index bc5801f1..131e835d 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -49,7 +49,8 @@ export Todos from './Todos'; export Triggers from './Triggers'; // General -export SystemHooks from './SystemHooks'; -export Events from './Events'; export BroadcastMessages from './BroadcastMessages'; +export Events from './Events'; export FeatureFlags from './FeatureFlags'; +export Keys from './Keys'; +export SystemHooks from './SystemHooks'; From 0978a1375811803779860635962312255d654c71 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 17:10:24 -0400 Subject: [PATCH 59/90] Updating readme and adding GeoNodes --- README.md | 12 +++++++++- src/services/GeoNodes.js | 47 ++++++++++++++++++++++++++++++++++++++++ src/services/index.js | 1 + 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/services/GeoNodes.js diff --git a/README.md b/README.md index 07629f41..40b1de00 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,8 @@ GroupMembers GroupMilestones GroupProjects GroupVariables +Epics +EpicIssues // Users Users @@ -58,12 +60,15 @@ UserGPGKeys // Projects Branches Commits +Deployments DeployKeys Environments Issues +IssueAwardEmojis Jobs Labels MergeRequests +MergeRequestAwardEmojis MergeRequestNotes Pipelines Projects @@ -73,6 +78,7 @@ ProjectHooks ProjectMembers ProjectMilestones ProjectSnippets +ProjectSnippetAwardEmojis ProtectedBranches ProjectVariables Repositories @@ -80,12 +86,16 @@ RepositoryFiles Runners Services Tags +Todos Triggers // General +BroadcastMessages Events +FeatureFlags +GeoNodes +Keys SystemHooks -Todos ``` ### Import diff --git a/src/services/GeoNodes.js b/src/services/GeoNodes.js new file mode 100644 index 00000000..1ac8fd0b --- /dev/null +++ b/src/services/GeoNodes.js @@ -0,0 +1,47 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class GeoNodes extends BaseService { + all(options) { + return RequestHelper.get(this, 'geo_nodes', options); + } + + create(geonodeId, options) { + const gId = encodeURIComponent(geonodeId); + + return RequestHelper.post(this, `geo_nodes/${gId}`, options); + } + + edit(geonodeId, options) { + const gId = encodeURIComponent(geonodeId); + + return RequestHelper.put(this, `geo_nodes/${gId}`, options); + } + + failures(options) { + return RequestHelper.post(this, 'geo_nodes/current/failures', options); + } + + repair(geonodeId, options) { + const gId = encodeURIComponent(geonodeId); + + return RequestHelper.delete(this, `geo_nodes/${gId}`, options); + } + + show(geonodeId, options) { + const gId = encodeURIComponent(geonodeId); + + return RequestHelper.get(this, `geo_nodes/${gId}`, options); + } + + status(geonodeId, options) { + const gId = encodeURIComponent(geonodeId); + + return RequestHelper.get(this, `geo_nodes/${gId}/status`, options); + } + + statuses(options) { + return RequestHelper.get(this, 'geo_nodes/statuses', options); + } +} + +export default GeoNodes; diff --git a/src/services/index.js b/src/services/index.js index 131e835d..a819b818 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -52,5 +52,6 @@ export Triggers from './Triggers'; export BroadcastMessages from './BroadcastMessages'; export Events from './Events'; export FeatureFlags from './FeatureFlags'; +export GeoNodes from './GeoNodes'; export Keys from './Keys'; export SystemHooks from './SystemHooks'; From fc57b42b77d1489cb52de607d41408a71e28884d Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 17:25:23 -0400 Subject: [PATCH 60/90] Adding gitignore templates --- README.md | 1 + src/services/GitignoreTemplates.js | 15 +++++++++++++++ src/services/index.js | 1 + 3 files changed, 17 insertions(+) create mode 100644 src/services/GitignoreTemplates.js diff --git a/README.md b/README.md index 40b1de00..c1b38fc9 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,7 @@ BroadcastMessages Events FeatureFlags GeoNodes +GitignoreTemplates Keys SystemHooks diff --git a/src/services/GitignoreTemplates.js b/src/services/GitignoreTemplates.js new file mode 100644 index 00000000..3c49863c --- /dev/null +++ b/src/services/GitignoreTemplates.js @@ -0,0 +1,15 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class GitignoreTemplates extends BaseService { + all(options) { + return RequestHelper.get(this, 'templates/gitignores', options); + } + + show(gitignoreId) { + const gId = encodeURIComponent(gitignoreId); + + return RequestHelper.post(this, `templates/gitignores/${gId}`); + } +} + +export default GitignoreTemplates; diff --git a/src/services/index.js b/src/services/index.js index a819b818..ff80d716 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -53,5 +53,6 @@ export BroadcastMessages from './BroadcastMessages'; export Events from './Events'; export FeatureFlags from './FeatureFlags'; export GeoNodes from './GeoNodes'; +export GitignoreTemplates from './GitignoreTemplates'; export Keys from './Keys'; export SystemHooks from './SystemHooks'; From 908c46a36d9a3579635444c2e735f52af259e79a Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 17:28:23 -0400 Subject: [PATCH 61/90] Adding gitlab ci yml templates --- README.md | 1 + src/services/GitLabCIYMLTemplates.js | 15 +++++++++++++++ src/services/index.js | 1 + 3 files changed, 17 insertions(+) create mode 100644 src/services/GitLabCIYMLTemplates.js diff --git a/README.md b/README.md index c1b38fc9..aebc106d 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,7 @@ Events FeatureFlags GeoNodes GitignoreTemplates +GitLabCIYMLTemplates Keys SystemHooks diff --git a/src/services/GitLabCIYMLTemplates.js b/src/services/GitLabCIYMLTemplates.js new file mode 100644 index 00000000..e849415b --- /dev/null +++ b/src/services/GitLabCIYMLTemplates.js @@ -0,0 +1,15 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class GitLabCIYMLTemplates extends BaseService { + all(options) { + return RequestHelper.get(this, 'templates/gitlab_ci_ymls', options); + } + + show(ciymlId) { + const gId = encodeURIComponent(ciymlId); + + return RequestHelper.post(this, `templates/gitlab_ci_ymls/${gId}`); + } +} + +export default GitLabCIYMLTemplates; diff --git a/src/services/index.js b/src/services/index.js index ff80d716..67c1a2d5 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -54,5 +54,6 @@ export Events from './Events'; export FeatureFlags from './FeatureFlags'; export GeoNodes from './GeoNodes'; export GitignoreTemplates from './GitignoreTemplates'; +export GitLabCIYMLTemplates from './GitLabCIYMLTemplates'; export Keys from './Keys'; export SystemHooks from './SystemHooks'; From 0a8fc61949dc894d5fc4c2583d96ef2b3fc5a884 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 17:40:27 -0400 Subject: [PATCH 62/90] Adding group badges --- README.md | 1 + src/index.js | 1 + src/services/GroupBadges.js | 41 +++++++++++++++++++++++++++++++++++++ src/services/index.js | 1 + 4 files changed, 44 insertions(+) create mode 100644 src/services/GroupBadges.js diff --git a/README.md b/README.md index aebc106d..af3b1ae2 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ The API's that are currently supported are: // Groups Groups GroupAccessRequests +GroupBadges GroupCustomAttributes GroupMembers GroupMilestones diff --git a/src/index.js b/src/index.js index 6ab30449..1c6e0a89 100644 --- a/src/index.js +++ b/src/index.js @@ -9,6 +9,7 @@ export * from './services'; export const GroupsBundle = init(Pick(APIServices, [ 'Groups', 'GroupAccessRequests', + 'GroupBadges', 'GroupCustomAttributes', 'GroupMembers', 'GroupMilestones', diff --git a/src/services/GroupBadges.js b/src/services/GroupBadges.js new file mode 100644 index 00000000..7d40cbdd --- /dev/null +++ b/src/services/GroupBadges.js @@ -0,0 +1,41 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class GroupBadges extends BaseService { + add(groupId, options) { + const gId = encodeURIComponent(groupId); + + return RequestHelper.post(this, `groups/${gId}/badges`, options); + } + + all(groupId, options) { + const gId = encodeURIComponent(groupId); + + return RequestHelper.get(this, `groups/${gId}/badges`, options); + } + + edit(groupId, badgeId, options) { + const [gId, bId] = [groupId, badgeId].map(encodeURIComponent); + + return RequestHelper.put(this, `groups/${gId}/badges/${bId}`, options); + } + + preview(groupId, linkUrl, imageUrl) { + const gId = encodeURIComponent(groupId); + + return RequestHelper.get(this, `groups/${gId}/badges/render`, { linkUrl, imageUrl }); + } + + remove(groupId, badgeId) { + const [gId, bId] = [groupId, badgeId].map(encodeURIComponent); + + return RequestHelper.delete(this, `groups/${gId}/badges/${bId}`); + } + + show(groupId, badgeId) { + const [gId, bId] = [groupId, badgeId].map(encodeURIComponent); + + return RequestHelper.get(this, `groups/${gId}/badges/${bId}`); + } +} + +export default GroupBadges; diff --git a/src/services/index.js b/src/services/index.js index 67c1a2d5..4b3e30ab 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -1,6 +1,7 @@ // Groups export Groups from './Groups'; export GroupAccessRequests from './GroupAccessRequests'; +export GroupBadges from './GroupBadges'; export GroupCustomAttributes from './GroupCustomAttributes'; export GroupMembers from './GroupMembers'; export GroupMilestones from './GroupMilestones'; From 88de8b987991f6a8271ab5f482665602e508c181 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 22:57:13 -0400 Subject: [PATCH 63/90] Project badges --- src/index.js | 1 + src/services/GroupBadges.js | 40 +++------------------------ src/services/ProjectBadges.js | 9 +++++++ src/templates/ResourceBadges.js | 48 +++++++++++++++++++++++++++++++++ src/templates/index.js | 1 + 5 files changed, 63 insertions(+), 36 deletions(-) create mode 100644 src/services/ProjectBadges.js create mode 100644 src/templates/ResourceBadges.js diff --git a/src/index.js b/src/index.js index 1c6e0a89..8f0abc54 100644 --- a/src/index.js +++ b/src/index.js @@ -43,6 +43,7 @@ export const ProjectsBundle = init(Pick(APIServices, [ 'Pipelines', 'Projects', 'ProjectAccessRequests', + 'ProjectBadges', 'ProjectCustomAttributes', 'ProjectHooks', 'ProjectMembers', diff --git a/src/services/GroupBadges.js b/src/services/GroupBadges.js index 7d40cbdd..3ff390e9 100644 --- a/src/services/GroupBadges.js +++ b/src/services/GroupBadges.js @@ -1,40 +1,8 @@ -import { BaseService, RequestHelper } from '../infrastructure'; +import { ResourceBadges } from '../templates'; -class GroupBadges extends BaseService { - add(groupId, options) { - const gId = encodeURIComponent(groupId); - - return RequestHelper.post(this, `groups/${gId}/badges`, options); - } - - all(groupId, options) { - const gId = encodeURIComponent(groupId); - - return RequestHelper.get(this, `groups/${gId}/badges`, options); - } - - edit(groupId, badgeId, options) { - const [gId, bId] = [groupId, badgeId].map(encodeURIComponent); - - return RequestHelper.put(this, `groups/${gId}/badges/${bId}`, options); - } - - preview(groupId, linkUrl, imageUrl) { - const gId = encodeURIComponent(groupId); - - return RequestHelper.get(this, `groups/${gId}/badges/render`, { linkUrl, imageUrl }); - } - - remove(groupId, badgeId) { - const [gId, bId] = [groupId, badgeId].map(encodeURIComponent); - - return RequestHelper.delete(this, `groups/${gId}/badges/${bId}`); - } - - show(groupId, badgeId) { - const [gId, bId] = [groupId, badgeId].map(encodeURIComponent); - - return RequestHelper.get(this, `groups/${gId}/badges/${bId}`); +class GroupBadges extends ResourceBadges { + constructor(options) { + super('groups', options); } } diff --git a/src/services/ProjectBadges.js b/src/services/ProjectBadges.js new file mode 100644 index 00000000..db18dd5e --- /dev/null +++ b/src/services/ProjectBadges.js @@ -0,0 +1,9 @@ +import { ResourceBadges } from '../templates'; + +class ProjectBadges extends ResourceBadges { + constructor(options) { + super('projects', options); + } +} + +export default ProjectBadges; diff --git a/src/templates/ResourceBadges.js b/src/templates/ResourceBadges.js new file mode 100644 index 00000000..00993ca0 --- /dev/null +++ b/src/templates/ResourceBadges.js @@ -0,0 +1,48 @@ +import URLJoin from 'url-join'; +import { BaseService, RequestHelper } from '../infrastructure'; + +class ResourceBadges extends BaseService { + constructor(resourceType, ...args) { + super(...args); + + this.url = URLJoin(this.url, resourceType); + } + + add(resourceId, options) { + const rId = encodeURIComponent(resourceId); + + return RequestHelper.post(this, `${rId}/badges`, options); + } + + all(resourceId, options) { + const rId = encodeURIComponent(resourceId); + + return RequestHelper.get(this, `${rId}/badges`, options); + } + + edit(resourceId, badgeId, options) { + const [rId, bId] = [resourceId, badgeId].map(encodeURIComponent); + + return RequestHelper.put(this, `${rId}/badges/${bId}`, options); + } + + preview(resourceId, linkUrl, imageUrl) { + const rId = encodeURIComponent(resourceId); + + return RequestHelper.get(this, `${rId}/badges/render`, { linkUrl, imageUrl }); + } + + remove(resourceId, badgeId) { + const [rId, bId] = [resourceId, badgeId].map(encodeURIComponent); + + return RequestHelper.delete(this, `${rId}/badges/${bId}`); + } + + show(resourceId, badgeId) { + const [rId, bId] = [resourceId, badgeId].map(encodeURIComponent); + + return RequestHelper.get(this, `${rId}/badges/${bId}`); + } +} + +export default ResourceBadges; diff --git a/src/templates/index.js b/src/templates/index.js index 3e1fd6a7..2943398e 100644 --- a/src/templates/index.js +++ b/src/templates/index.js @@ -5,3 +5,4 @@ export ResourceMilestones from './ResourceMilestones'; export ResourceCustomAttributes from './ResourceCustomAttributes'; export ResourceVariables from './ResourceVariables'; export ResourceAwardEmojis from './ResourceAwardEmojis'; +export ResourceBadges from './ResourceBadges'; From 28aeae553498f94680e18f9725e3d65b1937ec87 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 23:29:10 -0400 Subject: [PATCH 64/90] Adding issue boards --- src/index.js | 2 + src/services/GroupIssueBoards.js | 9 ++++ src/services/ProjectIssueBoards.js | 9 ++++ src/services/index.js | 2 + src/templates/ResourceIssueBoards.js | 72 ++++++++++++++++++++++++++++ src/templates/ResourceNotes.js | 28 ++--------- src/templates/index.js | 1 + 7 files changed, 100 insertions(+), 23 deletions(-) create mode 100644 src/services/GroupIssueBoards.js create mode 100644 src/services/ProjectIssueBoards.js create mode 100644 src/templates/ResourceIssueBoards.js diff --git a/src/index.js b/src/index.js index 8f0abc54..810ff379 100644 --- a/src/index.js +++ b/src/index.js @@ -11,6 +11,7 @@ export const GroupsBundle = init(Pick(APIServices, [ 'GroupAccessRequests', 'GroupBadges', 'GroupCustomAttributes', + 'GroupIssueBoards', 'GroupMembers', 'GroupMilestones', 'GroupProjects', @@ -45,6 +46,7 @@ export const ProjectsBundle = init(Pick(APIServices, [ 'ProjectAccessRequests', 'ProjectBadges', 'ProjectCustomAttributes', + 'ProjectIssueBoards', 'ProjectHooks', 'ProjectMembers', 'ProjectMilestones', diff --git a/src/services/GroupIssueBoards.js b/src/services/GroupIssueBoards.js new file mode 100644 index 00000000..88c6cd85 --- /dev/null +++ b/src/services/GroupIssueBoards.js @@ -0,0 +1,9 @@ +import { ResourceIssueBoards } from '../templates'; + +class GroupIssueBoards extends ResourceIssueBoards { + constructor(options) { + super('groups', options); + } +} + +export default GroupIssueBoards; diff --git a/src/services/ProjectIssueBoards.js b/src/services/ProjectIssueBoards.js new file mode 100644 index 00000000..40a0728a --- /dev/null +++ b/src/services/ProjectIssueBoards.js @@ -0,0 +1,9 @@ +import { ResourceIssueBoards } from '../templates'; + +class ProjectIssueBoards extends ResourceIssueBoards { + constructor(options) { + super('products', options); + } +} + +export default ProjectIssueBoards; diff --git a/src/services/index.js b/src/services/index.js index 4b3e30ab..7611c8b5 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -3,6 +3,7 @@ export Groups from './Groups'; export GroupAccessRequests from './GroupAccessRequests'; export GroupBadges from './GroupBadges'; export GroupCustomAttributes from './GroupCustomAttributes'; +export GroupIssueBoards from './GroupIssueBoards'; export GroupMembers from './GroupMembers'; export GroupMilestones from './GroupMilestones'; export GroupProjects from './GroupProjects'; @@ -34,6 +35,7 @@ export Pipelines from './Pipelines'; export Projects from './Projects'; export ProjectAccessRequests from './ProjectAccessRequests'; export ProjectCustomAttributes from './ProjectCustomAttributes'; +export ProjectIssueBoards from './ProjectIssueBoards'; export ProjectHooks from './ProjectHooks'; export ProjectMembers from './ProjectMembers'; export ProjectMilestones from './ProjectMilestones'; diff --git a/src/templates/ResourceIssueBoards.js b/src/templates/ResourceIssueBoards.js new file mode 100644 index 00000000..af7234e8 --- /dev/null +++ b/src/templates/ResourceIssueBoards.js @@ -0,0 +1,72 @@ +import URLJoin from 'url-join'; +import { BaseService, RequestHelper } from '../infrastructure'; + +class ResourceIssueBoards extends BaseService { + constructor(resourceType, ...args) { + super(...args); + + this.url = URLJoin(this.url, resourceType); + } + + all(resourceId, options) { + const rId = encodeURIComponent(resourceId); + + return RequestHelper.get(this, `${rId}/boards`, options); + } + + create(resourceId, name) { + const rId = encodeURIComponent(resourceId); + + return RequestHelper.post(this, `${rId}/boards`, { name }); + } + + createList(resourceId, boardId, labelId) { + const [rId, bId] = [resourceId, boardId].map(encodeURIComponent); + + return RequestHelper.post(this, `${rId}/boards/${bId}/lists`, { labelId }); + } + + edit(resourceId, boardId, options) { + const [rId, bId] = [resourceId, boardId].map(encodeURIComponent); + + return RequestHelper.put(this, `${rId}/boards/${bId}`, options); + } + + editList(resourceId, boardId, listId, position) { + const [rId, bId, lId] = [resourceId, boardId, listId].map(encodeURIComponent); + + return RequestHelper.put(this, `${rId}/boards/${bId}/lists/${lId}`, { position }); + } + + lists(resourceId, boardId) { + const [rId, bId] = [resourceId, boardId].map(encodeURIComponent); + + return RequestHelper.get(this, `${rId}/boards/${bId}/lists`); + } + + remove(resourceId, boardId) { + const [rId, bId] = [resourceId, boardId].map(encodeURIComponent); + + return RequestHelper.delete(this, `${rId}/boards/${bId}`); + } + + removeList(resourceId, boardId, listId) { + const [rId, bId, lId] = [resourceId, boardId, listId].map(encodeURIComponent); + + return RequestHelper.delete(this, `${rId}/boards/${bId}/lists/${lId}`); + } + + show(resourceId, boardId) { + const [rId, bId] = [resourceId, boardId].map(encodeURIComponent); + + return RequestHelper.get(this, `${rId}/boards/${bId}`); + } + + showList(resourceId, boardId, listId) { + const [rId, bId, lId] = [resourceId, boardId, listId].map(encodeURIComponent); + + return RequestHelper.get(this, `${rId}/boards/${bId}/lists/${lId}`); + } +} + +export default ResourceIssueBoards; diff --git a/src/templates/ResourceNotes.js b/src/templates/ResourceNotes.js index b6b46bc5..c905c5b4 100644 --- a/src/templates/ResourceNotes.js +++ b/src/templates/ResourceNotes.js @@ -12,11 +12,7 @@ class ResourceNotes extends BaseService { all(resourceId, resource2Id, options) { const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); - return RequestHelper.get( - this, - `${rId}/${this.resource2Type}/${r2Id}/notes`, - options, - ); + return RequestHelper.get(this, `${rId}/${this.resource2Type}/${r2Id}/notes`, options); } create(resourceId, resource2Id, options) { @@ -24,11 +20,7 @@ class ResourceNotes extends BaseService { const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); - return RequestHelper.post( - this, - `${rId}/${this.resource2Type}/${r2Id}/notes`, - options, - ); + return RequestHelper.post(this, `${rId}/${this.resource2Type}/${r2Id}/notes`, options); } edit(resourceId, resource2Id, noteId, options) { @@ -36,29 +28,19 @@ class ResourceNotes extends BaseService { const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent); - return RequestHelper.put( - this, - `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, - options, - ); + return RequestHelper.put(this, `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, options); } remove(resourceId, resource2Id, noteId) { const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent); - return RequestHelper.delete( - this, - `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, - ); + return RequestHelper.delete(this, `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`); } show(resourceId, resource2Id, noteId) { const [rId, r2Id, nId] = [resourceId, resource2Id, noteId].map(encodeURIComponent); - return RequestHelper.get( - this, - `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`, - ); + return RequestHelper.get(this, `${rId}/${this.resource2Type}/${r2Id}/notes/${nId}`); } } diff --git a/src/templates/index.js b/src/templates/index.js index 2943398e..c5afedbc 100644 --- a/src/templates/index.js +++ b/src/templates/index.js @@ -6,3 +6,4 @@ export ResourceCustomAttributes from './ResourceCustomAttributes'; export ResourceVariables from './ResourceVariables'; export ResourceAwardEmojis from './ResourceAwardEmojis'; export ResourceBadges from './ResourceBadges'; +export ResourceIssueBoards from './ResourceIssueBoards'; From 70d910205782468bef2be01dd9b24b6131ee531a Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 23:33:03 -0400 Subject: [PATCH 65/90] Adding Licence API --- src/services/Licence.js | 13 +++++++++++++ src/services/index.js | 1 + 2 files changed, 14 insertions(+) create mode 100644 src/services/Licence.js diff --git a/src/services/Licence.js b/src/services/Licence.js new file mode 100644 index 00000000..d002d823 --- /dev/null +++ b/src/services/Licence.js @@ -0,0 +1,13 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class Licence extends BaseService { + all() { + return RequestHelper.get(this, 'licence'); + } + + create() { + return RequestHelper.post(this, 'licence'); + } +} + +export default Licence; diff --git a/src/services/index.js b/src/services/index.js index 7611c8b5..ec26b71f 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -59,4 +59,5 @@ export GeoNodes from './GeoNodes'; export GitignoreTemplates from './GitignoreTemplates'; export GitLabCIYMLTemplates from './GitLabCIYMLTemplates'; export Keys from './Keys'; +export Licence from './Licence'; export SystemHooks from './SystemHooks'; From a084d06c26566eb5b5e049003049226d5ebaa778 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 23:35:28 -0400 Subject: [PATCH 66/90] Linting --- src/services/Labels.js | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/src/services/Labels.js b/src/services/Labels.js index 8a168901..7eea6010 100644 --- a/src/services/Labels.js +++ b/src/services/Labels.js @@ -16,11 +16,7 @@ class Labels extends BaseService { edit(projectId, labelName, options = {}) { const pId = encodeURIComponent(projectId); - return RequestHelper.put( - this, - `projects/${pId}/labels`, - { name: labelName, ...options }, - ); + return RequestHelper.put(this, `projects/${pId}/labels`, { name: labelName, ...options }); } remove(projectId, labelName) { @@ -32,20 +28,13 @@ class Labels extends BaseService { subscribe(projectId, labelId, options = {}) { const [pId, lId] = [projectId, labelId].map(encodeURIComponent); - return RequestHelper.post( - this, - `projects/${pId}/issues/${lId}/subscribe`, - options, - ); + return RequestHelper.post(this, `projects/${pId}/issues/${lId}/subscribe`, options); } unsubscribe(projectId, labelId) { const [pId, lId] = [projectId, labelId].map(encodeURIComponent); - return RequestHelper.delete( - this, - `projects/${pId}/issues/${lId}/unsubscribe`, - ); + return RequestHelper.delete(this, `projects/${pId}/issues/${lId}/unsubscribe`); } } From 5886723aa782b1a50a73e05da069e342bab934eb Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 23:42:11 -0400 Subject: [PATCH 67/90] Adding namespaces --- src/services/Namespaces.js | 15 +++++++++++++++ src/services/index.js | 1 + 2 files changed, 16 insertions(+) create mode 100644 src/services/Namespaces.js diff --git a/src/services/Namespaces.js b/src/services/Namespaces.js new file mode 100644 index 00000000..a9d264f6 --- /dev/null +++ b/src/services/Namespaces.js @@ -0,0 +1,15 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class Namespaces extends BaseService { + all(options) { + return RequestHelper.get(this, 'namespaces', options); + } + + show(namespaceId) { + const nId = encodeURIComponent(namespaceId); + + return RequestHelper.get(this, `namespaces/${nId}`); + } +} + +export default Namespaces; diff --git a/src/services/index.js b/src/services/index.js index ec26b71f..0c4b40c2 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -60,4 +60,5 @@ export GitignoreTemplates from './GitignoreTemplates'; export GitLabCIYMLTemplates from './GitLabCIYMLTemplates'; export Keys from './Keys'; export Licence from './Licence'; +export Namespaces from './Namespaces'; export SystemHooks from './SystemHooks'; From 7332555db06011c327e61e45ad368fc2ebcc00dd Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 23:52:56 -0400 Subject: [PATCH 68/90] Adding epic notes - Fixed merge request notes - Added issue notes --- src/index.js | 2 ++ src/services/EpicNotes.js | 9 +++++++++ src/services/IssueNotes.js | 9 +++++++++ src/services/MergeRequestNotes.js | 2 +- src/services/index.js | 2 ++ 5 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/services/EpicNotes.js create mode 100644 src/services/IssueNotes.js diff --git a/src/index.js b/src/index.js index 810ff379..7406814f 100644 --- a/src/index.js +++ b/src/index.js @@ -18,6 +18,7 @@ export const GroupsBundle = init(Pick(APIServices, [ 'GroupVariables', 'Epics', 'EpicIssues', + 'EpicNotes', ])); // Users @@ -37,6 +38,7 @@ export const ProjectsBundle = init(Pick(APIServices, [ 'Deployments', 'Environments', 'Issues', + 'IssueNotes', 'Jobs', 'Labels', 'MergeRequests', diff --git a/src/services/EpicNotes.js b/src/services/EpicNotes.js new file mode 100644 index 00000000..5b836e74 --- /dev/null +++ b/src/services/EpicNotes.js @@ -0,0 +1,9 @@ +import { ResourceNotes } from '../templates'; + +class EpicNotes extends ResourceNotes { + constructor(options) { + super('groups', 'epics', options); + } +} + +export default EpicNotes; diff --git a/src/services/IssueNotes.js b/src/services/IssueNotes.js new file mode 100644 index 00000000..6b59b040 --- /dev/null +++ b/src/services/IssueNotes.js @@ -0,0 +1,9 @@ +import { ResourceNotes } from '../templates'; + +class IssueNotes extends ResourceNotes { + constructor(options) { + super('projects', 'issues', options); + } +} + +export default IssueNotes; diff --git a/src/services/MergeRequestNotes.js b/src/services/MergeRequestNotes.js index 4e07fb22..44c68dd5 100644 --- a/src/services/MergeRequestNotes.js +++ b/src/services/MergeRequestNotes.js @@ -2,7 +2,7 @@ import { ResourceNotes } from '../templates'; class MergeRequestNotes extends ResourceNotes { constructor(options) { - super('mergerequests', 'notes', options); + super('projects', 'mergerequests', options); } } diff --git a/src/services/index.js b/src/services/index.js index 0c4b40c2..e355eca7 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -10,6 +10,7 @@ export GroupProjects from './GroupProjects'; export GroupVariables from './GroupVariables'; export Epics from './Epics'; export EpicIssues from './EpicIssues'; +export EpicNotes from './EpicNotes'; // Users export Users from './Users'; @@ -25,6 +26,7 @@ export Deployments from './Deployments'; export DeployKeys from './DeployKeys'; export Environments from './Environments'; export Issues from './Issues'; +export IssueNotes from './IssueNotes'; export IssueAwardEmojis from './IssueAwardEmojis'; export Jobs from './Jobs'; export Labels from './Labels'; From c72cf521bbb22a0b8e0126dbf061d42d115dd1bc Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 29 Mar 2018 23:55:23 -0400 Subject: [PATCH 69/90] Fixing snippet notes --- src/index.js | 2 +- src/services/{ProjectSnippets.js => ProjectSnippetNotes.js} | 4 ++-- src/services/index.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename src/services/{ProjectSnippets.js => ProjectSnippetNotes.js} (58%) diff --git a/src/index.js b/src/index.js index 7406814f..143f2fff 100644 --- a/src/index.js +++ b/src/index.js @@ -52,7 +52,7 @@ export const ProjectsBundle = init(Pick(APIServices, [ 'ProjectHooks', 'ProjectMembers', 'ProjectMilestones', - 'ProjectSnippets', + 'ProjectSnippetNotes', 'ProtectedBranches', 'ProjectVariables', 'Repositories', diff --git a/src/services/ProjectSnippets.js b/src/services/ProjectSnippetNotes.js similarity index 58% rename from src/services/ProjectSnippets.js rename to src/services/ProjectSnippetNotes.js index 58cfe3bb..3d2feb0d 100644 --- a/src/services/ProjectSnippets.js +++ b/src/services/ProjectSnippetNotes.js @@ -1,9 +1,9 @@ import { ResourceNotes } from '../templates'; -class ProjectSnippets extends ResourceNotes { +class ProjectSnippetNotes extends ResourceNotes { constructor(options) { super('projects', 'snippets', options); } } -export default ProjectSnippets; +export default ProjectSnippetNotes; diff --git a/src/services/index.js b/src/services/index.js index e355eca7..918899a6 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -41,7 +41,7 @@ export ProjectIssueBoards from './ProjectIssueBoards'; export ProjectHooks from './ProjectHooks'; export ProjectMembers from './ProjectMembers'; export ProjectMilestones from './ProjectMilestones'; -export ProjectSnippets from './ProjectSnippets'; +export ProjectSnippetNotes from './ProjectSnippetNotes'; export ProjectSnippetAwardEmojis from './ProjectSnippetAwardEmojis'; export ProtectedBranches from './ProtectedBranches'; export ProjectVariables from './ProjectVariables'; From 097080ce7d2694806fba964bc9918e3d29ca9060 Mon Sep 17 00:00:00 2001 From: Justin Date: Fri, 30 Mar 2018 00:41:53 -0400 Subject: [PATCH 70/90] Fixing some problems with variables and adding pipeline schedule api --- src/services/GroupVariables.js | 2 +- src/services/PipelineScheduleVariables.js | 9 +++ src/services/PipelineSchedules.js | 46 ++++++++++++++++ src/services/ProjectVariables.js | 2 +- src/services/index.js | 2 + src/templates/ResourceAwardEmojis.js | 18 +++--- src/templates/ResourceVariables.js | 67 ++++++++++++++++------- 7 files changed, 116 insertions(+), 30 deletions(-) create mode 100644 src/services/PipelineScheduleVariables.js create mode 100644 src/services/PipelineSchedules.js diff --git a/src/services/GroupVariables.js b/src/services/GroupVariables.js index 7bd40792..28f12466 100644 --- a/src/services/GroupVariables.js +++ b/src/services/GroupVariables.js @@ -2,7 +2,7 @@ import { ResourceVariables } from '../templates'; class GroupVariables extends ResourceVariables { constructor(options) { - super('groups', options); + super('groups', null, options); } } diff --git a/src/services/PipelineScheduleVariables.js b/src/services/PipelineScheduleVariables.js new file mode 100644 index 00000000..a05f6e3b --- /dev/null +++ b/src/services/PipelineScheduleVariables.js @@ -0,0 +1,9 @@ +import { ResourceVariables } from '../templates'; + +class PipelineScheduleVariables extends ResourceVariables { + constructor(options) { + super('projects', 'pipelines', options); + } +} + +export default PipelineScheduleVariables; diff --git a/src/services/PipelineSchedules.js b/src/services/PipelineSchedules.js new file mode 100644 index 00000000..e2b48cc2 --- /dev/null +++ b/src/services/PipelineSchedules.js @@ -0,0 +1,46 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class PipelineSchedules extends BaseService { + all(projectId, options) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/pipeline_schedules`, options); + } + + create(projectId, description, ref, cron, options) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/pipeline_schedules`, { + description, + ref, + cron, + ...options, + }); + } + + edit(projectId, scheduleId, options) { + const [pId, sId] = [projectId, scheduleId].map(encodeURIComponent); + + return RequestHelper.put(this, `projects/${pId}/pipeline_schedules/${sId}`, options); + } + + remove(projectId, scheduleId) { + const [pId, sId] = [projectId, scheduleId].map(encodeURIComponent); + + return RequestHelper.delete(this, `projects/${pId}/pipeline_schedules/${sId}`); + } + + show(projectId, scheduleId) { + const [pId, sId] = [projectId, scheduleId].map(encodeURIComponent); + + return RequestHelper.get(this, `projects/${pId}/pipeline_schedules/${sId}`); + } + + takeOwnership(projectId, scheduleId) { + const [pId, sId] = [projectId, scheduleId].map(encodeURIComponent); + + return RequestHelper.post(this, `projects/${pId}/pipeline_schedules/${sId}/take_ownership`); + } +} + +export default PipelineSchedules; diff --git a/src/services/ProjectVariables.js b/src/services/ProjectVariables.js index dedac47d..9fae5c64 100644 --- a/src/services/ProjectVariables.js +++ b/src/services/ProjectVariables.js @@ -2,7 +2,7 @@ import { ResourceVariables } from '../templates'; class ProjectVariables extends ResourceVariables { constructor(options) { - super('projects', options); + super('projects', null, options); } } diff --git a/src/services/index.js b/src/services/index.js index 918899a6..52c05f08 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -34,6 +34,8 @@ export MergeRequests from './MergeRequests'; export MergeRequestAwardEmojis from './MergeRequestAwardEmojis'; export MergeRequestNotes from './MergeRequestNotes'; export Pipelines from './Pipelines'; +export PipelineSchedules from './PipelineSchedules'; +export PipelineScheduleVariables from './PipelineScheduleVariables'; export Projects from './Projects'; export ProjectAccessRequests from './ProjectAccessRequests'; export ProjectCustomAttributes from './ProjectCustomAttributes'; diff --git a/src/templates/ResourceAwardEmojis.js b/src/templates/ResourceAwardEmojis.js index b516469d..223f5b70 100644 --- a/src/templates/ResourceAwardEmojis.js +++ b/src/templates/ResourceAwardEmojis.js @@ -1,15 +1,15 @@ import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; -const url = (projectId, resourceId, noteId) => { +function url(projectId, resourceType, resourceId, noteId) { const [pId, rId] = [projectId, resourceId].map(encodeURIComponent); if (noteId) { - return `${pId}/${this.resourceId}/${rId}/notes/${encodeURIComponent(noteId)}/award_emoji`; + return `${pId}/${resourceType}/${rId}/notes/${encodeURIComponent(noteId)}/award_emoji`; } - return `${pId}/${this.resourceId}/${rId}/award_emoji`; -}; + return `${pId}/${resourceType}/${rId}/award_emoji`; +} class ResourceAwardsEmojis extends BaseService { constructor(resourceType, ...args) { @@ -20,19 +20,21 @@ class ResourceAwardsEmojis extends BaseService { } all(projectId, resourceId, options, noteId) { - return RequestHelper.get(this, url(projectId, resourceId, noteId), options); + return RequestHelper.get(this, url(projectId, this.resourceType, resourceId, noteId), options); } award(projectId, resourceId, name, noteId) { - return RequestHelper.post(this, url(projectId, resourceId, noteId), { name }); + return RequestHelper.post(this, url(projectId, this.resourceType, resourceId, noteId), { + name, + }); } remove(projectId, resourceId, awardId, noteId) { - return RequestHelper.delete(this, url(projectId, resourceId, noteId)); + return RequestHelper.delete(this, url(projectId, this.resourceType, resourceId, noteId)); } show(projectId, resourceId, awardId, noteId) { - return RequestHelper.get(this, url(projectId, resourceId, noteId)); + return RequestHelper.get(this, url(projectId, this.resourceType, resourceId, noteId)); } } diff --git a/src/templates/ResourceVariables.js b/src/templates/ResourceVariables.js index e437b417..274a0fc9 100644 --- a/src/templates/ResourceVariables.js +++ b/src/templates/ResourceVariables.js @@ -1,41 +1,68 @@ -import URLJoin from 'url-join'; import { BaseService, RequestHelper } from '../infrastructure'; +const url = (resourceType, resourceId, resource2Type, resource2Id) => { + const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); + + let output = `${resourceType}/${rId}/`; + + if (resource2Id) { + output += `${resource2Type}/${r2Id}/`; + } + + output += 'variables'; + + return output; +}; + class ResourceVariables extends BaseService { - constructor(resourceType, ...args) { + constructor(resourceType, resource2Type, ...args) { super(...args); - this.url = URLJoin(this.url, resourceType); + this.resourceType = resourceType; + this.resource2Type = resource2Type; } - all(resourceId) { - const rId = encodeURIComponent(resourceId); - - return RequestHelper.get(this, `${rId}/variables`); + all(resourceId, resource2Id) { + return RequestHelper.get( + this, + url(this.resourceType, resourceId, this.resource2Type, resource2Id), + ); } - create(resourceId, options) { - const rId = encodeURIComponent(resourceId); - - return RequestHelper.post(this, `${rId}/variables`, options); + create(resourceId, resource2Id, options) { + return RequestHelper.post( + this, + url(this.resourceType, resourceId, this.resource2Type, resource2Id), + options, + ); } - edit(resourceId, keyId, options) { - const [rId, kId] = [resourceId, keyId].map(encodeURIComponent); + edit(resourceId, resource2Id, keyId, options) { + const kId = encodeURIComponent(keyId); - return RequestHelper.put(this, `${rId}/variables/${kId}`, options); + return RequestHelper.put( + this, + `${url(this.resourceType, resourceId, this.resource2Type, resource2Id)}/${kId}`, + options, + ); } - show(resourceId, keyId) { - const [rId, kId] = [resourceId, keyId].map(encodeURIComponent); + show(resourceId, resource2Id, keyId) { + const kId = encodeURIComponent(keyId); - return RequestHelper.get(this, `${rId}/variables/${kId}`); + return RequestHelper.get( + this, + `${url(this.resourceType, resourceId, this.resource2Type, resource2Id)}/${kId}`, + ); } - remove(resourceId, keyId) { - const [rId, kId] = [resourceId, keyId].map(encodeURIComponent); + remove(resourceId, resource2Id, keyId) { + const kId = encodeURIComponent(keyId); - return RequestHelper.delete(this, `${rId}/variables/${kId}`); + return RequestHelper.delete( + this, + `${url(this.resourceType, resourceId, this.resource2Type, resource2Id)}/${kId}`, + ); } } From e4641d4244684bc99601b0f2e8d06f87fe11bf89 Mon Sep 17 00:00:00 2001 From: Justin Date: Fri, 30 Mar 2018 00:43:16 -0400 Subject: [PATCH 71/90] Updating export --- src/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/index.js b/src/index.js index 143f2fff..5506b34f 100644 --- a/src/index.js +++ b/src/index.js @@ -44,6 +44,8 @@ export const ProjectsBundle = init(Pick(APIServices, [ 'MergeRequests', 'MergeRequestNotes', 'Pipelines', + 'PipelineSchedules', + 'PipelineScheduleVariables', 'Projects', 'ProjectAccessRequests', 'ProjectBadges', From d0cecb13046c8d8deb6ef05818e3d570c0913ad5 Mon Sep 17 00:00:00 2001 From: Justin Date: Fri, 30 Mar 2018 00:45:47 -0400 Subject: [PATCH 72/90] Clean up code --- src/templates/ResourceAwardEmojis.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/templates/ResourceAwardEmojis.js b/src/templates/ResourceAwardEmojis.js index 223f5b70..53bd78c8 100644 --- a/src/templates/ResourceAwardEmojis.js +++ b/src/templates/ResourceAwardEmojis.js @@ -3,12 +3,15 @@ import { BaseService, RequestHelper } from '../infrastructure'; function url(projectId, resourceType, resourceId, noteId) { const [pId, rId] = [projectId, resourceId].map(encodeURIComponent); + let output = `${pId}/${resourceType}/${rId}/`; if (noteId) { - return `${pId}/${resourceType}/${rId}/notes/${encodeURIComponent(noteId)}/award_emoji`; + output += `notes/${encodeURIComponent(noteId)}/`; } - return `${pId}/${resourceType}/${rId}/award_emoji`; + output += 'award_emoji'; + + return output; } class ResourceAwardsEmojis extends BaseService { From d9d6a9dd772c752ed7b3994494e8d8c2915e830f Mon Sep 17 00:00:00 2001 From: Justin Date: Fri, 30 Mar 2018 01:14:09 -0400 Subject: [PATCH 73/90] Adding export import --- src/index.js | 1 + src/services/ProjectImportExport.js | 33 +++++++++++++++++++++++++++++ src/services/index.js | 1 + 3 files changed, 35 insertions(+) create mode 100644 src/services/ProjectImportExport.js diff --git a/src/index.js b/src/index.js index 5506b34f..a4ef24de 100644 --- a/src/index.js +++ b/src/index.js @@ -50,6 +50,7 @@ export const ProjectsBundle = init(Pick(APIServices, [ 'ProjectAccessRequests', 'ProjectBadges', 'ProjectCustomAttributes', + 'ProjectImportExport', 'ProjectIssueBoards', 'ProjectHooks', 'ProjectMembers', diff --git a/src/services/ProjectImportExport.js b/src/services/ProjectImportExport.js new file mode 100644 index 00000000..33ba23f9 --- /dev/null +++ b/src/services/ProjectImportExport.js @@ -0,0 +1,33 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class ProjectImportExport extends BaseService { + download(projectId) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/export/download`); + } + + exportStatus(projectId) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/export`); + } + + import(file, path, options) { + return RequestHelper.post(this, 'projects/import', { file, path, ...options }); + } + + importStatus(projectId) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/import`); + } + + schedule(projectId, options) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/export`, options); + } +} + +export default ProjectImportExport; diff --git a/src/services/index.js b/src/services/index.js index 52c05f08..da799193 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -39,6 +39,7 @@ export PipelineScheduleVariables from './PipelineScheduleVariables'; export Projects from './Projects'; export ProjectAccessRequests from './ProjectAccessRequests'; export ProjectCustomAttributes from './ProjectCustomAttributes'; +export ProjectImportExport from './ProjectImportExport'; export ProjectIssueBoards from './ProjectIssueBoards'; export ProjectHooks from './ProjectHooks'; export ProjectMembers from './ProjectMembers'; From ec5f3988b7b7035da3f3a80939cb25f55437e992 Mon Sep 17 00:00:00 2001 From: Justin Date: Fri, 30 Mar 2018 10:21:05 -0400 Subject: [PATCH 74/90] Adding project snippets correctly --- README.md | 1 + src/index.js | 1 + src/services/ProjectSnippets.js | 60 +++++++++++++++++++++++++++++++++ src/services/index.js | 1 + 4 files changed, 63 insertions(+) create mode 100644 src/services/ProjectSnippets.js diff --git a/README.md b/README.md index af3b1ae2..5d8c48f8 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,7 @@ ProjectHooks ProjectMembers ProjectMilestones ProjectSnippets +ProjectSnippetNotes ProjectSnippetAwardEmojis ProtectedBranches ProjectVariables diff --git a/src/index.js b/src/index.js index a4ef24de..554f0752 100644 --- a/src/index.js +++ b/src/index.js @@ -55,6 +55,7 @@ export const ProjectsBundle = init(Pick(APIServices, [ 'ProjectHooks', 'ProjectMembers', 'ProjectMilestones', + 'ProjectSnippet', 'ProjectSnippetNotes', 'ProtectedBranches', 'ProjectVariables', diff --git a/src/services/ProjectSnippets.js b/src/services/ProjectSnippets.js new file mode 100644 index 00000000..b393f96a --- /dev/null +++ b/src/services/ProjectSnippets.js @@ -0,0 +1,60 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +const VISIBILITY_LEVELS = { + PRIVATE: 'private', + INTERNAL: 'internal', + PUBLIC: 'public', +}; + +class ProjectSnippets extends BaseService { + all(projectId, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/snippets`, options); + } + + content(projectId, snippetId) { + const [pId, sId] = [projectId, snippetId].map(encodeURIComponent); + + return RequestHelper.get(this, `projects/${pId}/snippets/${sId}/raw`); + } + + create(projectId, title, fileName, code, visibility, options = {}) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/snippets`, { + title, + fileName, + code, + visibility, + ...options, + }); + } + + edit(projectId, options) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.put(this, `projects/${pId}/snippets`, options); + } + + remove(projectId) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.delete(this, `projects/${pId}/snippets`); + } + + show(projectId, snippetId) { + const [pId, sId] = [projectId, snippetId].map(encodeURIComponent); + + return RequestHelper.get(this, `projects/${pId}/snippets/${sId}`); + } + + userAgentDetails(projectId, snippetId) { + const [pId, sId] = [projectId, snippetId].map(encodeURIComponent); + + return RequestHelper.get(this, `projects/${pId}/snippets/${sId}/user_agent_detail`); + } +} + +export default ProjectSnippets; +export { VISIBILITY_LEVELS }; diff --git a/src/services/index.js b/src/services/index.js index da799193..aff502ab 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -44,6 +44,7 @@ export ProjectIssueBoards from './ProjectIssueBoards'; export ProjectHooks from './ProjectHooks'; export ProjectMembers from './ProjectMembers'; export ProjectMilestones from './ProjectMilestones'; +export ProjectSnippet from './ProjectSnippet'; export ProjectSnippetNotes from './ProjectSnippetNotes'; export ProjectSnippetAwardEmojis from './ProjectSnippetAwardEmojis'; export ProtectedBranches from './ProtectedBranches'; From 234625c121bae47b74c0a37d213eb8a06770f655 Mon Sep 17 00:00:00 2001 From: Justin Date: Fri, 30 Mar 2018 13:44:32 -0400 Subject: [PATCH 75/90] Switching to yaml --- .eslintrc | 17 ----------------- .eslintrc.yaml | 12 ++++++++++++ 2 files changed, 12 insertions(+), 17 deletions(-) delete mode 100644 .eslintrc create mode 100644 .eslintrc.yaml diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index b3167f9f..00000000 --- a/.eslintrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "parser": "babel-eslint", - "env": - { - "browser": true, - "node": true - }, - "extends": "airbnb", - "rules": { - "arrow-body-style": [2, "as-needed"], - "no-param-reassign": [ - "error", { - "props": false - } - ] - } -} \ No newline at end of file diff --git a/.eslintrc.yaml b/.eslintrc.yaml new file mode 100644 index 00000000..d026c4b8 --- /dev/null +++ b/.eslintrc.yaml @@ -0,0 +1,12 @@ +--- +env: + node: true + browser: true +parser: babel-eslint +extends: + - airbnb +rules: + arrow-body-style: [2, "as-needed"] + no-param-reassign: ["error", {"props":false}] + import/prefer-default-export: 1 + From ec9f69a9eb477e993ddb64fae1a2bc01916e0dbb Mon Sep 17 00:00:00 2001 From: Justin Date: Fri, 30 Mar 2018 21:05:46 -0400 Subject: [PATCH 76/90] Adding dicussions API --- src/index.js | 3 ++ src/services/EpicDiscussions.js | 9 ++++ src/services/IssueDiscussions.js | 9 ++++ src/services/ProjectSnippetDiscussions.js | 9 ++++ src/services/index.js | 5 ++- src/templates/ResourceDiscussions.js | 53 +++++++++++++++++++++++ 6 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/services/EpicDiscussions.js create mode 100644 src/services/IssueDiscussions.js create mode 100644 src/services/ProjectSnippetDiscussions.js create mode 100644 src/templates/ResourceDiscussions.js diff --git a/src/index.js b/src/index.js index 554f0752..200de0a1 100644 --- a/src/index.js +++ b/src/index.js @@ -19,6 +19,7 @@ export const GroupsBundle = init(Pick(APIServices, [ 'Epics', 'EpicIssues', 'EpicNotes', + 'EpicDiscussions', ])); // Users @@ -39,6 +40,7 @@ export const ProjectsBundle = init(Pick(APIServices, [ 'Environments', 'Issues', 'IssueNotes', + 'IssueDiscussions', 'Jobs', 'Labels', 'MergeRequests', @@ -57,6 +59,7 @@ export const ProjectsBundle = init(Pick(APIServices, [ 'ProjectMilestones', 'ProjectSnippet', 'ProjectSnippetNotes', + 'ProjectSnippetDiscussions', 'ProtectedBranches', 'ProjectVariables', 'Repositories', diff --git a/src/services/EpicDiscussions.js b/src/services/EpicDiscussions.js new file mode 100644 index 00000000..eb96930d --- /dev/null +++ b/src/services/EpicDiscussions.js @@ -0,0 +1,9 @@ +import { ResourceDiscussions } from '../templates'; + +class EpicDiscussions extends ResourceDiscussions { + constructor(options) { + super('groups', 'epics', options); + } +} + +export default EpicDiscussions; diff --git a/src/services/IssueDiscussions.js b/src/services/IssueDiscussions.js new file mode 100644 index 00000000..95f0aeb3 --- /dev/null +++ b/src/services/IssueDiscussions.js @@ -0,0 +1,9 @@ +import { ResourceDiscussions } from '../templates'; + +class IssueDiscussions extends ResourceDiscussions { + constructor(options) { + super('projects', 'issues', options); + } +} + +export default IssueDiscussions; diff --git a/src/services/ProjectSnippetDiscussions.js b/src/services/ProjectSnippetDiscussions.js new file mode 100644 index 00000000..ac6f074b --- /dev/null +++ b/src/services/ProjectSnippetDiscussions.js @@ -0,0 +1,9 @@ +import { ResourceDiscussions } from '../templates'; + +class ProjectSnippetDiscussions extends ResourceDiscussions { + constructor(options) { + super('projects', 'snippets', options); + } +} + +export default ProjectSnippetDiscussions; diff --git a/src/services/index.js b/src/services/index.js index aff502ab..58b80d87 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -11,6 +11,7 @@ export GroupVariables from './GroupVariables'; export Epics from './Epics'; export EpicIssues from './EpicIssues'; export EpicNotes from './EpicNotes'; +export EpicDiscussions from './EpicDiscussions'; // Users export Users from './Users'; @@ -27,6 +28,7 @@ export DeployKeys from './DeployKeys'; export Environments from './Environments'; export Issues from './Issues'; export IssueNotes from './IssueNotes'; +export IssueDiscussions from './IssueDiscussions'; export IssueAwardEmojis from './IssueAwardEmojis'; export Jobs from './Jobs'; export Labels from './Labels'; @@ -44,8 +46,9 @@ export ProjectIssueBoards from './ProjectIssueBoards'; export ProjectHooks from './ProjectHooks'; export ProjectMembers from './ProjectMembers'; export ProjectMilestones from './ProjectMilestones'; -export ProjectSnippet from './ProjectSnippet'; +export ProjectSnippets from './ProjectSnippets'; export ProjectSnippetNotes from './ProjectSnippetNotes'; +export ProjectSnippetDiscussions from './ProjectSnippetDiscussions'; export ProjectSnippetAwardEmojis from './ProjectSnippetAwardEmojis'; export ProtectedBranches from './ProtectedBranches'; export ProjectVariables from './ProjectVariables'; diff --git a/src/templates/ResourceDiscussions.js b/src/templates/ResourceDiscussions.js new file mode 100644 index 00000000..069d2973 --- /dev/null +++ b/src/templates/ResourceDiscussions.js @@ -0,0 +1,53 @@ +import URLJoin from 'url-join'; +import { BaseService, RequestHelper } from '../infrastructure'; + +class ResourceDiscussions extends BaseService { + constructor(resourceType, resource2Type, ...args) { + super(...args); + + this.url = URLJoin(this.url, resourceType); + this.resource2Type = resource2Type; + } + + addNote(resourceId, resource2Id, discussiodId, noteId, options) { + if (!options.body) throw new Error('Missing required property: body'); + + const [rId, r2Id, dId, nId] = [resourceId, resource2Id, discussiodId, noteId].map(encodeURIComponent); + + return RequestHelper.put(this, `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}/notes/${nId}`, options); + } + + all(resourceId, resource2Id, options) { + const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); + + return RequestHelper.get(this, `${rId}/${this.resource2Type}/${r2Id}/discussions`, options); + } + + create(resourceId, resource2Id, options) { + if (!options.body) throw new Error('Missing required property: body'); + + const [rId, r2Id] = [resourceId, resource2Id].map(encodeURIComponent); + + return RequestHelper.post(this, `${rId}/${this.resource2Type}/${r2Id}/discussions`, options); + } + + editNote(resourceId, resource2Id, discussiodId, noteId, body) { + const [rId, r2Id, dId, nId] = [resourceId, resource2Id, discussiodId, noteId].map(encodeURIComponent); + + return RequestHelper.put(this, `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}/notes/${nId}`, { body }); + } + + removeNote(resourceId, resource2Id, discussiodId, noteId) { + const [rId, r2Id, dId, nId] = [resourceId, resource2Id, discussiodId, noteId].map(encodeURIComponent); + + return RequestHelper.delete(this, `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}/notes/${nId}`); + } + + show(resourceId, resource2Id, discussiodId) { + const [rId, r2Id, dId] = [resourceId, resource2Id, discussiodId].map(encodeURIComponent); + + return RequestHelper.get(this, `${rId}/${this.resource2Type}/${r2Id}/discussions/${dId}`); + } +} + +export default ResourceDiscussions; From fc946de5c4f9a55b1ccee727a1eda42f41c5562b Mon Sep 17 00:00:00 2001 From: Justin Date: Fri, 30 Mar 2018 22:26:19 -0400 Subject: [PATCH 77/90] Adding NotificationSettings API --- src/services/NotificationSettings.js | 61 ++++++++++++++++++++++++++++ src/services/index.js | 1 + 2 files changed, 62 insertions(+) create mode 100644 src/services/NotificationSettings.js diff --git a/src/services/NotificationSettings.js b/src/services/NotificationSettings.js new file mode 100644 index 00000000..30acd8d9 --- /dev/null +++ b/src/services/NotificationSettings.js @@ -0,0 +1,61 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +const LEVELS = { + DISABLED: 'disabled', + PARTICIPATING: 'participating', + WATCH: 'watch', + GLOBAL: 'global', + MENTION: 'mention', + CUSTOM: 'custom', +}; + +const EVENTS = { + NEW_NOTE: 'new_note', + NEW_ISSUE: 'new_issue', + REOPEM_ISSUE: 'reopen_issue', + CLOSE_ISSUE: 'close_issue', + REASSIGN_ISSUE: 'reassign_issue', + NEW_MERGE_REQUESTS: 'new_merge_request', + PUSH_TO_MERGE_REQUEST: 'push_to_merge_request', + REOPEN_MERGE_REQUESTS: 'reopen_merge_request', + CLOSE_MERGE_REQUEST: 'close_merge_request', + REASSIGN_MERGE_REQUEST: 'reassign_merge_request', + MERGE_MERGE_REQUEST: 'merge_merge_request', + FAILED_PIPELINE: 'failed_pipeline', + SUCCESS_PIPELINE: 'success_pipeline', +}; + +class NotificationSettings extends BaseService { + constructor(...args) { + super(...args); + + this.LEVELS = LEVELS; + this.EVENTS = EVENTS; + } + + all({ projectId, groupId } = {}) { + let url; + + if (projectId) { + url += `projects/${encodeURIComponent(projectId)}/`; + } else if (groupId) { + url += `groups/${encodeURIComponent(groupId)}/`; + } + + return RequestHelper.get(this, `${url}notification_settings`); + } + + edit({ projectId, groupId } = {}, options) { + let url; + + if (projectId) { + url += `projects/${encodeURIComponent(projectId)}/`; + } else if (groupId) { + url += `groups/${encodeURIComponent(groupId)}/`; + } + + return RequestHelper.put(this, `${url}notification_settings`, options); + } +} + +export default NotificationSettings; diff --git a/src/services/index.js b/src/services/index.js index 58b80d87..91dc77c5 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -70,4 +70,5 @@ export GitLabCIYMLTemplates from './GitLabCIYMLTemplates'; export Keys from './Keys'; export Licence from './Licence'; export Namespaces from './Namespaces'; +export NotificationSettings from './NotificationSettings'; export SystemHooks from './SystemHooks'; From 2468adde42f3764f9a482110c098113a2d1f0f26 Mon Sep 17 00:00:00 2001 From: Justin Date: Fri, 30 Mar 2018 22:40:23 -0400 Subject: [PATCH 78/90] Adding LicenceTemplates --- src/services/GitLabCIYMLTemplates.js | 14 ++++---------- src/services/GitignoreTemplates.js | 14 ++++---------- src/services/LicenceTemplates.js | 9 +++++++++ src/services/index.js | 1 + src/templates/ResourceTemplates.js | 22 ++++++++++++++++++++++ src/templates/index.js | 11 ++++++----- 6 files changed, 46 insertions(+), 25 deletions(-) create mode 100644 src/services/LicenceTemplates.js create mode 100644 src/templates/ResourceTemplates.js diff --git a/src/services/GitLabCIYMLTemplates.js b/src/services/GitLabCIYMLTemplates.js index e849415b..29629042 100644 --- a/src/services/GitLabCIYMLTemplates.js +++ b/src/services/GitLabCIYMLTemplates.js @@ -1,14 +1,8 @@ -import { BaseService, RequestHelper } from '../infrastructure'; +import { ResourceTemplates } from '../templates'; -class GitLabCIYMLTemplates extends BaseService { - all(options) { - return RequestHelper.get(this, 'templates/gitlab_ci_ymls', options); - } - - show(ciymlId) { - const gId = encodeURIComponent(ciymlId); - - return RequestHelper.post(this, `templates/gitlab_ci_ymls/${gId}`); +class GitLabCIYMLTemplates extends ResourceTemplates { + constructor(options) { + super('gitlab_ci_ymls', options); } } diff --git a/src/services/GitignoreTemplates.js b/src/services/GitignoreTemplates.js index 3c49863c..2287f7e8 100644 --- a/src/services/GitignoreTemplates.js +++ b/src/services/GitignoreTemplates.js @@ -1,14 +1,8 @@ -import { BaseService, RequestHelper } from '../infrastructure'; +import { ResourceTemplates } from '../templates'; -class GitignoreTemplates extends BaseService { - all(options) { - return RequestHelper.get(this, 'templates/gitignores', options); - } - - show(gitignoreId) { - const gId = encodeURIComponent(gitignoreId); - - return RequestHelper.post(this, `templates/gitignores/${gId}`); +class GitignoreTemplates extends ResourceTemplates { + constructor(options) { + super('gitignores', options); } } diff --git a/src/services/LicenceTemplates.js b/src/services/LicenceTemplates.js new file mode 100644 index 00000000..144cebf2 --- /dev/null +++ b/src/services/LicenceTemplates.js @@ -0,0 +1,9 @@ +import { ResourceTemplates } from '../templates'; + +class LicenceTemplates extends ResourceTemplates { + constructor(options) { + super('licences', options); + } +} + +export default LicenceTemplates; diff --git a/src/services/index.js b/src/services/index.js index 91dc77c5..43bfe3b2 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -69,6 +69,7 @@ export GitignoreTemplates from './GitignoreTemplates'; export GitLabCIYMLTemplates from './GitLabCIYMLTemplates'; export Keys from './Keys'; export Licence from './Licence'; +export LicenceTemplates from './LicenceTemplates'; export Namespaces from './Namespaces'; export NotificationSettings from './NotificationSettings'; export SystemHooks from './SystemHooks'; diff --git a/src/templates/ResourceTemplates.js b/src/templates/ResourceTemplates.js new file mode 100644 index 00000000..01b151c7 --- /dev/null +++ b/src/templates/ResourceTemplates.js @@ -0,0 +1,22 @@ +import URLJoin from 'url-join'; +import { BaseService, RequestHelper } from '../infrastructure'; + +class ResourceTemplates extends BaseService { + constructor(resourceType, ...args) { + super(...args); + + this.url = URLJoin(this.url, 'templates', resourceType); + } + + all(options) { + return RequestHelper.get(this, '', options); + } + + show(resourceId) { + const rId = encodeURIComponent(resourceId); + + return RequestHelper.post(this, `${rId}`); + } +} + +export default ResourceTemplates; diff --git a/src/templates/index.js b/src/templates/index.js index c5afedbc..62ade737 100644 --- a/src/templates/index.js +++ b/src/templates/index.js @@ -1,9 +1,10 @@ -export ResourceNotes from './ResourceNotes'; export ResourceAccessRequests from './ResourceAccessRequests'; -export ResourceMembers from './ResourceMembers'; -export ResourceMilestones from './ResourceMilestones'; -export ResourceCustomAttributes from './ResourceCustomAttributes'; -export ResourceVariables from './ResourceVariables'; export ResourceAwardEmojis from './ResourceAwardEmojis'; export ResourceBadges from './ResourceBadges'; +export ResourceCustomAttributes from './ResourceCustomAttributes'; export ResourceIssueBoards from './ResourceIssueBoards'; +export ResourceMembers from './ResourceMembers'; +export ResourceMilestones from './ResourceMilestones'; +export ResourceNotes from './ResourceNotes'; +export ResourceTemplates from './ResourceIssueBoards'; +export ResourceVariables from './ResourceVariables'; From 6363a70921db2e15171b0d9bacd0376fef12fdc6 Mon Sep 17 00:00:00 2001 From: Justin Date: Fri, 30 Mar 2018 22:44:03 -0400 Subject: [PATCH 79/90] ApplicationSettings API --- src/services/ApplicationSettings.js | 13 +++++++++++++ src/services/index.js | 1 + 2 files changed, 14 insertions(+) create mode 100644 src/services/ApplicationSettings.js diff --git a/src/services/ApplicationSettings.js b/src/services/ApplicationSettings.js new file mode 100644 index 00000000..d284898d --- /dev/null +++ b/src/services/ApplicationSettings.js @@ -0,0 +1,13 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class ApplicationSettings extends BaseService { + all() { + return RequestHelper.get(this, 'application/settings'); + } + + edit(options) { + return RequestHelper.post(this, 'application/settings', options); + } +} + +export default ApplicationSettings; diff --git a/src/services/index.js b/src/services/index.js index 43bfe3b2..12d08501 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -61,6 +61,7 @@ export Todos from './Todos'; export Triggers from './Triggers'; // General +export ApplicationSettings from './ApplicationSettings'; export BroadcastMessages from './BroadcastMessages'; export Events from './Events'; export FeatureFlags from './FeatureFlags'; From afa67d604ef5a2d1967147f7f40c1a05e023dc8c Mon Sep 17 00:00:00 2001 From: Justin Date: Fri, 30 Mar 2018 22:47:56 -0400 Subject: [PATCH 80/90] SidekiqMetrics API --- src/services/SidekiqMetrics.js | 21 +++++++++++++++++++++ src/services/index.js | 1 + 2 files changed, 22 insertions(+) create mode 100644 src/services/SidekiqMetrics.js diff --git a/src/services/SidekiqMetrics.js b/src/services/SidekiqMetrics.js new file mode 100644 index 00000000..4393861c --- /dev/null +++ b/src/services/SidekiqMetrics.js @@ -0,0 +1,21 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class SidekiqMetrics extends BaseService { + queueMetrics() { + return RequestHelper.get(this, 'sidekiq/queue_metrics'); + } + + processMetrics() { + return RequestHelper.get(this, 'sidekiq/process_metrics'); + } + + jobStats() { + return RequestHelper.get(this, 'sidekiq/job_stats'); + } + + compoundMetrics() { + return RequestHelper.get(this, 'sidekiq/compound_metrics'); + } +} + +export default SidekiqMetrics; diff --git a/src/services/index.js b/src/services/index.js index 12d08501..be57db52 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -73,4 +73,5 @@ export Licence from './Licence'; export LicenceTemplates from './LicenceTemplates'; export Namespaces from './Namespaces'; export NotificationSettings from './NotificationSettings'; +export SidekiqMetrics from './SidekiqMetrics'; export SystemHooks from './SystemHooks'; From 1896486d50026ed39e1e59c64826761ffc479587 Mon Sep 17 00:00:00 2001 From: Justin Date: Sat, 31 Mar 2018 10:52:40 -0400 Subject: [PATCH 81/90] Adding gitlabci linting --- src/services/Lint.js | 9 +++++++++ src/services/index.js | 1 + 2 files changed, 10 insertions(+) create mode 100644 src/services/Lint.js diff --git a/src/services/Lint.js b/src/services/Lint.js new file mode 100644 index 00000000..98cb6885 --- /dev/null +++ b/src/services/Lint.js @@ -0,0 +1,9 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class Lint extends BaseService { + lint(content) { + return RequestHelper.post(this, 'lint', { content }); + } +} + +export default Lint; diff --git a/src/services/index.js b/src/services/index.js index be57db52..01801b5c 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -71,6 +71,7 @@ export GitLabCIYMLTemplates from './GitLabCIYMLTemplates'; export Keys from './Keys'; export Licence from './Licence'; export LicenceTemplates from './LicenceTemplates'; +export Lint from './Lint'; export Namespaces from './Namespaces'; export NotificationSettings from './NotificationSettings'; export SidekiqMetrics from './SidekiqMetrics'; From e34bceee37be86666b0e852d9ed7a60cc23b42f7 Mon Sep 17 00:00:00 2001 From: Justin Date: Sat, 31 Mar 2018 11:27:15 -0400 Subject: [PATCH 82/90] Adding pages domains and search --- src/services/NotificationSettings.js | 2 +- src/services/PagesDomains.js | 35 ++++++++++++++++++++++++++++ src/services/Search.js | 17 ++++++++++++++ src/services/SystemHooks.js | 14 ++++------- src/services/Wikis.js | 35 ++++++++++++++++++++++++++++ src/services/index.js | 3 +++ 6 files changed, 95 insertions(+), 11 deletions(-) create mode 100644 src/services/PagesDomains.js create mode 100644 src/services/Search.js create mode 100644 src/services/Wikis.js diff --git a/src/services/NotificationSettings.js b/src/services/NotificationSettings.js index 30acd8d9..8d4c384d 100644 --- a/src/services/NotificationSettings.js +++ b/src/services/NotificationSettings.js @@ -45,7 +45,7 @@ class NotificationSettings extends BaseService { return RequestHelper.get(this, `${url}notification_settings`); } - edit({ projectId, groupId } = {}, options) { + edit(options, { projectId, groupId } = {}) { let url; if (projectId) { diff --git a/src/services/PagesDomains.js b/src/services/PagesDomains.js new file mode 100644 index 00000000..7aaa7989 --- /dev/null +++ b/src/services/PagesDomains.js @@ -0,0 +1,35 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class PagesDomains extends BaseService { + all({ projectId } = {}) { + const url = projectId ? `projects/${encodeURIComponent(projectId)}/` : ''; + + return RequestHelper.get(this, `${url}page/domains`); + } + + create(projectId, domain, options) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/pages/domains`, { domain, ...options }); + } + + edit(projectId, domain, options) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.put(this, `projects/${pId}/pages/domains/${domain}`, options); + } + + show(projectId, domain) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/pages/domains/${domain}`); + } + + remove(projectId, domain) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.delete(this, `projects/${pId}/pages/domains/${domain}`); + } +} + +export default PagesDomains; diff --git a/src/services/Search.js b/src/services/Search.js new file mode 100644 index 00000000..53757599 --- /dev/null +++ b/src/services/Search.js @@ -0,0 +1,17 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class Search extends BaseService { + all(scope, search, { projectId, groupId } = {}) { + let url; + + if (projectId) { + url += `projects/${encodeURIComponent(projectId)}/`; + } else if (groupId) { + url += `groups/${encodeURIComponent(groupId)}/`; + } + + return RequestHelper.get(this, `${url}search`, { scope, search }); + } +} + +export default Search; diff --git a/src/services/SystemHooks.js b/src/services/SystemHooks.js index 3eac7246..7b0805a1 100644 --- a/src/services/SystemHooks.js +++ b/src/services/SystemHooks.js @@ -1,20 +1,14 @@ import { BaseService, RequestHelper } from '../infrastructure'; class SystemHooks extends BaseService { - all(options) { - return RequestHelper.get(this, 'hooks', options); - } - - show(hookId) { - const hId = encodeURIComponent(hookId); - - return RequestHelper.get(this, `hooks/${hId}`); - } - add(url, options) { return RequestHelper.post(this, 'hooks', { url, ...options }); } + all(options) { + return RequestHelper.get(this, 'hooks', options); + } + edit(hookId, url, options) { const hId = encodeURIComponent(hookId); diff --git a/src/services/Wikis.js b/src/services/Wikis.js new file mode 100644 index 00000000..01b0b3d4 --- /dev/null +++ b/src/services/Wikis.js @@ -0,0 +1,35 @@ +import { BaseService, RequestHelper } from '../infrastructure'; + +class Wikis extends BaseService { + all(projectId, options) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/wikis`, options); + } + + create(projectId, options) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.post(this, `projects/${pId}/wikis`, options); + } + + edit(projectId, slug, options) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.put(this, `projects/${pId}/wikis/${slug}`, options); + } + + show(projectId, slug) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.get(this, `projects/${pId}/wikis/${slug}`); + } + + remove(projectId, slug) { + const pId = encodeURIComponent(projectId); + + return RequestHelper.delete(this, `projects/${pId}/wikis/${slug}`); + } +} + +export default Wikis; diff --git a/src/services/index.js b/src/services/index.js index 01801b5c..3c0230bc 100644 --- a/src/services/index.js +++ b/src/services/index.js @@ -74,5 +74,8 @@ export LicenceTemplates from './LicenceTemplates'; export Lint from './Lint'; export Namespaces from './Namespaces'; export NotificationSettings from './NotificationSettings'; +export PagesDomains from './PagesDomains'; +export Search from './Search'; export SidekiqMetrics from './SidekiqMetrics'; export SystemHooks from './SystemHooks'; +export Wikis from './Wikis'; From 3f06782a74f8ce6eeb7d20b76ebc170f0a1c51b8 Mon Sep 17 00:00:00 2001 From: Justin Date: Sat, 31 Mar 2018 11:39:30 -0400 Subject: [PATCH 83/90] Updating README, and version. Final updates for 3.0.0 release --- README.md | 139 ++++--- package-lock.json | 914 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 +- src/index.js | 3 + 4 files changed, 1003 insertions(+), 55 deletions(-) diff --git a/README.md b/README.md index 5d8c48f8..d9c4a552 100644 --- a/README.md +++ b/README.md @@ -39,24 +39,40 @@ npm install node-gitlab-api ### Supported APIs The API's that are currently supported are: ``` +// General +ApplicationSettings +BroadcastMessages +Events +FeatureFlags +GeoNodes +GitignoreTemplates +GitLabCIYMLTemplates +Keys +Licence +LicenceTemplates +Lint +Namespaces +NotificationSettings +PagesDomains +Search +SidekiqMetrics +SystemHooks +Wikis + // Groups Groups GroupAccessRequests GroupBadges GroupCustomAttributes +GroupIssueBoards GroupMembers GroupMilestones GroupProjects GroupVariables Epics EpicIssues - -// Users -Users -UserEmails -UserImpersonationTokens -UserKeys -UserGPGKeys +EpicNotes +EpicDiscussions // Projects Branches @@ -65,6 +81,8 @@ Deployments DeployKeys Environments Issues +IssueNotes +IssueDiscussions IssueAwardEmojis Jobs Labels @@ -72,14 +90,19 @@ MergeRequests MergeRequestAwardEmojis MergeRequestNotes Pipelines +PipelineSchedules +PipelineScheduleVariables Projects ProjectAccessRequests ProjectCustomAttributes +ProjectImportExport +ProjectIssueBoards ProjectHooks ProjectMembers ProjectMilestones ProjectSnippets ProjectSnippetNotes +ProjectSnippetDiscussions ProjectSnippetAwardEmojis ProtectedBranches ProjectVariables @@ -91,15 +114,12 @@ Tags Todos Triggers -// General -BroadcastMessages -Events -FeatureFlags -GeoNodes -GitignoreTemplates -GitLabCIYMLTemplates -Keys -SystemHooks +// Users +Users +UserEmails +UserImpersonationTokens +UserKeys +UserGPGKeys ``` ### Import @@ -167,30 +187,43 @@ etc.. Currently there are three Bundles: 1. ProjectsBundle which includes: ``` -Branches, -Commits, -DeployKeys, -Environments, -Issues, -Jobs, -Labels, -MergeRequests, -MergeRequestNotes, -Pipelines, -Projects, -ProjectAccessRequests, -ProjectCustomAttributes, -ProjectHooks, -ProjectMembers, -ProjectMilestones, -ProjectSnippets, -ProtectedBranches, -ProjectVariables, -Repositories, -RepositoryFiles, -Runners, -Services, -Tags, +Branches +Commits +Deployments +DeployKeys +Environments +Issues +IssueNotes +IssueDiscussions +IssueAwardEmojis +Jobs +Labels +MergeRequests +MergeRequestAwardEmojis +MergeRequestNotes +Pipelines +PipelineSchedules +PipelineScheduleVariables +Projects +ProjectAccessRequests +ProjectCustomAttributes +ProjectImportExport +ProjectIssueBoards +ProjectHooks +ProjectMembers +ProjectMilestones +ProjectSnippets +ProjectSnippetNotes +ProjectSnippetDiscussions +ProjectSnippetAwardEmojis +ProtectedBranches +ProjectVariables +Repositories +RepositoryFiles +Runners +Services +Tags +Todos Triggers ``` @@ -205,13 +238,19 @@ UserGPGKeys 3. GroupsBundle which includes: ``` -Groups, -GroupAccessRequests, -GroupCustomAttributes, -GroupMembers, -GroupMilestones, -GroupProjects, +Groups +GroupAccessRequests +GroupBadges +GroupCustomAttributes +GroupIssueBoards +GroupMembers +GroupMilestones +GroupProjects GroupVariables +Epics +EpicIssues +EpicNotes +EpicDiscussions ``` ### Examples @@ -327,19 +366,13 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod ------------------ - Exporting all services seperatly ie. const { Projects } from 'node-gitlab-api'; as well as the usual default export: const Gitlab from 'node-gitlab-api' - Exporting bunbles which are groups of related API's. These include: ProjectsBundle, UsersBundle and GroupsBundle -- Added activies support to the Users service - Added events support to the Projects, and Users - Added full support for ProjectVariables and GroupVariables -- Added support for UserGPGKeys -- Added support for UserImpersonationTokens -- Added support for SystemHooks - Added support for Events. This is also exposed in Projects and Users under the events function - Fixed the missing options parameter for the ProjectMembers and GroupMemebers APIs in PR [#45] thanks to [Stefan Hall](https://github.com/Marethyu1) - Supporting both camelCase and snake_case option properties: `projects.all({perPage:5}) === projects.all({per_page: 5})` -- Added support for Merge Request Approvals #49 - Fixed problem with .all() functions where only the some of the results were being returned -- Added full support for Enviroments -- Added support for Todos +- Completed support for all Gitlab APIs, #49, #53 ### Breaking Changes between 2.2.6 and 3.0.0 - Instantiation of the API must use the new operator consistently. See usage above. diff --git a/package-lock.json b/package-lock.json index 86b394c0..ed7b36cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "node-gitlab-api", - "version": "3.0.0-rc.7", + "version": "3.0.0-rc.8", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1337,6 +1337,7 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", + "fsevents": "1.1.3", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -2076,6 +2077,910 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, "function-bind": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", @@ -2774,6 +3679,13 @@ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true, + "optional": true + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", diff --git a/package.json b/package.json index 67856d92..eda2a992 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-gitlab-api", - "version": "3.0.0-rc.7", + "version": "3.0.0-rc.8", "description": "Full NodeJS implementation of the GitLab API. Supports Promises, Async/Await.", "main": "dist/latest/index.js", "engines": { diff --git a/src/index.js b/src/index.js index 200de0a1..191a0b0b 100644 --- a/src/index.js +++ b/src/index.js @@ -39,11 +39,13 @@ export const ProjectsBundle = init(Pick(APIServices, [ 'Deployments', 'Environments', 'Issues', + 'IssueAwardEmojis', 'IssueNotes', 'IssueDiscussions', 'Jobs', 'Labels', 'MergeRequests', + 'MergeRequestAwardEmojis', 'MergeRequestNotes', 'Pipelines', 'PipelineSchedules', @@ -60,6 +62,7 @@ export const ProjectsBundle = init(Pick(APIServices, [ 'ProjectSnippet', 'ProjectSnippetNotes', 'ProjectSnippetDiscussions', + 'ProjectSnippetAwardEmojis', 'ProtectedBranches', 'ProjectVariables', 'Repositories', From 373407069f5f168af67780d7a775508e6485b87f Mon Sep 17 00:00:00 2001 From: Justin Date: Sat, 31 Mar 2018 11:41:45 -0400 Subject: [PATCH 84/90] Adding missing babel-runtime --- package-lock.json | 19 +++++++++++++++++++ package.json | 1 + 2 files changed, 20 insertions(+) diff --git a/package-lock.json b/package-lock.json index ed7b36cc..f3d134b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -922,6 +922,15 @@ } } }, + "@babel/runtime": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-beta.42.tgz", + "integrity": "sha512-iOGRzUoONLOtmCvjUsZv3mZzgCT6ljHQY5fr1qG1QIiJQwtM7zbPWGGpa3QWETq+UqwWyJnoi5XZDZRwZDFciQ==", + "requires": { + "core-js": "2.5.4", + "regenerator-runtime": "0.11.1" + } + }, "@babel/template": { "version": "7.0.0-beta.42", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.42.tgz", @@ -1430,6 +1439,11 @@ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", "dev": true }, + "core-js": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.4.tgz", + "integrity": "sha1-8si/GB8qgLkvNgEhQpzmOi8K6uA=" + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -4113,6 +4127,11 @@ } } }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, "regex-cache": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", diff --git a/package.json b/package.json index eda2a992..373e9335 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "eslint-plugin-react": "^7.7.0" }, "dependencies": { + "@babel/runtime": "^7.0.0-beta.42", "humps": "^2.0.1", "lodash.pick": "^4.4.0", "parse-link-header": "^1.0.1", From 38bde7ddbdb83e1083eddc3fc15414bef0c3fc6f Mon Sep 17 00:00:00 2001 From: Justin Date: Mon, 2 Apr 2018 15:47:24 -0400 Subject: [PATCH 85/90] Fixing missing exports --- src/templates/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/templates/index.js b/src/templates/index.js index 62ade737..b1f2ecc7 100644 --- a/src/templates/index.js +++ b/src/templates/index.js @@ -2,9 +2,10 @@ export ResourceAccessRequests from './ResourceAccessRequests'; export ResourceAwardEmojis from './ResourceAwardEmojis'; export ResourceBadges from './ResourceBadges'; export ResourceCustomAttributes from './ResourceCustomAttributes'; +export ResourceDiscussions from './ResourceDiscussions'; export ResourceIssueBoards from './ResourceIssueBoards'; export ResourceMembers from './ResourceMembers'; export ResourceMilestones from './ResourceMilestones'; export ResourceNotes from './ResourceNotes'; -export ResourceTemplates from './ResourceIssueBoards'; +export ResourceTemplates from './ResourceTemplates'; export ResourceVariables from './ResourceVariables'; From 3139708ec3b1c80060e8dc51e09c1aa3eaa8b1be Mon Sep 17 00:00:00 2001 From: Justin Date: Mon, 2 Apr 2018 16:01:02 -0400 Subject: [PATCH 86/90] Updating naming of api wrapper for consistency --- src/index.js | 2 +- src/infrastructure/{Namespace.js => Bundle.js} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/infrastructure/{Namespace.js => Bundle.js} (90%) diff --git a/src/index.js b/src/index.js index 191a0b0b..9202d05b 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,6 @@ import Pick from 'lodash.pick'; import * as APIServices from './services'; -import init from './infrastructure/Namespace'; +import init from './infrastructure/Bundle'; // All seperatly export * from './services'; diff --git a/src/infrastructure/Namespace.js b/src/infrastructure/Bundle.js similarity index 90% rename from src/infrastructure/Namespace.js rename to src/infrastructure/Bundle.js index d833ef3c..17bd04d2 100644 --- a/src/infrastructure/Namespace.js +++ b/src/infrastructure/Bundle.js @@ -1,7 +1,7 @@ function init(...services) { const combined = Object.assign({}, ...services); - return class Namespace { + return class Bundle { constructor(options) { Object.entries(combined).forEach(([name, Service]) => { this[name] = new Service(options); From 8cef38a5086e29bc75ee8df8eca9222a7cfe6c56 Mon Sep 17 00:00:00 2001 From: Justin Date: Mon, 2 Apr 2018 16:26:37 -0400 Subject: [PATCH 87/90] Broken reference --- src/infrastructure/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/infrastructure/index.js b/src/infrastructure/index.js index 65f31799..1f58d813 100644 --- a/src/infrastructure/index.js +++ b/src/infrastructure/index.js @@ -1,3 +1,3 @@ export BaseService from './BaseService'; export RequestHelper from './RequestHelper'; -export Namespace from './Namespace'; +export Bundle from './Bundle'; From 729e1e5a996fec5a83fc065a86d4c5a43e4cc523 Mon Sep 17 00:00:00 2001 From: Justin Date: Mon, 2 Apr 2018 19:52:08 -0400 Subject: [PATCH 88/90] Renaming init function --- src/index.js | 10 +++++----- src/infrastructure/{Bundle.js => Bundler.js} | 4 ++-- src/infrastructure/index.js | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) rename src/infrastructure/{Bundle.js => Bundler.js} (80%) diff --git a/src/index.js b/src/index.js index 9202d05b..4ab99fe6 100644 --- a/src/index.js +++ b/src/index.js @@ -1,12 +1,12 @@ import Pick from 'lodash.pick'; import * as APIServices from './services'; -import init from './infrastructure/Bundle'; +import { Bundler } from './infrastructure'; // All seperatly export * from './services'; // Groups -export const GroupsBundle = init(Pick(APIServices, [ +export const GroupsBundler = Bundler(Pick(APIServices, [ 'Groups', 'GroupAccessRequests', 'GroupBadges', @@ -23,7 +23,7 @@ export const GroupsBundle = init(Pick(APIServices, [ ])); // Users -export const UsersBundle = init(Pick(APIServices, [ +export const UsersBundler = Bundler(Pick(APIServices, [ 'Users', 'UserEmails', 'UserImpersonationTokens', @@ -32,7 +32,7 @@ export const UsersBundle = init(Pick(APIServices, [ ])); // Projects -export const ProjectsBundle = init(Pick(APIServices, [ +export const ProjectsBundler = Bundler(Pick(APIServices, [ 'Branches', 'Commits', 'DeployKeys', @@ -74,4 +74,4 @@ export const ProjectsBundle = init(Pick(APIServices, [ ])); // All initialized -export default init(APIServices); +export default Bundler(APIServices); diff --git a/src/infrastructure/Bundle.js b/src/infrastructure/Bundler.js similarity index 80% rename from src/infrastructure/Bundle.js rename to src/infrastructure/Bundler.js index 17bd04d2..8552f9df 100644 --- a/src/infrastructure/Bundle.js +++ b/src/infrastructure/Bundler.js @@ -1,4 +1,4 @@ -function init(...services) { +function Bundler(...services) { const combined = Object.assign({}, ...services); return class Bundle { @@ -10,4 +10,4 @@ function init(...services) { }; } -export default init; +export default Bundler; diff --git a/src/infrastructure/index.js b/src/infrastructure/index.js index 1f58d813..c86864be 100644 --- a/src/infrastructure/index.js +++ b/src/infrastructure/index.js @@ -1,3 +1,3 @@ export BaseService from './BaseService'; export RequestHelper from './RequestHelper'; -export Bundle from './Bundle'; +export Bundler from './Bundler'; From 82639cef1afbe790c4d2882f06e952a5043de0b4 Mon Sep 17 00:00:00 2001 From: Justin Date: Mon, 2 Apr 2018 21:17:38 -0400 Subject: [PATCH 89/90] Added to the contributor list! --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 00537943..fb256fbb 100644 --- a/README.md +++ b/README.md @@ -352,6 +352,8 @@ This started off as a fork from [node-gitlab](https://github.com/node-gitlab/nod - [Jeff Pelton](https://github.com/comster) - [Claude Abounegm](https://github.com/claude-abounegm) - [Stefan Hall](https://github.com/Marethyu1) +- [Jordan Wallet](https://github.com/Mr-Wallet) + ## License From 4bec6040ab9941ec94d6431992c32643e75d4f4d Mon Sep 17 00:00:00 2001 From: Justin Date: Mon, 2 Apr 2018 21:18:11 -0400 Subject: [PATCH 90/90] Typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fb256fbb..61114e12 100644 --- a/README.md +++ b/README.md @@ -328,7 +328,7 @@ let projects = await api.Projects.all({maxPages:2, perPage:40}); ## Docs -Although there are the official docs for the API, there are some goodies offered by this package! After the 3.0.0 release, the next large project will be putting together proper documention for these goodies [#39]! Stay tuned!! +Although there are the official docs for the API, there are some extra goodies offered by this package! After the 3.0.0 release, the next large project will be putting together proper documention for these goodies [#39]! Stay tuned!! ## Tests