@ffflorian/gh-open 3.1.6 → 3.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,9 +1,16 @@
1
- # gh-open [![npm version](https://img.shields.io/npm/v/@ffflorian/gh-open.svg?style=flat)](https://www.npmjs.com/package/@ffflorian/gh-open)
1
+ # gh-open [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![npm version](https://img.shields.io/npm/v/@ffflorian/gh-open.svg?style=flat)](https://www.npmjs.com/package/@ffflorian/gh-open)
2
2
 
3
3
  Open a GitHub repository in your browser.
4
4
 
5
+ ## Prerequisites
6
+
7
+ - [Node.js](https://nodejs.org) >= 14
8
+ - npm (preinstalled) or [yarn](https://classic.yarnpkg.com) < 2
9
+
5
10
  ## Installation
6
11
 
12
+ ℹ️ This is a hybrid [CommonJS](https://nodejs.org/docs/latest/api/modules.html#modules-commonjs-modules) / [ESM](https://nodejs.org/api/esm.html#introduction) module.
13
+
7
14
  Run `yarn global add @ffflorian/gh-open` or `npm install -g @ffflorian/gh-open`.
8
15
 
9
16
  ## Usage
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
2
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
3
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -8,13 +7,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
8
  });
10
9
  };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.GitHubClient = void 0;
13
- const axios_1 = require("axios");
10
+ import axios from 'axios';
14
11
  const TWO_SECONDS_IN_MILLIS = 2000;
15
- class GitHubClient {
12
+ export class GitHubClient {
16
13
  constructor(timeout = TWO_SECONDS_IN_MILLIS) {
17
- this.apiClient = axios_1.default.create({ baseURL: 'https://api.github.com', timeout });
14
+ this.apiClient = axios.create({ baseURL: 'https://api.github.com', timeout });
18
15
  }
19
16
  getPullRequestByBranch(user, repository, branch) {
20
17
  return __awaiter(this, void 0, void 0, function* () {
@@ -37,5 +34,4 @@ class GitHubClient {
37
34
  });
38
35
  }
39
36
  }
40
- exports.GitHubClient = GitHubClient;
41
37
  //# sourceMappingURL=GitHubClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubClient.js","sourceRoot":"","sources":["../../src/GitHubClient.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAa3C,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC,MAAM,OAAO,YAAY;IAGvB,YAAY,UAAkB,qBAAqB;QACjD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,EAAC,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAC,CAAC,CAAC;IAC9E,CAAC;IAEK,sBAAsB,CAAC,IAAY,EAAE,UAAkB,EAAE,MAAc;;YAC3E,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAClE,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;QACtE,CAAC;KAAA;IAED;;OAEG;IACG,eAAe,CAAC,IAAY,EAAE,UAAkB;;YACpD,MAAM,WAAW,GAAG,SAAS,IAAI,IAAI,UAAU,QAAQ,CAAC;YAExD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE;gBACrD,MAAM,EAAE;oBACN,KAAK,EAAE,MAAM;iBACd;aACF,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;KAAA;CACF"}
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
2
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
3
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -8,13 +7,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
8
  });
10
9
  };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.RepositoryService = void 0;
