github-issue-tower-defence-management 1.146.4 → 1.146.6

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.
Files changed (72) hide show
  1. package/.github/dependabot.yml +2 -0
  2. package/.github/workflows/codeql.yml +2 -2
  3. package/.github/workflows/commit-lint.yml +20 -0
  4. package/.github/workflows/umino-project.yml +0 -1
  5. package/CHANGELOG.md +14 -0
  6. package/bin/adapter/entry-points/cli/index.js +2 -2
  7. package/bin/adapter/entry-points/cli/index.js.map +1 -1
  8. package/bin/adapter/entry-points/console/ui-dist/assets/index-CPY6wV8C.js +82 -0
  9. package/bin/adapter/entry-points/console/ui-dist/index.html +1 -1
  10. package/bin/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.js +26 -100
  11. package/bin/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.js.map +1 -1
  12. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +49 -576
  13. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  14. package/bin/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.js +4 -3
  15. package/bin/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.js.map +1 -1
  16. package/bin/adapter/entry-points/handlers/OauthTokenSelectHandler.js +4 -3
  17. package/bin/adapter/entry-points/handlers/OauthTokenSelectHandler.js.map +1 -1
  18. package/bin/adapter/entry-points/handlers/notifySilentTmuxSessions.js +3 -2
  19. package/bin/adapter/entry-points/handlers/notifySilentTmuxSessions.js.map +1 -1
  20. package/bin/adapter/entry-points/handlers/resetDegeneratedTmuxSessions.js +1 -1
  21. package/bin/adapter/entry-points/handlers/resetDegeneratedTmuxSessions.js.map +1 -1
  22. package/bin/adapter/repositories/TmuxSilentSessionNotificationRepository.js +73 -2
  23. package/bin/adapter/repositories/TmuxSilentSessionNotificationRepository.js.map +1 -1
  24. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +31 -7
  25. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
  26. package/bin/domain/usecases/LiveSessionOauthTokenSelectUseCase.js +3 -1
  27. package/bin/domain/usecases/LiveSessionOauthTokenSelectUseCase.js.map +1 -1
  28. package/bin/domain/usecases/OauthTokenSelectUseCase.js +13 -4
  29. package/bin/domain/usecases/OauthTokenSelectUseCase.js.map +1 -1
  30. package/package.json +5 -7
  31. package/renovate.json +5 -0
  32. package/src/adapter/entry-points/cli/index.ts +2 -2
  33. package/src/adapter/entry-points/console/consoleGithubTokenResolver.test.ts +22 -20
  34. package/src/adapter/entry-points/console/consoleOperationApi.test.ts +2 -2
  35. package/src/adapter/entry-points/console/ui-dist/assets/index-CPY6wV8C.js +82 -0
  36. package/src/adapter/entry-points/console/ui-dist/index.html +1 -1
  37. package/src/adapter/entry-points/console/webServer.test.ts +2 -2
  38. package/src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.ts +31 -3
  39. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +68 -3
  40. package/src/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.test.ts +7 -4
  41. package/src/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.ts +4 -1
  42. package/src/adapter/entry-points/handlers/OauthTokenSelectHandler.test.ts +6 -2
  43. package/src/adapter/entry-points/handlers/OauthTokenSelectHandler.ts +8 -2
  44. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.test.ts +1 -0
  45. package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts +14 -2
  46. package/src/adapter/entry-points/handlers/resetDegeneratedTmuxSessions.ts +4 -1
  47. package/src/adapter/repositories/TmuxSilentSessionNotificationRepository.test.ts +157 -15
  48. package/src/adapter/repositories/TmuxSilentSessionNotificationRepository.ts +115 -1
  49. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +35 -4
  50. package/src/domain/usecases/LiveSessionOauthTokenSelectUseCase.test.ts +77 -5
  51. package/src/domain/usecases/LiveSessionOauthTokenSelectUseCase.ts +10 -1
  52. package/src/domain/usecases/OauthTokenSelectUseCase.test.ts +39 -8
  53. package/src/domain/usecases/OauthTokenSelectUseCase.ts +25 -5
  54. package/src/domain/usecases/ProjectRequiredFieldCreateUseCase.test.ts +3 -3
  55. package/tsconfig.json +0 -5
  56. package/types/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.d.ts.map +1 -1
  57. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  58. package/types/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.d.ts +3 -1
  59. package/types/adapter/entry-points/handlers/LiveSessionOauthTokenSelectHandler.d.ts.map +1 -1
  60. package/types/adapter/entry-points/handlers/OauthTokenSelectHandler.d.ts +3 -2
  61. package/types/adapter/entry-points/handlers/OauthTokenSelectHandler.d.ts.map +1 -1
  62. package/types/adapter/entry-points/handlers/notifySilentTmuxSessions.d.ts +1 -0
  63. package/types/adapter/entry-points/handlers/notifySilentTmuxSessions.d.ts.map +1 -1
  64. package/types/adapter/entry-points/handlers/resetDegeneratedTmuxSessions.d.ts.map +1 -1
  65. package/types/adapter/repositories/TmuxSilentSessionNotificationRepository.d.ts +14 -1
  66. package/types/adapter/repositories/TmuxSilentSessionNotificationRepository.d.ts.map +1 -1
  67. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
  68. package/types/domain/usecases/LiveSessionOauthTokenSelectUseCase.d.ts.map +1 -1
  69. package/types/domain/usecases/OauthTokenSelectUseCase.d.ts +4 -1
  70. package/types/domain/usecases/OauthTokenSelectUseCase.d.ts.map +1 -1
  71. package/bin/adapter/entry-points/console/ui-dist/assets/index-Bmc_nF1d.js +0 -82
  72. package/src/adapter/entry-points/console/ui-dist/assets/index-Bmc_nF1d.js +0 -82
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>TDPM Console</title>
7
- <script type="module" crossorigin src="/assets/index-Bmc_nF1d.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-CPY6wV8C.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-CKX2ny-z.css">
9
9
  </head>
