semantifold 0.9.0 → 0.10.0
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 +6 -3
- package/bin/semantifold.js +6 -0
- package/build/bin/semantifold.d.ts +3 -0
- package/build/bin/semantifold.d.ts.map +1 -0
- package/build/bin/semantifold.js +5 -0
- package/build/index.d.ts +8 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +9 -1
- package/build/src/artifact-path.d.ts +16 -0
- package/build/src/artifact-path.d.ts.map +1 -1
- package/build/src/artifact-path.js +29 -3
- package/build/src/backends/c-check.d.ts +7 -0
- package/build/src/backends/c-check.d.ts.map +1 -0
- package/build/src/backends/c-check.js +65 -0
- package/build/src/backends/check-plan.d.ts +96 -0
- package/build/src/backends/check-plan.d.ts.map +1 -0
- package/build/src/backends/check-plan.js +135 -0
- package/build/src/backends/cpp-check.d.ts +7 -0
- package/build/src/backends/cpp-check.d.ts.map +1 -0
- package/build/src/backends/cpp-check.js +59 -0
- package/build/src/backends/csharp-check.d.ts +7 -0
- package/build/src/backends/csharp-check.d.ts.map +1 -0
- package/build/src/backends/csharp-check.js +125 -0
- package/build/src/backends/csharp.d.ts +1 -0
- package/build/src/backends/csharp.d.ts.map +1 -1
- package/build/src/backends/csharp.js +5 -4
- package/build/src/backends/dart-check.d.ts +7 -0
- package/build/src/backends/dart-check.d.ts.map +1 -0
- package/build/src/backends/dart-check.js +103 -0
- package/build/src/backends/dart.d.ts +2 -0
- package/build/src/backends/dart.d.ts.map +1 -1
- package/build/src/backends/dart.js +5 -5
- package/build/src/backends/go-check.d.ts +7 -0
- package/build/src/backends/go-check.d.ts.map +1 -0
- package/build/src/backends/go-check.js +77 -0
- package/build/src/backends/go.d.ts +1 -0
- package/build/src/backends/go.d.ts.map +1 -1
- package/build/src/backends/go.js +3 -3
- package/build/src/backends/java-check.d.ts +21 -0
- package/build/src/backends/java-check.d.ts.map +1 -0
- package/build/src/backends/java-check.js +73 -0
- package/build/src/backends/javascript-check.d.ts +7 -0
- package/build/src/backends/javascript-check.d.ts.map +1 -0
- package/build/src/backends/javascript-check.js +29 -0
- package/build/src/backends/kotlin-check.d.ts +7 -0
- package/build/src/backends/kotlin-check.d.ts.map +1 -0
- package/build/src/backends/kotlin-check.js +31 -0
- package/build/src/backends/php-check.d.ts +7 -0
- package/build/src/backends/php-check.d.ts.map +1 -0
- package/build/src/backends/php-check.js +21 -0
- package/build/src/backends/program.d.ts +7 -0
- package/build/src/backends/program.d.ts.map +1 -1
- package/build/src/backends/program.js +16 -1
- package/build/src/backends/python-check.d.ts +7 -0
- package/build/src/backends/python-check.d.ts.map +1 -0
- package/build/src/backends/python-check.js +28 -0
- package/build/src/backends/ruby-check.d.ts +7 -0
- package/build/src/backends/ruby-check.d.ts.map +1 -0
- package/build/src/backends/ruby-check.js +21 -0
- package/build/src/backends/rust-check.d.ts +7 -0
- package/build/src/backends/rust-check.d.ts.map +1 -0
- package/build/src/backends/rust-check.js +65 -0
- package/build/src/backends/swift-check.d.ts +7 -0
- package/build/src/backends/swift-check.d.ts.map +1 -0
- package/build/src/backends/swift-check.js +77 -0
- package/build/src/backends/typescript-check.d.ts +7 -0
- package/build/src/backends/typescript-check.d.ts.map +1 -0
- package/build/src/backends/typescript-check.js +33 -0
- package/build/src/backends/zig-check.d.ts +7 -0
- package/build/src/backends/zig-check.d.ts.map +1 -0
- package/build/src/backends/zig-check.js +70 -0
- package/build/src/diagnostic.d.ts +13 -1
- package/build/src/diagnostic.d.ts.map +1 -1
- package/build/src/diagnostic.js +14 -2
- package/build/src/frontends/program.d.ts +6 -0
- package/build/src/frontends/program.d.ts.map +1 -1
- package/build/src/frontends/program.js +9 -1
- package/build/src/language-registry.d.ts +54 -0
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +107 -5
- package/build/src/project-build.d.ts +172 -0
- package/build/src/project-build.d.ts.map +1 -0
- package/build/src/project-build.js +320 -0
- package/build/src/project-cli.d.ts +40 -0
- package/build/src/project-cli.d.ts.map +1 -0
- package/build/src/project-cli.js +145 -0
- package/build/src/project-manifest.d.ts +148 -0
- package/build/src/project-manifest.d.ts.map +1 -0
- package/build/src/project-manifest.js +432 -0
- package/build/src/project-reporter.d.ts +81 -0
- package/build/src/project-reporter.d.ts.map +1 -0
- package/build/src/project-reporter.js +293 -0
- package/build/src/project-snapshot.d.ts +129 -0
- package/build/src/project-snapshot.d.ts.map +1 -0
- package/build/src/project-snapshot.js +362 -0
- package/build/src/project-watch-reporter.d.ts +125 -0
- package/build/src/project-watch-reporter.d.ts.map +1 -0
- package/build/src/project-watch-reporter.js +280 -0
- package/build/src/project-watch.d.ts +133 -0
- package/build/src/project-watch.d.ts.map +1 -0
- package/build/src/project-watch.js +839 -0
- package/build/src/publication.d.ts +69 -5
- package/build/src/publication.d.ts.map +1 -1
- package/build/src/publication.js +246 -57
- package/build/src/semantic/types.d.ts +303 -2
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +79 -2
- package/build/src/subprocess.d.ts +8 -0
- package/build/src/subprocess.d.ts.map +1 -1
- package/build/src/subprocess.js +50 -9
- package/build/src/target-check.d.ts +52 -0
- package/build/src/target-check.d.ts.map +1 -0
- package/build/src/target-check.js +796 -0
- package/build/src/toolchains.d.ts.map +1 -1
- package/build/src/toolchains.js +3 -3
- package/docs/architecture.md +3 -1
- package/docs/c.md +4 -0
- package/docs/cpp.md +4 -0
- package/docs/dart.md +4 -0
- package/docs/generated-artifact-publication.md +11 -8
- package/docs/kotlin.md +2 -2
- package/docs/language-support.md +29 -3
- package/docs/project-build-cli.md +147 -0
- package/docs/project-watch.md +60 -0
- package/docs/rust.md +4 -0
- package/docs/swift.md +2 -0
- package/docs/testing.md +70 -3
- package/docs/watch-build-pipeline.md +39 -23
- package/docs/zig.md +2 -0
- package/examples/jsdoc-java-watch/expected-output.txt +3 -0
- package/examples/jsdoc-java-watch/semantifold.json +23 -0
- package/examples/jsdoc-java-watch/src/main.js +21 -0
- package/index.js +8 -0
- package/package.json +6 -1
- package/src/artifact-path.js +31 -2
- package/src/backends/c-check.js +80 -0
- package/src/backends/check-plan.js +147 -0
- package/src/backends/cpp-check.js +73 -0
- package/src/backends/csharp-check.js +139 -0
- package/src/backends/csharp.js +4 -3
- package/src/backends/dart-check.js +117 -0
- package/src/backends/dart.js +4 -4
- package/src/backends/go-check.js +89 -0
- package/src/backends/go.js +2 -2
- package/src/backends/java-check.js +77 -0
- package/src/backends/javascript-check.js +33 -0
- package/src/backends/kotlin-check.js +41 -0
- package/src/backends/php-check.js +23 -0
- package/src/backends/program.js +17 -0
- package/src/backends/python-check.js +30 -0
- package/src/backends/ruby-check.js +23 -0
- package/src/backends/rust-check.js +78 -0
- package/src/backends/swift-check.js +89 -0
- package/src/backends/typescript-check.js +37 -0
- package/src/backends/zig-check.js +81 -0
- package/src/diagnostic.js +9 -1
- package/src/frontends/program.js +9 -0
- package/src/language-registry.js +113 -4
- package/src/project-build.js +353 -0
- package/src/project-cli.js +155 -0
- package/src/project-manifest.js +479 -0
- package/src/project-reporter.js +320 -0
- package/src/project-snapshot.js +403 -0
- package/src/project-watch-reporter.js +303 -0
- package/src/project-watch.js +870 -0
- package/src/publication.js +275 -58
- package/src/semantic/types.js +87 -1
- package/src/subprocess.js +49 -8
- package/src/target-check.js +844 -0
- package/src/toolchains.js +3 -2
- package/tsconfig.json +1 -1
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import { diagnosticRecord, formatHumanProjectFailure, normalizeDiagnostic } from "./project-reporter.js";
|
|
3
|
+
/**
|
|
4
|
+
* Emits long-lived watch state with one terminal record for every admitted cycle and one for the watcher.
|
|
5
|
+
*/
|
|
6
|
+
export class ProjectWatchReporter {
|
|
7
|
+
/** @type {"human" | "ndjson"} */
|
|
8
|
+
#format;
|
|
9
|
+
/** @type {import("./project-reporter.js").WritableOutput} */
|
|
10
|
+
#stdout;
|
|
11
|
+
/** @type {import("./project-reporter.js").WritableOutput} */
|
|
12
|
+
#stderr;
|
|
13
|
+
/** @type {() => number} */
|
|
14
|
+
#now;
|
|
15
|
+
/** @type {string | null} */
|
|
16
|
+
#projectId = null;
|
|
17
|
+
/** @type {string | null} */
|
|
18
|
+
#snapshotHash = null;
|
|
19
|
+
/** @type {number | null} */
|
|
20
|
+
#cycle = null;
|
|
21
|
+
/** @type {readonly string[]} */
|
|
22
|
+
#changedPaths = Object.freeze([]);
|
|
23
|
+
#cycleStartedAt = 0;
|
|
24
|
+
#watchTerminal = false;
|
|
25
|
+
#cycleTerminal = true;
|
|
26
|
+
/**
|
|
27
|
+
* Creates a watch reporter.
|
|
28
|
+
* @param {{format?: "human" | "ndjson", now?: () => number, stderr?: import("./project-reporter.js").WritableOutput, stdout?: import("./project-reporter.js").WritableOutput}} [options] - Output mode, clock, and sinks.
|
|
29
|
+
*/
|
|
30
|
+
constructor(options = {}) {
|
|
31
|
+
const format = options.format ?? "human";
|
|
32
|
+
if (format != "human" && format != "ndjson" || options.now !== undefined && typeof options.now != "function") {
|
|
33
|
+
throw new TypeError("Invalid project watch reporter options.");
|
|
34
|
+
}
|
|
35
|
+
this.#format = format;
|
|
36
|
+
this.#stdout = options.stdout ?? process.stdout;
|
|
37
|
+
this.#stderr = options.stderr ?? process.stderr;
|
|
38
|
+
this.#now = options.now ?? (() => performance.now());
|
|
39
|
+
if (typeof this.#stdout?.write != "function" || typeof this.#stderr?.write != "function") {
|
|
40
|
+
throw new TypeError("Project watch reporter requires writable output sinks.");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Reports validated watch startup.
|
|
45
|
+
* @param {string} projectId - Stable initial project identity.
|
|
46
|
+
* @returns {void}
|
|
47
|
+
*/
|
|
48
|
+
watchStarted(projectId) {
|
|
49
|
+
this.#projectId = projectId;
|
|
50
|
+
this.#emit({ state: "watch-started" });
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Reports the selected event backend.
|
|
54
|
+
* @param {"native" | "polling"} backend - Active event backend.
|
|
55
|
+
* @returns {void}
|
|
56
|
+
*/
|
|
57
|
+
watchBackend(backend) {
|
|
58
|
+
this.#emit({ backend, state: "watch-backend" });
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Begins one admitted build cycle.
|
|
62
|
+
* @param {ProjectWatchCycleContext} cycle - Cycle context.
|
|
63
|
+
* @returns {void}
|
|
64
|
+
*/
|
|
65
|
+
cycleStarted(cycle) {
|
|
66
|
+
if (!this.#cycleTerminal || this.#watchTerminal)
|
|
67
|
+
throw new TypeError("Project watch reporter cycle lifecycle is invalid.");
|
|
68
|
+
this.#cycle = cycle.cycle;
|
|
69
|
+
this.#cycleTerminal = false;
|
|
70
|
+
this.#changedPaths = Object.freeze([...cycle.changedPaths]);
|
|
71
|
+
this.#projectId = cycle.projectId;
|
|
72
|
+
this.#snapshotHash = cycle.snapshotHash ?? null;
|
|
73
|
+
this.#cycleStartedAt = this.#now();
|
|
74
|
+
this.#emit({ changedPaths: this.#changedPaths, ...(cycle.snapshotHash === undefined ? {} : { snapshotHash: cycle.snapshotHash }), state: "cycle-started" });
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Reports the cycle's validated project identity.
|
|
78
|
+
* @param {string} projectId - Validated project identity.
|
|
79
|
+
* @returns {void}
|
|
80
|
+
*/
|
|
81
|
+
projectLoaded(projectId) {
|
|
82
|
+
this.#projectId = projectId;
|
|
83
|
+
this.#emit({ state: "project-loaded" });
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Reports the cycle's complete source snapshot.
|
|
87
|
+
* @param {string} snapshotHash - Complete source snapshot hash.
|
|
88
|
+
* @returns {void}
|
|
89
|
+
*/
|
|
90
|
+
snapshotLoaded(snapshotHash) {
|
|
91
|
+
this.#snapshotHash = snapshotHash;
|
|
92
|
+
this.#emit({ snapshotHash, state: "snapshot-loaded" });
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Reports one generated target.
|
|
96
|
+
* @param {import("./project-build.js").ProjectBuildTargetResult} target - Generated target.
|
|
97
|
+
* @returns {void}
|
|
98
|
+
*/
|
|
99
|
+
targetGenerated(target) {
|
|
100
|
+
this.#emit({
|
|
101
|
+
artifactCount: target.artifactCount,
|
|
102
|
+
language: target.language,
|
|
103
|
+
role: target.role,
|
|
104
|
+
state: "target-generated",
|
|
105
|
+
target: target.id
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Reports one completed target-check stage.
|
|
110
|
+
* @param {{id: string, language: string, stage: import("./semantic/types.js").TargetCheckStageResult}} checked - Check stage.
|
|
111
|
+
* @returns {void}
|
|
112
|
+
*/
|
|
113
|
+
targetChecked(checked) {
|
|
114
|
+
this.#emit({
|
|
115
|
+
argv: checked.stage.argv,
|
|
116
|
+
durationMs: checked.stage.durationMs,
|
|
117
|
+
exitCode: checked.stage.exitCode,
|
|
118
|
+
language: checked.language,
|
|
119
|
+
signal: checked.stage.signal,
|
|
120
|
+
stage: checked.stage.stage,
|
|
121
|
+
state: "target-checked",
|
|
122
|
+
stderr: checked.stage.stderr,
|
|
123
|
+
stdout: checked.stage.stdout,
|
|
124
|
+
target: checked.id,
|
|
125
|
+
tool: checked.stage.tool
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Emits one successful or recovered cycle terminal.
|
|
130
|
+
* @param {import("./project-build.js").ProjectBuildSuccess} result - Published result.
|
|
131
|
+
* @param {boolean} recovered - Whether the prior ordinary cycle failed.
|
|
132
|
+
* @returns {void}
|
|
133
|
+
*/
|
|
134
|
+
cycleSucceeded(result, recovered) {
|
|
135
|
+
this.#requireCycle();
|
|
136
|
+
this.#cycleTerminal = true;
|
|
137
|
+
this.#snapshotHash = result.snapshotHash;
|
|
138
|
+
const state = recovered ? "cycle-recovered" : "cycle-succeeded";
|
|
139
|
+
if (this.#format == "human") {
|
|
140
|
+
const verb = recovered ? "recovered" : "succeeded";
|
|
141
|
+
this.#stdout.write(`Watch cycle ${this.#cycle} ${verb}: project '${result.projectId}' published generation '${result.generationId}'.\n`);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
this.#write({
|
|
145
|
+
changedPaths: this.#changedPaths,
|
|
146
|
+
checked: result.checked,
|
|
147
|
+
durationMs: this.#duration(),
|
|
148
|
+
generationId: result.generationId,
|
|
149
|
+
snapshotHash: result.snapshotHash,
|
|
150
|
+
state,
|
|
151
|
+
targets: result.targets.map(target => ({ id: target.id, language: target.language, role: target.role })),
|
|
152
|
+
terminal: true,
|
|
153
|
+
terminalScope: "cycle"
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Emits one failed, cancelled, or superseded cycle terminal.
|
|
158
|
+
* @param {unknown} failure - Preserved cycle failure.
|
|
159
|
+
* @param {"cancelled" | "failed" | "superseded"} status - Terminal classification.
|
|
160
|
+
* @returns {void}
|
|
161
|
+
*/
|
|
162
|
+
cycleFailed(failure, status) {
|
|
163
|
+
this.#requireCycle();
|
|
164
|
+
this.#cycleTerminal = true;
|
|
165
|
+
const diagnostic = normalizeDiagnostic(failure);
|
|
166
|
+
if (this.#format == "human") {
|
|
167
|
+
this.#stderr.write(formatHumanProjectFailure(diagnostic, `Watch cycle ${this.#cycle} ${status}`));
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
this.#write({
|
|
171
|
+
changedPaths: this.#changedPaths,
|
|
172
|
+
diagnostic: diagnosticRecord(diagnostic),
|
|
173
|
+
durationMs: this.#duration(),
|
|
174
|
+
...(this.#snapshotHash === null ? {} : { snapshotHash: this.#snapshotHash }),
|
|
175
|
+
state: `cycle-${status}`,
|
|
176
|
+
terminal: true,
|
|
177
|
+
terminalScope: "cycle"
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Reports reconciliation whose complete content hash did not change.
|
|
182
|
+
* @param {readonly string[]} changedPaths - Coalesced hint paths.
|
|
183
|
+
* @returns {void}
|
|
184
|
+
*/
|
|
185
|
+
unchanged(changedPaths) {
|
|
186
|
+
this.#emit({ changedPaths, state: "reconciled-unchanged" });
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Reports the first filesystem hint admitted while the current cycle remains active.
|
|
190
|
+
* @returns {void}
|
|
191
|
+
*/
|
|
192
|
+
cycleDirty() {
|
|
193
|
+
this.#requireCycle();
|
|
194
|
+
this.#emit({ state: "cycle-dirty" });
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Emits the sole clean watcher terminal.
|
|
198
|
+
* @param {string} reason - Shutdown reason.
|
|
199
|
+
* @returns {void}
|
|
200
|
+
*/
|
|
201
|
+
watchStopped(reason) {
|
|
202
|
+
this.#requireWatchTerminal();
|
|
203
|
+
this.#watchTerminal = true;
|
|
204
|
+
if (this.#format == "human") {
|
|
205
|
+
this.#stdout.write(`Watch stopped: ${reason}\n`);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
this.#write({ reason, state: "watch-stopped", terminal: true, terminalScope: "watch" });
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Emits the sole startup/configuration watcher terminal.
|
|
212
|
+
* @param {unknown} failure - Startup/configuration failure.
|
|
213
|
+
* @returns {void}
|
|
214
|
+
*/
|
|
215
|
+
watchFailed(failure) {
|
|
216
|
+
this.#requireWatchTerminal();
|
|
217
|
+
this.#watchTerminal = true;
|
|
218
|
+
const diagnostic = normalizeDiagnostic(failure);
|
|
219
|
+
if (this.#format == "human") {
|
|
220
|
+
this.#stderr.write(formatHumanProjectFailure(diagnostic, "Watch failed"));
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
this.#write({ diagnostic: diagnosticRecord(diagnostic), state: "watch-failed", terminal: true, terminalScope: "watch" });
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Computes a stable non-negative cycle duration.
|
|
227
|
+
* @returns {number} Cycle duration.
|
|
228
|
+
*/
|
|
229
|
+
#duration() {
|
|
230
|
+
const value = this.#now() - this.#cycleStartedAt;
|
|
231
|
+
return Number.isFinite(value) && value >= 0 ? value : 0;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Emits a non-terminal machine state when selected.
|
|
235
|
+
* @param {Record<string, unknown>} fields - State fields.
|
|
236
|
+
* @returns {void}
|
|
237
|
+
*/
|
|
238
|
+
#emit(fields) {
|
|
239
|
+
if (this.#format == "ndjson")
|
|
240
|
+
this.#write(fields);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Writes one complete NDJSON record.
|
|
244
|
+
* @param {Record<string, unknown>} fields - Protocol fields.
|
|
245
|
+
* @returns {void}
|
|
246
|
+
*/
|
|
247
|
+
#write(fields) {
|
|
248
|
+
this.#stdout.write(`${JSON.stringify({
|
|
249
|
+
cycle: this.#cycle,
|
|
250
|
+
project: this.#projectId,
|
|
251
|
+
schema: "SemantifoldWatchEvent",
|
|
252
|
+
version: 1,
|
|
253
|
+
...fields
|
|
254
|
+
})}\n`);
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Requires one open cycle terminal slot.
|
|
258
|
+
* @returns {void}
|
|
259
|
+
*/
|
|
260
|
+
#requireCycle() {
|
|
261
|
+
if (this.#cycleTerminal || this.#watchTerminal)
|
|
262
|
+
throw new TypeError("Project watch reporter has no open cycle.");
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Requires one open watcher terminal slot.
|
|
266
|
+
* @returns {void}
|
|
267
|
+
*/
|
|
268
|
+
#requireWatchTerminal() {
|
|
269
|
+
if (this.#watchTerminal || !this.#cycleTerminal)
|
|
270
|
+
throw new TypeError("Project watch reporter watcher lifecycle is invalid.");
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* @typedef ProjectWatchCycleContext
|
|
275
|
+
* @property {readonly string[]} changedPaths - Stable changed paths.
|
|
276
|
+
* @property {number} cycle - One-based cycle number.
|
|
277
|
+
* @property {string} projectId - Stable project identity.
|
|
278
|
+
* @property {string} [snapshotHash] - Complete snapshot hash when reconciliation succeeded.
|
|
279
|
+
*/
|
|
280
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC13YXRjaC1yZXBvcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9qZWN0LXdhdGNoLXJlcG9ydGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsZ0JBQWdCLEVBQUUseUJBQXlCLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQTtBQUV0Rzs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsaUNBQWlDO0lBQ2pDLE9BQU8sQ0FBQTtJQUNQLDZEQUE2RDtJQUM3RCxPQUFPLENBQUE7SUFDUCw2REFBNkQ7SUFDN0QsT0FBTyxDQUFBO0lBQ1AsMkJBQTJCO0lBQzNCLElBQUksQ0FBQTtJQUNKLDRCQUE0QjtJQUM1QixVQUFVLEdBQUcsSUFBSSxDQUFBO0lBQ2pCLDRCQUE0QjtJQUM1QixhQUFhLEdBQUcsSUFBSSxDQUFBO0lBQ3BCLDRCQUE0QjtJQUM1QixNQUFNLEdBQUcsSUFBSSxDQUFBO0lBQ2IsZ0NBQWdDO0lBQ2hDLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ2pDLGVBQWUsR0FBRyxDQUFDLENBQUE7SUFDbkIsY0FBYyxHQUFHLEtBQUssQ0FBQTtJQUN0QixjQUFjLEdBQUcsSUFBSSxDQUFBO0lBRXJCOzs7T0FHRztJQUNILFlBQVksT0FBTyxHQUFHLEVBQUU7UUFDdEIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUE7UUFFeEMsSUFBSSxNQUFNLElBQUksT0FBTyxJQUFJLE1BQU0sSUFBSSxRQUFRLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxTQUFTLElBQUksT0FBTyxPQUFPLENBQUMsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQzdHLE1BQU0sSUFBSSxTQUFTLENBQUMseUNBQXlDLENBQUMsQ0FBQTtRQUNoRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9B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SUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3hCLE1BQU0sRUFBRSx1QkFBdUI7WUFDL0IsT0FBTyxFQUFFLENBQUM7WUFDVixHQUFHLE1BQU07U0FDVixDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ1QsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWM7WUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLDJDQUEyQyxDQUFDLENBQUE7SUFDbEgsQ0FBQztJQUVEOzs7T0FHRztJQUNILHFCQUFxQjtRQUNuQixJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYztZQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsc0RBQXNELENBQUMsQ0FBQTtJQUM5SCxDQUFDO0NBQ0Y7QUFFRDs7Ozs7O0dBTUciLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtkaWFnbm9zdGljUmVjb3JkLCBmb3JtYXRIdW1hblByb2plY3RGYWlsdXJlLCBub3JtYWxpemVEaWFnbm9zdGljfSBmcm9tIFwiLi9wcm9qZWN0LXJlcG9ydGVyLmpzXCJcblxuLyoqXG4gKiBFbWl0cyBsb25nLWxpdmVkIHdhdGNoIHN0YXRlIHdpdGggb25lIHRlcm1pbmFsIHJlY29yZCBmb3IgZXZlcnkgYWRtaXR0ZWQgY3ljbGUgYW5kIG9uZSBmb3IgdGhlIHdhdGNoZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9qZWN0V2F0Y2hSZXBvcnRlciB7XG4gIC8qKiBAdHlwZSB7XCJodW1hblwiIHwgXCJuZGpzb25cIn0gKi9cbiAgI2Zvcm1hdFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4vcHJvamVjdC1yZXBvcnRlci5qc1wiKS5Xcml0YWJsZU91dHB1dH0gKi9cbiAgI3N0ZG91dFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4vcHJvamVjdC1yZXBvcnRlci5qc1wiKS5Xcml0YWJsZU91dHB1dH0gKi9cbiAgI3N0ZGVyclxuICAvKiogQHR5cGUgeygpID0+IG51bWJlcn0gKi9cbiAgI25vd1xuICAvKiogQHR5cGUge3N0cmluZyB8IG51bGx9ICovXG4gICNwcm9qZWN0SWQgPSBudWxsXG4gIC8qKiBAdHlwZSB7c3RyaW5nIHwgbnVsbH0gKi9cbiAgI3NuYXBzaG90SGFzaCA9IG51bGxcbiAgLyoqIEB0eXBlIHtudW1iZXIgfCBudWxsfSAqL1xuICAjY3ljbGUgPSBudWxsXG4gIC8qKiBAdHlwZSB7cmVhZG9ubHkgc3RyaW5nW119ICovXG4gICNjaGFuZ2VkUGF0aHMgPSBPYmplY3QuZnJlZXplKFtdKVxuICAjY3ljbGVTdGFydGVkQXQgPSAwXG4gICN3YXRjaFRlcm1pbmFsID0gZmFsc2VcbiAgI2N5Y2xlVGVybWluYWwgPSB0cnVlXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB3YXRjaCByZXBvcnRlci5cbiAgICogQHBhcmFtIHt7Zm9ybWF0PzogXCJodW1hblwiIHwgXCJuZGpzb25cIiwgbm93PzogKCkgPT4gbnVtYmVyLCBzdGRlcnI/OiBpbXBvcnQoXCIuL3Byb2plY3QtcmVwb3J0ZXIuanNcIikuV3JpdGFibGVPdXRwdXQsIHN0ZG91dD86IGltcG9ydChcIi4vcHJvamVjdC1yZXBvcnRlci5qc1wiKS5Xcml0YWJsZU91dHB1dH19IFtvcHRpb25zXSAtIE91dHB1dCBtb2RlLCBjbG9jaywgYW5kIHNpbmtzLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5mb3JtYXQgPz8gXCJodW1hblwiXG5cbiAgICBpZiAoZm9ybWF0ICE9IFwiaHVtYW5cIiAmJiBmb3JtYXQgIT0gXCJuZGpzb25cIiB8fCBvcHRpb25zLm5vdyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLm5vdyAhPSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIHByb2plY3Qgd2F0Y2ggcmVwb3J0ZXIgb3B0aW9ucy5cIilcbiAgICB9XG4gICAgdGhpcy4jZm9ybWF0ID0gZm9ybWF0XG4gICAgdGhpcy4jc3Rkb3V0ID0gb3B0aW9ucy5zdGRvdXQgPz8gcHJvY2Vzcy5zdGRvdXRcbiAgICB0aGlzLiNzdGRlcnIgPSBvcHRpb25zLnN0ZGVyciA/PyBwcm9jZXNzLnN0ZGVyclxuICAgIHRoaXMuI25vdyA9IG9wdGlvbnMubm93ID8/ICgoKSA9PiBwZXJmb3JtYW5jZS5ub3coKSlcbiAgICBpZiAodHlwZW9mIHRoaXMuI3N0ZG91dD8ud3JpdGUgIT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiB0aGlzLiNzdGRlcnI/LndyaXRlICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb2plY3Qgd2F0Y2ggcmVwb3J0ZXIgcmVxdWlyZXMgd3JpdGFibGUgb3V0cHV0IHNpbmtzLlwiKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBvcnRzIHZhbGlkYXRlZCB3YXRjaCBzdGFydHVwLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvamVjdElkIC0gU3RhYmxlIGluaXRpYWwgcHJvamVjdCBpZGVudGl0eS5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICB3YXRjaFN0YXJ0ZWQocHJvamVjdElkKSB7XG4gICAgdGhpcy4jcHJvamVjdElkID0gcHJvamVjdElkXG4gICAgdGhpcy4jZW1pdCh7c3RhdGU6IFwid2F0Y2gtc3RhcnRlZFwifSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBvcnRzIHRoZSBzZWxlY3RlZCBldmVudCBiYWNrZW5kLlxuICAgKiBAcGFyYW0ge1wibmF0aXZlXCIgfCBcInBvbGxpbmdcIn0gYmFja2VuZCAtIEFjdGl2ZSBldmVudCBiYWNrZW5kLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHdhdGNoQmFja2VuZChiYWNrZW5kKSB7XG4gICAgdGhpcy4jZW1pdCh7YmFja2VuZCwgc3RhdGU6IFwid2F0Y2gtYmFja2VuZFwifSlcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWdpbnMgb25lIGFkbWl0dGVkIGJ1aWxkIGN5Y2xlLlxuICAgKiBAcGFyYW0ge1Byb2plY3RXYXRjaEN5Y2xlQ29udGV4dH0gY3ljbGUgLSBDeWNsZSBjb250ZXh0LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGN5Y2xlU3RhcnRlZChjeWNsZSkge1xuICAgIGlmICghdGhpcy4jY3ljbGVUZXJtaW5hbCB8fCB0aGlzLiN3YXRjaFRlcm1pbmFsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvamVjdCB3YXRjaCByZXBvcnRlciBjeWNsZSBsaWZlY3ljbGUgaXMgaW52YWxpZC5cIilcbiAgICB0aGlzLiNjeWNsZSA9IGN5Y2xlLmN5Y2xlXG4gICAgdGhpcy4jY3ljbGVUZXJtaW5hbCA9IGZhbHNlXG4gICAgdGhpcy4jY2hhbmdlZFBhdGhzID0gT2JqZWN0LmZyZWV6ZShbLi4uY3ljbGUuY2hhbmdlZFBhdGhzXSlcbiAgICB0aGlzLiNwcm9qZWN0SWQgPSBjeWNsZS5wcm9qZWN0SWRcbiAgICB0aGlzLiNzbmFwc2hvdEhhc2ggPSBjeWNsZS5zbmFwc2hvdEhhc2ggPz8gbnVsbFxuICAgIHRoaXMuI2N5Y2xlU3RhcnRlZEF0ID0gdGhpcy4jbm93KClcbiAgICB0aGlzLiNlbWl0KHtjaGFuZ2VkUGF0aHM6IHRoaXMuI2NoYW5nZWRQYXRocywgLi4uKGN5Y2xlLnNuYXBzaG90SGFzaCA9PT0gdW5kZWZpbmVkID8ge30gOiB7c25hcHNob3RIYXNoOiBjeWNsZS5zbmFwc2hvdEhhc2h9KSwgc3RhdGU6IFwiY3ljbGUtc3RhcnRlZFwifSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBvcnRzIHRoZSBjeWNsZSdzIHZhbGlkYXRlZCBwcm9qZWN0IGlkZW50aXR5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvamVjdElkIC0gVmFsaWRhdGVkIHByb2plY3QgaWRlbnRpdHkuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgcHJvamVjdExvYWRlZChwcm9qZWN0SWQpIHtcbiAgICB0aGlzLiNwcm9qZWN0SWQgPSBwcm9qZWN0SWRcbiAgICB0aGlzLiNlbWl0KHtzdGF0ZTogXCJwcm9qZWN0LWxvYWRlZFwifSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBvcnRzIHRoZSBjeWNsZSdzIGNvbXBsZXRlIHNvdXJjZSBzbmFwc2hvdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNuYXBzaG90SGFzaCAtIENvbXBsZXRlIHNvdXJjZSBzbmFwc2hvdCBoYXNoLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHNuYXBzaG90TG9hZGVkKHNuYXBzaG90SGFzaCkge1xuICAgIHRoaXMuI3NuYXBzaG90SGFzaCA9IHNuYXBzaG90SGFzaFxuICAgIHRoaXMuI2VtaXQoe3NuYXBzaG90SGFzaCwgc3RhdGU6IFwic25hcHNob3QtbG9hZGVkXCJ9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcG9ydHMgb25lIGdlbmVyYXRlZCB0YXJnZXQuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9wcm9qZWN0LWJ1aWxkLmpzXCIpLlByb2plY3RCdWlsZFRhcmdldFJlc3VsdH0gdGFyZ2V0IC0gR2VuZXJhdGVkIHRhcmdldC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICB0YXJnZXRHZW5lcmF0ZWQodGFyZ2V0KSB7XG4gICAgdGhpcy4jZW1pdCh7XG4gICAgICBhcnRpZmFjdENvdW50OiB0YXJnZXQuYXJ0aWZhY3RDb3VudCxcbiAgICAgIGxhbmd1YWdlOiB0YXJnZXQubGFuZ3VhZ2UsXG4gICAgICByb2xlOiB0YXJnZXQucm9sZSxcbiAgICAgIHN0YXRlOiBcInRhcmdldC1nZW5lcmF0ZWRcIixcbiAgICAgIHRhcmdldDogdGFyZ2V0LmlkXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBvcnRzIG9uZSBjb21wbGV0ZWQgdGFyZ2V0LWNoZWNrIHN0YWdlLlxuICAgKiBAcGFyYW0ge3tpZDogc3RyaW5nLCBsYW5ndWFnZTogc3RyaW5nLCBzdGFnZTogaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UYXJnZXRDaGVja1N0YWdlUmVzdWx0fX0gY2hlY2tlZCAtIENoZWNrIHN0YWdlLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHRhcmdldENoZWNrZWQoY2hlY2tlZCkge1xuICAgIHRoaXMuI2VtaXQoe1xuICAgICAgYXJndjogY2hlY2tlZC5zdGFnZS5hcmd2LFxuICAgICAgZHVyYXRpb25NczogY2hlY2tlZC5zdGFnZS5kdXJhdGlvbk1zLFxuICAgICAgZXhpdENvZGU6IGNoZWNrZWQuc3RhZ2UuZXhpdENvZGUsXG4gICAgICBsYW5ndWFnZTogY2hlY2tlZC5sYW5ndWFnZSxcbiAgICAgIHNpZ25hbDogY2hlY2tlZC5zdGFnZS5zaWduYWwsXG4gICAgICBzdGFnZTogY2hlY2tlZC5zdGFnZS5zdGFnZSxcbiAgICAgIHN0YXRlOiBcInRhcmdldC1jaGVja2VkXCIsXG4gICAgICBzdGRlcnI6IGNoZWNrZWQuc3RhZ2Uuc3RkZXJyLFxuICAgICAgc3Rkb3V0OiBjaGVja2VkLnN0YWdlLnN0ZG91dCxcbiAgICAgIHRhcmdldDogY2hlY2tlZC5pZCxcbiAgICAgIHRvb2w6IGNoZWNrZWQuc3RhZ2UudG9vbFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgb25lIHN1Y2Nlc3NmdWwgb3IgcmVjb3ZlcmVkIGN5Y2xlIHRlcm1pbmFsLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vcHJvamVjdC1idWlsZC5qc1wiKS5Qcm9qZWN0QnVpbGRTdWNjZXNzfSByZXN1bHQgLSBQdWJsaXNoZWQgcmVzdWx0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlY292ZXJlZCAtIFdoZXRoZXIgdGhlIHByaW9yIG9yZGluYXJ5IGN5Y2xlIGZhaWxlZC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjeWNsZVN1Y2NlZWRlZChyZXN1bHQsIHJlY292ZXJlZCkge1xuICAgIHRoaXMuI3JlcXVpcmVDeWNsZSgpXG4gICAgdGhpcy4jY3ljbGVUZXJtaW5hbCA9IHRydWVcbiAgICB0aGlzLiNzbmFwc2hvdEhhc2ggPSByZXN1bHQuc25hcHNob3RIYXNoXG4gICAgY29uc3Qgc3RhdGUgPSByZWNvdmVyZWQgPyBcImN5Y2xlLXJlY292ZXJlZFwiIDogXCJjeWNsZS1zdWNjZWVkZWRcIlxuXG4gICAgaWYgKHRoaXMuI2Zvcm1hdCA9PSBcImh1bWFuXCIpIHtcbiAgICAgIGNvbnN0IHZlcmIgPSByZWNvdmVyZWQgPyBcInJlY292ZXJlZFwiIDogXCJzdWNjZWVkZWRcIlxuXG4gICAgICB0aGlzLiNzdGRvdXQud3JpdGUoYFdhdGNoIGN5Y2xlICR7dGhpcy4jY3ljbGV9ICR7dmVyYn06IHByb2plY3QgJyR7cmVzdWx0LnByb2plY3RJZH0nIHB1Ymxpc2hlZCBnZW5lcmF0aW9uICcke3Jlc3VsdC5nZW5lcmF0aW9uSWR9Jy5cXG5gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuI3dyaXRlKHtcbiAgICAgIGNoYW5nZWRQYXRoczogdGhpcy4jY2hhbmdlZFBhdGhzLFxuICAgICAgY2hlY2tlZDogcmVzdWx0LmNoZWNrZWQsXG4gICAgICBkdXJhdGlvbk1zOiB0aGlzLiNkdXJhdGlvbigpLFxuICAgICAgZ2VuZXJhdGlvbklkOiByZXN1bHQuZ2VuZXJhdGlvbklkLFxuICAgICAgc25hcHNob3RIYXNoOiByZXN1bHQuc25hcHNob3RIYXNoLFxuICAgICAgc3RhdGUsXG4gICAgICB0YXJnZXRzOiByZXN1bHQudGFyZ2V0cy5tYXAodGFyZ2V0ID0+ICh7aWQ6IHRhcmdldC5pZCwgbGFuZ3VhZ2U6IHRhcmdldC5sYW5ndWFnZSwgcm9sZTogdGFyZ2V0LnJvbGV9KSksXG4gICAgICB0ZXJtaW5hbDogdHJ1ZSxcbiAgICAgIHRlcm1pbmFsU2NvcGU6IFwiY3ljbGVcIlxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgb25lIGZhaWxlZCwgY2FuY2VsbGVkLCBvciBzdXBlcnNlZGVkIGN5Y2xlIHRlcm1pbmFsLlxuICAgKiBAcGFyYW0ge3Vua25vd259IGZhaWx1cmUgLSBQcmVzZXJ2ZWQgY3ljbGUgZmFpbHVyZS5cbiAgICogQHBhcmFtIHtcImNhbmNlbGxlZFwiIHwgXCJmYWlsZWRcIiB8IFwic3VwZXJzZWRlZFwifSBzdGF0dXMgLSBUZXJtaW5hbCBjbGFzc2lmaWNhdGlvbi5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjeWNsZUZhaWxlZChmYWlsdXJlLCBzdGF0dXMpIHtcbiAgICB0aGlzLiNyZXF1aXJlQ3ljbGUoKVxuICAgIHRoaXMuI2N5Y2xlVGVybWluYWwgPSB0cnVlXG4gICAgY29uc3QgZGlhZ25vc3RpYyA9IG5vcm1hbGl6ZURpYWdub3N0aWMoZmFpbHVyZSlcblxuICAgIGlmICh0aGlzLiNmb3JtYXQgPT0gXCJodW1hblwiKSB7XG4gICAgICB0aGlzLiNzdGRlcnIud3JpdGUoZm9ybWF0SHVtYW5Qcm9qZWN0RmFpbHVyZShkaWFnbm9zdGljLCBgV2F0Y2ggY3ljbGUgJHt0aGlzLiNjeWNsZX0gJHtzdGF0dXN9YCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy4jd3JpdGUoe1xuICAgICAgY2hhbmdlZFBhdGhzOiB0aGlzLiNjaGFuZ2VkUGF0aHMsXG4gICAgICBkaWFnbm9zdGljOiBkaWFnbm9zdGljUmVjb3JkKGRpYWdub3N0aWMpLFxuICAgICAgZHVyYXRpb25NczogdGhpcy4jZHVyYXRpb24oKSxcbiAgICAgIC4uLih0aGlzLiNzbmFwc2hvdEhhc2ggPT09IG51bGwgPyB7fSA6IHtzbmFwc2hvdEhhc2g6IHRoaXMuI3NuYXBzaG90SGFzaH0pLFxuICAgICAgc3RhdGU6IGBjeWNsZS0ke3N0YXR1c31gLFxuICAgICAgdGVybWluYWw6IHRydWUsXG4gICAgICB0ZXJtaW5hbFNjb3BlOiBcImN5Y2xlXCJcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcG9ydHMgcmVjb25jaWxpYXRpb24gd2hvc2UgY29tcGxldGUgY29udGVudCBoYXNoIGRpZCBub3QgY2hhbmdlLlxuICAgKiBAcGFyYW0ge3JlYWRvbmx5IHN0cmluZ1tdfSBjaGFuZ2VkUGF0aHMgLSBDb2FsZXNjZWQgaGludCBwYXRocy5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICB1bmNoYW5nZWQoY2hhbmdlZFBhdGhzKSB7XG4gICAgdGhpcy4jZW1pdCh7Y2hhbmdlZFBhdGhzLCBzdGF0ZTogXCJyZWNvbmNpbGVkLXVuY2hhbmdlZFwifSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBvcnRzIHRoZSBmaXJzdCBmaWxlc3lzdGVtIGhpbnQgYWRtaXR0ZWQgd2hpbGUgdGhlIGN1cnJlbnQgY3ljbGUgcmVtYWlucyBhY3RpdmUuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY3ljbGVEaXJ0eSgpIHtcbiAgICB0aGlzLiNyZXF1aXJlQ3ljbGUoKVxuICAgIHRoaXMuI2VtaXQoe3N0YXRlOiBcImN5Y2xlLWRpcnR5XCJ9KVxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBzb2xlIGNsZWFuIHdhdGNoZXIgdGVybWluYWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gLSBTaHV0ZG93biByZWFzb24uXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgd2F0Y2hTdG9wcGVkKHJlYXNvbikge1xuICAgIHRoaXMuI3JlcXVpcmVXYXRjaFRlcm1pbmFsKClcbiAgICB0aGlzLiN3YXRjaFRlcm1pbmFsID0gdHJ1ZVxuICAgIGlmICh0aGlzLiNmb3JtYXQgPT0gXCJodW1hblwiKSB7XG4gICAgICB0aGlzLiNzdGRvdXQud3JpdGUoYFdhdGNoIHN0b3BwZWQ6ICR7cmVhc29ufVxcbmApXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy4jd3JpdGUoe3JlYXNvbiwgc3RhdGU6IFwid2F0Y2gtc3RvcHBlZFwiLCB0ZXJtaW5hbDogdHJ1ZSwgdGVybWluYWxTY29wZTogXCJ3YXRjaFwifSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgc29sZSBzdGFydHVwL2NvbmZpZ3VyYXRpb24gd2F0Y2hlciB0ZXJtaW5hbC5cbiAgICogQHBhcmFtIHt1bmtub3dufSBmYWlsdXJlIC0gU3RhcnR1cC9jb25maWd1cmF0aW9uIGZhaWx1cmUuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgd2F0Y2hGYWlsZWQoZmFpbHVyZSkge1xuICAgIHRoaXMuI3JlcXVpcmVXYXRjaFRlcm1pbmFsKClcbiAgICB0aGlzLiN3YXRjaFRlcm1pbmFsID0gdHJ1ZVxuICAgIGNvbnN0IGRpYWdub3N0aWMgPSBub3JtYWxpemVEaWFnbm9zdGljKGZhaWx1cmUpXG5cbiAgICBpZiAodGhpcy4jZm9ybWF0ID09IFwiaHVtYW5cIikge1xuICAgICAgdGhpcy4jc3RkZXJyLndyaXRlKGZvcm1hdEh1bWFuUHJvamVjdEZhaWx1cmUoZGlhZ25vc3RpYywgXCJXYXRjaCBmYWlsZWRcIikpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy4jd3JpdGUoe2RpYWdub3N0aWM6IGRpYWdub3N0aWNSZWNvcmQoZGlhZ25vc3RpYyksIHN0YXRlOiBcIndhdGNoLWZhaWxlZFwiLCB0ZXJtaW5hbDogdHJ1ZSwgdGVybWluYWxTY29wZTogXCJ3YXRjaFwifSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyBhIHN0YWJsZSBub24tbmVnYXRpdmUgY3ljbGUgZHVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IEN5Y2xlIGR1cmF0aW9uLlxuICAgKi9cbiAgI2R1cmF0aW9uKCkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jbm93KCkgLSB0aGlzLiNjeWNsZVN0YXJ0ZWRBdFxuXG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgJiYgdmFsdWUgPj0gMCA/IHZhbHVlIDogMFxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGEgbm9uLXRlcm1pbmFsIG1hY2hpbmUgc3RhdGUgd2hlbiBzZWxlY3RlZC5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gZmllbGRzIC0gU3RhdGUgZmllbGRzLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gICNlbWl0KGZpZWxkcykge1xuICAgIGlmICh0aGlzLiNmb3JtYXQgPT0gXCJuZGpzb25cIikgdGhpcy4jd3JpdGUoZmllbGRzKVxuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlcyBvbmUgY29tcGxldGUgTkRKU09OIHJlY29yZC5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gZmllbGRzIC0gUHJvdG9jb2wgZmllbGRzLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gICN3cml0ZShmaWVsZHMpIHtcbiAgICB0aGlzLiNzdGRvdXQud3JpdGUoYCR7SlNPTi5zdHJpbmdpZnkoe1xuICAgICAgY3ljbGU6IHRoaXMuI2N5Y2xlLFxuICAgICAgcHJvamVjdDogdGhpcy4jcHJvamVjdElkLFxuICAgICAgc2NoZW1hOiBcIlNlbWFudGlmb2xkV2F0Y2hFdmVudFwiLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIC4uLmZpZWxkc1xuICAgIH0pfVxcbmApXG4gIH1cblxuICAvKipcbiAgICogUmVxdWlyZXMgb25lIG9wZW4gY3ljbGUgdGVybWluYWwgc2xvdC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICAjcmVxdWlyZUN5Y2xlKCkge1xuICAgIGlmICh0aGlzLiNjeWNsZVRlcm1pbmFsIHx8IHRoaXMuI3dhdGNoVGVybWluYWwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm9qZWN0IHdhdGNoIHJlcG9ydGVyIGhhcyBubyBvcGVuIGN5Y2xlLlwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVpcmVzIG9uZSBvcGVuIHdhdGNoZXIgdGVybWluYWwgc2xvdC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICAjcmVxdWlyZVdhdGNoVGVybWluYWwoKSB7XG4gICAgaWYgKHRoaXMuI3dhdGNoVGVybWluYWwgfHwgIXRoaXMuI2N5Y2xlVGVybWluYWwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm9qZWN0IHdhdGNoIHJlcG9ydGVyIHdhdGNoZXIgbGlmZWN5Y2xlIGlzIGludmFsaWQuXCIpXG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBQcm9qZWN0V2F0Y2hDeWNsZUNvbnRleHRcbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgc3RyaW5nW119IGNoYW5nZWRQYXRocyAtIFN0YWJsZSBjaGFuZ2VkIHBhdGhzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGN5Y2xlIC0gT25lLWJhc2VkIGN5Y2xlIG51bWJlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcm9qZWN0SWQgLSBTdGFibGUgcHJvamVjdCBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc25hcHNob3RIYXNoXSAtIENvbXBsZXRlIHNuYXBzaG90IGhhc2ggd2hlbiByZWNvbmNpbGlhdGlvbiBzdWNjZWVkZWQuXG4gKi9cbiJdfQ==
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { watch as watchFileSystem } from "node:fs";
|
|
2
|
+
import { ProjectBuilder } from "./project-build.js";
|
|
3
|
+
import { ProjectManifestLoader, SemantifoldProject } from "./project-manifest.js";
|
|
4
|
+
import { ProjectSnapshot, ProjectSnapshotBuilder } from "./project-snapshot.js";
|
|
5
|
+
import { ProjectWatchReporter } from "./project-watch-reporter.js";
|
|
6
|
+
/**
|
|
7
|
+
* Installs a synchronous lifecycle observer for focused coordination specs.
|
|
8
|
+
* This helper is intentionally not part of the package root API.
|
|
9
|
+
* @param {ProjectWatchCoordinator} coordinator - Coordinator instance.
|
|
10
|
+
* @param {(event: ProjectWatchObservation) => void} observer - Marker observer.
|
|
11
|
+
* @returns {void}
|
|
12
|
+
*/
|
|
13
|
+
export declare function observeProjectWatch(coordinator: ProjectWatchCoordinator, observer: (event: ProjectWatchObservation) => void): void;
|
|
14
|
+
/**
|
|
15
|
+
* Creates a coordinator with one instance-owned native event backend for focused fallback specs.
|
|
16
|
+
* This helper is intentionally not part of the package root API.
|
|
17
|
+
* @param {{builder?: ProjectBuilder, manifestLoader?: ProjectManifestLoader, nativeWatch: typeof watchFileSystem, pollIntervalMs?: number, quietPeriodMs?: number, snapshotBuilder?: ProjectSnapshotBuilder, watchStateReader?: ProjectWatchStateReader}} options - Coordinator options and backends.
|
|
18
|
+
* @returns {ProjectWatchCoordinator} Configured coordinator.
|
|
19
|
+
*/
|
|
20
|
+
export declare function createProjectWatchCoordinator(options: {
|
|
21
|
+
builder?: ProjectBuilder;
|
|
22
|
+
manifestLoader?: ProjectManifestLoader;
|
|
23
|
+
nativeWatch: typeof watchFileSystem;
|
|
24
|
+
pollIntervalMs?: number;
|
|
25
|
+
quietPeriodMs?: number;
|
|
26
|
+
snapshotBuilder?: ProjectSnapshotBuilder;
|
|
27
|
+
watchStateReader?: ProjectWatchStateReader;
|
|
28
|
+
}): ProjectWatchCoordinator;
|
|
29
|
+
/**
|
|
30
|
+
* Turns filesystem hints into serialized complete project build transactions.
|
|
31
|
+
*/
|
|
32
|
+
export declare class ProjectWatchCoordinator {
|
|
33
|
+
#private;
|
|
34
|
+
/**
|
|
35
|
+
* Creates one idle coordinator without touching the filesystem.
|
|
36
|
+
* @param {{builder?: ProjectBuilder, manifestLoader?: ProjectManifestLoader, pollIntervalMs?: number, quietPeriodMs?: number, snapshotBuilder?: ProjectSnapshotBuilder}} [options] - Collaborators and bounded timing policy.
|
|
37
|
+
*/
|
|
38
|
+
constructor(options?: {
|
|
39
|
+
builder?: ProjectBuilder;
|
|
40
|
+
manifestLoader?: ProjectManifestLoader;
|
|
41
|
+
pollIntervalMs?: number;
|
|
42
|
+
quietPeriodMs?: number;
|
|
43
|
+
snapshotBuilder?: ProjectSnapshotBuilder;
|
|
44
|
+
});
|
|
45
|
+
/**
|
|
46
|
+
* Starts the initial build and remains active until shutdown or startup failure.
|
|
47
|
+
* @param {string} [projectPath] - Project manifest path.
|
|
48
|
+
* @param {ProjectWatchReporter} [reporter] - Watch protocol reporter.
|
|
49
|
+
* @param {{check?: boolean}} [options] - Whether every cycle runs target-owned checks.
|
|
50
|
+
* @returns {Promise<Readonly<ProjectWatchResult>>} Terminal watcher result.
|
|
51
|
+
*/
|
|
52
|
+
run(projectPath?: string, reporter?: ProjectWatchReporter, options?: {
|
|
53
|
+
check?: boolean;
|
|
54
|
+
}): Promise<Readonly<ProjectWatchResult>>;
|
|
55
|
+
/**
|
|
56
|
+
* Stops admitting work, cancels the exact active operation, and waits through child close and staging cleanup.
|
|
57
|
+
* @param {string} [reason] - Stable shutdown reason.
|
|
58
|
+
* @returns {Promise<Readonly<ProjectWatchResult>>} Terminal watcher result.
|
|
59
|
+
*/
|
|
60
|
+
stop(reason?: string): Promise<Readonly<ProjectWatchResult>>;
|
|
61
|
+
}
|
|
62
|
+
export type ProjectWatchStateReader = (filenames: Readonly<Set<string>>) => Promise<Map<string, string>>;
|
|
63
|
+
export type ProjectWatchObservation = {
|
|
64
|
+
/**
|
|
65
|
+
* - Marker type.
|
|
66
|
+
*/
|
|
67
|
+
type: "cycle-start" | "cycle-terminal" | "dirty" | "ready" | "reconciled" | "stopped" | "watch-backend";
|
|
68
|
+
/**
|
|
69
|
+
* - Related cycle number.
|
|
70
|
+
*/
|
|
71
|
+
cycle?: number;
|
|
72
|
+
/**
|
|
73
|
+
* - Marker status.
|
|
74
|
+
*/
|
|
75
|
+
status: "cancelled" | "dirty" | "failed" | "native" | "polling" | "ready" | "recovered" | "started" | "stopped" | "succeeded" | "superseded" | "unchanged";
|
|
76
|
+
};
|
|
77
|
+
export type ProjectWatchResult = {
|
|
78
|
+
/**
|
|
79
|
+
* - Watcher terminal state.
|
|
80
|
+
*/
|
|
81
|
+
status: "failed" | "stopped";
|
|
82
|
+
/**
|
|
83
|
+
* - Admitted cycle count.
|
|
84
|
+
*/
|
|
85
|
+
cycles: number;
|
|
86
|
+
/**
|
|
87
|
+
* - Stable terminal reason.
|
|
88
|
+
*/
|
|
89
|
+
reason: string;
|
|
90
|
+
};
|
|
91
|
+
export type WatchCycleInput = {
|
|
92
|
+
/**
|
|
93
|
+
* - Stable changed paths.
|
|
94
|
+
*/
|
|
95
|
+
changedPaths: readonly string[];
|
|
96
|
+
/**
|
|
97
|
+
* - Whether target checks are enabled.
|
|
98
|
+
*/
|
|
99
|
+
check: boolean;
|
|
100
|
+
/**
|
|
101
|
+
* - Preserved reconciliation failure.
|
|
102
|
+
*/
|
|
103
|
+
failure?: unknown;
|
|
104
|
+
/**
|
|
105
|
+
* - Reconciled project, when valid.
|
|
106
|
+
*/
|
|
107
|
+
project: SemantifoldProject | undefined;
|
|
108
|
+
/**
|
|
109
|
+
* - Reconciled snapshot, when valid.
|
|
110
|
+
*/
|
|
111
|
+
snapshot: ProjectSnapshot | undefined;
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* @typedef ProjectWatchObservation
|
|
115
|
+
* @property {"cycle-start" | "cycle-terminal" | "dirty" | "ready" | "reconciled" | "stopped" | "watch-backend"} type - Marker type.
|
|
116
|
+
* @property {number} [cycle] - Related cycle number.
|
|
117
|
+
* @property {"cancelled" | "dirty" | "failed" | "native" | "polling" | "ready" | "recovered" | "started" | "stopped" | "succeeded" | "superseded" | "unchanged"} status - Marker status.
|
|
118
|
+
*/
|
|
119
|
+
/**
|
|
120
|
+
* @typedef ProjectWatchResult
|
|
121
|
+
* @property {"failed" | "stopped"} status - Watcher terminal state.
|
|
122
|
+
* @property {number} cycles - Admitted cycle count.
|
|
123
|
+
* @property {string} reason - Stable terminal reason.
|
|
124
|
+
*/
|
|
125
|
+
/**
|
|
126
|
+
* @typedef WatchCycleInput
|
|
127
|
+
* @property {readonly string[]} changedPaths - Stable changed paths.
|
|
128
|
+
* @property {boolean} check - Whether target checks are enabled.
|
|
129
|
+
* @property {unknown} [failure] - Preserved reconciliation failure.
|
|
130
|
+
* @property {SemantifoldProject | undefined} project - Reconciled project, when valid.
|
|
131
|
+
* @property {ProjectSnapshot | undefined} snapshot - Reconciled snapshot, when valid.
|
|
132
|
+
*/
|
|
133
|
+
//# sourceMappingURL=project-watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-watch.d.ts","sourceRoot":"","sources":["../../src/project-watch.js"],"names":[],"mappings":"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"}
|