@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.
- package/README.md +126 -274
- package/dist/GitYamlStore.d.ts +27 -40
- package/dist/GitYamlStore.d.ts.map +1 -1
- package/dist/GitYamlStore.js +155 -142
- package/dist/GitYamlStore.js.map +1 -1
- package/dist/RepoProcessor.d.ts +22 -22
- package/dist/RepoProcessor.d.ts.map +1 -1
- package/dist/RepoProcessor.js +188 -103
- package/dist/RepoProcessor.js.map +1 -1
- package/dist/RepoWatcher.d.ts +19 -62
- package/dist/RepoWatcher.d.ts.map +1 -1
- package/dist/RepoWatcher.js +74 -103
- package/dist/RepoWatcher.js.map +1 -1
- package/dist/index.d.ts +1 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -5
- package/dist/index.js.map +1 -1
- package/dist/internalTypes.d.ts +42 -0
- package/dist/internalTypes.d.ts.map +1 -0
- package/dist/internalTypes.js +3 -0
- package/dist/internalTypes.js.map +1 -0
- package/dist/resolveDirectories.d.ts +3 -12
- package/dist/resolveDirectories.d.ts.map +1 -1
- package/dist/resolveDirectories.js +9 -24
- package/dist/resolveDirectories.js.map +1 -1
- package/dist/types.d.ts +66 -56
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -11
package/dist/GitYamlStore.js
CHANGED
|
@@ -1,37 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
@@ -40,67 +7,72 @@ exports.GitYamlStore = void 0;
|
|
|
40
7
|
const promises_1 = require("node:fs/promises");
|
|
41
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
42
9
|
const text_1 = require("@hardlydifficult/text");
|
|
10
|
+
const simple_git_1 = require("simple-git");
|
|
43
11
|
const yaml_1 = require("yaml");
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
*/
|
|
12
|
+
function normalizeResult(result, sha) {
|
|
13
|
+
if (result !== null && typeof result === "object" && !Array.isArray(result)) {
|
|
14
|
+
return { ...result, sha };
|
|
15
|
+
}
|
|
16
|
+
return { value: result, sha };
|
|
17
|
+
}
|
|
18
|
+
/** Persists file and directory processing results as YAML in a Git repo. */
|
|
52
19
|
class GitYamlStore {
|
|
53
|
-
|
|
20
|
+
sourceRepo;
|
|
54
21
|
cloneUrl;
|
|
22
|
+
localPath;
|
|
23
|
+
root;
|
|
55
24
|
authToken;
|
|
56
|
-
|
|
57
|
-
|
|
25
|
+
requestedBranch;
|
|
26
|
+
configuredGitUser;
|
|
58
27
|
initialized = false;
|
|
28
|
+
activeBranch;
|
|
29
|
+
gitUser;
|
|
59
30
|
constructor(config) {
|
|
60
|
-
this.
|
|
31
|
+
this.sourceRepo = config.sourceRepo;
|
|
32
|
+
this.cloneUrl = `https://github.com/${config.resultsRepo.fullName}.git`;
|
|
61
33
|
this.localPath = config.localPath;
|
|
62
|
-
this.
|
|
63
|
-
this.authToken = config.authToken
|
|
64
|
-
this.
|
|
34
|
+
this.root = config.root;
|
|
35
|
+
this.authToken = config.authToken;
|
|
36
|
+
this.requestedBranch = config.branch;
|
|
37
|
+
this.configuredGitUser = config.gitUser;
|
|
65
38
|
}
|
|
66
|
-
// ---------------------------------------------------------------------------
|
|
67
|
-
// ProcessorStore implementation
|
|
68
|
-
// ---------------------------------------------------------------------------
|
|
69
39
|
async ensureReady() {
|
|
70
40
|
if (this.initialized) {
|
|
71
41
|
return;
|
|
72
42
|
}
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
await git.pull("origin", "main");
|
|
79
|
-
}
|
|
80
|
-
catch {
|
|
81
|
-
// Pull failed (e.g. offline), continue with local state
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
43
|
+
const gitDir = node_path_1.default.join(this.localPath, ".git");
|
|
44
|
+
const hasClone = await (0, promises_1.stat)(gitDir)
|
|
45
|
+
.then(() => true)
|
|
46
|
+
.catch(() => false);
|
|
47
|
+
if (!hasClone) {
|
|
85
48
|
await (0, promises_1.mkdir)(node_path_1.default.dirname(this.localPath), { recursive: true });
|
|
86
|
-
|
|
87
|
-
await git.clone(this.getAuthenticatedUrl(), this.localPath);
|
|
49
|
+
await (0, simple_git_1.simpleGit)().clone(this.getAuthenticatedUrl(), this.localPath);
|
|
88
50
|
}
|
|
51
|
+
const git = (0, simple_git_1.simpleGit)(this.localPath);
|
|
52
|
+
this.activeBranch = await this.resolveBranch(git);
|
|
53
|
+
await this.checkoutBranch(git, this.activeBranch);
|
|
54
|
+
try {
|
|
55
|
+
await git.pull("origin", this.activeBranch);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Pull can fail offline or when the branch has no remote tracking yet.
|
|
59
|
+
}
|
|
60
|
+
this.gitUser = await this.resolveGitUser(git);
|
|
89
61
|
this.initialized = true;
|
|
90
62
|
}
|
|
91
|
-
async getFileManifest(
|
|
92
|
-
const dir = this.getResultDir(
|
|
63
|
+
async getFileManifest() {
|
|
64
|
+
const dir = this.getResultDir();
|
|
93
65
|
const manifest = {};
|
|
94
66
|
try {
|
|
95
67
|
await this.walkDir(dir, dir, manifest);
|
|
96
68
|
}
|
|
97
69
|
catch {
|
|
98
|
-
//
|
|
70
|
+
// First run: no results yet.
|
|
99
71
|
}
|
|
100
72
|
return manifest;
|
|
101
73
|
}
|
|
102
|
-
async getDirSha(
|
|
103
|
-
const filePath = node_path_1.default.join(this.getResultDir(
|
|
74
|
+
async getDirSha(dirPath) {
|
|
75
|
+
const filePath = node_path_1.default.join(this.getResultDir(), dirPath, "dir.yml");
|
|
104
76
|
try {
|
|
105
77
|
const content = await (0, promises_1.readFile)(filePath, "utf-8");
|
|
106
78
|
const parsed = (0, yaml_1.parse)(content);
|
|
@@ -110,70 +82,64 @@ class GitYamlStore {
|
|
|
110
82
|
return null;
|
|
111
83
|
}
|
|
112
84
|
}
|
|
113
|
-
async writeFileResult(
|
|
114
|
-
const
|
|
115
|
-
const yamlContent = (0, text_1.formatYaml)(data);
|
|
116
|
-
const fullPath = node_path_1.default.join(this.getResultDir(owner, repo), `${filePath}.yml`);
|
|
85
|
+
async writeFileResult(filePath, sha, result) {
|
|
86
|
+
const fullPath = node_path_1.default.join(this.getResultDir(), `${filePath}.yml`);
|
|
117
87
|
await (0, promises_1.mkdir)(node_path_1.default.dirname(fullPath), { recursive: true });
|
|
118
|
-
await (0, promises_1.writeFile)(fullPath,
|
|
88
|
+
await (0, promises_1.writeFile)(fullPath, (0, text_1.formatYaml)(normalizeResult(result, sha)), "utf-8");
|
|
119
89
|
}
|
|
120
|
-
async writeDirResult(
|
|
121
|
-
const
|
|
122
|
-
const yamlContent = (0, text_1.formatYaml)(data);
|
|
123
|
-
const fullPath = node_path_1.default.join(this.getResultDir(owner, repo), dirPath, "dir.yml");
|
|
90
|
+
async writeDirResult(dirPath, sha, result) {
|
|
91
|
+
const fullPath = node_path_1.default.join(this.getResultDir(), dirPath, "dir.yml");
|
|
124
92
|
await (0, promises_1.mkdir)(node_path_1.default.dirname(fullPath), { recursive: true });
|
|
125
|
-
await (0, promises_1.writeFile)(fullPath,
|
|
93
|
+
await (0, promises_1.writeFile)(fullPath, (0, text_1.formatYaml)(normalizeResult(result, sha)), "utf-8");
|
|
126
94
|
}
|
|
127
|
-
async deleteFileResult(
|
|
128
|
-
const fullPath = node_path_1.default.join(this.getResultDir(
|
|
95
|
+
async deleteFileResult(filePath) {
|
|
96
|
+
const fullPath = node_path_1.default.join(this.getResultDir(), `${filePath}.yml`);
|
|
129
97
|
await (0, promises_1.rm)(fullPath, { force: true });
|
|
130
98
|
}
|
|
131
|
-
async commitBatch(
|
|
132
|
-
|
|
133
|
-
const git = simpleGit(this.localPath);
|
|
134
|
-
await git.addConfig("user.email", this.gitUser.email);
|
|
135
|
-
await git.addConfig("user.name", this.gitUser.name);
|
|
99
|
+
async commitBatch(sourceRepo, count) {
|
|
100
|
+
await this.ensureReady();
|
|
101
|
+
const git = (0, simple_git_1.simpleGit)(this.localPath);
|
|
136
102
|
const status = await git.status();
|
|
137
103
|
if (status.files.length === 0) {
|
|
138
104
|
return;
|
|
139
105
|
}
|
|
106
|
+
const { gitUser } = this;
|
|
107
|
+
const branch = this.activeBranch;
|
|
108
|
+
if (gitUser === undefined || branch === undefined) {
|
|
109
|
+
throw new Error("Git results store was not initialized correctly");
|
|
110
|
+
}
|
|
111
|
+
await git.addConfig("user.email", gitUser.email);
|
|
112
|
+
await git.addConfig("user.name", gitUser.name);
|
|
140
113
|
await git.add("-A");
|
|
141
|
-
const message = `Update results for ${
|
|
114
|
+
const message = `Update results for ${sourceRepo} (${String(count)} files)`;
|
|
142
115
|
await git.commit(message);
|
|
143
116
|
for (let attempt = 0; attempt < 3; attempt++) {
|
|
144
117
|
try {
|
|
145
|
-
await git.push("origin",
|
|
118
|
+
await git.push("origin", branch);
|
|
146
119
|
return;
|
|
147
120
|
}
|
|
148
121
|
catch (pushError) {
|
|
149
|
-
const
|
|
150
|
-
if (
|
|
151
|
-
|
|
152
|
-
await git.pull("origin", "main", { "--rebase": null });
|
|
153
|
-
}
|
|
154
|
-
catch {
|
|
155
|
-
await git.rebase({ "--abort": null }).catch(() => undefined);
|
|
156
|
-
await git.pull("origin", "main");
|
|
157
|
-
await git.add("-A");
|
|
158
|
-
await git.commit(message);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
122
|
+
const errorMessage = pushError instanceof Error ? pushError.message : String(pushError);
|
|
123
|
+
if (!errorMessage.includes("rejected") &&
|
|
124
|
+
!errorMessage.includes("conflict")) {
|
|
162
125
|
throw pushError;
|
|
163
126
|
}
|
|
127
|
+
try {
|
|
128
|
+
await git.pull("origin", branch, { "--rebase": null });
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
await git.rebase({ "--abort": null }).catch(() => undefined);
|
|
132
|
+
await git.pull("origin", branch);
|
|
133
|
+
await git.add("-A");
|
|
134
|
+
await git.commit(message);
|
|
135
|
+
}
|
|
164
136
|
}
|
|
165
137
|
}
|
|
166
138
|
throw new Error("Failed to push after 3 attempts");
|
|
167
139
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Load a file result, parsed and validated with the given Zod schema.
|
|
173
|
-
* Returns null if the file doesn't exist or fails validation.
|
|
174
|
-
*/
|
|
175
|
-
async loadFileResult(owner, repo, filePath, schema) {
|
|
176
|
-
const fullPath = node_path_1.default.join(this.getResultDir(owner, repo), `${filePath}.yml`);
|
|
140
|
+
async readFileResult(filePath, schema) {
|
|
141
|
+
await this.ensureReady();
|
|
142
|
+
const fullPath = node_path_1.default.join(this.getResultDir(), `${filePath}.yml`);
|
|
177
143
|
try {
|
|
178
144
|
const content = await (0, promises_1.readFile)(fullPath, "utf-8");
|
|
179
145
|
return schema.parse((0, yaml_1.parse)(content));
|
|
@@ -182,12 +148,9 @@ class GitYamlStore {
|
|
|
182
148
|
return null;
|
|
183
149
|
}
|
|
184
150
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
*/
|
|
189
|
-
async loadDirResult(owner, repo, dirPath, schema) {
|
|
190
|
-
const fullPath = node_path_1.default.join(this.getResultDir(owner, repo), dirPath, "dir.yml");
|
|
151
|
+
async readDirectoryResult(dirPath, schema) {
|
|
152
|
+
await this.ensureReady();
|
|
153
|
+
const fullPath = node_path_1.default.join(this.getResultDir(), dirPath, "dir.yml");
|
|
191
154
|
try {
|
|
192
155
|
const content = await (0, promises_1.readFile)(fullPath, "utf-8");
|
|
193
156
|
return schema.parse((0, yaml_1.parse)(content));
|
|
@@ -196,47 +159,97 @@ class GitYamlStore {
|
|
|
196
159
|
return null;
|
|
197
160
|
}
|
|
198
161
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
// ---------------------------------------------------------------------------
|
|
202
|
-
getResultDir(owner, repo) {
|
|
203
|
-
return node_path_1.default.join(this.localPath, this.resultDir(owner, repo));
|
|
162
|
+
getResultDir() {
|
|
163
|
+
return node_path_1.default.join(this.localPath, this.root, this.sourceRepo.owner, this.sourceRepo.name);
|
|
204
164
|
}
|
|
205
165
|
getAuthenticatedUrl() {
|
|
206
|
-
if (this.authToken
|
|
207
|
-
return this.cloneUrl
|
|
166
|
+
if (this.authToken === undefined || this.authToken === "") {
|
|
167
|
+
return this.cloneUrl;
|
|
208
168
|
}
|
|
209
|
-
return this.cloneUrl;
|
|
169
|
+
return this.cloneUrl.replace("https://github.com/", `https://${this.authToken}@github.com/`);
|
|
210
170
|
}
|
|
211
|
-
async
|
|
212
|
-
|
|
171
|
+
async resolveBranch(git) {
|
|
172
|
+
if (this.requestedBranch !== undefined && this.requestedBranch !== "") {
|
|
173
|
+
return this.requestedBranch;
|
|
174
|
+
}
|
|
175
|
+
const localBranches = await git.branchLocal();
|
|
176
|
+
if (localBranches.current !== "") {
|
|
177
|
+
return localBranches.current;
|
|
178
|
+
}
|
|
213
179
|
try {
|
|
214
|
-
|
|
180
|
+
const remoteHead = await git.raw([
|
|
181
|
+
"symbolic-ref",
|
|
182
|
+
"--quiet",
|
|
183
|
+
"refs/remotes/origin/HEAD",
|
|
184
|
+
]);
|
|
185
|
+
const branch = remoteHead.trim().replace(/^refs\/remotes\/origin\//u, "");
|
|
186
|
+
if (branch !== "") {
|
|
187
|
+
return branch;
|
|
188
|
+
}
|
|
215
189
|
}
|
|
216
190
|
catch {
|
|
191
|
+
// Fall back to any available branch.
|
|
192
|
+
}
|
|
193
|
+
if (localBranches.all.length > 0) {
|
|
194
|
+
return localBranches.all[0];
|
|
195
|
+
}
|
|
196
|
+
throw new Error("Unable to determine which branch to use for results");
|
|
197
|
+
}
|
|
198
|
+
async checkoutBranch(git, branch) {
|
|
199
|
+
const localBranches = await git.branchLocal();
|
|
200
|
+
if (localBranches.current === branch) {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (localBranches.all.includes(branch)) {
|
|
204
|
+
await git.checkout(branch);
|
|
217
205
|
return;
|
|
218
206
|
}
|
|
207
|
+
try {
|
|
208
|
+
await git.checkoutBranch(branch, `origin/${branch}`);
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
await git.checkoutLocalBranch(branch);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
async resolveGitUser(git) {
|
|
215
|
+
if (this.configuredGitUser !== undefined) {
|
|
216
|
+
return this.configuredGitUser;
|
|
217
|
+
}
|
|
218
|
+
const [nameResult, emailResult] = await Promise.all([
|
|
219
|
+
git.getConfig("user.name"),
|
|
220
|
+
git.getConfig("user.email"),
|
|
221
|
+
]);
|
|
222
|
+
const name = nameResult.value?.trim() ?? "";
|
|
223
|
+
const email = emailResult.value?.trim() ?? "";
|
|
224
|
+
if (name !== "" && email !== "") {
|
|
225
|
+
return { name, email };
|
|
226
|
+
}
|
|
227
|
+
throw new Error("Git user is required. Set results.gitUser or configure git user.name and user.email.");
|
|
228
|
+
}
|
|
229
|
+
async walkDir(baseDir, currentDir, manifest) {
|
|
230
|
+
const entries = await (0, promises_1.readdir)(currentDir, { withFileTypes: true });
|
|
219
231
|
for (const entry of entries) {
|
|
220
232
|
const fullPath = node_path_1.default.join(currentDir, entry.name);
|
|
221
233
|
if (entry.isDirectory()) {
|
|
222
234
|
await this.walkDir(baseDir, fullPath, manifest);
|
|
235
|
+
continue;
|
|
223
236
|
}
|
|
224
|
-
|
|
225
|
-
entry.name.endsWith(".yml")
|
|
226
|
-
entry.name
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
}
|
|
236
|
-
catch {
|
|
237
|
-
// Invalid file, skip
|
|
237
|
+
if (!entry.isFile() ||
|
|
238
|
+
!entry.name.endsWith(".yml") ||
|
|
239
|
+
entry.name === "dir.yml") {
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
try {
|
|
243
|
+
const yamlContent = await (0, promises_1.readFile)(fullPath, "utf-8");
|
|
244
|
+
const parsed = (0, yaml_1.parse)(yamlContent);
|
|
245
|
+
if (typeof parsed.sha === "string") {
|
|
246
|
+
const relativePath = node_path_1.default.relative(baseDir, fullPath);
|
|
247
|
+
manifest[relativePath.slice(0, -4)] = parsed.sha;
|
|
238
248
|
}
|
|
239
249
|
}
|
|
250
|
+
catch {
|
|
251
|
+
// Skip invalid YAML files while building the manifest.
|
|
252
|
+
}
|
|
240
253
|
}
|
|
241
254
|
}
|
|
242
255
|
}
|
package/dist/GitYamlStore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GitYamlStore.js","sourceRoot":"","sources":["../src/GitYamlStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GitYamlStore.js","sourceRoot":"","sources":["../src/GitYamlStore.ts"],"names":[],"mappings":"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"}
|
package/dist/RepoProcessor.d.ts
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Generic pipeline for incrementally processing a GitHub repo's file tree.
|
|
12
|
-
*
|
|
13
|
-
* Pipeline: init → fetch tree → filter → diff → process changed files →
|
|
14
|
-
* remove deleted files → resolve stale dirs → process dirs bottom-up → commit.
|
|
15
|
-
*/
|
|
16
|
-
export declare class RepoProcessor {
|
|
17
|
-
private readonly github;
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { RepoProcessorInternals } from "./internalTypes.js";
|
|
3
|
+
import { RepoWatcher } from "./RepoWatcher.js";
|
|
4
|
+
import type { RepoProcessorOptions, RepoProcessorRunOptions, RepoProcessorRunResult, RepoWatcherOptions } from "./types.js";
|
|
5
|
+
/** Incrementally processes repository files/directories and stores derived results. */
|
|
6
|
+
export declare class RepoProcessor<TFileResult = unknown, TDirResult = never> {
|
|
7
|
+
static open<TFileResult, TDirResult = never>(options: RepoProcessorOptions<TFileResult, TDirResult>): Promise<RepoProcessor<TFileResult, TDirResult>>;
|
|
8
|
+
private readonly repoRef;
|
|
9
|
+
private readonly repoClient;
|
|
18
10
|
private readonly store;
|
|
19
|
-
private readonly
|
|
11
|
+
private readonly ref;
|
|
20
12
|
private readonly concurrency;
|
|
21
|
-
private readonly
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
private
|
|
13
|
+
private readonly include;
|
|
14
|
+
private readonly processFileHandler;
|
|
15
|
+
private readonly processDirectoryHandler;
|
|
16
|
+
private constructor();
|
|
17
|
+
get repo(): string;
|
|
18
|
+
run(options?: RepoProcessorRunOptions): Promise<RepoProcessorRunResult>;
|
|
19
|
+
readFileResult<T>(filePath: string, schema: z.ZodType<T>): Promise<T | null>;
|
|
20
|
+
readDirectoryResult<T>(dirPath: string, schema: z.ZodType<T>): Promise<T | null>;
|
|
21
|
+
watch(options?: RepoWatcherOptions): Promise<RepoWatcher<TFileResult, TDirResult>>;
|
|
22
|
+
private buildDirectoryInput;
|
|
25
23
|
}
|
|
24
|
+
/** Creates a RepoProcessor instance using test doubles for internal dependencies. */
|
|
25
|
+
export declare function createRepoProcessorForTests<TFileResult = unknown, TDirResult = never>(internals: RepoProcessorInternals<TFileResult, TDirResult>): RepoProcessor<TFileResult, TDirResult>;
|
|
26
26
|
//# sourceMappingURL=RepoProcessor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RepoProcessor.d.ts","sourceRoot":"","sources":["../src/RepoProcessor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RepoProcessor.d.ts","sourceRoot":"","sources":["../src/RepoProcessor.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,OAAO,KAAK,EAGV,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,KAAK,EAGV,oBAAoB,EAEpB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AA6BpB,uFAAuF;AACvF,qBAAa,aAAa,CAAC,WAAW,GAAG,OAAO,EAAE,UAAU,GAAG,KAAK;IAClE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,GAAG,KAAK,EACzC,OAAO,EAAE,oBAAoB,CAAC,WAAW,EAAE,UAAU,CAAC,GACrD,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IA6ClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAGX;IAChB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAGX;IACX,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAGX;IACb,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAGlB;IACjB,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAE1B;IAEd,OAAO;IAiBP,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,GAAG,CACP,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,sBAAsB,CAAC;IA8M5B,cAAc,CAAC,CAAC,EACpB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAId,mBAAmB,CAAC,CAAC,EACzB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAId,KAAK,CACT,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAIhD,OAAO,CAAC,mBAAmB;CA2C5B;AAMD,qFAAqF;AACrF,wBAAgB,2BAA2B,CACzC,WAAW,GAAG,OAAO,EACrB,UAAU,GAAG,KAAK,EAElB,SAAS,EAAE,sBAAsB,CAAC,WAAW,EAAE,UAAU,CAAC,GACzD,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAMxC"}
|