@fuzdev/fuz_gitops 0.77.0 → 0.78.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.
Files changed (94) hide show
  1. package/README.md +5 -5
  2. package/dist/ModulesDetail.svelte +1 -1
  3. package/dist/PageFooter.svelte +2 -2
  4. package/dist/PageHeader.svelte +1 -1
  5. package/dist/PageHeader.svelte.d.ts +1 -1
  6. package/dist/ReposTable.svelte +1 -1
  7. package/dist/ReposTree.svelte +1 -1
  8. package/dist/cargo_toml.d.ts +33 -0
  9. package/dist/cargo_toml.d.ts.map +1 -0
  10. package/dist/cargo_toml.js +74 -0
  11. package/dist/changeset_generator.d.ts +1 -1
  12. package/dist/changeset_reader.d.ts +1 -1
  13. package/dist/dependency_graph.d.ts +2 -2
  14. package/dist/dependency_graph.js +4 -4
  15. package/dist/dependency_updater.d.ts +1 -1
  16. package/dist/fetch_repo_data.d.ts +2 -2
  17. package/dist/fetch_repo_data.js +1 -1
  18. package/dist/fs_fetch_value_cache.d.ts +1 -1
  19. package/dist/fs_fetch_value_cache.js +3 -3
  20. package/dist/git_operations.d.ts +1 -1
  21. package/dist/git_operations.js +2 -2
  22. package/dist/github.d.ts +2 -2
  23. package/dist/github.js +1 -1
  24. package/dist/github_helpers.js +1 -1
  25. package/dist/gitops_analyze.task.d.ts.map +1 -1
  26. package/dist/gitops_analyze.task.js +15 -8
  27. package/dist/gitops_config.d.ts +2 -2
  28. package/dist/gitops_config.js +1 -1
  29. package/dist/gitops_run.task.js +2 -2
  30. package/dist/gitops_sync.task.js +4 -4
  31. package/dist/gitops_task_helpers.d.ts +1 -1
  32. package/dist/gitops_task_helpers.js +1 -1
  33. package/dist/graph_validation.d.ts +2 -2
  34. package/dist/graph_validation.d.ts.map +1 -1
  35. package/dist/graph_validation.js +3 -1
  36. package/dist/local_repo.d.ts +17 -3
  37. package/dist/local_repo.d.ts.map +1 -1
  38. package/dist/local_repo.js +54 -6
  39. package/dist/log_helpers.d.ts +1 -1
  40. package/dist/multi_repo_publisher.d.ts +3 -3
  41. package/dist/multi_repo_publisher.d.ts.map +1 -1
  42. package/dist/multi_repo_publisher.js +5 -1
  43. package/dist/npm_registry.d.ts +1 -1
  44. package/dist/npm_registry.js +2 -2
  45. package/dist/operations.d.ts +4 -4
  46. package/dist/operations_defaults.js +4 -4
  47. package/dist/output_helpers.d.ts +1 -1
  48. package/dist/preflight_checks.d.ts +1 -1
  49. package/dist/preflight_checks.js +1 -1
  50. package/dist/publish_steps.js +1 -1
  51. package/dist/publishing_plan.d.ts +3 -3
  52. package/dist/publishing_plan.d.ts.map +1 -1
  53. package/dist/publishing_plan.js +11 -1
  54. package/dist/publishing_plan_logging.d.ts +1 -1
  55. package/dist/repo.svelte.d.ts +5 -5
  56. package/dist/repo.svelte.js +2 -2
  57. package/package.json +6 -6
  58. package/src/lib/cargo_toml.ts +82 -0
  59. package/src/lib/changeset_generator.ts +6 -6
  60. package/src/lib/changeset_reader.ts +3 -3
  61. package/src/lib/config_reconcile.ts +1 -1
  62. package/src/lib/dependency_graph.ts +5 -5
  63. package/src/lib/dependency_updater.ts +7 -7
  64. package/src/lib/fetch_repo_data.ts +6 -6
  65. package/src/lib/fs_fetch_value_cache.ts +3 -3
  66. package/src/lib/git_operations.ts +2 -2
  67. package/src/lib/github.ts +2 -2
  68. package/src/lib/github_helpers.ts +3 -3
  69. package/src/lib/gitops_analyze.task.ts +26 -18
  70. package/src/lib/gitops_config.ts +4 -4
  71. package/src/lib/gitops_plan.task.ts +4 -4
  72. package/src/lib/gitops_publish.task.ts +9 -9
  73. package/src/lib/gitops_run.task.ts +4 -4
  74. package/src/lib/gitops_sync.task.ts +8 -8
  75. package/src/lib/gitops_task_helpers.ts +7 -7
  76. package/src/lib/gitops_validate.task.ts +7 -7
  77. package/src/lib/graph_validation.ts +5 -4
  78. package/src/lib/local_repo.ts +81 -15
  79. package/src/lib/log_helpers.ts +2 -2
  80. package/src/lib/multi_repo_publisher.ts +15 -11
  81. package/src/lib/npm_registry.ts +3 -3
  82. package/src/lib/operations.ts +9 -9
  83. package/src/lib/operations_defaults.ts +9 -9
  84. package/src/lib/output_helpers.ts +1 -1
  85. package/src/lib/preflight_checks.ts +6 -6
  86. package/src/lib/publish_gate.ts +2 -2
  87. package/src/lib/publish_steps.ts +3 -3
  88. package/src/lib/publishing_event_handler.ts +1 -1
  89. package/src/lib/publishing_plan.ts +22 -10
  90. package/src/lib/publishing_plan_helpers.ts +3 -3
  91. package/src/lib/publishing_plan_logging.ts +2 -2
  92. package/src/lib/repo.svelte.ts +7 -7
  93. package/src/lib/repo_ops.ts +3 -3
  94. package/src/lib/resolved_gitops_config.ts +2 -2
