@exabugs/dynamodb-client 1.18.0 → 1.19.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.
Files changed (87) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/integrations/react-admin/components/Alerts/AlertsList.d.ts +18 -0
  3. package/dist/integrations/react-admin/components/Alerts/AlertsList.d.ts.map +1 -0
  4. package/dist/integrations/react-admin/components/Alerts/AlertsList.js +34 -0
  5. package/dist/integrations/react-admin/components/Alerts/AlertsList.js.map +1 -0
  6. package/dist/integrations/react-admin/components/Alerts/AlertsShow.d.ts +10 -0
  7. package/dist/integrations/react-admin/components/Alerts/AlertsShow.d.ts.map +1 -0
  8. package/dist/integrations/react-admin/components/Alerts/AlertsShow.js +24 -0
  9. package/dist/integrations/react-admin/components/Alerts/AlertsShow.js.map +1 -0
  10. package/dist/integrations/react-admin/components/Alerts/alertsResource.d.ts +18 -0
  11. package/dist/integrations/react-admin/components/Alerts/alertsResource.d.ts.map +1 -0
  12. package/dist/integrations/react-admin/components/Alerts/alertsResource.js +19 -0
  13. package/dist/integrations/react-admin/components/Alerts/alertsResource.js.map +1 -0
  14. package/dist/integrations/react-admin/components/Alerts/alertsView.d.ts +51 -0
  15. package/dist/integrations/react-admin/components/Alerts/alertsView.d.ts.map +1 -0
  16. package/dist/integrations/react-admin/components/Alerts/alertsView.js +35 -0
  17. package/dist/integrations/react-admin/components/Alerts/alertsView.js.map +1 -0
  18. package/dist/integrations/react-admin/components/Alerts/index.d.ts +8 -0
  19. package/dist/integrations/react-admin/components/Alerts/index.d.ts.map +1 -0
  20. package/dist/integrations/react-admin/components/Alerts/index.js +5 -0
  21. package/dist/integrations/react-admin/components/Alerts/index.js.map +1 -0
  22. package/dist/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.d.ts +16 -0
  23. package/dist/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.d.ts.map +1 -1
  24. package/dist/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.js +27 -3
  25. package/dist/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.js.map +1 -1
  26. package/dist/integrations/react-admin/components/CloudWatchLog/index.d.ts +2 -2
  27. package/dist/integrations/react-admin/components/CloudWatchLog/index.d.ts.map +1 -1
  28. package/dist/integrations/react-admin/components/CloudWatchLog/index.js +1 -1
  29. package/dist/integrations/react-admin/components/CloudWatchLog/index.js.map +1 -1
  30. package/dist/integrations/react-admin/components/SystemChanges/SystemChangesList.d.ts +29 -0
  31. package/dist/integrations/react-admin/components/SystemChanges/SystemChangesList.d.ts.map +1 -0
  32. package/dist/integrations/react-admin/components/SystemChanges/SystemChangesList.js +38 -0
  33. package/dist/integrations/react-admin/components/SystemChanges/SystemChangesList.js.map +1 -0
  34. package/dist/integrations/react-admin/components/SystemChanges/SystemChangesShow.d.ts +9 -0
  35. package/dist/integrations/react-admin/components/SystemChanges/SystemChangesShow.d.ts.map +1 -0
  36. package/dist/integrations/react-admin/components/SystemChanges/SystemChangesShow.js +50 -0
  37. package/dist/integrations/react-admin/components/SystemChanges/SystemChangesShow.js.map +1 -0
  38. package/dist/integrations/react-admin/components/SystemChanges/index.d.ts +8 -0
  39. package/dist/integrations/react-admin/components/SystemChanges/index.d.ts.map +1 -0
  40. package/dist/integrations/react-admin/components/SystemChanges/index.js +5 -0
  41. package/dist/integrations/react-admin/components/SystemChanges/index.js.map +1 -0
  42. package/dist/integrations/react-admin/components/SystemChanges/systemChangesResource.d.ts +19 -0
  43. package/dist/integrations/react-admin/components/SystemChanges/systemChangesResource.d.ts.map +1 -0
  44. package/dist/integrations/react-admin/components/SystemChanges/systemChangesResource.js +20 -0
  45. package/dist/integrations/react-admin/components/SystemChanges/systemChangesResource.js.map +1 -0
  46. package/dist/integrations/react-admin/components/SystemChanges/systemChangesView.d.ts +96 -0
  47. package/dist/integrations/react-admin/components/SystemChanges/systemChangesView.d.ts.map +1 -0
  48. package/dist/integrations/react-admin/components/SystemChanges/systemChangesView.js +99 -0
  49. package/dist/integrations/react-admin/components/SystemChanges/systemChangesView.js.map +1 -0
  50. package/dist/integrations/react-admin/components/index.d.ts +7 -3
  51. package/dist/integrations/react-admin/components/index.d.ts.map +1 -1
  52. package/dist/integrations/react-admin/components/index.js +5 -2
  53. package/dist/integrations/react-admin/components/index.js.map +1 -1
  54. package/dist/integrations/react-admin/components/shared/LabeledIf.d.ts +23 -0
  55. package/dist/integrations/react-admin/components/shared/LabeledIf.d.ts.map +1 -0
  56. package/dist/integrations/react-admin/components/shared/LabeledIf.js +13 -0
  57. package/dist/integrations/react-admin/components/shared/LabeledIf.js.map +1 -0
  58. package/dist/integrations/react-admin/components/shared/messages.d.ts +9 -0
  59. package/dist/integrations/react-admin/components/shared/messages.d.ts.map +1 -0
  60. package/dist/integrations/react-admin/components/shared/messages.js +9 -0
  61. package/dist/integrations/react-admin/components/shared/messages.js.map +1 -0
  62. package/dist/integrations/react-admin/index.d.ts +6 -2
  63. package/dist/integrations/react-admin/index.d.ts.map +1 -1
  64. package/dist/integrations/react-admin/index.js +5 -1
  65. package/dist/integrations/react-admin/index.js.map +1 -1
  66. package/dist/server/handler.cjs +3 -3
  67. package/dist/server/media-handler.cjs +2 -2
  68. package/dist/server/media-process-handler-dlq.cjs +2 -2
  69. package/dist/server/media-process-handler.cjs +2 -2
  70. package/dist/system-changes/index.d.ts +2 -0
  71. package/dist/system-changes/index.d.ts.map +1 -1
  72. package/dist/system-changes/index.js +1 -0
  73. package/dist/system-changes/index.js.map +1 -1
  74. package/dist/system-changes/labels.d.ts +23 -0
  75. package/dist/system-changes/labels.d.ts.map +1 -0
  76. package/dist/system-changes/labels.js +32 -0
  77. package/dist/system-changes/labels.js.map +1 -0
  78. package/dist/system-changes/record.d.ts +1 -1
  79. package/dist/system-changes/record.d.ts.map +1 -1
  80. package/dist/system-changes/record.js +1 -1
  81. package/dist/system-changes/record.js.map +1 -1
  82. package/dist/system-changes/slack.d.ts.map +1 -1
  83. package/dist/system-changes/slack.js +6 -27
  84. package/dist/system-changes/slack.js.map +1 -1
  85. package/docs/NOTIFY.md +1 -1
  86. package/docs/SYSTEM_CHANGES.md +2 -0
  87. package/package.json +9 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.19.0] - 2026-10-24