13
- const fs_1 = require("fs");
14
- const logdown = require("logdown");
15
- const path = require("path");
16
- const GitHubClient_1 = require("./GitHubClient");
17
- class RepositoryService {
10
+ import { promises as fsAsync } from 'node:fs';
11
+ import path from 'node:path';
12
+ import logdown from 'logdown';
13
+ import { GitHubClient } from './GitHubClient.js';
14
+ export class RepositoryService {
18
15
  constructor(options) {
19
16
  this.parser = {
20
17
  fullUrl: new RegExp('^(?:.+?://(?:.+@)?|(?:.+@)?)(.+?)[:/](.+?)(?:.git)?/?$', 'i'),
@@ -23,7 +20,7 @@ class RepositoryService {
23
20
  rawUrl: new RegExp('.*url = (?<rawUrl>.*)', 'mi'),
24
21
  };
25
22
  this.options = Object.assign({ debug: false, timeout: 2000 }, options);
26
- this.gitHubClient = new GitHubClient_1.GitHubClient(this.options.timeout);
23
+ this.gitHubClient = new GitHubClient(this.options.timeout);
27
24
  this.logger = logdown('gh-open', {
28
25
  logger: console,
29
26
  markdown: false,
@@ -70,7 +67,7 @@ class RepositoryService {
70
67
  const gitHeadFile = path.join(gitDir, 'HEAD');
71
68
  let gitHead;
72
69
  try {
73
- gitHead = yield fs_1.promises.readFile(gitHeadFile, 'utf-8');
70
+ gitHead = yield fsAsync.readFile(gitHeadFile, 'utf-8');
74
71
  gitHead = gitHead.trim();
75
72
  this.logger.info('Read git head file', { gitHead });
76
73
  }
@@ -91,7 +88,7 @@ class RepositoryService {
91
88
  const gitConfigFile = path.join(gitDir, 'config');
92
89
  let gitConfig;
93
90
  try {
94
- gitConfig = yield fs_1.promises.readFile(gitConfigFile, 'utf-8');
91
+ gitConfig = yield fsAsync.readFile(gitConfigFile, 'utf-8');
95
92
  gitConfig = gitConfig.trim();
96
93
  this.logger.info('Read git config file', { gitConfigFile });
97
94
  }
@@ -110,5 +107,4 @@ class RepositoryService {
110
107
  });
111
108
  }
112
109
  }
113
- exports.RepositoryService = RepositoryService;
114
110
  //# sourceMappingURL=RepositoryService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RepositoryService.js","sourceRoot":"","sources":["../../src/RepositoryService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAC,QAAQ,IAAI,OAAO,EAAC,MAAM,SAAS,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAO/C,MAAM,OAAO,iBAAiB;IAW5B,YAAY,OAAiB;QAPZ,WAAM,GAAG;YACxB,OAAO,EAAE,IAAI,MAAM,CAAC,wDAAwD,EAAE,GAAG,CAAC;YAClF,SAAS,EAAE,IAAI,MAAM,CAAC,gCAAgC,EAAE,IAAI,CAAC;YAC7D,WAAW,EAAE,IAAI,MAAM,CAAC,4EAA4E,CAAC;YACrG,MAAM,EAAE,IAAI,MAAM,CAAC,uBAAuB,EAAE,IAAI,CAAC;SAClD,CAAC;QAGA,IAAI,CAAC,OAAO,mBAAI,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,IAAK,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE;YAC/B,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACnD,CAAC;IAEK,UAAU,CAAC,MAAc;;YAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACpD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE/C,IAAI,CAAC,KAAK,EAAE;gBACV,MAAM,YAAY,GAAG,4BAA4B,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;aAC/B;YAED,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;YAEvE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAC,SAAS,EAAC,CAAC,CAAC;YAElD,OAAO,GAAG,SAAS,SAAS,SAAS,EAAE,CAAC;QAC1C,CAAC;KAAA;IAEK,iBAAiB,CAAC,GAAW;;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEhD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBAC3B,MAAM,YAAY,GAAG,iCAAiC,GAAG,mBAAmB,CAAC;gBAC7E,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;aAC/B;YAED,MAAM,EAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YAE7C,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAEvF,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;oBACpF,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;oBACjD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAC,cAAc,EAAC,CAAC,CAAC;oBAC3D,OAAO,cAAc,CAAC;iBACvB;aACF;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAqB,KAAe,CAAC,OAAO,GAAG,CAAC,CAAC;aACnE;QACH,CAAC;KAAA;IAEK,cAAc,CAAC,MAAc;;YACjC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAE9C,IAAI,OAAe,CAAC;YAEpB,IAAI;gBACF,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACvD,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAC,OAAO,EAAC,CAAC,CAAC;aACnD;YAAC,OAAO,KAAK,EAAE;gBACd,MAAM,YAAY,GAAG,oCAAoC,MAAM,IAAI,CAAC;gBACpE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;aAC/B;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAElD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBAC3B,MAAM,YAAY,GAAG,sCAAsC,OAAO,GAAG,CAAC;gBACtE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;aAC/B;YAED,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;QAC7B,CAAC;KAAA;IAEK,cAAc,CAAC,MAAc;;YACjC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAElD,IAAI,SAAiB,CAAC;YAEtB,IAAI;gBACF,SAAS,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBAC3D,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;gBAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAC,aAAa,EAAC,CAAC,CAAC;aAC3D;YAAC,OAAO,KAAK,EAAE;gBACd,MAAM,YAAY,GAAG,oCAAoC,aAAa,GAAG,CAAC;gBAC1E,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;aAC/B;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEjD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBAC3B,MAAM,YAAY,GAAG,qCAAqC,aAAa,GAAG,CAAC;gBAC3E,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;aAC/B;YAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YAEnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,EAAC,MAAM,EAAC,CAAC,CAAC;YAE5C,OAAO,MAAM,CAAC;QAChB,CAAC;KAAA;CACF"}
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env node
2
- "use strict";
3
2
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4
3
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5
4
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -9,20 +8,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
10
9
  });
11
10
  };
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- const commander_1 = require("commander");
14
- const findUp = require("find-up");
15
- const fs = require("fs");
16
- const open = require("open");
17
- const path = require("path");
18
- const RepositoryService_1 = require("./RepositoryService");
11
+ import path from 'node:path';
12
+ import fs from 'node:fs';
13
+ import { fileURLToPath } from 'node:url';
14
+ import { program as commander } from 'commander';
15
+ import { findUp } from 'find-up';
16
+ import open from 'open';
17
+ import { RepositoryService } from './RepositoryService.js';
18
+ const __filename = fileURLToPath(import.meta.url);
19
+ const __dirname = path.dirname(__filename);
19
20
  const defaultPackageJsonPath = path.join(__dirname, 'package.json');
20
21
  const packageJsonPath = fs.existsSync(defaultPackageJsonPath)
21
22
  ? defaultPackageJsonPath
22
23
  : path.join(__dirname, '../package.json');
23
24
  const packageJson = fs.readFileSync(packageJsonPath, 'utf-8');
24
25
  const { description, name, version } = JSON.parse(packageJson);
25
- commander_1.program
26
+ commander
26
27
  .name(name.replace(/^@[^/]+\//, ''))
27
28
  .description(description)
28
29
  .option('-d, --debug', 'Enable debug logging')
@@ -32,15 +33,15 @@ commander_1.program
32
33
  .arguments('[directory]')
33
34
  .version(version, '-v, --version')
34
35
  .parse(process.argv);
35
- const resolvedBaseDir = path.resolve(commander_1.program.args[0] || '.');
36
- const commanderOptions = commander_1.program.opts();
36
+ const resolvedBaseDir = path.resolve(commander.args[0] || '.');
37
+ const commanderOptions = commander.opts();
37
38
  void (() => __awaiter(void 0, void 0, void 0, function* () {
38
39
  try {
39
40
  const gitDir = yield findUp('.git', { cwd: resolvedBaseDir, type: 'directory' });
40
41
  if (!gitDir) {
41
42
  throw new Error(`Could not find a git repository in "${resolvedBaseDir}".`);
42
43
  }
43
- const repositoryService = new RepositoryService_1.RepositoryService(Object.assign(Object.assign({}, (commanderOptions.debug && { debug: commanderOptions.debug })), (commanderOptions.timeout && { timeout: parseInt(commanderOptions.timeout, 10) })));
44
+ const repositoryService = new RepositoryService(Object.assign(Object.assign({}, (commanderOptions.debug && { debug: commanderOptions.debug })), (commanderOptions.timeout && { timeout: parseInt(commanderOptions.timeout, 10) })));
44
45
  let fullUrl = yield repositoryService.getFullUrl(gitDir);
45
46
  if (!commanderOptions.branch) {
46
47
  const pullRequestUrl = yield repositoryService.getPullRequestUrl(fullUrl);
@@ -50,9 +51,10 @@ void (() => __awaiter(void 0, void 0, void 0, function* () {
50
51
  }
51
52
  if (commanderOptions.print) {
52
53
  console.info(fullUrl);
53
- return;
54
54
  }
55
- yield open(fullUrl);
55
+ else {
56
+ yield open(fullUrl);
57
+ }
56
58
  process.exit();
57
59
  }
58
60
  catch (error) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './RepositoryService.js';
@@ -0,0 +1,2 @@
1
+ export * from './RepositoryService.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -0,0 +1,19 @@
1
+ export interface PullRequest {
2
+ _links: {
3
+ html: {
4
+ href: string;
5
+ };
6
+ };
7
+ head: {
8
+ ref: string;
9
+ };
10
+ }
11
+ export declare class GitHubClient {
12
+ private readonly apiClient;
13
+ constructor(timeout?: number);
14
+ getPullRequestByBranch(user: string, repository: string, branch: string): Promise<PullRequest | undefined>;
15
+ /**
16
+ * @see https://developer.github.com/v3/pulls/#list-pull-requests
17
+ */
18
+ getPullRequests(user: string, repository: string): Promise<PullRequest[]>;
19
+ }
@@ -0,0 +1,24 @@
1
+ import axios from 'axios';
2
+ const TWO_SECONDS_IN_MILLIS = 2000;
3
+ export class GitHubClient {
4
+ constructor(timeout = TWO_SECONDS_IN_MILLIS) {
5
+ this.apiClient = axios.create({ baseURL: 'https://api.github.com', timeout });
6
+ }
7
+ async getPullRequestByBranch(user, repository, branch) {
8
+ const pullRequests = await this.getPullRequests(user, repository);
9
+ return pullRequests.find(pr => !!pr.head && pr.head.ref === branch);
10
+ }
11
+ /**
12
+ * @see https://developer.github.com/v3/pulls/#list-pull-requests
13
+ */
14
+ async getPullRequests(user, repository) {
15
+ const resourceUrl = `repos/${user}/${repository}/pulls`;
16
+ const response = await this.apiClient.get(resourceUrl, {
17
+ params: {
18
+ state: 'open',
19
+ },
20
+ });
21
+ return response.data;
22
+ }
23
+ }
24
+ //# sourceMappingURL=GitHubClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitHubClient.js","sourceRoot":"","sources":["../../src/GitHubClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAa3C,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC,MAAM,OAAO,YAAY;IAGvB,YAAY,UAAkB,qBAAqB;QACjD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,EAAC,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAC,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,IAAY,EAAE,UAAkB,EAAE,MAAc;QAC3E,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAClE,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,IAAY,EAAE,UAAkB;QACpD,MAAM,WAAW,GAAG,SAAS,IAAI,IAAI,UAAU,QAAQ,CAAC;QAExD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE;YACrD,MAAM,EAAE;gBACN,KAAK,EAAE,MAAM;aACd;SACF,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ export interface Options {
2
+ debug?: boolean;
3
+ timeout?: number;
4
+ }
5
+ export declare class RepositoryService {
6
+ private readonly gitHubClient;
7
+ private readonly logger;
8
+ private readonly options;
9
+ private readonly parser;
10
+ constructor(options?: Options);
11
+ getFullUrl(gitDir: string): Promise<string>;
12
+ getPullRequestUrl(url: string): Promise<string | void>;
13
+ parseGitBranch(gitDir: string): Promise<string>;
14
+ parseGitConfig(gitDir: string): Promise<string>;
15
+ }
@@ -0,0 +1,93 @@
1
+ import { promises as fsAsync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import logdown from 'logdown';
4
+ import { GitHubClient } from './GitHubClient.js';
5
+ export class RepositoryService {
6
+ constructor(options) {
7
+ this.parser = {
8
+ fullUrl: new RegExp('^(?:.+?://(?:.+@)?|(?:.+@)?)(.+?)[:/](.+?)(?:.git)?/?$', 'i'),
9
+ gitBranch: new RegExp('ref: refs/heads/(?<branch>.*)$', 'mi'),
10
+ pullRequest: new RegExp('github\\.com\\/(?<user>[^\\/]+)\\/(?<project>[^/]+)\\/tree\\/(?<branch>.*)'),
11
+ rawUrl: new RegExp('.*url = (?<rawUrl>.*)', 'mi'),
12
+ };
13
+ this.options = Object.assign({ debug: false, timeout: 2000 }, options);
14
+ this.gitHubClient = new GitHubClient(this.options.timeout);
15
+ this.logger = logdown('gh-open', {
16
+ logger: console,
17
+ markdown: false,
18
+ });
19
+ this.logger.state.isEnabled = this.options.debug;
20
+ }
21
+ async getFullUrl(gitDir) {
22
+ const rawUrl = await this.parseGitConfig(gitDir);
23
+ const gitBranch = await this.parseGitBranch(gitDir);
24
+ const match = this.parser.fullUrl.exec(rawUrl);
25
+ if (!match) {
26
+ const errorMessage = 'Could not convert raw URL.';
27
+ throw new Error(errorMessage);
28
+ }
29
+ const parsedUrl = rawUrl.replace(this.parser.fullUrl, 'https://$1/$2');
30
+ this.logger.info('Found parsed URL', { parsedUrl });
31
+ return `${parsedUrl}/tree/${gitBranch}`;
32
+ }
33
+ async getPullRequestUrl(url) {
34
+ const match = this.parser.pullRequest.exec(url);
35
+ if (!match || !match.groups) {
36
+ const errorMessage = `Could not convert GitHub URL "${url}" to pull request`;
37
+ throw new Error(errorMessage);
38
+ }
39
+ const { user, project, branch } = match.groups;
40
+ try {
41
+ const response = await this.gitHubClient.getPullRequestByBranch(user, project, branch);
42
+ if (response && response._links && response._links.html && response._links.html.href) {
43
+ const pullRequestUrl = response._links.html.href;
44
+ this.logger.info('Got pull request URL', { pullRequestUrl });
45
+ return pullRequestUrl;
46
+ }
47
+ }
48
+ catch (error) {
49
+ this.logger.warn(`Request failed: "${error.message}"`);
50
+ }
51
+ }
52
+ async parseGitBranch(gitDir) {
53
+ const gitHeadFile = path.join(gitDir, 'HEAD');
54
+ let gitHead;
55
+ try {
56
+ gitHead = await fsAsync.readFile(gitHeadFile, 'utf-8');
57
+ gitHead = gitHead.trim();
58
+ this.logger.info('Read git head file', { gitHead });
59
+ }
60
+ catch (error) {
61
+ const errorMessage = `Could not find git HEAD file in "${gitDir}".`;
62
+ throw new Error(errorMessage);
63
+ }
64
+ const match = this.parser.gitBranch.exec(gitHead);
65
+ if (!match || !match.groups) {
66
+ const errorMessage = `No branch found in git HEAD file: "${gitHead}"`;
67
+ throw new Error(errorMessage);
68
+ }
69
+ return match.groups.branch;
70
+ }
71
+ async parseGitConfig(gitDir) {
72
+ const gitConfigFile = path.join(gitDir, 'config');
73
+ let gitConfig;
74
+ try {
75
+ gitConfig = await fsAsync.readFile(gitConfigFile, 'utf-8');
76
+ gitConfig = gitConfig.trim();
77
+ this.logger.info('Read git config file', { gitConfigFile });
78
+ }
79
+ catch (error) {
80
+ const errorMessage = `Could not find git config file: "${gitConfigFile}"`;
81
+ throw new Error(errorMessage);
82
+ }
83
+ const match = this.parser.rawUrl.exec(gitConfig);
84
+ if (!match || !match.groups) {
85
+ const errorMessage = `No URL found in git config file: "${gitConfigFile}"`;
86
+ throw new Error(errorMessage);
87
+ }
88
+ const rawUrl = match.groups.rawUrl;
89
+ this.logger.info('Found raw URL', { rawUrl });
90
+ return rawUrl;
91
+ }
92
+ }
93
+ //# sourceMappingURL=RepositoryService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RepositoryService.js","sourceRoot":"","sources":["../../src/RepositoryService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env node
2
+ import path from 'node:path';
3
+ import fs from 'node:fs';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { program as commander } from 'commander';
6
+ import { findUp } from 'find-up';
7
+ import open from 'open';
8
+ import { RepositoryService } from './RepositoryService.js';
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = path.dirname(__filename);
11
+ const defaultPackageJsonPath = path.join(__dirname, 'package.json');
12
+ const packageJsonPath = fs.existsSync(defaultPackageJsonPath)
13
+ ? defaultPackageJsonPath
14
+ : path.join(__dirname, '../package.json');
15
+ const packageJson = fs.readFileSync(packageJsonPath, 'utf-8');
16
+ const { description, name, version } = JSON.parse(packageJson);
17
+ commander
18
+ .name(name.replace(/^@[^/]+\//, ''))
19
+ .description(description)
20
+ .option('-d, --debug', 'Enable debug logging')
21
+ .option('-p, --print', 'Just print the URL')
22
+ .option('-b, --branch', 'Open the branch tree (and not the PR)')
23
+ .option('-t, --timeout <number>', 'Set a custom timeout for HTTP requests')
24
+ .arguments('[directory]')
25
+ .version(version, '-v, --version')
26
+ .parse(process.argv);
27
+ const resolvedBaseDir = path.resolve(commander.args[0] || '.');
28
+ const commanderOptions = commander.opts();
29
+ void (async () => {
30
+ try {
31
+ const gitDir = await findUp('.git', { cwd: resolvedBaseDir, type: 'directory' });
32
+ if (!gitDir) {
33
+ throw new Error(`Could not find a git repository in "${resolvedBaseDir}".`);
34
+ }
35
+ const repositoryService = new RepositoryService(Object.assign(Object.assign({}, (commanderOptions.debug && { debug: commanderOptions.debug })), (commanderOptions.timeout && { timeout: parseInt(commanderOptions.timeout, 10) })));
36
+ let fullUrl = await repositoryService.getFullUrl(gitDir);
37
+ if (!commanderOptions.branch) {
38
+ const pullRequestUrl = await repositoryService.getPullRequestUrl(fullUrl);
39
+ if (pullRequestUrl) {
40
+ fullUrl = pullRequestUrl;
41
+ }
42
+ }
43
+ if (commanderOptions.print) {
44
+ console.info(fullUrl);
45
+ }
46
+ else {
47
+ await open(fullUrl);
48
+ }
49
+ process.exit();
50
+ }
51
+ catch (error) {
52
+ console.error(error.message);
53
+ process.exit(1);
54
+ }
55
+ })();
56
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './RepositoryService.js';
@@ -0,0 +1,2 @@
1
+ export * from './RepositoryService.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
package/package.json CHANGED
@@ -1,38 +1,33 @@
1
1
  {
2
2
  "author": "Florian Imdahl <git@ffflorian.de>",
3
3
  "bin": {
4
- "gh-open": "cli.js"
4
+ "gh-open": "dist/cjs/cli.js"
5
5
  },
6
6
  "dependencies": {
7
- "axios": "1.3.1",
7
+ "axios": "1.3.5",
8
8
  "commander": "10.0.0",
9
- "find-up": "5.0.0",
9
+ "find-up": "6.3.0",
10
10
  "logdown": "3.3.1",
11
- "open": "8.4.0"
11
+ "open": "9.1.0"
12
12
  },
13
13
  "description": "Open a GitHub repository in your browser. Opens pull requests by default.",
14
14
  "devDependencies": {
15
15
  "http-status-codes": "2.2.0",
16
16
  "nock": "13.3.0",
17
- "rimraf": "4.1.2",
18
- "typescript": "4.9.5"
17
+ "rimraf": "4.4.1",
18
+ "typescript": "5.0.3"
19
19
  },
20
20
  "engines": {
21
- "node": ">= 10.9"
21
+ "node": ">= 14.16"
22
+ },
23
+ "exports": {
24
+ ".": {
25
+ "import": "./dist/mjs/index.js",
26
+ "require": "./dist/cjs/index.js"
27
+ }
22
28
  },
23
29
  "files": [
24
- "GitHubClient.d.ts",
25
- "GitHubClient.js",
26
- "GitHubClient.js.map",
27
- "RepositoryService.d.ts",
28
- "RepositoryService.js",
29
- "RepositoryService.js.map",
30
- "cli.d.ts",
31
- "cli.js",
32
- "cli.js.map",
33
- "index.d.ts",
34
- "index.js",
35
- "index.js.map"
30
+ "dist"
36
31
  ],
37
32
  "keywords": [
38
33
  "cli",
@@ -42,20 +37,23 @@
42
37
  "typescript"
43
38
  ],
44
39
  "license": "GPL-3.0",
45
- "main": "index.js",
40
+ "main": "dist/cjs/index.js",
41
+ "module": "dist/mjs/index.js",
46
42
  "name": "@ffflorian/gh-open",
47
- "publishConfig": {
48
- "directory": "flattened"
49
- },
50
43
  "repository": "https://github.com/ffflorian/node-packages/tree/main/packages/gh-open",
51
44
  "scripts": {
52
- "build": "tsc",
45
+ "build": "yarn build:cjs && yarn build:mjs && yarn generate:packagejson",
46
+ "build:cjs": "tsc -p tsconfig.cjs.json",
47
+ "build:mjs": "tsc -p tsconfig.json",
53
48
  "clean": "rimraf dist",
54
49
  "dist": "yarn clean && yarn build",
55
- "flatten": "node ../publish-flat/dist/cli.js -o flattened",
56
- "postversion": "node ../publish-flat/dist/cli-copy.js -o flattened/package.json version",
57
- "start": "ts-node src/cli.ts -d",
58
- "test": "ts-node -P tsconfig.jasmine.json ../../node_modules/.bin/jasmine"
50
+ "flatten": "exit 0",
51
+ "generate:packagejson": "../../bin/generate-hybrid-package-json.sh",
52
+ "postversion": "exit 0",
53
+ "start": "ts-node-esm src/cli.ts -d",
54
+ "test": "ts-node-esm -P tsconfig.jasmine.json ../../node_modules/.bin/jasmine"
59
55
  },
60
- "version": "3.1.6"
56
+ "type": "module",
57
+ "version": "3.1.8",
58
+ "gitHead": "753a6d8e8df598c2868529f40d363992d7bb4694"
61
59
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"GitHubClient.js","sourceRoot":"","sources":["../src/GitHubClient.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iCAA2C;AAa3C,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC,MAAa,YAAY;IAGvB,YAAY,UAAkB,qBAAqB;QACjD,IAAI,CAAC,SAAS,GAAG,eAAK,CAAC,MAAM,CAAC,EAAC,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAC,CAAC,CAAC;IAC9E,CAAC;IAEK,sBAAsB,CAAC,IAAY,EAAE,UAAkB,EAAE,MAAc;;YAC3E,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAClE,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;QACtE,CAAC;KAAA;IAED;;OAEG;IACG,eAAe,CAAC,IAAY,EAAE,UAAkB;;YACpD,MAAM,WAAW,GAAG,SAAS,IAAI,IAAI,UAAU,QAAQ,CAAC;YAExD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE;gBACrD,MAAM,EAAE;oBACN,KAAK,EAAE,MAAM;iBACd;aACF,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;KAAA;CACF;AA1BD,oCA0BC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RepositoryService.js","sourceRoot":"","sources":["../src/RepositoryService.ts"],"names":[],"mappings":"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"}
package/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,yCAA+C;AAC/C,kCAAkC;AAClC,yBAAyB;AACzB,6BAA8B;AAC9B,6BAA6B;AAE7B,2DAAsD;AAEtD,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AACpE,MAAM,eAAe,GAAG,EAAE,CAAC,UAAU,CAAC,sBAAsB,CAAC;IAC3D,CAAC,CAAC,sBAAsB;IACxB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAE5C,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAC9D,MAAM,EAAC,WAAW,EAAE,IAAI,EAAE,OAAO,EAAC,GAAyD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAEnH,mBAAS;KACN,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;KACnC,WAAW,CAAC,WAAW,CAAC;KACxB,MAAM,CAAC,aAAa,EAAE,sBAAsB,CAAC;KAC7C,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC;KAC3C,MAAM,CAAC,cAAc,EAAE,uCAAuC,CAAC;KAC/D,MAAM,CAAC,wBAAwB,EAAE,wCAAwC,CAAC;KAC1E,SAAS,CAAC,aAAa,CAAC;KACxB,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;KACjC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;AAC/D,MAAM,gBAAgB,GAAG,mBAAS,CAAC,IAAI,EAAE,CAAC;AAE1C,KAAK,CAAC,GAAS,EAAE;IACf,IAAI;QACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,EAAC,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,uCAAuC,eAAe,IAAI,CAAC,CAAC;SAC7E;QAED,MAAM,iBAAiB,GAAG,IAAI,qCAAiB,iCAC1C,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,EAAC,CAAC,GAC3D,CAAC,gBAAgB,CAAC,OAAO,IAAI,EAAC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC,EAAC,CAAC,EAClF,CAAC;QAEH,IAAI,OAAO,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEzD,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;YAC5B,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC1E,IAAI,cAAc,EAAE;gBAClB,OAAO,GAAG,cAAc,CAAC;aAC1B;SACF;QAED,IAAI,gBAAgB,CAAC,KAAK,EAAE;YAC1B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO;SACR;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,OAAO,CAAC,IAAI,EAAE,CAAC;KAChB;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACjB;AACH,CAAC,CAAA,CAAC,EAAE,CAAC"}
package/index.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from './RepositoryService';
package/index.js DELETED
@@ -1,18 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./RepositoryService"), exports);
18
- //# sourceMappingURL=index.js.map
package/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC"}
File without changes