package/README.md CHANGED
@@ -40,19 +40,19 @@ npm i -D @fuzdev/fuz_gitops
40
40
 
41
41
  ```ts
42
42
  // gitops_sync.task.ts
43
- export * from '@fuzdev/fuz_gitops/gitops_sync.task.js';
43
+ export * from '@fuzdev/fuz_gitops/gitops_sync.task.ts';
44
44
 
45
45
  // gitops_analyze.task.ts
46
- export * from '@fuzdev/fuz_gitops/gitops_analyze.task.js';
46
+ export * from '@fuzdev/fuz_gitops/gitops_analyze.task.ts';
47
47
 
48
48
  // gitops_plan.task.ts
49
- export * from '@fuzdev/fuz_gitops/gitops_plan.task.js';
49
+ export * from '@fuzdev/fuz_gitops/gitops_plan.task.ts';
50
50
 
51
51
  // gitops_publish.task.ts
52
- export * from '@fuzdev/fuz_gitops/gitops_publish.task.js';
52
+ export * from '@fuzdev/fuz_gitops/gitops_publish.task.ts';
53
53
 
54
54
  // gitops_validate.task.ts
55
- export * from '@fuzdev/fuz_gitops/gitops_validate.task.js';
55
+ export * from '@fuzdev/fuz_gitops/gitops_validate.task.ts';
56
56
  ```
57
57
 
58
58
  - run `gro gitops_sync` to sync repos and update the local data
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import {ensure_end} from '@fuzdev/fuz_util/string.js';
2
+ import {ensure_end} from '@fuzdev/fuz_util/string.ts';
3
3
  import {resolve} from '$app/paths';
4
4
  import type {Snippet} from 'svelte';
5
5
 
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import DocsFooter from '@fuzdev/fuz_ui/DocsFooter.svelte';
3
- import {site_context} from '@fuzdev/fuz_ui/site.svelte.js';
4
- import {FUZ_DEV_URL} from '@fuzdev/fuz_ui/constants.js';
3
+ import {site_context} from '@fuzdev/fuz_ui/site.svelte.ts';
4
+ import {FUZ_DEV_URL} from '@fuzdev/fuz_ui/constants.ts';
5
5
  import Breadcrumb from '@fuzdev/fuz_ui/Breadcrumb.svelte';
6
6
 
7
7
  const site = site_context.get();
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import type {PkgJson} from '@fuzdev/fuz_util/pkg_json.js';
2
+ import type {PkgJson} from '@fuzdev/fuz_util/pkg_json.ts';
3
3
  import Breadcrumb from '@fuzdev/fuz_ui/Breadcrumb.svelte';
4
4
  import type {Snippet} from 'svelte';
5
5
  import type {SvelteHTMLElements} from 'svelte/elements';
@@ -1,4 +1,4 @@
1
- import type { PkgJson } from '@fuzdev/fuz_util/pkg_json.js';
1
+ import type { PkgJson } from '@fuzdev/fuz_util/pkg_json.ts';
2
2
  import type { Snippet } from 'svelte';
3
3
  import type { SvelteHTMLElements } from 'svelte/elements';
