diff --git a/.changeset/six-impalas-play.md b/.changeset/six-impalas-play.md new file mode 100644 index 00000000..c10aadcf --- /dev/null +++ b/.changeset/six-impalas-play.md @@ -0,0 +1,5 @@ +--- +"@ryanatkn/fuz_gitops": minor +--- + +pin peer deps diff --git a/.changeset/sixty-rice-study.md b/.changeset/sixty-rice-study.md new file mode 100644 index 00000000..71b309bf --- /dev/null +++ b/.changeset/sixty-rice-study.md @@ -0,0 +1,5 @@ +--- +'@ryanatkn/fuz_gitops': minor +--- + +rename `Repo` from `Deployment` diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index e09e23ff..fdcafccd 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -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 diff --git a/README.md b/README.md index c39b5f26..3491efbd 100644 --- a/README.md +++ b/README.md @@ -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: diff --git a/fuz.config.ts b/fuz.config.ts index 2ecfb3f1..11b12833 100644 --- a/fuz.config.ts +++ b/fuz.config.ts @@ -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; diff --git a/package-lock.json b/package-lock.json index db022255..f320885c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,8 +12,8 @@ "@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", @@ -24,7 +24,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", @@ -38,10 +38,10 @@ "url": "https://www.ryanatkn.com/funding" }, "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" } @@ -447,9 +447,9 @@ } }, "node_modules/@ryanatkn/fuz": { - "version": "0.110.4", - "resolved": "https://registry.npmjs.org/@ryanatkn/fuz/-/fuz-0.110.4.tgz", - "integrity": "sha512-2VSYZeycXUIdtBOHU+j0+FFUKkZyVbupYVrYI5YzwN7H9EJu6xef3Uuqgp7ROx1WP7Z1fxsylfrAQOdTI+sxRg==", + "version": "0.112.0", + "resolved": "https://registry.npmjs.org/@ryanatkn/fuz/-/fuz-0.112.0.tgz", + "integrity": "sha512-Utd23IiEv8soSNOju4iUxp9kbPqvHbqQWZLNQPvernr0AdW1Ie5ZOc8buz+SiwmmV0AFbOplJlpyexcbM9AfbQ==", "dev": true, "license": "MIT", "engines": { @@ -459,26 +459,27 @@ "url": "https://www.ryanatkn.com/funding" }, "peerDependencies": { - "@ryanatkn/belt": "*", - "@ryanatkn/moss": "*", + "@ryanatkn/belt": "^0.24.9", + "@ryanatkn/gro": "^0.132.0", + "@ryanatkn/moss": "^0.8.0", "@sveltejs/kit": "^2", "svelte": "^5.0.0-next.0" } }, "node_modules/@ryanatkn/gro": { - "version": "0.130.1", - "resolved": "https://registry.npmjs.org/@ryanatkn/gro/-/gro-0.130.1.tgz", - "integrity": "sha512-MvXxdarOcmgbi/tBwDranStLyLIcrUuUICkdKyHVHAuugHX6DOanXpPh1EJVXGRF64RS+cIkFYo4eNrpwk5LOQ==", + "version": "0.132.0", + "resolved": "https://registry.npmjs.org/@ryanatkn/gro/-/gro-0.132.0.tgz", + "integrity": "sha512-3lOMYFozStffQZc2B6nR+TVeELSzz0UoVmncSJZ+Q/dySvqb3bg6TXkBLNIIbOTvnA2AhAR6C4wghziTLrimdA==", "dev": true, "license": "MIT", "dependencies": { - "@ryanatkn/belt": "^0.24.4", + "@ryanatkn/belt": "^0.24.9", "chokidar": "^3.6.0", "dotenv": "^16.4.5", "es-module-lexer": "^1.5.4", "esm-env": "^1.0.0", "mri": "^1.2.0", - "prettier": "^3.3.2", + "prettier": "^3.3.3", "prettier-plugin-svelte": "^3.2.5", "ts-morph": "^23.0.0", "tslib": "^2.6.3", @@ -2930,9 +2931,9 @@ } }, "node_modules/svelte": { - "version": "5.0.0-next.184", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.0.0-next.184.tgz", - "integrity": "sha512-oHWNajXOytt/5s2Ark3o/CP7bHLx+o/QZjTkCtU1dECqSmYyGqrIsoZi0Cx0VBdXAHMqI+1/T70ppaL1cL7LEw==", + "version": "5.0.0-next.185", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.0.0-next.185.tgz", + "integrity": "sha512-4l508iZ4aad2rgbb86YrqKajZeBDWDziJQPjUFlw5zpQCmNovbfwD93JeTCsxuIpC9ov3/Y9R5ueTPIJ+e//Fw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index a4dc69c1..3574080d 100644 --- a/package.json +++ b/package.json @@ -30,10 +30,10 @@ "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" }, @@ -41,8 +41,8 @@ "@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", @@ -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", @@ -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", @@ -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", diff --git a/src/lib/Modules_Detail.svelte b/src/lib/Modules_Detail.svelte index a02a604c..07f761ca 100644 --- a/src/lib/Modules_Detail.svelte +++ b/src/lib/Modules_Detail.svelte @@ -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>( - (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>((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?) @@ -48,21 +45,21 @@
    - {#each deployments_modules as deployment_modules (deployment_modules)} - {@const {deployment, modules} = deployment_modules} -
  • + {#each repos_modules as repo_modules (repo_modules)} + {@const {repo, modules} = repo_modules} +
  • - 🔗 - {deployment.name} + 🔗 + {repo.name}
      - {#each modules as deployment_module (deployment_module)} - {@const {path, declarations} = deployment_module} + {#each modules as repo_module (repo_module)} + {@const {path, declarations} = repo_module}
    • - {#if deployment.repo_url} + {#if repo.repo_url} {:else} {path} @@ -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); diff --git a/src/lib/Modules_Nav.svelte b/src/lib/Modules_Nav.svelte index e699704a..302e6233 100644 --- a/src/lib/Modules_Nav.svelte +++ b/src/lib/Modules_Nav.svelte @@ -2,19 +2,19 @@ import {page} from '$app/stores'; import type {Src_Module} from '@ryanatkn/gro/src_json.js'; - import type {Fetched_Deployment} from '$lib/fetch_deployments.js'; + import type {Fetched_Repo} from '$lib/repo.js'; // TODO add highlighting of the items that are onscreen // LibraryMenu floats alongside the docs, showing scrolled item as selected interface Props { - deployments_modules: Array<{ - deployment: Fetched_Deployment; + repos_modules: Array<{ + repo: Fetched_Repo; modules: Src_Module[]; }>; } - const {deployments_modules}: Props = $props(); + const {repos_modules}: Props = $props(); // TODO add favicon (from library? gro?) @@ -22,12 +22,10 @@