10
10
  <body>
@@ -1,45 +1,10 @@
1
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
4
  };
38
5
  Object.defineProperty(exports, "__esModule", { value: true });
39
6
  exports.GetStoryObjectMapUseCaseHandler = void 0;
40
- const __typia_transform__validateReport = __importStar(require("typia/lib/internal/_validateReport"));
41
7
  const yaml_1 = __importDefault(require("yaml"));
42
- const typia_1 = __importDefault(require("typia"));
43
8
  const fs_1 = __importDefault(require("fs"));
44
9
  const LocalStorageRepository_1 = require("../../repositories/LocalStorageRepository");
45
10
  const GraphqlProjectRepository_1 = require("../../repositories/GraphqlProjectRepository");
@@ -55,71 +20,32 @@ class GetStoryObjectMapUseCaseHandler {
55
20
  this.handle = async (configFilePath, _verbose) => {
56
21
  const configFileContent = fs_1.default.readFileSync(configFilePath, 'utf8');
57
22
  const input = yaml_1.default.parse(configFileContent);
58
- if (!(() => { const _io0 = input => "string" === typeof input.projectUrl && "string" === typeof input.projectName && ("object" === typeof input.credentials && null !== input.credentials && _io1(input.credentials)); const _io1 = input => "object" === typeof input.bot && null !== input.bot && _io2(input.bot); const _io2 = input => "object" === typeof input.github && null !== input.github && _io3(input.github); const _io3 = input => "string" === typeof input.token; return input => "object" === typeof input && null !== input && _io0(input); })()(input)) {
59
- throw new Error(`Invalid input: ${JSON.stringify(input)}\n\n${JSON.stringify((() => { const _io0 = input => "string" === typeof input.projectUrl && "string" === typeof input.projectName && ("object" === typeof input.credentials && null !== input.credentials && _io1(input.credentials)); const _io1 = input => "object" === typeof input.bot && null !== input.bot && _io2(input.bot); const _io2 = input => "object" === typeof input.github && null !== input.github && _io3(input.github); const _io3 = input => "string" === typeof input.token; const _vo0 = (input, _path, _exceptionable = true) => ["string" === typeof input.projectUrl || _report(_exceptionable, {
60
- path: _path + ".projectUrl",
61
- expected: "string",
62
- value: input.projectUrl
63
- }), "string" === typeof input.projectName || _report(_exceptionable, {
64
- path: _path + ".projectName",
65
- expected: "string",
66
- value: input.projectName
67
- }), ("object" === typeof input.credentials && null !== input.credentials || _report(_exceptionable, {
68
- path: _path + ".credentials",
69
- expected: "__type",
70
- value: input.credentials
71
- })) && _vo1(input.credentials, _path + ".credentials", true && _exceptionable) || _report(_exceptionable, {
72
- path: _path + ".credentials",
73
- expected: "__type",
74
- value: input.credentials
75
- })].every(flag => flag); const _vo1 = (input, _path, _exceptionable = true) => [("object" === typeof input.bot && null !== input.bot || _report(_exceptionable, {
76
- path: _path + ".bot",
77
- expected: "__type.o1",
78
- value: input.bot
79
- })) && _vo2(input.bot, _path + ".bot", true && _exceptionable) || _report(_exceptionable, {
80
- path: _path + ".bot",
81
- expected: "__type.o1",
82
- value: input.bot
83
- })].every(flag => flag); const _vo2 = (input, _path, _exceptionable = true) => [("object" === typeof input.github && null !== input.github || _report(_exceptionable, {
84
- path: _path + ".github",
85
- expected: "__type.o2",
86
- value: input.github
87
- })) && _vo3(input.github, _path + ".github", true && _exceptionable) || _report(_exceptionable, {
88
- path: _path + ".github",
89
- expected: "__type.o2",
90
- value: input.github
91
- })].every(flag => flag); const _vo3 = (input, _path, _exceptionable = true) => ["string" === typeof input.token || _report(_exceptionable, {
92
- path: _path + ".token",
93
- expected: "string",
94
- value: input.token
95
- })].every(flag => flag); const __is = input => "object" === typeof input && null !== input && _io0(input); let errors; let _report; return input => {
96
- if (false === __is(input)) {
97
- errors = [];
98
- _report = __typia_transform__validateReport._validateReport(errors);
99
- ((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || _report(true, {
100
- path: _path + "",
101
- expected: "inputType",
102
- value: input
103
- })) && _vo0(input, _path + "", true) || _report(true, {
104
- path: _path + "",
105
- expected: "inputType",
106
- value: input
107
- }))(input, "$input", true);
108
- const success = 0 === errors.length;
109
- return success ? {
110
- success,
111
- data: input
112
- } : {
113
- success,
114
- errors,
115
- data: input
116
- };
117
- }
118
- return {
119
- success: true,
120
- data: input
121
- };
122
- }; })()(input))}`);
23
+ const isInputType = (v) => {
24
+ if (typeof v !== 'object' || v === null)
25
+ return false;
26
+ if (!('projectName' in v) || typeof v.projectName !== 'string')
27
+ return false;
28
+ if (!('credentials' in v) ||
29
+ typeof v.credentials !== 'object' ||
30
+ v.credentials === null)
31
+ return false;
32
+ const credentials = v.credentials;
33
+ if (!('bot' in credentials) ||
34
+ typeof credentials.bot !== 'object' ||
35
+ credentials.bot === null)
36
+ return false;
37
+ const bot = credentials.bot;
38
+ if (!('github' in bot) ||
39
+ typeof bot.github !== 'object' ||
40
+ bot.github === null)
41
+ return false;
42
+ const github = bot.github;
43
+ if (!('token' in github) || typeof github.token !== 'string')
44
+ return false;
45
+ return true;
46
+ };
47
+ if (!isInputType(input)) {
48
+ throw new Error(`Invalid input: required fields projectName and credentials.bot.github.token must be strings. Got: ${JSON.stringify(input)}`);
123
49
  }
124
50
  const localStorageRepository = new LocalStorageRepository_1.LocalStorageRepository();
125
51
  const cachePath = `./tmp/cache/${input.projectName}`;
@@ -1 +1 @@
1
- {"version":3,"file":"GetStoryObjectMapUseCaseHandler.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,kDAA0B;AAC1B,4CAAoB;AACpB,sFAAmF;AACnF,0FAAuF;AACvF,wFAAqF;AACrF,sFAAmF;AACnF,wGAAqG;AACrG,8GAA2G;AAC3G,gGAA6F;AAC7F,kFAA+E;AAI/E,gGAA6F;AAG7F,MAAa,+BAA+B;IAA5C;QACE,WAAM,GAAG,KAAK,EACZ,cAAsB,EACtB,QAAiB,EAMhB,EAAE;YACH,MAAM,iBAAiB,GAAG,YAAE,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;YAClE,MAAM,KAAK,GAAY,cAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAYrD,IAAI,giBAAqB,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAA2B,KAAK,EAAE,EAAE,CACjG,CAAC;YACJ,CAAC;YACD,MAAM,sBAAsB,GAAG,IAAI,+CAAsB,EAAE,CAAC;YAC5D,MAAM,SAAS,GAAG,eAAe,KAAK,CAAC,WAAW,EAAE,CAAC;YACrD,MAAM,2BAA2B,GAAG,IAAI,yDAA2B,CACjE,sBAAsB,EACtB,SAAS,CACV,CAAC;YACF,MAAM,sBAAsB,GAExB,CAAC,sBAAsB,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACjE,MAAM,iBAAiB,GAAG;gBACxB,GAAG,IAAI,mDAAwB,CAC7B,GAAG,sBAAsB,EACzB,2BAA2B,CAC5B;aACF,CAAC;YACF,MAAM,oBAAoB,GAAG,IAAI,2CAAoB,CACnD,GAAG,sBAAsB,CAC1B,CAAC;YACF,MAAM,mBAAmB,GAAG,IAAI,yCAAmB,CACjD,GAAG,sBAAsB,CAC1B,CAAC;YACF,MAAM,4BAA4B,GAAG,IAAI,2DAA4B,CACnE,GAAG,sBAAsB,CAC1B,CAAC;YACF,MAAM,eAAe,GAAG,IAAI,iEAA+B,CACzD,oBAAoB,EACpB,mBAAmB,EACnB,4BAA4B,EAC5B,2BAA2B,EAC3B,iBAAiB,EACjB,IAAI,2CAAoB,EAAE,EAC1B,GAAG,sBAAsB,CAC1B,CAAC;YAEF,MAAM,wBAAwB,GAAG,IAAI,mDAAwB,CAC3D,iBAAiB,EACjB,eAAe,CAChB,CAAC;YAEF,OAAO,MAAM,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC,CAAC;IACJ,CAAC;CAAA;AArED,0EAqEC"}
1
+ {"version":3,"file":"GetStoryObjectMapUseCaseHandler.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.ts"],"names":[],"mappings":"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"}