4
4
  type $$ComponentProps = {
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import {page} from '$app/state';
3
3
  import {resolve} from '$app/paths';
4
- import {format_url} from '@fuzdev/fuz_util/url.js';
4
+ import {format_url} from '@fuzdev/fuz_util/url.ts';
5
5
 
6
6
  import type {Repo} from './repo.svelte.js';
7
7
  import {to_pull_url} from './github_helpers.js';
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import LibrarySummary from '@fuzdev/fuz_ui/LibrarySummary.svelte';
3
3
  import {resolve} from '$app/paths';
4
- import {format_url} from '@fuzdev/fuz_util/url.js';
4
+ import {format_url} from '@fuzdev/fuz_util/url.ts';
5
5
  import type {Snippet} from 'svelte';
6
6
 
7
7
  import type {Repo} from './repo.svelte.js';
@@ -0,0 +1,33 @@
1
+ /**
2
+ * The handful of identity fields gitops reads from a Rust repo's `Cargo.toml`
3
+ * to render it on the dashboard. Everything is optional — a workspace root has
4
+ * no `name`, and any field may be absent or inherited.
5
+ */
6
+ export interface CargoMetadata {
7
+ name?: string;
8
+ version?: string;
9
+ description?: string;
10
+ repository?: string;
11
+ }
12
+ /**
13
+ * Best-effort read of a repo's root `Cargo.toml` for the identity fields the
14
+ * gitops dashboard renders. Returns `null` when there's no `Cargo.toml`.
15
+ *
16
+ * @param repo_dir - absolute path to the repo
17
+ */
18
+ export declare const cargo_toml_load: (repo_dir: string) => Promise<CargoMetadata | null>;
19
+ /**
20
+ * Extracts `name`/`version`/`description`/`repository` from the `[package]` and
21
+ * `[workspace.package]` tables of a `Cargo.toml`.
22
+ *
23
+ * Deliberately not a full TOML parser: it scans for simple `key = "value"`
24
+ * string entries in those two tables, which covers both a single-crate manifest
25
+ * and a workspace root. Inline-table values like `version = { workspace = true }`
26
+ * (and the equivalent `version.workspace = true`) are ignored — a member crate
27
+ * inheriting from the workspace has no literal here, and gitops only ever reads a
28
+ * repo's root manifest, where these are concrete. The first non-empty value for a
29
+ * key wins, so a top-level `[package]` takes precedence over `[workspace.package]`
30
+ * when both appear.
31
+ */
32
+ export declare const cargo_toml_parse: (contents: string) => CargoMetadata;
33
+ //# sourceMappingURL=cargo_toml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cargo_toml.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/cargo_toml.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAIpF,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,KAAG,aAsBnD,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ /** The `Cargo.toml` tables that carry package identity (single-crate vs workspace root). */
5
+ const CARGO_METADATA_SECTIONS = new Set(['package', 'workspace.package']);
6
+ const CARGO_METADATA_KEYS = ['name', 'version', 'description', 'repository'];
7
+ /**
8
+ * Best-effort read of a repo's root `Cargo.toml` for the identity fields the
9
+ * gitops dashboard renders. Returns `null` when there's no `Cargo.toml`.
10
+ *
11
+ * @param repo_dir - absolute path to the repo
12
+ */
13
+ export const cargo_toml_load = async (repo_dir) => {
14
+ const cargo_toml_path = join(repo_dir, 'Cargo.toml');
15
+ if (!existsSync(cargo_toml_path))
16
+ return null;
17
+ return cargo_toml_parse(await readFile(cargo_toml_path, 'utf8'));
18
+ };
19
+ /**
20
+ * Extracts `name`/`version`/`description`/`repository` from the `[package]` and
21
+ * `[workspace.package]` tables of a `Cargo.toml`.
22
+ *
23
+ * Deliberately not a full TOML parser: it scans for simple `key = "value"`
24
+ * string entries in those two tables, which covers both a single-crate manifest
25
+ * and a workspace root. Inline-table values like `version = { workspace = true }`
26
+ * (and the equivalent `version.workspace = true`) are ignored — a member crate
27
+ * inheriting from the workspace has no literal here, and gitops only ever reads a
28
+ * repo's root manifest, where these are concrete. The first non-empty value for a
29
+ * key wins, so a top-level `[package]` takes precedence over `[workspace.package]`
30
+ * when both appear.
31
+ */
32
+ export const cargo_toml_parse = (contents) => {
33
+ const metadata = {};
34
+ let in_metadata_section = false;
35
+ for (const raw_line of contents.split('\n')) {
36
+ const line = raw_line.trim();
37
+ if (line === '' || line.startsWith('#'))
38
+ continue;
39
+ // Section header — only `[package]`/`[workspace.package]` arm value capture.
40
+ if (line.startsWith('[')) {
41
+ const end = line.indexOf(']');
42
+ in_metadata_section = end !== -1 && CARGO_METADATA_SECTIONS.has(line.slice(1, end).trim());
43
+ continue;
44
+ }
45
+ if (!in_metadata_section)
46
+ continue;
47
+ const eq = line.indexOf('=');
48
+ if (eq === -1)
49
+ continue;
50
+ const key = line.slice(0, eq).trim();
51
+ if (!CARGO_METADATA_KEYS.includes(key))
52
+ continue;
53
+ if (metadata[key] !== undefined)
54
+ continue; // first value wins
55
+ const value = cargo_toml_string_value(line.slice(eq + 1).trim());
56
+ if (value !== null)
57
+ metadata[key] = value;
58
+ }
59
+ return metadata;
60
+ };
61
+ /**
62
+ * Reads a simple single- or double-quoted TOML string, ignoring any trailing
63
+ * inline comment. Returns `null` for non-string values (inline tables, arrays,
64
+ * booleans, numbers), which the caller skips.
65
+ */
66
+ const cargo_toml_string_value = (raw) => {
67
+ const quote = raw[0];
68
+ if (quote !== '"' && quote !== "'")
69
+ return null;
70
+ const end = raw.indexOf(quote, 1);
71
+ if (end === -1)
72
+ return null;
73
+ return raw.slice(1, end);
74
+ };
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @module
8
8
  */
9
- import type { Logger } from '@fuzdev/fuz_util/log.js';
9
+ import type { Logger } from '@fuzdev/fuz_util/log.ts';
10
10
  import type { LocalRepo } from './local_repo.js';
11
11
  import type { PublishedVersion } from './multi_repo_publisher.js';
12
12
  import type { FsOperations } from './operations.js';
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @module
8
8
  */
9
- import type { Logger } from '@fuzdev/fuz_util/log.js';
9
+ import type { Logger } from '@fuzdev/fuz_util/log.ts';
10
10
  import type { LocalRepo } from './local_repo.js';
11
11
  import { type BumpType } from './version_utils.js';
12
12
  export interface ChangesetInfo {
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Dependency graph data structure and algorithms for multi-repo publishing.
3
3
  *
4
- * Provides `DependencyGraph` class with topological sort (via `@fuzdev/fuz_util/sort.js`)
4
+ * Provides `DependencyGraph` class with topological sort (via `@fuzdev/fuz_util/sort.ts`)
5
5
  * and cycle detection by dependency type.
6
6
  * For validation workflow and publishing order computation, see `graph_validation.ts`.
7
7
  *
@@ -55,7 +55,7 @@ export declare class DependencyGraph {
55
55
  /**
56
56
  * Computes topological sort order for dependency graph.
57
57
  *
58
- * Delegates to `@fuzdev/fuz_util/sort.js` for the sorting algorithm.
58
+ * Delegates to `@fuzdev/fuz_util/sort.ts` for the sorting algorithm.
59
59
  * Throws if cycles detected.
60
60
  *
61
61
  * @param exclude_dev - if true, excludes dev dependencies to break cycles
@@ -1,14 +1,14 @@
1
1
  /**
2
2
  * Dependency graph data structure and algorithms for multi-repo publishing.
3
3
  *
4
- * Provides `DependencyGraph` class with topological sort (via `@fuzdev/fuz_util/sort.js`)
4
+ * Provides `DependencyGraph` class with topological sort (via `@fuzdev/fuz_util/sort.ts`)
5
5
  * and cycle detection by dependency type.
6
6
  * For validation workflow and publishing order computation, see `graph_validation.ts`.
7
7
  *
8
8
  * @module
9
9
  */
10
- import { EMPTY_OBJECT } from '@fuzdev/fuz_util/object.js';
11
- import { topological_sort as topological_sort_generic } from '@fuzdev/fuz_util/sort.js';
10
+ import { EMPTY_OBJECT } from '@fuzdev/fuz_util/object.ts';
11
+ import { topological_sort as topological_sort_generic } from '@fuzdev/fuz_util/sort.ts';
12
12
  export const DEPENDENCY_TYPE = {
13
13
  PROD: 'prod',
14
14
  PEER: 'peer',
@@ -79,7 +79,7 @@ export class DependencyGraph {
79
79
  /**
80
80
  * Computes topological sort order for dependency graph.
81
81
  *
82
- * Delegates to `@fuzdev/fuz_util/sort.js` for the sorting algorithm.
82
+ * Delegates to `@fuzdev/fuz_util/sort.ts` for the sorting algorithm.
83
83
  * Throws if cycles detected.
84
84
  *
85
85
  * @param exclude_dev - if true, excludes dev dependencies to break cycles
@@ -1,4 +1,4 @@
1
- import type { Logger } from '@fuzdev/fuz_util/log.js';
1
+ import type { Logger } from '@fuzdev/fuz_util/log.ts';
2
2
  import type { LocalRepo } from './local_repo.js';
3
3
  import type { PublishedVersion } from './multi_repo_publisher.js';
4
4
  import type { GitOperations, FsOperations } from './operations.js';
@@ -1,5 +1,5 @@
1
- import type { Logger } from '@fuzdev/fuz_util/log.js';
2
- import type { FetchValueCache } from '@fuzdev/fuz_util/fetch.js';
1
+ import type { Logger } from '@fuzdev/fuz_util/log.ts';
2
+ import type { FetchValueCache } from '@fuzdev/fuz_util/fetch.ts';
3
3
  import type { RepoJson } from './repo.svelte.js';
4
4
  import type { LocalRepo } from './local_repo.js';
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { wait } from '@fuzdev/fuz_util/async.js';
1
+ import { wait } from '@fuzdev/fuz_util/async.ts';
2
2
  import { fetch_github_check_runs, fetch_github_pull_requests } from './github.js';
3
3
  /**
4
4
  * Fetches GitHub metadata (CI status, PRs) for all repos.
@@ -1,4 +1,4 @@
1
- import { type FetchValueCache } from '@fuzdev/fuz_util/fetch.js';
1
+ import { type FetchValueCache } from '@fuzdev/fuz_util/fetch.ts';
2
2
  export interface FetchCache {
3
3
  name: string;
4
4
  data: FetchValueCache;
@@ -1,8 +1,8 @@
1
1
  import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';
2
2
  import { dirname, join } from 'node:path';
3
- import { paths } from '@fuzdev/gro/paths.js';
4
- import { format_file } from '@fuzdev/gro/format_file.js';
5
- import { deserialize_cache, serialize_cache } from '@fuzdev/fuz_util/fetch.js';
3
+ import { paths } from '@fuzdev/gro/paths.ts';
4
+ import { format_file } from '@fuzdev/gro/format_file.ts';
5
+ import { deserialize_cache, serialize_cache } from '@fuzdev/fuz_util/fetch.ts';
6
6
  import { existsSync } from 'node:fs';
7
7
  /**
8
8
  * Creates file-system backed cache for `fuz_util`'s `fetch.js` API responses.
@@ -1,5 +1,5 @@
1
1
  import type { SpawnOptions } from 'node:child_process';
2
- import { type GitBranch, type GitOrigin } from '@fuzdev/fuz_util/git.js';
2
+ import { type GitBranch, type GitOrigin } from '@fuzdev/fuz_util/git.ts';
3
3
  /**
4
4
  * Adds files to git staging area and throws if anything goes wrong.
5
5
  */
@@ -1,5 +1,5 @@
1
- import { spawn_out, spawn_result_to_message } from '@fuzdev/fuz_util/process.js';
2
- import { git_check_clean_workspace as gro_git_check_clean_workspace, git_checkout as gro_git_checkout, git_pull as gro_git_pull, git_current_branch_name as gro_git_current_branch_name, git_current_commit_hash as gro_git_current_commit_hash, } from '@fuzdev/fuz_util/git.js';
1
+ import { spawn_out, spawn_result_to_message } from '@fuzdev/fuz_util/process.ts';
2
+ import { git_check_clean_workspace as gro_git_check_clean_workspace, git_checkout as gro_git_checkout, git_pull as gro_git_pull, git_current_branch_name as gro_git_current_branch_name, git_current_commit_hash as gro_git_current_commit_hash, } from '@fuzdev/fuz_util/git.ts';
3
3
  /**
4
4
  * Adds files to git staging area and throws if anything goes wrong.
5
5
  */
package/dist/github.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import type { Logger } from '@fuzdev/fuz_util/log.js';
1
+ import type { Logger } from '@fuzdev/fuz_util/log.ts';
2
2
  import { z } from 'zod';
3
- import { type FetchValueCache } from '@fuzdev/fuz_util/fetch.js';
3
+ import { type FetchValueCache } from '@fuzdev/fuz_util/fetch.ts';
4
4
  /**
5
5
  * Minimal interface for GitHub API calls - works with both `Pkg` and `Repo`.
6
6
  */
package/dist/github.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { fetch_value } from '@fuzdev/fuz_util/fetch.js';
2
+ import { fetch_value } from '@fuzdev/fuz_util/fetch.ts';
3
3
  /**
4
4
  * @see https://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-pull-requests
5
5
  */
@@ -1,4 +1,4 @@
1
- import { ensure_end } from '@fuzdev/fuz_util/string.js';
1
+ import { ensure_end } from '@fuzdev/fuz_util/string.ts';
2
2
  export const to_pull_requests = (repos, filter_pull_request) => repos
3
3
  .flatMap((repo) => {
4
4
  if (!repo.pull_requests)
@@ -1 +1 @@
1
- {"version":3,"file":"gitops_analyze.task.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gitops_analyze.task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAgBtB,cAAc;AACd,eAAO,MAAM,IAAI;;;;;;;;;;kBAqBf,CAAC;AACH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;AAExC,cAAc;AACd,eAAO,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAsB3B,CAAC"}
1
+ {"version":3,"file":"gitops_analyze.task.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/gitops_analyze.task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAgBtB,cAAc;AACd,eAAO,MAAM,IAAI;;;;;;;;;;kBAqBf,CAAC;AACH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;AAExC,cAAc;AACd,eAAO,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAkC3B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  import { styleText as st } from 'node:util';
3
3
  import { get_gitops_ready } from './gitops_task_helpers.js';
4
+ import { repo_is_npm } from './local_repo.js';
4
5
  import { analyze_repos } from './graph_validation.js';
5
6
  import { format_wildcard_dependencies, format_dev_cycles, format_production_cycles, } from './log_helpers.js';
6
7
  import { format_and_output } from './output_helpers.js';
@@ -35,11 +36,17 @@ export const task = {
35
36
  const { config, dir, format, outfile, sync } = args;
36
37
  // Get repos ready (without downloading); read the working tree as-is unless `--sync`
37
38
  const { local_repos } = await get_gitops_ready({ config, dir, download: false, sync, log });
39
+ // Only npm packages form the dependency graph; note any non-npm repos (e.g. cargo)
40
+ // that are excluded so the omission isn't silent.
41
+ const non_npm_repos = local_repos.filter((r) => !repo_is_npm(r));
42
+ if (non_npm_repos.length > 0) {
43
+ log.info(st('dim', `excluding ${non_npm_repos.length} non-npm repo(s) from analysis (dashboard-only): ` +
44
+ non_npm_repos.map((r) => r.library.name).join(', ')));
45
+ }
38
46
  // Build the dependency graph and analyze cycles/wildcards (tolerating cycles)
39
47
  const { graph, analysis, publishing_order } = analyze_repos(local_repos);
40
48
  // Format and output using output_helpers
41
49
  const data = {
42
- repos: local_repos,
43
50
  graph,
44
51
  analysis,
45
52
  publishing_order,
@@ -50,8 +57,8 @@ export const task = {
50
57
  // Create formatters for output_helpers
51
58
  const create_formatters = () => ({
52
59
  json: (data) => format_json(data.graph, data.analysis, data.publishing_order),
53
- markdown: (data) => format_markdown(data.repos, data.graph, data.analysis, data.publishing_order),
54
- stdout: (data, log) => format_stdout(data.repos, data.graph, data.analysis, data.publishing_order, log),
60
+ markdown: (data) => format_markdown(data.graph, data.analysis, data.publishing_order),
61
+ stdout: (data, log) => format_stdout(data.graph, data.analysis, data.publishing_order, log),
55
62
  });
56
63
  // Helper to calculate common statistics
57
64
  const calculate_stats = (graph) => {
@@ -67,12 +74,12 @@ const format_json = (graph, analysis, publishing_order) => {
67
74
  };
68
75
  return JSON.stringify(output, null, 2);
69
76
  };
70
- const format_markdown = (repos, graph, analysis, publishing_order) => {
77
+ const format_markdown = (graph, analysis, publishing_order) => {
71
78
  const lines = ['# Dependency Analysis'];
72
79
  // Summary stats
73
80
  const { total_deps, internal_deps } = calculate_stats(graph);
74
81
  lines.push('', '## Summary', '');
75
- lines.push(`- **Total packages**: ${repos.length}`);
82
+ lines.push(`- **Total packages**: ${graph.nodes.size}`);
76
83
  lines.push(`- **Total dependencies**: ${total_deps}`);
77
84
  lines.push(`- **Internal dependencies**: ${internal_deps}`);
78
85
  lines.push(`- **Wildcard dependencies**: ${analysis.wildcard_deps.length}`);
@@ -127,8 +134,8 @@ const format_markdown = (repos, graph, analysis, publishing_order) => {
127
134
  }
128
135
  return lines;
129
136
  };
130
- const format_stdout = (repos, graph, analysis, publishing_order, log) => {
131
- log.info(st('cyan', `📊 Analyzing ${repos.length} repositories...`));
137
+ const format_stdout = (graph, analysis, publishing_order, log) => {
138
+ log.info(st('cyan', `📊 Analyzing ${graph.nodes.size} repositories...`));
132
139
  // Publishing order
133
140
  if (publishing_order) {
134
141
  log.info(st('yellow', 'Publishing order:'));
@@ -175,7 +182,7 @@ const format_stdout = (repos, graph, analysis, publishing_order, log) => {
175
182
  const { total_deps, internal_deps } = calculate_stats(graph);
176
183
  log.info('');
177
184
  log.info(st('cyan', 'Summary:'));
178
- log.info(` Total packages: ${repos.length}`);
185
+ log.info(` Total packages: ${graph.nodes.size}`);
179
186
  log.info(` Total dependencies: ${total_deps}`);
180
187
  log.info(` Internal dependencies: ${internal_deps}`);
181
188
  log.info(` Wildcard dependencies: ${analysis.wildcard_deps.length}`);
@@ -10,8 +10,8 @@
10
10
  *
11
11
  * @module
12
12
  */
13
- import type { Url } from '@fuzdev/fuz_util/url.js';
14
- import type { GitBranch } from '@fuzdev/fuz_util/git.js';
13
+ import type { Url } from '@fuzdev/fuz_util/url.ts';
14
+ import type { GitBranch } from '@fuzdev/fuz_util/git.ts';
15
15
  export interface GitopsConfig {
16
16
  repos: Array<GitopsRepoConfig>;
17
17
  repos_dir: string;
@@ -11,7 +11,7 @@
11
11
  * @module
12
12
  */
13
13
  import { existsSync } from 'node:fs';
14
- import { strip_end } from '@fuzdev/fuz_util/string.js';
14
+ import { strip_end } from '@fuzdev/fuz_util/string.ts';
15
15
  import { DEFAULT_REPOS_DIR } from './paths.js';
16
16
  export const create_empty_gitops_config = () => ({
17
17
  repos: [],
@@ -1,7 +1,7 @@
1
1
  import { TaskError } from '@fuzdev/gro';
2
2
  import { z } from 'zod';
3
- import { map_concurrent_settled } from '@fuzdev/fuz_util/async.js';
4
- import { spawn_out } from '@fuzdev/fuz_util/process.js';
3
+ import { map_concurrent_settled } from '@fuzdev/fuz_util/async.ts';
4
+ import { spawn_out } from '@fuzdev/fuz_util/process.ts';
5
5
  import { writeFile } from 'node:fs/promises';
6
6
  import { styleText as st } from 'node:util';
7
7
  import { resolve } from 'node:path';
@@ -1,11 +1,11 @@
1
1
  import { TaskError } from '@fuzdev/gro';
2
2
  import { z } from 'zod';
3
3
  import { readFile, writeFile } from 'node:fs/promises';
4
- import { format_file } from '@fuzdev/gro/format_file.js';
4
+ import { format_file } from '@fuzdev/gro/format_file.ts';
5
5
  import { basename, resolve } from 'node:path';
6
- import { print_path } from '@fuzdev/gro/paths.js';
7
- import { load_from_env } from '@fuzdev/gro/env.js';
8
- import { package_json_load } from '@fuzdev/gro/package_json.js';
6
+ import { print_path } from '@fuzdev/gro/paths.ts';
7
+ import { load_from_env } from '@fuzdev/gro/env.ts';
8
+ import { package_json_load } from '@fuzdev/gro/package_json.ts';
9
9
  import { existsSync } from 'node:fs';
10
10
  import { compactReplacer } from 'svelte-docinfo';
11
11
  import { fetch_repo_data } from './fetch_repo_data.js';
@@ -15,7 +15,7 @@
15
15
  *
16
16
  * @module
17
17
  */
18
- import type { Logger } from '@fuzdev/fuz_util/log.js';
18
+ import type { Logger } from '@fuzdev/fuz_util/log.ts';
19
19
  import { type GitopsConfig } from './gitops_config.js';
20
20
  import { type LocalRepo } from './local_repo.js';
21
21
  import type { GitOperations, NpmOperations } from './operations.js';
@@ -18,7 +18,7 @@
18
18
  import { TaskError } from '@fuzdev/gro';
19
19
  import { styleText as st } from 'node:util';
20
20
  import { resolve, dirname } from 'node:path';
21
- import { print_path } from '@fuzdev/gro/paths.js';
21
+ import { print_path } from '@fuzdev/gro/paths.ts';
22
22
  import { load_gitops_config } from './gitops_config.js';
23
23
  import { local_repos_load, local_repos_ensure } from './local_repo.js';
24
24
  import { resolve_gitops_config } from './resolved_gitops_config.js';
@@ -12,9 +12,9 @@
12
12
  *
13
13
  * @module
14
14
  */
15
- import type { Logger } from '@fuzdev/fuz_util/log.js';
15
+ import type { Logger } from '@fuzdev/fuz_util/log.ts';
16
16
  import { DependencyGraph, DependencyGraphBuilder } from './dependency_graph.js';
17
- import type { LocalRepo } from './local_repo.js';
17
+ import { type LocalRepo } from './local_repo.js';
18
18
  export interface GraphValidationResult {
19
19
  graph: DependencyGraph;
20
20
  publishing_order: Array<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"graph_validation.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/graph_validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAIpD,OAAO,EAAC,eAAe,EAAE,sBAAsB,EAAC,MAAM,uBAAuB,CAAC;AAC9E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE/C,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,eAAe,CAAC;IACvB,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAChC,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,GACrC,OAAO,KAAK,CAAC,SAAS,CAAC,EACvB,UAAS;IACR,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACf,KACJ,qBA8DF,CAAC;AAEF,6FAA6F;AAC7F,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC;AAE/E,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,sFAAsF;IACtF,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACvC;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,CAAC,SAAS,CAAC,KAAG,YAQvD,CAAC"}
1
+ {"version":3,"file":"graph_validation.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/graph_validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAIpD,OAAO,EAAC,eAAe,EAAE,sBAAsB,EAAC,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAc,KAAK,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE5D,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,eAAe,CAAC;IACvB,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAChC,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,GACrC,OAAO,KAAK,CAAC,SAAS,CAAC,EACvB,UAAS;IACR,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACf,KACJ,qBA8DF,CAAC;AAEF,6FAA6F;AAC7F,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC;AAE/E,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,sFAAsF;IACtF,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACvC;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,CAAC,SAAS,CAAC,KAAG,YASvD,CAAC"}
@@ -15,6 +15,7 @@
15
15
  import { TaskError } from '@fuzdev/gro';
16
16
  import { styleText as st } from 'node:util';
17
17
  import { DependencyGraph, DependencyGraphBuilder } from './dependency_graph.js';
18
+ import { repo_is_npm } from './local_repo.js';
18
19
  /**
19
20
  * Shared utility for building dependency graph, detecting cycles, and computing publishing order.
20
21
  * This centralizes logic that was duplicated across `multi_repo_publisher`, `publishing_plan`, and `gitops_analyze`.
@@ -86,7 +87,8 @@ export const validate_dependency_graph = (repos, options = {}) => {
86
87
  * (no `log`) to avoid emitting a redundant "Analyzing dependencies" line.
87
88
  */
88
89
  export const analyze_repos = (repos) => {
89
- const { graph, publishing_order: order } = validate_dependency_graph(repos, {
90
+ // Only npm packages form the dependency graph; non-npm repos (e.g. cargo) are excluded.
91
+ const { graph, publishing_order: order } = validate_dependency_graph(repos.filter(repo_is_npm), {
90
92
  throw_on_prod_cycles: false, // report, don't throw
91
93
  log_cycles: false, // callers format their own cycle output
92
94
  log_order: false,
@@ -1,6 +1,6 @@
1
- import type { PackageJson } from '@fuzdev/fuz_util/package_json.js';
2
- import { Library } from '@fuzdev/fuz_ui/library.svelte.js';
3
- import type { Logger } from '@fuzdev/fuz_util/log.js';
1
+ import type { PackageJson } from '@fuzdev/fuz_util/package_json.ts';
2
+ import { Library } from '@fuzdev/fuz_ui/library.svelte.ts';
3
+ import type { Logger } from '@fuzdev/fuz_util/log.ts';
4
4
  import type { GitOperations, NpmOperations } from './operations.js';
5
5
  import type { GitopsConfig, GitopsRepoConfig } from './gitops_config.js';
6
6
  import type { ResolvedGitopsConfig } from './resolved_gitops_config.js';
@@ -9,6 +9,14 @@ import type { ResolvedGitopsConfig } from './resolved_gitops_config.js';
9
9
  * Does not extend `LocalRepoPath` - `Library` is source of truth for name/repo_url/etc.
10
10
  */
11
11
  export interface LocalRepo {
12
+ /**
13
+ * Which packaging ecosystem the repo belongs to. `npm` repos (with a
14
+ * `package.json`) take part in the changeset publishing cascade; `cargo` repos
15
+ * (a Rust `Cargo.toml`, no `package.json`) are dashboard-only — fetched and
16
+ * rendered like any repo but excluded from publishing/analysis. See
17
+ * `repo_is_npm`.
18
+ */
19
+ kind: 'npm' | 'cargo';
12
20
  library: Library;
13
21
  /** The repo's full `package.json` (with `dependencies`/`devDependencies`). */
14
22
  package_json: PackageJson;
@@ -74,6 +82,12 @@ export declare const local_repo_load: ({ local_repo_path, log: _log, git_ops, np
74
82
  sync?: boolean;
75
83
  allow_dirty?: boolean;
76
84
  }) => Promise<LocalRepo>;
85
+ /**
86
+ * Whether a repo is an npm package and so participates in publishing and
87
+ * dependency analysis. Non-npm repos (e.g. Rust `cargo` repos) are still synced
88
+ * and rendered on the dashboard, but excluded from the changeset cascade.
89
+ */
90
+ export declare const repo_is_npm: (repo: LocalRepo) => boolean;
77
91
  export declare const local_repos_ensure: ({ resolved_config, repos_dir, gitops_config, download, log, npm_ops, }: {
78
92
  resolved_config: ResolvedGitopsConfig;
79
93
  repos_dir: string;
@@ -1 +1 @@
1
- {"version":3,"file":"local_repo.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/local_repo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local_repo.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/local_repo.ts"],"names":[],"mappings":"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"}