@prestyj/cli 4.3.59 → 4.3.93

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/cli.js +155 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/core/auto-update.test.js +1 -1
  4. package/dist/core/auto-update.test.js.map +1 -1
  5. package/dist/core/compaction/token-estimator.d.ts.map +1 -1
  6. package/dist/core/compaction/token-estimator.js +2 -0
  7. package/dist/core/compaction/token-estimator.js.map +1 -1
  8. package/dist/core/pixel-fix-agent.d.ts +24 -0
  9. package/dist/core/pixel-fix-agent.d.ts.map +1 -0
  10. package/dist/core/pixel-fix-agent.js +49 -0
  11. package/dist/core/pixel-fix-agent.js.map +1 -0
  12. package/dist/core/pixel-fix.d.ts +70 -0
  13. package/dist/core/pixel-fix.d.ts.map +1 -0
  14. package/dist/core/pixel-fix.js +338 -0
  15. package/dist/core/pixel-fix.js.map +1 -0
  16. package/dist/core/pixel-fix.test.d.ts +2 -0
  17. package/dist/core/pixel-fix.test.d.ts.map +1 -0
  18. package/dist/core/pixel-fix.test.js +310 -0
  19. package/dist/core/pixel-fix.test.js.map +1 -0
  20. package/dist/core/pixel.d.ts +37 -0
  21. package/dist/core/pixel.d.ts.map +1 -0
  22. package/dist/core/pixel.js +378 -0
  23. package/dist/core/pixel.js.map +1 -0
  24. package/dist/core/pixel.test.d.ts +2 -0
  25. package/dist/core/pixel.test.d.ts.map +1 -0
  26. package/dist/core/pixel.test.js +269 -0
  27. package/dist/core/pixel.test.js.map +1 -0
  28. package/dist/core/source-maps.d.ts +47 -0
  29. package/dist/core/source-maps.d.ts.map +1 -0
  30. package/dist/core/source-maps.js +132 -0
  31. package/dist/core/source-maps.js.map +1 -0
  32. package/dist/core/source-maps.test.d.ts +2 -0
  33. package/dist/core/source-maps.test.d.ts.map +1 -0
  34. package/dist/core/source-maps.test.js +175 -0
  35. package/dist/core/source-maps.test.js.map +1 -0
  36. package/dist/system-prompt.d.ts.map +1 -1
  37. package/dist/system-prompt.js +20 -10
  38. package/dist/system-prompt.js.map +1 -1
  39. package/dist/tools/edit-diff.d.ts +10 -0
  40. package/dist/tools/edit-diff.d.ts.map +1 -1
  41. package/dist/tools/edit-diff.js +55 -0
  42. package/dist/tools/edit-diff.js.map +1 -1
  43. package/dist/tools/edit-diff.test.js +59 -1
  44. package/dist/tools/edit-diff.test.js.map +1 -1
  45. package/dist/tools/edit.d.ts +2 -1
  46. package/dist/tools/edit.d.ts.map +1 -1
  47. package/dist/tools/edit.js +22 -8
  48. package/dist/tools/edit.js.map +1 -1
  49. package/dist/tools/edit.test.js +65 -4
  50. package/dist/tools/edit.test.js.map +1 -1
  51. package/dist/tools/index.d.ts.map +1 -1
  52. package/dist/tools/index.js +1 -1
  53. package/dist/tools/index.js.map +1 -1
  54. package/dist/tools/plan-mode.test.js +1 -1
  55. package/dist/tools/plan-mode.test.js.map +1 -1
  56. package/dist/tools/read-tracker.d.ts +17 -0
  57. package/dist/tools/read-tracker.d.ts.map +1 -0
  58. package/dist/tools/read-tracker.js +38 -0
  59. package/dist/tools/read-tracker.js.map +1 -0
  60. package/dist/tools/read.d.ts +2 -1
  61. package/dist/tools/read.d.ts.map +1 -1
  62. package/dist/tools/read.js +3 -1
  63. package/dist/tools/read.js.map +1 -1
  64. package/dist/tools/read.test.js +6 -4
  65. package/dist/tools/read.test.js.map +1 -1
  66. package/dist/tools/write.d.ts +2 -1
  67. package/dist/tools/write.d.ts.map +1 -1
  68. package/dist/tools/write.js +6 -3
  69. package/dist/tools/write.js.map +1 -1
  70. package/dist/tools/write.test.js +23 -6
  71. package/dist/tools/write.test.js.map +1 -1
  72. package/dist/ui/App.d.ts +2 -0
  73. package/dist/ui/App.d.ts.map +1 -1
  74. package/dist/ui/App.js +139 -7
  75. package/dist/ui/App.js.map +1 -1
  76. package/dist/ui/components/InputArea.d.ts +2 -1
  77. package/dist/ui/components/InputArea.d.ts.map +1 -1
  78. package/dist/ui/components/InputArea.js +6 -1
  79. package/dist/ui/components/InputArea.js.map +1 -1
  80. package/dist/ui/components/PixelOverlay.d.ts +11 -0
  81. package/dist/ui/components/PixelOverlay.d.ts.map +1 -0
  82. package/dist/ui/components/PixelOverlay.js +117 -0
  83. package/dist/ui/components/PixelOverlay.js.map +1 -0
  84. package/dist/ui/components/ToolExecution.js +2 -2
  85. package/dist/ui/components/ToolExecution.js.map +1 -1
  86. package/dist/ui/pixel.d.ts +23 -0
  87. package/dist/ui/pixel.d.ts.map +1 -0
  88. package/dist/ui/pixel.js +421 -0
  89. package/dist/ui/pixel.js.map +1 -0
  90. package/dist/ui/pixel.test.d.ts +2 -0
  91. package/dist/ui/pixel.test.d.ts.map +1 -0
  92. package/dist/ui/pixel.test.js +138 -0
  93. package/dist/ui/pixel.test.js.map +1 -0
  94. package/dist/ui/render.d.ts +2 -0
  95. package/dist/ui/render.d.ts.map +1 -1
  96. package/dist/ui/render.js +2 -0
  97. package/dist/ui/render.js.map +1 -1
  98. package/dist/utils/error-handler.d.ts.map +1 -1
  99. package/dist/utils/error-handler.js +13 -0
  100. package/dist/utils/error-handler.js.map +1 -1
  101. package/dist/utils/image.d.ts.map +1 -1
  102. package/dist/utils/image.js +15 -0
  103. package/dist/utils/image.js.map +1 -1
  104. package/package.json +45 -11
  105. package/LICENSE +0 -21
