From 30a4926eecfca2b3fddd9167061bff0c3a837765 Mon Sep 17 00:00:00 2001 From: Isaac Mann Date: Fri, 23 Jun 2023 14:56:55 -0400 Subject: [PATCH] feat(nx-dev): site map (#17743) --- docs/generated/manifests/menus.json | 16 + docs/generated/manifests/nx.json | 20 + docs/map.json | 6 + docs/shared/reference/sitemap.md | 630 ++++++++++++++++++ nx-dev/ui-common/src/lib/footer.tsx | 4 + .../generators/generate-manifests.ts | 38 +- scripts/documentation/utils.ts | 54 ++ 7 files changed, 754 insertions(+), 14 deletions(-) create mode 100644 docs/shared/reference/sitemap.md diff --git a/docs/generated/manifests/menus.json b/docs/generated/manifests/menus.json index 0efad6c0a8..5e498fa380 100644 --- a/docs/generated/manifests/menus.json +++ b/docs/generated/manifests/menus.json @@ -1847,6 +1847,14 @@ "isExternal": true, "children": [], "disableCollapsible": false + }, + { + "name": "Site Map", + "path": "/see-also/sitemap", + "id": "sitemap", + "isExternal": false, + "children": [], + "disableCollapsible": false } ], "disableCollapsible": false @@ -1906,6 +1914,14 @@ "isExternal": true, "children": [], "disableCollapsible": false + }, + { + "name": "Site Map", + "path": "/see-also/sitemap", + "id": "sitemap", + "isExternal": false, + "children": [], + "disableCollapsible": false } ] }, diff --git a/docs/generated/manifests/nx.json b/docs/generated/manifests/nx.json index f6ee16f12f..d42c540dbc 100644 --- a/docs/generated/manifests/nx.json +++ b/docs/generated/manifests/nx.json @@ -2300,6 +2300,16 @@ "isExternal": true, "path": "/reference/nx-json#generators", "tags": ["use-code-generators"] + }, + { + "id": "sitemap", + "name": "Site Map", + "description": "", + "file": "shared/reference/sitemap", + "itemList": [], + "isExternal": false, + "path": "/see-also/sitemap", + "tags": [] } ], "isExternal": false, @@ -2375,5 +2385,15 @@ "isExternal": true, "path": "/reference/nx-json#generators", "tags": ["use-code-generators"] + }, + "/see-also/sitemap": { + "id": "sitemap", + "name": "Site Map", + "description": "", + "file": "shared/reference/sitemap", + "itemList": [], + "isExternal": false, + "path": "/see-also/sitemap", + "tags": [] } } diff --git a/docs/map.json b/docs/map.json index c246000e76..6dda9d90c6 100644 --- a/docs/map.json +++ b/docs/map.json @@ -734,6 +734,12 @@ "tags": ["use-code-generators"], "path": "/reference/nx-json#generators", "isExternal": true + }, + { + "name": "Site Map", + "id": "sitemap", + "tags": [], + "file": "shared/reference/sitemap" } ] } diff --git a/docs/shared/reference/sitemap.md b/docs/shared/reference/sitemap.md new file mode 100644 index 0000000000..e6b66aa9bc --- /dev/null +++ b/docs/shared/reference/sitemap.md @@ -0,0 +1,630 @@ +- Nx + + - [Start Here](/getting-started) + - [Getting Started](/getting-started/intro) + - [Installation](/getting-started/installation) + - [Why Nx?](/getting-started/why-nx) + - [5 min Tutorials](/tutorials) + - [Package-Based Monorepo](/tutorials/package-based-repo-tutorial) + - [Integrated Monorepo](/tutorials/integrated-repo-tutorial) + - [React Standalone](/tutorials/react-standalone-tutorial) + - [Angular Standalone](/tutorials/angular-standalone-tutorial) + - [Node Standalone](/tutorials/node-server-tutorial) + - [Core Tutorial](/core-tutorial) + - [1 - Create Blog](/core-tutorial/01-create-blog) + - [2 - Create CLI](/core-tutorial/02-create-cli) + - [3 - Share Assets](/core-tutorial/03-share-assets) + - [4 - Build Affected Projects](/core-tutorial/04-build-affected-projects) + - [5 - Automatically Detect Dependencies](/core-tutorial/05-auto-detect-dependencies) + - [6 - Summary](/core-tutorial/06-summary) + - [React Monorepo Tutorial](/react-tutorial) + - [1 - Code Generation](/react-tutorial/1-code-generation) + - [2 - Project Graph](/react-tutorial/2-project-graph) + - [3 - Task Running](/react-tutorial/3-task-running) + - [4 - Workspace Optimization](/react-tutorial/4-workspace-optimization) + - [5 - Summary](/react-tutorial/5-summary) + - [React Standalone Tutorial](/react-standalone-tutorial) + - [1 - Code Generation](/react-standalone-tutorial/1-code-generation) + - [2 - Project Graph](/react-standalone-tutorial/2-project-graph) + - [3 - Task Running](/react-standalone-tutorial/3-task-running) + - [4 - Task Pipelines](/react-standalone-tutorial/4-task-pipelines) + - [5 - Summary](/react-standalone-tutorial/5-summary) + - [Angular Monorepo Tutorial](/angular-tutorial) + - [1 - Code Generation](/angular-tutorial/1-code-generation) + - [2 - Project Graph](/angular-tutorial/2-project-graph) + - [3 - Task Running](/angular-tutorial/3-task-running) + - [4 - Workspace Optimization](/angular-tutorial/4-workspace-optimization) + - [5 - Summary](/angular-tutorial/5-summary) + - [Angular Standalone Tutorial](/angular-standalone-tutorial) + - [1 - Code Generation](/angular-standalone-tutorial/1-code-generation) + - [2 - Project Graph](/angular-standalone-tutorial/2-project-graph) + - [3 - Task Running](/angular-standalone-tutorial/3-task-running) + - [4 - Task Pipelines](/angular-standalone-tutorial/4-task-pipelines) + - [5 - Summary](/angular-standalone-tutorial/5-summary) + - [Node Server Tutorial](/node-server-tutorial) + - [1 - Code Generation](/node-server-tutorial/1-code-generation) + - [2 - Project Graph](/node-server-tutorial/2-project-graph) + - [3 - Task Running](/node-server-tutorial/3-task-running) + - [4 - Task Pipelines](/node-server-tutorial/4-task-pipelines) + - [5 - Docker Target](/node-server-tutorial/5-docker-target) + - [6 - Summary](/node-server-tutorial/6-summary) + - [Core Features](/core-features) + - [Run Tasks](/core-features/run-tasks) + - [Cache Task Results](/core-features/cache-task-results) + - [Share Your Cache](/core-features/share-your-cache) + - [Explore the Graph](/core-features/explore-graph) + - [Distribute Task Execution](/core-features/distribute-task-execution) + - [Integrate with Editors](/core-features/integrate-with-editors) + - [Automate Updating Dependencies](/core-features/automate-updating-dependencies) + - [Enforce Project Boundaries](/core-features/enforce-project-boundaries) + - [Plugin Features](/plugin-features) + - [Use Task Executors](/plugin-features/use-task-executors) + - [Use Code Generators](/plugin-features/use-code-generators) + - [Concepts](/concepts) + - [Integrated Repos vs. Package-Based Repos vs. Standalone Apps](/concepts/integrated-vs-package-based) + - [Mental Model](/concepts/mental-model) + - [How Caching Works](/concepts/how-caching-works) + - [Improve Worst Case CI Times](/concepts/dte) + - [Task Pipeline Configuration](/concepts/task-pipeline-configuration) + - [Affected](/concepts/affected) + - [More Concept Guides »](/more-concepts) + - [More Concepts](/more-concepts) + - [Customizing Inputs](/more-concepts/customizing-inputs) + - [Incremental Builds](/more-concepts/incremental-builds) + - [Illustrated Distributed Task Execution](/more-concepts/illustrated-dte) + - [Nx and Turborepo](/more-concepts/turbo-and-nx) + - [Monorepos](/more-concepts/why-monorepos) + - [Dependency Management](/more-concepts/dependency-management) + - [Code Sharing](/more-concepts/code-sharing) + - [Using Nx at Enterprises](/more-concepts/monorepo-nx-enterprise) + - [Nx Daemon](/more-concepts/nx-daemon) + - [Nx and the Angular CLI](/more-concepts/nx-and-angular) + - [Folder Structure](/more-concepts/folder-structure) + - [Nx Devkit and Angular Devkit](/more-concepts/nx-devkit-angular-devkit) + - [Micro Frontend Architecture](/more-concepts/micro-frontend-architecture) + - [Applications and Libraries](/more-concepts/applications-and-libraries) + - [Creating Libraries](/more-concepts/creating-libraries) + - [Library Types](/more-concepts/library-types) + - [Grouping Libraries](/more-concepts/grouping-libraries) + - [Buildable and Publishable Libraries](/more-concepts/buildable-and-publishable-libraries) + - [How the Project Graph is Built](/more-concepts/how-project-graph-is-built) + - [Nx and the Nx Wrapper](/more-concepts/nx-and-the-wrapper) + - [Managing your Global Nx Installation](/more-concepts/global-nx) + - [All Recipes »](/recipes) + - [CI Setup](/recipes/ci/ci-setup) + - [Adopting Nx](/recipes/adopting-nx) + - [Reference](/reference) + - [Commands](/reference/commands) + - [nx.json](/reference/nx-json) + - [Project Configuration](/reference/project-configuration) + - [.nxignore](/reference/nxignore) + - [Environment Variables](/reference/environment-variables) + - [Glossary](/reference/glossary) + - [Deprecated](/deprecated) + - [workspace.json](/deprecated/workspace-json) + - [Workspace Generators](/deprecated/workspace-generators) + - [Workspace Executors](/deprecated/workspace-executors) + - [defaultCollection](/deprecated/default-collection) + - [runtimeCacheInputs](/deprecated/runtime-cache-inputs) + - [globalImplicitDependencies](/deprecated/global-implicit-dependencies) + - [Storybook deprecated docs](/deprecated/storybook) + - [Angular: Information about the Storybook targets](/deprecated/storybook/angular-storybook-targets) + - [Angular: The browserTarget](/deprecated/storybook/angular-browser-target) + - [Angular: Storybook Migration to webpackFinal](/deprecated/storybook/migrate-webpack-final-angular) + - [Angular: Upgrading to Storybook 6](/deprecated/storybook/upgrade-storybook-v6-angular) + - [React: Storybook Migration to webpackFinal and the Nx Addon](/deprecated/storybook/migrate-webpack-final-react) + - [React: Upgrading to Storybook 6](/deprecated/storybook/upgrade-storybook-v6-react) + - [See Also](/see-also) + - [Site Map](/see-also/sitemap) + +- Recipes + + - [Getting Started](/recipes/getting-started) + - [Set up a new workspace](/recipes/getting-started/set-up-a-new-workspace) + - [Nx Console](/recipes/nx-console) + - [Nx Console Telemetry](/recipes/nx-console/console-telemetry) + - [Nx Console Generate Command](/recipes/nx-console/console-generate-command) + - [Nx Console Run Command](/recipes/nx-console/console-run-command) + - [Nx Console Add Dependency Command](/recipes/nx-console/console-add-dependency-command) + - [Nx Console Project Pane](/recipes/nx-console/console-project-pane) + - [Nx Console Keyboard Shortcuts](/recipes/nx-console/console-shortcuts) + - [CI](/recipes/ci) + - [CI Setup](/recipes/ci/ci-setup) + - [Prepare applications for deployment via CI](/recipes/ci/ci-deployment) + - [Setting up Azure Pipelines](/recipes/ci/monorepo-ci-azure) + - [Setting up CircleCI](/recipes/ci/monorepo-ci-circle-ci) + - [Setting up GitHub Actions](/recipes/ci/monorepo-ci-github-actions) + - [Setting up Jenkins](/recipes/ci/monorepo-ci-jenkins) + - [Setting up GitLab](/recipes/ci/monorepo-ci-gitlab) + - [Setting up Bitbucket](/recipes/ci/monorepo-ci-bitbucket-pipelines) + - [Troubleshooting Nx Install Issues](/recipes/ci/troubleshoot-nx-install-issues) + - [Adopting Nx](/recipes/adopting-nx) + - [NPM/Yarn/PNPM workspaces](/recipes/adopting-nx/adding-to-monorepo) + - [Add to any Project](/recipes/adopting-nx/adding-to-existing-project) + - [From CRA](/recipes/adopting-nx/migration-cra) + - [From Angular CLI](/recipes/adopting-nx/migration-angular) + - [Nx and Lerna](/recipes/adopting-nx/lerna-and-nx) + - [From AngularJS](/recipes/adopting-nx/migration-angularjs) + - [Preserving Git Histories](/recipes/adopting-nx/preserving-git-histories) + - [Manual migration](/recipes/adopting-nx/manual) + - [Adopting Nx From Angular CLI](/recipes/adopting-nx-angular) + - [From Angular CLI](/recipes/adopting-nx-angular/migration-angular) + - [From Angular CLI to Integrated](/recipes/adopting-nx-angular/angular-integrated) + - [From Angular CLI Manually](/recipes/adopting-nx-angular/angular-manual) + - [From Multiple Angular CLI Repos](/recipes/adopting-nx-angular/angular-multiple) + - [Executors](/recipes/executors) + - [Use Executor Configurations](/recipes/executors/use-executor-configurations) + - [Running Custom Commands](/recipes/executors/run-commands-executor) + - [Environment Variables](/recipes/environment-variables) + - [Define Environment Variables](/recipes/environment-variables/define-environment-variables) + - [Use Environment Variables in React](/recipes/environment-variables/use-environment-variables-in-react) + - [Use Environment Variables in Angular](/recipes/environment-variables/use-environment-variables-in-angular) + - [Module Federation and Micro Frontends](/recipes/module-federation) + - [Faster Builds with Module Federation](/recipes/module-federation/faster-builds) + - [Setup Module Federation with SSR for Angular and React](/recipes/module-federation/module-federation-with-ssr) + - [Advanced Micro Frontends with Angular using Dynamic Federation](/recipes/module-federation/dynamic-module-federation-with-angular) + - [Nx Micro-Frontend Example](/recipes/module-federation/nx-examples) + - [Storybook](/recipes/storybook) + - [Publishing Storybook: One main Storybook instance for all projects](/recipes/storybook/one-storybook-for-all) + - [Publishing Storybook: One Storybook instance per scope](/recipes/storybook/one-storybook-per-scope) + - [Publishing Storybook: One main Storybook instance using Storybook Composition](/recipes/storybook/one-storybook-with-composition) + - [Deployment](/recipes/deployment) + - [Deploying a Node App to Fly.io](/recipes/deployment/node-server-fly-io) + - [Add and Deploy Netlify Edge Functions with Node](/recipes/deployment/node-serverless-functions-netlify) + - [Deploying AWS lambda in Node.js](/recipes/deployment/node-aws-lambda) + - [Serverless deployment with Deno Deploy](/recipes/deployment/deno-deploy) + - [Add and Deploy Netlify Edge Functions with Deno](/recipes/deployment/deno-netlify-functions) + - [Deploying Next.js applications to Vercel](/recipes/deployment/deploy-nextjs-to-vercel) + - [Database](/recipes/database) + - [Using Prisma with NestJS](/recipes/database/nestjs-prisma) + - [Using Mongo with Fastify](/recipes/database/mongo-fastify) + - [Using Redis with Fastify](/recipes/database/redis-fastify) + - [Using Postgres with Fastify](/recipes/database/postgres-fastify) + - [Using PlanetScale with Serverless Fastify](/recipes/database/serverless-fastify-planetscale) + - [Enforce Module Boundaries](/recipes/enforce-module-boundaries) + - [Ban Dependencies with Certain Tags](/recipes/enforce-module-boundaries/ban-dependencies-with-tags) + - [Tag in Multiple Dimensions](/recipes/enforce-module-boundaries/tag-multiple-dimensions) + - [Ban External Imports](/recipes/enforce-module-boundaries/ban-external-imports) + - [Tags Allow List](/recipes/enforce-module-boundaries/tags-allow-list) + - [Example Repos](/recipes/example-repos) + - [Powering Up React Development With Nx](/recipes/example-repos/react-nx) + - [Using Apollo GraphQL](/recipes/example-repos/apollo-react) + - [Large Repo and Caching](/recipes/example-repos/caching) + - [Large Repo and DTE](/recipes/example-repos/dte) + - [Other](/recipes/other) + - [Run Root-Level NPM Scripts with Nx](/recipes/other/root-level-scripts) + - [Disable Graph Links Created from Analyzing Source Files](/recipes/other/analyze-source-files) + - [Workspace Watching](/recipes/other/workspace-watching) + - [Advanced Update Nx](/recipes/other/advanced-update) + - [JavaScript and TypeScript](/recipes/other/js-and-ts) + - [React Native with Nx](/recipes/other/react-native) + - [Adding Images, Fonts, and Files](/recipes/other/adding-assets-react) + - [Setup incremental builds for Angular applications](/recipes/other/setup-incremental-builds-angular) + - [Profiling Build Performance](/recipes/other/performance-profiling) + - [Using ESLint in Nx Workspaces](/recipes/other/eslint) + - [Configuring Browser Support](/recipes/other/browser-support) + - [Using Tailwind CSS in React](/recipes/other/using-tailwind-css-in-react) + - [React 18 Migration](/recipes/other/react-18) + - [Using Tailwind CSS with Angular projects](/recipes/other/using-tailwind-css-with-angular-projects) + - [Using NgRx](/recipes/other/misc-ngrx) + - [Using Data Persistence operators](/recipes/other/misc-data-persistence) + - [Find the Last Successful Commit in Azure Pipelines](/recipes/other/azure-last-successful-commit) + - [Troubleshoot Cache Misses](/recipes/other/troubleshoot-cache-misses) + - [Export Project Graph](/recipes/other/export-project-graph) + - [Resolve Circular Dependencies](/recipes/other/resolve-circular-dependencies) + - [Include All package.json Files as Projects](/recipes/other/include-all-packagejson) + - [Include Assets in Build](/recipes/other/include-assets-in-build) + - [Identify Dependencies Between Folders](/recipes/other/identify-dependencies-between-folders) + - [Rescope Packages from @nrwl to @nx](/recipes/other/rescope) + - [Standalone NgRx APIs](/recipes/other/standalone-ngrx-apis) + +- Plugins + + - [Intro](/plugins/intro) + - [Getting Started with Plugins](/plugins/intro/getting-started) + - [Plugin Registry](/plugins/registry) + - [5 Min Tutorials](/plugins/tutorials) + - [Create a Local Plugin](/plugins/tutorials/create-plugin) + - [Maintain a Published Plugin](/plugins/tutorials/publish-plugin) + - [Recipes](/plugins/recipes) + - [Write a Simple Executor](/plugins/recipes/local-executors) + - [Compose Executors](/plugins/recipes/compose-executors) + - [Write a Simple Generator](/plugins/recipes/local-generators) + - [Compose Generators](/plugins/recipes/composing-generators) + - [Provide Options for Generators](/plugins/recipes/generator-options) + - [Create Files](/plugins/recipes/creating-files) + - [Modify Files](/plugins/recipes/modifying-files) + - [Write a Migration](/plugins/recipes/migration-generators) + - [Create a Preset](/plugins/recipes/create-preset) + - [Modify the Project Graph](/plugins/recipes/project-graph-plugins) + - [Identify Custom Projects](/plugins/recipes/project-inference-plugins) + +- Cloud + + - [Intro](/nx-cloud/intro) + - [What is Nx Cloud?](/nx-cloud/intro/what-is-nx-cloud) + - [Set Up](/nx-cloud/set-up) + - [Record Non-Nx Commands](/nx-cloud/set-up/record-commands) + - [Enable GitHub PR Integration](/nx-cloud/set-up/github) + - [Enable Bitbucket Cloud PR Integration](/nx-cloud/set-up/bitbucket-cloud) + - [Enable GitLab MR Integration](/nx-cloud/set-up/gitlab) + - [Account Management](/nx-cloud/account) + - [Users](/nx-cloud/account/users) + - [Authenticate with Google Identity](/nx-cloud/account/google-auth) + - [Access Tokens](/nx-cloud/account/access-tokens) + - [Security Scenarios](/nx-cloud/account/scenarios) + - [End to End Encryption](/nx-cloud/account/encryption) + - [On Prem](/nx-cloud/private-cloud) + - [Get Started](/nx-cloud/private-cloud/get-started) + - [Authenticate with a Single Admin](/nx-cloud/private-cloud/auth-single-admin) + - [Authenticate with GitHub](/nx-cloud/private-cloud/auth-github) + - [Authenticate with GitLab](/nx-cloud/private-cloud/auth-gitlab) + - [Authenticate with BitBucket](/nx-cloud/private-cloud/auth-bitbucket) + - [Authenticate via SAML](/nx-cloud/private-cloud/auth-saml) + - [Advanced Configuration](/nx-cloud/private-cloud/advanced-config) + - [Kubernetes Setup](/nx-cloud/private-cloud/kubernetes-setup) + - [Standalone](/nx-cloud/private-cloud/standalone) + - [Reference](/nx-cloud/reference) + - [Configuration Options](/nx-cloud/reference/config) + - [nx-cloud CLI](/nx-cloud/reference/nx-cloud-cli) + - [Environment Variables](/nx-cloud/reference/env-vars) + - [Server API Reference](/nx-cloud/reference/server-api) + - [Release Notes](/nx-cloud/reference/release-notes) + +- Packages + - [angular](/packages/angular) + - [documents](/packages/angular/documents) + - [Overview](/packages/angular/documents/overview) + - [Angular and Nx Version Matrix](/packages/angular/documents/angular-nx-version-matrix) + - [executors](/packages/angular/executors) + - [delegate-build](/packages/angular/executors/delegate-build) + - [ng-packagr-lite](/packages/angular/executors/ng-packagr-lite) + - [package](/packages/angular/executors/package) + - [webpack-browser](/packages/angular/executors/webpack-browser) + - [webpack-dev-server](/packages/angular/executors/webpack-dev-server) + - [webpack-server](/packages/angular/executors/webpack-server) + - [module-federation-dev-server](/packages/angular/executors/module-federation-dev-server) + - [module-federation-dev-ssr](/packages/angular/executors/module-federation-dev-ssr) + - [generators](/packages/angular/generators) + - [add-linting](/packages/angular/generators/add-linting) + - [application](/packages/angular/generators/application) + - [component](/packages/angular/generators/component) + - [component-cypress-spec](/packages/angular/generators/component-cypress-spec) + - [component-story](/packages/angular/generators/component-story) + - [component-test](/packages/angular/generators/component-test) + - [convert-tslint-to-eslint](/packages/angular/generators/convert-tslint-to-eslint) + - [directive](/packages/angular/generators/directive) + - [init](/packages/angular/generators/init) + - [library](/packages/angular/generators/library) + - [library-secondary-entry-point](/packages/angular/generators/library-secondary-entry-point) + - [remote](/packages/angular/generators/remote) + - [move](/packages/angular/generators/move) + - [convert-to-with-mf](/packages/angular/generators/convert-to-with-mf) + - [host](/packages/angular/generators/host) + - [ng-add](/packages/angular/generators/ng-add) + - [ngrx](/packages/angular/generators/ngrx) + - [ngrx-feature-store](/packages/angular/generators/ngrx-feature-store) + - [ngrx-root-store](/packages/angular/generators/ngrx-root-store) + - [pipe](/packages/angular/generators/pipe) + - [scam-to-standalone](/packages/angular/generators/scam-to-standalone) + - [scam](/packages/angular/generators/scam) + - [scam-directive](/packages/angular/generators/scam-directive) + - [scam-pipe](/packages/angular/generators/scam-pipe) + - [setup-mf](/packages/angular/generators/setup-mf) + - [setup-ssr](/packages/angular/generators/setup-ssr) + - [setup-tailwind](/packages/angular/generators/setup-tailwind) + - [stories](/packages/angular/generators/stories) + - [storybook-configuration](/packages/angular/generators/storybook-configuration) + - [cypress-component-configuration](/packages/angular/generators/cypress-component-configuration) + - [web-worker](/packages/angular/generators/web-worker) + - [create-nx-plugin](/packages/create-nx-plugin) + - [create-nx-workspace](/packages/create-nx-workspace) + - [cypress](/packages/cypress) + - [documents](/packages/cypress/documents) + - [Overview](/packages/cypress/documents/overview) + - [Component Testing](/packages/cypress/documents/cypress-component-testing) + - [v11 Migration Guide](/packages/cypress/documents/v11-migration-guide) + - [executors](/packages/cypress/executors) + - [cypress](/packages/cypress/executors/cypress) + - [generators](/packages/cypress/generators) + - [init](/packages/cypress/generators/init) + - [cypress-project](/packages/cypress/generators/cypress-project) + - [cypress-e2e-configuration](/packages/cypress/generators/cypress-e2e-configuration) + - [cypress-component-configuration](/packages/cypress/generators/cypress-component-configuration) + - [migrate-to-cypress-11](/packages/cypress/generators/migrate-to-cypress-11) + - [detox](/packages/detox) + - [documents](/packages/detox/documents) + - [Overview](/packages/detox/documents/overview) + - [executors](/packages/detox/executors) + - [build](/packages/detox/executors/build) + - [test](/packages/detox/executors/test) + - [generators](/packages/detox/generators) + - [init](/packages/detox/generators/init) + - [application](/packages/detox/generators/application) + - [devkit](/packages/devkit) + - [documents](/packages/devkit/documents) + - [Overview](/packages/devkit/documents/nx_devkit) + - [Ng CLI Adapter](/packages/devkit/documents/ngcli_adapter) + - [esbuild](/packages/esbuild) + - [documents](/packages/esbuild/documents) + - [Overview](/packages/esbuild/documents/overview) + - [executors](/packages/esbuild/executors) + - [esbuild](/packages/esbuild/executors/esbuild) + - [generators](/packages/esbuild/generators) + - [init](/packages/esbuild/generators/init) + - [esbuild-project](/packages/esbuild/generators/esbuild-project) + - [eslint-plugin](/packages/eslint-plugin) + - [documents](/packages/eslint-plugin/documents) + - [Overview](/packages/eslint-plugin/documents/overview) + - [The `enforce-module-boundaries` rule](/packages/eslint-plugin/documents/enforce-module-boundaries) + - [expo](/packages/expo) + - [documents](/packages/expo/documents) + - [Overview](/packages/expo/documents/overview) + - [executors](/packages/expo/executors) + - [update](/packages/expo/executors/update) + - [build](/packages/expo/executors/build) + - [build-list](/packages/expo/executors/build-list) + - [download](/packages/expo/executors/download) + - [run](/packages/expo/executors/run) + - [start](/packages/expo/executors/start) + - [sync-deps](/packages/expo/executors/sync-deps) + - [ensure-symlink](/packages/expo/executors/ensure-symlink) + - [prebuild](/packages/expo/executors/prebuild) + - [install](/packages/expo/executors/install) + - [export](/packages/expo/executors/export) + - [submit](/packages/expo/executors/submit) + - [generators](/packages/expo/generators) + - [init](/packages/expo/generators/init) + - [application](/packages/expo/generators/application) + - [library](/packages/expo/generators/library) + - [component](/packages/expo/generators/component) + - [express](/packages/express) + - [documents](/packages/express/documents) + - [Overview](/packages/express/documents/overview) + - [generators](/packages/express/generators) + - [init](/packages/express/generators/init) + - [application](/packages/express/generators/application) + - [jest](/packages/jest) + - [documents](/packages/jest/documents) + - [Overview](/packages/jest/documents/overview) + - [executors](/packages/jest/executors) + - [jest](/packages/jest/executors/jest) + - [generators](/packages/jest/generators) + - [init](/packages/jest/generators/init) + - [jest-project](/packages/jest/generators/jest-project) + - [js](/packages/js) + - [documents](/packages/js/documents) + - [Overview](/packages/js/documents/overview) + - [executors](/packages/js/executors) + - [tsc](/packages/js/executors/tsc) + - [swc](/packages/js/executors/swc) + - [node](/packages/js/executors/node) + - [verdaccio](/packages/js/executors/verdaccio) + - [generators](/packages/js/generators) + - [library](/packages/js/generators/library) + - [init](/packages/js/generators/init) + - [convert-to-swc](/packages/js/generators/convert-to-swc) + - [setup-verdaccio](/packages/js/generators/setup-verdaccio) + - [setup-build](/packages/js/generators/setup-build) + - [linter](/packages/linter) + - [documents](/packages/linter/documents) + - [Overview](/packages/linter/documents/overview) + - [executors](/packages/linter/executors) + - [eslint](/packages/linter/executors/eslint) + - [generators](/packages/linter/generators) + - [workspace-rules-project](/packages/linter/generators/workspace-rules-project) + - [workspace-rule](/packages/linter/generators/workspace-rule) + - [nest](/packages/nest) + - [documents](/packages/nest/documents) + - [Overview](/packages/nest/documents/overview) + - [generators](/packages/nest/generators) + - [application](/packages/nest/generators/application) + - [convert-tslint-to-eslint](/packages/nest/generators/convert-tslint-to-eslint) + - [init](/packages/nest/generators/init) + - [library](/packages/nest/generators/library) + - [class](/packages/nest/generators/class) + - [controller](/packages/nest/generators/controller) + - [decorator](/packages/nest/generators/decorator) + - [filter](/packages/nest/generators/filter) + - [gateway](/packages/nest/generators/gateway) + - [guard](/packages/nest/generators/guard) + - [interceptor](/packages/nest/generators/interceptor) + - [interface](/packages/nest/generators/interface) + - [middleware](/packages/nest/generators/middleware) + - [module](/packages/nest/generators/module) + - [pipe](/packages/nest/generators/pipe) + - [provider](/packages/nest/generators/provider) + - [resolver](/packages/nest/generators/resolver) + - [resource](/packages/nest/generators/resource) + - [service](/packages/nest/generators/service) + - [next](/packages/next) + - [documents](/packages/next/documents) + - [Overview](/packages/next/documents/overview) + - [How to configure Next.js plugins](/packages/next/documents/next-config-setup) + - [executors](/packages/next/executors) + - [build](/packages/next/executors/build) + - [server](/packages/next/executors/server) + - [export](/packages/next/executors/export) + - [generators](/packages/next/generators) + - [init](/packages/next/generators/init) + - [application](/packages/next/generators/application) + - [page](/packages/next/generators/page) + - [component](/packages/next/generators/component) + - [library](/packages/next/generators/library) + - [custom-server](/packages/next/generators/custom-server) + - [cypress-component-configuration](/packages/next/generators/cypress-component-configuration) + - [node](/packages/node) + - [documents](/packages/node/documents) + - [Overview](/packages/node/documents/overview) + - [generators](/packages/node/generators) + - [init](/packages/node/generators/init) + - [application](/packages/node/generators/application) + - [library](/packages/node/generators/library) + - [setup-docker](/packages/node/generators/setup-docker) + - [nx](/packages/nx) + - [documents](/packages/nx/documents) + - [create-nx-workspace](/packages/nx/documents/create-nx-workspace) + - [init](/packages/nx/documents/init) + - [generate](/packages/nx/documents/generate) + - [run](/packages/nx/documents/run) + - [daemon](/packages/nx/documents/daemon) + - [graph](/packages/nx/documents/dep-graph) + - [run-many](/packages/nx/documents/run-many) + - [affected](/packages/nx/documents/affected) + - [affected:graph](/packages/nx/documents/affected-dep-graph) + - [print-affected](/packages/nx/documents/print-affected) + - [format:check](/packages/nx/documents/format-check) + - [format:write](/packages/nx/documents/format-write) + - [migrate](/packages/nx/documents/migrate) + - [report](/packages/nx/documents/report) + - [list](/packages/nx/documents/list) + - [workspace-lint](/packages/nx/documents/workspace-lint) + - [workspace-generator](/packages/nx/documents/workspace-generator) + - [connect-to-nx-cloud](/packages/nx/documents/connect-to-nx-cloud) + - [reset](/packages/nx/documents/reset) + - [repair](/packages/nx/documents/repair) + - [exec](/packages/nx/documents/exec) + - [watch](/packages/nx/documents/watch) + - [show](/packages/nx/documents/show) + - [view-logs](/packages/nx/documents/view-logs) + - [executors](/packages/nx/executors) + - [noop](/packages/nx/executors/noop) + - [run-commands](/packages/nx/executors/run-commands) + - [run-script](/packages/nx/executors/run-script) + - [plugin](/packages/plugin) + - [documents](/packages/plugin/documents) + - [Overview](/packages/plugin/documents/overview) + - [executors](/packages/plugin/executors) + - [e2e](/packages/plugin/executors/e2e) + - [generators](/packages/plugin/generators) + - [plugin](/packages/plugin/generators/plugin) + - [create-package](/packages/plugin/generators/create-package) + - [e2e-project](/packages/plugin/generators/e2e-project) + - [migration](/packages/plugin/generators/migration) + - [generator](/packages/plugin/generators/generator) + - [executor](/packages/plugin/generators/executor) + - [plugin-lint-checks](/packages/plugin/generators/plugin-lint-checks) + - [preset](/packages/plugin/generators/preset) + - [react](/packages/react) + - [documents](/packages/react/documents) + - [Overview](/packages/react/documents/overview) + - [executors](/packages/react/executors) + - [module-federation-dev-server](/packages/react/executors/module-federation-dev-server) + - [module-federation-ssr-dev-server](/packages/react/executors/module-federation-ssr-dev-server) + - [generators](/packages/react/generators) + - [init](/packages/react/generators/init) + - [application](/packages/react/generators/application) + - [library](/packages/react/generators/library) + - [component](/packages/react/generators/component) + - [redux](/packages/react/generators/redux) + - [storybook-configuration](/packages/react/generators/storybook-configuration) + - [component-story](/packages/react/generators/component-story) + - [stories](/packages/react/generators/stories) + - [component-cypress-spec](/packages/react/generators/component-cypress-spec) + - [hook](/packages/react/generators/hook) + - [host](/packages/react/generators/host) + - [remote](/packages/react/generators/remote) + - [cypress-component-configuration](/packages/react/generators/cypress-component-configuration) + - [component-test](/packages/react/generators/component-test) + - [setup-tailwind](/packages/react/generators/setup-tailwind) + - [setup-ssr](/packages/react/generators/setup-ssr) + - [react-native](/packages/react-native) + - [documents](/packages/react-native/documents) + - [Overview](/packages/react-native/documents/overview) + - [executors](/packages/react-native/executors) + - [run-android](/packages/react-native/executors/run-android) + - [run-ios](/packages/react-native/executors/run-ios) + - [bundle](/packages/react-native/executors/bundle) + - [build-android](/packages/react-native/executors/build-android) + - [build-ios](/packages/react-native/executors/build-ios) + - [start](/packages/react-native/executors/start) + - [sync-deps](/packages/react-native/executors/sync-deps) + - [ensure-symlink](/packages/react-native/executors/ensure-symlink) + - [storybook](/packages/react-native/executors/storybook) + - [pod-install](/packages/react-native/executors/pod-install) + - [generators](/packages/react-native/generators) + - [init](/packages/react-native/generators/init) + - [application](/packages/react-native/generators/application) + - [library](/packages/react-native/generators/library) + - [component](/packages/react-native/generators/component) + - [storybook-configuration](/packages/react-native/generators/storybook-configuration) + - [component-story](/packages/react-native/generators/component-story) + - [stories](/packages/react-native/generators/stories) + - [upgrade-native](/packages/react-native/generators/upgrade-native) + - [rollup](/packages/rollup) + - [executors](/packages/rollup/executors) + - [rollup](/packages/rollup/executors/rollup) + - [generators](/packages/rollup/generators) + - [init](/packages/rollup/generators/init) + - [rollup-project](/packages/rollup/generators/rollup-project) + - [storybook](/packages/storybook) + - [documents](/packages/storybook/documents) + - [Nx Storybook Plugin Overview](/packages/storybook/documents/overview) + - [Set up Storybook for React Projects](/packages/storybook/documents/overview-react) + - [Set up Storybook for Angular Projects](/packages/storybook/documents/overview-angular) + - [Storybook best practices for making the most out of Nx](/packages/storybook/documents/best-practices) + - [Storybook 7 overview](/packages/storybook/documents/storybook-7-setup) + - [Configuring Storybook on Nx](/packages/storybook/documents/configuring-storybook) + - [How to configure Webpack and Vite for Storybook](/packages/storybook/documents/custom-builder-configs) + - [Setting up Storybook Composition with Nx](/packages/storybook/documents/storybook-composition-setup) + - [Angular: Set up Compodoc for Storybook on Nx](/packages/storybook/documents/angular-storybook-compodoc) + - [Angular: Configuring styles and preprocessor options](/packages/storybook/documents/angular-configuring-styles) + - [executors](/packages/storybook/executors) + - [storybook](/packages/storybook/executors/storybook) + - [build](/packages/storybook/executors/build) + - [generators](/packages/storybook/generators) + - [init](/packages/storybook/generators/init) + - [configuration](/packages/storybook/generators/configuration) + - [cypress-project](/packages/storybook/generators/cypress-project) + - [migrate-7](/packages/storybook/generators/migrate-7) + - [tao](/packages/tao) + - [vite](/packages/vite) + - [documents](/packages/vite/documents) + - [Overview of the Nx Vite Plugin](/packages/vite/documents/overview) + - [Manually set up your project to use Vite.js](/packages/vite/documents/set-up-vite-manually) + - [executors](/packages/vite/executors) + - [dev-server](/packages/vite/executors/dev-server) + - [build](/packages/vite/executors/build) + - [test](/packages/vite/executors/test) + - [preview-server](/packages/vite/executors/preview-server) + - [generators](/packages/vite/generators) + - [init](/packages/vite/generators/init) + - [configuration](/packages/vite/generators/configuration) + - [vitest](/packages/vite/generators/vitest) + - [web](/packages/web) + - [documents](/packages/web/documents) + - [Overview](/packages/web/documents/overview) + - [executors](/packages/web/executors) + - [file-server](/packages/web/executors/file-server) + - [generators](/packages/web/generators) + - [init](/packages/web/generators/init) + - [application](/packages/web/generators/application) + - [static-config](/packages/web/generators/static-config) + - [webpack](/packages/webpack) + - [documents](/packages/webpack/documents) + - [Overview of the Nx Webpack Plugin](/packages/webpack/documents/overview) + - [How to configure webpack on your Nx workspace](/packages/webpack/documents/webpack-config-setup) + - [Webpack plugins](/packages/webpack/documents/webpack-plugins) + - [executors](/packages/webpack/executors) + - [webpack](/packages/webpack/executors/webpack) + - [dev-server](/packages/webpack/executors/dev-server) + - [ssr-dev-server](/packages/webpack/executors/ssr-dev-server) + - [generators](/packages/webpack/generators) + - [init](/packages/webpack/generators/init) + - [webpack-project](/packages/webpack/generators/webpack-project) + - [workspace](/packages/workspace) + - [documents](/packages/workspace/documents) + - [Overview](/packages/workspace/documents/overview) + - [Nx, NodeJS and Typescript Versions](/packages/workspace/documents/nx-nodejs-typescript-version-matrix) + - [executors](/packages/workspace/executors) + - [counter](/packages/workspace/executors/counter) + - [generators](/packages/workspace/generators) + - [preset](/packages/workspace/generators/preset) + - [move](/packages/workspace/generators/move) + - [remove](/packages/workspace/generators/remove) + - [new](/packages/workspace/generators/new) + - [workspace-generator](/packages/workspace/generators/workspace-generator) + - [run-commands](/packages/workspace/generators/run-commands) + - [fix-configuration](/packages/workspace/generators/fix-configuration) + - [npm-package](/packages/workspace/generators/npm-package) + - [ci-workflow](/packages/workspace/generators/ci-workflow) diff --git a/nx-dev/ui-common/src/lib/footer.tsx b/nx-dev/ui-common/src/lib/footer.tsx index 86ac60966b..8b5d3feaac 100644 --- a/nx-dev/ui-common/src/lib/footer.tsx +++ b/nx-dev/ui-common/src/lib/footer.tsx @@ -21,6 +21,10 @@ export function Footer(): JSX.Element { name: 'Brands & Guidelines', href: 'https://nx.app/brands?utm_source=nx.dev', }, + { + name: 'Site Map', + href: '/see-also/sitemap', + }, ], community: [ { name: 'Twitter', href: 'https://twitter.com/NXdevtools' }, diff --git a/scripts/documentation/generators/generate-manifests.ts b/scripts/documentation/generators/generate-manifests.ts index 5d84ea36a6..cbe2a27dd9 100644 --- a/scripts/documentation/generators/generate-manifests.ts +++ b/scripts/documentation/generators/generate-manifests.ts @@ -11,7 +11,7 @@ import { PackageMetadata, ProcessedPackageMetadata, } from '@nx/nx-dev/models-package'; -import { generateJsonFile } from '../utils'; +import { generateIndexMarkdownFile, generateJsonFile } from '../utils'; import { convertToDictionary } from './utils-generator/convert-to-dictionary'; interface DocumentSection { @@ -126,7 +126,7 @@ export function generateManifests(workspace: string): Promise { /** * We can now create manifest files. */ - const fileGenerationPromises = []; + const fileGenerationPromises: Promise[] = []; manifests.forEach((manifest) => fileGenerationPromises.push( generateJsonFile( @@ -141,6 +141,12 @@ export function generateManifests(workspace: string): Promise { fileGenerationPromises.push( generateJsonFile(resolve(targetFolder, `menus.json`), menus) ); + fileGenerationPromises.push( + generateIndexMarkdownFile( + resolve(documentationPath, `shared`, `reference`, `sitemap.md`), + menus + ) + ); return Promise.all(fileGenerationPromises); } @@ -174,18 +180,22 @@ function generateTags(manifests: Manifest[]) { }); if (isPackage(item)) - Object.values(item.documents).forEach((documentMetadata) => { - documentMetadata.tags.forEach((t: string) => { - const tagData = { - description: documentMetadata.description, - file: ['generated', 'packages', documentMetadata.file].join('/'), - id: documentMetadata.id, - name: documentMetadata.name, - path: documentMetadata.path, - }; - !tags[t] ? (tags[t] = [tagData]) : tags[t].push(tagData); - }); - }); + Object.values(item.documents).forEach( + (documentMetadata: DocumentMetadata) => { + documentMetadata.tags.forEach((t: string) => { + const tagData = { + description: documentMetadata.description, + file: ['generated', 'packages', documentMetadata.file].join( + '/' + ), + id: documentMetadata.id, + name: documentMetadata.name, + path: documentMetadata.path, + }; + !tags[t] ? (tags[t] = [tagData]) : tags[t].push(tagData); + }); + } + ); } }); diff --git a/scripts/documentation/utils.ts b/scripts/documentation/utils.ts index d521edc2e7..e6f015e11d 100644 --- a/scripts/documentation/utils.ts +++ b/scripts/documentation/utils.ts @@ -2,6 +2,7 @@ import { outputFileSync } from 'fs-extra'; import { bold, h, lines as mdLines, strikethrough } from 'markdown-factory'; import { join } from 'path'; import { format, resolveConfig } from 'prettier'; +import { MenuItem } from '@nx/nx-dev/models-menu'; const stripAnsi = require('strip-ansi'); const importFresh = require('import-fresh'); @@ -51,6 +52,59 @@ export async function generateJsonFile( ); } +function menuItemToStrings(item: MenuItem, pathPrefix = '/'): string[] { + if (item.isExternal) { + return []; + } + const line = item.path ? `- [${item.name}](${item.path})` : `- ${item.name}`; + const padding = item.path + .replace(pathPrefix, '') + .split('/') + .map(() => ' ') + .join(''); + const childLines = item.children.flatMap((child) => + menuItemToStrings(child, pathPrefix) + ); + return [padding + line, ...childLines]; +} + +function deduplicate(array: T[]): T[] { + return Array.from(new Set(array)); +} + +export async function generateIndexMarkdownFile( + filePath: string, + json: { id: string; menu: MenuItem[] }[] +): Promise { + function capitalize(word: string) { + const [firstLetter, ...rest] = word; + return firstLetter.toLocaleUpperCase() + rest.join(''); + } + const idToPathPrefix = { + nx: undefined, + recipes: `/recipes/`, + plugins: `/plugins/`, + packages: `/packages/`, + cloud: `/nx-cloud/`, + }; + const content = json + .map( + ({ id, menu }) => + deduplicate( + [ + `- ${capitalize(id)}`, + ...menu.flatMap((item) => + menuItemToStrings(item, idToPathPrefix[id]) + ), + ].filter((line) => line.length > 0) + ).join('\n') + '\n' + ) + .join(`\n`); + outputFileSync(filePath, await formatWithPrettier(filePath, content), { + encoding: 'utf8', + }); +} + export async function formatWithPrettier(filePath: string, content: string) { let options: any = { filepath: filePath,