@fuzdev/fuz_gitops 0.68.0 → 0.70.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 +3 -3
- package/dist/ModulesDetail.svelte +14 -14
- package/dist/ModulesNav.svelte +2 -2
- package/dist/PageFooter.svelte +1 -1
- package/dist/ReposTable.svelte +1 -1
- package/dist/ReposTree.svelte +7 -7
- package/dist/TablePage.svelte +1 -7
- package/dist/TreeItemPage.svelte +3 -3
- package/dist/TreePage.svelte +3 -3
- package/dist/changeset_generator.d.ts +4 -4
- package/dist/changeset_generator.js +5 -5
- package/dist/changeset_reader.d.ts +6 -4
- package/dist/changeset_reader.d.ts.map +1 -1
- package/dist/changeset_reader.js +7 -5
- package/dist/dependency_graph.d.ts +3 -3
- package/dist/dependency_graph.js +3 -3
- package/dist/dependency_updater.d.ts +4 -4
- package/dist/dependency_updater.js +5 -5
- package/dist/fetch_repo_data.d.ts +4 -4
- package/dist/fetch_repo_data.d.ts.map +1 -1
- package/dist/fetch_repo_data.js +4 -5
- package/dist/fs_fetch_value_cache.d.ts +4 -4
- package/dist/fs_fetch_value_cache.js +4 -4
- package/dist/git_operations.d.ts +5 -5
- package/dist/git_operations.d.ts.map +1 -1
- package/dist/git_operations.js +18 -18
- package/dist/github.d.ts +1 -1
- package/dist/github.js +0 -1
- package/dist/gitops_analyze.task.d.ts +1 -1
- package/dist/gitops_plan.task.d.ts +4 -4
- package/dist/gitops_plan.task.js +3 -3
- package/dist/gitops_publish.task.d.ts +1 -1
- package/dist/gitops_run.task.d.ts +1 -1
- package/dist/gitops_run.task.js +2 -2
- package/dist/gitops_task_helpers.d.ts +5 -5
- package/dist/gitops_task_helpers.js +5 -5
- package/dist/graph_validation.d.ts +5 -5
- package/dist/graph_validation.js +5 -5
- package/dist/local_repo.d.ts +6 -6
- package/dist/local_repo.d.ts.map +1 -1
- package/dist/local_repo.js +22 -26
- package/dist/multi_repo_publisher.d.ts.map +1 -1
- package/dist/multi_repo_publisher.js +4 -4
- package/dist/npm_install_helpers.d.ts +3 -3
- package/dist/npm_install_helpers.js +3 -3
- package/dist/npm_registry.d.ts +4 -4
- package/dist/npm_registry.js +5 -6
- package/dist/operations.d.ts +19 -17
- package/dist/operations.d.ts.map +1 -1
- package/dist/operations.js +1 -1
- package/dist/operations_defaults.d.ts.map +1 -1
- package/dist/operations_defaults.js +49 -14
- package/dist/output_helpers.d.ts +2 -2
- package/dist/output_helpers.js +2 -2
- package/dist/paths.d.ts +1 -1
- package/dist/paths.js +1 -1
- package/dist/preflight_checks.d.ts +2 -2
- package/dist/preflight_checks.js +7 -7
- package/dist/publishing_plan.js +4 -4
- package/dist/publishing_plan_helpers.d.ts +1 -1
- package/dist/publishing_plan_helpers.js +1 -1
- package/dist/repo.svelte.d.ts +4 -5
- package/dist/repo.svelte.d.ts.map +1 -1
- package/dist/repo.svelte.js +2 -2
- package/dist/repo_ops.d.ts +6 -6
- package/dist/repo_ops.js +7 -7
- package/dist/version_utils.d.ts +2 -2
- package/dist/version_utils.js +2 -2
- package/package.json +18 -16
- package/src/lib/changeset_generator.ts +5 -5
- package/src/lib/changeset_reader.ts +7 -5
- package/src/lib/dependency_graph.ts +3 -3
- package/src/lib/dependency_updater.ts +5 -5
- package/src/lib/fetch_repo_data.ts +4 -6
- package/src/lib/fs_fetch_value_cache.ts +4 -4
- package/src/lib/git_operations.ts +32 -18
- package/src/lib/github.ts +1 -2
- package/src/lib/gitops_plan.task.ts +3 -3
- package/src/lib/gitops_run.task.ts +2 -2
- package/src/lib/gitops_task_helpers.ts +5 -5
- package/src/lib/graph_validation.ts +5 -5
- package/src/lib/local_repo.ts +28 -30
- package/src/lib/multi_repo_publisher.ts +4 -6
- package/src/lib/npm_install_helpers.ts +3 -3
- package/src/lib/npm_registry.ts +6 -6
- package/src/lib/operations.ts +19 -17
- package/src/lib/operations_defaults.ts +47 -16
- package/src/lib/output_helpers.ts +2 -2
- package/src/lib/paths.ts +1 -1
- package/src/lib/preflight_checks.ts +7 -7
- package/src/lib/publishing_plan.ts +4 -4
- package/src/lib/publishing_plan_helpers.ts +1 -1
- package/src/lib/repo.svelte.ts +4 -5
- package/src/lib/repo_ops.ts +7 -7
- package/src/lib/version_utils.ts +2 -2
package/README.md
CHANGED
|
@@ -113,10 +113,10 @@ gro gitops_publish --wetrun --no-plan # skip plan confirmation
|
|
|
113
113
|
|
|
114
114
|
**Documentation:**
|
|
115
115
|
|
|
116
|
-
-
|
|
117
|
-
-
|
|
116
|
+
- ./CLAUDE.md - Architecture, commands, testing patterns
|
|
117
|
+
- ./docs/publishing.md - Publishing workflows, changeset
|
|
118
118
|
semantics, examples
|
|
119
|
-
-
|
|
119
|
+
- ./docs/troubleshooting.md - Common errors and
|
|
120
120
|
debugging tips
|
|
121
121
|
|
|
122
122
|
Getting started as a dev? Start with [Gro](https://github.com/grogarden/gro)
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
// TODO add favicon (from library? gro?)
|
|
34
34
|
</script>
|
|
35
35
|
|
|
36
|
-
<div class="
|
|
37
|
-
<div class="
|
|
36
|
+
<div class="modules-detail">
|
|
37
|
+
<div class="nav-wrapper">
|
|
38
38
|
<section>
|
|
39
39
|
<ModulesNav {repos_modules} />
|
|
40
40
|
</section>
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
<ul class="width_atmost_md box unstyled">
|
|
44
44
|
{#each repos_modules as repo_modules (repo_modules)}
|
|
45
45
|
{@const {repo, modules} = repo_modules}
|
|
46
|
-
<li class="
|
|
46
|
+
<li class="repo-module">
|
|
47
47
|
<header class="width:100% position:relative">
|
|
48
48
|
<a href="#{repo.name}" id={repo.name} class="subtitle">🔗</a>
|
|
49
49
|
<a href={resolve(`/tree/${repo.repo_name}`)}>{repo.name}</a>
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
class:css={path.endsWith('.css')}
|
|
59
59
|
class:json={path.endsWith('.json')}
|
|
60
60
|
>
|
|
61
|
-
<div class="
|
|
61
|
+
<div class="module-file">
|
|
62
62
|
{#if repo.repo_url}
|
|
63
63
|
<div class="chip row">
|
|
64
64
|
<!-- TODO this is a hack that could be fixed by adding an optional `base: './'` that defaults to './src/lib/' -->
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
<ul class="declarations unstyled">
|
|
77
77
|
{#each declarations as { name, kind } (name)}
|
|
78
78
|
{#if name !== 'default'}
|
|
79
|
-
<li class="declaration chip {kind}
|
|
79
|
+
<li class="declaration chip {kind}-declaration">
|
|
80
80
|
{name}
|
|
81
81
|
</li>
|
|
82
82
|
{/if}
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
<!-- TODO better rendering, also show author, etc -->
|
|
95
95
|
|
|
96
96
|
<style>
|
|
97
|
-
.
|
|
97
|
+
.modules-detail {
|
|
98
98
|
position: relative;
|
|
99
99
|
padding: var(--space_lg);
|
|
100
100
|
display: flex;
|
|
@@ -109,13 +109,13 @@
|
|
|
109
109
|
top: 0;
|
|
110
110
|
text-align: right;
|
|
111
111
|
}
|
|
112
|
-
.
|
|
112
|
+
.repo-module {
|
|
113
113
|
width: 100%;
|
|
114
114
|
display: flex;
|
|
115
115
|
flex-direction: column;
|
|
116
116
|
margin-bottom: var(--space_xl5);
|
|
117
117
|
}
|
|
118
|
-
.
|
|
118
|
+
.repo-module > header {
|
|
119
119
|
display: flex;
|
|
120
120
|
padding: var(--space_xs) var(--space_md);
|
|
121
121
|
font-size: var(--font_size_lg);
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
margin-bottom: var(--space_lg);
|
|
131
131
|
--link_color: var(--text_70);
|
|
132
132
|
}
|
|
133
|
-
.
|
|
133
|
+
.module-file {
|
|
134
134
|
margin-bottom: var(--space_xs);
|
|
135
135
|
}
|
|
136
136
|
.ts {
|
|
@@ -159,20 +159,20 @@
|
|
|
159
159
|
font-family: var(--font_family_mono);
|
|
160
160
|
font-size: var(--font_size_sm);
|
|
161
161
|
}
|
|
162
|
-
.
|
|
162
|
+
.variable-declaration {
|
|
163
163
|
color: var(--color_d_50);
|
|
164
164
|
}
|
|
165
|
-
.
|
|
165
|
+
.function-declaration {
|
|
166
166
|
color: var(--color_c_50);
|
|
167
167
|
}
|
|
168
|
-
.
|
|
168
|
+
.type-declaration {
|
|
169
169
|
color: var(--color_g_50);
|
|
170
170
|
}
|
|
171
|
-
.
|
|
171
|
+
.class-declaration {
|
|
172
172
|
color: var(--color_f_50);
|
|
173
173
|
}
|
|
174
174
|
/* TODO extract */
|
|
175
|
-
.
|
|
175
|
+
.nav-wrapper {
|
|
176
176
|
position: sticky;
|
|
177
177
|
top: var(--space_xl);
|
|
178
178
|
display: flex;
|
package/dist/ModulesNav.svelte
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
// TODO add favicon (from library? gro?)
|
|
18
18
|
</script>
|
|
19
19
|
|
|
20
|
-
<nav class="
|
|
20
|
+
<nav class="modules-nav">
|
|
21
21
|
<h6>packages</h6>
|
|
22
22
|
<ul class="unstyled">
|
|
23
23
|
{#each repos_modules as pkg_modules (pkg_modules)}
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
</nav>
|
|
32
32
|
|
|
33
33
|
<style>
|
|
34
|
-
.
|
|
34
|
+
.modules-nav {
|
|
35
35
|
width: 100%;
|
|
36
36
|
}
|
|
37
37
|
h6 {
|
package/dist/PageFooter.svelte
CHANGED
package/dist/ReposTable.svelte
CHANGED
package/dist/ReposTree.svelte
CHANGED
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
} = $props();
|
|
20
20
|
</script>
|
|
21
21
|
|
|
22
|
-
<div class="
|
|
22
|
+
<div class="repos-tree">
|
|
23
23
|
<ReposTreeNav {repos} {selected_repo}>
|
|
24
24
|
{@render nav()}
|
|
25
25
|
</ReposTreeNav>
|
|
26
26
|
{#if selected_repo}
|
|
27
|
-
<section class="
|
|
27
|
+
<section class="detail-wrapper">
|
|
28
28
|
<div class="panel detail p_md">
|
|
29
29
|
<LibraryDetail library={selected_repo.library} />
|
|
30
30
|
</div>
|
|
@@ -36,13 +36,13 @@
|
|
|
36
36
|
{#if repo.package_json}
|
|
37
37
|
<LibrarySummary library={repo.library}>
|
|
38
38
|
{#snippet repo_name(repo_name)}
|
|
39
|
-
<a href={resolve(`/tree/${repo_name}`)} class="
|
|
39
|
+
<a href={resolve(`/tree/${repo_name}`)} class="repo-name">{repo_name}</a>
|
|
40
40
|
{/snippet}
|
|
41
41
|
</LibrarySummary>
|
|
42
42
|
{:else}
|
|
43
43
|
<div class="width_atmost_sm">
|
|
44
44
|
<p>
|
|
45
|
-
failed to
|
|
45
|
+
failed to load library metadata for
|
|
46
46
|
<!-- eslint-disable-next-line svelte/no-navigation-without-resolve --><a
|
|
47
47
|
href={repo.repo_url}>{format_url(repo.repo_url)}</a
|
|
48
48
|
>
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
</div>
|
|
57
57
|
|
|
58
58
|
<style>
|
|
59
|
-
.
|
|
59
|
+
.repos-tree {
|
|
60
60
|
width: 100%;
|
|
61
61
|
display: flex;
|
|
62
62
|
flex-direction: row;
|
|
@@ -74,13 +74,13 @@
|
|
|
74
74
|
.summaries li {
|
|
75
75
|
margin-bottom: var(--space_xl);
|
|
76
76
|
}
|
|
77
|
-
.
|
|
77
|
+
.repo-name {
|
|
78
78
|
font-size: var(--font_size_xl2);
|
|
79
79
|
font-weight: 500;
|
|
80
80
|
text-align: center;
|
|
81
81
|
margin-bottom: var(--space_xl);
|
|
82
82
|
}
|
|
83
|
-
.
|
|
83
|
+
.detail-wrapper {
|
|
84
84
|
padding: var(--space_lg);
|
|
85
85
|
width: 100%;
|
|
86
86
|
}
|
package/dist/TablePage.svelte
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<title>table {repo.package_json.glyph} {repo.package_json.name}</title>
|
|
18
18
|
</svelte:head>
|
|
19
19
|
|
|
20
|
-
<main class="box">
|
|
20
|
+
<main class="box mx_auto">
|
|
21
21
|
<div class="p_lg">
|
|
22
22
|
<PageHeader {repo} />
|
|
23
23
|
</div>
|
|
@@ -32,12 +32,6 @@
|
|
|
32
32
|
</main>
|
|
33
33
|
|
|
34
34
|
<style>
|
|
35
|
-
main {
|
|
36
|
-
display: flex;
|
|
37
|
-
flex-direction: column;
|
|
38
|
-
align-items: center;
|
|
39
|
-
margin: 0 auto;
|
|
40
|
-
}
|
|
41
35
|
section {
|
|
42
36
|
margin-bottom: var(--space_xl4);
|
|
43
37
|
}
|
package/dist/TreeItemPage.svelte
CHANGED
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
{/if}
|
|
39
39
|
<ReposTree {repos} selected_repo={route_repo}>
|
|
40
40
|
{#snippet nav()}
|
|
41
|
-
<div class="
|
|
41
|
+
<div class="repos-tree-nav">
|
|
42
42
|
<Breadcrumb>{repo.package_json.glyph}</Breadcrumb>
|
|
43
43
|
</div>
|
|
44
44
|
{/snippet}
|
|
@@ -66,12 +66,12 @@
|
|
|
66
66
|
align-items: center;
|
|
67
67
|
width: 100%;
|
|
68
68
|
}
|
|
69
|
-
.
|
|
69
|
+
.repos-tree-nav {
|
|
70
70
|
display: flex;
|
|
71
71
|
margin-top: var(--space_xl);
|
|
72
72
|
}
|
|
73
73
|
/* TODO hacky */
|
|
74
|
-
.
|
|
74
|
+
.repos-tree-nav :global(.breadcrumb) {
|
|
75
75
|
justify-content: flex-start;
|
|
76
76
|
}
|
|
77
77
|
</style>
|
package/dist/TreePage.svelte
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
<section class="tree">
|
|
29
29
|
<ReposTree {repos}>
|
|
30
30
|
{#snippet nav()}
|
|
31
|
-
<div class="
|
|
31
|
+
<div class="repos-tree-nav">
|
|
32
32
|
<Breadcrumb>{repo.package_json.glyph}</Breadcrumb>
|
|
33
33
|
</div>
|
|
34
34
|
{/snippet}
|
|
@@ -54,12 +54,12 @@
|
|
|
54
54
|
flex-direction: row;
|
|
55
55
|
align-items: flex-start;
|
|
56
56
|
}
|
|
57
|
-
.
|
|
57
|
+
.repos-tree-nav {
|
|
58
58
|
display: flex;
|
|
59
59
|
margin-top: var(--space_xl);
|
|
60
60
|
}
|
|
61
61
|
/* TODO hacky */
|
|
62
|
-
.
|
|
62
|
+
.repos-tree-nav :global(.breadcrumb) {
|
|
63
63
|
justify-content: flex-start;
|
|
64
64
|
}
|
|
65
65
|
</style>
|
|
@@ -32,10 +32,10 @@ export declare const create_changeset_for_dependency_updates: (repo: LocalRepo,
|
|
|
32
32
|
* and categorized list of breaking vs regular updates. Output format
|
|
33
33
|
* matches changesets CLI for consistency.
|
|
34
34
|
*
|
|
35
|
-
* @param package_name package receiving the dependency updates
|
|
36
|
-
* @param updates list of dependency changes with version info
|
|
37
|
-
* @param bump_type required bump type (calculated from breaking changes)
|
|
38
|
-
* @returns markdown content ready to write to
|
|
35
|
+
* @param package_name - package receiving the dependency updates
|
|
36
|
+
* @param updates - list of dependency changes with version info
|
|
37
|
+
* @param bump_type - required bump type (calculated from breaking changes)
|
|
38
|
+
* @returns markdown content ready to write to `.changeset/*.md` file
|
|
39
39
|
*/
|
|
40
40
|
export declare const generate_changeset_content: (package_name: string, updates: Array<DependencyVersionChange>, bump_type: "major" | "minor" | "patch") => string;
|
|
41
41
|
export declare const create_dependency_updates: (dependencies: Map<string, string>, published_versions: Map<string, PublishedVersion>) => Array<DependencyVersionChange>;
|
|
@@ -17,7 +17,7 @@ export const create_changeset_for_dependency_updates = async (repo, updates, opt
|
|
|
17
17
|
const { log, fs_ops = default_fs_operations } = options;
|
|
18
18
|
const changesets_dir = join(repo.repo_dir, '.changeset');
|
|
19
19
|
// Ensure .changeset directory exists
|
|
20
|
-
if (!fs_ops.exists({ path: changesets_dir })) {
|
|
20
|
+
if (!(await fs_ops.exists({ path: changesets_dir }))) {
|
|
21
21
|
const mkdir_result = await fs_ops.mkdir({ path: changesets_dir, recursive: true });
|
|
22
22
|
if (!mkdir_result.ok) {
|
|
23
23
|
throw new Error(`Failed to create .changeset directory: ${mkdir_result.message}`);
|
|
@@ -62,10 +62,10 @@ const calculate_required_bump = (repo, updates) => {
|
|
|
62
62
|
* and categorized list of breaking vs regular updates. Output format
|
|
63
63
|
* matches changesets CLI for consistency.
|
|
64
64
|
*
|
|
65
|
-
* @param package_name package receiving the dependency updates
|
|
66
|
-
* @param updates list of dependency changes with version info
|
|
67
|
-
* @param bump_type required bump type (calculated from breaking changes)
|
|
68
|
-
* @returns markdown content ready to write to
|
|
65
|
+
* @param package_name - package receiving the dependency updates
|
|
66
|
+
* @param updates - list of dependency changes with version info
|
|
67
|
+
* @param bump_type - required bump type (calculated from breaking changes)
|
|
68
|
+
* @returns markdown content ready to write to `.changeset/*.md` file
|
|
69
69
|
*/
|
|
70
70
|
export const generate_changeset_content = (package_name, updates, bump_type) => {
|
|
71
71
|
// Group updates by type
|
|
@@ -25,15 +25,17 @@ export interface ChangesetInfo {
|
|
|
25
25
|
* Returns null if format is invalid or no packages found.
|
|
26
26
|
*
|
|
27
27
|
* Expected format:
|
|
28
|
+
* ```
|
|
28
29
|
* ---
|
|
29
30
|
* "package-name": patch
|
|
30
31
|
* "@scope/package": minor
|
|
31
32
|
* ---
|
|
32
33
|
*
|
|
33
34
|
* Summary of changes
|
|
35
|
+
* ```
|
|
34
36
|
*
|
|
35
|
-
* @param content changeset markdown with YAML frontmatter
|
|
36
|
-
* @param filename optional filename for error reporting context
|
|
37
|
+
* @param content - changeset markdown with YAML frontmatter
|
|
38
|
+
* @param filename - optional filename for error reporting context
|
|
37
39
|
* @returns parsed changeset info or null if invalid format
|
|
38
40
|
*/
|
|
39
41
|
export declare const parse_changeset_content: (content: string, filename?: string) => ChangesetInfo | null;
|
|
@@ -53,8 +55,8 @@ export declare const determine_bump_from_changesets: (changesets: Array<Changese
|
|
|
53
55
|
* Checks if a repo has any changeset files (excluding README.md).
|
|
54
56
|
*
|
|
55
57
|
* Used by preflight checks and publishing workflow to determine which packages
|
|
56
|
-
* need to be published. Returns false if
|
|
57
|
-
* or contains only README.md
|
|
58
|
+
* need to be published. Returns false if `.changeset` directory doesn't exist
|
|
59
|
+
* or contains only `README.md`.
|
|
58
60
|
*
|
|
59
61
|
* @returns true if repo has unpublished changesets
|
|
60
62
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"changeset_reader.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/changeset_reader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAKpD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAG1C,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,QAAQ,CAAA;KAAC,CAAC,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC;CAChB;AAED
|
|
1
|
+
{"version":3,"file":"changeset_reader.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/changeset_reader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAKpD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAG1C,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,QAAQ,CAAA;KAAC,CAAC,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,uBAAuB,GACnC,SAAS,MAAM,EACf,iBAAyB,KACvB,aAAa,GAAG,IAmClB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAChC,UAAU,MAAM,EAChB,MAAM,MAAM,KACV,OAAO,CAAC,aAAa,GAAG,IAAI,CAgB9B,CAAC;AAEF,eAAO,MAAM,eAAe,GAC3B,MAAM,SAAS,EACf,MAAM,MAAM,KACV,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAsB9B,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,GAC1C,YAAY,KAAK,CAAC,aAAa,CAAC,EAChC,cAAc,MAAM,KAClB,QAAQ,GAAG,IAcb,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GAAU,MAAM,SAAS,KAAG,OAAO,CAAC,OAAO,CAarE,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,GAChC,MAAM,SAAS,EACf,MAAM,MAAM,KACV,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,QAAQ,CAAA;CAAC,GAAG,IAAI,CAsBvD,CAAC"}
|
package/dist/changeset_reader.js
CHANGED
|
@@ -18,15 +18,17 @@ import { compare_bump_types, calculate_next_version } from './version_utils.js';
|
|
|
18
18
|
* Returns null if format is invalid or no packages found.
|
|
19
19
|
*
|
|
20
20
|
* Expected format:
|
|
21
|
+
* ```
|
|
21
22
|
* ---
|
|
22
23
|
* "package-name": patch
|
|
23
24
|
* "@scope/package": minor
|
|
24
25
|
* ---
|
|
25
26
|
*
|
|
26
27
|
* Summary of changes
|
|
28
|
+
* ```
|
|
27
29
|
*
|
|
28
|
-
* @param content changeset markdown with YAML frontmatter
|
|
29
|
-
* @param filename optional filename for error reporting context
|
|
30
|
+
* @param content - changeset markdown with YAML frontmatter
|
|
31
|
+
* @param filename - optional filename for error reporting context
|
|
30
32
|
* @returns parsed changeset info or null if invalid format
|
|
31
33
|
*/
|
|
32
34
|
export const parse_changeset_content = (content, filename = 'changeset.md') => {
|
|
@@ -82,7 +84,7 @@ export const read_changesets = async (repo, log) => {
|
|
|
82
84
|
const changesets = [];
|
|
83
85
|
for (const file of changeset_files) {
|
|
84
86
|
const filepath = join(changesets_dir, file);
|
|
85
|
-
const changeset = await parse_changeset_file(filepath, log);
|
|
87
|
+
const changeset = await parse_changeset_file(filepath, log);
|
|
86
88
|
if (changeset) {
|
|
87
89
|
changesets.push(changeset);
|
|
88
90
|
}
|
|
@@ -120,8 +122,8 @@ export const determine_bump_from_changesets = (changesets, package_name) => {
|
|
|
120
122
|
* Checks if a repo has any changeset files (excluding README.md).
|
|
121
123
|
*
|
|
122
124
|
* Used by preflight checks and publishing workflow to determine which packages
|
|
123
|
-
* need to be published. Returns false if
|
|
124
|
-
* or contains only README.md
|
|
125
|
+
* need to be published. Returns false if `.changeset` directory doesn't exist
|
|
126
|
+
* or contains only `README.md`.
|
|
125
127
|
*
|
|
126
128
|
* @returns true if repo has unpublished changesets
|
|
127
129
|
*/
|
|
@@ -58,8 +58,8 @@ export declare class DependencyGraph {
|
|
|
58
58
|
* Delegates to `@fuzdev/fuz_util/sort.js` for the sorting algorithm.
|
|
59
59
|
* Throws if cycles detected.
|
|
60
60
|
*
|
|
61
|
-
* @param exclude_dev if true, excludes dev dependencies to break cycles
|
|
62
|
-
* Publishing uses exclude_dev
|
|
61
|
+
* @param exclude_dev - if true, excludes dev dependencies to break cycles
|
|
62
|
+
* Publishing uses `exclude_dev`=true to handle circular dev deps.
|
|
63
63
|
* @returns array of package names in dependency order (dependencies before dependents)
|
|
64
64
|
* @throws {Error} if circular dependencies detected in included dependency types
|
|
65
65
|
*/
|
|
@@ -73,7 +73,7 @@ export declare class DependencyGraph {
|
|
|
73
73
|
* Uses DFS traversal with recursion stack to identify back edges.
|
|
74
74
|
* Deduplicates cycles using sorted cycle keys.
|
|
75
75
|
*
|
|
76
|
-
* @returns object with production_cycles (errors) and dev_cycles (info)
|
|
76
|
+
* @returns object with `production_cycles` (errors) and `dev_cycles` (info)
|
|
77
77
|
*/
|
|
78
78
|
detect_cycles_by_type(): {
|
|
79
79
|
production_cycles: Array<Array<string>>;
|
package/dist/dependency_graph.js
CHANGED
|
@@ -82,8 +82,8 @@ export class DependencyGraph {
|
|
|
82
82
|
* Delegates to `@fuzdev/fuz_util/sort.js` for the sorting algorithm.
|
|
83
83
|
* Throws if cycles detected.
|
|
84
84
|
*
|
|
85
|
-
* @param exclude_dev if true, excludes dev dependencies to break cycles
|
|
86
|
-
* Publishing uses exclude_dev
|
|
85
|
+
* @param exclude_dev - if true, excludes dev dependencies to break cycles
|
|
86
|
+
* Publishing uses `exclude_dev`=true to handle circular dev deps.
|
|
87
87
|
* @returns array of package names in dependency order (dependencies before dependents)
|
|
88
88
|
* @throws {Error} if circular dependencies detected in included dependency types
|
|
89
89
|
*/
|
|
@@ -113,7 +113,7 @@ export class DependencyGraph {
|
|
|
113
113
|
* Uses DFS traversal with recursion stack to identify back edges.
|
|
114
114
|
* Deduplicates cycles using sorted cycle keys.
|
|
115
115
|
*
|
|
116
|
-
* @returns object with production_cycles (errors) and dev_cycles (info)
|
|
116
|
+
* @returns object with `production_cycles` (errors) and `dev_cycles` (info)
|
|
117
117
|
*/
|
|
118
118
|
detect_cycles_by_type() {
|
|
119
119
|
const production_cycles = this.#find_cycles((spec) => spec.type !== DEPENDENCY_TYPE.DEV);
|
|
@@ -11,13 +11,13 @@ export interface UpdatePackageJsonOptions {
|
|
|
11
11
|
fs_ops?: FsOperations;
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
* Updates package.json dependencies and creates changeset if needed.
|
|
14
|
+
* Updates `package.json` dependencies and creates changeset if needed.
|
|
15
15
|
*
|
|
16
16
|
* Workflow:
|
|
17
17
|
* 1. Updates all dependency types (dependencies, devDependencies, peerDependencies)
|
|
18
|
-
* 2. Writes updated package.json with tabs formatting
|
|
19
|
-
* 3. Creates auto-changeset if published_versions provided (for transitive updates)
|
|
20
|
-
* 4. Commits both package.json and changeset with standard message
|
|
18
|
+
* 2. Writes updated `package.json` with tabs formatting
|
|
19
|
+
* 3. Creates auto-changeset if `published_versions` provided (for transitive updates)
|
|
20
|
+
* 4. Commits both `package.json` and changeset with standard message
|
|
21
21
|
*
|
|
22
22
|
* Uses version strategy to determine prefix (exact, caret, tilde) while preserving
|
|
23
23
|
* existing prefixes when possible.
|
|
@@ -3,13 +3,13 @@ import { create_changeset_for_dependency_updates, create_dependency_updates, } f
|
|
|
3
3
|
import { needs_update, get_update_prefix } from './version_utils.js';
|
|
4
4
|
import { default_git_operations, default_fs_operations } from './operations_defaults.js';
|
|
5
5
|
/**
|
|
6
|
-
* Updates package.json dependencies and creates changeset if needed.
|
|
6
|
+
* Updates `package.json` dependencies and creates changeset if needed.
|
|
7
7
|
*
|
|
8
8
|
* Workflow:
|
|
9
9
|
* 1. Updates all dependency types (dependencies, devDependencies, peerDependencies)
|
|
10
|
-
* 2. Writes updated package.json with tabs formatting
|
|
11
|
-
* 3. Creates auto-changeset if published_versions provided (for transitive updates)
|
|
12
|
-
* 4. Commits both package.json and changeset with standard message
|
|
10
|
+
* 2. Writes updated `package.json` with tabs formatting
|
|
11
|
+
* 3. Creates auto-changeset if `published_versions` provided (for transitive updates)
|
|
12
|
+
* 4. Commits both `package.json` and changeset with standard message
|
|
13
13
|
*
|
|
14
14
|
* Uses version strategy to determine prefix (exact, caret, tilde) while preserving
|
|
15
15
|
* existing prefixes when possible.
|
|
@@ -156,7 +156,7 @@ export const update_all_repos = async (repos, published, options = {}) => {
|
|
|
156
156
|
if (updates.size === 0)
|
|
157
157
|
continue;
|
|
158
158
|
try {
|
|
159
|
-
await update_package_json(repo, updates, { strategy, log, git_ops, fs_ops });
|
|
159
|
+
await update_package_json(repo, updates, { strategy, log, git_ops, fs_ops });
|
|
160
160
|
updated_count++;
|
|
161
161
|
log?.info(` Updated ${updates.size} dependencies in ${repo.library.name}`);
|
|
162
162
|
}
|
|
@@ -9,11 +9,11 @@ import type { LocalRepo } from './local_repo.js';
|
|
|
9
9
|
* Uses `await_in_loop` intentionally to avoid parallel requests overwhelming the API.
|
|
10
10
|
*
|
|
11
11
|
* Error handling: Logs fetch failures but continues processing remaining repos.
|
|
12
|
-
* Repos with failed fetches will have `null` for check_runs or pull_requests
|
|
12
|
+
* Repos with failed fetches will have `null` for `check_runs` or `pull_requests`.
|
|
13
13
|
*
|
|
14
|
-
* @param delay milliseconds between API requests (default: 33ms)
|
|
15
|
-
* @param cache optional cache from fuz_util's fetch.js for response memoization
|
|
16
|
-
* @returns array of Repo objects with GitHub metadata attached
|
|
14
|
+
* @param delay - milliseconds between API requests (default: 33ms)
|
|
15
|
+
* @param cache - optional cache from `fuz_util`'s `fetch.js` for response memoization
|
|
16
|
+
* @returns array of `Repo` objects with GitHub metadata attached
|
|
17
17
|
*/
|
|
18
18
|
export declare const fetch_repo_data: (resolved_repos: Array<LocalRepo>, token?: string, cache?: FetchValueCache, log?: Logger, delay?: number, github_api_version?: string) => Promise<Array<RepoJson>>;
|
|
19
19
|
//# sourceMappingURL=fetch_repo_data.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch_repo_data.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/fetch_repo_data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAEpD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAG/D,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch_repo_data.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/fetch_repo_data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAEpD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAG/D,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE/C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,GAC3B,gBAAgB,KAAK,CAAC,SAAS,CAAC,EAChC,QAAQ,MAAM,EACd,QAAQ,eAAe,EACvB,MAAM,MAAM,EACZ,cAAU,EACV,qBAAqB,MAAM,KACzB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAiCzB,CAAC"}
|
package/dist/fetch_repo_data.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { wait } from '@fuzdev/fuz_util/async.js';
|
|
2
2
|
import { fetch_github_check_runs, fetch_github_pull_requests } from './github.js';
|
|
3
|
-
/* eslint-disable no-await-in-loop */
|
|
4
3
|
/**
|
|
5
4
|
* Fetches GitHub metadata (CI status, PRs) for all repos.
|
|
6
5
|
*
|
|
@@ -8,11 +7,11 @@ import { fetch_github_check_runs, fetch_github_pull_requests } from './github.js
|
|
|
8
7
|
* Uses `await_in_loop` intentionally to avoid parallel requests overwhelming the API.
|
|
9
8
|
*
|
|
10
9
|
* Error handling: Logs fetch failures but continues processing remaining repos.
|
|
11
|
-
* Repos with failed fetches will have `null` for check_runs or pull_requests
|
|
10
|
+
* Repos with failed fetches will have `null` for `check_runs` or `pull_requests`.
|
|
12
11
|
*
|
|
13
|
-
* @param delay milliseconds between API requests (default: 33ms)
|
|
14
|
-
* @param cache optional cache from fuz_util's fetch.js for response memoization
|
|
15
|
-
* @returns array of Repo objects with GitHub metadata attached
|
|
12
|
+
* @param delay - milliseconds between API requests (default: 33ms)
|
|
13
|
+
* @param cache - optional cache from `fuz_util`'s `fetch.js` for response memoization
|
|
14
|
+
* @returns array of `Repo` objects with GitHub metadata attached
|
|
16
15
|
*/
|
|
17
16
|
export const fetch_repo_data = async (resolved_repos, token, cache, log, delay = 33, github_api_version) => {
|
|
18
17
|
const repos = [];
|
|
@@ -8,7 +8,7 @@ export interface FetchCache {
|
|
|
8
8
|
save: () => Promise<boolean>;
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
* Creates file-system backed cache for fuz_util's fetch.js API responses.
|
|
11
|
+
* Creates file-system backed cache for `fuz_util`'s `fetch.js` API responses.
|
|
12
12
|
*
|
|
13
13
|
* Cache invalidation strategy: If cache file can't be read or parsed, entire
|
|
14
14
|
* cache is cleared (delete file) and starts fresh. This handles format changes.
|
|
@@ -16,9 +16,9 @@ export interface FetchCache {
|
|
|
16
16
|
* Uses `structuredClone` to track changes - only writes to disk if data modified.
|
|
17
17
|
* Formatted with Prettier before writing for version control friendliness.
|
|
18
18
|
*
|
|
19
|
-
* @param name cache filename (without .json extension)
|
|
20
|
-
* @param dir cache directory (defaults to `.gro/build/fetch/`)
|
|
21
|
-
* @returns cache object with Map-based data and save() method
|
|
19
|
+
* @param name - cache filename (without .json extension)
|
|
20
|
+
* @param dir - cache directory (defaults to `.gro/build/fetch/`)
|
|
21
|
+
* @returns cache object with Map-based data and `save()` method
|
|
22
22
|
*/
|
|
23
23
|
export declare const create_fs_fetch_value_cache: (name: string, dir?: string) => Promise<FetchCache>;
|
|
24
24
|
//# sourceMappingURL=fs_fetch_value_cache.d.ts.map
|
|
@@ -5,7 +5,7 @@ import { format_file } from '@fuzdev/gro/format_file.js';
|
|
|
5
5
|
import { deserialize_cache, serialize_cache } from '@fuzdev/fuz_util/fetch.js';
|
|
6
6
|
import { existsSync } from 'node:fs';
|
|
7
7
|
/**
|
|
8
|
-
* Creates file-system backed cache for fuz_util's fetch.js API responses.
|
|
8
|
+
* Creates file-system backed cache for `fuz_util`'s `fetch.js` API responses.
|
|
9
9
|
*
|
|
10
10
|
* Cache invalidation strategy: If cache file can't be read or parsed, entire
|
|
11
11
|
* cache is cleared (delete file) and starts fresh. This handles format changes.
|
|
@@ -13,9 +13,9 @@ import { existsSync } from 'node:fs';
|
|
|
13
13
|
* Uses `structuredClone` to track changes - only writes to disk if data modified.
|
|
14
14
|
* Formatted with Prettier before writing for version control friendliness.
|
|
15
15
|
*
|
|
16
|
-
* @param name cache filename (without .json extension)
|
|
17
|
-
* @param dir cache directory (defaults to `.gro/build/fetch/`)
|
|
18
|
-
* @returns cache object with Map-based data and save() method
|
|
16
|
+
* @param name - cache filename (without .json extension)
|
|
17
|
+
* @param dir - cache directory (defaults to `.gro/build/fetch/`)
|
|
18
|
+
* @returns cache object with Map-based data and `save()` method
|
|
19
19
|
*/
|
|
20
20
|
export const create_fs_fetch_value_cache = async (name, dir = join(paths.build, 'fetch')) => {
|
|
21
21
|
const data_path = join(dir, name + '.json');
|
package/dist/git_operations.d.ts
CHANGED
|
@@ -22,9 +22,9 @@ export declare const git_tag: (tag_name: string, message?: string, options?: Spa
|
|
|
22
22
|
export declare const git_push_tag: (tag_name: string, origin?: GitOrigin, options?: SpawnOptions) => Promise<void>;
|
|
23
23
|
export declare const git_has_changes: (options?: SpawnOptions) => Promise<boolean>;
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* Lists uncommitted files in the working tree (`git diff --name-only HEAD`).
|
|
26
26
|
*/
|
|
27
|
-
export declare const
|
|
27
|
+
export declare const git_list_uncommitted_files: (options?: SpawnOptions) => Promise<Array<string>>;
|
|
28
28
|
export declare const git_has_file_changed: (from_commit: string, to_commit: string, file_path: string, options?: SpawnOptions) => Promise<boolean>;
|
|
29
29
|
/**
|
|
30
30
|
* Stashes current changes and throws if anything goes wrong.
|
|
@@ -39,15 +39,15 @@ export declare const git_stash_pop: (options?: SpawnOptions) => Promise<void>;
|
|
|
39
39
|
*/
|
|
40
40
|
export declare const git_switch_branch: (branch: GitBranch, pull?: boolean, options?: SpawnOptions) => Promise<void>;
|
|
41
41
|
/**
|
|
42
|
-
* Wrapper for gro's git_current_branch_name that throws if null.
|
|
42
|
+
* Wrapper for gro's `git_current_branch_name` that throws if null.
|
|
43
43
|
*/
|
|
44
44
|
export declare const git_current_branch_name_required: (options?: SpawnOptions) => Promise<string>;
|
|
45
45
|
/**
|
|
46
|
-
* Wrapper for gro's git_current_commit_hash that throws if null.
|
|
46
|
+
* Wrapper for gro's `git_current_commit_hash` that throws if null.
|
|
47
47
|
*/
|
|
48
48
|
export declare const git_current_commit_hash_required: (branch?: string, options?: SpawnOptions) => Promise<string>;
|
|
49
49
|
/**
|
|
50
|
-
* Wrapper for gro's git_check_clean_workspace that returns a boolean.
|
|
50
|
+
* Wrapper for gro's `git_check_clean_workspace` that returns a boolean.
|
|
51
51
|
*/
|
|
52
52
|
export declare const git_check_clean_workspace_as_boolean: (options?: SpawnOptions) => Promise<boolean>;
|
|
53
53
|
export declare const git_has_remote: (remote?: string, options?: SpawnOptions) => Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git_operations.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/git_operations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAMN,KAAK,SAAS,EACd,KAAK,SAAS,EACd,MAAM,yBAAyB,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,OAAO,GACnB,OAAO,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,EAC7B,UAAU,YAAY,KACpB,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"git_operations.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/git_operations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAMN,KAAK,SAAS,EACd,KAAK,SAAS,EACd,MAAM,yBAAyB,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,OAAO,GACnB,OAAO,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,EAC7B,UAAU,YAAY,KACpB,OAAO,CAAC,IAAI,CAQd,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,GAAU,SAAS,MAAM,EAAE,UAAU,YAAY,KAAG,OAAO,CAAC,IAAI,CAOtF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC9B,OAAO,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,EAC7B,SAAS,MAAM,EACf,UAAU,YAAY,KACpB,OAAO,CAAC,IAAI,CAGd,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,OAAO,GACnB,UAAU,MAAM,EAChB,UAAU,MAAM,EAChB,UAAU,YAAY,KACpB,OAAO,CAAC,IAAI,CASd,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,GACxB,UAAU,MAAM,EAChB,SAAQ,SAAiC,EACzC,UAAU,YAAY,KACpB,OAAO,CAAC,IAAI,CAOd,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,UAAU,YAAY,KAAG,OAAO,CAAC,OAAO,CAG7E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,GACtC,UAAU,YAAY,KACpB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAQvB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAChC,aAAa,MAAM,EACnB,WAAW,MAAM,EACjB,WAAW,MAAM,EACjB,UAAU,YAAY,KACpB,OAAO,CAAC,OAAO,CAOjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAU,UAAU,MAAM,EAAE,UAAU,YAAY,KAAG,OAAO,CAAC,IAAI,CAStF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAU,UAAU,YAAY,KAAG,OAAO,CAAC,IAAI,CAOxE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC7B,QAAQ,SAAS,EACjB,OAAM,OAAc,EACpB,UAAU,YAAY,KACpB,OAAO,CAAC,IAAI,CAoBd,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gCAAgC,GAAU,UAAU,YAAY,KAAG,OAAO,CAAC,MAAM,CAM7F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gCAAgC,GAC5C,SAAS,MAAM,EACf,UAAU,YAAY,KACpB,OAAO,CAAC,MAAM,CAMhB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oCAAoC,GAChD,UAAU,YAAY,KACpB,OAAO,CAAC,OAAO,CAGjB,CAAC;AAEF,eAAO,MAAM,cAAc,GAC1B,SAAQ,MAAiB,EACzB,UAAU,YAAY,KACpB,OAAO,CAAC,OAAO,CAQjB,CAAC"}
|