@hardlydifficult/repo-processor 1.0.141 → 1.0.142

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.
@@ -1,175 +1,260 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RepoProcessor = void 0;
4
+ exports.createRepoProcessorForTests = createRepoProcessorForTests;
4
5
  const collections_1 = require("@hardlydifficult/collections");
5
6
  const github_1 = require("@hardlydifficult/github");
6
7
  const text_1 = require("@hardlydifficult/text");
8
+ const GitYamlStore_js_1 = require("./GitYamlStore.js");
9
+ const RepoWatcher_js_1 = require("./RepoWatcher.js");
7
10
  const resolveDirectories_js_1 = require("./resolveDirectories.js");
8
- /**
9
- * Generic pipeline for incrementally processing a GitHub repo's file tree.
10
- *
11
- * Pipeline: init fetch tree filter → diff → process changed files →
12
- * remove deleted files → resolve stale dirs → process dirs bottom-up → commit.
13
- */
11
+ function parseRepoReference(value, label) {
12
+ const parsed = (0, github_1.parseGitHubRepoReference)(value);
13
+ if (parsed === null) {
14
+ throw new Error(`Invalid ${label}: ${value}. Expected "owner/repo" or a GitHub URL.`);
15
+ }
16
+ return {
17
+ owner: parsed.owner,
18
+ name: parsed.repo,
19
+ fullName: `${parsed.owner}/${parsed.repo}`,
20
+ };
21
+ }
22
+ function formatFailures(label, failures) {
23
+ const details = failures
24
+ .map((failure) => ` ${failure.path}: ${(0, text_1.getErrorMessage)(failure.reason)}`)
25
+ .join("\n");
26
+ return new Error(`${String(failures.length)} ${label} failed to process:\n${details}`);
27
+ }
28
+ /** Incrementally processes repository files/directories and stores derived results. */
14
29
  class RepoProcessor {
15
- github;
30
+ static open(options) {
31
+ const repo = parseRepoReference(options.repo, "repo");
32
+ const resultsRepo = parseRepoReference(options.results.repo, "results repo");
33
+ const githubToken = options.githubToken ?? process.env.GH_PAT ?? process.env.GITHUB_TOKEN;
34
+ const github = new github_1.GitHubClient({ token: githubToken });
35
+ const sourceRepo = github.repo(repo.fullName);
36
+ const { processDirectory } = options;
37
+ const store = new GitYamlStore_js_1.GitYamlStore({
38
+ sourceRepo: repo,
39
+ resultsRepo,
40
+ localPath: options.results.directory,
41
+ root: options.results.root ?? "repos",
42
+ branch: options.results.branch,
43
+ authToken: githubToken,
44
+ gitUser: options.results.gitUser,
45
+ });
46
+ return Promise.resolve(new RepoProcessor({
47
+ repo,
48
+ repoClient: {
49
+ getFileTree(ref) {
50
+ return sourceRepo.tree(ref);
51
+ },
52
+ getFileContent(filePath, ref) {
53
+ return sourceRepo.read(filePath, ref);
54
+ },
55
+ },
56
+ store,
57
+ ref: options.ref,
58
+ concurrency: options.concurrency ?? 5,
59
+ include: options.include ?? (() => true),
60
+ processFile: (input) => options.processFile(input),
61
+ processDirectory: processDirectory === undefined
62
+ ? undefined
63
+ : (input) => processDirectory(input),
64
+ }));
65
+ }
66
+ repoRef;
67
+ repoClient;
16
68
  store;
17
- callbacks;
69
+ ref;
18
70
  concurrency;
19
- branch;
20
- constructor(config) {
21
- this.github = config.githubClient;
22
- this.store = config.store;
23
- this.callbacks = config.callbacks;
24
- this.concurrency = config.concurrency ?? 5;
25
- this.branch = config.branch ?? "main";
71
+ include;
72
+ processFileHandler;
73
+ processDirectoryHandler;
74
+ constructor(internals) {
75
+ this.repoRef = internals.repo;
76
+ this.repoClient = internals.repoClient;
77
+ this.store = internals.store;
78
+ this.ref = internals.ref;
79
+ this.concurrency = internals.concurrency;
80
+ this.include = internals.include;
81
+ const { processDirectory } = internals;
82
+ this.processFileHandler = (input) => internals.processFile(input);
83
+ this.processDirectoryHandler =
84
+ processDirectory === undefined
85
+ ? undefined
86
+ : (input) => processDirectory(input);
87
+ }
88
+ get repo() {
89
+ return this.repoRef.fullName;
26
90
  }
27
- async run(owner, repo, onProgress) {
91
+ async run(options = {}) {
92
+ const { onProgress } = options;
28
93
  const emitProgress = (phase, message, filesTotal, filesCompleted, dirsTotal, dirsCompleted) => {
29
94
  onProgress?.({
30
95
  phase,
31
96
  message,
32
- filesTotal,
33
- filesCompleted,
34
- dirsTotal,
35
- dirsCompleted,
97
+ files: { total: filesTotal, completed: filesCompleted },
98
+ directories: { total: dirsTotal, completed: dirsCompleted },
36
99
  });
37
100
  };
38
- // 1. Init store
39
- emitProgress("loading", "Initializing store...", 0, 0, 0, 0);
40
- await this.store.ensureReady?.(owner, repo);
41
- // 2. Fetch tree
42
- emitProgress("loading", "Fetching file tree...", 0, 0, 0, 0);
43
- const { entries, rootSha } = await this.github
44
- .repo(owner, repo)
45
- .getFileTree();
101
+ emitProgress("loading", "Initializing results store...", 0, 0, 0, 0);
102
+ await this.store.ensureReady();
103
+ emitProgress("loading", "Fetching source tree...", 0, 0, 0, 0);
104
+ const { entries, rootSha } = await this.repoClient.getFileTree(this.ref);
46
105
  const tree = [
47
106
  ...entries,
48
107
  { path: "", type: "tree", sha: rootSha },
49
108
  ];
50
- // 3. Filter blobs
51
- const blobs = entries.filter((e) => e.type === "blob" && this.callbacks.shouldProcess(e));
52
- // 4. Diff
53
- const currentManifest = await this.store.getFileManifest(owner, repo);
109
+ const blobs = entries.filter((entry) => {
110
+ if (entry.type !== "blob") {
111
+ return false;
112
+ }
113
+ return this.include({
114
+ path: entry.path,
115
+ sha: entry.sha,
116
+ size: entry.size,
117
+ });
118
+ });
119
+ const currentManifest = await this.store.getFileManifest();
54
120
  const diff = (0, github_1.diffTree)(blobs, currentManifest);
55
121
  const filesTotal = diff.changedFiles.length;
56
122
  let filesCompleted = 0;
57
- emitProgress("files", `Processing ${String(filesTotal)} files...`, filesTotal, 0, diff.staleDirs.length, 0);
58
- // 5. Process changed files in batches
123
+ emitProgress("files", filesTotal === 0
124
+ ? "No files to process."
125
+ : `Processing ${String(filesTotal)} files...`, filesTotal, 0, 0, 0);
126
+ const fileFailures = [];
59
127
  for (const batch of (0, collections_1.inBatches)(diff.changedFiles, this.concurrency)) {
60
128
  const results = await Promise.allSettled(batch.map(async (entry) => {
61
- const content = await this.github
62
- .repo(owner, repo)
63
- .getFileContent(entry.path);
64
- const result = await this.callbacks.processFile({ entry, content });
65
- await this.store.writeFileResult(owner, repo, entry.path, entry.sha, result);
129
+ const content = await this.repoClient.getFileContent(entry.path, this.ref);
130
+ const result = await this.processFileHandler({
131
+ repo: this.repo,
132
+ path: entry.path,
133
+ sha: entry.sha,
134
+ content,
135
+ });
136
+ await this.store.writeFileResult(entry.path, entry.sha, result);
66
137
  }));
67
- const failures = [];
68
138
  let succeededCount = 0;
69
- for (let i = 0; i < results.length; i++) {
70
- const result = results[i];
139
+ for (let index = 0; index < results.length; index++) {
140
+ const result = results[index];
71
141
  filesCompleted++;
72
142
  if (result.status === "rejected") {
73
- failures.push({
74
- path: batch[i]?.path ?? `unknown-${String(i)}`,
143
+ fileFailures.push({
144
+ path: batch[index]?.path ?? `unknown-${String(index)}`,
75
145
  reason: result.reason,
76
146
  });
77
147
  }
78
148
  else {
79
149
  succeededCount++;
80
150
  }
81
- emitProgress("files", `Files: ${String(filesCompleted)}/${String(filesTotal)}`, filesTotal, filesCompleted, diff.staleDirs.length, 0);
82
- }
83
- if (failures.length > 0) {
84
- const details = failures
85
- .map((f) => ` ${f.path}: ${(0, text_1.getErrorMessage)(f.reason)}`)
86
- .join("\n");
87
- throw new Error(`${String(failures.length)} file(s) failed to process:\n${details}`);
151
+ emitProgress("files", `Files: ${String(filesCompleted)}/${String(filesTotal)}`, filesTotal, filesCompleted, 0, 0);
88
152
  }
89
153
  if (succeededCount > 0) {
90
- await this.store.commitBatch(owner, repo, succeededCount);
154
+ await this.store.commitBatch(this.repo, succeededCount);
91
155
  }
92
156
  }
93
- // 6. Remove deleted files
157
+ if (fileFailures.length > 0) {
158
+ throw formatFailures("file(s)", fileFailures);
159
+ }
94
160
  for (const removedPath of diff.removedFiles) {
95
- await this.store.deleteFileResult(owner, repo, removedPath);
161
+ await this.store.deleteFileResult(removedPath);
96
162
  }
97
163
  if (diff.removedFiles.length > 0) {
98
- await this.store.commitBatch(owner, repo, diff.removedFiles.length);
164
+ await this.store.commitBatch(this.repo, diff.removedFiles.length);
99
165
  }
100
- // 7. Resolve stale directories
101
- const allFilePaths = blobs.map((b) => b.path);
102
- const allDirs = await (0, resolveDirectories_js_1.resolveStaleDirectories)(owner, repo, diff.staleDirs, allFilePaths, tree, this.store);
103
166
  let dirsCompleted = 0;
104
- if (allDirs.length > 0) {
105
- emitProgress("directories", `Processing ${String(allDirs.length)} directories...`, filesTotal, filesCompleted, allDirs.length, 0);
106
- // 8. Process directories bottom-up by depth
167
+ if (this.processDirectoryHandler !== undefined) {
168
+ const allFilePaths = blobs.map((blob) => blob.path);
169
+ const allDirs = await (0, resolveDirectories_js_1.resolveStaleDirectories)(diff.staleDirs, allFilePaths, tree, this.store);
170
+ emitProgress("directories", allDirs.length === 0
171
+ ? "No directories to process."
172
+ : `Processing ${String(allDirs.length)} directories...`, filesTotal, filesCompleted, allDirs.length, 0);
173
+ const directoryFailures = [];
107
174
  for (const dirsAtDepth of (0, collections_1.bottomUp)(allDirs)) {
108
- let dirsInDepthGroup = 0;
175
+ let succeededCount = 0;
109
176
  for (const batch of (0, collections_1.inBatches)(dirsAtDepth, this.concurrency)) {
110
177
  const results = await Promise.allSettled(batch.map(async (dirPath) => {
111
- const ctx = this.buildDirectoryContext(dirPath, tree, allFilePaths);
112
- const result = await this.callbacks.processDirectory(ctx);
113
- await this.store.writeDirResult(owner, repo, dirPath, ctx.sha, result);
178
+ const directory = this.buildDirectoryInput(dirPath, tree, allFilePaths);
179
+ const result = await this.processDirectoryHandler?.(directory);
180
+ await this.store.writeDirResult(dirPath, directory.sha, result);
114
181
  }));
115
- const failures = [];
116
- for (let i = 0; i < results.length; i++) {
117
- const result = results[i];
182
+ for (let index = 0; index < results.length; index++) {
183
+ const result = results[index];
118
184
  dirsCompleted++;
119
- dirsInDepthGroup++;
120
185
  if (result.status === "rejected") {
121
- failures.push({
122
- path: batch[i] ?? `unknown-${String(i)}`,
186
+ directoryFailures.push({
187
+ path: batch[index] ?? `unknown-${String(index)}`,
123
188
  reason: result.reason,
124
189
  });
125
190
  }
126
- emitProgress("directories", `Dirs: ${String(dirsCompleted)}/${String(allDirs.length)}`, filesTotal, filesCompleted, allDirs.length, dirsCompleted);
127
- }
128
- if (failures.length > 0) {
129
- const details = failures
130
- .map((f) => ` ${f.path}: ${(0, text_1.getErrorMessage)(f.reason)}`)
131
- .join("\n");
132
- throw new Error(`${String(failures.length)} directory(ies) failed to process:\n${details}`);
191
+ else {
192
+ succeededCount++;
193
+ }
194
+ emitProgress("directories", `Directories: ${String(dirsCompleted)}/${String(allDirs.length)}`, filesTotal, filesCompleted, allDirs.length, dirsCompleted);
133
195
  }
134
196
  }
135
- if (dirsInDepthGroup > 0) {
136
- await this.store.commitBatch(owner, repo, dirsInDepthGroup);
197
+ if (succeededCount > 0) {
198
+ await this.store.commitBatch(this.repo, succeededCount);
137
199
  }
138
200
  }
201
+ if (directoryFailures.length > 0) {
202
+ throw formatFailures("directory(ies)", directoryFailures);
203
+ }
139
204
  }
140
- // 9. Final safety commit
141
- emitProgress("committing", "Final commit...", filesTotal, filesCompleted, allDirs.length, dirsCompleted);
142
- await this.store.commitBatch(owner, repo, 0);
205
+ emitProgress("committing", "Finalizing results...", filesTotal, filesCompleted, this.processDirectoryHandler === undefined ? 0 : dirsCompleted, dirsCompleted);
206
+ await this.store.commitBatch(this.repo, 0);
143
207
  return {
144
- filesProcessed: filesCompleted,
145
- filesRemoved: diff.removedFiles.length,
146
- dirsProcessed: dirsCompleted,
208
+ repo: this.repo,
209
+ sourceSha: rootSha,
210
+ processedFiles: filesCompleted,
211
+ removedFiles: diff.removedFiles.length,
212
+ processedDirectories: dirsCompleted,
147
213
  };
148
214
  }
149
- buildDirectoryContext(dirPath, tree, allFilePaths) {
150
- const dirTreeEntry = tree.find((e) => e.type === "tree" && e.path === dirPath);
151
- const sha = dirTreeEntry?.sha ?? "";
215
+ async readFileResult(filePath, schema) {
216
+ return this.store.readFileResult(filePath, schema);
217
+ }
218
+ async readDirectoryResult(dirPath, schema) {
219
+ return this.store.readDirectoryResult(dirPath, schema);
220
+ }
221
+ async watch(options = {}) {
222
+ return RepoWatcher_js_1.RepoWatcher.open(this, options);
223
+ }
224
+ buildDirectoryInput(dirPath, tree, allFilePaths) {
225
+ const dirTreeEntry = tree.find((entry) => entry.type === "tree" && entry.path === dirPath);
152
226
  const prefix = dirPath === "" ? "" : `${dirPath}/`;
153
- const subtreeFilePaths = allFilePaths.filter((fp) => dirPath === "" || fp.startsWith(prefix));
154
- // Build immediate children list
227
+ const files = allFilePaths.filter((filePath) => dirPath === "" || filePath.startsWith(prefix));
155
228
  const seen = new Set();
156
229
  const children = [];
157
- for (const fp of subtreeFilePaths) {
158
- const relative = prefix ? fp.slice(prefix.length) : fp;
230
+ for (const filePath of files) {
231
+ const relative = prefix === "" ? filePath : filePath.slice(prefix.length);
159
232
  const slashIndex = relative.indexOf("/");
160
- const isDir = slashIndex !== -1;
161
- const childName = isDir ? relative.slice(0, slashIndex) : relative;
162
- if (!seen.has(childName)) {
163
- seen.add(childName);
164
- children.push({
165
- name: childName,
166
- isDir,
167
- fullPath: dirPath === "" ? childName : `${dirPath}/${childName}`,
168
- });
233
+ const isDirectory = slashIndex !== -1;
234
+ const childName = isDirectory ? relative.slice(0, slashIndex) : relative;
235
+ if (seen.has(childName)) {
236
+ continue;
169
237
  }
238
+ seen.add(childName);
239
+ children.push({
240
+ name: childName,
241
+ path: dirPath === "" ? childName : `${dirPath}/${childName}`,
242
+ type: isDirectory ? "directory" : "file",
243
+ });
170
244
  }
171
- return { path: dirPath, sha, subtreeFilePaths, children, tree };
245
+ return {
246
+ repo: this.repo,
247
+ path: dirPath,
248
+ sha: dirTreeEntry?.sha ?? "",
249
+ files,
250
+ children,
251
+ };
172
252
  }
173
253
  }
174
254
  exports.RepoProcessor = RepoProcessor;
255
+ /** Creates a RepoProcessor instance using test doubles for internal dependencies. */
256
+ function createRepoProcessorForTests(internals) {
257
+ const RepoProcessorCtor = RepoProcessor;
258
+ return new RepoProcessorCtor(internals);
259
+ }
175
260
  //# sourceMappingURL=RepoProcessor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RepoProcessor.js","sourceRoot":"","sources":["../src/RepoProcessor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RepoProcessor.js","sourceRoot":"","sources":["../src/RepoProcessor.ts"],"names":[],"mappings":"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"}
@@ -1,68 +1,25 @@
1
- import { type StateTrackerEvent, type StorageAdapter } from "@hardlydifficult/state-tracker";
2
- export interface RepoWatcherConfig<TResult> {
3
- /** Key used for persisting state to disk or adapter. */
4
- stateKey: string;
5
- /** Directory where state is persisted (not needed when storageAdapter is provided). */
6
- stateDirectory?: string;
7
- /** Custom storage adapter (takes priority over stateDirectory). */
8
- storageAdapter?: StorageAdapter;
9
- /** Auto-save interval in milliseconds. Default 5000. */
10
- autoSaveMs?: number;
11
- /** The work to run for a repo. */
12
- run: (owner: string, name: string) => Promise<TResult>;
13
- /** Called after a successful run. */
14
- onComplete?: (owner: string, name: string, result: TResult, sha: string) => void;
15
- /** Called when a run fails. */
16
- onError?: (owner: string, name: string, error: unknown) => void;
17
- /** Logger/event callback. */
18
- onEvent?: (event: StateTrackerEvent) => void;
19
- /** Number of attempts (initial + retries). Default 1 (no retry). */
20
- maxAttempts?: number;
21
- }
22
- /**
23
- * Watches for SHA changes on GitHub repos and triggers processing.
24
- *
25
- * Handles state persistence (last-processed SHA per repo), concurrent run
26
- * prevention, pending SHA re-triggers, and manual triggers. Consumers
27
- * provide the `run` callback containing domain-specific logic.
28
- */
29
- export declare class RepoWatcher<TResult = void> {
1
+ import type { RepoProcessor } from "./RepoProcessor.js";
2
+ import type { RepoProcessorRunResult, RepoWatcherOptions } from "./types.js";
3
+ /** Watches for repository updates and schedules processor runs with retries. */
4
+ export declare class RepoWatcher<TFileResult = unknown, TDirResult = never> {
5
+ static open<TFileResult, TDirResult>(processor: RepoProcessor<TFileResult, TDirResult>, options?: RepoWatcherOptions): Promise<RepoWatcher<TFileResult, TDirResult>>;
6
+ private readonly processor;
30
7
  private readonly stateTracker;
31
- private readonly running;
32
- private readonly pendingSha;
33
- private readonly config;
8
+ private readonly onComplete;
9
+ private readonly onError;
10
+ private readonly onEvent;
34
11
  private readonly maxAttempts;
35
- constructor(config: RepoWatcherConfig<TResult>);
36
- /** Load persisted state from disk. */
37
- init(): Promise<void>;
38
- /**
39
- * Handle a push event. Compares the SHA against tracked state,
40
- * queues processing if changed, stores as pending if already running.
41
- */
42
- handlePush(owner: string, name: string, sha: string): void;
43
- /**
44
- * Queue a run unconditionally (no SHA comparison).
45
- * Skips if already running. Returns false if skipped.
46
- */
47
- trigger(owner: string, name: string): boolean;
48
- /**
49
- * Run processing synchronously (blocks until complete).
50
- * Returns an error if already running.
51
- */
52
- triggerManual(owner: string, name: string): Promise<{
53
- success: true;
54
- result: TResult;
55
- } | {
56
- success: false;
57
- reason: string;
58
- }>;
59
- /** Check if a repo is currently being processed. */
60
- isRunning(owner: string, name: string): boolean;
61
- /** Get the last processed SHA for a repo key. */
62
- getLastSha(key: string): string | undefined;
63
- /** Persist a processed SHA for a repo key. */
64
- setLastSha(key: string, sha: string): void;
12
+ private running;
13
+ private pendingSha;
14
+ private constructor();
15
+ handlePush(sha: string): void;
16
+ runNow(): Promise<RepoProcessorRunResult>;
17
+ isRunning(): boolean;
18
+ getLastSha(): string | undefined;
19
+ setLastSha(sha: string): void;
65
20
  private queueRun;
21
+ private completeRun;
22
+ private flushPendingRun;
66
23
  private executeWithRetry;
67
24
  }
68
25
  //# sourceMappingURL=RepoWatcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RepoWatcher.d.ts","sourceRoot":"","sources":["../src/RepoWatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACpB,MAAM,gCAAgC,CAAC;AAExC,MAAM,WAAW,iBAAiB,CAAC,OAAO;IACxC,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mEAAmE;IACnE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,qCAAqC;IACrC,UAAU,CAAC,EAAE,CACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,MAAM,KACR,IAAI,CAAC;IACV,+BAA+B;IAC/B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE,6BAA6B;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;;;;;GAMG;AACH,qBAAa,WAAW,CAAC,OAAO,GAAG,IAAI;IACrC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6B;IACxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC;IAc9C,sCAAsC;IAChC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAe1D;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAS7C;;;OAGG;IACG,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CACR;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CACxE;IAsBD,oDAAoD;IACpD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAI/C,iDAAiD;IACjD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3C,8CAA8C;IAC9C,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAc1C,OAAO,CAAC,QAAQ;YAyBF,gBAAgB;CA0B/B"}
1
+ {"version":3,"file":"RepoWatcher.d.ts","sourceRoot":"","sources":["../src/RepoWatcher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAU7E,gFAAgF;AAChF,qBAAa,WAAW,CAAC,WAAW,GAAG,OAAO,EAAE,UAAU,GAAG,KAAK;WACnD,IAAI,CAAC,WAAW,EAAE,UAAU,EACvC,SAAS,EAAE,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,EACjD,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAYhD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyC;IACnE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6B;IAC1D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAEb;IACd,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAqB;IAEvC,OAAO;IAaP,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAavB,MAAM,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAmB/C,SAAS,IAAI,OAAO;IAIpB,UAAU,IAAI,MAAM,GAAG,SAAS;IAIhC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI7B,OAAO,CAAC,QAAQ;IAgBhB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,eAAe;YAeT,gBAAgB;CAuB/B"}