@fuzdev/fuz_gitops 0.78.0 → 0.79.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 +91 -17
- package/dist/ModulesDetail.svelte +22 -27
- package/dist/ModulesDetail.svelte.d.ts.map +1 -1
- package/dist/ModulesNav.svelte +8 -5
- package/dist/ModulesNav.svelte.d.ts.map +1 -1
- package/dist/ModulesPage.svelte +3 -5
- package/dist/ModulesPage.svelte.d.ts.map +1 -1
- package/dist/PageFooter.svelte +2 -2
- package/dist/PageHeader.svelte +6 -6
- package/dist/PageHeader.svelte.d.ts +0 -3
- package/dist/PageHeader.svelte.d.ts.map +1 -1
- package/dist/PullRequestsDetail.svelte +29 -20
- package/dist/PullRequestsDetail.svelte.d.ts.map +1 -1
- package/dist/PullRequestsPage.svelte +4 -6
- package/dist/PullRequestsPage.svelte.d.ts.map +1 -1
- package/dist/ReposTable.svelte +43 -55
- package/dist/ReposTable.svelte.d.ts.map +1 -1
- package/dist/ReposTree.svelte +9 -21
- package/dist/ReposTree.svelte.d.ts.map +1 -1
- package/dist/ReposTreeNav.svelte +9 -12
- package/dist/ReposTreeNav.svelte.d.ts.map +1 -1
- package/dist/TablePage.svelte +3 -5
- package/dist/TablePage.svelte.d.ts.map +1 -1
- package/dist/TreeItemPage.svelte +3 -5
- package/dist/TreeItemPage.svelte.d.ts.map +1 -1
- package/dist/TreePage.svelte +3 -5
- package/dist/TreePage.svelte.d.ts.map +1 -1
- package/dist/changeset_generator.d.ts.map +1 -1
- package/dist/changeset_generator.js +2 -2
- package/dist/changeset_reader.d.ts.map +1 -1
- package/dist/changeset_reader.js +3 -3
- package/dist/ci_reconcile.d.ts +6 -10
- package/dist/ci_reconcile.d.ts.map +1 -1
- package/dist/ci_reconcile.js +6 -8
- package/dist/dependency_graph.d.ts +26 -49
- package/dist/dependency_graph.d.ts.map +1 -1
- package/dist/dependency_graph.js +40 -83
- package/dist/dependency_updater.d.ts +1 -1
- package/dist/dependency_updater.d.ts.map +1 -1
- package/dist/dependency_updater.js +14 -9
- package/dist/fetch_repo_data.d.ts +34 -8
- package/dist/fetch_repo_data.d.ts.map +1 -1
- package/dist/fetch_repo_data.js +44 -22
- package/dist/fs_fetch_value_cache.d.ts +1 -1
- package/dist/fs_fetch_value_cache.d.ts.map +1 -1
- package/dist/fs_fetch_value_cache.js +3 -3
- package/dist/git_operations.d.ts +6 -49
- package/dist/git_operations.d.ts.map +1 -1
- package/dist/git_operations.js +13 -126
- package/dist/github.d.ts +17 -2
- package/dist/github.d.ts.map +1 -1
- package/dist/github.js +17 -8
- package/dist/github_helpers.d.ts.map +1 -1
- package/dist/github_helpers.js +3 -11
- package/dist/gitops_analyze.task.d.ts +24 -2
- package/dist/gitops_analyze.task.d.ts.map +1 -1
- package/dist/gitops_analyze.task.js +47 -34
- package/dist/gitops_config.d.ts +34 -79
- package/dist/gitops_config.d.ts.map +1 -1
- package/dist/gitops_config.js +76 -53
- package/dist/gitops_constants.d.ts +6 -4
- package/dist/gitops_constants.d.ts.map +1 -1
- package/dist/gitops_constants.js +6 -4
- package/dist/gitops_plan.task.d.ts +29 -3
- package/dist/gitops_plan.task.d.ts.map +1 -1
- package/dist/gitops_plan.task.js +83 -61
- package/dist/gitops_publish.task.d.ts +62 -2
- package/dist/gitops_publish.task.d.ts.map +1 -1
- package/dist/gitops_publish.task.js +193 -105
- package/dist/gitops_run.task.d.ts +74 -0
- package/dist/gitops_run.task.d.ts.map +1 -1
- package/dist/gitops_run.task.js +176 -162
- package/dist/gitops_sync.task.d.ts +65 -3
- package/dist/gitops_sync.task.d.ts.map +1 -1
- package/dist/gitops_sync.task.js +163 -37
- package/dist/gitops_task_helpers.d.ts +86 -59
- package/dist/gitops_task_helpers.d.ts.map +1 -1
- package/dist/gitops_task_helpers.js +120 -79
- package/dist/gitops_validate.task.d.ts +1 -2
- package/dist/gitops_validate.task.d.ts.map +1 -1
- package/dist/gitops_validate.task.js +25 -32
- package/dist/graph_validation.d.ts +16 -27
- package/dist/graph_validation.d.ts.map +1 -1
- package/dist/graph_validation.js +24 -65
- package/dist/local_repo.d.ts +50 -62
- package/dist/local_repo.d.ts.map +1 -1
- package/dist/local_repo.js +83 -196
- package/dist/log_helpers.d.ts +8 -8
- package/dist/log_helpers.d.ts.map +1 -1
- package/dist/multi_repo_publisher.d.ts +10 -0
- package/dist/multi_repo_publisher.d.ts.map +1 -1
- package/dist/multi_repo_publisher.js +125 -61
- package/dist/npm_registry.d.ts +23 -19
- package/dist/npm_registry.d.ts.map +1 -1
- package/dist/npm_registry.js +21 -48
- package/dist/operations.d.ts +75 -180
- package/dist/operations.d.ts.map +1 -1
- package/dist/operations.js +15 -7
- package/dist/operations_defaults.d.ts +17 -2
- package/dist/operations_defaults.d.ts.map +1 -1
- package/dist/operations_defaults.js +111 -128
- package/dist/output_helpers.d.ts +36 -0
- package/dist/output_helpers.d.ts.map +1 -1
- package/dist/output_helpers.js +37 -3
- package/dist/preflight_checks.d.ts +20 -27
- package/dist/preflight_checks.d.ts.map +1 -1
- package/dist/preflight_checks.js +37 -126
- package/dist/publish_gate.d.ts.map +1 -1
- package/dist/publish_steps.d.ts +2 -4
- package/dist/publish_steps.d.ts.map +1 -1
- package/dist/publish_steps.js +4 -8
- package/dist/publishing_event.d.ts +2 -8
- package/dist/publishing_event.d.ts.map +1 -1
- package/dist/publishing_event.js +20 -17
- package/dist/publishing_event_handler.d.ts +10 -8
- package/dist/publishing_event_handler.d.ts.map +1 -1
- package/dist/publishing_event_handler.js +19 -17
- package/dist/publishing_plan.d.ts +16 -1
- package/dist/publishing_plan.d.ts.map +1 -1
- package/dist/publishing_plan.js +332 -254
- package/dist/publishing_plan_helpers.d.ts.map +1 -1
- package/dist/publishing_plan_helpers.js +3 -3
- package/dist/publishing_plan_logging.d.ts +1 -1
- package/dist/publishing_plan_logging.d.ts.map +1 -1
- package/dist/publishing_plan_logging.js +22 -15
- package/dist/repo.svelte.d.ts +7 -0
- package/dist/repo.svelte.d.ts.map +1 -1
- package/dist/repo.svelte.js +3 -0
- package/dist/repo_readiness.d.ts +210 -0
- package/dist/repo_readiness.d.ts.map +1 -0
- package/dist/repo_readiness.js +516 -0
- package/dist/repos_status.d.ts +3340 -0
- package/dist/repos_status.d.ts.map +1 -0
- package/dist/repos_status.js +555 -0
- package/dist/repos_status_load.d.ts +65 -0
- package/dist/repos_status_load.d.ts.map +1 -0
- package/dist/repos_status_load.js +131 -0
- package/dist/version_utils.js +1 -1
- package/package.json +15 -34
- package/src/lib/cargo_toml.ts +3 -3
- package/src/lib/changeset_generator.ts +19 -19
- package/src/lib/changeset_reader.ts +18 -18
- package/src/lib/ci_reconcile.ts +12 -16
- package/src/lib/dependency_graph.ts +61 -113
- package/src/lib/dependency_updater.ts +36 -30
- package/src/lib/fetch_repo_data.ts +71 -34
- package/src/lib/fs_fetch_value_cache.ts +15 -11
- package/src/lib/git_operations.ts +22 -194
- package/src/lib/github.ts +33 -21
- package/src/lib/github_helpers.ts +9 -16
- package/src/lib/gitops_analyze.task.ts +104 -66
- package/src/lib/gitops_config.ts +90 -139
- package/src/lib/gitops_constants.ts +6 -4
- package/src/lib/gitops_plan.task.ts +128 -76
- package/src/lib/gitops_publish.task.ts +280 -144
- package/src/lib/gitops_run.task.ts +265 -193
- package/src/lib/gitops_sync.task.ts +236 -52
- package/src/lib/gitops_task_helpers.ts +170 -114
- package/src/lib/gitops_validate.task.ts +44 -54
- package/src/lib/graph_validation.ts +28 -89
- package/src/lib/local_repo.ts +128 -335
- package/src/lib/log_helpers.ts +18 -28
- package/src/lib/multi_repo_publisher.ts +192 -110
- package/src/lib/npm_registry.ts +42 -67
- package/src/lib/operations.ts +99 -160
- package/src/lib/operations_defaults.ts +157 -201
- package/src/lib/output_helpers.ts +58 -6
- package/src/lib/preflight_checks.ts +52 -188
- package/src/lib/publish_gate.ts +7 -9
- package/src/lib/publish_steps.ts +27 -25
- package/src/lib/publishing_event.ts +26 -23
- package/src/lib/publishing_event_handler.ts +24 -22
- package/src/lib/publishing_plan.ts +474 -310
- package/src/lib/publishing_plan_helpers.ts +16 -12
- package/src/lib/publishing_plan_logging.ts +53 -44
- package/src/lib/repo.svelte.ts +16 -8
- package/src/lib/repo_readiness.ts +647 -0
- package/src/lib/repos_status.ts +671 -0
- package/src/lib/repos_status_load.ts +173 -0
- package/src/lib/version_utils.ts +3 -3
- package/dist/config_reconcile.d.ts +0 -46
- package/dist/config_reconcile.d.ts.map +0 -1
- package/dist/config_reconcile.js +0 -60
- package/dist/paths.d.ts +0 -7
- package/dist/paths.d.ts.map +0 -1
- package/dist/paths.js +0 -6
- package/dist/repo_ops.d.ts +0 -59
- package/dist/repo_ops.d.ts.map +0 -1
- package/dist/repo_ops.js +0 -170
- package/dist/resolved_gitops_config.d.ts +0 -9
- package/dist/resolved_gitops_config.d.ts.map +0 -1
- package/dist/resolved_gitops_config.js +0 -12
- package/src/lib/config_reconcile.ts +0 -94
- package/src/lib/paths.ts +0 -6
- package/src/lib/repo_ops.ts +0 -216
- package/src/lib/resolved_gitops_config.ts +0 -27
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repos_status.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/repos_status.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAAuD,CAAC;AACxF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schemas for the `repos status --json` document, the report the Rust
|
|
3
|
+
* `repos` tool (`crates/fuz_repos`) prints, and the error document it prints
|
|
4
|
+
* in place of the report on a fatal error.
|
|
5
|
+
*
|
|
6
|
+
* The schemas mirror the Rust types by hand, each named as its Rust type
|
|
7
|
+
* prefixed `Repos` (`EntryStatus` is `ReposEntryStatus`), with fields as
|
|
8
|
+
* serde writes them: snake_case, a tagged enum as an object whose `kind`
|
|
9
|
+
* names its variant, an `Option` as `null` (never omitted), counts as
|
|
10
|
+
* integers, and times as unix seconds. A flattened enum's `kind`
|
|
11
|
+
* and payload sit beside its struct's own fields, so those structs are
|
|
12
|
+
* unions here (`ReposUnregisteredClone`, `ReposStatusErrorBody`) — or, for
|
|
13
|
+
* an enum with no payloads, an object whose `kind` is an enum
|
|
14
|
+
* (`ReposProbeError`). Where a
|
|
15
|
+
* Rust enum holds variants the status document never carries, the mirror
|
|
16
|
+
* leaves them out: `ReposFetchFailure` has no push rejection, and
|
|
17
|
+
* `ReposStatusErrorBody` holds only the errors `repos status --json` can
|
|
18
|
+
* print.
|
|
19
|
+
*
|
|
20
|
+
* Every object is strict and every union closed, so a field or variant the
|
|
21
|
+
* mirror doesn't know fails the parse. The Rust side bumps `version` on any
|
|
22
|
+
* change to the document's shape; a consumer checks it first, and on a
|
|
23
|
+
* mismatch reports both versions and how to install the binary this repo
|
|
24
|
+
* builds (`cargo install --path crates/fuz_repos --locked`) rather than a
|
|
25
|
+
* parse error.
|
|
26
|
+
*
|
|
27
|
+
* Drift is caught by the golden fixtures: a Rust test writes every status
|
|
28
|
+
* document shape to `src/test/fixtures/repos_status/`, covering every
|
|
29
|
+
* variant the status report and its error document can hold, and a TS test
|
|
30
|
+
* parses each with these schemas. The field semantics live in the Rust
|
|
31
|
+
* rustdoc and the JSON contract in `docs/repos.md`. The `repos sync --json`
|
|
32
|
+
* and `repos push --json` documents have no TS consumer and aren't
|
|
33
|
+
* mirrored here.
|
|
34
|
+
*
|
|
35
|
+
* @module
|
|
36
|
+
*/
|
|
37
|
+
import { z } from 'zod';
|
|
38
|
+
/**
|
|
39
|
+
* The `repos status --json` document's format version, Rust's
|
|
40
|
+
* `STATUS_FORMAT_VERSION`: the one these schemas parse.
|
|
41
|
+
*/
|
|
42
|
+
export const REPOS_STATUS_FORMAT_VERSION = 18;
|
|
43
|
+
// u32 and u64 on the Rust side
|
|
44
|
+
const Count = z.number().int().nonnegative();
|
|
45
|
+
const UnixSeconds = z.number().int().nonnegative().meta({ description: 'a time in unix seconds' });
|
|
46
|
+
// --- sessions ---
|
|
47
|
+
/** Where a live Claude Code session was recorded. */
|
|
48
|
+
export const ReposSessionSource = z.enum(['session_file', 'roster_worker']);
|
|
49
|
+
/** A live Claude Code session: its process, and where it works. */
|
|
50
|
+
export const ReposSession = z.strictObject({
|
|
51
|
+
pid: Count,
|
|
52
|
+
cwd: z.string(),
|
|
53
|
+
worktree: z.string().nullable(),
|
|
54
|
+
process_cwd: z.string().nullable(),
|
|
55
|
+
source: ReposSessionSource
|
|
56
|
+
});
|
|
57
|
+
/** Why busy detection can't vouch for every live session. */
|
|
58
|
+
export const ReposUnavailable = z.discriminatedUnion('kind', [
|
|
59
|
+
z.strictObject({ kind: z.literal('home_unknown') }),
|
|
60
|
+
z.strictObject({ kind: z.literal('relative_config_dir'), path: z.string() }),
|
|
61
|
+
z.strictObject({ kind: z.literal('unreadable'), path: z.string(), error: z.string() }),
|
|
62
|
+
z.strictObject({ kind: z.literal('unparseable'), path: z.string(), error: z.string() }),
|
|
63
|
+
z.strictObject({
|
|
64
|
+
kind: z.literal('foreign_pid_domain'),
|
|
65
|
+
path: z.string(),
|
|
66
|
+
pid_domain: z.string(),
|
|
67
|
+
source: ReposSessionSource
|
|
68
|
+
})
|
|
69
|
+
]);
|
|
70
|
+
/** Busy detection as the report carries it. */
|
|
71
|
+
export const ReposSessions = z.discriminatedUnion('kind', [
|
|
72
|
+
z.strictObject({ kind: z.literal('available'), unscoped: z.array(ReposSession) }),
|
|
73
|
+
z.strictObject({ kind: z.literal('unavailable'), reason: ReposUnavailable })
|
|
74
|
+
]);
|
|
75
|
+
// --- registry ---
|
|
76
|
+
/** Which registry table an entry comes from. */
|
|
77
|
+
export const ReposEntryKind = z.enum(['repo', 'reference']);
|
|
78
|
+
/** A repo's declared visibility on its host. */
|
|
79
|
+
export const ReposVisibility = z.enum(['public', 'private']);
|
|
80
|
+
/** A repo's list of the sibling checkouts it uses. */
|
|
81
|
+
export const ReposCheckoutList = z.enum(['requires', 'consults']);
|
|
82
|
+
/** An entry by table and key. */
|
|
83
|
+
export const ReposEntryName = z.strictObject({ kind: ReposEntryKind, key: z.string() });
|
|
84
|
+
/** A registry integrity rule broken. */
|
|
85
|
+
export const ReposRegistryIssue = z.discriminatedUnion('kind', [
|
|
86
|
+
z.strictObject({ kind: z.literal('repo_not_owned'), key: z.string(), account: z.string() }),
|
|
87
|
+
z.strictObject({ kind: z.literal('fork_not_owned'), key: z.string() }),
|
|
88
|
+
z.strictObject({ kind: z.literal('dir_not_a_name'), entry: ReposEntryName, dir: z.string() }),
|
|
89
|
+
z.strictObject({
|
|
90
|
+
kind: z.literal('dir_claimed_twice'),
|
|
91
|
+
dir: z.string(),
|
|
92
|
+
first: ReposEntryName,
|
|
93
|
+
second: ReposEntryName
|
|
94
|
+
}),
|
|
95
|
+
z.strictObject({ kind: z.literal('key_in_both'), key: z.string() }),
|
|
96
|
+
z.strictObject({ kind: z.literal('key_is_other_dir'), key: z.string(), entry: ReposEntryName }),
|
|
97
|
+
z.strictObject({
|
|
98
|
+
kind: z.literal('unknown_checkout_ref'),
|
|
99
|
+
key: z.string(),
|
|
100
|
+
field: ReposCheckoutList,
|
|
101
|
+
target: z.string()
|
|
102
|
+
}),
|
|
103
|
+
z.strictObject({ kind: z.literal('self_ref'), key: z.string(), field: ReposCheckoutList }),
|
|
104
|
+
z.strictObject({ kind: z.literal('requires_and_consults'), key: z.string(), target: z.string() })
|
|
105
|
+
]);
|
|
106
|
+
// --- verdicts ---
|
|
107
|
+
/** What holds a branch's action back. */
|
|
108
|
+
export const ReposBranchHold = z.enum([
|
|
109
|
+
'pinned',
|
|
110
|
+
'entry',
|
|
111
|
+
'push_url',
|
|
112
|
+
'fetch_failed',
|
|
113
|
+
'dirty_checkout',
|
|
114
|
+
'unprobed_worktree',
|
|
115
|
+
'several_checkouts',
|
|
116
|
+
'busy',
|
|
117
|
+
'busy_unknown'
|
|
118
|
+
]);
|
|
119
|
+
/** What holds a reference's refresh back. */
|
|
120
|
+
export const ReposRefreshHold = z.enum(['pinned', 'entry', 'origin_not_https']);
|
|
121
|
+
/** What holds a missing entry's clone back. */
|
|
122
|
+
export const ReposCloneHold = z.enum(['entry', 'busy', 'unprobed_worktree']);
|
|
123
|
+
/** What a run does about refreshing a third-party reference or a pin. */
|
|
124
|
+
export const ReposRefreshVerdict = z.discriminatedUnion('kind', [
|
|
125
|
+
z.strictObject({ kind: z.literal('act') }),
|
|
126
|
+
z.strictObject({ kind: z.literal('held'), by: ReposRefreshHold })
|
|
127
|
+
]);
|
|
128
|
+
/** Whether a repo is at the entry's dir. */
|
|
129
|
+
export const ReposPresence = z.discriminatedUnion('kind', [
|
|
130
|
+
z.strictObject({ kind: z.literal('present') }),
|
|
131
|
+
z.strictObject({ kind: z.literal('missing') }),
|
|
132
|
+
z.strictObject({ kind: z.literal('not_a_repo') })
|
|
133
|
+
]);
|
|
134
|
+
/** How sync would clone a missing entry. */
|
|
135
|
+
export const ReposCloneRecipe = z.strictObject({
|
|
136
|
+
url: z.string(),
|
|
137
|
+
branch: z.string().nullable(),
|
|
138
|
+
shallow: z.boolean(),
|
|
139
|
+
sparse: z.string().nullable()
|
|
140
|
+
});
|
|
141
|
+
/** What sync does about a missing entry: clone it, or why not yet. */
|
|
142
|
+
export const ReposCloneVerdict = z.discriminatedUnion('kind', [
|
|
143
|
+
z.strictObject({ kind: z.literal('act'), recipe: ReposCloneRecipe }),
|
|
144
|
+
z.strictObject({ kind: z.literal('held'), recipe: ReposCloneRecipe, by: ReposCloneHold })
|
|
145
|
+
]);
|
|
146
|
+
/** A sync action on a branch. */
|
|
147
|
+
export const ReposSyncAction = z.discriminatedUnion('kind', [
|
|
148
|
+
z.strictObject({ kind: z.literal('push'), commits: Count }),
|
|
149
|
+
z.strictObject({ kind: z.literal('fast_forward'), commits: Count }),
|
|
150
|
+
z.strictObject({ kind: z.literal('move') })
|
|
151
|
+
]);
|
|
152
|
+
/** Why a branch is left to a person. */
|
|
153
|
+
export const ReposBranchNeedsHuman = z.enum([
|
|
154
|
+
'diverged',
|
|
155
|
+
'unmapped',
|
|
156
|
+
'archived_ahead',
|
|
157
|
+
'shallow_local_work',
|
|
158
|
+
'upstream_not_a_branch'
|
|
159
|
+
]);
|
|
160
|
+
/** Why a branch reads as cleanup. */
|
|
161
|
+
export const ReposCleanupReason = z.enum(['merged', 'upstream_gone']);
|
|
162
|
+
/** What sync does about a branch. */
|
|
163
|
+
export const ReposVerdict = z.discriminatedUnion('kind', [
|
|
164
|
+
z.strictObject({ kind: z.literal('quiet') }),
|
|
165
|
+
z.strictObject({ kind: z.literal('act'), action: ReposSyncAction }),
|
|
166
|
+
z.strictObject({ kind: z.literal('held'), action: ReposSyncAction, by: ReposBranchHold }),
|
|
167
|
+
z.strictObject({ kind: z.literal('needs_human'), reason: ReposBranchNeedsHuman }),
|
|
168
|
+
z.strictObject({ kind: z.literal('local_only') }),
|
|
169
|
+
z.strictObject({
|
|
170
|
+
kind: z.literal('cleanup'),
|
|
171
|
+
reason: ReposCleanupReason,
|
|
172
|
+
removable_worktree: z.string().nullable()
|
|
173
|
+
})
|
|
174
|
+
]);
|
|
175
|
+
// --- checkouts and branches ---
|
|
176
|
+
/** A clone's shape: shallow, sparse, or partial. */
|
|
177
|
+
export const ReposLayout = z.strictObject({
|
|
178
|
+
shallow: z.boolean(),
|
|
179
|
+
sparse: z.boolean(),
|
|
180
|
+
partial_filter: z.string().nullable()
|
|
181
|
+
});
|
|
182
|
+
/**
|
|
183
|
+
* A checkout's HEAD: a probed checkout's, an unprobed worktree's, or an
|
|
184
|
+
* unlisted git dir's — the last two `null` when it can't be read.
|
|
185
|
+
*/
|
|
186
|
+
export const ReposHead = z.discriminatedUnion('kind', [
|
|
187
|
+
z.strictObject({ kind: z.literal('branch'), name: z.string() }),
|
|
188
|
+
z.strictObject({ kind: z.literal('detached'), commit: z.string() })
|
|
189
|
+
]);
|
|
190
|
+
/** A checkout's uncommitted work, by kind. */
|
|
191
|
+
export const ReposUncommitted = z.strictObject({
|
|
192
|
+
staged: Count,
|
|
193
|
+
unstaged: Count,
|
|
194
|
+
untracked: Count,
|
|
195
|
+
conflicted: Count
|
|
196
|
+
});
|
|
197
|
+
/** A git operation in progress. */
|
|
198
|
+
export const ReposInProgressOp = z.enum([
|
|
199
|
+
'rebase',
|
|
200
|
+
'merge',
|
|
201
|
+
'cherry_pick',
|
|
202
|
+
'revert',
|
|
203
|
+
'bisect',
|
|
204
|
+
'sequencer',
|
|
205
|
+
'am'
|
|
206
|
+
]);
|
|
207
|
+
/** One checkout of a repo: its primary, or a linked worktree probed. */
|
|
208
|
+
export const ReposCheckout = z.strictObject({
|
|
209
|
+
path: z.string(),
|
|
210
|
+
primary: z.boolean(),
|
|
211
|
+
head: ReposHead,
|
|
212
|
+
uncommitted: ReposUncommitted,
|
|
213
|
+
in_progress: ReposInProgressOp.nullable(),
|
|
214
|
+
locked: z.boolean(),
|
|
215
|
+
linked: z.boolean(),
|
|
216
|
+
submodules: z.boolean().nullable(),
|
|
217
|
+
busy: z.array(ReposSession)
|
|
218
|
+
});
|
|
219
|
+
/** A branch's relation to its upstream. */
|
|
220
|
+
export const ReposRelation = z.discriminatedUnion('kind', [
|
|
221
|
+
z.strictObject({ kind: z.literal('in_sync') }),
|
|
222
|
+
z.strictObject({ kind: z.literal('ahead'), commits: Count }),
|
|
223
|
+
z.strictObject({ kind: z.literal('behind'), commits: Count }),
|
|
224
|
+
z.strictObject({ kind: z.literal('diverged'), ahead: Count, behind: Count }),
|
|
225
|
+
z.strictObject({ kind: z.literal('shallow') }),
|
|
226
|
+
z.strictObject({ kind: z.literal('gone') }),
|
|
227
|
+
z.strictObject({ kind: z.literal('unmapped') }),
|
|
228
|
+
z.strictObject({ kind: z.literal('untracked') })
|
|
229
|
+
]);
|
|
230
|
+
/** One local branch and its verdict. */
|
|
231
|
+
export const ReposBranchStatus = z.strictObject({
|
|
232
|
+
name: z.string(),
|
|
233
|
+
upstream: z.string().nullable(),
|
|
234
|
+
worktree: z.string().nullable(),
|
|
235
|
+
symref: z.string().nullable(),
|
|
236
|
+
unique_commits: Count,
|
|
237
|
+
newest_commit_at: UnixSeconds,
|
|
238
|
+
relation: ReposRelation,
|
|
239
|
+
verdict: ReposVerdict
|
|
240
|
+
});
|
|
241
|
+
/** Whether an entry's primary checkout sits where the registry puts it. */
|
|
242
|
+
export const ReposAtRest = z.strictObject({
|
|
243
|
+
on_branch: z.boolean().nullable(),
|
|
244
|
+
clean: z.boolean(),
|
|
245
|
+
idle: z.boolean(),
|
|
246
|
+
followed: ReposRelation.nullable()
|
|
247
|
+
});
|
|
248
|
+
// --- worktrees not probed ---
|
|
249
|
+
/** Why a worktree wasn't probed. */
|
|
250
|
+
export const ReposUnprobedWhy = z.discriminatedUnion('kind', [
|
|
251
|
+
z.strictObject({ kind: z.literal('prunable') }),
|
|
252
|
+
z.strictObject({ kind: z.literal('missing') }),
|
|
253
|
+
z.strictObject({ kind: z.literal('failed'), error: z.string() })
|
|
254
|
+
]);
|
|
255
|
+
/** What an unprobed worktree's git dir holds that a prune would lose. */
|
|
256
|
+
export const ReposGitDirHolds = z.strictObject({
|
|
257
|
+
submodules: z.boolean(),
|
|
258
|
+
worktree_refs: z.boolean(),
|
|
259
|
+
staged: z.boolean().nullable()
|
|
260
|
+
});
|
|
261
|
+
/** What pruning an unprobed worktree would lose. */
|
|
262
|
+
export const ReposPruneLoss = z.discriminatedUnion('kind', [
|
|
263
|
+
z.strictObject({ kind: z.literal('operation'), op: ReposInProgressOp }),
|
|
264
|
+
z.strictObject({ kind: z.literal('detached_head') }),
|
|
265
|
+
z.strictObject({ kind: z.literal('unknown_head') }),
|
|
266
|
+
z.strictObject({ kind: z.literal('missing_branch'), name: z.string() }),
|
|
267
|
+
z.strictObject({ kind: z.literal('submodules') }),
|
|
268
|
+
z.strictObject({ kind: z.literal('worktree_refs') }),
|
|
269
|
+
z.strictObject({ kind: z.literal('staged_changes') }),
|
|
270
|
+
z.strictObject({ kind: z.literal('unmatched_git_dir') }),
|
|
271
|
+
z.strictObject({ kind: z.literal('relative_gitdir'), git_dir: z.string() })
|
|
272
|
+
]);
|
|
273
|
+
/** Whether pruning an unprobed worktree is safe. */
|
|
274
|
+
export const ReposPrune = z.discriminatedUnion('kind', [
|
|
275
|
+
z.strictObject({ kind: z.literal('safe') }),
|
|
276
|
+
z.strictObject({ kind: z.literal('loses'), losses: z.array(ReposPruneLoss) }),
|
|
277
|
+
z.strictObject({ kind: z.literal('moved'), to: z.array(z.string()) })
|
|
278
|
+
]);
|
|
279
|
+
/** A worktree of the repo that couldn't be probed. */
|
|
280
|
+
export const ReposUnprobedWorktree = z.strictObject({
|
|
281
|
+
path: z.string(),
|
|
282
|
+
git_dir: z.string().nullable(),
|
|
283
|
+
head: ReposHead.nullable().meta({ description: 'null when its HEAD cannot be read' }),
|
|
284
|
+
locked: z.boolean(),
|
|
285
|
+
in_progress: ReposInProgressOp.nullable(),
|
|
286
|
+
why: ReposUnprobedWhy,
|
|
287
|
+
holds: ReposGitDirHolds.nullable()
|
|
288
|
+
});
|
|
289
|
+
/** An unprobed worktree (flattened) with its prune verdict and live sessions. */
|
|
290
|
+
export const ReposUnprobedWorktreeStatus = ReposUnprobedWorktree.extend({
|
|
291
|
+
prune: ReposPrune.nullable(),
|
|
292
|
+
busy: z.array(ReposSession)
|
|
293
|
+
});
|
|
294
|
+
// --- remotes ---
|
|
295
|
+
/** The `origin` remote as git sees it, when it isn't the registry's `url`. */
|
|
296
|
+
export const ReposOriginRemote = z.discriminatedUnion('kind', [
|
|
297
|
+
z.strictObject({ kind: z.literal('url'), url: z.string() }),
|
|
298
|
+
z.strictObject({ kind: z.literal('no_url') }),
|
|
299
|
+
z.strictObject({ kind: z.literal('missing') })
|
|
300
|
+
]);
|
|
301
|
+
/** Why no `git remote` command fits an origin's fix. */
|
|
302
|
+
export const ReposOriginByHand = z.enum([
|
|
303
|
+
'outside_repo_file',
|
|
304
|
+
'valueless_url',
|
|
305
|
+
'empty_value',
|
|
306
|
+
'several_urls'
|
|
307
|
+
]);
|
|
308
|
+
/** How to point `origin` at the registry's URL. */
|
|
309
|
+
export const ReposOriginFix = z.discriminatedUnion('kind', [
|
|
310
|
+
z.strictObject({ kind: z.literal('add') }),
|
|
311
|
+
z.strictObject({ kind: z.literal('set_url') }),
|
|
312
|
+
z.strictObject({ kind: z.literal('by_hand'), reason: ReposOriginByHand })
|
|
313
|
+
]);
|
|
314
|
+
/** Why a remote couldn't be reached. */
|
|
315
|
+
export const ReposUnreachableCause = z.enum(['dns', 'connection', 'host_key', 'auth']);
|
|
316
|
+
/** How to repair a fetch refspec naming a ref gone from origin. */
|
|
317
|
+
export const ReposRefGoneFix = z.discriminatedUnion('kind', [
|
|
318
|
+
z.strictObject({ kind: z.literal('unset_refspec'), pattern: z.string() }),
|
|
319
|
+
z.strictObject({ kind: z.literal('set_branches'), branch: z.string().nullable() }),
|
|
320
|
+
z.strictObject({ kind: z.literal('by_hand') })
|
|
321
|
+
]);
|
|
322
|
+
/**
|
|
323
|
+
* Why a fetch or the visibility check failed, or why the tool refused to
|
|
324
|
+
* fetch: Rust's `RemoteFailure` without `rejected`, which only a push meets.
|
|
325
|
+
*/
|
|
326
|
+
export const ReposFetchFailure = z.discriminatedUnion('kind', [
|
|
327
|
+
z.strictObject({ kind: z.literal('ref_gone'), refname: z.string(), fix: ReposRefGoneFix }),
|
|
328
|
+
z.strictObject({
|
|
329
|
+
kind: z.literal('unreachable'),
|
|
330
|
+
cause: ReposUnreachableCause,
|
|
331
|
+
message: z.string()
|
|
332
|
+
}),
|
|
333
|
+
z.strictObject({ kind: z.literal('repo_not_found'), message: z.string() }),
|
|
334
|
+
z.strictObject({
|
|
335
|
+
kind: z.literal('timed_out'),
|
|
336
|
+
after_secs: Count.meta({ description: "the runner's timeout in seconds" })
|
|
337
|
+
}),
|
|
338
|
+
z.strictObject({ kind: z.literal('failed'), message: z.string() }),
|
|
339
|
+
z.strictObject({ kind: z.literal('refspec_outside_origin'), refspec: z.string() }),
|
|
340
|
+
z.strictObject({
|
|
341
|
+
kind: z.literal('origin_refs_shared'),
|
|
342
|
+
remote: z.string(),
|
|
343
|
+
refspec: z.string()
|
|
344
|
+
}),
|
|
345
|
+
z.strictObject({ kind: z.literal('legacy_remotes_unreadable'), path: z.string() })
|
|
346
|
+
]);
|
|
347
|
+
/** What an anonymous read of a repo declared private found. */
|
|
348
|
+
export const ReposVisibilityCheck = z.discriminatedUnion('kind', [
|
|
349
|
+
z.strictObject({ kind: z.literal('leak') }),
|
|
350
|
+
z.strictObject({ kind: z.literal('private') }),
|
|
351
|
+
z.strictObject({ kind: z.literal('unknown'), failure: ReposFetchFailure })
|
|
352
|
+
]);
|
|
353
|
+
// --- entries ---
|
|
354
|
+
/** What kind of failure stopped an entry's probe. */
|
|
355
|
+
export const ReposProbeErrorKind = z.enum([
|
|
356
|
+
'path_unreadable',
|
|
357
|
+
'non_utf8_path',
|
|
358
|
+
'config_unreadable',
|
|
359
|
+
'fetch_url_unreadable',
|
|
360
|
+
'push_urls_unreadable',
|
|
361
|
+
'git_not_run',
|
|
362
|
+
'git_timed_out',
|
|
363
|
+
'git_failed',
|
|
364
|
+
'unexpected_output'
|
|
365
|
+
]);
|
|
366
|
+
/** Why an entry's probe failed: its kind, and a message for display. */
|
|
367
|
+
export const ReposProbeError = z.strictObject({
|
|
368
|
+
kind: ReposProbeErrorKind,
|
|
369
|
+
message: z.string()
|
|
370
|
+
});
|
|
371
|
+
/** Why sync would stop on an entry and leave it to a person. */
|
|
372
|
+
export const ReposNeedsHuman = z.discriminatedUnion('kind', [
|
|
373
|
+
z.strictObject({ kind: z.literal('not_a_repo'), detail: z.string() }),
|
|
374
|
+
z.strictObject({
|
|
375
|
+
kind: z.literal('operation_in_progress'),
|
|
376
|
+
checkout: z.string(),
|
|
377
|
+
op: ReposInProgressOp
|
|
378
|
+
}),
|
|
379
|
+
z.strictObject({
|
|
380
|
+
kind: z.literal('origin_mismatch'),
|
|
381
|
+
origin: ReposOriginRemote,
|
|
382
|
+
expected: z.string(),
|
|
383
|
+
fix: ReposOriginFix
|
|
384
|
+
}),
|
|
385
|
+
z.strictObject({
|
|
386
|
+
kind: z.literal('origin_not_https'),
|
|
387
|
+
fetch_url: z.string(),
|
|
388
|
+
expected: z.string(),
|
|
389
|
+
fix: ReposOriginFix.nullable()
|
|
390
|
+
}),
|
|
391
|
+
z.strictObject({
|
|
392
|
+
kind: z.literal('fetch_url_mismatch'),
|
|
393
|
+
fetch_url: z.string(),
|
|
394
|
+
expected: z.string(),
|
|
395
|
+
fix: ReposOriginFix.nullable()
|
|
396
|
+
}),
|
|
397
|
+
z.strictObject({ kind: z.literal('worktree_unreadable'), path: z.string() }),
|
|
398
|
+
z.strictObject({ kind: z.literal('default_branch_missing'), branch: z.string() }),
|
|
399
|
+
z.strictObject({ kind: z.literal('default_branch_no_upstream'), branch: z.string() }),
|
|
400
|
+
z.strictObject({ kind: z.literal('default_branch_gone'), branch: z.string() }),
|
|
401
|
+
z.strictObject({ kind: z.literal('unexpected_detached'), checkout: z.string() }),
|
|
402
|
+
z.strictObject({
|
|
403
|
+
kind: z.literal('checkout_unresolvable'),
|
|
404
|
+
checkout: z.string(),
|
|
405
|
+
path: z.string(),
|
|
406
|
+
error: z.string()
|
|
407
|
+
}),
|
|
408
|
+
z.strictObject({
|
|
409
|
+
kind: z.literal('unlisted_git_dir'),
|
|
410
|
+
git_dir: z.string(),
|
|
411
|
+
head: ReposHead.nullable().meta({ description: 'null when its HEAD cannot be read' }),
|
|
412
|
+
busy: z.array(ReposSession)
|
|
413
|
+
}),
|
|
414
|
+
z.strictObject({
|
|
415
|
+
kind: z.literal('push_url_mismatch'),
|
|
416
|
+
push_urls: z.array(z.string()),
|
|
417
|
+
expected: z.string()
|
|
418
|
+
}),
|
|
419
|
+
z.strictObject({ kind: z.literal('clone_shares_repo'), with: z.string() }),
|
|
420
|
+
z.strictObject({ kind: z.literal('cloned_unregistered'), dir: z.string() })
|
|
421
|
+
]);
|
|
422
|
+
/** One registry entry's state. */
|
|
423
|
+
export const ReposEntryStatus = z.strictObject({
|
|
424
|
+
key: z.string(),
|
|
425
|
+
kind: ReposEntryKind,
|
|
426
|
+
dir: z.string(),
|
|
427
|
+
url: z.string(),
|
|
428
|
+
writable: z.boolean(),
|
|
429
|
+
archived: z.boolean(),
|
|
430
|
+
visibility: ReposVisibility.nullable(),
|
|
431
|
+
ci: z.boolean(),
|
|
432
|
+
branch: z.string().nullable(),
|
|
433
|
+
pinned: z.boolean(),
|
|
434
|
+
refresh: ReposRefreshVerdict.nullable(),
|
|
435
|
+
presence: ReposPresence,
|
|
436
|
+
clone: ReposCloneVerdict.nullable(),
|
|
437
|
+
layout: ReposLayout.nullable(),
|
|
438
|
+
checkouts: z.array(ReposCheckout),
|
|
439
|
+
branches: z.array(ReposBranchStatus),
|
|
440
|
+
at_rest: ReposAtRest.nullable(),
|
|
441
|
+
stashes: Count,
|
|
442
|
+
fetched_at: UnixSeconds.nullable(),
|
|
443
|
+
needs_human: z.array(ReposNeedsHuman),
|
|
444
|
+
probe_error: ReposProbeError.nullable(),
|
|
445
|
+
unprobed_worktrees: z.array(ReposUnprobedWorktreeStatus),
|
|
446
|
+
fetch_error: ReposFetchFailure.nullable(),
|
|
447
|
+
visibility_check: ReposVisibilityCheck.nullable()
|
|
448
|
+
});
|
|
449
|
+
// --- unregistered clones ---
|
|
450
|
+
/** What keeps a moved worktree's repair from being offered. */
|
|
451
|
+
export const ReposRepairBlock = z.discriminatedUnion('kind', [
|
|
452
|
+
z.strictObject({ kind: z.literal('rewrites'), path: z.string(), git_dir: z.string() }),
|
|
453
|
+
z.strictObject({ kind: z.literal('claimed_dir'), git_dir: z.string() }),
|
|
454
|
+
z.strictObject({ kind: z.literal('swapped'), git_dir: z.string(), with: z.string() }),
|
|
455
|
+
z.strictObject({ kind: z.literal('relative_gitdir'), git_dir: z.string() }),
|
|
456
|
+
z.strictObject({ kind: z.literal('unreadable_gitdir'), git_dir: z.string() }),
|
|
457
|
+
z.strictObject({ kind: z.literal('non_utf8_path') }),
|
|
458
|
+
z.strictObject({ kind: z.literal('nul_in_gitdir'), git_dir: z.string() })
|
|
459
|
+
]);
|
|
460
|
+
// `UnregisteredClone`'s own fields, beside its flattened `UnregisteredKind`
|
|
461
|
+
const unregistered_clone_fields = {
|
|
462
|
+
dir: z.string(),
|
|
463
|
+
origin: z.string().nullable(),
|
|
464
|
+
owned: z.boolean()
|
|
465
|
+
};
|
|
466
|
+
/**
|
|
467
|
+
* A child of the workspace root holding a `.git` that no registry entry
|
|
468
|
+
* claims, its `kind` flattened beside its own fields.
|
|
469
|
+
*/
|
|
470
|
+
export const ReposUnregisteredClone = z.discriminatedUnion('kind', [
|
|
471
|
+
z.strictObject({ ...unregistered_clone_fields, kind: z.literal('clone') }),
|
|
472
|
+
z.strictObject({ ...unregistered_clone_fields, kind: z.literal('worktree') }),
|
|
473
|
+
z.strictObject({
|
|
474
|
+
...unregistered_clone_fields,
|
|
475
|
+
kind: z.literal('moved_worktree'),
|
|
476
|
+
entry: z.string(),
|
|
477
|
+
blocked_by: ReposRepairBlock.nullable(),
|
|
478
|
+
exit_noise: z.string().nullable()
|
|
479
|
+
}),
|
|
480
|
+
z.strictObject({
|
|
481
|
+
...unregistered_clone_fields,
|
|
482
|
+
kind: z.literal('orphaned_worktree'),
|
|
483
|
+
entry: z.string()
|
|
484
|
+
}),
|
|
485
|
+
z.strictObject({
|
|
486
|
+
...unregistered_clone_fields,
|
|
487
|
+
kind: z.literal('shared_git_dir'),
|
|
488
|
+
entry: z.string(),
|
|
489
|
+
with: z.string().nullable()
|
|
490
|
+
}),
|
|
491
|
+
z.strictObject({ ...unregistered_clone_fields, kind: z.literal('unfinished_clone') })
|
|
492
|
+
]);
|
|
493
|
+
// --- the documents ---
|
|
494
|
+
/** The `repos status --json` report. */
|
|
495
|
+
export const ReposStatusReport = z.strictObject({
|
|
496
|
+
version: z.literal(REPOS_STATUS_FORMAT_VERSION),
|
|
497
|
+
workspace: z.string(),
|
|
498
|
+
registry: z.string(),
|
|
499
|
+
fetched: z.boolean(),
|
|
500
|
+
sessions: ReposSessions,
|
|
501
|
+
entries: z.array(ReposEntryStatus),
|
|
502
|
+
unregistered: z
|
|
503
|
+
.array(ReposUnregisteredClone)
|
|
504
|
+
.nullable()
|
|
505
|
+
.meta({ description: 'null when the scan did not run (a run with targets)' })
|
|
506
|
+
});
|
|
507
|
+
// `ErrorBody`'s own fields, beside its flattened `ErrorKind`
|
|
508
|
+
const error_body_fields = {
|
|
509
|
+
message: z.string(),
|
|
510
|
+
hint: z.string().nullable()
|
|
511
|
+
};
|
|
512
|
+
/**
|
|
513
|
+
* A fatal error as `repos status --json` prints it, its `kind` flattened
|
|
514
|
+
* beside `message` and `hint`. Only the kinds `status` can print: the rest
|
|
515
|
+
* of Rust's `ErrorKind` are `repos push`'s, or precede knowing `--json`.
|
|
516
|
+
*/
|
|
517
|
+
export const ReposStatusErrorBody = z.discriminatedUnion('kind', [
|
|
518
|
+
z.strictObject({ ...error_body_fields, kind: z.literal('references_with_targets') }),
|
|
519
|
+
z.strictObject({ ...error_body_fields, kind: z.literal('root_not_found') }),
|
|
520
|
+
z.strictObject({ ...error_body_fields, kind: z.literal('registry_not_found') }),
|
|
521
|
+
z.strictObject({ ...error_body_fields, kind: z.literal('root_in_entry'), key: z.string() }),
|
|
522
|
+
z.strictObject({ ...error_body_fields, kind: z.literal('registry_read') }),
|
|
523
|
+
z.strictObject({ ...error_body_fields, kind: z.literal('registry_parse') }),
|
|
524
|
+
z.strictObject({
|
|
525
|
+
...error_body_fields,
|
|
526
|
+
kind: z.literal('registry_invalid'),
|
|
527
|
+
issues: z.array(ReposRegistryIssue)
|
|
528
|
+
}),
|
|
529
|
+
z.strictObject({ ...error_body_fields, kind: z.literal('git_not_found') }),
|
|
530
|
+
z.strictObject({
|
|
531
|
+
...error_body_fields,
|
|
532
|
+
kind: z.literal('git_too_old'),
|
|
533
|
+
found: z.string(),
|
|
534
|
+
required: z.string()
|
|
535
|
+
}),
|
|
536
|
+
z.strictObject({
|
|
537
|
+
...error_body_fields,
|
|
538
|
+
kind: z.literal('unknown_entry'),
|
|
539
|
+
name: z.string(),
|
|
540
|
+
suggestions: z.array(z.string())
|
|
541
|
+
}),
|
|
542
|
+
z.strictObject({ ...error_body_fields, kind: z.literal('io') })
|
|
543
|
+
]);
|
|
544
|
+
/** The document `repos status --json` prints on a fatal error, in place of the report. */
|
|
545
|
+
export const ReposStatusErrorReport = z.strictObject({
|
|
546
|
+
version: z.literal(REPOS_STATUS_FORMAT_VERSION),
|
|
547
|
+
error: ReposStatusErrorBody
|
|
548
|
+
});
|
|
549
|
+
/**
|
|
550
|
+
* Either document `repos status --json` prints. No tag is needed: `error`
|
|
551
|
+
* is the error document's alone, and each side's strictness refuses the
|
|
552
|
+
* other's fields. A consumer wanting a sharper parse error branches on
|
|
553
|
+
* `error` first and parses with that side's schema.
|
|
554
|
+
*/
|
|
555
|
+
export const ReposStatusDocument = z.union([ReposStatusReport, ReposStatusErrorReport]);
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads fleet git state from the Rust `repos` binary: runs
|
|
3
|
+
* `repos status <keys…> --json` through the injected `ReposOperations` and
|
|
4
|
+
* parses what it printed with the `repos_status.ts` mirror.
|
|
5
|
+
*
|
|
6
|
+
* Parsing is pure (`parse_repos_status_output`): the format version is read
|
|
7
|
+
* first, so a binary and npm package out of step fail with both versions and
|
|
8
|
+
* the install command rather than a schema error; then the document is parsed
|
|
9
|
+
* strictly as a report or, when it carries `error`, as an error document,
|
|
10
|
+
* whose kind maps to a message saying what to change.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import type { Result } from '@fuzdev/fuz_util/result.ts';
|
|
15
|
+
import { ReposStatusReport, type ReposStatusErrorBody } from './repos_status.js';
|
|
16
|
+
import type { ReposCommandOutput, ReposOperations } from './operations.js';
|
|
17
|
+
/**
|
|
18
|
+
* How to install the `repos` binary, run in a `fuz_repos` checkout. The npm
|
|
19
|
+
* package doesn't carry the binary, so the two are installed separately.
|
|
20
|
+
*/
|
|
21
|
+
export declare const REPOS_INSTALL_COMMAND = "cargo install --path crates/fuz_repos --locked";
|
|
22
|
+
/**
|
|
23
|
+
* The `repos` invocation a suggested fix names: `repos`, or `repos --registry
|
|
24
|
+
* <path>` when the run passed one, the path POSIX-shell-quoted when it needs it.
|
|
25
|
+
*
|
|
26
|
+
* @param registry - the run's `--registry`, if any
|
|
27
|
+
* @returns the command prefix, ready for a subcommand
|
|
28
|
+
*/
|
|
29
|
+
export declare const to_repos_command: (registry: string | undefined) => string;
|
|
30
|
+
/**
|
|
31
|
+
* Why `repos status` gave no report: a message saying what to change, and the
|
|
32
|
+
* error document when `repos` printed one.
|
|
33
|
+
*/
|
|
34
|
+
export interface ReposStatusLoadFailure {
|
|
35
|
+
message: string;
|
|
36
|
+
error?: ReposStatusErrorBody;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Parses what `repos status --json` printed into its report, or a message
|
|
40
|
+
* saying what went wrong and what to change.
|
|
41
|
+
*
|
|
42
|
+
* @param output - the command's stdout, stderr, and exit code
|
|
43
|
+
* @returns the report, or a message naming the error document's kind and hint, a format version mismatch, or output that isn't a status document; an error document rides along as `error`
|
|
44
|
+
*/
|
|
45
|
+
export declare const parse_repos_status_output: (output: ReposCommandOutput) => Result<{
|
|
46
|
+
report: ReposStatusReport;
|
|
47
|
+
}, ReposStatusLoadFailure>;
|
|
48
|
+
/**
|
|
49
|
+
* Runs `repos status <keys…> --json` and parses its report.
|
|
50
|
+
*
|
|
51
|
+
* @param options.keys - the registry keys to report on; must not be empty, since no targets means every entry
|
|
52
|
+
* @param options.registry - a `repos.toml` to use instead of the one found walking up from the cwd
|
|
53
|
+
* @param options.fetch - fetch each entry from origin first (`--fetch`), which writes remote-tracking refs and nothing else
|
|
54
|
+
* @param options.repos_ops - the `repos` runner
|
|
55
|
+
* @returns the report, or a message saying what went wrong and what to change
|
|
56
|
+
*/
|
|
57
|
+
export declare const load_repos_status: (options: {
|
|
58
|
+
keys: Array<string>;
|
|
59
|
+
registry?: string;
|
|
60
|
+
fetch?: boolean;
|
|
61
|
+
repos_ops: ReposOperations;
|
|
62
|
+
}) => Promise<Result<{
|
|
63
|
+
report: ReposStatusReport;
|
|
64
|
+
}, ReposStatusLoadFailure>>;
|
|
65
|
+
//# sourceMappingURL=repos_status_load.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repos_status_load.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/repos_status_load.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAGzD,OAAO,EAGN,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE3E;;;GAGG;AACH,eAAO,MAAM,qBAAqB,mDAAmD,CAAC;AAEtF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,GAAG,SAAS,KAAG,MACe,CAAC;AAKhF;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,oBAAoB,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,GACrC,QAAQ,kBAAkB,KACxB,MAAM,CAAC;IAAE,MAAM,EAAE,iBAAiB,CAAA;CAAE,EAAE,sBAAsB,CAyD9D,CAAC;AAsBF;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAAU,SAAS;IAChD,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,eAAe,CAAC;CAC3B,KAAG,OAAO,CAAC,MAAM,CAAC;IAAE,MAAM,EAAE,iBAAiB,CAAA;CAAE,EAAE,sBAAsB,CAAC,CAiBxE,CAAC"}
|