11
+
12
+ ### Added
13
+
14
+ - **運用の画面**(`@exabugs/dynamodb-client/integrations/react-admin`。ADR 0006 の段階 4 = (f)): `AlertsList` / `AlertsShow`(運用通知の記録)と `SystemChangesList` / `SystemChangesShow`(システム変更履歴)。asanowa・astro に複製されていた react-admin の画面を 1 つにした。どちらも読み取り専用(作成・編集・削除・一括操作・書き出しなし)。`<Resource name="alerts" list={AlertsList} show={AlertsShow} icon={...} />` か、`<Resource {...alertsResource({ icon })} />` / `<Resource {...systemChangesResource({ icon })} />` で使う。文言は `messages`(既定は日本語。項目ごとに上書き)、アイコンは props(`@mui/icons-material` に依存しない)、リソース名は `name`。使い方は `docs/react-admin-integration.md` の「運用の画面」
15
+ - 画面の部品: `AlertLevelChip` / `SystemChangeResultChip` / `LabeledIf`、`alertMessagePreview` / `alertLevelChoices` / `alertsMessagesOf`、`systemChangeKindLabel` / `systemChangeResultLabel` / `lambdaChangeLabel` / `systemChangeKindChoices` / `systemChangeResultChoices` / `systemChangesMessagesOf` / `systemChangeRepresentation`、`systemChangeDurationSeconds` / `systemChangeDurationText` / `isSystemChangeStale` / `isSystemChangeRun` / `systemChangeCommitShort` / `lambdaReleasesOf` / `lambdaLogGroupUrl`、定数 `ALERTS_MESSAGES_JA` / `SYSTEM_CHANGES_MESSAGES_JA` / `SYSTEM_CHANGE_STALE_AFTER_MS` / `SYSTEM_CHANGE_COMMIT_SHORT` / `SYSTEM_CHANGES_DEFAULT_LAMBDA_REGION` ほか、型
16
+ - `cloudWatchLogGroupUrl(logGroup, region, { at?, beforeMs?, afterMs? })`: ストリームを指定しないロググループの CloudWatch の URL(期間つきでログイベントを直接開く)。`cloudWatchLogUrl` と前置き・エンコードを共有する(`cloudWatchLogUrl` の出力は不変)
17
+ - `@exabugs/dynamodb-client/system-changes`: `SYSTEM_CHANGE_KIND_LABELS` / `SYSTEM_CHANGE_RESULT_LABELS`(日本語のラベル)、`parseLambdaReleases`、型 `LambdaRelease`
18
+
19
+ ### Changed
20
+
21
+ - peerDependencies に `@mui/material`(`^5.16.12 || ^6.0.0 || ^7.0.0`。**オプション**)を加えた。react-admin が既に依存するもので、画面が直接 import するため宣言した
22
+ - `lambdaReleaseNames`(Slack の文言)と Slack の種別・結果のラベルは、共通の `labels.ts` を使う(出力は不変)
23
+ - テスト: react-admin の画面のテストは、jsdom に Node の `AbortController` を残した環境で動かす(Node 26 で、react-router が作る Request が jsdom の signal を拒んだため)。CI のテストの matrix に Node 24.x を加えた(公開の job と同じ版)
24
+
10
25
  ## [1.18.0] - 2026-10-24
11
26
 
12
27
  ### Added
