@knpkv/codecommit-core 0.3.0 → 0.5.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/README.md +66 -0
- package/dist/AwsClient/createPullRequest.d.ts +1 -6
- package/dist/AwsClient/createPullRequest.d.ts.map +1 -1
- package/dist/AwsClient/createPullRequest.js +3 -11
- package/dist/AwsClient/createPullRequest.js.map +1 -1
- package/dist/AwsClient/getCallerIdentity.d.ts +5 -6
- package/dist/AwsClient/getCallerIdentity.d.ts.map +1 -1
- package/dist/AwsClient/getCallerIdentity.js +7 -12
- package/dist/AwsClient/getCallerIdentity.js.map +1 -1
- package/dist/AwsClient/getCommentsForPullRequest.d.ts +1 -6
- package/dist/AwsClient/getCommentsForPullRequest.d.ts.map +1 -1
- package/dist/AwsClient/getCommentsForPullRequest.js +9 -16
- package/dist/AwsClient/getCommentsForPullRequest.js.map +1 -1
- package/dist/AwsClient/getPullRequest.d.ts +2 -7
- package/dist/AwsClient/getPullRequest.d.ts.map +1 -1
- package/dist/AwsClient/getPullRequest.js +15 -28
- package/dist/AwsClient/getPullRequest.js.map +1 -1
- package/dist/AwsClient/getPullRequests.d.ts.map +1 -1
- package/dist/AwsClient/getPullRequests.js +18 -15
- package/dist/AwsClient/getPullRequests.js.map +1 -1
- package/dist/AwsClient/index.d.ts +3 -2
- package/dist/AwsClient/index.d.ts.map +1 -1
- package/dist/AwsClient/index.js.map +1 -1
- package/dist/AwsClient/internal.d.ts +47 -11
- package/dist/AwsClient/internal.d.ts.map +1 -1
- package/dist/AwsClient/internal.js +38 -9
- package/dist/AwsClient/internal.js.map +1 -1
- package/dist/AwsClient/listBranches.d.ts +1 -6
- package/dist/AwsClient/listBranches.d.ts.map +1 -1
- package/dist/AwsClient/listBranches.js +3 -11
- package/dist/AwsClient/listBranches.js.map +1 -1
- package/dist/AwsClient/updatePullRequestDescription.d.ts +1 -6
- package/dist/AwsClient/updatePullRequestDescription.d.ts.map +1 -1
- package/dist/AwsClient/updatePullRequestDescription.js +3 -11
- package/dist/AwsClient/updatePullRequestDescription.js.map +1 -1
- package/dist/AwsClient/updatePullRequestTitle.d.ts +1 -6
- package/dist/AwsClient/updatePullRequestTitle.d.ts.map +1 -1
- package/dist/AwsClient/updatePullRequestTitle.js +3 -11
- package/dist/AwsClient/updatePullRequestTitle.js.map +1 -1
- package/dist/CacheService/CacheError.d.ts +21 -0
- package/dist/CacheService/CacheError.d.ts.map +1 -0
- package/dist/CacheService/CacheError.js +17 -0
- package/dist/CacheService/CacheError.js.map +1 -0
- package/dist/CacheService/Database.d.ts +13 -0
- package/dist/CacheService/Database.d.ts.map +1 -0
- package/dist/CacheService/Database.js +38 -0
- package/dist/CacheService/Database.js.map +1 -0
- package/dist/CacheService/EventsHub.d.ts +183 -0
- package/dist/CacheService/EventsHub.d.ts.map +1 -0
- package/dist/CacheService/EventsHub.js +22 -0
- package/dist/CacheService/EventsHub.js.map +1 -0
- package/dist/CacheService/diff.d.ts +28 -0
- package/dist/CacheService/diff.d.ts.map +1 -0
- package/dist/CacheService/diff.js +102 -0
- package/dist/CacheService/diff.js.map +1 -0
- package/dist/CacheService/index.d.ts +19 -0
- package/dist/CacheService/index.d.ts.map +1 -0
- package/dist/CacheService/index.js +16 -0
- package/dist/CacheService/index.js.map +1 -0
- package/dist/CacheService/migrations/0001_initial.d.ts +5 -0
- package/dist/CacheService/migrations/0001_initial.d.ts.map +1 -0
- package/dist/CacheService/migrations/0001_initial.js +72 -0
- package/dist/CacheService/migrations/0001_initial.js.map +1 -0
- package/dist/CacheService/migrations/0002_indexes.d.ts +5 -0
- package/dist/CacheService/migrations/0002_indexes.d.ts.map +1 -0
- package/dist/CacheService/migrations/0002_indexes.js +7 -0
- package/dist/CacheService/migrations/0002_indexes.js.map +1 -0
- package/dist/CacheService/migrations/0003_add_health_score.d.ts +5 -0
- package/dist/CacheService/migrations/0003_add_health_score.d.ts.map +1 -0
- package/dist/CacheService/migrations/0003_add_health_score.js +4 -0
- package/dist/CacheService/migrations/0003_add_health_score.js.map +1 -0
- package/dist/CacheService/migrations/0004_unify_notifications.d.ts +5 -0
- package/dist/CacheService/migrations/0004_unify_notifications.d.ts.map +1 -0
- package/dist/CacheService/migrations/0004_unify_notifications.js +7 -0
- package/dist/CacheService/migrations/0004_unify_notifications.js.map +1 -0
- package/dist/CacheService/migrations/0005_add_sandboxes.d.ts +5 -0
- package/dist/CacheService/migrations/0005_add_sandboxes.d.ts.map +1 -0
- package/dist/CacheService/migrations/0005_add_sandboxes.js +23 -0
- package/dist/CacheService/migrations/0005_add_sandboxes.js.map +1 -0
- package/dist/CacheService/migrations/0006_sandbox_logs.d.ts +5 -0
- package/dist/CacheService/migrations/0006_sandbox_logs.d.ts.map +1 -0
- package/dist/CacheService/migrations/0006_sandbox_logs.js +7 -0
- package/dist/CacheService/migrations/0006_sandbox_logs.js.map +1 -0
- package/dist/CacheService/repos/CommentRepo.d.ts +16 -0
- package/dist/CacheService/repos/CommentRepo.d.ts.map +1 -0
- package/dist/CacheService/repos/CommentRepo.js +42 -0
- package/dist/CacheService/repos/CommentRepo.js.map +1 -0
- package/dist/CacheService/repos/NotificationRepo.d.ts +48 -0
- package/dist/CacheService/repos/NotificationRepo.d.ts.map +1 -0
- package/dist/CacheService/repos/NotificationRepo.js +128 -0
- package/dist/CacheService/repos/NotificationRepo.js.map +1 -0
- package/dist/CacheService/repos/PullRequestRepo.d.ts +112 -0
- package/dist/CacheService/repos/PullRequestRepo.d.ts.map +1 -0
- package/dist/CacheService/repos/PullRequestRepo.js +146 -0
- package/dist/CacheService/repos/PullRequestRepo.js.map +1 -0
- package/dist/CacheService/repos/SandboxRepo.d.ts +116 -0
- package/dist/CacheService/repos/SandboxRepo.d.ts.map +1 -0
- package/dist/CacheService/repos/SandboxRepo.js +88 -0
- package/dist/CacheService/repos/SandboxRepo.js.map +1 -0
- package/dist/CacheService/repos/SubscriptionRepo.d.ts +20 -0
- package/dist/CacheService/repos/SubscriptionRepo.d.ts.map +1 -0
- package/dist/CacheService/repos/SubscriptionRepo.js +49 -0
- package/dist/CacheService/repos/SubscriptionRepo.js.map +1 -0
- package/dist/CacheService/repos/SyncMetadataRepo.d.ts +14 -0
- package/dist/CacheService/repos/SyncMetadataRepo.d.ts.map +1 -0
- package/dist/CacheService/repos/SyncMetadataRepo.js +36 -0
- package/dist/CacheService/repos/SyncMetadataRepo.js.map +1 -0
- package/dist/ConfigService/backup.d.ts +1 -1
- package/dist/ConfigService/detectProfiles.d.ts +1 -1
- package/dist/ConfigService/index.d.ts +3 -2
- package/dist/ConfigService/index.d.ts.map +1 -1
- package/dist/ConfigService/index.js +4 -2
- package/dist/ConfigService/index.js.map +1 -1
- package/dist/ConfigService/internal.d.ts +104 -0
- package/dist/ConfigService/internal.d.ts.map +1 -1
- package/dist/ConfigService/internal.js +18 -1
- package/dist/ConfigService/internal.js.map +1 -1
- package/dist/ConfigService/load.d.ts +18 -1
- package/dist/ConfigService/load.d.ts.map +1 -1
- package/dist/ConfigService/load.js +12 -3
- package/dist/ConfigService/load.js.map +1 -1
- package/dist/ConfigService/reset.d.ts.map +1 -1
- package/dist/ConfigService/reset.js +5 -2
- package/dist/ConfigService/reset.js.map +1 -1
- package/dist/ConfigService/save.d.ts +1 -1
- package/dist/ConfigService/validate.d.ts +1 -1
- package/dist/DateUtils.d.ts +1 -1
- package/dist/DateUtils.d.ts.map +1 -1
- package/dist/DateUtils.js +2 -2
- package/dist/DateUtils.js.map +1 -1
- package/dist/Domain.d.ts +251 -10
- package/dist/Domain.d.ts.map +1 -1
- package/dist/Domain.js +55 -5
- package/dist/Domain.js.map +1 -1
- package/dist/Errors.d.ts +28 -1
- package/dist/Errors.d.ts.map +1 -1
- package/dist/Errors.js +22 -1
- package/dist/Errors.js.map +1 -1
- package/dist/HealthScore.d.ts.map +1 -1
- package/dist/HealthScore.js +1 -3
- package/dist/HealthScore.js.map +1 -1
- package/dist/PRService/index.d.ts +46 -18
- package/dist/PRService/index.d.ts.map +1 -1
- package/dist/PRService/index.js +58 -27
- package/dist/PRService/index.js.map +1 -1
- package/dist/PRService/internal.d.ts +86 -1
- package/dist/PRService/internal.d.ts.map +1 -1
- package/dist/PRService/internal.js +106 -1
- package/dist/PRService/internal.js.map +1 -1
- package/dist/PRService/refresh.d.ts +10 -4
- package/dist/PRService/refresh.d.ts.map +1 -1
- package/dist/PRService/refresh.js +30 -89
- package/dist/PRService/refresh.js.map +1 -1
- package/dist/PRService/refreshEnrich.d.ts +15 -0
- package/dist/PRService/refreshEnrich.d.ts.map +1 -0
- package/dist/PRService/refreshEnrich.js +72 -0
- package/dist/PRService/refreshEnrich.js.map +1 -0
- package/dist/PRService/refreshFetch.d.ts +20 -0
- package/dist/PRService/refreshFetch.d.ts.map +1 -0
- package/dist/PRService/refreshFetch.js +78 -0
- package/dist/PRService/refreshFetch.js.map +1 -0
- package/dist/PRService/refreshResolve.d.ts +29 -0
- package/dist/PRService/refreshResolve.d.ts.map +1 -0
- package/dist/PRService/refreshResolve.js +84 -0
- package/dist/PRService/refreshResolve.js.map +1 -0
- package/dist/PRService/refreshScore.d.ts +9 -0
- package/dist/PRService/refreshScore.d.ts.map +1 -0
- package/dist/PRService/refreshScore.js +24 -0
- package/dist/PRService/refreshScore.js.map +1 -0
- package/dist/PRService/refreshSinglePR.d.ts +13 -0
- package/dist/PRService/refreshSinglePR.d.ts.map +1 -0
- package/dist/PRService/refreshSinglePR.js +102 -0
- package/dist/PRService/refreshSinglePR.js.map +1 -0
- package/dist/PRService/setAllAccounts.d.ts +1 -3
- package/dist/PRService/setAllAccounts.d.ts.map +1 -1
- package/dist/PRService/setAllAccounts.js +2 -2
- package/dist/PRService/setAllAccounts.js.map +1 -1
- package/dist/PRService/toggleAccount.d.ts +1 -3
- package/dist/PRService/toggleAccount.d.ts.map +1 -1
- package/dist/PRService/toggleAccount.js +2 -2
- package/dist/PRService/toggleAccount.js.map +1 -1
- package/dist/SandboxService/DockerService.d.ts +57 -0
- package/dist/SandboxService/DockerService.d.ts.map +1 -0
- package/dist/SandboxService/DockerService.js +83 -0
- package/dist/SandboxService/DockerService.js.map +1 -0
- package/dist/SandboxService/PluginService.d.ts +38 -0
- package/dist/SandboxService/PluginService.d.ts.map +1 -0
- package/dist/SandboxService/PluginService.js +26 -0
- package/dist/SandboxService/PluginService.js.map +1 -0
- package/dist/SandboxService/SandboxService.d.ts +102 -0
- package/dist/SandboxService/SandboxService.d.ts.map +1 -0
- package/dist/SandboxService/SandboxService.js +272 -0
- package/dist/SandboxService/SandboxService.js.map +1 -0
- package/dist/SandboxService/index.d.ts +13 -0
- package/dist/SandboxService/index.d.ts.map +1 -0
- package/dist/SandboxService/index.js +10 -0
- package/dist/SandboxService/index.js.map +1 -0
- package/dist/SandboxService/plugins/ClaudeCodePlugin.d.ts +18 -0
- package/dist/SandboxService/plugins/ClaudeCodePlugin.d.ts.map +1 -0
- package/dist/SandboxService/plugins/ClaudeCodePlugin.js +24 -0
- package/dist/SandboxService/plugins/ClaudeCodePlugin.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
- package/dist/NotificationsService.d.ts +0 -46
- package/dist/NotificationsService.d.ts.map +0 -1
- package/dist/NotificationsService.js +0 -57
- package/dist/NotificationsService.js.map +0 -1
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import * as SqlClient from "@effect/sql/SqlClient";
|
|
2
|
+
import { Effect, Option, Schema } from "effect";
|
|
3
|
+
import type { SandboxId, SandboxStatus } from "../../Domain.js";
|
|
4
|
+
import { CacheError } from "../CacheError.js";
|
|
5
|
+
import { EventsHub } from "../EventsHub.js";
|
|
6
|
+
export declare const SandboxRow: Schema.Struct<{
|
|
7
|
+
id: typeof Schema.String;
|
|
8
|
+
pullRequestId: typeof Schema.String;
|
|
9
|
+
awsAccountId: typeof Schema.String;
|
|
10
|
+
repositoryName: typeof Schema.String;
|
|
11
|
+
sourceBranch: typeof Schema.String;
|
|
12
|
+
containerId: Schema.NullOr<typeof Schema.String>;
|
|
13
|
+
port: Schema.NullOr<typeof Schema.Number>;
|
|
14
|
+
workspacePath: typeof Schema.String;
|
|
15
|
+
status: typeof Schema.String;
|
|
16
|
+
statusDetail: Schema.NullOr<typeof Schema.String>;
|
|
17
|
+
logs: Schema.NullOr<typeof Schema.String>;
|
|
18
|
+
error: Schema.NullOr<typeof Schema.String>;
|
|
19
|
+
createdAt: typeof Schema.String;
|
|
20
|
+
lastActivityAt: typeof Schema.String;
|
|
21
|
+
}>;
|
|
22
|
+
export type SandboxRow = typeof SandboxRow.Type;
|
|
23
|
+
export interface InsertSandbox {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly pullRequestId: string;
|
|
26
|
+
readonly awsAccountId: string;
|
|
27
|
+
readonly repositoryName: string;
|
|
28
|
+
readonly sourceBranch: string;
|
|
29
|
+
readonly workspacePath: string;
|
|
30
|
+
readonly status: string;
|
|
31
|
+
readonly createdAt: string;
|
|
32
|
+
readonly lastActivityAt: string;
|
|
33
|
+
}
|
|
34
|
+
declare const SandboxRepo_base: Effect.Service.Class<SandboxRepo, "SandboxRepo", {
|
|
35
|
+
readonly dependencies: readonly [import("effect/Layer").Layer<SqlClient.SqlClient | import("@effect/sql-libsql/LibsqlClient").LibsqlClient, import("@effect/sql/SqlError").SqlError | import("effect/ConfigError").ConfigError | import("@effect/sql/Migrator").MigrationError, import("@effect/platform/FileSystem").FileSystem>, import("effect/Layer").Layer<EventsHub, never, never>];
|
|
36
|
+
readonly effect: Effect.Effect<{
|
|
37
|
+
readonly insert: (sandbox: InsertSandbox) => Effect.Effect<readonly import("@effect/sql/SqlConnection").Row[], CacheError, never>;
|
|
38
|
+
readonly updateStatus: (id: SandboxId, status: SandboxStatus, extra?: {
|
|
39
|
+
containerId?: string;
|
|
40
|
+
port?: number;
|
|
41
|
+
error?: string;
|
|
42
|
+
}) => Effect.Effect<readonly import("@effect/sql/SqlConnection").Row[], CacheError, never>;
|
|
43
|
+
readonly findById: (id: SandboxId) => Effect.Effect<{
|
|
44
|
+
readonly error: string | null;
|
|
45
|
+
readonly awsAccountId: string;
|
|
46
|
+
readonly id: string;
|
|
47
|
+
readonly repositoryName: string;
|
|
48
|
+
readonly status: string;
|
|
49
|
+
readonly sourceBranch: string;
|
|
50
|
+
readonly pullRequestId: string;
|
|
51
|
+
readonly workspacePath: string;
|
|
52
|
+
readonly createdAt: string;
|
|
53
|
+
readonly lastActivityAt: string;
|
|
54
|
+
readonly containerId: string | null;
|
|
55
|
+
readonly port: number | null;
|
|
56
|
+
readonly statusDetail: string | null;
|
|
57
|
+
readonly logs: string | null;
|
|
58
|
+
}, import("effect/ParseResult").ParseError | CacheError | import("@effect/sql/SqlError").SqlError, never>;
|
|
59
|
+
readonly findByPr: (awsAccountId: string, pullRequestId: string) => Effect.Effect<Option.Option<{
|
|
60
|
+
readonly error: string | null;
|
|
61
|
+
readonly awsAccountId: string;
|
|
62
|
+
readonly id: string;
|
|
63
|
+
readonly repositoryName: string;
|
|
64
|
+
readonly status: string;
|
|
65
|
+
readonly sourceBranch: string;
|
|
66
|
+
readonly pullRequestId: string;
|
|
67
|
+
readonly workspacePath: string;
|
|
68
|
+
readonly createdAt: string;
|
|
69
|
+
readonly lastActivityAt: string;
|
|
70
|
+
readonly containerId: string | null;
|
|
71
|
+
readonly port: number | null;
|
|
72
|
+
readonly statusDetail: string | null;
|
|
73
|
+
readonly logs: string | null;
|
|
74
|
+
}>, CacheError, never>;
|
|
75
|
+
readonly findActive: () => Effect.Effect<readonly {
|
|
76
|
+
readonly error: string | null;
|
|
77
|
+
readonly awsAccountId: string;
|
|
78
|
+
readonly id: string;
|
|
79
|
+
readonly repositoryName: string;
|
|
80
|
+
readonly status: string;
|
|
81
|
+
readonly sourceBranch: string;
|
|
82
|
+
readonly pullRequestId: string;
|
|
83
|
+
readonly workspacePath: string;
|
|
84
|
+
readonly createdAt: string;
|
|
85
|
+
readonly lastActivityAt: string;
|
|
86
|
+
readonly containerId: string | null;
|
|
87
|
+
readonly port: number | null;
|
|
88
|
+
readonly statusDetail: string | null;
|
|
89
|
+
readonly logs: string | null;
|
|
90
|
+
}[], CacheError, never>;
|
|
91
|
+
readonly findAll: () => Effect.Effect<readonly {
|
|
92
|
+
readonly error: string | null;
|
|
93
|
+
readonly awsAccountId: string;
|
|
94
|
+
readonly id: string;
|
|
95
|
+
readonly repositoryName: string;
|
|
96
|
+
readonly status: string;
|
|
97
|
+
readonly sourceBranch: string;
|
|
98
|
+
readonly pullRequestId: string;
|
|
99
|
+
readonly workspacePath: string;
|
|
100
|
+
readonly createdAt: string;
|
|
101
|
+
readonly lastActivityAt: string;
|
|
102
|
+
readonly containerId: string | null;
|
|
103
|
+
readonly port: number | null;
|
|
104
|
+
readonly statusDetail: string | null;
|
|
105
|
+
readonly logs: string | null;
|
|
106
|
+
}[], CacheError, never>;
|
|
107
|
+
readonly delete: (id: SandboxId) => Effect.Effect<readonly import("@effect/sql/SqlConnection").Row[], CacheError, never>;
|
|
108
|
+
readonly updateDetail: (id: SandboxId, detail: string) => Effect.Effect<readonly import("@effect/sql/SqlConnection").Row[], CacheError, never>;
|
|
109
|
+
readonly appendLog: (id: SandboxId, line: string) => Effect.Effect<readonly import("@effect/sql/SqlConnection").Row[], CacheError, never>;
|
|
110
|
+
readonly updateActivity: (id: SandboxId) => Effect.Effect<readonly import("@effect/sql/SqlConnection").Row[], CacheError, never>;
|
|
111
|
+
}, never, SqlClient.SqlClient | EventsHub>;
|
|
112
|
+
}>;
|
|
113
|
+
export declare class SandboxRepo extends SandboxRepo_base {
|
|
114
|
+
}
|
|
115
|
+
export {};
|
|
116
|
+
//# sourceMappingURL=SandboxRepo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SandboxRepo.d.ts","sourceRoot":"","sources":["../../../src/CacheService/repos/SandboxRepo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAS,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAA;AAEvD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;EAerB,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAA;AAE/C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAChC;;;;mCAkDuB,aAAa;oCASzB,SAAS,UACL,aAAa,UACb;YAAE,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE;gCAiBlD,SAAS;;;;;;;;;;;;;;;;0CAUC,MAAM,iBAAiB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAOzC,SAAS;oCAMH,SAAS,UAAU,MAAM;iCAa5B,SAAS,QAAQ,MAAM;sCAalB,SAAS;;;AArHpC,qBAAa,WAAY,SAAQ,gBA4H/B;CAAG"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as SqlClient from "@effect/sql/SqlClient";
|
|
2
|
+
import * as SqlSchema from "@effect/sql/SqlSchema";
|
|
3
|
+
import { Clock, Effect, Option, Schema } from "effect";
|
|
4
|
+
import { CacheError } from "../CacheError.js";
|
|
5
|
+
import { DatabaseLive } from "../Database.js";
|
|
6
|
+
import { EventsHub, RepoChange } from "../EventsHub.js";
|
|
7
|
+
export const SandboxRow = Schema.Struct({
|
|
8
|
+
id: Schema.String,
|
|
9
|
+
pullRequestId: Schema.String,
|
|
10
|
+
awsAccountId: Schema.String,
|
|
11
|
+
repositoryName: Schema.String,
|
|
12
|
+
sourceBranch: Schema.String,
|
|
13
|
+
containerId: Schema.NullOr(Schema.String),
|
|
14
|
+
port: Schema.NullOr(Schema.Number),
|
|
15
|
+
workspacePath: Schema.String,
|
|
16
|
+
status: Schema.String,
|
|
17
|
+
statusDetail: Schema.NullOr(Schema.String),
|
|
18
|
+
logs: Schema.NullOr(Schema.String),
|
|
19
|
+
error: Schema.NullOr(Schema.String),
|
|
20
|
+
createdAt: Schema.String,
|
|
21
|
+
lastActivityAt: Schema.String
|
|
22
|
+
});
|
|
23
|
+
const cacheError = (op) => (effect) => effect.pipe(Effect.mapError((cause) => new CacheError({ operation: `SandboxRepo.${op}`, cause })), Effect.withSpan(`SandboxRepo.${op}`, { captureStackTrace: false }));
|
|
24
|
+
const isoNow = Clock.currentTimeMillis.pipe(Effect.map((ms) => new Date(ms).toISOString()));
|
|
25
|
+
export class SandboxRepo extends Effect.Service()("SandboxRepo", {
|
|
26
|
+
dependencies: [DatabaseLive, EventsHub.Default],
|
|
27
|
+
effect: Effect.gen(function* () {
|
|
28
|
+
const sql = yield* SqlClient.SqlClient;
|
|
29
|
+
const hub = yield* EventsHub;
|
|
30
|
+
const publish = hub.publish(RepoChange.Sandboxes());
|
|
31
|
+
const findById_ = SqlSchema.findOne({
|
|
32
|
+
Result: SandboxRow,
|
|
33
|
+
Request: Schema.Struct({ id: Schema.String }),
|
|
34
|
+
execute: (req) => sql `SELECT * FROM sandboxes WHERE id = ${req.id}`
|
|
35
|
+
});
|
|
36
|
+
const findByPr_ = SqlSchema.findOne({
|
|
37
|
+
Result: SandboxRow,
|
|
38
|
+
Request: Schema.Struct({ awsAccountId: Schema.String, pullRequestId: Schema.String }),
|
|
39
|
+
execute: (req) => sql `SELECT * FROM sandboxes
|
|
40
|
+
WHERE aws_account_id = ${req.awsAccountId}
|
|
41
|
+
AND pull_request_id = ${req.pullRequestId}
|
|
42
|
+
AND status NOT IN ('stopped', 'error')`
|
|
43
|
+
});
|
|
44
|
+
const findActive_ = SqlSchema.findAll({
|
|
45
|
+
Result: SandboxRow,
|
|
46
|
+
Request: Schema.Void,
|
|
47
|
+
execute: () => sql `SELECT * FROM sandboxes
|
|
48
|
+
WHERE status IN ('creating', 'cloning', 'starting', 'running')
|
|
49
|
+
ORDER BY created_at DESC`
|
|
50
|
+
});
|
|
51
|
+
const findAll_ = SqlSchema.findAll({
|
|
52
|
+
Result: SandboxRow,
|
|
53
|
+
Request: Schema.Void,
|
|
54
|
+
execute: () => sql `SELECT * FROM sandboxes ORDER BY created_at DESC`
|
|
55
|
+
});
|
|
56
|
+
return {
|
|
57
|
+
insert: (sandbox) => sql `INSERT INTO sandboxes (id, pull_request_id, aws_account_id, repository_name, source_branch, workspace_path, status, created_at, last_activity_at)
|
|
58
|
+
VALUES (${sandbox.id}, ${sandbox.pullRequestId}, ${sandbox.awsAccountId}, ${sandbox.repositoryName}, ${sandbox.sourceBranch}, ${sandbox.workspacePath}, ${sandbox.status}, ${sandbox.createdAt}, ${sandbox.lastActivityAt})`
|
|
59
|
+
.pipe(Effect.tap(() => publish), cacheError("insert")),
|
|
60
|
+
updateStatus: (id, status, extra) => isoNow.pipe(Effect.flatMap((now) => sql `UPDATE sandboxes SET
|
|
61
|
+
status = ${status},
|
|
62
|
+
last_activity_at = ${now}
|
|
63
|
+
${extra?.containerId ? sql `, container_id = ${extra.containerId}` : sql ``}
|
|
64
|
+
${extra?.port ? sql `, port = ${extra.port}` : sql ``}
|
|
65
|
+
${extra?.error ? sql `, error = ${extra.error}` : sql ``}
|
|
66
|
+
WHERE id = ${id}`.pipe(Effect.tap(() => publish))), cacheError("updateStatus")),
|
|
67
|
+
findById: (id) => findById_({ id }).pipe(Effect.flatMap(Option.match({
|
|
68
|
+
onNone: () => Effect.fail(new CacheError({ operation: "SandboxRepo.findById", cause: `Sandbox ${id} not found` })),
|
|
69
|
+
onSome: Effect.succeed
|
|
70
|
+
})), Effect.withSpan("SandboxRepo.findById", { captureStackTrace: false })),
|
|
71
|
+
findByPr: (awsAccountId, pullRequestId) => findByPr_({ awsAccountId, pullRequestId }).pipe(cacheError("findByPr")),
|
|
72
|
+
findActive: () => findActive_(undefined).pipe(cacheError("findActive")),
|
|
73
|
+
findAll: () => findAll_(undefined).pipe(cacheError("findAll")),
|
|
74
|
+
delete: (id) => sql `DELETE FROM sandboxes WHERE id = ${id}`.pipe(Effect.tap(() => publish), cacheError("delete")),
|
|
75
|
+
updateDetail: (id, detail) => isoNow.pipe(Effect.flatMap((now) => sql `UPDATE sandboxes SET
|
|
76
|
+
status_detail = ${detail},
|
|
77
|
+
last_activity_at = ${now}
|
|
78
|
+
WHERE id = ${id}`.pipe(Effect.tap(() => publish))), cacheError("updateDetail")),
|
|
79
|
+
appendLog: (id, line) => isoNow.pipe(Effect.flatMap((now) => sql `UPDATE sandboxes SET
|
|
80
|
+
logs = COALESCE(logs, '') || ${line + "\n"},
|
|
81
|
+
last_activity_at = ${now}
|
|
82
|
+
WHERE id = ${id}`.pipe(Effect.tap(() => publish))), cacheError("appendLog")),
|
|
83
|
+
updateActivity: (id) => isoNow.pipe(Effect.flatMap((now) => sql `UPDATE sandboxes SET last_activity_at = ${now} WHERE id = ${id}`), cacheError("updateActivity"))
|
|
84
|
+
};
|
|
85
|
+
})
|
|
86
|
+
}) {
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=SandboxRepo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SandboxRepo.js","sourceRoot":"","sources":["../../../src/CacheService/repos/SandboxRepo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAClD,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEvD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,aAAa,EAAE,MAAM,CAAC,MAAM;IAC5B,YAAY,EAAE,MAAM,CAAC,MAAM;IAC3B,cAAc,EAAE,MAAM,CAAC,MAAM;IAC7B,YAAY,EAAE,MAAM,CAAC,MAAM;IAC3B,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC,MAAM;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,cAAc,EAAE,MAAM,CAAC,MAAM;CAC9B,CAAC,CAAA;AAgBF,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,CAAU,MAA8B,EAAE,EAAE,CAC7E,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EACrF,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CACnE,CAAA;AAEH,MAAM,MAAM,GAAG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;AAE3F,MAAM,OAAO,WAAY,SAAQ,MAAM,CAAC,OAAO,EAAe,CAAC,aAAa,EAAE;IAC5E,YAAY,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAA;QAE5B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAA;QAEnD,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC;YAClC,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7C,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAA,sCAAsC,GAAG,CAAC,EAAE,EAAE;SACpE,CAAC,CAAA;QAEF,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC;YAClC,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;YACrF,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CACf,GAAG,CAAA;qCAC0B,GAAG,CAAC,YAAY;sCACf,GAAG,CAAC,aAAa;qDACF;SAChD,CAAC,CAAA;QAEF,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,CAAC;YACpC,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,MAAM,CAAC,IAAI;YACpB,OAAO,EAAE,GAAG,EAAE,CACZ,GAAG,CAAA;;qCAE0B;SAChC,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC;YACjC,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,MAAM,CAAC,IAAI;YACpB,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAA,kDAAkD;SACrE,CAAC,CAAA;QAEF,OAAO;YACL,MAAM,EAAE,CAAC,OAAsB,EAAE,EAAE,CACjC,GAAG,CAAA;sBACW,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,aAAa,KAAK,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,cAAc,KAAK,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,aAAa,KAAK,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,cAAc,GAAG;iBAC7N,IAAI,CACH,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EACzB,UAAU,CAAC,QAAQ,CAAC,CACrB;YAEL,YAAY,EAAE,CACZ,EAAa,EACb,MAAqB,EACrB,KAA+D,EAC/D,EAAE,CACF,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACrB,GAAG,CAAA;2BACY,MAAM;qCACI,GAAG;kBACtB,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAA,oBAAoB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA,EAAE;kBACvE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAA,YAAY,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA,EAAE;kBACjD,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAA,aAAa,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA,EAAE;6BACzC,EAAE,EAAE,CAAC,IAAI,CACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAC1B,CACF,EACD,UAAU,CAAC,cAAc,CAAC,CAC3B;YAEH,QAAQ,EAAE,CAAC,EAAa,EAAE,EAAE,CAC1B,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CACpB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC1B,MAAM,EAAE,GAAG,EAAE,CACX,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,EAAE,SAAS,EAAE,sBAAsB,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;gBACtG,MAAM,EAAE,MAAM,CAAC,OAAO;aACvB,CAAC,CAAC,EACH,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CACtE;YAEH,QAAQ,EAAE,CAAC,YAAoB,EAAE,aAAqB,EAAE,EAAE,CACxD,SAAS,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAEzE,UAAU,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,SAAiB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAE/E,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAiB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAEtE,MAAM,EAAE,CAAC,EAAa,EAAE,EAAE,CACxB,GAAG,CAAA,oCAAoC,EAAE,EAAE,CAAC,IAAI,CAC9C,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,EACzB,UAAU,CAAC,QAAQ,CAAC,CACrB;YAEH,YAAY,EAAE,CAAC,EAAa,EAAE,MAAc,EAAE,EAAE,CAC9C,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACrB,GAAG,CAAA;kCACmB,MAAM;qCACH,GAAG;6BACX,EAAE,EAAE,CAAC,IAAI,CACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAC1B,CACF,EACD,UAAU,CAAC,cAAc,CAAC,CAC3B;YAEH,SAAS,EAAE,CAAC,EAAa,EAAE,IAAY,EAAE,EAAE,CACzC,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACrB,GAAG,CAAA;+CACgC,IAAI,GAAG,IAAI;qCACrB,GAAG;6BACX,EAAE,EAAE,CAAC,IAAI,CACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAC1B,CACF,EACD,UAAU,CAAC,WAAW,CAAC,CACxB;YAEH,cAAc,EAAE,CAAC,EAAa,EAAE,EAAE,CAChC,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAA,2CAA2C,GAAG,eAAe,EAAE,EAAE,CAAC,EAC7F,UAAU,CAAC,gBAAgB,CAAC,CAC7B;SACK,CAAA;IACZ,CAAC,CAAC;CACH,CAAC;CAAG"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as SqlClient from "@effect/sql/SqlClient";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
import { CacheError } from "../CacheError.js";
|
|
4
|
+
import { EventsHub } from "../EventsHub.js";
|
|
5
|
+
declare const SubscriptionRepo_base: Effect.Service.Class<SubscriptionRepo, "SubscriptionRepo", {
|
|
6
|
+
readonly dependencies: readonly [import("effect/Layer").Layer<SqlClient.SqlClient | import("@effect/sql-libsql/LibsqlClient").LibsqlClient, import("@effect/sql/SqlError").SqlError | import("effect/ConfigError").ConfigError | import("@effect/sql/Migrator").MigrationError, import("@effect/platform/FileSystem").FileSystem>, import("effect/Layer").Layer<EventsHub, never, never>];
|
|
7
|
+
readonly effect: Effect.Effect<{
|
|
8
|
+
readonly subscribe: (awsAccountId: string, prId: string) => Effect.Effect<void, CacheError, never>;
|
|
9
|
+
readonly unsubscribe: (awsAccountId: string, prId: string) => Effect.Effect<void, CacheError, never>;
|
|
10
|
+
readonly findAll: () => Effect.Effect<readonly {
|
|
11
|
+
readonly awsAccountId: string;
|
|
12
|
+
readonly pullRequestId: string;
|
|
13
|
+
}[], CacheError, never>;
|
|
14
|
+
readonly isSubscribed: (awsAccountId: string, prId: string) => Effect.Effect<boolean, CacheError, never>;
|
|
15
|
+
}, never, SqlClient.SqlClient | EventsHub>;
|
|
16
|
+
}>;
|
|
17
|
+
export declare class SubscriptionRepo extends SubscriptionRepo_base {
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=SubscriptionRepo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriptionRepo.d.ts","sourceRoot":"","sources":["../../../src/CacheService/repos/SubscriptionRepo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAA;;;;2CAoDvB,MAAM,QAAQ,MAAM;6CAGlB,MAAM,QAAQ,MAAM;;;;;8CAKnB,MAAM,QAAQ,MAAM;;;AA/CvD,qBAAa,gBAAiB,SAAQ,qBAsDpC;CAAG"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import * as SqlClient from "@effect/sql/SqlClient";
|
|
2
|
+
import * as SqlSchema from "@effect/sql/SqlSchema";
|
|
3
|
+
import { Effect, Schema } from "effect";
|
|
4
|
+
import { CacheError } from "../CacheError.js";
|
|
5
|
+
import { DatabaseLive } from "../Database.js";
|
|
6
|
+
import { EventsHub, RepoChange } from "../EventsHub.js";
|
|
7
|
+
const SubscriptionRow = Schema.Struct({
|
|
8
|
+
awsAccountId: Schema.String,
|
|
9
|
+
pullRequestId: Schema.String
|
|
10
|
+
});
|
|
11
|
+
const cacheError = (op) => (effect) => effect.pipe(Effect.mapError((cause) => new CacheError({ operation: `SubscriptionRepo.${op}`, cause })), Effect.withSpan(`SubscriptionRepo.${op}`, { captureStackTrace: false }));
|
|
12
|
+
export class SubscriptionRepo extends Effect.Service()("SubscriptionRepo", {
|
|
13
|
+
dependencies: [DatabaseLive, EventsHub.Default],
|
|
14
|
+
effect: Effect.gen(function* () {
|
|
15
|
+
const sql = yield* SqlClient.SqlClient;
|
|
16
|
+
const hub = yield* EventsHub;
|
|
17
|
+
const RequestPair = Schema.Struct({ awsAccountId: Schema.String, prId: Schema.String });
|
|
18
|
+
const subscribe_ = SqlSchema.void({
|
|
19
|
+
Request: RequestPair,
|
|
20
|
+
execute: (req) => sql `INSERT OR IGNORE INTO pr_subscriptions (aws_account_id, pull_request_id)
|
|
21
|
+
VALUES (${req.awsAccountId}, ${req.prId})`
|
|
22
|
+
});
|
|
23
|
+
const unsubscribe_ = SqlSchema.void({
|
|
24
|
+
Request: RequestPair,
|
|
25
|
+
execute: (req) => sql `DELETE FROM pr_subscriptions
|
|
26
|
+
WHERE aws_account_id = ${req.awsAccountId} AND pull_request_id = ${req.prId}`
|
|
27
|
+
});
|
|
28
|
+
const findAll_ = SqlSchema.findAll({
|
|
29
|
+
Result: SubscriptionRow,
|
|
30
|
+
Request: Schema.Void,
|
|
31
|
+
execute: () => sql `SELECT * FROM pr_subscriptions`
|
|
32
|
+
});
|
|
33
|
+
const isSubscribed_ = SqlSchema.findOne({
|
|
34
|
+
Result: Schema.Struct({ exists: Schema.Number }),
|
|
35
|
+
Request: RequestPair,
|
|
36
|
+
execute: (req) => sql `SELECT 1 AS "exists" FROM pr_subscriptions
|
|
37
|
+
WHERE aws_account_id = ${req.awsAccountId} AND pull_request_id = ${req.prId}`
|
|
38
|
+
});
|
|
39
|
+
const publish = hub.publish(RepoChange.Subscriptions());
|
|
40
|
+
return {
|
|
41
|
+
subscribe: (awsAccountId, prId) => subscribe_({ awsAccountId, prId }).pipe(Effect.tap(() => publish), cacheError("subscribe")),
|
|
42
|
+
unsubscribe: (awsAccountId, prId) => unsubscribe_({ awsAccountId, prId }).pipe(Effect.tap(() => publish), cacheError("unsubscribe")),
|
|
43
|
+
findAll: () => findAll_(undefined).pipe(cacheError("findAll")),
|
|
44
|
+
isSubscribed: (awsAccountId, prId) => isSubscribed_({ awsAccountId, prId }).pipe(Effect.map((o) => o._tag === "Some"), cacheError("isSubscribed"))
|
|
45
|
+
};
|
|
46
|
+
})
|
|
47
|
+
}) {
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=SubscriptionRepo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubscriptionRepo.js","sourceRoot":"","sources":["../../../src/CacheService/repos/SubscriptionRepo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as SqlClient from "@effect/sql/SqlClient";
|
|
2
|
+
import { Effect, Option } from "effect";
|
|
3
|
+
import { CacheError } from "../CacheError.js";
|
|
4
|
+
declare const SyncMetadataRepo_base: Effect.Service.Class<SyncMetadataRepo, "SyncMetadataRepo", {
|
|
5
|
+
readonly dependencies: readonly [import("effect/Layer").Layer<SqlClient.SqlClient | import("@effect/sql-libsql/LibsqlClient").LibsqlClient, import("@effect/sql/SqlError").SqlError | import("effect/ConfigError").ConfigError | import("@effect/sql/Migrator").MigrationError, import("@effect/platform/FileSystem").FileSystem>];
|
|
6
|
+
readonly effect: Effect.Effect<{
|
|
7
|
+
readonly getLastSyncedAt: (accountId: string, region: string) => Effect.Effect<Option.Option<string>, CacheError, never>;
|
|
8
|
+
readonly update: (accountId: string, region: string) => Effect.Effect<void, CacheError, never>;
|
|
9
|
+
}, never, SqlClient.SqlClient>;
|
|
10
|
+
}>;
|
|
11
|
+
export declare class SyncMetadataRepo extends SyncMetadataRepo_base {
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=SyncMetadataRepo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyncMetadataRepo.d.ts","sourceRoot":"","sources":["../../../src/CacheService/repos/SyncMetadataRepo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;;;;8CAuCV,MAAM,UAAU,MAAM;qCAM/B,MAAM,UAAU,MAAM;;;AA3BhD,qBAAa,gBAAiB,SAAQ,qBA8BpC;CAAG"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as SqlClient from "@effect/sql/SqlClient";
|
|
2
|
+
import * as SqlSchema from "@effect/sql/SqlSchema";
|
|
3
|
+
import { Effect, Option, Schema } from "effect";
|
|
4
|
+
import { CacheError } from "../CacheError.js";
|
|
5
|
+
import { DatabaseLive } from "../Database.js";
|
|
6
|
+
const SyncRow = Schema.Struct({
|
|
7
|
+
lastSyncedAt: Schema.String
|
|
8
|
+
});
|
|
9
|
+
const AccountRegion = Schema.Struct({
|
|
10
|
+
accountId: Schema.String,
|
|
11
|
+
region: Schema.String
|
|
12
|
+
});
|
|
13
|
+
const cacheError = (op) => (effect) => effect.pipe(Effect.mapError((cause) => new CacheError({ operation: `SyncMetadataRepo.${op}`, cause })), Effect.withSpan(`SyncMetadataRepo.${op}`, { captureStackTrace: false }));
|
|
14
|
+
export class SyncMetadataRepo extends Effect.Service()("SyncMetadataRepo", {
|
|
15
|
+
dependencies: [DatabaseLive],
|
|
16
|
+
effect: Effect.gen(function* () {
|
|
17
|
+
const sql = yield* SqlClient.SqlClient;
|
|
18
|
+
const getLastSyncedAt_ = SqlSchema.findOne({
|
|
19
|
+
Result: SyncRow,
|
|
20
|
+
Request: AccountRegion,
|
|
21
|
+
execute: (req) => sql `SELECT last_synced_at FROM sync_metadata
|
|
22
|
+
WHERE account_id = ${req.accountId} AND account_region = ${req.region}`
|
|
23
|
+
});
|
|
24
|
+
const update_ = SqlSchema.void({
|
|
25
|
+
Request: AccountRegion,
|
|
26
|
+
execute: (req) => sql `INSERT OR REPLACE INTO sync_metadata (account_id, account_region, last_synced_at)
|
|
27
|
+
VALUES (${req.accountId}, ${req.region}, datetime('now'))`
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
getLastSyncedAt: (accountId, region) => getLastSyncedAt_({ accountId, region }).pipe(Effect.map(Option.map((r) => r.lastSyncedAt)), cacheError("getLastSyncedAt")),
|
|
31
|
+
update: (accountId, region) => update_({ accountId, region }).pipe(cacheError("update"))
|
|
32
|
+
};
|
|
33
|
+
})
|
|
34
|
+
}) {
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=SyncMetadataRepo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyncMetadataRepo.js","sourceRoot":"","sources":["../../../src/CacheService/repos/SyncMetadataRepo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAClD,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC,MAAM;CAC5B,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM;CACtB,CAAC,CAAA;AAEF,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,CAAU,MAA8B,EAAE,EAAE,CAC7E,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAC1F,MAAM,CAAC,QAAQ,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CACxE,CAAA;AAEH,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,OAAO,EAAoB,CAAC,kBAAkB,EAAE;IAC3F,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC1B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;QAEtC,MAAM,gBAAgB,GAAG,SAAS,CAAC,OAAO,CAAC;YACzC,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CACf,GAAG,CAAA;iCACsB,GAAG,CAAC,SAAS,yBAAyB,GAAG,CAAC,MAAM,EAAE;SAC9E,CAAC,CAAA;QAEF,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC;YAC7B,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CACf,GAAG,CAAA;sBACW,GAAG,CAAC,SAAS,KAAK,GAAG,CAAC,MAAM,oBAAoB;SACjE,CAAC,CAAA;QAEF,OAAO;YACL,eAAe,EAAE,CAAC,SAAiB,EAAE,MAAc,EAAE,EAAE,CACrD,gBAAgB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAC1C,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAC7C,UAAU,CAAC,iBAAiB,CAAC,CAC9B;YAEH,MAAM,EAAE,CAAC,SAAiB,EAAE,MAAc,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;SAChG,CAAA;IACZ,CAAC,CAAC;CACH,CAAC;CAAG"}
|
|
@@ -5,5 +5,5 @@ import { FileSystem } from "@effect/platform";
|
|
|
5
5
|
import { Effect } from "effect";
|
|
6
6
|
import { ConfigError } from "../Errors.js";
|
|
7
7
|
import { ConfigPaths } from "./internal.js";
|
|
8
|
-
export declare const backup: Effect.Effect<string, ConfigError,
|
|
8
|
+
export declare const backup: Effect.Effect<string, ConfigError, FileSystem.FileSystem | ConfigPaths>;
|
|
9
9
|
//# sourceMappingURL=backup.d.ts.map
|
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
import { FileSystem, Path } from "@effect/platform";
|
|
5
5
|
import { Effect } from "effect";
|
|
6
6
|
import { ConfigPaths } from "./internal.js";
|
|
7
|
-
export declare const detectProfiles: Effect.Effect<import("./internal.js").DetectedProfile[], import("../Errors.ts").ProfileDetectionError,
|
|
7
|
+
export declare const detectProfiles: Effect.Effect<import("./internal.js").DetectedProfile[], import("../Errors.ts").ProfileDetectionError, FileSystem.FileSystem | ConfigPaths | Path.Path>;
|
|
8
8
|
//# sourceMappingURL=detectProfiles.d.ts.map
|
|
@@ -6,11 +6,12 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { FileSystem, Path } from "@effect/platform";
|
|
8
8
|
import { Context, Effect, Layer } from "effect";
|
|
9
|
+
import { EventsHub } from "../CacheService/EventsHub.js";
|
|
9
10
|
import { ConfigError, ProfileDetectionError } from "../Errors.js";
|
|
10
11
|
import type { ConfigParseError } from "../Errors.js";
|
|
11
12
|
import type { DetectedProfile, TuiConfig } from "./internal.js";
|
|
12
13
|
import type { ConfigValidationResult } from "./validate.js";
|
|
13
|
-
export { AccountConfig, DetectedProfile, TuiConfig } from "./internal.js";
|
|
14
|
+
export { AccountConfig, defaultSandboxConfig, DetectedProfile, SandboxConfig, TuiConfig } from "./internal.js";
|
|
14
15
|
export { ConfigValidationResult } from "./validate.js";
|
|
15
16
|
declare const ConfigService_base: Context.TagClass<ConfigService, "@knpkv/codecommit-core/ConfigService", {
|
|
16
17
|
readonly load: Effect.Effect<TuiConfig, ConfigError | ConfigParseError>;
|
|
@@ -23,5 +24,5 @@ declare const ConfigService_base: Context.TagClass<ConfigService, "@knpkv/codeco
|
|
|
23
24
|
}>;
|
|
24
25
|
export declare class ConfigService extends ConfigService_base {
|
|
25
26
|
}
|
|
26
|
-
export declare const ConfigServiceLive: Layer.Layer<ConfigService, never, FileSystem.FileSystem | Path.Path>;
|
|
27
|
+
export declare const ConfigServiceLive: Layer.Layer<ConfigService, never, FileSystem.FileSystem | EventsHub | Path.Path>;
|
|
27
28
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ConfigService/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAU,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGpD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAK/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAG3D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ConfigService/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAU,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGpD,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAK/D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAG3D,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9G,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;;mBASnC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,gBAAgB,CAAC;mBACxD,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC;6BAC7C,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE,qBAAqB,CAAC;4BACrE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;qBACzC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;oBACnC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,qBAAqB,CAAC;uBAC1D,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,WAAW,CAAC;;AATzE,qBAAa,aAAc,SAAQ,kBAWhC;CAAG;AAoCN,eAAO,MAAM,iBAAiB,kFAsBQ,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Config, Context, Effect, Layer } from "effect";
|
|
2
|
+
import { EventsHub } from "../CacheService/EventsHub.js";
|
|
2
3
|
import { ConfigError, ProfileDetectionError } from "../Errors.js";
|
|
3
4
|
import { backup } from "./backup.js";
|
|
4
5
|
import { detectProfiles } from "./detectProfiles.js";
|
|
@@ -7,7 +8,7 @@ import { makeLoad } from "./load.js";
|
|
|
7
8
|
import { makeReset } from "./reset.js";
|
|
8
9
|
import { save } from "./save.js";
|
|
9
10
|
import { validate } from "./validate.js";
|
|
10
|
-
export { AccountConfig, DetectedProfile, TuiConfig } from "./internal.js";
|
|
11
|
+
export { AccountConfig, defaultSandboxConfig, DetectedProfile, SandboxConfig, TuiConfig } from "./internal.js";
|
|
11
12
|
export { ConfigValidationResult } from "./validate.js";
|
|
12
13
|
// ---------------------------------------------------------------------------
|
|
13
14
|
// Service Definition
|
|
@@ -26,12 +27,13 @@ const ConfigPathsLive = Layer.effect(ConfigPaths, Effect.gen(function* () {
|
|
|
26
27
|
}));
|
|
27
28
|
export const ConfigServiceLive = Layer.effect(ConfigService, Effect.gen(function* () {
|
|
28
29
|
const ctx = yield* Effect.context();
|
|
30
|
+
const hub = yield* EventsHub;
|
|
29
31
|
const provide = (effect) => Effect.provide(effect, ctx);
|
|
30
32
|
const load = makeLoad(detectProfiles);
|
|
31
33
|
const reset = makeReset(detectProfiles);
|
|
32
34
|
return {
|
|
33
35
|
load: provide(load),
|
|
34
|
-
save: (config) => provide(save(config)),
|
|
36
|
+
save: (config) => provide(save(config)).pipe(Effect.tap(() => hub.publish({ _tag: "Config" }))),
|
|
35
37
|
detectProfiles: provide(detectProfiles),
|
|
36
38
|
getConfigPath: provide(ConfigPaths.pipe(Effect.flatMap((p) => p.configPath))),
|
|
37
39
|
backup: provide(backup),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ConfigService/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEjE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ConfigService/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,55 @@ declare const DetectedProfile_base: Schema.Class<DetectedProfile, {
|
|
|
21
21
|
}, {}, {}>;
|
|
22
22
|
export declare class DetectedProfile extends DetectedProfile_base {
|
|
23
23
|
}
|
|
24
|
+
export declare const SandboxConfig: Schema.Struct<{
|
|
25
|
+
image: Schema.optionalWith<typeof Schema.String, {
|
|
26
|
+
default: () => string;
|
|
27
|
+
}>;
|
|
28
|
+
extensions: Schema.optionalWith<Schema.Array$<typeof Schema.String>, {
|
|
29
|
+
default: () => Array<string>;
|
|
30
|
+
}>;
|
|
31
|
+
setupCommands: Schema.optionalWith<Schema.Array$<typeof Schema.String>, {
|
|
32
|
+
default: () => Array<string>;
|
|
33
|
+
}>;
|
|
34
|
+
env: Schema.optionalWith<Schema.Record$<typeof Schema.String, typeof Schema.String>, {
|
|
35
|
+
default: () => Record<string, string>;
|
|
36
|
+
}>;
|
|
37
|
+
enableClaudeCode: Schema.optionalWith<typeof Schema.Boolean, {
|
|
38
|
+
default: () => true;
|
|
39
|
+
}>;
|
|
40
|
+
volumeMounts: Schema.optionalWith<Schema.Array$<Schema.Struct<{
|
|
41
|
+
hostPath: typeof Schema.String;
|
|
42
|
+
containerPath: typeof Schema.String;
|
|
43
|
+
readonly: Schema.optionalWith<typeof Schema.Boolean, {
|
|
44
|
+
default: () => false;
|
|
45
|
+
}>;
|
|
46
|
+
}>>, {
|
|
47
|
+
default: () => Array<{
|
|
48
|
+
hostPath: string;
|
|
49
|
+
containerPath: string;
|
|
50
|
+
readonly: boolean;
|
|
51
|
+
}>;
|
|
52
|
+
}>;
|
|
53
|
+
cloneDepth: Schema.optionalWith<Schema.filter<Schema.filter<typeof Schema.Number>>, {
|
|
54
|
+
default: () => number;
|
|
55
|
+
}>;
|
|
56
|
+
}>;
|
|
57
|
+
export type SandboxConfig = typeof SandboxConfig.Type;
|
|
58
|
+
export declare const defaultSandboxConfig: {
|
|
59
|
+
readonly image: string;
|
|
60
|
+
readonly extensions: readonly string[];
|
|
61
|
+
readonly setupCommands: readonly string[];
|
|
62
|
+
readonly env: {
|
|
63
|
+
readonly [x: string]: string;
|
|
64
|
+
};
|
|
65
|
+
readonly enableClaudeCode: boolean;
|
|
66
|
+
readonly volumeMounts: readonly {
|
|
67
|
+
readonly hostPath: string;
|
|
68
|
+
readonly containerPath: string;
|
|
69
|
+
readonly readonly: boolean;
|
|
70
|
+
}[];
|
|
71
|
+
readonly cloneDepth: number;
|
|
72
|
+
};
|
|
24
73
|
export declare const AccountConfig: Schema.Struct<{
|
|
25
74
|
profile: Schema.brand<typeof Schema.String, "AwsProfileName">;
|
|
26
75
|
regions: Schema.optionalWith<Schema.Array$<Schema.brand<typeof Schema.String, "AwsRegion">>, {
|
|
@@ -44,6 +93,61 @@ export declare const TuiConfig: Schema.Struct<{
|
|
|
44
93
|
autoDetect: Schema.optionalWith<typeof Schema.Boolean, {
|
|
45
94
|
default: () => true;
|
|
46
95
|
}>;
|
|
96
|
+
autoRefresh: Schema.optionalWith<typeof Schema.Boolean, {
|
|
97
|
+
default: () => true;
|
|
98
|
+
}>;
|
|
99
|
+
refreshIntervalSeconds: Schema.optionalWith<typeof Schema.Number, {
|
|
100
|
+
default: () => number;
|
|
101
|
+
}>;
|
|
102
|
+
sandbox: Schema.optionalWith<Schema.Struct<{
|
|
103
|
+
image: Schema.optionalWith<typeof Schema.String, {
|
|
104
|
+
default: () => string;
|
|
105
|
+
}>;
|
|
106
|
+
extensions: Schema.optionalWith<Schema.Array$<typeof Schema.String>, {
|
|
107
|
+
default: () => Array<string>;
|
|
108
|
+
}>;
|
|
109
|
+
setupCommands: Schema.optionalWith<Schema.Array$<typeof Schema.String>, {
|
|
110
|
+
default: () => Array<string>;
|
|
111
|
+
}>;
|
|
112
|
+
env: Schema.optionalWith<Schema.Record$<typeof Schema.String, typeof Schema.String>, {
|
|
113
|
+
default: () => Record<string, string>;
|
|
114
|
+
}>;
|
|
115
|
+
enableClaudeCode: Schema.optionalWith<typeof Schema.Boolean, {
|
|
116
|
+
default: () => true;
|
|
117
|
+
}>;
|
|
118
|
+
volumeMounts: Schema.optionalWith<Schema.Array$<Schema.Struct<{
|
|
119
|
+
hostPath: typeof Schema.String;
|
|
120
|
+
containerPath: typeof Schema.String;
|
|
121
|
+
readonly: Schema.optionalWith<typeof Schema.Boolean, {
|
|
122
|
+
default: () => false;
|
|
123
|
+
}>;
|
|
124
|
+
}>>, {
|
|
125
|
+
default: () => Array<{
|
|
126
|
+
hostPath: string;
|
|
127
|
+
containerPath: string;
|
|
128
|
+
readonly: boolean;
|
|
129
|
+
}>;
|
|
130
|
+
}>;
|
|
131
|
+
cloneDepth: Schema.optionalWith<Schema.filter<Schema.filter<typeof Schema.Number>>, {
|
|
132
|
+
default: () => number;
|
|
133
|
+
}>;
|
|
134
|
+
}>, {
|
|
135
|
+
default: () => {
|
|
136
|
+
readonly image: string;
|
|
137
|
+
readonly extensions: readonly string[];
|
|
138
|
+
readonly setupCommands: readonly string[];
|
|
139
|
+
readonly env: {
|
|
140
|
+
readonly [x: string]: string;
|
|
141
|
+
};
|
|
142
|
+
readonly enableClaudeCode: boolean;
|
|
143
|
+
readonly volumeMounts: readonly {
|
|
144
|
+
readonly hostPath: string;
|
|
145
|
+
readonly containerPath: string;
|
|
146
|
+
readonly readonly: boolean;
|
|
147
|
+
}[];
|
|
148
|
+
readonly cloneDepth: number;
|
|
149
|
+
};
|
|
150
|
+
}>;
|
|
47
151
|
}>;
|
|
48
152
|
export type TuiConfig = typeof TuiConfig.Type;
|
|
49
153
|
export declare const parseAwsConfig: (content: string) => ReadonlyArray<DetectedProfile>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/ConfigService/internal.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAgB,OAAO,EAAgB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;;;;;;;;;;;;;;;;AAMtE,qBAAa,eAAgB,SAAQ,oBAGnC;CAAG;AAEL,eAAO,MAAM,aAAa;;;;;;;;EAIxB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/ConfigService/internal.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAgB,OAAO,EAAgB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpE,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;;;;;;;;;;;;;;;;AAMtE,qBAAa,eAAgB,SAAQ,oBAGnC;CAAG;AAEL,eAAO,MAAM,aAAa;;;;;uBAEgE,KAAK,CAAC,MAAM,CAAC;;;uBACV,KAAK,CAAC,MAAM,CAAC;;;uBAEzD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;;;;;;uBAUxB,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,OAAO,CAAA;SAAE,CAAC;;;;;EAOlH,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;CAAuC,CAAA;AAExE,eAAO,MAAM,aAAa;;;;;;;;EAIxB,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAA;AAErD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;2BAlCoE,KAAK,CAAC,MAAM,CAAC;;;2BACV,KAAK,CAAC,MAAM,CAAC;;;2BAEzD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;;;;;;2BAUxB,KAAK,CAAC;gBAAE,QAAQ,EAAE,MAAM,CAAC;gBAAC,aAAa,EAAE,MAAM,CAAC;gBAAC,QAAQ,EAAE,OAAO,CAAA;aAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;EA2BlH,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,IAAI,CAAA;AAqC7C,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,aAAa,CAAC,eAAe,CAK3E,CAAA;;yBASsB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;uBACpC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC;;AAJnE,qBAAa,WAAY,SAAQ,gBAM9B;CAAG"}
|
|
@@ -8,6 +8,20 @@ export class DetectedProfile extends Schema.Class("DetectedProfile")({
|
|
|
8
8
|
region: Schema.optionalWith(AwsRegion, { exact: true })
|
|
9
9
|
}) {
|
|
10
10
|
}
|
|
11
|
+
export const SandboxConfig = Schema.Struct({
|
|
12
|
+
image: Schema.String.pipe(Schema.optionalWith({ default: () => "codercom/code-server:latest" })),
|
|
13
|
+
extensions: Schema.Array(Schema.String).pipe(Schema.optionalWith({ default: () => [] })),
|
|
14
|
+
setupCommands: Schema.Array(Schema.String).pipe(Schema.optionalWith({ default: () => [] })),
|
|
15
|
+
env: Schema.Record({ key: Schema.String, value: Schema.String }).pipe(Schema.optionalWith({ default: () => ({}) })),
|
|
16
|
+
enableClaudeCode: Schema.Boolean.pipe(Schema.optionalWith({ default: () => true })),
|
|
17
|
+
volumeMounts: Schema.Array(Schema.Struct({
|
|
18
|
+
hostPath: Schema.String,
|
|
19
|
+
containerPath: Schema.String,
|
|
20
|
+
readonly: Schema.Boolean.pipe(Schema.optionalWith({ default: () => false }))
|
|
21
|
+
})).pipe(Schema.optionalWith({ default: () => [] })),
|
|
22
|
+
cloneDepth: Schema.Number.pipe(Schema.int(), Schema.greaterThanOrEqualTo(0), Schema.optionalWith({ default: () => 0 }))
|
|
23
|
+
});
|
|
24
|
+
export const defaultSandboxConfig = Schema.decodeSync(SandboxConfig)({});
|
|
11
25
|
export const AccountConfig = Schema.Struct({
|
|
12
26
|
profile: AwsProfileName,
|
|
13
27
|
regions: Schema.Array(AwsRegion).pipe(Schema.optionalWith({ default: () => ["us-east-1"] })),
|
|
@@ -15,7 +29,10 @@ export const AccountConfig = Schema.Struct({
|
|
|
15
29
|
});
|
|
16
30
|
export const TuiConfig = Schema.Struct({
|
|
17
31
|
accounts: Schema.Array(AccountConfig),
|
|
18
|
-
autoDetect: Schema.Boolean.pipe(Schema.optionalWith({ default: () => true }))
|
|
32
|
+
autoDetect: Schema.Boolean.pipe(Schema.optionalWith({ default: () => true })),
|
|
33
|
+
autoRefresh: Schema.Boolean.pipe(Schema.optionalWith({ default: () => true })),
|
|
34
|
+
refreshIntervalSeconds: Schema.Number.pipe(Schema.optionalWith({ default: () => 300 })),
|
|
35
|
+
sandbox: SandboxConfig.pipe(Schema.optionalWith({ default: () => Schema.decodeSync(SandboxConfig)({}) }))
|
|
19
36
|
});
|
|
20
37
|
// ---------------------------------------------------------------------------
|
|
21
38
|
// INI Parsing (Schema-validated)
|