Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/six-impalas-play.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@ryanatkn/fuz_gitops": minor
---

pin peer deps
5 changes: 5 additions & 0 deletions .changeset/sixty-rice-study.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@ryanatkn/fuz_gitops': minor
---

rename `Repo` from `Deployment`
1 change: 0 additions & 1 deletion .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,5 @@ jobs:
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npx gro sync # TODO hack to init env
- run: npx gro check --workspace
- run: npx gro build
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ fuz_gitops is alternative to the monorepo pattern that more loosely couples repo

With fuz_gitops you can:

- fetch metadata about collections of deployments and import it as typesafe JSON (using
- fetch metadata about collections of repos and import it as typesafe JSON (using
[Gro's public package patterns](https://github.com/grogarden/gro/blob/main/src/lib/docs/gro_plugin_sveltekit_frontend.md#well_known_package_json))
- publish a generated docs website for your collections of deployments
- import its components to view and interact with deployment collection metadata
- publish metadata about your collections of deployments to the web for other users and tools
- publish a generated docs website for your collections of repos
- import its components to view and interact with repo collection metadata
- publish metadata about your collections of repos to the web for other users and tools

planned additions:

Expand Down
22 changes: 12 additions & 10 deletions fuz.config.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
import type {Fuz_Config} from '@ryanatkn/fuz/config.js';
import type {Create_Fuz_Config} from '@ryanatkn/fuz/fuz_config.js';

const config: Fuz_Config = {
deployments: [
'https://www.fuz.dev/',
'https://template.fuz.dev/',
'https://gitops.fuz.dev/',
'https://code.fuz.dev/',
'https://mastodon.fuz.dev/',
'https://gro.ryanatkn.com/',
],
const config: Create_Fuz_Config = () => {
return {
repos: [
'https://www.fuz.dev/',
'https://template.fuz.dev/',
'https://gitops.fuz.dev/',
'https://code.fuz.dev/',
'https://mastodon.fuz.dev/',
'https://gro.ryanatkn.com/',
],
};
};

export default config;
41 changes: 21 additions & 20 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

58 changes: 29 additions & 29 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,19 @@
"node": ">=20.12"
},
"peerDependencies": {
"@ryanatkn/belt": "*",
"@ryanatkn/fuz": "*",
"@ryanatkn/gro": "*",
"@ryanatkn/moss": "*",
"@ryanatkn/belt": "^0.24",
"@ryanatkn/fuz": "^0.112",
"@ryanatkn/gro": "^0.132",
"@ryanatkn/moss": "^0.8",
"@sveltejs/kit": "^2",
"svelte": "^5.0.0-next.0"
},
"devDependencies": {
"@changesets/changelog-git": "^0.2.0",
"@ryanatkn/belt": "^0.24.9",
"@ryanatkn/eslint-config": "^0.4.2",
"@ryanatkn/fuz": "^0.110.4",
"@ryanatkn/gro": "^0.130.1",
"@ryanatkn/fuz": "^0.112.0",
"@ryanatkn/gro": "^0.132.0",
"@ryanatkn/moss": "^0.8.0",
"@sveltejs/adapter-static": "^3.0.2",
"@sveltejs/kit": "^2.5.18",
Expand All @@ -53,7 +53,7 @@
"eslint-plugin-svelte": "^2.42.0",
"prettier": "^3.3.3",
"prettier-plugin-svelte": "^3.2.5",
"svelte": "^5.0.0-next.184",
"svelte": "^5.0.0-next.185",
"svelte-check": "^3.8.4",
"tslib": "^2.6.3",
"typescript": "^5.5.3",
Expand Down Expand Up @@ -88,28 +88,9 @@
],
"exports": {
"./package.json": "./package.json",
"./Deployments_Table.svelte": {
"types": "./dist/Deployments_Table.svelte.d.ts",
"svelte": "./dist/Deployments_Table.svelte",
"default": "./dist/Deployments_Table.svelte"
},
"./Deployments_Tree_Nav.svelte": {
"types": "./dist/Deployments_Tree_Nav.svelte.d.ts",
"svelte": "./dist/Deployments_Tree_Nav.svelte",
"default": "./dist/Deployments_Tree_Nav.svelte"
},
"./Deployments_Tree.svelte": {
"types": "./dist/Deployments_Tree.svelte.d.ts",
"svelte": "./dist/Deployments_Tree.svelte",
"default": "./dist/Deployments_Tree.svelte"
},
"./deployments.js": {
"types": "./dist/deployments.d.ts",
"default": "./dist/deployments.js"
},
"./fetch_deployments.js": {
"types": "./dist/fetch_deployments.d.ts",
"default": "./dist/fetch_deployments.js"
"./fetch_repos.js": {
"types": "./dist/fetch_repos.d.ts",
"default": "./dist/fetch_repos.js"
},
"./fs_fetch_value_cache.js": {
"types": "./dist/fs_fetch_value_cache.d.ts",
Expand Down Expand Up @@ -162,6 +143,25 @@
"svelte": "./dist/Pull_Requests_Page.svelte",
"default": "./dist/Pull_Requests_Page.svelte"
},
"./repo.js": {
"types": "./dist/repo.d.ts",
"default": "./dist/repo.js"
},
"./Repos_Table.svelte": {
"types": "./dist/Repos_Table.svelte.d.ts",
"svelte": "./dist/Repos_Table.svelte",
"default": "./dist/Repos_Table.svelte"
},
"./Repos_Tree_Nav.svelte": {
"types": "./dist/Repos_Tree_Nav.svelte.d.ts",
"svelte": "./dist/Repos_Tree_Nav.svelte",
"default": "./dist/Repos_Tree_Nav.svelte"
},
"./Repos_Tree.svelte": {
"types": "./dist/Repos_Tree.svelte.d.ts",
"svelte": "./dist/Repos_Tree.svelte",
"default": "./dist/Repos_Tree.svelte"
},
"./Table_Page.svelte": {
"types": "./dist/Table_Page.svelte.d.ts",
"svelte": "./dist/Table_Page.svelte",
Expand Down
65 changes: 30 additions & 35 deletions src/lib/Modules_Detail.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -5,41 +5,38 @@
import type {Snippet} from 'svelte';

import Modules_Nav from '$lib/Modules_Nav.svelte';
import type {Fetched_Deployment} from '$lib/fetch_deployments.js';
import type {Fetched_Repo} from '$lib/repo.js';

interface Props {
deployments: Fetched_Deployment[]; // TODO normalized version with cached primitives?
repos: Fetched_Repo[]; // TODO normalized version with cached primitives?
nav_footer?: Snippet;
}

const {deployments, nav_footer}: Props = $props();
const {repos, nav_footer}: Props = $props();

// TODO add sorting options

// TODO show other data (bytes and lines of code per module?)

// TODO hacky, needs helpers or rethinking
const deployments_modules: Array<{
deployment: Fetched_Deployment;
const repos_modules: Array<{
repo: Fetched_Repo;
modules: Src_Module[];
}> = $derived(
deployments.reduce<Array<{deployment: Fetched_Deployment; modules: Src_Module[]}>>(
(v, deployment) => {
const {package_json, src_json} = deployment;
if (
!src_json.modules ||
!(
!!package_json.devDependencies?.['@sveltejs/package'] ||
!!package_json.dependencies?.['@sveltejs/package']
)
) {
return v;
}
v.push({deployment, modules: Object.values(src_json.modules)});
repos.reduce<Array<{repo: Fetched_Repo; modules: Src_Module[]}>>((v, repo) => {
const {package_json, src_json} = repo;
if (
!src_json.modules ||
!(
!!package_json.devDependencies?.['@sveltejs/package'] ||
!!package_json.dependencies?.['@sveltejs/package']
)
) {
return v;
},
[],
),
}
v.push({repo, modules: Object.values(src_json.modules)});
return v;
}, []),
);

// TODO add favicon (from library? gro?)
Expand All @@ -48,21 +45,21 @@
<div class="modules_detail">
<div class="nav_wrapper">
<section>
<Modules_Nav {deployments_modules} />
<Modules_Nav {repos_modules} />
</section>
{#if nav_footer}{@render nav_footer()}{/if}
</div>
<ul class="width_md box unstyled">
{#each deployments_modules as deployment_modules (deployment_modules)}
{@const {deployment, modules} = deployment_modules}
<li class="deployment_module">
{#each repos_modules as repo_modules (repo_modules)}
{@const {repo, modules} = repo_modules}
<li class="repo_module">
<header class="w_100 relative">
<a href="#{deployment.name}" id={deployment.name} class="subtitle">🔗</a>
<a href="{base}/tree/{deployment.repo_name}">{deployment.name}</a>
<a href="#{repo.name}" id={repo.name} class="subtitle">🔗</a>
<a href="{base}/tree/{repo.repo_name}">{repo.name}</a>
</header>
<ul class="modules panel unstyled">
{#each modules as deployment_module (deployment_module)}
{@const {path, declarations} = deployment_module}
{#each modules as repo_module (repo_module)}
{@const {path, declarations} = repo_module}
<li
class="module"
class:ts={path.endsWith('.ts')}
Expand All @@ -71,11 +68,9 @@
class:json={path.endsWith('.json')}
>
<div class="module_file">
{#if deployment.repo_url}
{#if repo.repo_url}
<div class="chip row">
<a href="{ensure_end(deployment.repo_url, '/')}blob/main/src/lib/{path}"
>{path}</a
>
<a href="{ensure_end(repo.repo_url, '/')}blob/main/src/lib/{path}">{path}</a>
</div>
{:else}
<span class="chip">{path}</span>
Expand Down Expand Up @@ -114,13 +109,13 @@
top: 0;
text-align: right;
}
.deployment_module {
.repo_module {
width: 100%;
display: flex;
flex-direction: column;
margin-bottom: var(--space_xl5);
}
.deployment_module > header {
.repo_module > header {
display: flex;
padding: var(--space_xs) var(--space_md);
font-size: var(--size_lg);
Expand Down
Loading