@@ -0,0 +1,18 @@
1
+ import type { ReactElement } from 'react';
2
+ import { type AlertsMessagesOverride } from './alertsView.js';
3
+ /** level の色付きのチップ(label は Datagrid・SimpleShowLayout の見出しに使われる) */
4
+ export declare const AlertLevelChip: (_props: {
5
+ label?: string;
6
+ }) => ReactElement | null;
7
+ export interface AlertsScreenProps {
8
+ /** 文言の上書き(既定は日本語。ALERTS_MESSAGES_JA) */
9
+ messages?: AlertsMessagesOverride;
10
+ }
11
+ /**
12
+ * 運用通知の記録(alerts)の一覧(読み取り専用。作成・一括操作・書き出しは無い)。最後の発生の降順。
13
+ *
14
+ * 並べ替え(lastSeenAt)と違う項目のフィルタは、全件を読む(28 日・指紋ごとに 1 件なので、件数は少ない)。
15
+ * 前方一致はネストした演算子の形式にする(createDataProvider が { $starts } に変換する)
16
+ */
17
+ export declare const AlertsList: ({ messages: override }?: AlertsScreenProps) => ReactElement;
18
+ //# sourceMappingURL=AlertsList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertsList.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/Alerts/AlertsList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAe1C,OAAO,EACL,KAAK,sBAAsB,EAI5B,MAAM,iBAAiB,CAAC;AASzB,kEAAkE;AAClE,eAAO,MAAM,cAAc,GAAI,QAAQ;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,YAAY,GAAG,IAK1E,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,QAAQ,CAAC,EAAE,sBAAsB,CAAC;CACnC;AAID;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,yBAAwB,iBAAsB,KAAG,YA6B3E,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Chip } from '@mui/material';
3
+ import { Datagrid, DateField, FunctionField, List, NumberField, SelectInput, TextField, TextInput, useRecordContext, } from 'react-admin';
4
+ import { alertLevelChoices, alertMessagePreview, alertsMessagesOf, } from './alertsView.js';
5
+ const LEVEL_STYLE = {
6
+ fatal: { color: 'error', variant: 'filled' },
7
+ error: { color: 'error', variant: 'outlined' },
8
+ warn: { color: 'warning', variant: 'outlined' },
9
+ ok: { color: 'success', variant: 'outlined' },
10
+ };
11
+ /** level の色付きのチップ(label は Datagrid・SimpleShowLayout の見出しに使われる) */
12
+ export const AlertLevelChip = (_props) => {
13
+ const record = useRecordContext();
14
+ if (!record)
15
+ return null;
16
+ const style = LEVEL_STYLE[record.level] ?? { color: 'default', variant: 'outlined' };
17
+ return _jsx(Chip, { size: "small", label: record.level, ...style });
18
+ };
19
+ const sort = { field: 'lastSeenAt', order: 'DESC' };
20
+ /**
21
+ * 運用通知の記録(alerts)の一覧(読み取り専用。作成・一括操作・書き出しは無い)。最後の発生の降順。
22
+ *
23
+ * 並べ替え(lastSeenAt)と違う項目のフィルタは、全件を読む(28 日・指紋ごとに 1 件なので、件数は少ない)。
24
+ * 前方一致はネストした演算子の形式にする(createDataProvider が { $starts } に変換する)
25
+ */
26
+ export const AlertsList = ({ messages: override } = {}) => {
27
+ const m = alertsMessagesOf(override);
28
+ const filters = [
29
+ _jsx(SelectInput, { source: "level", label: m.level, choices: alertLevelChoices(m), alwaysOn: true }, "level"),
30
+ _jsx(TextInput, { source: "event.starts", label: m.eventFilter, alwaysOn: true }, "event"),
31
+ ];
32
+ return (_jsx(List, { filters: filters, sort: sort, exporter: false, children: _jsxs(Datagrid, { bulkActionButtons: false, rowClick: "show", children: [_jsx(AlertLevelChip, { label: m.level }), _jsx(TextField, { source: "event", label: m.event }), _jsx(FunctionField, { label: m.message, sortable: false, render: (r) => alertMessagePreview(r.message) }), _jsx(TextField, { source: "target", label: m.target, emptyText: m.empty }), _jsx(NumberField, { source: "count", label: m.count }), _jsx(DateField, { source: "lastSeenAt", label: m.lastSeenAt, showTime: true }), _jsx(DateField, { source: "firstSeenAt", label: m.firstSeenAt, showTime: true })] }) }));
33
+ };
34
+ //# sourceMappingURL=AlertsList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertsList.js","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/Alerts/AlertsList.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAkB,MAAM,eAAe,CAAC;AAGrD,OAAO,EACL,QAAQ,EACR,SAAS,EACT,aAAa,EACb,IAAI,EACJ,WAAW,EACX,WAAW,EAEX,SAAS,EACT,SAAS,EACT,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAEL,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,GAAuE;IACtF,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC5C,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE;IAC9C,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE;IAC/C,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE;CAC9C,CAAC;AAEF,kEAAkE;AAClE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAA0B,EAAuB,EAAE;IAChF,MAAM,MAAM,GAAG,gBAAgB,EAAe,CAAC;IAC/C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACrF,OAAO,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,MAAM,CAAC,KAAK,KAAM,KAAK,GAAI,CAAC;AAC/D,CAAC,CAAC;AAOF,MAAM,IAAI,GAAgB,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,KAAwB,EAAE,EAAgB,EAAE;IACzF,MAAM,CAAC,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG;QACd,KAAC,WAAW,IAEV,MAAM,EAAC,OAAO,EACd,KAAK,EAAE,CAAC,CAAC,KAAK,EACd,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC7B,QAAQ,UAJJ,OAAO,CAKX;QACF,KAAC,SAAS,IAAa,MAAM,EAAC,cAAc,EAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,QAAQ,UAA5D,OAAO,CAAwD;KAC/E,CAAC;IACF,OAAO,CACL,KAAC,IAAI,IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,YACjD,MAAC,QAAQ,IAAC,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAC,MAAM,aACjD,KAAC,cAAc,IAAC,KAAK,EAAE,CAAC,CAAC,KAAK,GAAI,EAClC,KAAC,SAAS,IAAC,MAAM,EAAC,OAAO,EAAC,KAAK,EAAE,CAAC,CAAC,KAAK,GAAI,EAC5C,KAAC,aAAa,IACZ,KAAK,EAAE,CAAC,CAAC,OAAO,EAChB,QAAQ,EAAE,KAAK,EACf,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,GAC7C,EACF,KAAC,SAAS,IAAC,MAAM,EAAC,QAAQ,EAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,GAAI,EAClE,KAAC,WAAW,IAAC,MAAM,EAAC,OAAO,EAAC,KAAK,EAAE,CAAC,CAAC,KAAK,GAAI,EAC9C,KAAC,SAAS,IAAC,MAAM,EAAC,YAAY,EAAC,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,QAAQ,SAAG,EAC/D,KAAC,SAAS,IAAC,MAAM,EAAC,aAAa,EAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,QAAQ,SAAG,IACxD,GACN,CACR,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ReactElement } from 'react';
2
+ import { type AlertsScreenProps } from './AlertsList.js';
3
+ /**
4
+ * 運用通知の記録(alerts)の詳細(読み取り専用。編集・削除は無い)。
5
+ * 通知の本文の `詳細:` の URL(/alerts/<id>/show)が指す。管理者が AWS なしで対処できるよう、message・target・
6
+ * action・件数・発生時刻を必ず出す。ログ参照(firstLog / lastLog)は、あるときだけ、CloudWatch のボタンと出す
7
+ * (アラーム・直接呼び出しから来た記録には無い)
8
+ */
9
+ export declare const AlertsShow: ({ messages: override }?: AlertsScreenProps) => ReactElement;
10
+ //# sourceMappingURL=AlertsShow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertsShow.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/Alerts/AlertsShow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAa1C,OAAO,EAAkB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAgCzE;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,yBAAwB,iBAAsB,KAAG,YAwB3E,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { DateField, NumberField, Show, SimpleShowLayout, TextField, useRecordContext, } from 'react-admin';
3
+ import { CloudWatchLogButton } from '../CloudWatchLog/CloudWatchLogButton.js';
4
+ import { LabeledIf } from '../shared/LabeledIf.js';
5
+ import { AlertLevelChip } from './AlertsList.js';
6
+ import { alertsMessagesOf } from './alertsView.js';
7
+ const preWrap = { whiteSpace: 'pre-wrap', wordBreak: 'break-word' };
8
+ /** ログ参照の中身(ロググループ・ストリーム・時刻・RequestId と、CloudWatch のボタン) */
9
+ const LogRefBody = ({ field, m }) => {
10
+ const record = useRecordContext();
11
+ return (_jsxs("div", { children: [_jsx(TextField, { source: `${field}.logGroup` }), ' / ', _jsx(TextField, { source: `${field}.logStream` }), ' / ', _jsx(DateField, { source: `${field}.timestamp`, showTime: true }), record?.[field]?.requestId ? (_jsxs(_Fragment, { children: [` / ${m.requestId} `, _jsx(TextField, { source: `${field}.requestId` })] })) : null, _jsx("div", { children: _jsx(CloudWatchLogButton, { source: field, label: m.openCloudWatch }) })] }));
12
+ };
13
+ const hasLog = (field) => (r) => Boolean(r?.[field]);
14
+ /**
15
+ * 運用通知の記録(alerts)の詳細(読み取り専用。編集・削除は無い)。
16
+ * 通知の本文の `詳細:` の URL(/alerts/<id>/show)が指す。管理者が AWS なしで対処できるよう、message・target・
17
+ * action・件数・発生時刻を必ず出す。ログ参照(firstLog / lastLog)は、あるときだけ、CloudWatch のボタンと出す
18
+ * (アラーム・直接呼び出しから来た記録には無い)
19
+ */
20
+ export const AlertsShow = ({ messages: override } = {}) => {
21
+ const m = alertsMessagesOf(override);
22
+ return (_jsx(Show, { children: _jsxs(SimpleShowLayout, { children: [_jsx(AlertLevelChip, { label: m.level }), _jsx(TextField, { source: "event", label: m.event }), _jsx(TextField, { source: "message", label: m.message, sx: preWrap }), _jsx(TextField, { source: "target", label: m.target, emptyText: m.empty }), _jsx(TextField, { source: "action", label: m.action, emptyText: m.empty, sx: preWrap }), _jsx(NumberField, { source: "count", label: m.countDetail }), _jsx(TextField, { source: "state", label: m.state, emptyText: m.empty }), _jsx(DateField, { source: "firstSeenAt", label: m.firstSeenAt, showTime: true }), _jsx(DateField, { source: "lastSeenAt", label: m.lastSeenAt, showTime: true }), ['firstLog', 'lastLog'].map((field) => (_jsx(LabeledIf, { label: false, title: m[field], when: hasLog(field), children: _jsx(LogRefBody, { field: field, m: m }) }, field))), _jsx(TextField, { source: "fingerprint", label: m.fingerprint }), _jsx(TextField, { source: "id", label: m.id })] }) }));
23
+ };
24
+ //# sourceMappingURL=AlertsShow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlertsShow.js","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/Alerts/AlertsShow.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ComponentType } from 'react';
2
+ import type { ResourceProps } from 'react-admin';
3
+ import type { AlertsMessagesOverride } from './alertsView.js';
4
+ export interface AlertsResourceOptions {
5
+ /** リソース名(Records のコレクション名)。既定 'alerts' */
6
+ name?: string;
7
+ /** メニューのアイコン(例: @mui/icons-material の NotificationsActive。本ライブラリは依存しない) */
8
+ icon?: ComponentType;
9
+ /** 文言の上書き(既定は日本語) */
10
+ messages?: AlertsMessagesOverride;
11
+ }
12
+ /**
13
+ * alerts の `<Resource>` の props(一覧・詳細だけ。作成・編集の画面は無い)。
14
+ * `<Resource {...alertsResource({ icon: NotificationsActive })} />` と使う。
15
+ * 個別に組むなら `<Resource name="alerts" list={AlertsList} show={AlertsShow} icon={...} recordRepresentation="event" />`
16
+ */
17
+ export declare const alertsResource: (options?: AlertsResourceOptions) => ResourceProps;
18
+ //# sourceMappingURL=alertsResource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alertsResource.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/Alerts/alertsResource.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;CACnC;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,UAAS,qBAA0B,KAAG,aASpE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { AlertsList } from './AlertsList.js';
3
+ import { AlertsShow } from './AlertsShow.js';
4
+ /**
5
+ * alerts の `<Resource>` の props(一覧・詳細だけ。作成・編集の画面は無い)。
6
+ * `<Resource {...alertsResource({ icon: NotificationsActive })} />` と使う。
7
+ * 個別に組むなら `<Resource name="alerts" list={AlertsList} show={AlertsShow} icon={...} recordRepresentation="event" />`
8
+ */
9
+ export const alertsResource = (options = {}) => {
10
+ const { name = 'alerts', icon, messages } = options;
11
+ return {
12
+ name,
13
+ list: messages ? _jsx(AlertsList, { messages: messages }) : AlertsList,
14
+ show: messages ? _jsx(AlertsShow, { messages: messages }) : AlertsShow,
15
+ ...(icon ? { icon } : {}),
16
+ recordRepresentation: 'event',
17
+ };
18
+ };
19
+ //# sourceMappingURL=alertsResource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alertsResource.js","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/Alerts/alertsResource.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAY7C;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,UAAiC,EAAE,EAAiB,EAAE;IACnF,MAAM,EAAE,IAAI,GAAG,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACpD,OAAO;QACL,IAAI;QACJ,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAC,UAAU,IAAC,QAAQ,EAAE,QAAQ,GAAI,CAAC,CAAC,CAAC,UAAU;QAChE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAC,UAAU,IAAC,QAAQ,EAAE,QAAQ,GAAI,CAAC,CAAC,CAAC,UAAU;QAChE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,oBAAoB,EAAE,OAAO;KAC9B,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * 運用通知の記録(alerts)の画面の文言と表示の計算(純粋な関数だけ。AlertsList / AlertsShow が使う)
3
+ */
4
+ import type { AlertRecord } from '../../../../notify/alerts.js';
5
+ /** alerts の画面の文言(既定は日本語。props の messages で一部を上書きする) */
6
+ export interface AlertsMessages {
7
+ level: string;
8
+ event: string;
9
+ /** フィルタ(event の前方一致)のラベル */
10
+ eventFilter: string;
11
+ message: string;
12
+ target: string;
13
+ /** 一覧の件数の見出し */
14
+ count: string;
15
+ /** 詳細の件数の見出し(目安であることの注記つき) */
16
+ countDetail: string;
17
+ action: string;
18
+ state: string;
19
+ firstSeenAt: string;
20
+ lastSeenAt: string;
21
+ /** 詳細のログ参照(firstLog / lastLog)の見出し */
22
+ firstLog: string;
23
+ lastLog: string;
24
+ fingerprint: string;
25
+ id: string;
26
+ /** level のフィルタの選択肢(ok だけ注記つき) */
27
+ levels: Record<AlertRecord['level'], string>;
28
+ /** ログ参照の RequestId の前置き */
29
+ requestId: string;
30
+ /** CloudWatch のボタン */
31
+ openCloudWatch: string;
32
+ /** 値の無い項目 */
33
+ empty: string;
34
+ }
35
+ export declare const ALERTS_MESSAGES_JA: Readonly<AlertsMessages>;
36
+ /** 文言の上書き(levels は項目ごとに上書きできる) */
37
+ export type AlertsMessagesOverride = Partial<Omit<AlertsMessages, 'levels'>> & {
38
+ levels?: Partial<AlertsMessages['levels']>;
39
+ };
40
+ /** 既定の文言に、上書きを重ねる */
41
+ export declare const alertsMessagesOf: (override?: AlertsMessagesOverride) => AlertsMessages;
42
+ /** level のフィルタの選択肢(重い順) */
43
+ export declare const alertLevelChoices: (messages?: AlertsMessages) => {
44
+ id: "warn" | "error" | "fatal" | "ok";
45
+ name: string;
46
+ }[];
47
+ /** 一覧のメッセージは、先頭のこの文字数だけ(超えたら「…」) */
48
+ export declare const ALERT_MESSAGE_PREVIEW = 40;
49
+ /** 一覧のメッセージの先頭(無ければ空) */
50
+ export declare const alertMessagePreview: (s?: string, max?: number) => string;
51
+ //# sourceMappingURL=alertsView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alertsView.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/Alerts/alertsView.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAGhE,uDAAuD;AACvD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7C,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,cAAc,CAoBtD,CAAC;AAEH,kCAAkC;AAClC,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,GAAG;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;CAC5C,CAAC;AAEF,qBAAqB;AACrB,eAAO,MAAM,gBAAgB,GAAI,WAAW,sBAAsB,KAAG,cAInE,CAAC;AAEH,2BAA2B;AAC3B,eAAO,MAAM,iBAAiB,GAAI,WAAU,cAAmC;;;GACe,CAAC;AAE/F,oCAAoC;AACpC,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,yBAAyB;AACzB,eAAO,MAAM,mBAAmB,GAAI,IAAI,MAAM,EAAE,YAA2B,KAAG,MACxB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { definedOnly } from '../shared/messages.js';
2
+ export const ALERTS_MESSAGES_JA = Object.freeze({
3
+ level: 'level',
4
+ event: 'event',
5
+ eventFilter: 'event(前方一致)',
6
+ message: 'メッセージ',
7
+ target: '対象',
8
+ count: '件数',
9
+ countDetail: '件数(28 日以内。抑制した分も含む目安)',
10
+ action: '対策の案内',
11
+ state: 'アラームの状態',
12
+ firstSeenAt: '最初の発生',
13
+ lastSeenAt: '最後の発生',
14
+ firstLog: '最初のログ(AWS を操作できる人向け)',
15
+ lastLog: '最後のログ(AWS を操作できる人向け)',
16
+ fingerprint: '指紋',
17
+ id: 'ID',
18
+ levels: Object.freeze({ fatal: 'fatal', error: 'error', warn: 'warn', ok: 'ok(復旧)' }),
19
+ requestId: 'RequestId',
20
+ openCloudWatch: 'CloudWatch で開く',
21
+ empty: '—',
22
+ });
23
+ /** 既定の文言に、上書きを重ねる */
24
+ export const alertsMessagesOf = (override) => ({
25
+ ...ALERTS_MESSAGES_JA,
26
+ ...definedOnly(override),
27
+ levels: { ...ALERTS_MESSAGES_JA.levels, ...definedOnly(override?.levels) },
28
+ });
29
+ /** level のフィルタの選択肢(重い順) */
30
+ export const alertLevelChoices = (messages = ALERTS_MESSAGES_JA) => ['fatal', 'error', 'warn', 'ok'].map((id) => ({ id, name: messages.levels[id] }));
31
+ /** 一覧のメッセージは、先頭のこの文字数だけ(超えたら「…」) */
32
+ export const ALERT_MESSAGE_PREVIEW = 40;
33
+ /** 一覧のメッセージの先頭(無ければ空) */
34
+ export const alertMessagePreview = (s, max = ALERT_MESSAGE_PREVIEW) => !s ? '' : s.length > max ? `${s.slice(0, max)}…` : s;
35
+ //# sourceMappingURL=alertsView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alertsView.js","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/Alerts/alertsView.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAiCpD,MAAM,CAAC,MAAM,kBAAkB,GAA6B,MAAM,CAAC,MAAM,CAAC;IACxE,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,IAAI;IACX,WAAW,EAAE,uBAAuB;IACpC,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,OAAO;IACpB,UAAU,EAAE,OAAO;IACnB,QAAQ,EAAE,sBAAsB;IAChC,OAAO,EAAE,sBAAsB;IAC/B,WAAW,EAAE,IAAI;IACjB,EAAE,EAAE,IAAI;IACR,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;IACrF,SAAS,EAAE,WAAW;IACtB,cAAc,EAAE,gBAAgB;IAChC,KAAK,EAAE,GAAG;CACX,CAAC,CAAC;AAOH,qBAAqB;AACrB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAiC,EAAkB,EAAE,CAAC,CAAC;IACtF,GAAG,kBAAkB;IACrB,GAAG,WAAW,CAAC,QAAQ,CAAC;IACxB,MAAM,EAAE,EAAE,GAAG,kBAAkB,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;CAC3E,CAAC,CAAC;AAEH,2BAA2B;AAC3B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAA2B,kBAAkB,EAAE,EAAE,CAChF,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/F,oCAAoC;AACpC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC,yBAAyB;AACzB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAU,EAAE,GAAG,GAAG,qBAAqB,EAAU,EAAE,CACrF,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { AlertLevelChip, AlertsList } from './AlertsList.js';
2
+ export type { AlertsScreenProps } from './AlertsList.js';
3
+ export { AlertsShow } from './AlertsShow.js';
4
+ export { ALERTS_MESSAGES_JA, ALERT_MESSAGE_PREVIEW, alertLevelChoices, alertMessagePreview, alertsMessagesOf, } from './alertsView.js';
5
+ export type { AlertsMessages, AlertsMessagesOverride } from './alertsView.js';
6
+ export { alertsResource } from './alertsResource.js';
7
+ export type { AlertsResourceOptions } from './alertsResource.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/Alerts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { AlertLevelChip, AlertsList } from './AlertsList.js';
2
+ export { AlertsShow } from './AlertsShow.js';
3
+ export { ALERTS_MESSAGES_JA, ALERT_MESSAGE_PREVIEW, alertLevelChoices, alertMessagePreview, alertsMessagesOf, } from './alertsView.js';
4
+ export { alertsResource } from './alertsResource.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/Alerts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
@@ -29,4 +29,20 @@ export interface CloudWatchLogUrlOptions {
29
29
  export declare function consoleDomainOf(region: string): string | undefined;
30
30
  /** ログ参照から URL を作る。参照が不正、または既知でないリージョン(ISO など)なら undefined */
31
31
  export declare function cloudWatchLogUrl(ref: unknown, options?: CloudWatchLogUrlOptions): string | undefined;
32
+ export interface CloudWatchLogGroupUrlOptions {
33
+ /** 基準の時刻(エポックミリ秒)。あれば、ストリームを選ばずに、その前後の期間のログイベントを開く */
34
+ at?: number;
35
+ /** 基準の前に見る幅(ミリ秒)。既定 5 分 */
36
+ beforeMs?: number;
37
+ /** 基準の後に見る幅(ミリ秒)。既定 1 時間(リリース後の動きも見られるように) */
38
+ afterMs?: number;
39
+ }
40
+ /**
41
+ * ロググループ(ストリームを指定しない)の CloudWatch コンソールの URL。cloudWatchLogUrl はストリームが必須
42
+ * (alerts のログ参照用)なので、関数名などロググループだけが分かるとき(システム変更履歴のリリースした Lambda)に使う。
43
+ * エンコードの規則は cloudWatchLogUrl と同じ。at(有限の数)があれば `/log-events?start=…&end=…` で期間のログイベントを
44
+ * 直接開く(ストリームの一覧を挟まない。ap-northeast-1 の実機で確認済み)。無ければロググループの画面。
45
+ * ロググループ名が空、または既知でないリージョンなら undefined
46
+ */
47
+ export declare function cloudWatchLogGroupUrl(logGroup: string, region: string, options?: CloudWatchLogGroupUrlOptions): string | undefined;
32
48
  //# sourceMappingURL=cloudWatchLogUrl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloudWatchLogUrl.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,0DAA0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMlE;AAmBD,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,uBAA4B,GACpC,MAAM,GAAG,SAAS,CAcpB"}
1
+ {"version":3,"file":"cloudWatchLogUrl.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,0DAA0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AASD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMlE;AAmBD,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE,uBAA4B,GACpC,MAAM,GAAG,SAAS,CAUpB;AAOD,MAAM,WAAW,4BAA4B;IAC3C,sDAAsD;IACtD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,4BAAiC,GACzC,MAAM,GAAG,SAAS,CAapB"}
@@ -54,10 +54,34 @@ export function cloudWatchLogUrl(ref, options = {}) {
54
54
  const span = Math.max(0, options.spanMs ?? 5 * 60 * 1000);
55
55
  const start = Math.floor(ref.timestamp - span);
56
56
  const end = Math.ceil(ref.timestamp + span);
57
- const group = dollar(encodeURIComponent(ref.logGroup));
58
57
  const stream = dollar(encodeURIComponent(ref.logStream));
59
58
  const query = dollar(`?start=${start}&end=${end}`);
60
- return (`https://${domain}/cloudwatch/home?region=${ref.region}` +
61
- `#logsV2:log-groups/log-group/${group}/log-events/${stream}${query}`);
59
+ return `${logGroupBase(domain, ref.region, ref.logGroup)}/log-events/${stream}${query}`;
60
+ }
61
+ /** ロググループの画面の URL(ドメイン・リージョンは検査済み)。ログイベントの URL の前置きにもなる */
62
+ const logGroupBase = (domain, region, logGroup) => `https://${domain}/cloudwatch/home?region=${region}` +
63
+ `#logsV2:log-groups/log-group/${dollar(encodeURIComponent(logGroup))}`;
64
+ /**
65
+ * ロググループ(ストリームを指定しない)の CloudWatch コンソールの URL。cloudWatchLogUrl はストリームが必須
66
+ * (alerts のログ参照用)なので、関数名などロググループだけが分かるとき(システム変更履歴のリリースした Lambda)に使う。
67
+ * エンコードの規則は cloudWatchLogUrl と同じ。at(有限の数)があれば `/log-events?start=…&end=…` で期間のログイベントを
68
+ * 直接開く(ストリームの一覧を挟まない。ap-northeast-1 の実機で確認済み)。無ければロググループの画面。
69
+ * ロググループ名が空、または既知でないリージョンなら undefined
70
+ */
71
+ export function cloudWatchLogGroupUrl(logGroup, region, options = {}) {
72
+ if (typeof logGroup !== 'string' || logGroup === '')
73
+ return undefined;
74
+ const domain = consoleDomainOf(region);
75
+ if (!domain)
76
+ return undefined;
77
+ const base = logGroupBase(domain, region, logGroup);
78
+ const { at } = options;
79
+ if (at === undefined || !Number.isFinite(at))
80
+ return base;
81
+ // 幅は、有限の数でなければ既定(NaN を URL に入れない)。負は 0
82
+ const width = (v, fallback) => v !== undefined && Number.isFinite(v) ? Math.max(0, v) : fallback;
83
+ const start = Math.floor(at - width(options.beforeMs, 5 * 60 * 1000));
84
+ const end = Math.ceil(at + width(options.afterMs, 60 * 60 * 1000));
85
+ return `${base}/log-events${dollar(`?start=${start}&end=${end}`)}`;
62
86
  }
63
87
  //# sourceMappingURL=cloudWatchLogUrl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloudWatchLogUrl.js","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAiBH,mCAAmC;AACnC,MAAM,UAAU,GAAG,yBAAyB,CAAC;AAC7C,4BAA4B;AAC5B,MAAM,SAAS,GAAG,qBAAqB,CAAC;AACxC,0EAA0E;AAC1E,MAAM,iBAAiB,GAAG,8CAA8C,CAAC;AAEzE;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACjD,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,8BAA8B,CAAC;IACnE,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,sBAAsB,CAAC;IAC1D,IAAI,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,GAAG,MAAM,yBAAyB,CAAC;IAC9E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,kDAAkD;AAClD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAE/E,SAAS,KAAK,CAAC,CAAU;IACvB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,CAAC,GAAG,CAA4B,CAAC;IACvC,OAAO,CACL,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAC5B,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ;QAC9B,CAAC,CAAC,QAAQ,KAAK,EAAE;QACjB,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;QAC/B,CAAC,CAAC,SAAS,KAAK,EAAE;QAClB,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ;QAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAC7B,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,gBAAgB,CAC9B,GAAY,EACZ,UAAmC,EAAE;IAErC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAClC,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,KAAK,QAAQ,GAAG,EAAE,CAAC,CAAC;IACnD,OAAO,CACL,WAAW,MAAM,2BAA2B,GAAG,CAAC,MAAM,EAAE;QACxD,gCAAgC,KAAK,eAAe,MAAM,GAAG,KAAK,EAAE,CACrE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"cloudWatchLogUrl.js","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/CloudWatchLog/cloudWatchLogUrl.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export { CloudWatchLogButton } from './CloudWatchLogButton.js';
2
2
  export type { CloudWatchLogButtonProps } from './CloudWatchLogButton.js';
3
- export { cloudWatchLogUrl, consoleDomainOf } from './cloudWatchLogUrl.js';
4
- export type { CloudWatchLogRef, CloudWatchLogUrlOptions } from './cloudWatchLogUrl.js';
3
+ export { cloudWatchLogGroupUrl, cloudWatchLogUrl, consoleDomainOf } from './cloudWatchLogUrl.js';
4
+ export type { CloudWatchLogGroupUrlOptions, CloudWatchLogRef, CloudWatchLogUrlOptions, } from './cloudWatchLogUrl.js';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/CloudWatchLog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC1E,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/CloudWatchLog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACjG,YAAY,EACV,4BAA4B,EAC5B,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC"}
@@ -1,3 +1,3 @@
1
1
  export { CloudWatchLogButton } from './CloudWatchLogButton.js';
2
- export { cloudWatchLogUrl, consoleDomainOf } from './cloudWatchLogUrl.js';
2
+ export { cloudWatchLogGroupUrl, cloudWatchLogUrl, consoleDomainOf } from './cloudWatchLogUrl.js';
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/CloudWatchLog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/CloudWatchLog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { type ChipProps } from '@mui/material';
2
+ import type { ReactElement } from 'react';
3
+ import type { SystemChangeResult } from '../../../../system-changes/record.js';
4
+ import { type SystemChangesMessages, type SystemChangesMessagesOverride } from './systemChangesView.js';
5
+ export declare const SYSTEM_CHANGE_RESULT_COLOR: Record<SystemChangeResult, ChipProps['color']>;
6
+ /**
7
+ * result の色付きのチップ(label は Datagrid・SimpleShowLayout の見出しに使われる)。
8
+ * 開始のまま 2 時間を過ぎたものは「中断の疑い」(注意の色)
9
+ */
10
+ export declare const SystemChangeResultChip: ({ m, }: {
11
+ label?: string;
12
+ /** 文言(既定は日本語) */
13
+ m?: SystemChangesMessages;
14
+ }) => ReactElement | null;
15
+ export interface SystemChangesScreenProps {
16
+ /** 文言の上書き(既定は日本語。SYSTEM_CHANGES_MESSAGES_JA) */
17
+ messages?: SystemChangesMessagesOverride;
18
+ }
19
+ export interface SystemChangesShowProps extends SystemChangesScreenProps {
20
+ /** リリースした Lambda のログへのリンクのリージョン。既定 'ap-northeast-1' */
21
+ lambdaRegion?: string;
22
+ }
23
+ /**
24
+ * システム変更履歴(systemChanges)の一覧(読み取り専用。作成・一括操作・書き出しは無い)。発生時刻の降順。
25
+ * 1 回の変更(run)= 1 行。infra の変更がリリースした Lambda は、行にならない(詳細の表に出す)。
26
+ * 固定のフィルタは無い(全件 = 変更の一覧)。種別・結果のフィルタは、選んだときだけ全件を読む
27
+ */
28
+ export declare const SystemChangesList: ({ messages: override, }?: SystemChangesScreenProps) => ReactElement;
29
+ //# sourceMappingURL=SystemChangesList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemChangesList.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/SystemChanges/SystemChangesList.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAY1C,OAAO,KAAK,EAAsB,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AACnG,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,6BAA6B,EAUnC,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,kBAAkB,EAAE,SAAS,CAAC,OAAO,CAAC,CAIrF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAAI,QAEpC;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,CAAC,CAAC,EAAE,qBAAqB,CAAC;CAC3B,KAAG,YAAY,GAAG,IAiBlB,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,gDAAgD;IAChD,QAAQ,CAAC,EAAE,6BAA6B,CAAC;CAC1C;AAED,MAAM,WAAW,sBAAuB,SAAQ,wBAAwB;IACtE,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,0BAE/B,wBAA6B,KAAG,YA6ClC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Chip } from '@mui/material';
3
+ import { Datagrid, DateField, FunctionField, List, SelectInput, TextField, useRecordContext, } from 'react-admin';
4
+ import { SYSTEM_CHANGES_MESSAGES_JA, isKnownSystemChangeResult, isSystemChangeStale, systemChangeCommitShort, systemChangeDurationText, systemChangeKindChoices, systemChangeKindLabel, systemChangeResultChoices, systemChangeResultLabel, systemChangesMessagesOf, } from './systemChangesView.js';
5
+ export const SYSTEM_CHANGE_RESULT_COLOR = {
6
+ started: 'default',
7
+ succeeded: 'success',
8
+ failed: 'error',
9
+ };
10
+ /**
11
+ * result の色付きのチップ(label は Datagrid・SimpleShowLayout の見出しに使われる)。
12
+ * 開始のまま 2 時間を過ぎたものは「中断の疑い」(注意の色)
13
+ */
14
+ export const SystemChangeResultChip = ({ m = SYSTEM_CHANGES_MESSAGES_JA, }) => {
15
+ const record = useRecordContext();
16
+ if (!record)
17
+ return null;
18
+ if (isSystemChangeStale(record)) {
19
+ return (_jsx(Chip, { size: "small", variant: "filled", color: "warning", label: m.stale, title: m.staleTitle }));
20
+ }
21
+ const known = isKnownSystemChangeResult(record.result);
22
+ return (_jsx(Chip, { size: "small", variant: known && record.result !== 'started' ? 'filled' : 'outlined', color: known ? SYSTEM_CHANGE_RESULT_COLOR[record.result] : 'default', label: systemChangeResultLabel(record.result, m) }));
23
+ };
24
+ const sort = { field: 'occurredAt', order: 'DESC' };
25
+ /**
26
+ * システム変更履歴(systemChanges)の一覧(読み取り専用。作成・一括操作・書き出しは無い)。発生時刻の降順。
27
+ * 1 回の変更(run)= 1 行。infra の変更がリリースした Lambda は、行にならない(詳細の表に出す)。
28
+ * 固定のフィルタは無い(全件 = 変更の一覧)。種別・結果のフィルタは、選んだときだけ全件を読む
29
+ */
30
+ export const SystemChangesList = ({ messages: override, } = {}) => {
31
+ const m = systemChangesMessagesOf(override);
32
+ const filters = [
33
+ _jsx(SelectInput, { source: "kind", label: m.kind, choices: systemChangeKindChoices(m), alwaysOn: true }, "kind"),
34
+ _jsx(SelectInput, { source: "result", label: m.result, choices: systemChangeResultChoices(m), alwaysOn: true }, "result"),
35
+ ];
36
+ return (_jsx(List, { filters: filters, sort: sort, exporter: false, children: _jsxs(Datagrid, { bulkActionButtons: false, rowClick: "show", children: [_jsx(DateField, { source: "occurredAt", label: m.occurredAt, showTime: true }), _jsx(FunctionField, { source: "kind", label: m.kind, render: (r) => systemChangeKindLabel(r.kind, m) }), _jsx(SystemChangeResultChip, { label: m.result, m: m }), _jsx(TextField, { source: "target", label: m.target }), _jsx(FunctionField, { label: m.duration, sortable: false, textAlign: "right", render: (r) => systemChangeDurationText(r) }), _jsx(TextField, { source: "version", label: m.version, emptyText: m.empty, sortable: false }), _jsx(FunctionField, { label: m.commit, sortable: false, render: (r) => systemChangeCommitShort(r.commit, m.empty) }), _jsx(TextField, { source: "actor", label: m.actor, emptyText: m.empty, sortable: false })] }) }));
37
+ };
38
+ //# sourceMappingURL=SystemChangesList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemChangesList.js","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/SystemChanges/SystemChangesList.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ReactElement } from 'react';
2
+ import { type SystemChangesShowProps } from './SystemChangesList.js';
3
+ /**
4
+ * システム変更履歴(systemChanges)の詳細(読み取り専用。編集・削除は無い)。全項目(コミットは全桁)。
5
+ * 変更(run)のレコードは開始・終了・所要時間を、infra の変更は「リリースした Lambda」の表(CloudWatch の
6
+ * ロググループへのリンク)を出す。details は整形した JSON。無い項目は、見出しも出さない
7
+ */
8
+ export declare const SystemChangesShow: ({ messages: override, lambdaRegion, }?: SystemChangesShowProps) => ReactElement;
9
+ //# sourceMappingURL=SystemChangesShow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemChangesShow.d.ts","sourceRoot":"","sources":["../../../../../src/integrations/react-admin/components/SystemChanges/SystemChangesShow.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAa1C,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,wBAAwB,CAAC;AAuHhC;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,wCAG/B,sBAA2B,KAAG,YA0BhC,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Chip, Link, Table, TableBody, TableCell, TableHead, TableRow } from '@mui/material';
3
+ import { DateField, FunctionField, Labeled, Show, SimpleShowLayout, TextField, useRecordContext, } from 'react-admin';
4
+ import { LabeledIf } from '../shared/LabeledIf.js';
5
+ import { SYSTEM_CHANGE_RESULT_COLOR, SystemChangeResultChip, } from './SystemChangesList.js';
6
+ import { SYSTEM_CHANGES_DEFAULT_LAMBDA_REGION, isSystemChangeRun, lambdaChangeLabel, lambdaLogGroupUrl, lambdaReleasesOf, systemChangeDurationText, systemChangeKindLabel, systemChangeResultLabel, systemChangesMessagesOf, } from './systemChangesView.js';
7
+ const preWrap = {
8
+ whiteSpace: 'pre-wrap',
9
+ wordBreak: 'break-word',
10
+ fontFamily: 'monospace',
11
+ };
12
+ /** details の中身(整形した JSON) */
13
+ const DetailsBody = () => {
14
+ const record = useRecordContext();
15
+ return _jsx("pre", { style: { margin: 0, ...preWrap }, children: JSON.stringify(record?.details, null, 2) });
16
+ };
17
+ const hasDetails = (r) => Boolean(r?.details && Object.keys(r.details).length > 0);
18
+ const hasReleases = (r) => lambdaReleasesOf(r?.details).length > 0;
19
+ const DurationBody = () => (_jsx(_Fragment, { children: systemChangeDurationText(useRecordContext()) }));
20
+ /**
21
+ * 変更(run)の時刻(開始・終了・所要時間)。ある項目だけを出す(SimpleShowLayout の子にし、label={false}・source なし。
22
+ * 理由は LabeledIf と同じ)
23
+ */
24
+ const RunTimesField = ({ m }) => {
25
+ const record = useRecordContext();
26
+ if (!isSystemChangeRun(record))
27
+ return null;
28
+ return (_jsxs(_Fragment, { children: [record?.startedAt && (_jsx(Labeled, { label: m.startedAt, children: _jsx(DateField, { source: "startedAt", showTime: true }) })), record?.finishedAt && (_jsx(Labeled, { label: m.finishedAt, children: _jsx(DateField, { source: "finishedAt", showTime: true }) })), systemChangeDurationText(record) && (_jsx(Labeled, { label: m.duration, children: _jsx(DurationBody, {}) }))] }));
29
+ };
30
+ /** リリースした Lambda の表(関数名・結果・変更の種類・ログ)と、記録の上限で省いた件数 */
31
+ const LambdaReleasesBody = ({ m, region, }) => {
32
+ const record = useRecordContext();
33
+ const rows = lambdaReleasesOf(record?.details);
34
+ const omitted = record?.details?.lambdaReleasesOmitted;
35
+ const releaseAt = Date.parse(record?.finishedAt ?? record?.occurredAt ?? '');
36
+ return (_jsxs(_Fragment, { children: [_jsxs(Table, { size: "small", "aria-label": m.lambdaReleases, children: [_jsx(TableHead, { children: _jsxs(TableRow, { children: [_jsx(TableCell, { children: m.functionName }), _jsx(TableCell, { children: m.result }), _jsx(TableCell, { children: m.changeKind }), _jsx(TableCell, { children: m.log })] }) }), _jsx(TableBody, { children: rows.map((r, i) => {
37
+ const url = lambdaLogGroupUrl(r.target, releaseAt, region);
38
+ return (_jsxs(TableRow, { children: [_jsx(TableCell, { sx: { fontFamily: 'monospace' }, children: r.target }), _jsx(TableCell, { children: _jsx(Chip, { size: "small", variant: "filled", color: SYSTEM_CHANGE_RESULT_COLOR[r.result], label: systemChangeResultLabel(r.result, m) }) }), _jsx(TableCell, { children: lambdaChangeLabel(r.change, m) }), _jsx(TableCell, { children: url ? (_jsx(Link, { href: url, target: "_blank", rel: "noopener noreferrer", children: m.openLog })) : (m.empty) })] }, `${r.target}-${i}`));
39
+ }) })] }), typeof omitted === 'number' && omitted > 0 && _jsx("span", { children: m.omitted(omitted) })] }));
40
+ };
41
+ /**
42
+ * システム変更履歴(systemChanges)の詳細(読み取り専用。編集・削除は無い)。全項目(コミットは全桁)。
43
+ * 変更(run)のレコードは開始・終了・所要時間を、infra の変更は「リリースした Lambda」の表(CloudWatch の
44
+ * ロググループへのリンク)を出す。details は整形した JSON。無い項目は、見出しも出さない
45
+ */
46
+ export const SystemChangesShow = ({ messages: override, lambdaRegion = SYSTEM_CHANGES_DEFAULT_LAMBDA_REGION, } = {}) => {
47
+ const m = systemChangesMessagesOf(override);
48
+ return (_jsx(Show, { children: _jsxs(SimpleShowLayout, { children: [_jsx(DateField, { source: "occurredAt", label: m.occurredAt, showTime: true }), _jsx(FunctionField, { label: m.kind, render: (r) => systemChangeKindLabel(r.kind, m) }), _jsx(SystemChangeResultChip, { label: m.result, m: m }), _jsx(TextField, { source: "target", label: m.target }), _jsx(RunTimesField, { label: false, m: m }), _jsx(TextField, { source: "version", label: m.version, emptyText: m.empty }), _jsx(TextField, { source: "commit", label: m.commit, emptyText: m.empty }), _jsx(TextField, { source: "actor", label: m.actor, emptyText: m.empty }), _jsx(LabeledIf, { label: false, title: m.lambdaReleases, when: hasReleases, children: _jsx(LambdaReleasesBody, { m: m, region: lambdaRegion }) }), _jsx(LabeledIf, { label: false, title: m.details, when: hasDetails, children: _jsx(DetailsBody, {}) }), _jsx(TextField, { source: "id", label: m.id })] }) }));
49
+ };
50
+ //# sourceMappingURL=SystemChangesShow.js.map