@axe-core/watcher 0.0.1-next.dccc616f → 0.0.1-next.eea56d54

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/dist/git.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ /** Check if the given `dir` is contained by a Git repository. */
2
+ export declare const isRepository: (dir?: string) => boolean;
3
+ /** Get the current branch name. */
4
+ export declare const getBranchName: (dir?: string) => string | null;
5
+ /** Get the default branch name. */
6
+ export declare const getDefaultBranchName: (dir?: string) => string | null;
7
+ /** Get the repository's remote URL. */
8
+ export declare const getRemoteURL: (dir?: string) => string | null;
9
+ interface CommitInfo {
10
+ message: string;
11
+ hash: string;
12
+ author: string;
13
+ email: string;
14
+ }
15
+ /** Get info on the most recent commit. */
16
+ export declare const getCommitInfo: (dir?: string) => CommitInfo | null;
17
+ /** Check if the repository contains unstaged changes. */
18
+ export declare const isDirty: (dir?: string) => boolean;
19
+ export {};
package/dist/git.js ADDED
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isDirty = exports.getCommitInfo = exports.getRemoteURL = exports.getDefaultBranchName = exports.getBranchName = exports.isRepository = void 0;
4
+ var child_process_1 = require("child_process");
5
+ /** Check if the given `dir` is contained by a Git repository. */
6
+ var isRepository = function (dir) {
7
+ if (dir === void 0) { dir = process.cwd(); }
8
+ try {
9
+ (0, child_process_1.execSync)('git rev-parse --is-inside-work-tree', {
10
+ cwd: dir,
11
+ // Prevent printing "fatal: not a git repository".
12
+ stdio: 'ignore'
13
+ });
14
+ return true;
15
+ }
16
+ catch (_a) {
17
+ return false;
18
+ }
19
+ };
20
+ exports.isRepository = isRepository;
21
+ /** Get the current branch name. */
22
+ var getBranchName = function (dir) {
23
+ if (dir === void 0) { dir = process.cwd(); }
24
+ try {
25
+ return (0, child_process_1.execSync)('git rev-parse --abbrev-ref HEAD', { cwd: dir })
26
+ .toString()
27
+ .trim();
28
+ }
29
+ catch (_a) {
30
+ return null;
31
+ }
32
+ };
33
+ exports.getBranchName = getBranchName;
34
+ /** Get the default branch name. */
35
+ var getDefaultBranchName = function (dir) {
36
+ if (dir === void 0) { dir = process.cwd(); }
37
+ try {
38
+ return (0, child_process_1.execSync)('git symbolic-ref --short refs/remotes/origin/HEAD', {
39
+ cwd: dir
40
+ })
41
+ .toString()
42
+ .trim()
43
+ .replace('origin/', '');
44
+ }
45
+ catch (_a) {
46
+ return null;
47
+ }
48
+ };
49
+ exports.getDefaultBranchName = getDefaultBranchName;
50
+ /** Get the repository's remote URL. */
51
+ var getRemoteURL = function (dir) {
52
+ if (dir === void 0) { dir = process.cwd(); }
53
+ try {
54
+ return (0, child_process_1.execSync)('git config --get remote.origin.url', { cwd: dir })
55
+ .toString()
56
+ .trim();
57
+ }
58
+ catch (_a) {
59
+ return null;
60
+ }
61
+ };
62
+ exports.getRemoteURL = getRemoteURL;
63
+ /** Get info on the most recent commit. */
64
+ var getCommitInfo = function (dir) {
65
+ if (dir === void 0) { dir = process.cwd(); }
66
+ try {
67
+ // %s=subject (message), %H=hash, %an=author name, %ae=author email, %n=newline
68
+ // See https://git-scm.com/docs/git-show#_pretty_formats
69
+ var stdout = (0, child_process_1.execSync)('git show --no-patch --format="%s%n%H%n%an%n%ae"', {
70
+ cwd: dir
71
+ });
72
+ var _a = stdout.toString().trim().split('\n'), message = _a[0], hash = _a[1], author = _a[2], email = _a[3];
73
+ return { message: message, hash: hash, author: author, email: email };
74
+ }
75
+ catch (_b) {
76
+ return null;
77
+ }
78
+ };
79
+ exports.getCommitInfo = getCommitInfo;
80
+ /** Check if the repository contains unstaged changes. */
81
+ var isDirty = function (dir) {
82
+ if (dir === void 0) { dir = process.cwd(); }
83
+ try {
84
+ var stdout = (0, child_process_1.execSync)('git status --short', { cwd: dir });
85
+ return stdout.length > 0;
86
+ }
87
+ catch (_a) {
88
+ return false;
89
+ }
90
+ };
91
+ exports.isDirty = isDirty;
92
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":";;;AAAA,+CAAwC;AAExC,iEAAiE;AAC1D,IAAM,YAAY,GAAG,UAAC,GAAmB;IAAnB,oBAAA,EAAA,MAAM,OAAO,CAAC,GAAG,EAAE;IAC9C,IAAI;QACF,IAAA,wBAAQ,EAAC,qCAAqC,EAAE;YAC9C,GAAG,EAAE,GAAG;YACR,kDAAkD;YAClD,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;KACZ;IAAC,WAAM;QACN,OAAO,KAAK,CAAA;KACb;AACH,CAAC,CAAA;AAXY,QAAA,YAAY,gBAWxB;AAED,mCAAmC;AAC5B,IAAM,aAAa,GAAG,UAAC,GAAmB;IAAnB,oBAAA,EAAA,MAAM,OAAO,CAAC,GAAG,EAAE;IAC/C,IAAI;QACF,OAAO,IAAA,wBAAQ,EAAC,iCAAiC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;aAC7D,QAAQ,EAAE;aACV,IAAI,EAAE,CAAA;KACV;IAAC,WAAM;QACN,OAAO,IAAI,CAAA;KACZ;AACH,CAAC,CAAA;AARY,QAAA,aAAa,iBAQzB;AAED,mCAAmC;AAC5B,IAAM,oBAAoB,GAAG,UAAC,GAAmB;IAAnB,oBAAA,EAAA,MAAM,OAAO,CAAC,GAAG,EAAE;IACtD,IAAI;QACF,OAAO,IAAA,wBAAQ,EAAC,mDAAmD,EAAE;YACnE,GAAG,EAAE,GAAG;SACT,CAAC;aACC,QAAQ,EAAE;aACV,IAAI,EAAE;aACN,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;KAC1B;IAAC,WAAM;QACN,OAAO,IAAI,CAAA;KACZ;AACH,CAAC,CAAA;AAXY,QAAA,oBAAoB,wBAWhC;AAED,uCAAuC;AAChC,IAAM,YAAY,GAAG,UAAC,GAAmB;IAAnB,oBAAA,EAAA,MAAM,OAAO,CAAC,GAAG,EAAE;IAC9C,IAAI;QACF,OAAO,IAAA,wBAAQ,EAAC,oCAAoC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;aAChE,QAAQ,EAAE;aACV,IAAI,EAAE,CAAA;KACV;IAAC,WAAM;QACN,OAAO,IAAI,CAAA;KACZ;AACH,CAAC,CAAA;AARY,QAAA,YAAY,gBAQxB;AASD,0CAA0C;AACnC,IAAM,aAAa,GAAG,UAAC,GAAmB;IAAnB,oBAAA,EAAA,MAAM,OAAO,CAAC,GAAG,EAAE;IAC/C,IAAI;QACF,+EAA+E;QAC/E,wDAAwD;QACxD,IAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,iDAAiD,EAAE;YACzE,GAAG,EAAE,GAAG;SACT,CAAC,CAAA;QACI,IAAA,KAAiC,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAApE,OAAO,QAAA,EAAE,IAAI,QAAA,EAAE,MAAM,QAAA,EAAE,KAAK,QAAwC,CAAA;QAC3E,OAAO,EAAE,OAAO,SAAA,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,KAAK,OAAA,EAAE,CAAA;KACxC;IAAC,WAAM;QACN,OAAO,IAAI,CAAA;KACZ;AACH,CAAC,CAAA;AAZY,QAAA,aAAa,iBAYzB;AAED,yDAAyD;AAClD,IAAM,OAAO,GAAG,UAAC,GAAmB;IAAnB,oBAAA,EAAA,MAAM,OAAO,CAAC,GAAG,EAAE;IACzC,IAAI;QACF,IAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;QAC3D,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;KACzB;IAAC,WAAM;QACN,OAAO,KAAK,CAAA;KACb;AACH,CAAC,CAAA;AAPY,QAAA,OAAO,WAOnB"}
package/dist/util.js CHANGED
@@ -14,6 +14,29 @@ var __extends = (this && this.__extends) || (function () {
14
14
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
15
  };
16
16
  })();
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
17
40
  var __importDefault = (this && this.__importDefault) || function (mod) {
18
41
  return (mod && mod.__esModule) ? mod : { "default": mod };
19
42
  };
