github-issue-tower-defence-management 1.173.2 → 1.174.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 +19 -0
- package/README.md +15 -0
- package/bin/adapter/entry-points/cli/index.js +5 -3
- package/bin/adapter/entry-points/cli/index.js.map +1 -1
- package/bin/adapter/entry-points/console/consoleGithubTokenResolver.js +16 -5
- package/bin/adapter/entry-points/console/consoleGithubTokenResolver.js.map +1 -1
- package/bin/adapter/entry-points/console/ui-dist/assets/{index-BcnLfodS.js → index-g4SqIzCh.js} +2 -2
- package/bin/adapter/entry-points/console/ui-dist/index.html +1 -1
- package/bin/adapter/entry-points/console/webServer.js +16 -2
- package/bin/adapter/entry-points/console/webServer.js.map +1 -1
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +3 -1
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
- package/bin/adapter/entry-points/handlers/notifySilentTmuxSessions.js +1 -1
- package/bin/adapter/entry-points/handlers/notifySilentTmuxSessions.js.map +1 -1
- package/bin/adapter/repositories/LocalCommandIssueAttachmentRepository.js +7 -12
- package/bin/adapter/repositories/LocalCommandIssueAttachmentRepository.js.map +1 -1
- package/bin/adapter/repositories/TranscriptSessionSubAgentActivityRepository.js +26 -3
- package/bin/adapter/repositories/TranscriptSessionSubAgentActivityRepository.js.map +1 -1
- package/bin/domain/usecases/HandleScheduledEventUseCase.js +10 -5
- package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
- package/bin/domain/usecases/TriagerApprovalDispatchUseCase.js +142 -0
- package/bin/domain/usecases/TriagerApprovalDispatchUseCase.js.map +1 -0
- package/bin/domain/usecases/agentReportPrefix.js +5 -0
- package/bin/domain/usecases/agentReportPrefix.js.map +1 -0
- package/bin/domain/usecases/isPullRequestDeclaredUnnecessary.js +2 -2
- package/bin/domain/usecases/isPullRequestDeclaredUnnecessary.js.map +1 -1
- package/bin/domain/usecases/isRecord.js +6 -0
- package/bin/domain/usecases/isRecord.js.map +1 -0
- package/package.json +1 -1
- package/src/adapter/entry-points/cli/index.ts +8 -4
- package/src/adapter/entry-points/console/consoleGithubTokenResolver.test.ts +29 -2
- package/src/adapter/entry-points/console/consoleGithubTokenResolver.ts +21 -4
- package/src/adapter/entry-points/console/ui/src/features/console/components/content/ConsoleMarkdownContent.stories.tsx +5 -1
- package/src/adapter/entry-points/console/ui/src/features/console/lib/imageProxy.test.ts +8 -5
- package/src/adapter/entry-points/console/ui/src/features/console/lib/imageProxy.ts +2 -2
- package/src/adapter/entry-points/console/ui/src/features/console/pages/ConsoleItemDetailContainer.tsx +2 -2
- package/src/adapter/entry-points/console/ui-dist/assets/{index-BcnLfodS.js → index-g4SqIzCh.js} +2 -2
- package/src/adapter/entry-points/console/ui-dist/index.html +1 -1
- package/src/adapter/entry-points/console/webServer.test.ts +56 -5
- package/src/adapter/entry-points/console/webServer.ts +20 -3
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +7 -0
- package/src/adapter/entry-points/handlers/notifySilentTmuxSessions.ts +1 -0
- package/src/adapter/repositories/LocalCommandIssueAttachmentRepository.test.ts +53 -70
- package/src/adapter/repositories/LocalCommandIssueAttachmentRepository.ts +10 -13
- package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.test.ts +142 -0
- package/src/adapter/repositories/TranscriptSessionSubAgentActivityRepository.ts +41 -0
- package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +27 -0
- package/src/domain/usecases/HandleScheduledEventUseCase.ts +7 -3
- package/src/domain/usecases/TriagerApprovalDispatchUseCase.test.ts +879 -0
- package/src/domain/usecases/TriagerApprovalDispatchUseCase.ts +247 -0
- package/src/domain/usecases/agentReportPrefix.ts +1 -0
- package/src/domain/usecases/isPullRequestDeclaredUnnecessary.ts +1 -1
- package/src/domain/usecases/isRecord.ts +2 -0
- package/types/adapter/entry-points/cli/index.d.ts.map +1 -1
- package/types/adapter/entry-points/console/consoleGithubTokenResolver.d.ts +1 -0
- package/types/adapter/entry-points/console/consoleGithubTokenResolver.d.ts.map +1 -1
- package/types/adapter/entry-points/console/webServer.d.ts +2 -1
- package/types/adapter/entry-points/console/webServer.d.ts.map +1 -1
- package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
- package/types/adapter/entry-points/handlers/notifySilentTmuxSessions.d.ts.map +1 -1
- package/types/adapter/repositories/LocalCommandIssueAttachmentRepository.d.ts +3 -2
- package/types/adapter/repositories/LocalCommandIssueAttachmentRepository.d.ts.map +1 -1
- package/types/adapter/repositories/TranscriptSessionSubAgentActivityRepository.d.ts +3 -1
- package/types/adapter/repositories/TranscriptSessionSubAgentActivityRepository.d.ts.map +1 -1
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +3 -1
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
- package/types/domain/usecases/TriagerApprovalDispatchUseCase.d.ts +15 -0
- package/types/domain/usecases/TriagerApprovalDispatchUseCase.d.ts.map +1 -0
- package/types/domain/usecases/agentReportPrefix.d.ts +2 -0
- package/types/domain/usecases/agentReportPrefix.d.ts.map +1 -0
- package/types/domain/usecases/isRecord.d.ts +2 -0
- package/types/domain/usecases/isRecord.d.ts.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriagerApprovalDispatchUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/TriagerApprovalDispatchUseCase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentReportPrefix.js","sourceRoot":"","sources":["../../../src/domain/usecases/agentReportPrefix.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG,eAAe,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isPullRequestDeclaredUnnecessary = void 0;
|
|
4
|
-
const
|
|
4
|
+
const agentReportPrefix_1 = require("./agentReportPrefix");
|
|
5
5
|
const isPullRequestDeclaredUnnecessary = (comments, isTrustedAuthor) => {
|
|
6
6
|
const lastComment = comments[comments.length - 1];
|
|
7
7
|
if (!lastComment ||
|
|
8
8
|
!isTrustedAuthor(lastComment.author) ||
|
|
9
|
-
!lastComment.content.startsWith(AGENT_REPORT_PREFIX)) {
|
|
9
|
+
!lastComment.content.startsWith(agentReportPrefix_1.AGENT_REPORT_PREFIX)) {
|
|
10
10
|
return false;
|
|
11
11
|
}
|
|
12
12
|
const reportMatch = lastComment.content.match(/```json\n([\s\S]*?)\n```/);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isPullRequestDeclaredUnnecessary.js","sourceRoot":"","sources":["../../../src/domain/usecases/isPullRequestDeclaredUnnecessary.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"isPullRequestDeclaredUnnecessary.js","sourceRoot":"","sources":["../../../src/domain/usecases/isPullRequestDeclaredUnnecessary.ts"],"names":[],"mappings":";;;AAAA,2DAA0D;AAEnD,MAAM,gCAAgC,GAAG,CAC9C,QAA+C,EAC/C,eAA4C,EACnC,EAAE;IACX,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClD,IACE,CAAC,WAAW;QACZ,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC;QACpC,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,uCAAmB,CAAC,EACpD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC1E,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,UAAmB,CAAC;IACxB,IAAI,CAAC;QACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,iEAAiE,EACjE,KAAK,CACN,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,MAAM,GAA4B,EAAE,GAAG,UAAU,EAAE,CAAC;IAC1D,OAAO,MAAM,CAAC,mBAAmB,KAAK,KAAK,CAAC;AAC9C,CAAC,CAAC;AA/BW,QAAA,gCAAgC,oCA+B3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isRecord.js","sourceRoot":"","sources":["../../../src/domain/usecases/isRecord.ts"],"names":[],"mappings":";;;AAAO,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CAC3E,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AADjC,QAAA,QAAQ,YACyB"}
|
package/package.json
CHANGED
|
@@ -54,6 +54,7 @@ import {
|
|
|
54
54
|
} from '../console/consoleProjectResolver';
|
|
55
55
|
import {
|
|
56
56
|
createConsoleGithubTokenResolver,
|
|
57
|
+
createConsoleGithubTokenResolverByItemUrl,
|
|
57
58
|
createConsoleIssueRepositoryResolver,
|
|
58
59
|
createConsoleProjectRepositoryResolver,
|
|
59
60
|
} from '../console/consoleGithubTokenResolver';
|
|
@@ -825,9 +826,11 @@ const runServeWeb = async (options: ServeWebOptions): Promise<void> => {
|
|
|
825
826
|
...githubRepositoryParams,
|
|
826
827
|
);
|
|
827
828
|
|
|
829
|
+
const consoleGithubTokenFilesByRepositoryOwner =
|
|
830
|
+
config.consoleGithubTokenFilesByRepositoryOwner ?? null;
|
|
828
831
|
const resolveGithubToken = createConsoleGithubTokenResolver(
|
|
829
832
|
token,
|
|
830
|
-
|
|
833
|
+
consoleGithubTokenFilesByRepositoryOwner,
|
|
831
834
|
(filePath: string) => fs.readFileSync(filePath, 'utf8'),
|
|
832
835
|
);
|
|
833
836
|
const issueRepositoryByToken = new Map<string, IssueRepository>();
|
|
@@ -863,6 +866,8 @@ const runServeWeb = async (options: ServeWebOptions): Promise<void> => {
|
|
|
863
866
|
resolveGithubToken,
|
|
864
867
|
buildIssueRepositoryForToken,
|
|
865
868
|
);
|
|
869
|
+
const resolveGithubTokenForItemUrl =
|
|
870
|
+
createConsoleGithubTokenResolverByItemUrl(resolveGithubToken);
|
|
866
871
|
const projectRepositoryByToken = new Map<string, GraphqlProjectRepository>();
|
|
867
872
|
projectRepositoryByToken.set(token, projectRepository);
|
|
868
873
|
const buildProjectRepositoryForToken = (
|
|
@@ -916,15 +921,14 @@ const runServeWeb = async (options: ServeWebOptions): Promise<void> => {
|
|
|
916
921
|
dashboardDir,
|
|
917
922
|
dashboardDataDir,
|
|
918
923
|
dashboardProjectNames,
|
|
919
|
-
|
|
924
|
+
resolveGithubToken,
|
|
920
925
|
issueRepository,
|
|
921
926
|
resolveIssueRepository,
|
|
922
927
|
resolveProject,
|
|
923
928
|
isPjcodeConfigured,
|
|
924
929
|
issueAttachmentRepository: new LocalCommandIssueAttachmentRepository(
|
|
925
930
|
new NodeLocalCommandRunner(),
|
|
926
|
-
|
|
927
|
-
resolveGithubToken,
|
|
931
|
+
resolveGithubTokenForItemUrl,
|
|
928
932
|
),
|
|
929
933
|
issueTitleStateCache: new IssueTitleStateCache(),
|
|
930
934
|
pullRequestStatusCache: new PullRequestStatusCache(),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createConsoleGithubTokenResolver,
|
|
3
|
+
createConsoleGithubTokenResolverByItemUrl,
|
|
3
4
|
createConsoleIssueRepositoryResolver,
|
|
4
5
|
createConsoleProjectRepositoryResolver,
|
|
5
6
|
extractProjectOwner,
|
|
@@ -50,6 +51,30 @@ describe('createConsoleProjectRepositoryResolver', () => {
|
|
|
50
51
|
});
|
|
51
52
|
});
|
|
52
53
|
|
|
54
|
+
describe('createConsoleGithubTokenResolverByItemUrl', () => {
|
|
55
|
+
it('returns the token for the owner of the given item url', () => {
|
|
56
|
+
const resolve = createConsoleGithubTokenResolverByItemUrl(
|
|
57
|
+
(repositoryOwner) => `token-of-${repositoryOwner}`,
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
expect(
|
|
61
|
+
resolve('https://github.com/acme-labs/acme-portal-mock/issues/178'),
|
|
62
|
+
).toBe('token-of-acme-labs');
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it('throws when the repository owner cannot be read from the url', () => {
|
|
66
|
+
const resolve = createConsoleGithubTokenResolverByItemUrl(
|
|
67
|
+
(repositoryOwner) => `token-of-${repositoryOwner}`,
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
expect(() =>
|
|
71
|
+
resolve('https://github.com/acme-labs/acme-portal-mock'),
|
|
72
|
+
).toThrow(
|
|
73
|
+
'The repository owner cannot be read from the url: https://github.com/acme-labs/acme-portal-mock',
|
|
74
|
+
);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
|
|
53
78
|
describe('createConsoleIssueRepositoryResolver', () => {
|
|
54
79
|
it('builds the issue repository from the token of the owner in the url', () => {
|
|
55
80
|
const resolve = createConsoleIssueRepositoryResolver<string>(
|
|
@@ -128,14 +153,16 @@ describe('createConsoleGithubTokenResolver', () => {
|
|
|
128
153
|
expect(resolve('acme-labs')).toBe('fine-grained-token');
|
|
129
154
|
});
|
|
130
155
|
|
|
131
|
-
it('should
|
|
156
|
+
it('should throw when the per-owner token map is provided but the owner has no entry in it', () => {
|
|
132
157
|
const resolve = createConsoleGithubTokenResolver(
|
|
133
158
|
'default-token',
|
|
134
159
|
{ 'acme-labs': '/creds/acme-labs-token.txt' },
|
|
135
160
|
() => 'fine-grained-token',
|
|
136
161
|
);
|
|
137
162
|
|
|
138
|
-
expect(resolve('globex-inc')).
|
|
163
|
+
expect(() => resolve('globex-inc')).toThrow(
|
|
164
|
+
'No GitHub token file is configured for repository owner "globex-inc". Add an entry for this owner in consoleGithubTokenFilesByRepositoryOwner.',
|
|
165
|
+
);
|
|
139
166
|
});
|
|
140
167
|
|
|
141
168
|
it('should read the token file only once per owner', () => {
|
|
@@ -50,6 +50,20 @@ export const createConsoleProjectRepositoryResolver = <ProjectRepositoryType>(
|
|
|
50
50
|
};
|
|
51
51
|
};
|
|
52
52
|
|
|
53
|
+
export const createConsoleGithubTokenResolverByItemUrl = (
|
|
54
|
+
resolveGithubToken: ConsoleGithubTokenResolver,
|
|
55
|
+
): ((itemUrl: string) => string) => {
|
|
56
|
+
return (itemUrl: string): string => {
|
|
57
|
+
const owner = extractRepositoryOwner(itemUrl);
|
|
58
|
+
if (owner === null) {
|
|
59
|
+
throw new Error(
|
|
60
|
+
`The repository owner cannot be read from the url: ${itemUrl}`,
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
return resolveGithubToken(owner);
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
|
|
53
67
|
export const createConsoleGithubTokenResolver = (
|
|
54
68
|
defaultToken: string,
|
|
55
69
|
githubTokenFilePathByRepositoryOwner: Record<string, string> | null,
|
|
@@ -61,12 +75,15 @@ export const createConsoleGithubTokenResolver = (
|
|
|
61
75
|
if (alreadyResolved !== undefined) {
|
|
62
76
|
return alreadyResolved;
|
|
63
77
|
}
|
|
64
|
-
|
|
65
|
-
? githubTokenFilePathByRepositoryOwner[repositoryOwner]
|
|
66
|
-
: undefined;
|
|
67
|
-
if (filePath === undefined) {
|
|
78
|
+
if (githubTokenFilePathByRepositoryOwner === null) {
|
|
68
79
|
return defaultToken;
|
|
69
80
|
}
|
|
81
|
+
const filePath = githubTokenFilePathByRepositoryOwner[repositoryOwner];
|
|
82
|
+
if (filePath === undefined) {
|
|
83
|
+
throw new Error(
|
|
84
|
+
`No GitHub token file is configured for repository owner "${repositoryOwner}". Add an entry for this owner in consoleGithubTokenFilesByRepositoryOwner.`,
|
|
85
|
+
);
|
|
86
|
+
}
|
|
70
87
|
const token = readTokenFile(filePath).trim();
|
|
71
88
|
if (token.length === 0) {
|
|
72
89
|
throw new Error(
|
|
@@ -35,7 +35,11 @@ export const WithCodeFence: Story = {
|
|
|
35
35
|
export const WithProxiedGitHubImages: Story = {
|
|
36
36
|
args: {
|
|
37
37
|
body: consoleMarkdownImageBodyFixture,
|
|
38
|
-
buildImageProxyUrl: (src) =>
|
|
38
|
+
buildImageProxyUrl: (src) =>
|
|
39
|
+
buildImageProxyUrl(
|
|
40
|
+
src,
|
|
41
|
+
'https://github.com/example-owner/example-repo/issues/1',
|
|
42
|
+
),
|
|
39
43
|
},
|
|
40
44
|
};
|
|
41
45
|
|
|
@@ -4,6 +4,8 @@ import {
|
|
|
4
4
|
rewriteGitHubImageSources,
|
|
5
5
|
} from './imageProxy';
|
|
6
6
|
|
|
7
|
+
const itemUrl = 'https://github.com/example-owner/example-repo/issues/1';
|
|
8
|
+
|
|
7
9
|
describe('isProxyableImageUrl', () => {
|
|
8
10
|
it('matches github user-attachments urls', () => {
|
|
9
11
|
expect(
|
|
@@ -27,21 +29,22 @@ describe('isProxyableImageUrl', () => {
|
|
|
27
29
|
});
|
|
28
30
|
|
|
29
31
|
describe('buildImageProxyUrl', () => {
|
|
30
|
-
it('encodes the source url without appending a token', () => {
|
|
32
|
+
it('encodes the source url and the item url without appending a token', () => {
|
|
31
33
|
const src = 'https://github.com/user-attachments/assets/abc?x=1';
|
|
32
|
-
expect(buildImageProxyUrl(src)).toBe(
|
|
33
|
-
`/api/img?url=${encodeURIComponent(src)}`,
|
|
34
|
+
expect(buildImageProxyUrl(src, itemUrl)).toBe(
|
|
35
|
+
`/api/img?url=${encodeURIComponent(src)}&itemUrl=${encodeURIComponent(itemUrl)}`,
|
|
34
36
|
);
|
|
35
37
|
});
|
|
36
38
|
|
|
37
39
|
it('does not include a token query parameter', () => {
|
|
38
40
|
const src = 'https://github.com/user-attachments/assets/abc';
|
|
39
|
-
expect(buildImageProxyUrl(src)).not.toContain('k=');
|
|
41
|
+
expect(buildImageProxyUrl(src, itemUrl)).not.toContain('k=');
|
|
40
42
|
});
|
|
41
43
|
});
|
|
42
44
|
|
|
43
45
|
describe('rewriteGitHubImageSources', () => {
|
|
44
|
-
const buildProxyUrl = (src: string): string =>
|
|
46
|
+
const buildProxyUrl = (src: string): string =>
|
|
47
|
+
buildImageProxyUrl(src, itemUrl);
|
|
45
48
|
|
|
46
49
|
it('rewrites an allow-listed github image src to the proxy url', () => {
|
|
47
50
|
const githubSrc = 'https://github.com/user-attachments/assets/abc';
|
|
@@ -6,8 +6,8 @@ export const isProxyableImageUrl = (src: string): boolean =>
|
|
|
6
6
|
|
|
7
7
|
export type ImageProxyUrlBuilder = (src: string) => string;
|
|
8
8
|
|
|
9
|
-
export const buildImageProxyUrl = (src: string): string =>
|
|
10
|
-
`/api/img?url=${encodeURIComponent(src)}`;
|
|
9
|
+
export const buildImageProxyUrl = (src: string, itemUrl: string): string =>
|
|
10
|
+
`/api/img?url=${encodeURIComponent(src)}&itemUrl=${encodeURIComponent(itemUrl)}`;
|
|
11
11
|
|
|
12
12
|
export const rewriteGitHubImageSources = (
|
|
13
13
|
html: string,
|
|
@@ -60,8 +60,8 @@ export const ConsoleItemDetailContainer = ({
|
|
|
60
60
|
}: ConsoleItemDetailContainerProps) => {
|
|
61
61
|
const detail = useConsoleItemDetailData(caches, item);
|
|
62
62
|
const resolveImageProxyUrl = useCallback(
|
|
63
|
-
(src: string): string => buildImageProxyUrl(src),
|
|
64
|
-
[],
|
|
63
|
+
(src: string): string => buildImageProxyUrl(src, item.url),
|
|
64
|
+
[item.url],
|
|
65
65
|
);
|
|
66
66
|
const renderReferenceLink = useCallback(
|
|
67
67
|
(href: string, fallbackText: string) => (
|