@knpkv/codecommit-web 0.10.0 → 0.11.1
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/dist/client/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/dist/client/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/dist/client/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/dist/client/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/dist/client/assets/geist-mono-cyrillic-ext-wght-normal-I4S5GZfc.woff2 +0 -0
- package/dist/client/assets/geist-mono-cyrillic-wght-normal-BmXc_FBt.woff2 +0 -0
- package/dist/client/assets/geist-mono-latin-ext-wght-normal-DrnZ1wKl.woff2 +0 -0
- package/dist/client/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2 +0 -0
- package/dist/client/assets/geist-mono-symbols2-wght-normal-GZpp1pK2.woff2 +0 -0
- package/dist/client/assets/geist-mono-vietnamese-wght-normal-D8KDMBhC.woff2 +0 -0
- package/dist/client/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/dist/client/assets/index-DHUFjL8d.css +1 -0
- package/dist/client/assets/index-DfsN9fTl.js +90 -0
- package/dist/client/index.html +2 -2
- package/dist/main.js +5 -3
- package/dist/main.js.map +1 -1
- package/dist/server/Api.d.ts +457 -468
- package/dist/server/Api.d.ts.map +1 -1
- package/dist/server/Api.js +218 -200
- package/dist/server/Api.js.map +1 -1
- package/dist/server/Server.d.ts +3 -3
- package/dist/server/Server.d.ts.map +1 -1
- package/dist/server/Server.js +26 -23
- package/dist/server/Server.js.map +1 -1
- package/dist/server/handlers/accounts-live.d.ts +1 -1
- package/dist/server/handlers/accounts-live.d.ts.map +1 -1
- package/dist/server/handlers/accounts-live.js +1 -1
- package/dist/server/handlers/accounts-live.js.map +1 -1
- package/dist/server/handlers/audit-live.d.ts +6 -1
- package/dist/server/handlers/audit-live.d.ts.map +1 -1
- package/dist/server/handlers/audit-live.js +13 -13
- package/dist/server/handlers/audit-live.js.map +1 -1
- package/dist/server/handlers/config-live.d.ts +2 -1
- package/dist/server/handlers/config-live.d.ts.map +1 -1
- package/dist/server/handlers/config-live.js +20 -16
- package/dist/server/handlers/config-live.js.map +1 -1
- package/dist/server/handlers/events-live.d.ts +17 -1
- package/dist/server/handlers/events-live.d.ts.map +1 -1
- package/dist/server/handlers/events-live.js +20 -13
- package/dist/server/handlers/events-live.js.map +1 -1
- package/dist/server/handlers/notifications-live.d.ts +12 -1
- package/dist/server/handlers/notifications-live.d.ts.map +1 -1
- package/dist/server/handlers/notifications-live.js +24 -15
- package/dist/server/handlers/notifications-live.js.map +1 -1
- package/dist/server/handlers/permissions-live.d.ts +7 -1
- package/dist/server/handlers/permissions-live.d.ts.map +1 -1
- package/dist/server/handlers/permissions-live.js +3 -2
- package/dist/server/handlers/permissions-live.js.map +1 -1
- package/dist/server/handlers/prs-live.d.ts +14 -1
- package/dist/server/handlers/prs-live.d.ts.map +1 -1
- package/dist/server/handlers/prs-live.js +34 -30
- package/dist/server/handlers/prs-live.js.map +1 -1
- package/dist/server/handlers/sandbox-live.d.ts +1 -1
- package/dist/server/handlers/sandbox-live.d.ts.map +1 -1
- package/dist/server/handlers/sandbox-live.js +8 -7
- package/dist/server/handlers/sandbox-live.js.map +1 -1
- package/dist/server/handlers/stats-live.d.ts +11 -1
- package/dist/server/handlers/stats-live.d.ts.map +1 -1
- package/dist/server/handlers/stats-live.js +7 -7
- package/dist/server/handlers/stats-live.js.map +1 -1
- package/dist/server/handlers/subscriptions-live.d.ts +1 -1
- package/dist/server/handlers/subscriptions-live.d.ts.map +1 -1
- package/dist/server/handlers/subscriptions-live.js +1 -1
- package/dist/server/handlers/subscriptions-live.js.map +1 -1
- package/dist/tooling/production-prototype-boundary.d.ts +6 -0
- package/dist/tooling/production-prototype-boundary.d.ts.map +1 -0
- package/dist/tooling/production-prototype-boundary.js +21 -0
- package/dist/tooling/production-prototype-boundary.js.map +1 -0
- package/package.json +26 -29
- package/dist/client/assets/geist-cyrillic-wght-normal-CHSlOQsW.woff2 +0 -0
- package/dist/client/assets/geist-latin-ext-wght-normal-DMtmJ5ZE.woff2 +0 -0
- package/dist/client/assets/geist-latin-wght-normal-Dm3htQBi.woff2 +0 -0
- package/dist/client/assets/geist-mono-cyrillic-wght-normal-BZdD_g9V.woff2 +0 -0
- package/dist/client/assets/geist-mono-latin-ext-wght-normal-b6lpi8_2.woff2 +0 -0
- package/dist/client/assets/geist-mono-latin-wght-normal-Cjtb1TV-.woff2 +0 -0
- package/dist/client/assets/index-nrvy41i3.css +0 -1
- package/dist/client/assets/index-vzkZdqP0.js +0 -481
|
@@ -8,37 +8,43 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
|
-
import { Command, HttpApiBuilder } from "@effect/platform";
|
|
12
11
|
import { AwsClient, CacheService, PRService } from "@knpkv/codecommit-core";
|
|
13
|
-
import {
|
|
12
|
+
import { AwsRegion } from "@knpkv/codecommit-core/Domain.js";
|
|
13
|
+
import { Duration, Effect, Schema, Semaphore, SubscriptionRef } from "effect";
|
|
14
|
+
import { HttpApiBuilder } from "effect/unstable/httpapi";
|
|
15
|
+
import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process";
|
|
14
16
|
import { ApiError, CodeCommitApi } from "../Api.js";
|
|
15
17
|
const SSO_TIMEOUT = Duration.minutes(3);
|
|
18
|
+
const exitCode = (cmd) => Effect.flatMap(ChildProcessSpawner.ChildProcessSpawner, (spawner) => spawner.exitCode(cmd));
|
|
16
19
|
export const NotificationsLive = HttpApiBuilder.group(CodeCommitApi, "notifications", (handlers) => Effect.gen(function* () {
|
|
17
20
|
const prService = yield* PRService.PRService;
|
|
18
21
|
const awsClient = yield* AwsClient.AwsClient;
|
|
19
22
|
const notificationRepo = yield* CacheService.NotificationRepo;
|
|
20
|
-
const ssoSemaphore = yield*
|
|
23
|
+
const ssoSemaphore = yield* Semaphore.make(1);
|
|
21
24
|
return handlers
|
|
22
|
-
.handle("list", ({
|
|
23
|
-
limit:
|
|
24
|
-
...(
|
|
25
|
-
...(
|
|
26
|
-
...(
|
|
25
|
+
.handle("list", ({ query }) => notificationRepo.findAll({
|
|
26
|
+
limit: query.limit ?? 20,
|
|
27
|
+
...(query.cursor !== undefined ? { cursor: query.cursor } : {}),
|
|
28
|
+
...(query.filter !== undefined ? { filter: query.filter } : {}),
|
|
29
|
+
...(query.unreadOnly ? { unreadOnly: true } : {})
|
|
27
30
|
}).pipe(Effect.orDie))
|
|
28
31
|
.handle("count", () => notificationRepo.unreadCount().pipe(Effect.map((unread) => ({ unread })), Effect.orDie))
|
|
29
32
|
.handle("markRead", ({ payload }) => notificationRepo.markRead(payload.id).pipe(Effect.map(() => "ok"), Effect.orDie))
|
|
30
33
|
.handle("markUnread", ({ payload }) => notificationRepo.markUnread(payload.id).pipe(Effect.map(() => "ok"), Effect.orDie))
|
|
31
34
|
.handle("markAllRead", () => notificationRepo.markAllRead().pipe(Effect.map(() => "ok"), Effect.orDie))
|
|
32
35
|
.handle("ssoLogin", ({ payload }) => Effect.gen(function* () {
|
|
33
|
-
const cmd =
|
|
34
|
-
|
|
36
|
+
const cmd = ChildProcess.make("aws", ["sso", "login", "--profile", payload.profile], {
|
|
37
|
+
stdout: "inherit",
|
|
38
|
+
stderr: "inherit"
|
|
39
|
+
});
|
|
40
|
+
yield* Effect.forkDetach(ssoSemaphore.withPermits(1)(exitCode(cmd).pipe(Effect.timeout(SSO_TIMEOUT), Effect.tap(() => Effect.gen(function* () {
|
|
35
41
|
const state = yield* SubscriptionRef.get(prService.state);
|
|
36
42
|
const account = state.accounts.find((a) => a.profile === payload.profile);
|
|
37
|
-
const region = account?.region ?? "us-east-1";
|
|
43
|
+
const region = account?.region ?? Schema.decodeSync(AwsRegion)("us-east-1");
|
|
38
44
|
const identity = yield* awsClient.getCallerIdentity({
|
|
39
45
|
profile: payload.profile,
|
|
40
46
|
region
|
|
41
|
-
}).pipe(Effect.
|
|
47
|
+
}).pipe(Effect.catchIf(() => true, () => Effect.succeed(undefined)));
|
|
42
48
|
if (identity) {
|
|
43
49
|
yield* SubscriptionRef.update(prService.state, (s) => ({
|
|
44
50
|
...s,
|
|
@@ -50,7 +56,7 @@ export const NotificationsLive = HttpApiBuilder.group(CodeCommitApi, "notificati
|
|
|
50
56
|
title: payload.profile,
|
|
51
57
|
message: `SSO login successful for ${payload.profile}`,
|
|
52
58
|
profile: payload.profile
|
|
53
|
-
})), Effect.tap(() => prService.refresh), Effect.
|
|
59
|
+
})), Effect.tap(() => prService.refresh), Effect.catchIf(() => true, (e) => Effect.logWarning("SSO login failed", e).pipe(Effect.andThen(notificationRepo.addSystem({
|
|
54
60
|
type: "error",
|
|
55
61
|
title: "SSO Login Failed",
|
|
56
62
|
message: "SSO login failed — check credentials",
|
|
@@ -59,8 +65,11 @@ export const NotificationsLive = HttpApiBuilder.group(CodeCommitApi, "notificati
|
|
|
59
65
|
return "ok";
|
|
60
66
|
}).pipe(Effect.mapError((e) => new ApiError({ message: String(e) || "Failed to start SSO login" }))))
|
|
61
67
|
.handle("ssoLogout", () => Effect.gen(function* () {
|
|
62
|
-
const cmd =
|
|
63
|
-
|
|
68
|
+
const cmd = ChildProcess.make("aws", ["sso", "logout"], {
|
|
69
|
+
stdout: "inherit",
|
|
70
|
+
stderr: "inherit"
|
|
71
|
+
});
|
|
72
|
+
yield* Effect.forkDetach(ssoSemaphore.withPermits(1)(exitCode(cmd).pipe(Effect.timeout(SSO_TIMEOUT), Effect.tap(() => SubscriptionRef.update(prService.state, ({ currentUser: _, ...rest }) => rest)), Effect.catchIf(() => true, (e) => Effect.logWarning("SSO logout failed", e).pipe(Effect.andThen(notificationRepo.addSystem({
|
|
64
73
|
type: "error",
|
|
65
74
|
title: "SSO Logout Failed",
|
|
66
75
|
message: "SSO logout failed"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications-live.js","sourceRoot":"","sources":["../../../src/server/handlers/notifications-live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"notifications-live.js","sourceRoot":"","sources":["../../../src/server/handlers/notifications-live.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @title Permissions handler — respond to prompts, manage permission state
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
1
6
|
import { PermissionService } from "@knpkv/codecommit-core";
|
|
2
|
-
|
|
7
|
+
import { PermissionGateLiveTag } from "@knpkv/codecommit-core/PermissionService/PermissionGateLive.js";
|
|
8
|
+
export declare const PermissionsLive: import("effect/Layer").Layer<import("effect/unstable/httpapi/HttpApiGroup").Service<"CodeCommitApi", "permissions">, never, PermissionService.PermissionService | PermissionGateLiveTag>;
|
|
3
9
|
//# sourceMappingURL=permissions-live.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/permissions-live.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"permissions-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/permissions-live.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gEAAgE,CAAA;AAOtG,eAAO,MAAM,eAAe,0LA0C3B,CAAA"}
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
import { HttpApiBuilder } from "@effect/platform";
|
|
7
6
|
import { PermissionService } from "@knpkv/codecommit-core";
|
|
8
7
|
import { PermissionGateLiveTag } from "@knpkv/codecommit-core/PermissionService/PermissionGateLive.js";
|
|
9
8
|
import { Effect } from "effect";
|
|
9
|
+
import { HttpApiBuilder } from "effect/unstable/httpapi";
|
|
10
10
|
import { ApiError, CodeCommitApi } from "../Api.js";
|
|
11
|
+
const defaultPermissionState = "allow";
|
|
11
12
|
export const PermissionsLive = HttpApiBuilder.group(CodeCommitApi, "permissions", (handlers) => Effect.gen(function* () {
|
|
12
13
|
const permService = yield* PermissionService.PermissionService;
|
|
13
14
|
const gate = yield* PermissionGateLiveTag;
|
|
@@ -18,7 +19,7 @@ export const PermissionsLive = HttpApiBuilder.group(CodeCommitApi, "permissions"
|
|
|
18
19
|
const ops = PermissionService.allOperations();
|
|
19
20
|
return ops.map(([name, meta]) => ({
|
|
20
21
|
operation: name,
|
|
21
|
-
state: permissions[name] ??
|
|
22
|
+
state: permissions[name] ?? defaultPermissionState,
|
|
22
23
|
category: meta.category,
|
|
23
24
|
description: meta.description
|
|
24
25
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions-live.js","sourceRoot":"","sources":["../../../src/server/handlers/permissions-live.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"permissions-live.js","sourceRoot":"","sources":["../../../src/server/handlers/permissions-live.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PR endpoint handlers — list, refresh, create, open, comments, approval rules.
|
|
3
|
+
*
|
|
4
|
+
* Handles PR CRUD (list, search, refresh, create, open in console via Granted),
|
|
5
|
+
* comments fetch, and approval rule management (create/update/delete).
|
|
6
|
+
* {@link buildApprovalRuleContent} constructs the AWS JSON format
|
|
7
|
+
* `{Version, Statements, ApprovalPoolMembers}`. {@link extractAwsMessage}
|
|
8
|
+
* drills into AwsApiError.cause.message for human-readable error text.
|
|
9
|
+
* Approval rule errors produce system notifications via tapError.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
1
13
|
import { AwsClient, CacheService, PRService } from "@knpkv/codecommit-core";
|
|
2
|
-
|
|
14
|
+
import { ChildProcessSpawner } from "effect/unstable/process";
|
|
15
|
+
export declare const PrsLive: import("effect/Layer").Layer<import("effect/unstable/httpapi/HttpApiGroup").Service<"CodeCommitApi", "prs">, never, AwsClient.AwsClient | CacheService.NotificationRepo | PRService.PRService | import("effect/unstable/http/HttpRouter").Request<"Requires", ChildProcessSpawner.ChildProcessSpawner> | import("effect/unstable/http/HttpRouter").Request<"Requires", unknown>>;
|
|
3
16
|
//# sourceMappingURL=prs-live.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prs-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/prs-live.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prs-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/prs-live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAI3E,OAAO,EAAgB,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AA2C3E,eAAO,MAAM,OAAO,kXAiIf,CAAA"}
|
|
@@ -10,32 +10,32 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @module
|
|
12
12
|
*/
|
|
13
|
-
import { Command, HttpApiBuilder } from "@effect/platform";
|
|
14
13
|
import { AwsClient, CacheService, PRService } from "@knpkv/codecommit-core";
|
|
15
14
|
import { encodeCommentLocations } from "@knpkv/codecommit-core/Domain.js";
|
|
16
|
-
import { Chunk, Effect, Schema, Stream, SubscriptionRef } from "effect";
|
|
17
|
-
import {
|
|
15
|
+
import { Chunk, Effect, Predicate, Schema, Stream, SubscriptionRef } from "effect";
|
|
16
|
+
import { HttpApiBuilder } from "effect/unstable/httpapi";
|
|
17
|
+
import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process";
|
|
18
18
|
import { ApiError, CodeCommitApi } from "../Api.js";
|
|
19
19
|
const copyToClipboard = (text) => {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return Command.exitCode(Command.stdin(cmd, Stream.make(text).pipe(Stream.encodeText)));
|
|
20
|
+
const stdin = Stream.make(text).pipe(Stream.encodeText);
|
|
21
|
+
const copyWith = (cmd) => Effect.flatMap(ChildProcessSpawner.ChildProcessSpawner, (spawner) => spawner.exitCode(cmd));
|
|
22
|
+
return copyWith(ChildProcess.make("pbcopy", { stdin })).pipe(Effect.catchIf(() => true, () => copyWith(ChildProcess.make("xclip", ["-selection", "clipboard"], { stdin }))));
|
|
24
23
|
};
|
|
25
24
|
const extractAwsMessage = (e) => {
|
|
26
|
-
if (!e
|
|
25
|
+
if (!Predicate.isObjectKeyword(e))
|
|
27
26
|
return String(e);
|
|
28
|
-
const err = e;
|
|
29
27
|
// AwsApiError.cause may contain the real AWS exception
|
|
30
|
-
const cause =
|
|
31
|
-
if (cause
|
|
28
|
+
const cause = Predicate.hasProperty(e, "cause") ? e.cause : undefined;
|
|
29
|
+
if (Predicate.hasProperty(cause, "message")) {
|
|
32
30
|
return String(cause.message);
|
|
33
31
|
}
|
|
34
|
-
if ("message"
|
|
35
|
-
return
|
|
32
|
+
if (Predicate.hasProperty(e, "message") && typeof e.message === "string" && e.message)
|
|
33
|
+
return e.message;
|
|
36
34
|
// PermissionDeniedError or other tagged errors
|
|
37
|
-
if ("reason"
|
|
38
|
-
|
|
35
|
+
if (Predicate.hasProperty(e, "reason")) {
|
|
36
|
+
const operation = Predicate.hasProperty(e, "operation") ? e.operation : "unknown operation";
|
|
37
|
+
return `Permission ${e.reason}: ${operation}`;
|
|
38
|
+
}
|
|
39
39
|
try {
|
|
40
40
|
return JSON.stringify(e);
|
|
41
41
|
}
|
|
@@ -57,16 +57,16 @@ export const PrsLive = HttpApiBuilder.group(CodeCommitApi, "prs", (handlers) =>
|
|
|
57
57
|
const notificationRepo = yield* CacheService.NotificationRepo;
|
|
58
58
|
return handlers
|
|
59
59
|
.handle("list", () => SubscriptionRef.get(prService.state).pipe(Effect.map((state) => Chunk.fromIterable(state.pullRequests))))
|
|
60
|
-
.handle("refresh", () => prService.refresh.pipe(Effect.
|
|
61
|
-
.handle("search", ({
|
|
62
|
-
const result = yield* prService.searchPullRequests(
|
|
63
|
-
limit:
|
|
64
|
-
offset:
|
|
60
|
+
.handle("refresh", () => prService.refresh.pipe(Effect.forkDetach, Effect.map(() => "ok")))
|
|
61
|
+
.handle("search", ({ query }) => Effect.gen(function* () {
|
|
62
|
+
const result = yield* prService.searchPullRequests(query.q, {
|
|
63
|
+
limit: query.limit ?? 20,
|
|
64
|
+
offset: query.offset ?? 0
|
|
65
65
|
});
|
|
66
|
-
const items = yield* Effect.forEach(result.items, (row) => Schema.
|
|
66
|
+
const items = yield* Effect.forEach(result.items, (row) => Schema.encodeEffect(CacheService.CachedPullRequest)(row));
|
|
67
67
|
return { items, total: result.total, hasMore: result.hasMore };
|
|
68
68
|
}).pipe(Effect.mapError((e) => new ApiError({ message: String(e) }))))
|
|
69
|
-
.handle("refreshSingle", ({
|
|
69
|
+
.handle("refreshSingle", ({ params }) => prService.refreshSinglePR(params.awsAccountId, params.prId).pipe(Effect.forkDetach, Effect.map(() => "ok")))
|
|
70
70
|
.handle("create", ({ payload }) => awsClient.createPullRequest({
|
|
71
71
|
account: { profile: payload.account.profile, region: payload.account.region },
|
|
72
72
|
repositoryName: payload.repositoryName,
|
|
@@ -75,19 +75,23 @@ export const PrsLive = HttpApiBuilder.group(CodeCommitApi, "prs", (handlers) =>
|
|
|
75
75
|
sourceReference: payload.sourceBranch,
|
|
76
76
|
destinationReference: payload.destinationBranch
|
|
77
77
|
}).pipe(Effect.mapError((e) => new ApiError({ message: e.message }))))
|
|
78
|
-
.handle("comments", ({
|
|
79
|
-
account: { profile:
|
|
80
|
-
pullRequestId:
|
|
81
|
-
repositoryName:
|
|
78
|
+
.handle("comments", ({ query }) => awsClient.getCommentsForPullRequest({
|
|
79
|
+
account: { profile: query.profile, region: query.region },
|
|
80
|
+
pullRequestId: query.pullRequestId,
|
|
81
|
+
repositoryName: query.repositoryName
|
|
82
82
|
}).pipe(Effect.map(encodeCommentLocations), Effect.mapError((e) => new ApiError({ message: e.message }))))
|
|
83
83
|
.handle("open", ({ payload }) => Effect.gen(function* () {
|
|
84
|
-
yield* copyToClipboard(payload.link).pipe(Effect.
|
|
84
|
+
yield* copyToClipboard(payload.link).pipe(Effect.catchIf(() => true, () => Effect.void));
|
|
85
85
|
// -c: console login, -d: open URL in default browser
|
|
86
|
-
const cmd =
|
|
87
|
-
|
|
86
|
+
const cmd = ChildProcess.make("assume", ["-cd", payload.link, payload.profile], {
|
|
87
|
+
stdout: "inherit",
|
|
88
|
+
stderr: "inherit",
|
|
89
|
+
env: { GRANTED_ALIAS_CONFIGURED: "true" }
|
|
90
|
+
});
|
|
91
|
+
yield* Effect.forkDetach(Effect.flatMap(ChildProcessSpawner.ChildProcessSpawner, (spawner) => spawner.exitCode(cmd)).pipe(Effect.catchIf(() => true, (e) => notificationRepo.addSystem({
|
|
88
92
|
type: "error",
|
|
89
93
|
title: "Assume Failed",
|
|
90
|
-
message: e
|
|
94
|
+
message: Predicate.isError(e) ? e.message : String(e)
|
|
91
95
|
}))));
|
|
92
96
|
return payload.link;
|
|
93
97
|
}).pipe(Effect.mapError((e) => new ApiError({ message: String(e) }))))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prs-live.js","sourceRoot":"","sources":["../../../src/server/handlers/prs-live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"prs-live.js","sourceRoot":"","sources":["../../../src/server/handlers/prs-live.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,5 +2,5 @@ import { SandboxService } from "@knpkv/codecommit-core";
|
|
|
2
2
|
import type { SandboxRow } from "@knpkv/codecommit-core/CacheService.js";
|
|
3
3
|
import { type SandboxResponse } from "../Api.js";
|
|
4
4
|
export declare const encodeSandbox: (row: SandboxRow) => typeof SandboxResponse.Type;
|
|
5
|
-
export declare const SandboxLive: import("effect/Layer").Layer<import("
|
|
5
|
+
export declare const SandboxLive: import("effect/Layer").Layer<import("effect/unstable/httpapi/HttpApiGroup").Service<"CodeCommitApi", "sandbox">, never, SandboxService.SandboxService | import("effect/unstable/http/HttpRouter").Request<"Requires", import("effect/FileSystem").FileSystem> | import("effect/unstable/http/HttpRouter").Request<"Requires", import("effect/FileSystem").FileSystem | import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner>>;
|
|
6
6
|
//# sourceMappingURL=sandbox-live.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/sandbox-live.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sandbox-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/sandbox-live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAA;AAIxE,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AAIzE,eAAO,MAAM,aAAa,GAAI,KAAK,UAAU,KAAG,OAAO,eAAe,CAAC,IAcrE,CAAA;AAEF,eAAO,MAAM,WAAW,obAmCnB,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { HttpApiBuilder } from "@effect/platform";
|
|
2
1
|
import { SandboxService } from "@knpkv/codecommit-core";
|
|
3
|
-
import {
|
|
2
|
+
import { SandboxStatus } from "@knpkv/codecommit-core/Domain.js";
|
|
3
|
+
import { Effect, Schema } from "effect";
|
|
4
|
+
import { HttpApiBuilder } from "effect/unstable/httpapi";
|
|
4
5
|
import { ApiError, CodeCommitApi } from "../Api.js";
|
|
5
6
|
// Explicit field mapping — prevents leaking server-internal fields (e.g. workspacePath)
|
|
6
7
|
// if SandboxRow gains new fields. Do not replace with object spread.
|
|
@@ -12,7 +13,7 @@ export const encodeSandbox = (row) => ({
|
|
|
12
13
|
sourceBranch: row.sourceBranch,
|
|
13
14
|
containerId: row.containerId,
|
|
14
15
|
port: row.port,
|
|
15
|
-
status: row.status,
|
|
16
|
+
status: Schema.decodeUnknownSync(SandboxStatus)(row.status),
|
|
16
17
|
statusDetail: row.statusDetail,
|
|
17
18
|
logs: row.logs,
|
|
18
19
|
error: row.error,
|
|
@@ -24,9 +25,9 @@ export const SandboxLive = HttpApiBuilder.group(CodeCommitApi, "sandbox", (handl
|
|
|
24
25
|
return handlers
|
|
25
26
|
.handle("create", ({ payload }) => sandboxService.create(payload).pipe(Effect.map(encodeSandbox), Effect.mapError((e) => new ApiError({ message: e.message }))))
|
|
26
27
|
.handle("list", () => sandboxService.list().pipe(Effect.map((rows) => rows.map(encodeSandbox)), Effect.mapError((e) => new ApiError({ message: e.message }))))
|
|
27
|
-
.handle("get", ({
|
|
28
|
-
.handle("stop", ({
|
|
29
|
-
.handle("restart", ({
|
|
30
|
-
.handle("delete", ({
|
|
28
|
+
.handle("get", ({ params }) => sandboxService.get(params.sandboxId).pipe(Effect.map(encodeSandbox), Effect.mapError((e) => new ApiError({ message: e.message }))))
|
|
29
|
+
.handle("stop", ({ params }) => sandboxService.stop(params.sandboxId).pipe(Effect.map(() => "ok"), Effect.mapError((e) => new ApiError({ message: e.message }))))
|
|
30
|
+
.handle("restart", ({ params }) => sandboxService.restart(params.sandboxId).pipe(Effect.map(() => "ok"), Effect.mapError((e) => new ApiError({ message: e.message }))))
|
|
31
|
+
.handle("delete", ({ params }) => sandboxService.cleanup(params.sandboxId).pipe(Effect.map(() => "ok"), Effect.mapError((e) => new ApiError({ message: e.message }))));
|
|
31
32
|
}));
|
|
32
33
|
//# sourceMappingURL=sandbox-live.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-live.js","sourceRoot":"","sources":["../../../src/server/handlers/sandbox-live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"sandbox-live.js","sourceRoot":"","sources":["../../../src/server/handlers/sandbox-live.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module StatsLive
|
|
3
|
+
*
|
|
4
|
+
* Mental model: HTTP handler group for the /stats API surface.
|
|
5
|
+
* Maps HttpApi endpoints to StatsService calls. The "get" handler is
|
|
6
|
+
* a synchronous query; the "sync" handler fires-and-forgets a background
|
|
7
|
+
* fiber via Effect.forkDetach for long-running historical re-sync.
|
|
8
|
+
*
|
|
9
|
+
* @category Server
|
|
10
|
+
*/
|
|
1
11
|
import { PRService } from "@knpkv/codecommit-core/PRService/index.js";
|
|
2
12
|
import { StatsService } from "@knpkv/codecommit-core/StatsService/index.js";
|
|
3
|
-
export declare const StatsLive: import("effect/Layer").Layer<import("
|
|
13
|
+
export declare const StatsLive: import("effect/Layer").Layer<import("effect/unstable/httpapi/HttpApiGroup").Service<"CodeCommitApi", "stats">, never, PRService | StatsService>;
|
|
4
14
|
//# sourceMappingURL=stats-live.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/stats-live.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stats-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/stats-live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAA;AAK3E,eAAO,MAAM,SAAS,iJAkCjB,CAAA"}
|
|
@@ -4,27 +4,27 @@
|
|
|
4
4
|
* Mental model: HTTP handler group for the /stats API surface.
|
|
5
5
|
* Maps HttpApi endpoints to StatsService calls. The "get" handler is
|
|
6
6
|
* a synchronous query; the "sync" handler fires-and-forgets a background
|
|
7
|
-
* fiber via Effect.
|
|
7
|
+
* fiber via Effect.forkDetach for long-running historical re-sync.
|
|
8
8
|
*
|
|
9
9
|
* @category Server
|
|
10
10
|
*/
|
|
11
|
-
import { HttpApiBuilder } from "@effect/platform";
|
|
12
11
|
import { PRService } from "@knpkv/codecommit-core/PRService/index.js";
|
|
13
12
|
import { StatsService } from "@knpkv/codecommit-core/StatsService/index.js";
|
|
14
13
|
import { Effect, Ref } from "effect";
|
|
14
|
+
import { HttpApiBuilder } from "effect/unstable/httpapi";
|
|
15
15
|
import { ApiError, CodeCommitApi } from "../Api.js";
|
|
16
16
|
export const StatsLive = HttpApiBuilder.group(CodeCommitApi, "stats", (handlers) => Effect.gen(function* () {
|
|
17
17
|
const statsService = yield* StatsService;
|
|
18
18
|
const prService = yield* PRService;
|
|
19
19
|
const syncing = yield* Ref.make(false);
|
|
20
20
|
return handlers
|
|
21
|
-
.handle("get", ({
|
|
22
|
-
repo:
|
|
23
|
-
author:
|
|
24
|
-
account:
|
|
21
|
+
.handle("get", ({ query }) => statsService.getWeeklyStats(query.week, {
|
|
22
|
+
repo: query.repo,
|
|
23
|
+
author: query.author,
|
|
24
|
+
account: query.account
|
|
25
25
|
}).pipe(Effect.mapError((e) => new ApiError({ message: String(e) }))))
|
|
26
26
|
.handle("sync", ({ payload }) => Ref.get(syncing).pipe(Effect.flatMap((inProgress) => inProgress
|
|
27
27
|
? Effect.succeed("sync already in progress")
|
|
28
|
-
: Ref.set(syncing, true).pipe(Effect.flatMap(() => Effect.
|
|
28
|
+
: Ref.set(syncing, true).pipe(Effect.flatMap(() => Effect.forkDetach(statsService.syncWeek(payload.week, prService.state).pipe(Effect.tap(() => Effect.logInfo(`Sync ${payload.week} complete`)), Effect.tapCause((cause) => Effect.logWarning(`Sync ${payload.week} failed`, cause)), Effect.ensuring(Ref.set(syncing, false)))).pipe(Effect.as("sync started"))))), Effect.mapError((e) => new ApiError({ message: String(e) }))));
|
|
29
29
|
}));
|
|
30
30
|
//# sourceMappingURL=stats-live.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats-live.js","sourceRoot":"","sources":["../../../src/server/handlers/stats-live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"stats-live.js","sourceRoot":"","sources":["../../../src/server/handlers/stats-live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAA;AAC3E,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEnD,MAAM,CAAC,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CACjF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,YAAY,CAAA;IACxC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS,CAAA;IAClC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAEtC,OAAO,QAAQ;SACZ,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAC3B,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE;QACtC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAC7D,CAAC;SACH,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAC9B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CACnB,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAC5B,UAAU;QACR,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC;QAC5C,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAC3B,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAClB,MAAM,CAAC,UAAU,CACf,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CACvD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,CAAC,IAAI,WAAW,CAAC,CAAC,EACjE,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,OAAO,CAAC,IAAI,SAAS,EAAE,KAAK,CAAC,CAAC,EACnF,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CACzC,CACF,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAClC,CACF,CACJ,EACD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAC7D,CAAC,CAAA;AACR,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { PRService } from "@knpkv/codecommit-core";
|
|
2
|
-
export declare const SubscriptionsLive: import("effect/Layer").Layer<import("
|
|
2
|
+
export declare const SubscriptionsLive: import("effect/Layer").Layer<import("effect/unstable/httpapi/HttpApiGroup").Service<"CodeCommitApi", "subscriptions">, never, PRService.PRService>;
|
|
3
3
|
//# sourceMappingURL=subscriptions-live.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptions-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/subscriptions-live.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"subscriptions-live.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/subscriptions-live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAKlD,eAAO,MAAM,iBAAiB,oJAoB7B,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { HttpApiBuilder } from "@effect/platform";
|
|
2
1
|
import { PRService } from "@knpkv/codecommit-core";
|
|
3
2
|
import { Effect } from "effect";
|
|
3
|
+
import { HttpApiBuilder } from "effect/unstable/httpapi";
|
|
4
4
|
import { ApiError, CodeCommitApi } from "../Api.js";
|
|
5
5
|
export const SubscriptionsLive = HttpApiBuilder.group(CodeCommitApi, "subscriptions", (handlers) => Effect.gen(function* () {
|
|
6
6
|
const prService = yield* PRService.PRService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptions-live.js","sourceRoot":"","sources":["../../../src/server/handlers/subscriptions-live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"subscriptions-live.js","sourceRoot":"","sources":["../../../src/server/handlers/subscriptions-live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC,KAAK,CACnD,aAAa,EACb,eAAe,EACf,CAAC,QAAQ,EAAE,EAAE,CACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAA;IAE5C,OAAO,QAAQ;SACZ,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CACnC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CACnE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EACtB,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,OAAO,EAAE,wBAAwB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CACvF,CAAC;SACH,MAAM,CAAC,aAAa,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CACrC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CACrE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EACtB,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,OAAO,EAAE,wBAAwB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CACvF,CAAC;SACH,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAA;AACvD,CAAC,CAAC,CACL,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Plugin } from "vite";
|
|
2
|
+
/** Return reachable production modules that resolve inside the prototype fixture tree. */
|
|
3
|
+
export declare const inspectProductionPrototypeModules: (moduleIds: Iterable<string>, clientRoot: string) => ReadonlyArray<string>;
|
|
4
|
+
/** Fail a production build if a static, computed, or glob import reaches a prototype fixture. */
|
|
5
|
+
export declare const productionPrototypeBoundary: (clientRoot: string) => Plugin;
|
|
6
|
+
//# sourceMappingURL=production-prototype-boundary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"production-prototype-boundary.d.ts","sourceRoot":"","sources":["../../src/tooling/production-prototype-boundary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAKlC,0FAA0F;AAC1F,eAAO,MAAM,iCAAiC,GAC5C,WAAW,QAAQ,CAAC,MAAM,CAAC,EAC3B,YAAY,MAAM,KACjB,aAAa,CAAC,MAAM,CAMtB,CAAA;AAED,iGAAiG;AACjG,eAAO,MAAM,2BAA2B,GAAI,YAAY,MAAM,KAAG,MAW/D,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const normalizeModuleId = (moduleId) => moduleId.split("?", 1)[0]?.replaceAll("\\", "/") ?? moduleId.replaceAll("\\", "/");
|
|
2
|
+
/** Return reachable production modules that resolve inside the prototype fixture tree. */
|
|
3
|
+
export const inspectProductionPrototypeModules = (moduleIds, clientRoot) => {
|
|
4
|
+
const normalizedRoot = normalizeModuleId(clientRoot).replace(/\/$/u, "");
|
|
5
|
+
const prototypeRoots = [`${normalizedRoot}/prototype/`, `${normalizedRoot}/prototypes/`];
|
|
6
|
+
return Array.from(moduleIds, normalizeModuleId)
|
|
7
|
+
.filter((moduleId) => prototypeRoots.some((prototypeRoot) => moduleId.startsWith(prototypeRoot)))
|
|
8
|
+
.sort();
|
|
9
|
+
};
|
|
10
|
+
/** Fail a production build if a static, computed, or glob import reaches a prototype fixture. */
|
|
11
|
+
export const productionPrototypeBoundary = (clientRoot) => ({
|
|
12
|
+
name: "codecommit-production-prototype-boundary",
|
|
13
|
+
apply: "build",
|
|
14
|
+
generateBundle() {
|
|
15
|
+
const violations = inspectProductionPrototypeModules(this.getModuleIds(), clientRoot);
|
|
16
|
+
if (violations.length > 0) {
|
|
17
|
+
this.error(`Production client graph includes prototype fixture modules:\n${violations.map((id) => `- ${id}`).join("\n")}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=production-prototype-boundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"production-prototype-boundary.js","sourceRoot":"","sources":["../../src/tooling/production-prototype-boundary.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAU,EAAE,CACrD,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AAEpF,0FAA0F;AAC1F,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAC/C,SAA2B,EAC3B,UAAkB,EACK,EAAE;IACzB,MAAM,cAAc,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACxE,MAAM,cAAc,GAAG,CAAC,GAAG,cAAc,aAAa,EAAE,GAAG,cAAc,cAAc,CAAC,CAAA;IACxF,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC;SAC5C,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC;SAChG,IAAI,EAAE,CAAA;AACX,CAAC,CAAA;AAED,iGAAiG;AACjG,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,UAAkB,EAAU,EAAE,CAAC,CAAC;IAC1E,IAAI,EAAE,0CAA0C;IAChD,KAAK,EAAE,OAAO;IACd,cAAc;QACZ,MAAM,UAAU,GAAG,iCAAiC,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,UAAU,CAAC,CAAA;QACrF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,CACR,gEAAgE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/G,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAC,CAAA"}
|