@@ -22,6 +45,7 @@ exports.writeManifest = exports.writeVariables = exports.HeadlessNotSupportedErr
22
45
  var fs_1 = __importDefault(require("fs"));
23
46
  var path_1 = __importDefault(require("path"));
24
47
  var os_1 = __importDefault(require("os"));
48
+ var git = __importStar(require("./git"));
25
49
  exports.PATH_TO_EXTENSION = path_1.default.join(__dirname, '..', 'extension');
26
50
  exports.DEFAULT_SERVER_URL = 'https://axe.deque.com/';
27
51
  exports.PATH_TO_SESSION_FILE = path_1.default.join(os_1.default.tmpdir(), 'axe-watcher-session.json');
@@ -67,12 +91,25 @@ function writeVariables(_a) {
67
91
  throw new Error("Unable to read session configuration: ".concat(error));
68
92
  }
69
93
  }
70
- fs_1.default.writeFileSync(exports.PATH_TO_EXTENSION_VARIABLES, JSON.stringify({
94
+ var variables = {
71
95
  api_key: apiKey,
72
96
  server_url: urlString,
73
97
  session_id: sessionId,
74
98
  auto_analyze: !!autoAnalyze
75
- }));
99
+ };
100
+ // If the repository is a git repository, add git info to the variables.
101
+ if (git.isRepository()) {
102
+ variables.git_branch = git.getBranchName();
103
+ variables.git_default_branch = git.getDefaultBranchName();
104
+ var info = git.getCommitInfo();
105
+ variables.git_commit_sha = info === null || info === void 0 ? void 0 : info.hash;
106
+ variables.git_commit_author = info === null || info === void 0 ? void 0 : info.author;
107
+ variables.git_commit_email = info === null || info === void 0 ? void 0 : info.email;
108
+ variables.git_commit_message = info === null || info === void 0 ? void 0 : info.message;
109
+ variables.git_url = git.getRemoteURL();
110
+ variables.git_is_dirty = git.isDirty();
111
+ }
112
+ fs_1.default.writeFileSync(exports.PATH_TO_EXTENSION_VARIABLES, JSON.stringify(variables));
76
113
  }
