github-issue-tower-defence-management 1.21.2 → 1.22.0

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/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # [1.22.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.21.2...v1.22.0) (2026-02-16)
2
+
3
+
4
+ ### Features
5
+
6
+ * **core:** add allowCacheMinutes to exported getStoryObjectMap function ([6385541](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/6385541dd1862fa1cc0e05ebfcc18f8a6f04d4b7))
7
+
1
8
  ## [1.21.2](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.21.1...v1.21.2) (2026-02-15)
2
9
 
3
10
 
@@ -43,7 +43,7 @@ const CheerioProjectRepository_1 = require("../../repositories/CheerioProjectRep
43
43
  const GetStoryObjectMapUseCase_1 = require("../../../domain/usecases/GetStoryObjectMapUseCase");
44
44
  class GetStoryObjectMapUseCaseHandler {
45
45
  constructor() {
46
- this.handle = async (configFilePath, verbose) => {
46
+ this.handle = async (configFilePath, verbose, allowCacheMinutes) => {
47
47
  axios_1.default.interceptors.response.use((response) => response, (error) => {
48
48
  if (verbose) {
49
49
  throw new Error(`API Error: ${JSON.stringify(error)}`);
@@ -142,7 +142,10 @@ class GetStoryObjectMapUseCaseHandler {
142
142
  const graphqlProjectItemRepository = new GraphqlProjectItemRepository_1.GraphqlProjectItemRepository(...githubRepositoryParams);
143
143
  const issueRepository = new ApiV3CheerioRestIssueRepository_1.ApiV3CheerioRestIssueRepository(apiV3IssueRepository, restIssueRepository, graphqlProjectItemRepository, localStorageCacheRepository, ...githubRepositoryParams);
144
144
  const getStoryObjectMapUseCase = new GetStoryObjectMapUseCase_1.GetStoryObjectMapUseCase(projectRepository, issueRepository);
145
- return await getStoryObjectMapUseCase.run(input);
145
+ const useCaseInput = allowCacheMinutes !== undefined
146
+ ? { ...input, allowIssueCacheMinutes: allowCacheMinutes }
147
+ : input;
148
+ return await getStoryObjectMapUseCase.run(useCaseInput);
146
149
  };
147
150
  }
148
151
  }
@@ -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;AAI7F,kDAA0C;AAC1C,0FAAuF;AACvF,gGAG2D;AAE3D,MAAa,+BAA+B;IAA5C;QACE,WAAM,GAAG,KAAK,EACZ,cAAsB,EACtB,OAAgB,EAMf,EAAE;YACH,eAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC7B,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACtB,CAAC,KAAiB,EAAE,EAAE;gBACpB,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACzD,CAAC;gBACD,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnB,MAAM,IAAI,KAAK,CAAC,cAAc,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACzD,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;YACnC,CAAC,CACF,CAAC;YAEF,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,olBAAqB,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;gBACF,sBAAsB;gBACtB,GAAG,SAAS,0BAA0B;gBACtC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK;aACnC,CAAC;YACF,MAAM,iBAAiB,GAAG;gBACxB,GAAG,IAAI,mDAAwB,CAAC,GAAG,sBAAsB,CAAC;gBAC1D,GAAG,IAAI,mDAAwB,CAAC,GAAG,sBAAsB,CAAC;aAC3D,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,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;AAlFD,0EAkFC"}
1
+ {"version":3,"file":"GetStoryObjectMapUseCaseHandler.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-issue-tower-defence-management",
3
- "version": "1.21.2",
3
+ "version": "1.22.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -0,0 +1,82 @@
1
+ import fs from 'fs';
2
+ import YAML from 'yaml';
3
+
4
+ jest.mock('fs');
5
+ jest.mock('gh-cookie', () => ({ getCookieContent: jest.fn() }));
6
+ jest.mock('../../repositories/LocalStorageRepository');
7
+ jest.mock('../../repositories/GraphqlProjectRepository');
8
+ jest.mock('../../repositories/issue/ApiV3IssueRepository');
9
+ jest.mock('../../repositories/issue/RestIssueRepository');
10
+ jest.mock('../../repositories/issue/GraphqlProjectItemRepository');
11
+ jest.mock('../../repositories/issue/ApiV3CheerioRestIssueRepository');
12
+ jest.mock('../../repositories/LocalStorageCacheRepository');
13
+ jest.mock('../../repositories/BaseGitHubRepository');
14
+ jest.mock('../../repositories/CheerioProjectRepository');
15
+
16
+ const mockRun = jest.fn().mockResolvedValue({
17
+ project: {},
18
+ issues: [],
19
+ cacheUsed: false,
20
+ storyObjectMap: new Map(),
21
+ });
22
+
23
+ jest.mock('../../../domain/usecases/GetStoryObjectMapUseCase', () => ({
24
+ GetStoryObjectMapUseCase: jest.fn().mockImplementation(() => ({
25
+ run: mockRun,
26
+ })),
27
+ }));
28
+
29
+ import { GetStoryObjectMapUseCaseHandler } from './GetStoryObjectMapUseCaseHandler';
30
+
31
+ const validConfig = {
32
+ projectUrl: 'https://github.com/orgs/test/projects/1',
33
+ projectName: 'test-project',
34
+ allowIssueCacheMinutes: 60,
35
+ credentials: {
36
+ bot: {
37
+ github: {
38
+ token: 'test-token',
39
+ },
40
+ },
41
+ },
42
+ };
43
+
44
+ describe('GetStoryObjectMapUseCaseHandler', () => {
45
+ beforeEach(() => {
46
+ mockRun.mockClear();
47
+ jest.mocked(fs.readFileSync).mockReturnValue(YAML.stringify(validConfig));
48
+ });
49
+
50
+ it('should pass config allowIssueCacheMinutes when allowCacheMinutes is not provided', async () => {
51
+ const handler = new GetStoryObjectMapUseCaseHandler();
52
+ await handler.handle('config.yml', false);
53
+
54
+ expect(mockRun).toHaveBeenCalledWith(
55
+ expect.objectContaining({
56
+ allowIssueCacheMinutes: 60,
57
+ }),
58
+ );
59
+ });
60
+
61
+ it('should override allowIssueCacheMinutes when allowCacheMinutes is provided', async () => {
62
+ const handler = new GetStoryObjectMapUseCaseHandler();
63
+ await handler.handle('config.yml', false, 120);
64
+
65
+ expect(mockRun).toHaveBeenCalledWith(
66
+ expect.objectContaining({
67
+ allowIssueCacheMinutes: 120,
68
+ }),
69
+ );
70
+ });
71
+
72
+ it('should use config value when allowCacheMinutes is undefined', async () => {
73
+ const handler = new GetStoryObjectMapUseCaseHandler();
74
+ await handler.handle('config.yml', false, undefined);
75
+
76
+ expect(mockRun).toHaveBeenCalledWith(
77
+ expect.objectContaining({
78
+ allowIssueCacheMinutes: 60,
79
+ }),
80
+ );
81
+ });
82
+ });
@@ -22,6 +22,7 @@ export class GetStoryObjectMapUseCaseHandler {
22
22
  handle = async (
23
23
  configFilePath: string,
24
24
  verbose: boolean,
25
+ allowCacheMinutes?: number,
25
26
  ): Promise<{
26
27
  project: Project;
27
28
  issues: Issue[];
@@ -98,6 +99,11 @@ export class GetStoryObjectMapUseCaseHandler {
98
99
  issueRepository,
99
100
  );
100
101
 
101
- return await getStoryObjectMapUseCase.run(input);
102
+ const useCaseInput =
103
+ allowCacheMinutes !== undefined
104
+ ? { ...input, allowIssueCacheMinutes: allowCacheMinutes }
105
+ : input;
106
+
107
+ return await getStoryObjectMapUseCase.run(useCaseInput);
102
108
  };
103
109
  }
@@ -1,4 +1,4 @@
1
- export declare const getStoryObjectMap: (configFilePath: string, verbose: boolean) => Promise<{
1
+ export declare const getStoryObjectMap: (configFilePath: string, verbose: boolean, allowCacheMinutes?: number) => Promise<{
2
2
  project: import("../../..").Project;
3
3
  issues: import("../../..").Issue[];
4
4
  cacheUsed: boolean;
@@ -2,7 +2,7 @@ import { Issue } from '../../../domain/entities/Issue';
2
2
  import { Project } from '../../../domain/entities/Project';
3
3
  import { StoryObjectMap } from '../../../domain/usecases/GetStoryObjectMapUseCase';
4
4
  export declare class GetStoryObjectMapUseCaseHandler {
5
- handle: (configFilePath: string, verbose: boolean) => Promise<{
5
+ handle: (configFilePath: string, verbose: boolean, allowCacheMinutes?: number) => Promise<{
6
6
  project: Project;
7
7
  issues: Issue[];
8
8
  cacheUsed: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"GetStoryObjectMapUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAI3D,OAAO,EAEL,cAAc,EACf,MAAM,mDAAmD,CAAC;AAE3D,qBAAa,+BAA+B;IAC1C,MAAM,mBACY,MAAM,WACb,OAAO,KACf,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,cAAc,EAAE,cAAc,CAAC;KAChC,CAAC,CAwEA;CACH"}
1
+ {"version":3,"file":"GetStoryObjectMapUseCaseHandler.d.ts","sourceRoot":"","sources":["../../../../src/adapter/entry-points/handlers/GetStoryObjectMapUseCaseHandler.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAI3D,OAAO,EAEL,cAAc,EACf,MAAM,mDAAmD,CAAC;AAE3D,qBAAa,+BAA+B;IAC1C,MAAM,mBACY,MAAM,WACb,OAAO,sBACI,MAAM,KACzB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,cAAc,EAAE,cAAc,CAAC;KAChC,CAAC,CA6EA;CACH"}