@usepipr/runtime 0.3.3 → 0.3.6
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 +2 -0
- package/dist/{commands-C1sVsbEj.mjs → commands-Btw_Ummi.mjs} +979 -364
- package/dist/commands-Btw_Ummi.mjs.map +1 -0
- package/dist/{commands-4n3t4t5P.d.mts → commands-C6wfO-y7.d.mts} +9 -7
- package/dist/commands-C6wfO-y7.d.mts.map +1 -0
- package/dist/index.d.mts +1 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/internal/review-testing.d.mts +18 -0
- package/dist/internal/review-testing.d.mts.map +1 -0
- package/dist/internal/review-testing.mjs +2 -0
- package/dist/internal/testing.d.mts +2 -16
- package/dist/internal/testing.mjs +2 -2
- package/dist/pi/runtime-tools-extension.d.mts.map +1 -1
- package/dist/pi/runtime-tools-extension.mjs +2 -1
- package/dist/pi/runtime-tools-extension.mjs.map +1 -1
- package/dist/suggested-fix-publication-policy-B5Wwuudp.mjs +206 -0
- package/dist/suggested-fix-publication-policy-B5Wwuudp.mjs.map +1 -0
- package/package.json +8 -4
- package/dist/commands-4n3t4t5P.d.mts.map +0 -1
- package/dist/commands-C1sVsbEj.mjs.map +0 -1
- package/dist/internal/testing.d.mts.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { CommentableRange, DiffManifest, ReviewFinding, ReviewResult } from "@usepipr/sdk";
|
|
2
|
+
import { CommentableRange, DiffManifest, ReviewFinding, ReviewResult, ReviewSide } from "@usepipr/sdk";
|
|
3
|
+
import "@usepipr/sdk/internal";
|
|
3
4
|
//#region src/config/init.d.ts
|
|
4
5
|
type InitOfficialMinimalProjectResult = {
|
|
5
6
|
configDir: string;
|
|
@@ -240,10 +241,6 @@ type InspectRuntimePlan = {
|
|
|
240
241
|
schemas: string[];
|
|
241
242
|
};
|
|
242
243
|
//#endregion
|
|
243
|
-
//#region ../sdk/src/types/manifest.d.ts
|
|
244
|
-
/** Side of a pull request diff that a commentable range belongs to. */
|
|
245
|
-
type ReviewSide = "RIGHT" | "LEFT";
|
|
246
|
-
//#endregion
|
|
247
244
|
//#region src/review/prior-state.d.ts
|
|
248
245
|
declare const priorReviewStateSchema: z.ZodObject<{
|
|
249
246
|
version: z.ZodLiteral<1>;
|
|
@@ -297,6 +294,7 @@ declare const threadActionSchema: z.ZodObject<{
|
|
|
297
294
|
type ThreadAction = z.infer<typeof threadActionSchema>;
|
|
298
295
|
declare const publicationMetadataSchema: z.ZodObject<{
|
|
299
296
|
runtimeVersion: z.ZodString;
|
|
297
|
+
configVersion: z.ZodOptional<z.ZodString>;
|
|
300
298
|
trustedConfigSha: z.ZodOptional<z.ZodString>;
|
|
301
299
|
trustedConfigHash: z.ZodOptional<z.ZodString>;
|
|
302
300
|
reviewedHeadSha: z.ZodString;
|
|
@@ -326,6 +324,7 @@ declare const publicationPlanSchema: z.ZodObject<{
|
|
|
326
324
|
}, z.core.$strict>>;
|
|
327
325
|
metadata: z.ZodObject<{
|
|
328
326
|
runtimeVersion: z.ZodString;
|
|
327
|
+
configVersion: z.ZodOptional<z.ZodString>;
|
|
329
328
|
trustedConfigSha: z.ZodOptional<z.ZodString>;
|
|
330
329
|
trustedConfigHash: z.ZodOptional<z.ZodString>;
|
|
331
330
|
reviewedHeadSha: z.ZodString;
|
|
@@ -808,8 +807,11 @@ type LocalReviewCommandOptions = RuntimeCommandOptions & {
|
|
|
808
807
|
type DryRunCommandResult = {
|
|
809
808
|
configSource: string;
|
|
810
809
|
event: ChangeRequestEventContext;
|
|
810
|
+
warnings: string[];
|
|
811
|
+
};
|
|
812
|
+
type InspectCommandResult = InspectRuntimePlan & {
|
|
813
|
+
warnings: string[];
|
|
811
814
|
};
|
|
812
|
-
type InspectCommandResult = InspectRuntimePlan;
|
|
813
815
|
type LocalReviewCommandResult = ReviewRuntimeResult & {
|
|
814
816
|
kind: "review" | "skipped";
|
|
815
817
|
commandResponse?: never;
|
|
@@ -870,4 +872,4 @@ declare function runActionCommand(options: ActionCommandOptions): Promise<Action
|
|
|
870
872
|
declare function runActionCommandWithDependencies(options: ActionCommandDependencyOptions): Promise<ActionCommandResult>;
|
|
871
873
|
//#endregion
|
|
872
874
|
export { PlatformInfo as A, GitHubPublicationClient as C, ChangeRequestRef as D, ChangeRequestEventContext as E, supportedOfficialInitAdapters as F, RepositoryRef as M, RuntimeSettings as N, DiffManifest as O, OfficialInitAdapter as P, ActionLogSink as S, PublicationResult as T, piBuiltinToolNames as _, runInspectCommand as a, piThinkingLevels as b, ActionCommandOptions as c, DryRunCommandResult as d, InitCommandOptions as f, RuntimeCommandOptions as g, LocalReviewCommandResult as h, runInitCommand as i, ProviderConfig as j, PiprConfig as k, ActionCommandResult as l, LocalReviewCommandOptions as m, runActionCommandWithDependencies as n, runLocalReviewCommand as o, InspectCommandResult as p, runDryRunCommand as r, runValidateCommand as s, runActionCommand as t, DryRunCommandOptions as u, piReadOnlyToolNames as v, PublicationError as w, ActionLogRecord as x, piRequiredCliFlags as y };
|
|
873
|
-
//# sourceMappingURL=commands-
|
|
875
|
+
//# sourceMappingURL=commands-C6wfO-y7.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands-C6wfO-y7.d.mts","names":[],"sources":["../src/config/init.ts","../src/types.ts","../src/config/project.ts","../src/review/prior-state.ts","../src/review/comment.ts","../src/review/publication-result.ts","../src/hosts/types.ts","../src/hosts/github/command.ts","../src/hosts/github/publication-client.ts","../src/shared/logging.ts","../src/pi/contract.ts","../src/review/task/task-output.ts","../src/review/task/task-runtime.ts","../src/action/types.ts","../src/action/commands.ts"],"mappings":";;;;KAsBY;EACV;EACA;EACA;;cAGW;KAED,8BAA8B;;;cCCpC,sBAAoB,EAAA;;;;;;;;;;;;;;cAyBpB,kBAAgB,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAehB,uBAAqB,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAMrB,oBAAkB,EAAA;;;;cAKlB,qBAAmB,EAAA;;;;cAanB,wBAAsB,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAWtB,iCAA+B,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAqE/B,uBAAqB,EAAA;;;;;;;;cAMrB,8BAA4B,EAAA;;;;;;;KAEtB,iBAAiB,EAAE,aAAa;KAGhC,aAAa,EAAE,aAAa;KAC5B,kBAAkB,EAAE,aAAa;KACjC,eAAe,EAAE,aAAa;KAC9B,gBAAgB,EAAE,aAAa;KAC/B,mBAAmB,EAAE,aAAa;KAClC,4BAA4B,EAAE,aAAa;KAE3C,kBAAkB,EAAE,aAAa;KACjC,yBAAyB,EAAE,aAAa;;;KC1KxC;EACV;EACA;EACA;EACA;EACA,QAAQ;IAAQ;IAAc;;EAC9B,UAAU;IAAQ;IAAiB;IAAc;;EACjD;EACA;;;;cCAW,wBAAsB,EAAA;;;;;;;;;;;;;;;;;;;;KAQvB,mBAAmB,EAAE,aAAa;;;cCPxC,6BAA2B,EAAA;;;;;;;;;;;;KAsCrB,wBAAwB,EAAE,aAAa;KACvC,qBAAqB;cAM3B,oBAAkB,EAAA;;;;;;;;;;;;KAYZ,eAAe,EAAE,aAAa;cAEpC,2BAAyB,EAAA;;;;;;;;;;;;;KAcnB,sBAAsB,EAAE,aAAa;cAE3C,uBAAqB,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAUf,kBAAkB,EAAE,aAAa;;;KCpHjC;EACV;IACE;IACA;;EAEF;IACE;IACA;IACA;;EAEF,UAAU;IACR;IACA;;;;cAKS,yBAAyB;WAGzB,QAAQ,KAAK;cADtB,iBACS,QAAQ,KAAK;;;;KCZd;EACV;EACA,KAAK,OAAO;EACZ;;KAGU;EACV;EACA;EACA;EACA,YAAY;EACZ;EACA;EACA;EACA;EACA;EACA;;KAGU;EACV;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA;EACA,UAAU;IACR;IACA;IACA;;;KAIQ;EACV;EACA;EACA;EACA,YAAY;EACZ;EACA;EACA;EACA;EACA;EACA;;KAGU;EACV,YAAY;EACZ,QAAQ;EACR;EACA;EACA;EACA;;KAGU,uBAAuB;KAEvB;KAEA;EACV;EACA;;KAGU;EACV,WAAW,SAAS,wBAAwB,QAAQ;EACpD,kBAAkB;IAChB,YAAY;IACZ;IACA;IACA;IACA;IACA;MACE,QAAQ;EACZ,sBAAsB,SAAS,wBAAwB,QAAQ;EAC/D,2BAA2B,SAAS,wBAAwB,QAAQ;;KAG1D;EACV,wBAAwB;IACtB,YAAY;IACZ;MACE,QAAQ;;KAGF;EACV,mBAAmB;IAAW;IAAiB,QAAQ;;EACvD,8BAA8B;IAAW;IAAiB,MAAM,OAAO;;;KAG7D;EACV,QAAQ;IACN,MAAM;IACN,QAAQ;MACN,QAAQ;EACZ,wBAAwB;IACtB,QAAQ;IACR;IACA;IACA;MACE,QAAQ;EACZ,sBAAsB;IACpB,QAAQ;IACR,SAAS;IACT;MACE;IAAU;;;KAGJ;EACV,sBAAsB;IACpB,QAAQ;MACN,QAAQ;EACZ,sBAAsB;IACpB,QAAQ;MACN;EACJ,0BAA0B;IACxB,QAAQ;MACN,QAAQ;;KAGF;EACV,gBAAgB;IACd,QAAQ;IACR;IACA;MACE,QAAQ;EACZ,gBAAgB;IACd,QAAQ;IACR,UAAU;IACV,YAAY;IACZ;MACE;;KAGM;EACV;EACA,QAAQ;EACR,WAAW;EACX,aAAa;EACb,cAAc;EACd,WAAW;EACX,SAAS;;;;KC5GC;EACV,YAAY;EACZ,QAAQ;;KAGE;EACV,eAAe;IACb,YAAY;IACZ;MACE,QAAQ;EACZ,wBAAwB;IACtB,YAAY;IACZ;MACE,QAAQ;;;;cC/CR,0BAAwB,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;;;;cAMxB,2BAAyB,EAAA,QAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA2BzB,0BAAwB,EAAA;;;;;cAwExB,sBAAoB,EAAA;;;;KAKd,qBAAqB,EAAE,aAAa;KACpC,sBAAsB,EAAE,aAAa;KACrC,qBAAqB,EAAE,aAAa;KACpC,iBAAiB,EAAE,aAAa;KAEhC;EACV,6BAA6B;EAC7B,sBAAsB;IAAW;IAAc;MAA8B;EAC7E,kBAAkB;IAAW;IAAc;MAAwB,QAAQ;EAC3E,mBAAmB;IACjB;IACA;IACA;MACE;IAAU;;EACd,mBAAmB;IACjB;IACA;IACA;MACE;IAAU;;EACd,mBAAmB;IACjB;IACA;MACE,QAAQ;EACZ,kBAAkB;IAChB;IACA;MACE,QAAQ;EACZ,oBAAoB;IAClB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;MACE;IAAU;;EACd,yBAAyB;IACvB;IACA;IACA;IACA;MACE;IAAU;;EACd,oBAAoB;IAAW;MAAqB;EACpD,eAAe;IACb;IACA;IACA;IACA;MACE,QAAQ;EACZ,eAAe;IACb;IACA;IACA;IACA;IACA;MACE;;;;KCnLM;EACV,IAAI,QAAQ;EACZ,MAAM,GAAG,cAAc,WAAW,QAAQ,KAAK,QAAQ;;KAG7C;EACV,OAAO;EACP;EACA,QAAQ;EACR;;KAQU,wBAAwB;KAsBxB;;;cCvCC;cACA;cACA;cAEA;;;KCOD;KAEA;EACV;EACA,YAAY;EACZ;;;;KC0DG;EACH,UAAU;EACV,cAAc;EACd,YAAY;EACZ;;KAGU,uBACP;EACC;EACA,QAAQ;EACR,WAAW;EACX,iBAAiB;EACjB;EACA,qBAAqB;EACrB;MAED;EACC;EACA;EACA,QAAQ;EACR,WAAW;EACX,iBAAiB;EACjB;EACA,qBAAqB;EACrB;MAED;EACC;EACA;IACE;IACA;IACA,WAAW;IACX;;EAEF;EACA;EACA;EACA;EACA;;;;KC1GM;EACV;EACA;EACA,MAAM,OAAO;EACb;;KAGU,qBAAqB;EAC/B;EACA;EACA;EACA;;KAGU,uBAAuB;EACjC;;KAGU,uBAAuB;EACjC;EACA;EACA,UAAU;;KAGA,iCAAiC;EAC3C;EACA,cAAc;EACd,eAAe;EACf,0BAA0B;;KAGhB;EACV,KAAK;EACL,KAAK;EACL,MAAM;;KAGI,4BAA4B;EACtC;EACA;EACA;EACA,UAAU;EACV,UAAU;;KAGA;EACV;EACA,OAAO;EACP;;KAGU,uBAAuB;EACjC;;KAGU,2BAA2B;EACrC;EACA;;KAGU,+BAA+B,QAAQ;EAAuB;;KAE9D;EAEN;EACA;;EAGA;EACA,OAAO;EACP;;EAGA;EACA,OAAO;EACP;EACA;EACA;;EAGA;EACA,OAAO;EACP;EACA;EACA,QAAQ;EACR,aAAa;;EAGb;EACA,OAAO;EACP;EACA;EACA;IACE;;EAEF,aAAa;;EAGb;EACA,OAAO;EACP;EACA;;KAuBM,wBAAwB;;;;iBCxFd,eACpB,SAAS,qBACR,QAAQ;;iBAYW,mBACpB,SAAS,wBACR,QAAQ;;iBAUW,kBACpB,SAAS,wBACR,QAAQ;;iBASW,iBACpB,SAAS,uBACR,QAAQ;;iBAoBW,sBACpB,SAAS,4BACR,QAAQ;;iBA2EW,iBACpB,SAAS,uBACR,QAAQ;iBAIW,iCACpB,SAAS,iCACR,QAAQ"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { A as PlatformInfo, D as ChangeRequestRef, E as ChangeRequestEventContext, F as supportedOfficialInitAdapters, M as RepositoryRef, N as RuntimeSettings, O as DiffManifest, P as OfficialInitAdapter, S as ActionLogSink, T as PublicationResult, a as runInspectCommand, c as ActionCommandOptions, d as DryRunCommandResult, f as InitCommandOptions, g as RuntimeCommandOptions, h as LocalReviewCommandResult, i as runInitCommand, j as ProviderConfig, k as PiprConfig, l as ActionCommandResult, m as LocalReviewCommandOptions, o as runLocalReviewCommand, p as InspectCommandResult, r as runDryRunCommand, s as runValidateCommand, t as runActionCommand, u as DryRunCommandOptions, w as PublicationError, x as ActionLogRecord } from "./commands-
|
|
2
|
-
|
|
1
|
+
import { A as PlatformInfo, D as ChangeRequestRef, E as ChangeRequestEventContext, F as supportedOfficialInitAdapters, M as RepositoryRef, N as RuntimeSettings, O as DiffManifest, P as OfficialInitAdapter, S as ActionLogSink, T as PublicationResult, a as runInspectCommand, c as ActionCommandOptions, d as DryRunCommandResult, f as InitCommandOptions, g as RuntimeCommandOptions, h as LocalReviewCommandResult, i as runInitCommand, j as ProviderConfig, k as PiprConfig, l as ActionCommandResult, m as LocalReviewCommandOptions, o as runLocalReviewCommand, p as InspectCommandResult, r as runDryRunCommand, s as runValidateCommand, t as runActionCommand, u as DryRunCommandOptions, w as PublicationError, x as ActionLogRecord } from "./commands-C6wfO-y7.mjs";
|
|
3
2
|
//#region src/config/recipes/types.d.ts
|
|
4
3
|
type OfficialInitRecipeFile = {
|
|
5
4
|
relativePath: string;
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/config/recipes/types.ts","../src/config/recipes.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/config/recipes/types.ts","../src/config/recipes.ts"],"mappings":";;KAAY;EACV;EACA;;KAGU;EACV;EACA;;KAGU;EACV;EACA;EACA;EACA;EACA;EACA,iBAAiB;EACjB,8BAA8B;EAC9B;;;;cCGW;KAkBD,+BAA+B;iBAqB3B,2BAA2B"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as runInspectCommand, c as PublicationError, d as
|
|
1
|
+
import { a as runInspectCommand, c as PublicationError, d as supportedOfficialInitRecipes, i as runInitCommand, l as supportedOfficialInitAdapters, o as runLocalReviewCommand, r as runDryRunCommand, s as runValidateCommand, t as runActionCommand, u as listOfficialInitRecipes } from "./commands-Btw_Ummi.mjs";
|
|
2
2
|
export { PublicationError, listOfficialInitRecipes, runActionCommand, runDryRunCommand, runInitCommand, runInspectCommand, runLocalReviewCommand, runValidateCommand, supportedOfficialInitAdapters, supportedOfficialInitRecipes };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/review/inline-finding-limits.d.ts
|
|
2
|
+
declare const maxInlineFindingBodyCharacters = 700;
|
|
3
|
+
declare const maxInlineFindingBodyLines = 4;
|
|
4
|
+
//#endregion
|
|
5
|
+
//#region src/review/suggested-fix-publication-policy.d.ts
|
|
6
|
+
type SuggestedFixPublicationSelection = {
|
|
7
|
+
side: "RIGHT" | "LEFT";
|
|
8
|
+
kind: "added" | "deleted" | "context" | "mixed";
|
|
9
|
+
rangeStartLine: number;
|
|
10
|
+
startLine: number;
|
|
11
|
+
endLine: number;
|
|
12
|
+
preview?: string;
|
|
13
|
+
suggestedFix: string;
|
|
14
|
+
};
|
|
15
|
+
declare function isPublishableSuggestedFixSelection(selection: SuggestedFixPublicationSelection): boolean;
|
|
16
|
+
//#endregion
|
|
17
|
+
export { isPublishableSuggestedFixSelection, maxInlineFindingBodyCharacters, maxInlineFindingBodyLines };
|
|
18
|
+
//# sourceMappingURL=review-testing.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-testing.d.mts","names":[],"sources":["../../src/review/inline-finding-limits.ts","../../src/review/suggested-fix-publication-policy.ts"],"mappings":";cAAa;cACA;;;KCDR;EACH;EACA;EACA;EACA;EACA;EACA;EACA;;iBAWc,mCACd,WAAW"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { n as maxInlineFindingBodyCharacters, r as maxInlineFindingBodyLines, t as isPublishableSuggestedFixSelection } from "../suggested-fix-publication-policy-B5Wwuudp.mjs";
|
|
2
|
+
export { isPublishableSuggestedFixSelection, maxInlineFindingBodyCharacters, maxInlineFindingBodyLines };
|
|
@@ -1,16 +1,2 @@
|
|
|
1
|
-
import { C as GitHubPublicationClient, _ as piBuiltinToolNames, b as piThinkingLevels, l as ActionCommandResult, n as runActionCommandWithDependencies, v as piReadOnlyToolNames, y as piRequiredCliFlags } from "../commands-
|
|
2
|
-
|
|
3
|
-
//#region src/review/inline-publication-policy.d.ts
|
|
4
|
-
type SuggestedFixPublicationSelection = {
|
|
5
|
-
side: "RIGHT" | "LEFT";
|
|
6
|
-
kind: "added" | "deleted" | "context" | "mixed";
|
|
7
|
-
rangeStartLine: number;
|
|
8
|
-
startLine: number;
|
|
9
|
-
endLine: number;
|
|
10
|
-
preview?: string;
|
|
11
|
-
suggestedFix: string;
|
|
12
|
-
};
|
|
13
|
-
declare function isPublishableSuggestedFixSelection(selection: SuggestedFixPublicationSelection): boolean;
|
|
14
|
-
//#endregion
|
|
15
|
-
export { type ActionCommandResult, type GitHubPublicationClient, type SuggestedFixPublicationSelection, isPublishableSuggestedFixSelection, piBuiltinToolNames, piReadOnlyToolNames, piRequiredCliFlags, piThinkingLevels, runActionCommandWithDependencies };
|
|
16
|
-
//# sourceMappingURL=testing.d.mts.map
|
|
1
|
+
import { C as GitHubPublicationClient, _ as piBuiltinToolNames, b as piThinkingLevels, l as ActionCommandResult, n as runActionCommandWithDependencies, v as piReadOnlyToolNames, y as piRequiredCliFlags } from "../commands-C6wfO-y7.mjs";
|
|
2
|
+
export { type ActionCommandResult, type GitHubPublicationClient, piBuiltinToolNames, piReadOnlyToolNames, piRequiredCliFlags, piThinkingLevels, runActionCommandWithDependencies };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { f as piBuiltinToolNames, h as piThinkingLevels, m as piRequiredCliFlags, n as runActionCommandWithDependencies, p as piReadOnlyToolNames } from "../commands-Btw_Ummi.mjs";
|
|
2
|
+
export { piBuiltinToolNames, piReadOnlyToolNames, piRequiredCliFlags, piThinkingLevels, runActionCommandWithDependencies };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-tools-extension.d.mts","names":[],"sources":["../../src/pi/runtime-tools-extension.ts"],"mappings":";KAmBK
|
|
1
|
+
{"version":3,"file":"runtime-tools-extension.d.mts","names":[],"sources":["../../src/pi/runtime-tools-extension.ts"],"mappings":";KAmBK;EACH,aAAa,MAAM;;KAGhB;EACH;EACA;EACA;EACA,YAAY;EACZ,UACE,oBACA,iBACA,kBACA,oBACA;IAAQ;QACL,QAAQ;;KAGV;EACH,SAAS;IAAQ;IAAc;;EAC/B;;;iBA2BsB,iBAAiB,IAAI"}
|
|
@@ -77,7 +77,8 @@ function registerRuntimeReadTools(pi, dataPath) {
|
|
|
77
77
|
},
|
|
78
78
|
async execute(_toolCallId, params, _signal, _onUpdate, ctx) {
|
|
79
79
|
const cwd = typeof ctx?.cwd === "string" ? ctx.cwd : "";
|
|
80
|
-
|
|
80
|
+
const data = await Bun.file(dataPath).json();
|
|
81
|
+
return textResult(await readAtRef(dataRoot, data, readAtRefParams(params), cwd));
|
|
81
82
|
}
|
|
82
83
|
});
|
|
83
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-tools-extension.mjs","names":[],"sources":["../../src/pi/runtime-tools-extension.ts"],"sourcesContent":["// Internal Pi sandbox contract loaded by the Pipr runtime. Not user API.\nimport { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { compact } from \"lodash-es\";\nimport { z } from \"zod\";\nimport {\n assertNoSymlinkPath,\n type BaseRangeSnapshot,\n boundedLineSlice,\n type ReadAtRefParams,\n type RuntimeToolData,\n readAtRefParams,\n readDiffFromRuntimeData,\n readDiffParams,\n resolveAllowedPath,\n resolveReadAtRefRequest,\n unavailableReadAtRefResult,\n} from \"./runtime-tools-core.js\";\n\ntype PiExtensionHost = {\n registerTool(tool: PiTool): void;\n};\n\ntype PiTool = {\n name: string;\n label: string;\n description: string;\n parameters: Record<string, unknown>;\n execute: (\n toolCallId: string,\n params: unknown,\n signal?: unknown,\n onUpdate?: unknown,\n ctx?: { cwd?: unknown },\n ) => Promise<ToolResult>;\n};\n\ntype ToolResult = {\n content: Array<{ type: \"text\"; text: string }>;\n details: unknown;\n};\n\nconst customToolDataSchema = z.strictObject({\n tools: z.array(\n z.strictObject({\n name: z.string().min(1),\n description: z.string().optional(),\n }),\n ),\n});\n\nconst customToolBridgePayloadSchema = z.record(z.string(), z.unknown());\nconst readableBaseSnapshotSchema = z.looseObject({\n path: z.string(),\n ref: z.enum([\"base\", \"head\"]),\n sourcePath: z.string(),\n rangeId: z.string(),\n startLine: z.number(),\n endLine: z.number(),\n available: z.literal(true),\n relativePath: z.string(),\n bytes: z.number().optional(),\n truncated: z.boolean().optional(),\n});\n\n/** Registers pipr runtime read tools and config-defined custom tools with Pi. */\nexport default function piprRuntimeTools(pi: PiExtensionHost): void {\n const registrations = toolRegistrations();\n if (registrations.length === 0) {\n throw new Error(\"PIPR_RUNTIME_TOOLS_DATA or PIPR_CUSTOM_TOOLS_DATA is required\");\n }\n for (const registration of registrations) {\n registration.register(pi, registration.dataPath);\n }\n}\n\nfunction toolRegistrations(): Array<{\n dataPath: string;\n register(pi: PiExtensionHost, dataPath: string): void;\n}> {\n return compact([\n registration(runtimeDataPath(), registerRuntimeReadTools),\n registration(customToolsDataPath(), registerCustomTools),\n ]);\n}\n\nfunction registration(\n dataPath: string | undefined,\n register: (pi: PiExtensionHost, dataPath: string) => void,\n) {\n return dataPath ? { dataPath, register } : undefined;\n}\n\nfunction registerRuntimeReadTools(pi: PiExtensionHost, dataPath: string): void {\n const dataRoot = path.dirname(dataPath);\n\n pi.registerTool({\n name: \"pipr_read_diff\",\n label: \"Read pipr Diff Manifest\",\n description: \"Read bounded full Diff Manifest data by path and/or range id.\",\n parameters: {\n type: \"object\",\n additionalProperties: false,\n properties: {\n path: { type: \"string\" },\n rangeId: { type: \"string\" },\n },\n },\n async execute(_toolCallId, params) {\n const data = (await Bun.file(dataPath).json()) as RuntimeToolData;\n const result = readDiffFromRuntimeData(data, readDiffParams(params));\n return textResult(result);\n },\n });\n\n pi.registerTool({\n name: \"pipr_read_at_ref\",\n label: \"Read pipr file at ref\",\n description: \"Read bounded file content for a Diff Manifest path at base or head.\",\n parameters: {\n type: \"object\",\n additionalProperties: false,\n required: [\"path\", \"ref\", \"rangeId\"],\n properties: {\n path: { type: \"string\" },\n ref: { type: \"string\", enum: [\"base\", \"head\"] },\n rangeId: { type: \"string\" },\n },\n },\n async execute(_toolCallId, params, _signal, _onUpdate, ctx) {\n const cwd = typeof ctx?.cwd === \"string\" ? ctx.cwd : \"\";\n const data = (await Bun.file(dataPath).json()) as RuntimeToolData;\n const result = await readAtRef(dataRoot, data, readAtRefParams(params), cwd);\n return textResult(result);\n },\n });\n}\n\nfunction registerCustomTools(pi: PiExtensionHost, dataPath: string): void {\n const bridgeUrl = customToolBridgeUrl();\n const bridgeToken = customToolBridgeToken();\n const data = customToolDataSchema.parse(JSON.parse(readFileSync(dataPath, \"utf8\")));\n for (const tool of data.tools) {\n pi.registerTool({\n name: tool.name,\n label: tool.name,\n description: tool.description ?? \"pipr custom config tool.\",\n parameters: {\n type: \"object\",\n additionalProperties: true,\n },\n async execute(_toolCallId, params) {\n const result = await callCustomTool(bridgeUrl, bridgeToken, tool.name, params);\n return textResult(result);\n },\n });\n }\n}\n\nfunction runtimeDataPath(): string | undefined {\n const dataPath = process.env.PIPR_RUNTIME_TOOLS_DATA;\n if (!dataPath) {\n return undefined;\n }\n if (!path.isAbsolute(dataPath)) {\n throw new Error(\"PIPR_RUNTIME_TOOLS_DATA must be an absolute path\");\n }\n return dataPath;\n}\n\nfunction customToolsDataPath(): string | undefined {\n const dataPath = process.env.PIPR_CUSTOM_TOOLS_DATA;\n if (!dataPath) {\n return undefined;\n }\n if (!path.isAbsolute(dataPath)) {\n throw new Error(\"PIPR_CUSTOM_TOOLS_DATA must be an absolute path\");\n }\n return dataPath;\n}\n\nfunction customToolBridgeUrl(): string {\n const value = process.env.PIPR_CUSTOM_TOOLS_BRIDGE_URL;\n if (!value) {\n throw new Error(\"PIPR_CUSTOM_TOOLS_BRIDGE_URL is required for pipr custom tools\");\n }\n return value;\n}\n\nfunction customToolBridgeToken(): string {\n const value = process.env.PIPR_CUSTOM_TOOLS_BRIDGE_TOKEN;\n if (!value) {\n throw new Error(\"PIPR_CUSTOM_TOOLS_BRIDGE_TOKEN is required for pipr custom tools\");\n }\n return value;\n}\n\nasync function callCustomTool(\n bridgeUrl: string,\n bridgeToken: string,\n tool: string,\n params: unknown,\n): Promise<unknown> {\n const response = await fetch(`${bridgeUrl}/call`, {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${bridgeToken}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ tool, params }),\n });\n const payload = await parseCustomToolBridgePayload(response, tool);\n assertCustomToolBridgeOk(response, payload, tool);\n return Reflect.get(payload, \"result\");\n}\n\nasync function parseCustomToolBridgePayload(\n response: Response,\n tool: string,\n): Promise<Record<string, unknown>> {\n try {\n return customToolBridgePayloadSchema.parse(await response.json());\n } catch {\n throw new Error(`Custom tool '${tool}' returned invalid bridge response`);\n }\n}\n\nfunction assertCustomToolBridgeOk(\n response: Response,\n payload: Record<string, unknown>,\n tool: string,\n): void {\n if (!response.ok || Reflect.get(payload, \"ok\") !== true) {\n const error = Reflect.get(payload, \"error\");\n throw new Error(typeof error === \"string\" ? error : `Custom tool '${tool}' failed`);\n }\n}\n\nfunction textResult(value: unknown): ToolResult {\n return {\n content: [{ type: \"text\", text: JSON.stringify(value, null, 2) }],\n details: value,\n };\n}\n\nasync function readAtRef(\n dataRoot: string,\n data: RuntimeToolData,\n params: ReadAtRefParams,\n cwd: string,\n): Promise<unknown> {\n const request = resolveReadAtRefRequest(data.manifest, params);\n if (!request.window) {\n return unavailableReadAtRefResult(request);\n }\n if (params.ref === \"base\") {\n return await readBaseSnapshot(dataRoot, data.baseRanges[params.rangeId], params, request);\n }\n return await readHeadWorkspaceFile(cwd, data.toolResponseMaxBytes, params, request);\n}\n\nasync function readBaseSnapshot(\n dataRoot: string,\n snapshot: BaseRangeSnapshot | undefined,\n params: ReadAtRefParams,\n request: ReturnType<typeof resolveReadAtRefRequest>,\n): Promise<unknown> {\n const readable = readableBaseSnapshotSchema.safeParse(snapshot);\n if (!readable.success) {\n return snapshot ?? unavailableReadAtRefResult(request);\n }\n const snapshotData = readable.data;\n return {\n path: params.path,\n ref: params.ref,\n sourcePath: request.sourcePath,\n rangeId: params.rangeId,\n startLine: snapshotData.startLine,\n endLine: snapshotData.endLine,\n available: true,\n content: await Bun.file(path.join(dataRoot, snapshotData.relativePath)).text(),\n bytes: snapshotData.bytes,\n truncated: snapshotData.truncated,\n };\n}\n\nasync function readHeadWorkspaceFile(\n cwd: string,\n maxBytes: number,\n params: ReadAtRefParams,\n request: ReturnType<typeof resolveReadAtRefRequest>,\n): Promise<unknown> {\n if (!request.window) {\n return unavailableReadAtRefResult(request);\n }\n const target = resolveAllowedPath(cwd, request.sourcePath);\n await assertNoSymlinkPath(cwd, request.sourcePath);\n return {\n path: params.path,\n ref: params.ref,\n sourcePath: request.sourcePath,\n rangeId: params.rangeId,\n startLine: request.window.startLine,\n endLine: request.window.endLine,\n ...boundedLineSlice(await Bun.file(target).text(), request.window, maxBytes),\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime-tools-extension.mjs","names":[],"sources":["../../src/pi/runtime-tools-extension.ts"],"sourcesContent":["// Internal Pi sandbox contract loaded by the Pipr runtime. Not user API.\nimport { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { compact } from \"lodash-es\";\nimport { z } from \"zod\";\nimport {\n assertNoSymlinkPath,\n type BaseRangeSnapshot,\n boundedLineSlice,\n type ReadAtRefParams,\n type RuntimeToolData,\n readAtRefParams,\n readDiffFromRuntimeData,\n readDiffParams,\n resolveAllowedPath,\n resolveReadAtRefRequest,\n unavailableReadAtRefResult,\n} from \"./runtime-tools-core.js\";\n\ntype PiExtensionHost = {\n registerTool(tool: PiTool): void;\n};\n\ntype PiTool = {\n name: string;\n label: string;\n description: string;\n parameters: Record<string, unknown>;\n execute: (\n toolCallId: string,\n params: unknown,\n signal?: unknown,\n onUpdate?: unknown,\n ctx?: { cwd?: unknown },\n ) => Promise<ToolResult>;\n};\n\ntype ToolResult = {\n content: Array<{ type: \"text\"; text: string }>;\n details: unknown;\n};\n\nconst customToolDataSchema = z.strictObject({\n tools: z.array(\n z.strictObject({\n name: z.string().min(1),\n description: z.string().optional(),\n }),\n ),\n});\n\nconst customToolBridgePayloadSchema = z.record(z.string(), z.unknown());\nconst readableBaseSnapshotSchema = z.looseObject({\n path: z.string(),\n ref: z.enum([\"base\", \"head\"]),\n sourcePath: z.string(),\n rangeId: z.string(),\n startLine: z.number(),\n endLine: z.number(),\n available: z.literal(true),\n relativePath: z.string(),\n bytes: z.number().optional(),\n truncated: z.boolean().optional(),\n});\n\n/** Registers pipr runtime read tools and config-defined custom tools with Pi. */\nexport default function piprRuntimeTools(pi: PiExtensionHost): void {\n const registrations = toolRegistrations();\n if (registrations.length === 0) {\n throw new Error(\"PIPR_RUNTIME_TOOLS_DATA or PIPR_CUSTOM_TOOLS_DATA is required\");\n }\n for (const registration of registrations) {\n registration.register(pi, registration.dataPath);\n }\n}\n\nfunction toolRegistrations(): Array<{\n dataPath: string;\n register(pi: PiExtensionHost, dataPath: string): void;\n}> {\n return compact([\n registration(runtimeDataPath(), registerRuntimeReadTools),\n registration(customToolsDataPath(), registerCustomTools),\n ]);\n}\n\nfunction registration(\n dataPath: string | undefined,\n register: (pi: PiExtensionHost, dataPath: string) => void,\n) {\n return dataPath ? { dataPath, register } : undefined;\n}\n\nfunction registerRuntimeReadTools(pi: PiExtensionHost, dataPath: string): void {\n const dataRoot = path.dirname(dataPath);\n\n pi.registerTool({\n name: \"pipr_read_diff\",\n label: \"Read pipr Diff Manifest\",\n description: \"Read bounded full Diff Manifest data by path and/or range id.\",\n parameters: {\n type: \"object\",\n additionalProperties: false,\n properties: {\n path: { type: \"string\" },\n rangeId: { type: \"string\" },\n },\n },\n async execute(_toolCallId, params) {\n const data = (await Bun.file(dataPath).json()) as RuntimeToolData;\n const result = readDiffFromRuntimeData(data, readDiffParams(params));\n return textResult(result);\n },\n });\n\n pi.registerTool({\n name: \"pipr_read_at_ref\",\n label: \"Read pipr file at ref\",\n description: \"Read bounded file content for a Diff Manifest path at base or head.\",\n parameters: {\n type: \"object\",\n additionalProperties: false,\n required: [\"path\", \"ref\", \"rangeId\"],\n properties: {\n path: { type: \"string\" },\n ref: { type: \"string\", enum: [\"base\", \"head\"] },\n rangeId: { type: \"string\" },\n },\n },\n async execute(_toolCallId, params, _signal, _onUpdate, ctx) {\n const cwd = typeof ctx?.cwd === \"string\" ? ctx.cwd : \"\";\n const data = (await Bun.file(dataPath).json()) as RuntimeToolData;\n const result = await readAtRef(dataRoot, data, readAtRefParams(params), cwd);\n return textResult(result);\n },\n });\n}\n\nfunction registerCustomTools(pi: PiExtensionHost, dataPath: string): void {\n const bridgeUrl = customToolBridgeUrl();\n const bridgeToken = customToolBridgeToken();\n const data = customToolDataSchema.parse(JSON.parse(readFileSync(dataPath, \"utf8\")));\n for (const tool of data.tools) {\n pi.registerTool({\n name: tool.name,\n label: tool.name,\n description: tool.description ?? \"pipr custom config tool.\",\n parameters: {\n type: \"object\",\n additionalProperties: true,\n },\n async execute(_toolCallId, params) {\n const result = await callCustomTool(bridgeUrl, bridgeToken, tool.name, params);\n return textResult(result);\n },\n });\n }\n}\n\nfunction runtimeDataPath(): string | undefined {\n const dataPath = process.env.PIPR_RUNTIME_TOOLS_DATA;\n if (!dataPath) {\n return undefined;\n }\n if (!path.isAbsolute(dataPath)) {\n throw new Error(\"PIPR_RUNTIME_TOOLS_DATA must be an absolute path\");\n }\n return dataPath;\n}\n\nfunction customToolsDataPath(): string | undefined {\n const dataPath = process.env.PIPR_CUSTOM_TOOLS_DATA;\n if (!dataPath) {\n return undefined;\n }\n if (!path.isAbsolute(dataPath)) {\n throw new Error(\"PIPR_CUSTOM_TOOLS_DATA must be an absolute path\");\n }\n return dataPath;\n}\n\nfunction customToolBridgeUrl(): string {\n const value = process.env.PIPR_CUSTOM_TOOLS_BRIDGE_URL;\n if (!value) {\n throw new Error(\"PIPR_CUSTOM_TOOLS_BRIDGE_URL is required for pipr custom tools\");\n }\n return value;\n}\n\nfunction customToolBridgeToken(): string {\n const value = process.env.PIPR_CUSTOM_TOOLS_BRIDGE_TOKEN;\n if (!value) {\n throw new Error(\"PIPR_CUSTOM_TOOLS_BRIDGE_TOKEN is required for pipr custom tools\");\n }\n return value;\n}\n\nasync function callCustomTool(\n bridgeUrl: string,\n bridgeToken: string,\n tool: string,\n params: unknown,\n): Promise<unknown> {\n const response = await fetch(`${bridgeUrl}/call`, {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${bridgeToken}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ tool, params }),\n });\n const payload = await parseCustomToolBridgePayload(response, tool);\n assertCustomToolBridgeOk(response, payload, tool);\n return Reflect.get(payload, \"result\");\n}\n\nasync function parseCustomToolBridgePayload(\n response: Response,\n tool: string,\n): Promise<Record<string, unknown>> {\n try {\n return customToolBridgePayloadSchema.parse(await response.json());\n } catch {\n throw new Error(`Custom tool '${tool}' returned invalid bridge response`);\n }\n}\n\nfunction assertCustomToolBridgeOk(\n response: Response,\n payload: Record<string, unknown>,\n tool: string,\n): void {\n if (!response.ok || Reflect.get(payload, \"ok\") !== true) {\n const error = Reflect.get(payload, \"error\");\n throw new Error(typeof error === \"string\" ? error : `Custom tool '${tool}' failed`);\n }\n}\n\nfunction textResult(value: unknown): ToolResult {\n return {\n content: [{ type: \"text\", text: JSON.stringify(value, null, 2) }],\n details: value,\n };\n}\n\nasync function readAtRef(\n dataRoot: string,\n data: RuntimeToolData,\n params: ReadAtRefParams,\n cwd: string,\n): Promise<unknown> {\n const request = resolveReadAtRefRequest(data.manifest, params);\n if (!request.window) {\n return unavailableReadAtRefResult(request);\n }\n if (params.ref === \"base\") {\n return await readBaseSnapshot(dataRoot, data.baseRanges[params.rangeId], params, request);\n }\n return await readHeadWorkspaceFile(cwd, data.toolResponseMaxBytes, params, request);\n}\n\nasync function readBaseSnapshot(\n dataRoot: string,\n snapshot: BaseRangeSnapshot | undefined,\n params: ReadAtRefParams,\n request: ReturnType<typeof resolveReadAtRefRequest>,\n): Promise<unknown> {\n const readable = readableBaseSnapshotSchema.safeParse(snapshot);\n if (!readable.success) {\n return snapshot ?? unavailableReadAtRefResult(request);\n }\n const snapshotData = readable.data;\n return {\n path: params.path,\n ref: params.ref,\n sourcePath: request.sourcePath,\n rangeId: params.rangeId,\n startLine: snapshotData.startLine,\n endLine: snapshotData.endLine,\n available: true,\n content: await Bun.file(path.join(dataRoot, snapshotData.relativePath)).text(),\n bytes: snapshotData.bytes,\n truncated: snapshotData.truncated,\n };\n}\n\nasync function readHeadWorkspaceFile(\n cwd: string,\n maxBytes: number,\n params: ReadAtRefParams,\n request: ReturnType<typeof resolveReadAtRefRequest>,\n): Promise<unknown> {\n if (!request.window) {\n return unavailableReadAtRefResult(request);\n }\n const target = resolveAllowedPath(cwd, request.sourcePath);\n await assertNoSymlinkPath(cwd, request.sourcePath);\n return {\n path: params.path,\n ref: params.ref,\n sourcePath: request.sourcePath,\n rangeId: params.rangeId,\n startLine: request.window.startLine,\n endLine: request.window.endLine,\n ...boundedLineSlice(await Bun.file(target).text(), request.window, maxBytes),\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
//#region src/review/inline-finding-limits.ts
|
|
2
|
+
const maxInlineFindingBodyCharacters = 700;
|
|
3
|
+
const maxInlineFindingBodyLines = 4;
|
|
4
|
+
//#endregion
|
|
5
|
+
//#region src/review/suggested-fix-publication-policy.ts
|
|
6
|
+
const maxSuggestedFixSelectedLines = 12;
|
|
7
|
+
const maxSuggestedFixReplacementLines = 20;
|
|
8
|
+
const environmentKeyAccessPattern = /\b(?:process|Bun|import\.meta)(?:\s*\.|\s*\?\.)\s*env(?:\s*(?:\.|\?\.)\s*([A-Za-z_][A-Za-z0-9_]*)|\s*\?\.\s*\[\s*["']([A-Za-z_][A-Za-z0-9_]*)["']\s*\]|\s*\[\s*["']([A-Za-z_][A-Za-z0-9_]*)["']\s*\])|\bDeno(?:\s*\.|\s*\?\.)\s*env(?:\s*\.|\s*\?\.)\s*get\s*\(\s*["']([A-Za-z_][A-Za-z0-9_]*)["']\s*\)/g;
|
|
9
|
+
const environmentDestructurePattern = /\{([^{}]*)\}\s*=\s*(?:process|Bun|import\.meta)(?:\s*\.|\s*\?\.)\s*env\b/g;
|
|
10
|
+
const environmentKeyNamePattern = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
11
|
+
function isPublishableSuggestedFixSelection(selection) {
|
|
12
|
+
const suggestedLines = normalizedSuggestedFixLines(selection.suggestedFix);
|
|
13
|
+
const selectedLineCount = selection.endLine - selection.startLine + 1;
|
|
14
|
+
if (selection.side !== "RIGHT" || selection.kind === "deleted" || selectedLineCount > maxSuggestedFixSelectedLines || suggestedLines.length > maxSuggestedFixReplacementLines) return false;
|
|
15
|
+
const originalLines = selectedPreviewLines(selection, selectedLineCount);
|
|
16
|
+
if (!originalLines) return false;
|
|
17
|
+
const structuralEdgePattern = /^([{}[\]()<>]+)[;,]?$/;
|
|
18
|
+
const firstOriginalEdge = originalLines[0]?.trim().match(structuralEdgePattern)?.[1];
|
|
19
|
+
const firstSuggestedEdge = suggestedLines[0]?.trim().match(structuralEdgePattern)?.[1];
|
|
20
|
+
const lastOriginalEdge = originalLines.at(-1)?.trim().match(structuralEdgePattern)?.[1];
|
|
21
|
+
const lastSuggestedEdge = suggestedLines.at(-1)?.trim().match(structuralEdgePattern)?.[1];
|
|
22
|
+
const originalLinesWithoutTrailingBlanks = originalLines.slice(0, lastNonBlankLineIndex(originalLines) + 1);
|
|
23
|
+
const suggestedLinesWithoutTrailingBlanks = suggestedLines.slice(0, lastNonBlankLineIndex(suggestedLines) + 1);
|
|
24
|
+
return (originalLinesWithoutTrailingBlanks.length !== suggestedLinesWithoutTrailingBlanks.length || originalLinesWithoutTrailingBlanks.some((line, index) => line !== suggestedLinesWithoutTrailingBlanks[index])) && !onlyChangesWhitespace(originalLinesWithoutTrailingBlanks, suggestedLinesWithoutTrailingBlanks) && !suggestionIntroducesNewEnvironmentAccess(selection.preview, selection.suggestedFix) && (firstOriginalEdge === void 0 || firstOriginalEdge === firstSuggestedEdge) && (lastOriginalEdge === void 0 || lastOriginalEdge === lastSuggestedEdge) && !hasUnchangedSelectionEdge(originalLines, suggestedLines) && !suggestionIncludesUnselectedContext(selection, selectedLineCount, suggestedLines);
|
|
25
|
+
}
|
|
26
|
+
function normalizedSuggestedFixLines(value) {
|
|
27
|
+
const normalized = value.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
|
28
|
+
const withoutFinalNewline = normalized.endsWith("\n") ? normalized.slice(0, -1) : normalized;
|
|
29
|
+
return withoutFinalNewline.length === 0 ? [] : withoutFinalNewline.split("\n");
|
|
30
|
+
}
|
|
31
|
+
function selectedPreviewLines(selection, selectedLineCount) {
|
|
32
|
+
if (!selection.preview) return;
|
|
33
|
+
const offset = selection.startLine - selection.rangeStartLine;
|
|
34
|
+
if (offset < 0) return;
|
|
35
|
+
const previewLines = selection.preview.replace(/\r\n/g, "\n").replace(/\r/g, "\n").split("\n");
|
|
36
|
+
if (offset + selectedLineCount > previewLines.length) return;
|
|
37
|
+
return previewLines.slice(offset, offset + selectedLineCount);
|
|
38
|
+
}
|
|
39
|
+
function suggestionIncludesUnselectedContext(selection, selectedLineCount, suggestedLines) {
|
|
40
|
+
if (!selection.preview || suggestedLines.length <= selectedLineCount) return false;
|
|
41
|
+
const offset = selection.startLine - selection.rangeStartLine;
|
|
42
|
+
if (offset < 0) return false;
|
|
43
|
+
const previewLines = selection.preview.replace(/\r\n/g, "\n").replace(/\r/g, "\n").split("\n");
|
|
44
|
+
return [offset > 0 ? previewLines[offset - 1] : void 0, previewLines[offset + selectedLineCount]].filter((line) => Boolean(line?.trim())).some((line) => suggestedLines.includes(line));
|
|
45
|
+
}
|
|
46
|
+
function hasUnchangedSelectionEdge(originalLines, suggestedLines) {
|
|
47
|
+
const firstLineUnchanged = originalLines[0] === suggestedLines[0];
|
|
48
|
+
const lastLineUnchanged = originalLines.at(-1) === suggestedLines.at(-1);
|
|
49
|
+
if (originalLines.length === suggestedLines.length || originalLines.length === 1) return firstLineUnchanged || lastLineUnchanged;
|
|
50
|
+
return firstLineUnchanged && lastLineUnchanged;
|
|
51
|
+
}
|
|
52
|
+
function lastNonBlankLineIndex(lines) {
|
|
53
|
+
for (let index = lines.length - 1; index >= 0; index -= 1) if (lines[index]?.trim() !== "") return index;
|
|
54
|
+
return -1;
|
|
55
|
+
}
|
|
56
|
+
function onlyChangesWhitespace(originalLines, suggestedLines) {
|
|
57
|
+
const original = originalLines.join("\n");
|
|
58
|
+
const suggested = suggestedLines.join("\n");
|
|
59
|
+
const originalScan = scanCodeWhitespace(original);
|
|
60
|
+
const suggestedScan = scanCodeWhitespace(suggested);
|
|
61
|
+
if (originalScan.containsCommentSyntax || suggestedScan.containsCommentSyntax) return false;
|
|
62
|
+
return originalScan.stripped === suggestedScan.stripped;
|
|
63
|
+
}
|
|
64
|
+
function scanCodeWhitespace(value) {
|
|
65
|
+
let result = "";
|
|
66
|
+
const state = {
|
|
67
|
+
literalDelimiter: void 0,
|
|
68
|
+
escaped: false,
|
|
69
|
+
regexCharacterClass: false,
|
|
70
|
+
templateExpressionDepths: []
|
|
71
|
+
};
|
|
72
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
73
|
+
const char = value.charAt(index);
|
|
74
|
+
if (advanceCodeLiteralScan(state, char, value[index + 1])) {
|
|
75
|
+
result += char;
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (char === "/" && ["/", "*"].includes(value[index + 1] ?? "")) return {
|
|
79
|
+
stripped: result,
|
|
80
|
+
containsCommentSyntax: true
|
|
81
|
+
};
|
|
82
|
+
if (/\s/.test(char)) {
|
|
83
|
+
const nextNonWhitespace = value.slice(index + 1).match(/\S/)?.[0];
|
|
84
|
+
result += codeTokenSeparator(result.at(-1), nextNonWhitespace);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
advanceTemplateExpressionScan(state, char);
|
|
88
|
+
state.literalDelimiter ??= openingCodeLiteralDelimiter(char, value[index + 1], result);
|
|
89
|
+
state.regexCharacterClass = false;
|
|
90
|
+
result += char;
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
stripped: result,
|
|
94
|
+
containsCommentSyntax: false
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function codeTokenSeparator(previousChar, nextChar) {
|
|
98
|
+
if (!previousChar || !nextChar) return "";
|
|
99
|
+
if (/[A-Za-z0-9_$]/.test(previousChar) && /[A-Za-z0-9_$]/.test(nextChar)) return " ";
|
|
100
|
+
return [
|
|
101
|
+
"++",
|
|
102
|
+
"--",
|
|
103
|
+
"//",
|
|
104
|
+
"/*",
|
|
105
|
+
"**",
|
|
106
|
+
"??",
|
|
107
|
+
"?.",
|
|
108
|
+
"=>",
|
|
109
|
+
"==",
|
|
110
|
+
"!=",
|
|
111
|
+
"<=",
|
|
112
|
+
">=",
|
|
113
|
+
"&&",
|
|
114
|
+
"||",
|
|
115
|
+
"<<",
|
|
116
|
+
">>"
|
|
117
|
+
].includes(previousChar + nextChar) ? " " : "";
|
|
118
|
+
}
|
|
119
|
+
function advanceCodeLiteralScan(state, char, nextChar) {
|
|
120
|
+
if (!state.literalDelimiter) return false;
|
|
121
|
+
if (state.escaped) {
|
|
122
|
+
state.escaped = false;
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
if (char === "\\") {
|
|
126
|
+
state.escaped = true;
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
if (state.literalDelimiter.charCodeAt(0) === 96 && char === "$" && nextChar === "{") {
|
|
130
|
+
state.templateExpressionDepths.push(0);
|
|
131
|
+
state.literalDelimiter = void 0;
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
if (state.literalDelimiter !== "/") {
|
|
135
|
+
if (char === state.literalDelimiter) state.literalDelimiter = void 0;
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
advanceRegexLiteralScan(state, char);
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
function advanceTemplateExpressionScan(state, char) {
|
|
142
|
+
const depthIndex = state.templateExpressionDepths.length - 1;
|
|
143
|
+
const depth = state.templateExpressionDepths[depthIndex];
|
|
144
|
+
if (depth === void 0) return;
|
|
145
|
+
if (char === "{") state.templateExpressionDepths[depthIndex] = depth + 1;
|
|
146
|
+
else if (char === "}") if (depth <= 1) {
|
|
147
|
+
state.templateExpressionDepths.pop();
|
|
148
|
+
state.literalDelimiter = "`";
|
|
149
|
+
} else state.templateExpressionDepths[depthIndex] = depth - 1;
|
|
150
|
+
}
|
|
151
|
+
function advanceRegexLiteralScan(state, char) {
|
|
152
|
+
if (char === "[") state.regexCharacterClass = true;
|
|
153
|
+
else if (char === "]") state.regexCharacterClass = false;
|
|
154
|
+
else if (char === "/" && !state.regexCharacterClass) state.literalDelimiter = void 0;
|
|
155
|
+
}
|
|
156
|
+
function openingCodeLiteralDelimiter(char, nextChar, previousCode) {
|
|
157
|
+
if (char === "\"" || char === "'" || char.charCodeAt(0) === 96) return char;
|
|
158
|
+
return startsRegexLiteral(char, nextChar, previousCode) ? "/" : void 0;
|
|
159
|
+
}
|
|
160
|
+
function startsRegexLiteral(char, nextChar, previousCode) {
|
|
161
|
+
const previousChar = previousCode.at(-1);
|
|
162
|
+
const previousWord = previousCode.split(/[^A-Za-z]+/).at(-1);
|
|
163
|
+
const followsRegexKeyword = [
|
|
164
|
+
"return",
|
|
165
|
+
"throw",
|
|
166
|
+
"case",
|
|
167
|
+
"delete",
|
|
168
|
+
"void",
|
|
169
|
+
"typeof",
|
|
170
|
+
"instanceof",
|
|
171
|
+
"in",
|
|
172
|
+
"of",
|
|
173
|
+
"yield",
|
|
174
|
+
"await"
|
|
175
|
+
].includes(previousWord ?? "");
|
|
176
|
+
return char === "/" && nextChar !== "/" && nextChar !== "*" && (previousChar === void 0 || "([{:;,=!?&|+-*%^~<>)".includes(previousChar) || followsRegexKeyword);
|
|
177
|
+
}
|
|
178
|
+
function suggestionIntroducesNewEnvironmentAccess(preview, suggestedFix) {
|
|
179
|
+
const suggestedKeys = environmentAccessKeys(suggestedFix);
|
|
180
|
+
if (suggestedKeys.size === 0) return false;
|
|
181
|
+
const existingKeys = environmentAccessKeys(preview ?? "");
|
|
182
|
+
return Array.from(suggestedKeys).some((key) => !existingKeys.has(key));
|
|
183
|
+
}
|
|
184
|
+
function environmentAccessKeys(value) {
|
|
185
|
+
const keys = /* @__PURE__ */ new Set();
|
|
186
|
+
for (const match of value.matchAll(environmentKeyAccessPattern)) {
|
|
187
|
+
const key = match[1] ?? match[2] ?? match[3] ?? match[4];
|
|
188
|
+
if (key) keys.add(key);
|
|
189
|
+
}
|
|
190
|
+
for (const match of value.matchAll(environmentDestructurePattern)) addDestructuredEnvironmentKeys(keys, match[1] ?? "");
|
|
191
|
+
return keys;
|
|
192
|
+
}
|
|
193
|
+
function addDestructuredEnvironmentKeys(keys, bindings) {
|
|
194
|
+
for (const binding of bindings.split(",")) {
|
|
195
|
+
const key = destructuredEnvironmentKey(binding);
|
|
196
|
+
if (key) keys.add(key);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
function destructuredEnvironmentKey(binding) {
|
|
200
|
+
const key = binding.split(/[:=]/, 1)[0]?.trim().replace(/^["']|["']$/g, "");
|
|
201
|
+
return key && !key.startsWith("...") && environmentKeyNamePattern.test(key) ? key : void 0;
|
|
202
|
+
}
|
|
203
|
+
//#endregion
|
|
204
|
+
export { maxInlineFindingBodyCharacters as n, maxInlineFindingBodyLines as r, isPublishableSuggestedFixSelection as t };
|
|
205
|
+
|
|
206
|
+
//# sourceMappingURL=suggested-fix-publication-policy-B5Wwuudp.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggested-fix-publication-policy-B5Wwuudp.mjs","names":[],"sources":["../src/review/inline-finding-limits.ts","../src/review/suggested-fix-publication-policy.ts"],"sourcesContent":["export const maxInlineFindingBodyCharacters = 700;\nexport const maxInlineFindingBodyLines = 4;\n","type SuggestedFixPublicationSelection = {\n side: \"RIGHT\" | \"LEFT\";\n kind: \"added\" | \"deleted\" | \"context\" | \"mixed\";\n rangeStartLine: number;\n startLine: number;\n endLine: number;\n preview?: string;\n suggestedFix: string;\n};\n\nconst maxSuggestedFixSelectedLines = 12;\nconst maxSuggestedFixReplacementLines = 20;\nconst environmentKeyAccessPattern =\n /\\b(?:process|Bun|import\\.meta)(?:\\s*\\.|\\s*\\?\\.)\\s*env(?:\\s*(?:\\.|\\?\\.)\\s*([A-Za-z_][A-Za-z0-9_]*)|\\s*\\?\\.\\s*\\[\\s*[\"']([A-Za-z_][A-Za-z0-9_]*)[\"']\\s*\\]|\\s*\\[\\s*[\"']([A-Za-z_][A-Za-z0-9_]*)[\"']\\s*\\])|\\bDeno(?:\\s*\\.|\\s*\\?\\.)\\s*env(?:\\s*\\.|\\s*\\?\\.)\\s*get\\s*\\(\\s*[\"']([A-Za-z_][A-Za-z0-9_]*)[\"']\\s*\\)/g;\nconst environmentDestructurePattern =\n /\\{([^{}]*)\\}\\s*=\\s*(?:process|Bun|import\\.meta)(?:\\s*\\.|\\s*\\?\\.)\\s*env\\b/g;\nconst environmentKeyNamePattern = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nexport function isPublishableSuggestedFixSelection(\n selection: SuggestedFixPublicationSelection,\n): boolean {\n const suggestedLines = normalizedSuggestedFixLines(selection.suggestedFix);\n const selectedLineCount = selection.endLine - selection.startLine + 1;\n if (\n selection.side !== \"RIGHT\" ||\n selection.kind === \"deleted\" ||\n selectedLineCount > maxSuggestedFixSelectedLines ||\n suggestedLines.length > maxSuggestedFixReplacementLines\n ) {\n return false;\n }\n\n const originalLines = selectedPreviewLines(selection, selectedLineCount);\n if (!originalLines) {\n return false;\n }\n const structuralEdgePattern = /^([{}[\\]()<>]+)[;,]?$/;\n const firstOriginalEdge = originalLines[0]?.trim().match(structuralEdgePattern)?.[1];\n const firstSuggestedEdge = suggestedLines[0]?.trim().match(structuralEdgePattern)?.[1];\n const lastOriginalEdge = originalLines.at(-1)?.trim().match(structuralEdgePattern)?.[1];\n const lastSuggestedEdge = suggestedLines.at(-1)?.trim().match(structuralEdgePattern)?.[1];\n const originalLinesWithoutTrailingBlanks = originalLines.slice(\n 0,\n lastNonBlankLineIndex(originalLines) + 1,\n );\n const suggestedLinesWithoutTrailingBlanks = suggestedLines.slice(\n 0,\n lastNonBlankLineIndex(suggestedLines) + 1,\n );\n const hasTextChange =\n originalLinesWithoutTrailingBlanks.length !== suggestedLinesWithoutTrailingBlanks.length ||\n originalLinesWithoutTrailingBlanks.some(\n (line, index) => line !== suggestedLinesWithoutTrailingBlanks[index],\n );\n return (\n hasTextChange &&\n !onlyChangesWhitespace(\n originalLinesWithoutTrailingBlanks,\n suggestedLinesWithoutTrailingBlanks,\n ) &&\n !suggestionIntroducesNewEnvironmentAccess(selection.preview, selection.suggestedFix) &&\n (firstOriginalEdge === undefined || firstOriginalEdge === firstSuggestedEdge) &&\n (lastOriginalEdge === undefined || lastOriginalEdge === lastSuggestedEdge) &&\n !hasUnchangedSelectionEdge(originalLines, suggestedLines) &&\n !suggestionIncludesUnselectedContext(selection, selectedLineCount, suggestedLines)\n );\n}\n\nfunction normalizedSuggestedFixLines(value: string): string[] {\n const normalized = value.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n const withoutFinalNewline = normalized.endsWith(\"\\n\") ? normalized.slice(0, -1) : normalized;\n return withoutFinalNewline.length === 0 ? [] : withoutFinalNewline.split(\"\\n\");\n}\n\nfunction selectedPreviewLines(\n selection: SuggestedFixPublicationSelection,\n selectedLineCount: number,\n): string[] | undefined {\n if (!selection.preview) {\n return undefined;\n }\n const offset = selection.startLine - selection.rangeStartLine;\n if (offset < 0) {\n return undefined;\n }\n const previewLines = selection.preview.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\").split(\"\\n\");\n if (offset + selectedLineCount > previewLines.length) {\n return undefined;\n }\n return previewLines.slice(offset, offset + selectedLineCount);\n}\n\nfunction suggestionIncludesUnselectedContext(\n selection: SuggestedFixPublicationSelection,\n selectedLineCount: number,\n suggestedLines: string[],\n): boolean {\n if (!selection.preview || suggestedLines.length <= selectedLineCount) {\n return false;\n }\n const offset = selection.startLine - selection.rangeStartLine;\n if (offset < 0) {\n return false;\n }\n const previewLines = selection.preview.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\").split(\"\\n\");\n const contextLines = [\n offset > 0 ? previewLines[offset - 1] : undefined,\n previewLines[offset + selectedLineCount],\n ].filter((line): line is string => Boolean(line?.trim()));\n return contextLines.some((line) => suggestedLines.includes(line));\n}\n\nfunction hasUnchangedSelectionEdge(originalLines: string[], suggestedLines: string[]): boolean {\n const firstLineUnchanged = originalLines[0] === suggestedLines[0];\n const lastLineUnchanged = originalLines.at(-1) === suggestedLines.at(-1);\n if (originalLines.length === suggestedLines.length || originalLines.length === 1) {\n return firstLineUnchanged || lastLineUnchanged;\n }\n return firstLineUnchanged && lastLineUnchanged;\n}\n\nfunction lastNonBlankLineIndex(lines: string[]): number {\n for (let index = lines.length - 1; index >= 0; index -= 1) {\n if (lines[index]?.trim() !== \"\") {\n return index;\n }\n }\n return -1;\n}\n\nfunction onlyChangesWhitespace(originalLines: string[], suggestedLines: string[]): boolean {\n const original = originalLines.join(\"\\n\");\n const suggested = suggestedLines.join(\"\\n\");\n const originalScan = scanCodeWhitespace(original);\n const suggestedScan = scanCodeWhitespace(suggested);\n if (originalScan.containsCommentSyntax || suggestedScan.containsCommentSyntax) {\n return false;\n }\n return originalScan.stripped === suggestedScan.stripped;\n}\n\nfunction scanCodeWhitespace(value: string): {\n stripped: string;\n containsCommentSyntax: boolean;\n} {\n let result = \"\";\n const state: CodeWhitespaceScanState = {\n literalDelimiter: undefined,\n escaped: false,\n regexCharacterClass: false,\n templateExpressionDepths: [],\n };\n\n for (let index = 0; index < value.length; index += 1) {\n const char = value.charAt(index);\n if (advanceCodeLiteralScan(state, char, value[index + 1])) {\n result += char;\n continue;\n }\n if (char === \"/\" && [\"/\", \"*\"].includes(value[index + 1] ?? \"\")) {\n return { stripped: result, containsCommentSyntax: true };\n }\n if (/\\s/.test(char)) {\n const nextNonWhitespace = value.slice(index + 1).match(/\\S/)?.[0];\n result += codeTokenSeparator(result.at(-1), nextNonWhitespace);\n continue;\n }\n advanceTemplateExpressionScan(state, char);\n state.literalDelimiter ??= openingCodeLiteralDelimiter(char, value[index + 1], result);\n state.regexCharacterClass = false;\n result += char;\n }\n\n return { stripped: result, containsCommentSyntax: false };\n}\n\nfunction codeTokenSeparator(\n previousChar: string | undefined,\n nextChar: string | undefined,\n): string {\n if (!previousChar || !nextChar) {\n return \"\";\n }\n if (/[A-Za-z0-9_$]/.test(previousChar) && /[A-Za-z0-9_$]/.test(nextChar)) {\n return \" \";\n }\n const requiresSeparator = [\n \"++\",\n \"--\",\n \"//\",\n \"/*\",\n \"**\",\n \"??\",\n \"?.\",\n \"=>\",\n \"==\",\n \"!=\",\n \"<=\",\n \">=\",\n \"&&\",\n \"||\",\n \"<<\",\n \">>\",\n ].includes(previousChar + nextChar);\n return requiresSeparator ? \" \" : \"\";\n}\n\ntype CodeWhitespaceScanState = {\n literalDelimiter: string | undefined;\n escaped: boolean;\n regexCharacterClass: boolean;\n templateExpressionDepths: number[];\n};\n\nfunction advanceCodeLiteralScan(\n state: CodeWhitespaceScanState,\n char: string,\n nextChar: string | undefined,\n): boolean {\n if (!state.literalDelimiter) {\n return false;\n }\n if (state.escaped) {\n state.escaped = false;\n return true;\n }\n if (char === \"\\\\\") {\n state.escaped = true;\n return true;\n }\n if (state.literalDelimiter.charCodeAt(0) === 96 && char === \"$\" && nextChar === \"{\") {\n state.templateExpressionDepths.push(0);\n state.literalDelimiter = undefined;\n return true;\n }\n if (state.literalDelimiter !== \"/\") {\n if (char === state.literalDelimiter) {\n state.literalDelimiter = undefined;\n }\n return true;\n }\n advanceRegexLiteralScan(state, char);\n return true;\n}\n\nfunction advanceTemplateExpressionScan(state: CodeWhitespaceScanState, char: string): void {\n const depthIndex = state.templateExpressionDepths.length - 1;\n const depth = state.templateExpressionDepths[depthIndex];\n if (depth === undefined) {\n return;\n }\n if (char === \"{\") {\n state.templateExpressionDepths[depthIndex] = depth + 1;\n } else if (char === \"}\") {\n if (depth <= 1) {\n state.templateExpressionDepths.pop();\n state.literalDelimiter = \"`\";\n } else {\n state.templateExpressionDepths[depthIndex] = depth - 1;\n }\n }\n}\n\nfunction advanceRegexLiteralScan(state: CodeWhitespaceScanState, char: string): void {\n if (char === \"[\") {\n state.regexCharacterClass = true;\n } else if (char === \"]\") {\n state.regexCharacterClass = false;\n } else if (char === \"/\" && !state.regexCharacterClass) {\n state.literalDelimiter = undefined;\n }\n}\n\nfunction openingCodeLiteralDelimiter(\n char: string,\n nextChar: string | undefined,\n previousCode: string,\n): string | undefined {\n if (char === '\"' || char === \"'\" || char.charCodeAt(0) === 96) {\n return char;\n }\n return startsRegexLiteral(char, nextChar, previousCode) ? \"/\" : undefined;\n}\n\nfunction startsRegexLiteral(\n char: string,\n nextChar: string | undefined,\n previousCode: string,\n): boolean {\n const previousChar = previousCode.at(-1);\n const previousWord = previousCode.split(/[^A-Za-z]+/).at(-1);\n const followsRegexKeyword = [\n \"return\",\n \"throw\",\n \"case\",\n \"delete\",\n \"void\",\n \"typeof\",\n \"instanceof\",\n \"in\",\n \"of\",\n \"yield\",\n \"await\",\n ].includes(previousWord ?? \"\");\n return (\n char === \"/\" &&\n nextChar !== \"/\" &&\n nextChar !== \"*\" &&\n (previousChar === undefined ||\n \"([{:;,=!?&|+-*%^~<>)\".includes(previousChar) ||\n followsRegexKeyword)\n );\n}\n\nfunction suggestionIntroducesNewEnvironmentAccess(\n preview: string | undefined,\n suggestedFix: string,\n): boolean {\n const suggestedKeys = environmentAccessKeys(suggestedFix);\n if (suggestedKeys.size === 0) {\n return false;\n }\n const existingKeys = environmentAccessKeys(preview ?? \"\");\n return Array.from(suggestedKeys).some((key) => !existingKeys.has(key));\n}\n\nfunction environmentAccessKeys(value: string): Set<string> {\n const keys = new Set<string>();\n for (const match of value.matchAll(environmentKeyAccessPattern)) {\n const key = match[1] ?? match[2] ?? match[3] ?? match[4];\n if (key) {\n keys.add(key);\n }\n }\n for (const match of value.matchAll(environmentDestructurePattern)) {\n addDestructuredEnvironmentKeys(keys, match[1] ?? \"\");\n }\n return keys;\n}\n\nfunction addDestructuredEnvironmentKeys(keys: Set<string>, bindings: string): void {\n for (const binding of bindings.split(\",\")) {\n const key = destructuredEnvironmentKey(binding);\n if (key) {\n keys.add(key);\n }\n }\n}\n\nfunction destructuredEnvironmentKey(binding: string): string | undefined {\n const key = binding\n .split(/[:=]/, 1)[0]\n ?.trim()\n .replace(/^[\"']|[\"']$/g, \"\");\n return key && !key.startsWith(\"...\") && environmentKeyNamePattern.test(key) ? key : undefined;\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@usepipr/runtime",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.6",
|
|
4
4
|
"description": "Runtime package for pipr pull request review automation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -30,13 +30,17 @@
|
|
|
30
30
|
"types": "./dist/internal/testing.d.mts",
|
|
31
31
|
"default": "./dist/internal/testing.mjs"
|
|
32
32
|
},
|
|
33
|
+
"./internal/review-testing": {
|
|
34
|
+
"types": "./dist/internal/review-testing.d.mts",
|
|
35
|
+
"default": "./dist/internal/review-testing.mjs"
|
|
36
|
+
},
|
|
33
37
|
"./runtime-tools-extension": {
|
|
34
38
|
"types": "./dist/pi/runtime-tools-extension.d.mts",
|
|
35
39
|
"default": "./dist/pi/runtime-tools-extension.mjs"
|
|
36
40
|
}
|
|
37
41
|
},
|
|
38
42
|
"scripts": {
|
|
39
|
-
"build": "tsdown src/index.ts src/internal/testing.ts src/pi/runtime-tools-extension.ts --dts --format esm --out-dir dist",
|
|
43
|
+
"build": "tsdown src/index.ts src/internal/testing.ts src/internal/review-testing.ts src/pi/runtime-tools-extension.ts --dts --format esm --out-dir dist",
|
|
40
44
|
"typecheck": "tsc --noEmit",
|
|
41
45
|
"test": "bun test --timeout 60000",
|
|
42
46
|
"test:config-init": "bun test --timeout 60000 src/config/tests/init.test.ts",
|
|
@@ -50,7 +54,7 @@
|
|
|
50
54
|
"dependencies": {
|
|
51
55
|
"@octokit/rest": "22.0.1",
|
|
52
56
|
"@types/bun": "1.3.14",
|
|
53
|
-
"@usepipr/sdk": "0.3.
|
|
57
|
+
"@usepipr/sdk": "0.3.6",
|
|
54
58
|
"lodash-es": "4.18.1",
|
|
55
59
|
"picomatch": "4.0.5",
|
|
56
60
|
"typescript": "6.0.3",
|
|
@@ -58,7 +62,7 @@
|
|
|
58
62
|
},
|
|
59
63
|
"devDependencies": {
|
|
60
64
|
"@types/lodash-es": "4.17.12",
|
|
61
|
-
"@types/node": "26.1.
|
|
65
|
+
"@types/node": "26.1.1",
|
|
62
66
|
"@types/picomatch": "4.0.3"
|
|
63
67
|
}
|
|
64
68
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commands-4n3t4t5P.d.mts","names":[],"sources":["../src/config/init.ts","../src/types.ts","../src/config/project.ts","../../sdk/src/types/manifest.ts","../src/review/prior-state.ts","../src/review/comment.ts","../src/review/publication-result.ts","../src/hosts/types.ts","../src/hosts/github/command.ts","../src/hosts/github/publication-client.ts","../src/shared/logging.ts","../src/pi/contract.ts","../src/review/task/task-output.ts","../src/review/task/task-runtime.ts","../src/action/types.ts","../src/action/commands.ts"],"mappings":"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"}
|