77
114
  exports.writeVariables = writeVariables;
78
115
  /** Update the extension manifest file. */
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,0CAAmB;AACnB,8CAAuB;AACvB,0CAAmB;AAEN,QAAA,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;AAC3D,QAAA,kBAAkB,GAAG,wBAAwB,CAAA;AAC7C,QAAA,oBAAoB,GAAG,cAAI,CAAC,IAAI,CAC3C,YAAE,CAAC,MAAM,EAAE,EACX,0BAA0B,CAC3B,CAAA;AACY,QAAA,2BAA2B,GAAG,cAAI,CAAC,IAAI,CAClD,yBAAiB,EACjB,gBAAgB,CACjB,CAAA;AAEY,QAAA,aAAa,GAAG;IAC3B,sCAA+B,yBAAiB,CAAE;IAClD,2BAAoB,yBAAiB,CAAE;CAC/B,CAAA;AAEV;IAA+C,6CAAK;IAGlD;QAAA,YACE,kBAAM,sCAAsC,CAAC,SAC9C;QAJM,UAAI,GAAG,2BAA2B,CAAA;;IAIzC,CAAC;IACH,gCAAC;AAAD,CAAC,AAND,CAA+C,KAAK,GAMnD;AANY,8DAAyB;AA+BtC,6EAA6E;AAC7E,SAAgB,cAAc,CAAC,EAKR;QAJrB,MAAM,YAAA,EACN,SAAS,eAAA,EACT,SAAS,eAAA,EACT,WAAW,iBAAA;IAEX,IAAI,CAAC,SAAS,EAAE;QACd,SAAS,GAAG,0BAAkB,CAAA;KAC/B;IAED,IAAI,SAAS,CAAA;IACb,IAAI;QACF,SAAS,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAA;KAC1C;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAI,KAAK,CACb,mFAA4E,GAAG,CAAE,CAClF,CAAA;KACF;IAED,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;QACtC,WAAW,GAAG,IAAI,CAAA;KACnB;IAED,oFAAoF;IACpF,uFAAuF;IACvF,IAAI,CAAC,SAAS,IAAI,YAAE,CAAC,UAAU,CAAC,4BAAoB,CAAC,EAAE;QACrD,IAAI;YACF,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,4BAAoB,EAAE,MAAM,CAAC,CAAC,CAAA;YACtE,SAAS,GAAG,IAAI,CAAC,EAAY,CAAA;SAC9B;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,gDAAyC,KAAK,CAAE,CAAC,CAAA;SAClE;KACF;IAED,YAAE,CAAC,aAAa,CACd,mCAA2B,EAC3B,IAAI,CAAC,SAAS,CAAC;QACb,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,SAAS;QACrB,YAAY,EAAE,CAAC,CAAC,WAAW;KAC5B,CAAC,CACH,CAAA;AACH,CAAC;AA3CD,wCA2CC;AAOD,0CAA0C;AAC1C,SAAgB,aAAa,CAAC,EAGR;QAFpB,UAAU,gBAAA,EACV,aAAa,mBAAA;IAEb,IAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,yBAAiB,EAAE,eAAe,CAAC,CAAA;IAClE,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAA;IACnE,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,CAAA;IACnD,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,aAAa,CAAA;IACzD,YAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AACnE,CAAC;AATD,sCASC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}