@@ -0,0 +1,70 @@
1
+ import { type ChildProcess, type SpawnOptions } from "node:child_process";
2
+ export interface ErrorRow {
3
+ id: string;
4
+ project_id: string;
5
+ fingerprint: string;
6
+ status: string;
7
+ type: string | null;
8
+ message: string | null;
9
+ stack: string | null;
10
+ code_context: string | null;
11
+ runtime: string | null;
12
+ occurrences: number;
13
+ recurrence_count: number;
14
+ branch: string | null;
15
+ }
16
+ export type SpawnFn = (command: string, args: readonly string[], options: SpawnOptions) => ChildProcess;
17
+ export interface FixOptions {
18
+ ingestUrl?: string;
19
+ homeDir?: string;
20
+ fetchFn?: typeof fetch;
21
+ spawnFn?: SpawnFn;
22
+ ezcoderBin?: string;
23
+ inheritStdio?: boolean;
24
+ maxTurns?: number;
25
+ }
26
+ export interface FixResult {
27
+ errorId: string;
28
+ projectName: string;
29
+ branch: string;
30
+ outcome: "awaiting_review" | "failed";
31
+ reason: string;
32
+ }
33
+ export declare function fixError(errorId: string, opts?: FixOptions): Promise<FixResult>;
34
+ export interface QueueOptions extends FixOptions {
35
+ onProgress?: (msg: string) => void;
36
+ }
37
+ export declare function runQueue(opts?: QueueOptions): Promise<{
38
+ fixed: number;
39
+ failed: number;
40
+ total: number;
41
+ }>;
42
+ /**
43
+ * In-Ink fix flow: prepares the fix (fetch, mark in_progress, build prompt) so
44
+ * the caller can hand the prompt to its existing agent loop. Pair with
45
+ * `finalizePixelFix` after the agent run completes.
46
+ */
47
+ export interface PreparedPixelFix {
48
+ errorId: string;
49
+ projectId: string;
50
+ projectName: string;
51
+ projectPath: string;
52
+ branch: string;
53
+ prompt: string;
54
+ }
55
+ export interface PrepareOptions {
56
+ ingestUrl?: string;
57
+ homeDir?: string;
58
+ fetchFn?: typeof fetch;
59
+ }
60
+ export declare function preparePixelFix(errorId: string, opts?: PrepareOptions): Promise<PreparedPixelFix>;
61
+ export interface FinalizeOptions extends PrepareOptions {
62
+ spawnFn?: SpawnFn;
63
+ agentExitedCleanly?: boolean;
64
+ }
65
+ export declare function finalizePixelFix(prep: PreparedPixelFix, opts?: FinalizeOptions): Promise<{
66
+ outcome: "awaiting_review" | "failed";
67
+ reason: string;
68
+ }>;
69
+ export declare function buildAgentPrompt(error: ErrorRow, branch: string, projectDir?: string): string;
70
+ //# sourceMappingURL=pixel-fix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixel-fix.d.ts","sourceRoot":"","sources":["../../src/core/pixel-fix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,338 @@
1
+ import { spawn } from "node:child_process";
2
+ import { readFileSync, existsSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { join } from "node:path";
5
+ import chalk from "chalk";
6
+ import { DEFAULT_INGEST_URL } from "@prestyj/pixel";
7
+ import { PIXEL_FIX_SYSTEM_PROMPT } from "./pixel-fix-agent.js";
8
+ import { tryResolveStack } from "./source-maps.js";
9
+ export async function fixError(errorId, opts = {}) {
10
+ const ingestUrl = (opts.ingestUrl ?? DEFAULT_INGEST_URL).replace(/\/+$/, "");
11
+ const fetchFn = opts.fetchFn ?? fetch;
12
+ const home = opts.homeDir ?? homedir();
13
+ const owner = await resolveErrorOwner(fetchFn, ingestUrl, errorId, home);
14
+ const { error, project, secret } = owner;
15
+ const branch = `fix/pixel-${error.id}`;
16
+ await patchError(fetchFn, ingestUrl, error.id, { status: "in_progress", branch }, secret);
17
+ const exitCode = await runAgent({
18
+ cwd: project.path,
19
+ prompt: buildAgentPrompt(error, branch, project.path),
20
+ systemPrompt: PIXEL_FIX_SYSTEM_PROMPT,
21
+ spawnFn: opts.spawnFn ?? spawn,
22
+ ezcoderBin: opts.ezcoderBin ?? "ezcoder",
23
+ inheritStdio: opts.inheritStdio ?? true,
24
+ maxTurns: opts.maxTurns ?? 60,
25
+ });
26
+ const observed = await observeOutcome(project.path, branch, opts.spawnFn ?? spawn);
27
+ let outcome;
28
+ let reason;
29
+ if (exitCode !== 0) {
30
+ outcome = "failed";
31
+ reason = `Agent exited with code ${exitCode}`;
32
+ }
33
+ else if (!observed.branchExists) {
34
+ outcome = "failed";
35
+ reason = `Branch ${branch} was not created`;
36
+ }
37
+ else if (!observed.hasCommits) {
38
+ outcome = "failed";
39
+ reason = `Branch ${branch} has no new commits`;
40
+ }
41
+ else {
42
+ outcome = "awaiting_review";
43
+ reason = `Branch ${branch} created with ${observed.commitCount} commit(s) — ready for review`;
44
+ }
45
+ await patchError(fetchFn, ingestUrl, error.id, { status: outcome, branch }, secret);
46
+ return { errorId: error.id, projectName: project.name, branch, outcome, reason };
47
+ }
48
+ export async function runQueue(opts = {}) {
49
+ const ingestUrl = (opts.ingestUrl ?? DEFAULT_INGEST_URL).replace(/\/+$/, "");
50
+ const fetchFn = opts.fetchFn ?? fetch;
51
+ const home = opts.homeDir ?? homedir();
52
+ const log = opts.onProgress ?? ((msg) => console.log(msg));
53
+ const projectsPath = join(home, ".ezcoder", "projects.json");
54
+ if (!existsSync(projectsPath)) {
55
+ log(chalk.dim("No projects registered. Run `ezcoder pixel install` first."));
56
+ return { fixed: 0, failed: 0, total: 0 };
57
+ }
58
+ const projects = JSON.parse(readFileSync(projectsPath, "utf8"));
59
+ const queue = [];
60
+ for (const [projectId, project] of Object.entries(projects)) {
61
+ if (!project.secret)
62
+ continue; // legacy entry: cannot list, must re-install
63
+ try {
64
+ const res = await fetchFn(`${ingestUrl}/api/projects/${projectId}/errors?status=open`, {
65
+ headers: { authorization: `Bearer ${project.secret}` },
66
+ });
67
+ if (!res.ok)
68
+ continue;
69
+ const body = (await res.json());
70
+ for (const e of body.errors) {
71
+ queue.push({ projectName: project.name, errorId: e.id });
72
+ }
73
+ }
74
+ catch {
75
+ // skip unreachable project
76
+ }
77
+ }
78
+ if (queue.length === 0) {
79
+ log(chalk.hex("#4ade80")("No open errors. Queue is clean."));
80
+ return { fixed: 0, failed: 0, total: 0 };
81
+ }
82
+ log(chalk.bold(`Fixing ${queue.length} ${queue.length === 1 ? "error" : "errors"}...`));
83
+ log("");
84
+ let fixed = 0;
85
+ let failed = 0;
86
+ for (const item of queue) {
87
+ log(chalk.hex("#a78bfa").bold(`▸ ${item.projectName}`) + chalk.dim(` ${item.errorId}`));
88
+ try {
89
+ const result = await fixError(item.errorId, opts);
90
+ if (result.outcome === "awaiting_review") {
91
+ log(chalk.hex("#4ade80")(` ✓ ${result.reason}`));
92
+ fixed++;
93
+ }
94
+ else {
95
+ log(chalk.hex("#ef4444")(` ✗ ${result.reason}`));
96
+ failed++;
97
+ }
98
+ }
99
+ catch (err) {
100
+ log(chalk.hex("#ef4444")(` ✗ ${err instanceof Error ? err.message : String(err)}`));
101
+ failed++;
102
+ }
103
+ log("");
104
+ }
105
+ return { fixed, failed, total: queue.length };
106
+ }
107
+ export async function preparePixelFix(errorId, opts = {}) {
108
+ const ingestUrl = (opts.ingestUrl ?? DEFAULT_INGEST_URL).replace(/\/+$/, "");
109
+ const fetchFn = opts.fetchFn ?? fetch;
110
+ const home = opts.homeDir ?? homedir();
111
+ const owner = await resolveErrorOwner(fetchFn, ingestUrl, errorId, home);
112
+ const { error, project, secret } = owner;
113
+ const branch = `fix/pixel-${error.id}`;
114
+ await patchError(fetchFn, ingestUrl, error.id, { status: "in_progress", branch }, secret);
115
+ return {
116
+ errorId: error.id,
117
+ projectId: error.project_id,
118
+ projectName: project.name,
119
+ projectPath: project.path,
120
+ branch,
121
+ prompt: buildAgentPrompt(error, branch, project.path),
122
+ };
123
+ }
124
+ export async function finalizePixelFix(prep, opts = {}) {
125
+ const ingestUrl = (opts.ingestUrl ?? DEFAULT_INGEST_URL).replace(/\/+$/, "");
126
+ const fetchFn = opts.fetchFn ?? fetch;
127
+ const home = opts.homeDir ?? homedir();
128
+ const observed = await observeOutcome(prep.projectPath, prep.branch, opts.spawnFn ?? spawn);
129
+ let outcome;
130
+ let reason;
131
+ if (opts.agentExitedCleanly === false) {
132
+ outcome = "failed";
133
+ reason = "Agent did not finish cleanly";
134
+ }
135
+ else if (!observed.branchExists) {
136
+ outcome = "failed";
137
+ reason = `Branch ${prep.branch} was not created`;
138
+ }
139
+ else if (!observed.hasCommits) {
140
+ outcome = "failed";
141
+ reason = `Branch ${prep.branch} has no new commits`;
142
+ }
143
+ else {
144
+ outcome = "awaiting_review";
145
+ reason = `Branch ${prep.branch} created with ${observed.commitCount} commit(s) — ready for review`;
146
+ }
147
+ const secret = lookupProjectSecret(home, prep.projectId);
148
+ await patchError(fetchFn, ingestUrl, prep.errorId, { status: outcome, branch: prep.branch }, secret);
149
+ return { outcome, reason };
150
+ }
151
+ export function buildAgentPrompt(error, branch, projectDir) {
152
+ let stack = parseStackJson(error.stack);
153
+ // For browser stacks (URLs in the file field), try to resolve via local
154
+ // source maps before showing the agent. Resolved frames point at the
155
+ // user's TS/JS source — much more actionable than `app.min.js:1:48201`.
156
+ if (projectDir && stack.length > 0 && looksLikeMinifiedBrowserStack(stack)) {
157
+ stack = tryResolveStack(stack, projectDir);
158
+ }
159
+ const ctx = parseCodeContext(error.code_context);
160
+ const lines = [];
161
+ lines.push("An error has been identified in this project. Investigate and fix it.");
162
+ lines.push("");
163
+ lines.push(`Error: ${error.type ?? "Error"} — ${error.message ?? "(no message)"}`);
164
+ const topInApp = stack.find((f) => f.in_app) ?? stack[0];
165
+ if (topInApp)
166
+ lines.push(`Location: ${topInApp.file}:${topInApp.line}`);
167
+ if (ctx && ctx.lines.length > 0) {
168
+ lines.push("");
169
+ lines.push("Code at site:");
170
+ const startLine = ctx.error_line - Math.floor((ctx.lines.length - 1) / 2);
171
+ ctx.lines.forEach((line, i) => {
172
+ const lineNum = startLine + i;
173
+ const marker = lineNum === ctx.error_line ? ">" : " ";
174
+ lines.push(` ${marker}${String(lineNum).padStart(4)} | ${line}`);
175
+ });
176
+ }
177
+ if (stack.length > 0) {
178
+ lines.push("");
179
+ lines.push("Stack:");
180
+ for (const f of stack.slice(0, 10)) {
181
+ const lib = f.in_app ? "" : " (lib)";
182
+ lines.push(` ${f.fn || "<anon>"} ${f.file}:${f.line}${lib}`);
183
+ }
184
+ }
185
+ if (error.runtime)
186
+ lines.push(`\nRuntime: ${error.runtime}`);
187
+ lines.push(`Occurrences: ${error.occurrences}`);
188
+ if (error.recurrence_count > 0) {
189
+ lines.push("");
190
+ lines.push(`Recurrence: this is the ${ordinal(error.recurrence_count)} time this fingerprint has appeared after a previous fix was merged. The earlier fix did not hold — investigate why.`);
191
+ }
192
+ lines.push("");
193
+ lines.push("When done:");
194
+ lines.push(` 1. Create branch: ${branch}`);
195
+ lines.push(" 2. Commit the fix on that branch");
196
+ lines.push(" 3. Run the project's quality checks (only commit if they pass)");
197
+ lines.push("");
198
+ lines.push("Do not merge. Do not push. Do not switch back to main.");
199
+ return lines.join("\n");
200
+ }
201
+ /**
202
+ * Walks ~/.ezcoder/projects.json trying each project's bearer secret against
203
+ * GET /api/errors/:id until one returns 200. Wrong secrets get 403/404 from
204
+ * the server, so this scan exits as soon as the rightful owner is found.
205
+ *
206
+ * Bounded by the number of registered projects on this machine (typically
207
+ * single digits) so cost is negligible per fix.
208
+ */
209
+ async function resolveErrorOwner(fetchFn, ingestUrl, errorId, home) {
210
+ const projectsPath = join(home, ".ezcoder", "projects.json");
211
+ if (!existsSync(projectsPath)) {
212
+ throw new Error(`No projects mapping at ${projectsPath} — run \`ezcoder pixel install\` in the project first.`);
213
+ }
214
+ const projects = JSON.parse(readFileSync(projectsPath, "utf8"));
215
+ const ownersWithSecret = Object.entries(projects).filter(([, p]) => Boolean(p.secret));
216
+ if (ownersWithSecret.length === 0) {
217
+ throw new Error("No managed projects on this machine — run `ezcoder pixel install` in the project to refresh management access.");
218
+ }
219
+ for (const [, project] of ownersWithSecret) {
220
+ const res = await fetchFn(`${ingestUrl}/api/errors/${errorId}`, {
221
+ headers: { authorization: `Bearer ${project.secret}` },
222
+ });
223
+ if (res.ok) {
224
+ const error = (await res.json());
225
+ return { error, project, secret: project.secret };
226
+ }
227
+ // 401/403/404 → not this project; keep scanning.
228
+ }
229
+ throw new Error(`Error ${errorId} was not found in any registered project. Ensure the project is installed (\`ezcoder pixel install\`).`);
230
+ }
231
+ function lookupProjectSecret(home, projectId) {
232
+ const projectsPath = join(home, ".ezcoder", "projects.json");
233
+ if (!existsSync(projectsPath)) {
234
+ throw new Error(`No projects mapping at ${projectsPath} — run \`ezcoder pixel install\` in the project first.`);
235
+ }
236
+ const projects = JSON.parse(readFileSync(projectsPath, "utf8"));
237
+ const project = projects[projectId];
238
+ if (!project) {
239
+ throw new Error(`No local mapping for project ${projectId} in ${projectsPath}. Run \`ezcoder pixel install\` in the project's directory.`);
240
+ }
241
+ if (!project.secret) {
242
+ throw new Error(`Project ${projectId} is missing its bearer secret in ${projectsPath} — re-run \`ezcoder pixel install\` to refresh.`);
243
+ }
244
+ return project.secret;
245
+ }
246
+ async function patchError(fetchFn, ingestUrl, errorId, body, secret) {
247
+ const res = await fetchFn(`${ingestUrl}/api/errors/${errorId}`, {
248
+ method: "PATCH",
249
+ headers: {
250
+ "content-type": "application/json",
251
+ authorization: `Bearer ${secret}`,
252
+ },
253
+ body: JSON.stringify(body),
254
+ });
255
+ if (!res.ok)
256
+ throw new Error(`PATCH /api/errors/${errorId} failed: ${res.status}`);
257
+ }
258
+ async function runAgent(opts) {
259
+ return new Promise((resolve, reject) => {
260
+ const args = [
261
+ "--json",
262
+ "--max-turns",
263
+ String(opts.maxTurns),
264
+ "--system-prompt",
265
+ opts.systemPrompt,
266
+ opts.prompt,
267
+ ];
268
+ const child = opts.spawnFn(opts.ezcoderBin, args, {
269
+ cwd: opts.cwd,
270
+ stdio: opts.inheritStdio ? "inherit" : ["ignore", "pipe", "pipe"],
271
+ });
272
+ child.on("error", reject);
273
+ child.on("exit", (code) => resolve(code ?? 1));
274
+ });
275
+ }
276
+ async function observeOutcome(cwd, branch, spawnFn) {
277
+ const exists = await runGit(cwd, ["show-ref", "--verify", `refs/heads/${branch}`], spawnFn);
278
+ if (exists.code !== 0)
279
+ return { branchExists: false, hasCommits: false, commitCount: 0 };
280
+ let baseBranch = null;
281
+ for (const candidate of ["main", "master"]) {
282
+ const r = await runGit(cwd, ["show-ref", "--verify", `refs/heads/${candidate}`], spawnFn);
283
+ if (r.code === 0) {
284
+ baseBranch = candidate;
285
+ break;
286
+ }
287
+ }
288
+ if (!baseBranch)
289
+ return { branchExists: true, hasCommits: false, commitCount: 0 };
290
+ const ahead = await runGit(cwd, ["rev-list", "--count", `${baseBranch}..${branch}`], spawnFn);
291
+ const count = ahead.code === 0 ? parseInt(ahead.stdout.trim(), 10) || 0 : 0;
292
+ return { branchExists: true, hasCommits: count > 0, commitCount: count };
293
+ }
294
+ function runGit(cwd, args, spawnFn) {
295
+ return new Promise((resolve) => {
296
+ const child = spawnFn("git", args, { cwd, stdio: ["ignore", "pipe", "pipe"] });
297
+ let stdout = "";
298
+ let stderr = "";
299
+ child.stdout?.on("data", (b) => (stdout += b.toString()));
300
+ child.stderr?.on("data", (b) => (stderr += b.toString()));
301
+ child.on("error", () => resolve({ code: 1, stdout, stderr }));
302
+ child.on("exit", (code) => resolve({ code: code ?? 1, stdout, stderr }));
303
+ });
304
+ }
305
+ function looksLikeMinifiedBrowserStack(stack) {
306
+ // Heuristic: any frame whose file is an http(s) URL = browser stack.
307
+ // We try map resolution for these. Native Node paths don't need it.
308
+ return stack.some((f) => /^https?:\/\//.test(f.file));
309
+ }
310
+ function parseStackJson(raw) {
311
+ if (!raw)
312
+ return [];
313
+ try {
314
+ const parsed = JSON.parse(raw);
315
+ if (Array.isArray(parsed))
316
+ return parsed;
317
+ }
318
+ catch {
319
+ // ignore
320
+ }
321
+ return [];
322
+ }
323
+ function parseCodeContext(raw) {
324
+ if (!raw)
325
+ return null;
326
+ try {
327
+ return JSON.parse(raw);
328
+ }
329
+ catch {
330
+ return null;
331
+ }
332
+ }
333
+ function ordinal(n) {
334
+ const s = ["th", "st", "nd", "rd"];
335
+ const v = n % 100;
336
+ return `${n}${s[(v - 20) % 10] ?? s[v] ?? s[0]}`;
337
+ }
338
+ //# sourceMappingURL=pixel-fix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixel-fix.js","sourceRoot":"","sources":["../../src/core/pixel-fix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAwC,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AA6DnD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAe,EAAE,OAAmB,EAAE;IACnE,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;IAEvC,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACzE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAEzC,MAAM,MAAM,GAAG,aAAa,KAAK,CAAC,EAAE,EAAE,CAAC;IACvC,MAAM,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;IAE1F,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC;QAC9B,GAAG,EAAE,OAAO,CAAC,IAAI;QACjB,MAAM,EAAE,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;QACrD,YAAY,EAAE,uBAAuB;QACrC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK;QAC9B,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,SAAS;QACxC,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI;QACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;KAC9B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;IAEnF,IAAI,OAAqC,CAAC;IAC1C,IAAI,MAAc,CAAC;IACnB,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,GAAG,QAAQ,CAAC;QACnB,MAAM,GAAG,0BAA0B,QAAQ,EAAE,CAAC;IAChD,CAAC;SAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAClC,OAAO,GAAG,QAAQ,CAAC;QACnB,MAAM,GAAG,UAAU,MAAM,kBAAkB,CAAC;IAC9C,CAAC;SAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAChC,OAAO,GAAG,QAAQ,CAAC;QACnB,MAAM,GAAG,UAAU,MAAM,qBAAqB,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,iBAAiB,CAAC;QAC5B,MAAM,GAAG,UAAU,MAAM,iBAAiB,QAAQ,CAAC,WAAW,+BAA+B,CAAC;IAChG,CAAC;IAED,MAAM,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;IAEpF,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACnF,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAqB,EAAE;IAKpD,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAEnE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC,CAAC;QAC7E,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAC3C,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAmC,CAAC;IAElG,MAAM,KAAK,GAAoD,EAAE,CAAC;IAClE,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,SAAS,CAAC,6CAA6C;QAC5E,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,SAAS,iBAAiB,SAAS,qBAAqB,EAAE;gBACrF,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE,EAAE;aACvD,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,SAAS;YACtB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAsC,CAAC;YACrE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC7D,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAC3C,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC;IACxF,GAAG,CAAC,EAAE,CAAC,CAAC;IAER,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAClD,IAAI,MAAM,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;gBACzC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAClD,KAAK,EAAE,CAAC;YACV,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAClD,MAAM,EAAE,CAAC;YACX,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACrF,MAAM,EAAE,CAAC;QACX,CAAC;QACD,GAAG,CAAC,EAAE,CAAC,CAAC;IACV,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAChD,CAAC;AAsBD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,OAAuB,EAAE;IAEzB,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;IAEvC,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACzE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzC,MAAM,MAAM,GAAG,aAAa,KAAK,CAAC,EAAE,EAAE,CAAC;IAEvC,MAAM,UAAU,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;IAE1F,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,EAAE;QACjB,SAAS,EAAE,KAAK,CAAC,UAAU;QAC3B,WAAW,EAAE,OAAO,CAAC,IAAI;QACzB,WAAW,EAAE,OAAO,CAAC,IAAI;QACzB,MAAM;QACN,MAAM,EAAE,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;KACtD,CAAC;AACJ,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAsB,EACtB,OAAwB,EAAE;IAE1B,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;IAE5F,IAAI,OAAqC,CAAC;IAC1C,IAAI,MAAc,CAAC;IACnB,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK,EAAE,CAAC;QACtC,OAAO,GAAG,QAAQ,CAAC;QACnB,MAAM,GAAG,8BAA8B,CAAC;IAC1C,CAAC;SAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAClC,OAAO,GAAG,QAAQ,CAAC;QACnB,MAAM,GAAG,UAAU,IAAI,CAAC,MAAM,kBAAkB,CAAC;IACnD,CAAC;SAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAChC,OAAO,GAAG,QAAQ,CAAC;QACnB,MAAM,GAAG,UAAU,IAAI,CAAC,MAAM,qBAAqB,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,iBAAiB,CAAC;QAC5B,MAAM,GAAG,UAAU,IAAI,CAAC,MAAM,iBAAiB,QAAQ,CAAC,WAAW,+BAA+B,CAAC;IACrG,CAAC;IAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,UAAU,CACd,OAAO,EACP,SAAS,EACT,IAAI,CAAC,OAAO,EACZ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EACxC,MAAM,CACP,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAe,EAAE,MAAc,EAAE,UAAmB;IACnF,IAAI,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,wEAAwE;IACxE,qEAAqE;IACrE,wEAAwE;IACxE,IAAI,UAAU,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,6BAA6B,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3E,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAEjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;IACpF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,IAAI,OAAO,MAAM,KAAK,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC,CAAC;IAEnF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACzD,IAAI,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAExE,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1E,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC5B,MAAM,OAAO,GAAG,SAAS,GAAG,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,OAAO,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAChD,IAAI,KAAK,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CACR,2BAA2B,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,sHAAsH,CACjL,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;IAC/E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IAErE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,iBAAiB,CAC9B,OAAqB,EACrB,SAAiB,EACjB,OAAe,EACf,IAAY;IAEZ,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,0BAA0B,YAAY,wDAAwD,CAC/F,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAmC,CAAC;IAClG,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACvF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,gHAAgH,CACjH,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,gBAAgB,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,SAAS,eAAe,OAAO,EAAE,EAAE;YAC9D,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE,EAAE;SACvD,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAa,CAAC;YAC7C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAO,EAAE,CAAC;QACrD,CAAC;QACD,iDAAiD;IACnD,CAAC;IACD,MAAM,IAAI,KAAK,CACb,SAAS,OAAO,wGAAwG,CACzH,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,SAAiB;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,0BAA0B,YAAY,wDAAwD,CAC/F,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAmC,CAAC;IAClG,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,gCAAgC,SAAS,OAAO,YAAY,6DAA6D,CAC1H,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,WAAW,SAAS,oCAAoC,YAAY,iDAAiD,CACtH,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,OAAqB,EACrB,SAAiB,EACjB,OAAe,EACf,IAAyC,EACzC,MAAc;IAEd,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,SAAS,eAAe,OAAO,EAAE,EAAE;QAC9D,MAAM,EAAE,OAAO;QACf,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,MAAM,EAAE;SAClC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AACrF,CAAC;AAYD,KAAK,UAAU,QAAQ,CAAC,IAAqB;IAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG;YACX,QAAQ;YACR,aAAa;YACb,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;YACrB,iBAAiB;YACjB,IAAI,CAAC,YAAY;YACjB,IAAI,CAAC,MAAM;SACZ,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;YAChD,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClE,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC;AAQD,KAAK,UAAU,cAAc,CAC3B,GAAW,EACX,MAAc,EACd,OAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5F,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IAEzF,IAAI,UAAU,GAAkB,IAAI,CAAC;IACrC,KAAK,MAAM,SAAS,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1F,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACjB,UAAU,GAAG,SAAS,CAAC;YACvB,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IAElF,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,UAAU,KAAK,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,GAAG,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAC3E,CAAC;AAQD,SAAS,MAAM,CAAC,GAAW,EAAE,IAAc,EAAE,OAAgB;IAC3D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/E,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAC9D,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,6BAA6B,CAAC,KAAmB;IACxD,qEAAqE;IACrE,oEAAoE;IACpE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,cAAc,CAAC,GAAkB;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,MAAsB,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAkB;IAC1C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACxB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAClB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACnD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pixel-fix.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixel-fix.test.d.ts","sourceRoot":"","sources":["../../src/core/pixel-fix.test.ts"],"names":[],"mappings":""}