ya-git-jira 0.0.1

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 ADDED
@@ -0,0 +1,15 @@
1
+ # git-jira
2
+
3
+ To install dependencies:
4
+
5
+ ```bash
6
+ bun install
7
+ ```
8
+
9
+ To run:
10
+
11
+ ```bash
12
+ bun run index.ts
13
+ ```
14
+
15
+ This project was created using `bun init` in bun v1.0.0. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime.
package/bin/bump.ts ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env bun
2
+
3
+ import { createBranch, getCurrentBranch } from "../lib/git"
4
+
5
+ const currentBranch = await getCurrentBranch()
6
+
7
+ let stem = currentBranch
8
+ let version = 1
9
+
10
+ const match = currentBranch.match(/^(.+)[-\.]v(\d+)$/)
11
+ if (match) {
12
+ stem = match[1]
13
+ version = parseInt(match[2]) + 1
14
+ }
15
+
16
+ const nextBranch = `${stem}.v${version}`
17
+ await createBranch(nextBranch)
18
+
package/bin/start.ts ADDED
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env bun
2
+
3
+ import minimist from "minimist"
4
+ import { createBranch } from "../lib/git"
5
+ import { getIssue } from "../lib/jira"
6
+
7
+ const argv = minimist(process.argv.slice(2))
8
+ if (argv._.length !== 1) {
9
+ console.error("Usage: start <issue>")
10
+ process.exit(1)
11
+ }
12
+
13
+ const issueId = argv._[0]
14
+ const issue = await getIssue(issueId)
15
+ const summary = issue.fields.summary
16
+
17
+ function toKebab(s: string): string {
18
+ return s.replace(/([a-z]+)([A-Z]+)/g, "$1_2").toLowerCase()
19
+ .replace(/(\W+)/g, "-")
20
+ .replace(/-$/, "")
21
+ }
22
+
23
+ const branchName = `${issueId}-${toKebab(summary)}`
24
+ await createBranch(branchName)
package/bun.lockb ADDED
Binary file
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env bun
2
+ // @bun
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __toESM = (mod, isNodeMode, target) => {
9
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
10
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
11
+ for (let key of __getOwnPropNames(mod))
12
+ if (!__hasOwnProp.call(to, key))
13
+ __defProp(to, key, {
14
+ get: () => mod[key],
15
+ enumerable: true
16
+ });
17
+ return to;
18
+ };
19
+ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
20
+
21
+ // lib/git.ts
22
+ async function doCommand(args) {
23
+ const proc = Bun.spawn(args);
24
+ const stdout = new Response(proc.stdout);
25
+ const stderr = new Response(proc.stderr);
26
+ const [out, err] = await Promise.all([stdout.text(), stderr.text()]);
27
+ if (err)
28
+ console.error(err);
29
+ return out.trim();
30
+ }
31
+ async function getConfig(key) {
32
+ return doCommand(["git", "config", "--get", key]);
33
+ }
34
+ async function getJiraConfig() {
35
+ const host = await getConfig("jira.host");
36
+ const user = await getConfig("jira.user") || await getConfig("user.email");
37
+ const pat = await getConfig("jira.pat");
38
+ const token = Buffer.from(`${user}:${pat}`).toString("base64");
39
+ return { host, token };
40
+ }
41
+ async function createBranch(name) {
42
+ return doCommand(["git", "checkout", "-b", name]);
43
+ }
44
+ async function getCurrentBranch() {
45
+ return doCommand(["git", "rev-parse", "--abbrev-ref", "HEAD"]);
46
+ }
47
+
48
+ // bin/bump.ts
49
+ var currentBranch = await getCurrentBranch();
50
+ var stem = currentBranch;
51
+ var version = 1;
52
+ var match = currentBranch.match(/^(.+)[-\.]v(\d+)$/);
53
+ if (match) {
54
+ stem = match[1];
55
+ version = parseInt(match[2]) + 1;
56
+ }
57
+ var nextBranch = `${stem}.v${version}`;
58
+ await createBranch(nextBranch);
@@ -0,0 +1,308 @@
1
+ #!/usr/bin/env bun
2
+ // @bun
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __toESM = (mod, isNodeMode, target) => {
9
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
10
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
11
+ for (let key of __getOwnPropNames(mod))
12
+ if (!__hasOwnProp.call(to, key))
13
+ __defProp(to, key, {
14
+ get: () => mod[key],
15
+ enumerable: true
16
+ });
17
+ return to;
18
+ };
19
+ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
20
+
21
+ // node_modules/minimist/index.js
22
+ var require_minimist = __commonJS((exports, module) => {
23
+ var hasKey = function(obj, keys) {
24
+ var o = obj;
25
+ keys.slice(0, -1).forEach(function(key2) {
26
+ o = o[key2] || {};
27
+ });
28
+ var key = keys[keys.length - 1];
29
+ return key in o;
30
+ };
31
+ var isNumber = function(x) {
32
+ if (typeof x === "number") {
33
+ return true;
34
+ }
35
+ if (/^0x[0-9a-f]+$/i.test(x)) {
36
+ return true;
37
+ }
38
+ return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
39
+ };
40
+ var isConstructorOrProto = function(obj, key) {
41
+ return key === "constructor" && typeof obj[key] === "function" || key === "__proto__";
42
+ };
43
+ module.exports = function(args, opts) {
44
+ if (!opts) {
45
+ opts = {};
46
+ }
47
+ var flags = {
48
+ bools: {},
49
+ strings: {},
50
+ unknownFn: null
51
+ };
52
+ if (typeof opts.unknown === "function") {
53
+ flags.unknownFn = opts.unknown;
54
+ }
55
+ if (typeof opts.boolean === "boolean" && opts.boolean) {
56
+ flags.allBools = true;
57
+ } else {
58
+ [].concat(opts.boolean).filter(Boolean).forEach(function(key2) {
59
+ flags.bools[key2] = true;
60
+ });
61
+ }
62
+ var aliases = {};
63
+ function aliasIsBoolean(key2) {
64
+ return aliases[key2].some(function(x) {
65
+ return flags.bools[x];
66
+ });
67
+ }
68
+ Object.keys(opts.alias || {}).forEach(function(key2) {
69
+ aliases[key2] = [].concat(opts.alias[key2]);
70
+ aliases[key2].forEach(function(x) {
71
+ aliases[x] = [key2].concat(aliases[key2].filter(function(y) {
72
+ return x !== y;
73
+ }));
74
+ });
75
+ });
76
+ [].concat(opts.string).filter(Boolean).forEach(function(key2) {
77
+ flags.strings[key2] = true;
78
+ if (aliases[key2]) {
79
+ [].concat(aliases[key2]).forEach(function(k) {
80
+ flags.strings[k] = true;
81
+ });
82
+ }
83
+ });
84
+ var defaults = opts.default || {};
85
+ var argv = { _: [] };
86
+ function argDefined(key2, arg2) {
87
+ return flags.allBools && /^--[^=]+$/.test(arg2) || flags.strings[key2] || flags.bools[key2] || aliases[key2];
88
+ }
89
+ function setKey(obj, keys, value2) {
90
+ var o = obj;
91
+ for (var i2 = 0;i2 < keys.length - 1; i2++) {
92
+ var key2 = keys[i2];
93
+ if (isConstructorOrProto(o, key2)) {
94
+ return;
95
+ }
96
+ if (o[key2] === undefined) {
97
+ o[key2] = {};
98
+ }
99
+ if (o[key2] === Object.prototype || o[key2] === Number.prototype || o[key2] === String.prototype) {
100
+ o[key2] = {};
101
+ }
102
+ if (o[key2] === Array.prototype) {
103
+ o[key2] = [];
104
+ }
105
+ o = o[key2];
106
+ }
107
+ var lastKey = keys[keys.length - 1];
108
+ if (isConstructorOrProto(o, lastKey)) {
109
+ return;
110
+ }
111
+ if (o === Object.prototype || o === Number.prototype || o === String.prototype) {
112
+ o = {};
113
+ }
114
+ if (o === Array.prototype) {
115
+ o = [];
116
+ }
117
+ if (o[lastKey] === undefined || flags.bools[lastKey] || typeof o[lastKey] === "boolean") {
118
+ o[lastKey] = value2;
119
+ } else if (Array.isArray(o[lastKey])) {
120
+ o[lastKey].push(value2);
121
+ } else {
122
+ o[lastKey] = [o[lastKey], value2];
123
+ }
124
+ }
125
+ function setArg(key2, val, arg2) {
126
+ if (arg2 && flags.unknownFn && !argDefined(key2, arg2)) {
127
+ if (flags.unknownFn(arg2) === false) {
128
+ return;
129
+ }
130
+ }
131
+ var value2 = !flags.strings[key2] && isNumber(val) ? Number(val) : val;
132
+ setKey(argv, key2.split("."), value2);
133
+ (aliases[key2] || []).forEach(function(x) {
134
+ setKey(argv, x.split("."), value2);
135
+ });
136
+ }
137
+ Object.keys(flags.bools).forEach(function(key2) {
138
+ setArg(key2, defaults[key2] === undefined ? false : defaults[key2]);
139
+ });
140
+ var notFlags = [];
141
+ if (args.indexOf("--") !== -1) {
142
+ notFlags = args.slice(args.indexOf("--") + 1);
143
+ args = args.slice(0, args.indexOf("--"));
144
+ }
145
+ for (var i = 0;i < args.length; i++) {
146
+ var arg = args[i];
147
+ var key;
148
+ var next;
149
+ if (/^--.+=/.test(arg)) {
150
+ var m = arg.match(/^--([^=]+)=([\s\S]*)$/);
151
+ key = m[1];
152
+ var value = m[2];
153
+ if (flags.bools[key]) {
154
+ value = value !== "false";
155
+ }
156
+ setArg(key, value, arg);
157
+ } else if (/^--no-.+/.test(arg)) {
158
+ key = arg.match(/^--no-(.+)/)[1];
159
+ setArg(key, false, arg);
160
+ } else if (/^--.+/.test(arg)) {
161
+ key = arg.match(/^--(.+)/)[1];
162
+ next = args[i + 1];
163
+ if (next !== undefined && !/^(-|--)[^-]/.test(next) && !flags.bools[key] && !flags.allBools && (aliases[key] ? !aliasIsBoolean(key) : true)) {
164
+ setArg(key, next, arg);
165
+ i += 1;
166
+ } else if (/^(true|false)$/.test(next)) {
167
+ setArg(key, next === "true", arg);
168
+ i += 1;
169
+ } else {
170
+ setArg(key, flags.strings[key] ? "" : true, arg);
171
+ }
172
+ } else if (/^-[^-]+/.test(arg)) {
173
+ var letters = arg.slice(1, -1).split("");
174
+ var broken = false;
175
+ for (var j = 0;j < letters.length; j++) {
176
+ next = arg.slice(j + 2);
177
+ if (next === "-") {
178
+ setArg(letters[j], next, arg);
179
+ continue;
180
+ }
181
+ if (/[A-Za-z]/.test(letters[j]) && next[0] === "=") {
182
+ setArg(letters[j], next.slice(1), arg);
183
+ broken = true;
184
+ break;
185
+ }
186
+ if (/[A-Za-z]/.test(letters[j]) && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
187
+ setArg(letters[j], next, arg);
188
+ broken = true;
189
+ break;
190
+ }
191
+ if (letters[j + 1] && letters[j + 1].match(/\W/)) {
192
+ setArg(letters[j], arg.slice(j + 2), arg);
193
+ broken = true;
194
+ break;
195
+ } else {
196
+ setArg(letters[j], flags.strings[letters[j]] ? "" : true, arg);
197
+ }
198
+ }
199
+ key = arg.slice(-1)[0];
200
+ if (!broken && key !== "-") {
201
+ if (args[i + 1] && !/^(-|--)[^-]/.test(args[i + 1]) && !flags.bools[key] && (aliases[key] ? !aliasIsBoolean(key) : true)) {
202
+ setArg(key, args[i + 1], arg);
203
+ i += 1;
204
+ } else if (args[i + 1] && /^(true|false)$/.test(args[i + 1])) {
205
+ setArg(key, args[i + 1] === "true", arg);
206
+ i += 1;
207
+ } else {
208
+ setArg(key, flags.strings[key] ? "" : true, arg);
209
+ }
210
+ }
211
+ } else {
212
+ if (!flags.unknownFn || flags.unknownFn(arg) !== false) {
213
+ argv._.push(flags.strings._ || !isNumber(arg) ? arg : Number(arg));
214
+ }
215
+ if (opts.stopEarly) {
216
+ argv._.push.apply(argv._, args.slice(i + 1));
217
+ break;
218
+ }
219
+ }
220
+ }
221
+ Object.keys(defaults).forEach(function(k) {
222
+ if (!hasKey(argv, k.split("."))) {
223
+ setKey(argv, k.split("."), defaults[k]);
224
+ (aliases[k] || []).forEach(function(x) {
225
+ setKey(argv, x.split("."), defaults[k]);
226
+ });
227
+ }
228
+ });
229
+ if (opts["--"]) {
230
+ argv["--"] = notFlags.slice();
231
+ } else {
232
+ notFlags.forEach(function(k) {
233
+ argv._.push(k);
234
+ });
235
+ }
236
+ return argv;
237
+ };
238
+ });
239
+
240
+ // bin/start.ts
241
+ var import_minimist = __toESM(require_minimist(), 1);
242
+
243
+ // lib/git.ts
244
+ async function doCommand(args) {
245
+ const proc = Bun.spawn(args);
246
+ const stdout = new Response(proc.stdout);
247
+ const stderr = new Response(proc.stderr);
248
+ const [out, err] = await Promise.all([stdout.text(), stderr.text()]);
249
+ if (err)
250
+ console.error(err);
251
+ return out.trim();
252
+ }
253
+ async function getConfig(key) {
254
+ return doCommand(["git", "config", "--get", key]);
255
+ }
256
+ async function getJiraConfig() {
257
+ const host = await getConfig("jira.host");
258
+ const user = await getConfig("jira.user") || await getConfig("user.email");
259
+ const pat = await getConfig("jira.pat");
260
+ const token = Buffer.from(`${user}:${pat}`).toString("base64");
261
+ return { host, token };
262
+ }
263
+ async function createBranch(name) {
264
+ return doCommand(["git", "checkout", "-b", name]);
265
+ }
266
+ async function getCurrentBranch() {
267
+ return doCommand(["git", "rev-parse", "--abbrev-ref", "HEAD"]);
268
+ }
269
+
270
+ // lib/jira.ts
271
+ async function get(endpoint) {
272
+ const method = "GET";
273
+ const { host, token } = await getJiraConfig();
274
+ const base = `https://${host}/rest/api/3`;
275
+ const uri = `${base}/${endpoint}`;
276
+ const auth = `Basic ${token}`;
277
+ const headers = new Headers;
278
+ headers.append("Authorization", auth);
279
+ headers.append("Accept", "application/json");
280
+ const options = {
281
+ method,
282
+ headers
283
+ };
284
+ const request = new Request(uri, options);
285
+ const response = await fetch(request);
286
+ return await response.json();
287
+ }
288
+ async function getIssue(issue) {
289
+ return await get(`/issue/${issue}`);
290
+ }
291
+ async function getMyself() {
292
+ return await get("/myself");
293
+ }
294
+
295
+ // bin/start.ts
296
+ var toKebab = function(s) {
297
+ return s.replace(/([a-z]+)([A-Z]+)/g, "$1_2").toLowerCase().replace(/(\W+)/g, "-").replace(/-$/, "");
298
+ };
299
+ var argv = import_minimist.default(process.argv.slice(2));
300
+ if (argv._.length !== 1) {
301
+ console.error("Usage: start <issue>");
302
+ process.exit(1);
303
+ }
304
+ var issueId = argv._[0];
305
+ var issue = await getIssue(issueId);
306
+ var summary = issue.fields.summary;
307
+ var branchName = `${issueId}-${toKebab(summary)}`;
308
+ await createBranch(branchName);
package/dist/index.js ADDED
@@ -0,0 +1,78 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __toESM = (mod, isNodeMode, target) => {
7
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
8
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
9
+ for (let key of __getOwnPropNames(mod))
10
+ if (!__hasOwnProp.call(to, key))
11
+ __defProp(to, key, {
12
+ get: () => mod[key],
13
+ enumerable: true
14
+ });
15
+ return to;
16
+ };
17
+ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
18
+
19
+ // lib/git.ts
20
+ async function doCommand(args) {
21
+ const proc = Bun.spawn(args);
22
+ const stdout = new Response(proc.stdout);
23
+ const stderr = new Response(proc.stderr);
24
+ const [out, err] = await Promise.all([stdout.text(), stderr.text()]);
25
+ if (err)
26
+ console.error(err);
27
+ return out.trim();
28
+ }
29
+ async function getConfig(key) {
30
+ return doCommand(["git", "config", "--get", key]);
31
+ }
32
+ async function getJiraConfig() {
33
+ const host = await getConfig("jira.host");
34
+ const user = await getConfig("jira.user") || await getConfig("user.email");
35
+ const pat = await getConfig("jira.pat");
36
+ const token = Buffer.from(`${user}:${pat}`).toString("base64");
37
+ return { host, token };
38
+ }
39
+ async function createBranch(name) {
40
+ return doCommand(["git", "checkout", "-b", name]);
41
+ }
42
+ async function getCurrentBranch() {
43
+ return doCommand(["git", "rev-parse", "--abbrev-ref", "HEAD"]);
44
+ }
45
+ // lib/jira.ts
46
+ async function get(endpoint) {
47
+ const method = "GET";
48
+ const { host, token } = await getJiraConfig();
49
+ const base = `https://${host}/rest/api/3`;
50
+ const uri = `${base}/${endpoint}`;
51
+ const auth = `Basic ${token}`;
52
+ const headers = new Headers;
53
+ headers.append("Authorization", auth);
54
+ headers.append("Accept", "application/json");
55
+ const options = {
56
+ method,
57
+ headers
58
+ };
59
+ const request = new Request(uri, options);
60
+ const response = await fetch(request);
61
+ return await response.json();
62
+ }
63
+ async function getIssue(issue) {
64
+ return await get(`/issue/${issue}`);
65
+ }
66
+ async function getMyself() {
67
+ return await get("/myself");
68
+ }
69
+ export {
70
+ getMyself,
71
+ getJiraConfig,
72
+ getIssue,
73
+ getCurrentBranch,
74
+ getConfig,
75
+ get,
76
+ doCommand,
77
+ createBranch
78
+ };
package/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./lib/git.ts"
2
+ export * from "./lib/jira.ts"
package/lib/git.ts ADDED
@@ -0,0 +1,35 @@
1
+
2
+
3
+ export async function doCommand(args: string[]): Promise<string> {
4
+ const proc = Bun.spawn(args)
5
+ const stdout = new Response(proc.stdout)
6
+ const stderr = new Response(proc.stderr)
7
+ const [out, err] = await Promise.all([stdout.text(), stderr.text()])
8
+ if (err) console.error(err)
9
+ return out.trim()
10
+ }
11
+
12
+ export async function getConfig(key: string): Promise<string> {
13
+ return doCommand(["git", "config", "--get", key])
14
+ }
15
+
16
+ export interface JiraConfig {
17
+ host: string
18
+ token: string
19
+ }
20
+
21
+ export async function getJiraConfig(): Promise<JiraConfig> {
22
+ const host = await getConfig("jira.host")
23
+ const user = await getConfig("jira.user") || await getConfig("user.email")
24
+ const pat = await getConfig("jira.pat")
25
+ const token = Buffer.from(`${user}:${pat}`).toString('base64')
26
+ return { host, token }
27
+ }
28
+
29
+ export async function createBranch(name: string): Promise<string> {
30
+ return doCommand(["git", "checkout", "-b", name])
31
+ }
32
+
33
+ export async function getCurrentBranch(): Promise<string> {
34
+ return doCommand(["git", "rev-parse", "--abbrev-ref", "HEAD"])
35
+ }
package/lib/jira.ts ADDED
@@ -0,0 +1,42 @@
1
+
2
+ import { getJiraConfig } from "../lib/git"
3
+
4
+ type JSONValue =
5
+ | string
6
+ | number
7
+ | boolean
8
+ | { [x: string]: JSONValue }
9
+ | Array<JSONValue>
10
+
11
+ export async function get(endpoint: string): Promise<JSONValue> {
12
+ const method = "GET"
13
+ const { host, token } = await getJiraConfig()
14
+ const base = `https://${host}/rest/api/3`
15
+ const uri = `${base}/${endpoint}`
16
+ const auth = `Basic ${token}`
17
+ const headers = new Headers()
18
+ headers.append("Authorization", auth)
19
+ headers.append("Accept", "application/json")
20
+ const options = {
21
+ method,
22
+ headers,
23
+ }
24
+ const request = new Request(uri, options)
25
+ const response = await fetch(request)
26
+ return await response.json()
27
+ }
28
+
29
+ type Issue = JSONValue & {
30
+ fields: {
31
+ summary: string
32
+ }
33
+ }
34
+
35
+
36
+ export async function getIssue(issue: string): Promise<Issue> {
37
+ return await get(`/issue/${issue}`) as Issue
38
+ }
39
+
40
+ export async function getMyself(): Promise<JSONValue> {
41
+ return await get("/myself")
42
+ }
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "ya-git-jira",
3
+ "module": "dist/index.js",
4
+ "type": "module",
5
+ "bin": {
6
+ "git-jira-start": "dist/bin/start.js",
7
+ "git-bump": "dist/bin/bump.js"
8
+ },
9
+ "scripts": {
10
+ "preinstall": "bun build index.ts bin/start.ts bin/bump.ts --outdir dist"
11
+ },
12
+ "devDependencies": {
13
+ "bun-types": "latest"
14
+ },
15
+ "directories": {
16
+ "lib": "lib"
17
+ },
18
+ "peerDependencies": {
19
+ "typescript": "^5.0.0"
20
+ },
21
+ "dependencies": {
22
+ "minimist": "^1.2.8"
23
+ },
24
+ "description": "git extensions for Jira integration. Assumes bun is installed.",
25
+ "version": "0.0.1",
26
+ "main": "dist/start.js dist/bump.js",
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "git+https://github.com/jimlloyd/ya-git-jira.git"
30
+ },
31
+ "keywords": [
32
+ "git",
33
+ "jira",
34
+ "integration"
35
+ ],
36
+ "author": "jim.lloyd@gmail.com",
37
+ "license": "ISC",
38
+ "bugs": {
39
+ "url": "https://github.com/jimlloyd/ya-git-jira/issues"
40
+ },
41
+ "homepage": "https://github.com/jimlloyd/ya-git-jira#readme"
42
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "compilerOptions": {
3
+ "lib": ["ESNext"],
4
+ "module": "esnext",
5
+ "target": "esnext",
6
+ "moduleResolution": "bundler",
7
+ "moduleDetection": "force",
8
+ "allowImportingTsExtensions": true,
9
+ "noEmit": true,
10
+ "composite": true,
11
+ "strict": true,
12
+ "downlevelIteration": true,
13
+ "skipLibCheck": true,
14
+ "jsx": "preserve",
15
+ "allowSyntheticDefaultImports": true,
16
+ "forceConsistentCasingInFileNames": true,
17
+ "allowJs": true,
18
+ "types": [
19
+ "bun-types" // add Bun global
20
+ ]
21
+ }
22
+ }