├── .all-contributorsrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .githooks ├── commit-msg └── pre-commit ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── 01-bug-report.yml │ └── 02-feature-request.yml ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── ci.yml │ ├── release.yml │ └── test-release.yml ├── .gitignore ├── .lintstagedrc ├── .node-version ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .vscode ├── extensions.json └── settings.json ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── MAINTAINER.md ├── README.md ├── apps ├── .gitkeep ├── analog-app-e2e-cypress │ ├── .eslintrc.json │ ├── cypress.config.ts │ ├── package.json │ ├── project.json │ ├── src │ │ ├── e2e │ │ │ ├── app.cy.ts │ │ │ ├── cart.cy.ts │ │ │ ├── newsletter.cy.ts │ │ │ └── products.cy.ts │ │ ├── fixtures │ │ │ └── .gitkeep │ │ └── support │ │ │ ├── app.po.ts │ │ │ ├── cart.po.ts │ │ │ ├── commands.ts │ │ │ ├── e2e.ts │ │ │ ├── form.ts │ │ │ ├── newsletter.po.ts │ │ │ ├── phones.ts │ │ │ ├── product-details.po.ts │ │ │ ├── product-list.po.ts │ │ │ └── product.ts │ └── tsconfig.json ├── analog-app-e2e-playwright │ ├── .eslintrc.json │ ├── package.json │ ├── project.json │ ├── tests │ │ ├── app.spec.ts │ │ ├── cart.spec.ts │ │ ├── fixtures │ │ │ ├── cart.po.ts │ │ │ ├── phones.ts │ │ │ ├── products-details.po.ts │ │ │ └── products-list.po.ts │ │ └── products.spec.ts │ └── vite.config.ts ├── analog-app │ ├── .eslintrc.json │ ├── error.ts │ ├── favicon.ico │ ├── index.html │ ├── project.json │ ├── src │ │ ├── app │ │ │ ├── about.ts │ │ │ ├── app.component.spec.ts │ │ │ ├── app.component.ts │ │ │ ├── app.config.server.ts │ │ │ ├── app.config.ts │ │ │ ├── cart.service.ts │ │ │ ├── pages │ │ │ │ ├── (auth).page.ts │ │ │ │ ├── (auth) │ │ │ │ │ └── sign-up.page.ts │ │ │ │ ├── (home).page.ts │ │ │ │ ├── (home).server.ts │ │ │ │ ├── [...slug].page.ts │ │ │ │ ├── [...slug].server.ts │ │ │ │ ├── cart.page.ts │ │ │ │ ├── client │ │ │ │ │ └── (client).page.ts │ │ │ │ ├── goodbye.page.analog │ │ │ │ ├── newsletter.page.ts │ │ │ │ ├── newsletter.server.ts │ │ │ │ ├── package.page.ts │ │ │ │ ├── products.[productId].page.ts │ │ │ │ ├── products.[productId].server.ts │ │ │ │ ├── search.page.ts │ │ │ │ ├── search.server.ts │ │ │ │ ├── server │ │ │ │ │ └── (server).page.ts │ │ │ │ └── shipping │ │ │ │ │ ├── [...slug].page.ts │ │ │ │ │ ├── [...slug].server.ts │ │ │ │ │ ├── index.page.ts │ │ │ │ │ ├── index.server.ts │ │ │ │ │ ├── shipping.html │ │ │ │ │ └── shipping.scss │ │ │ ├── product-alerts │ │ │ │ └── product-alerts.component.ts │ │ │ └── products.ts │ │ ├── main-cf.server.ts │ │ ├── main.server.ts │ │ ├── main.ts │ │ ├── public │ │ │ ├── .gitkeep │ │ │ └── assets │ │ │ │ ├── .gitkeep │ │ │ │ └── shipping.json │ │ ├── server │ │ │ ├── components │ │ │ │ ├── goodbye.ag │ │ │ │ └── hello.ts │ │ │ ├── middleware │ │ │ │ └── redirect.ts │ │ │ └── routes │ │ │ │ └── api │ │ │ │ └── v1 │ │ │ │ └── products.ts │ │ ├── styles.css │ │ ├── test-setup.ts │ │ └── vite-env.d.ts │ ├── tsconfig.app.json │ ├── tsconfig.editor.json │ ├── tsconfig.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── analog-preset-e2e │ ├── project.json │ ├── tests │ │ └── analog-preset.spec.ts │ ├── tsconfig.json │ └── vite.config.ts ├── astro-app-e2e-playwright │ ├── .eslintrc.json │ ├── package.json │ ├── project.json │ ├── tests │ │ └── app.spec.ts │ ├── tsconfig.json │ └── vite.config.ts ├── astro-app │ ├── .astro │ │ └── settings.json │ ├── .gitignore │ ├── .npmrc │ ├── .vscode │ │ ├── extensions.json │ │ └── launch.json │ ├── README.md │ ├── astro.config.mjs │ ├── project.json │ ├── public │ │ └── favicon.svg │ ├── src │ │ ├── components │ │ │ ├── Card.astro │ │ │ ├── Instructions.tsx │ │ │ ├── card.component.ts │ │ │ └── todos.component.ts │ │ ├── env.d.ts │ │ ├── layouts │ │ │ └── Layout.astro │ │ └── pages │ │ │ ├── index.astro │ │ │ └── test.mdx │ ├── tsconfig.app.json │ └── tsconfig.json ├── blog-app-e2e-cypress │ ├── .eslintrc.json │ ├── cypress.config.ts │ ├── package.json │ ├── project.json │ ├── src │ │ ├── e2e │ │ │ └── app.cy.ts │ │ ├── fixtures │ │ │ └── .gitkeep │ │ └── support │ │ │ ├── app.po.ts │ │ │ ├── commands.ts │ │ │ └── e2e.ts │ └── tsconfig.json ├── blog-app │ ├── index.html │ ├── project.json │ ├── src │ │ ├── app │ │ │ ├── app.component.ts │ │ │ ├── app.config.server.ts │ │ │ ├── app.config.ts │ │ │ ├── components │ │ │ │ └── nav.component.ts │ │ │ └── pages │ │ │ │ ├── [...page-not-found].md │ │ │ │ ├── about.md │ │ │ │ ├── archived │ │ │ │ ├── [slug].page.ts │ │ │ │ ├── index.page.ts │ │ │ │ ├── models.ts │ │ │ │ └── resolvers.ts │ │ │ │ ├── blog │ │ │ │ ├── [slug].page.ts │ │ │ │ ├── index.page.ts │ │ │ │ ├── models.ts │ │ │ │ └── resolvers.ts │ │ │ │ ├── contact.md │ │ │ │ └── index.page.ts │ │ ├── assets │ │ │ ├── .gitkeep │ │ │ ├── analog.svg │ │ │ └── angular-gradient.png │ │ ├── content │ │ │ ├── 2022-12-27-my-first-post.md │ │ │ ├── 2022-12-31-my-second-post.md │ │ │ └── archived │ │ │ │ ├── 2022-01-08-post1-2024.md │ │ │ │ └── 2022-01-10-post2-2024.md │ │ ├── favicon.ico │ │ ├── main.server.ts │ │ ├── main.ts │ │ ├── server │ │ │ └── routes │ │ │ │ ├── rss.xml.ts │ │ │ │ └── v1 │ │ │ │ └── [...slug].ts │ │ ├── styles.css │ │ └── vite-env.d.ts │ ├── tsconfig.app.json │ ├── tsconfig.editor.json │ ├── tsconfig.json │ └── vite.config.ts ├── create-analog-e2e │ ├── project.json │ ├── tests │ │ └── create-analog.spec.ts │ ├── tsconfig.json │ └── vite.config.ts ├── docs-app │ ├── README.md │ ├── babel.config.js │ ├── blog │ │ └── .gitkeep │ ├── docs │ │ ├── contributing.md │ │ ├── contributors.mdx │ │ ├── contributors.module.css │ │ ├── experimental │ │ │ └── sfc │ │ │ │ └── index.md │ │ ├── features │ │ │ ├── api │ │ │ │ ├── og-image-generation.md │ │ │ │ ├── overview.md │ │ │ │ └── websockets.md │ │ │ ├── data-fetching │ │ │ │ ├── overview.md │ │ │ │ └── server-side-data-fetching.md │ │ │ ├── deployment │ │ │ │ ├── overview.md │ │ │ │ └── providers.md │ │ │ ├── generation │ │ │ │ └── code-generation.md │ │ │ ├── routing │ │ │ │ ├── content.md │ │ │ │ ├── metadata.md │ │ │ │ ├── middleware.md │ │ │ │ └── overview.md │ │ │ ├── server │ │ │ │ ├── server-side-rendering.md │ │ │ │ └── static-site-generation.md │ │ │ ├── testing │ │ │ │ ├── overview.md │ │ │ │ └── vitest.md │ │ │ └── updating │ │ │ │ └── overview.md │ │ ├── getting-started.md │ │ ├── guides │ │ │ ├── compatibility.md │ │ │ ├── forms.md │ │ │ ├── libraries.md │ │ │ └── migrating.md │ │ ├── integrations │ │ │ ├── angular-material │ │ │ │ └── index.md │ │ │ ├── ionic │ │ │ │ └── index.md │ │ │ ├── nx │ │ │ │ └── index.md │ │ │ └── storybook │ │ │ │ └── index.md │ │ ├── introduction.md │ │ ├── packages │ │ │ ├── astro-angular │ │ │ │ └── overview.md │ │ │ ├── create-analog │ │ │ │ └── overview.md │ │ │ ├── router │ │ │ │ └── overview.md │ │ │ ├── vite-plugin-angular │ │ │ │ ├── css-preprocessors.md │ │ │ │ └── overview.md │ │ │ └── vite-plugin-nitro │ │ │ │ └── overview.md │ │ ├── sponsoring.mdx │ │ └── support.md │ ├── docusaurus.config.js │ ├── i18n │ │ ├── de │ │ │ ├── code.json │ │ │ ├── docusaurus-plugin-content-docs │ │ │ │ ├── current.json │ │ │ │ └── current │ │ │ │ │ ├── contributing.md │ │ │ │ │ ├── contributors.mdx │ │ │ │ │ ├── contributors.module.css │ │ │ │ │ ├── features │ │ │ │ │ ├── api │ │ │ │ │ │ ├── og-image-generation.md │ │ │ │ │ │ ├── overview.md │ │ │ │ │ │ └── websockets.md │ │ │ │ │ ├── data-fetching │ │ │ │ │ │ ├── overview.md │ │ │ │ │ │ └── server-side-data-fetching.md │ │ │ │ │ ├── deployment │ │ │ │ │ │ ├── overview.md │ │ │ │ │ │ └── providers.md │ │ │ │ │ ├── generation │ │ │ │ │ │ └── code-generation.md │ │ │ │ │ ├── routing │ │ │ │ │ │ ├── content.md │ │ │ │ │ │ ├── metadata.md │ │ │ │ │ │ ├── middleware.md │ │ │ │ │ │ └── overview.md │ │ │ │ │ ├── server │ │ │ │ │ │ ├── server-side-rendering.md │ │ │ │ │ │ └── static-site-generation.md │ │ │ │ │ ├── testing │ │ │ │ │ │ ├── overview.md │ │ │ │ │ │ └── vitest.md │ │ │ │ │ └── updating │ │ │ │ │ │ └── overview.md │ │ │ │ │ ├── getting-started.md │ │ │ │ │ ├── guides │ │ │ │ │ ├── compatibility.md │ │ │ │ │ └── migrating.md │ │ │ │ │ ├── integrations │ │ │ │ │ ├── angular-material │ │ │ │ │ │ └── index.md │ │ │ │ │ ├── ionic │ │ │ │ │ │ └── index.md │ │ │ │ │ ├── nx │ │ │ │ │ │ └── index.md │ │ │ │ │ └── storybook │ │ │ │ │ │ └── index.md │ │ │ │ │ ├── introduction.md │ │ │ │ │ ├── packages │ │ │ │ │ ├── astro-angular │ │ │ │ │ │ └── overview.md │ │ │ │ │ ├── create-analog │ │ │ │ │ │ └── overview.md │ │ │ │ │ ├── router │ │ │ │ │ │ └── overview.md │ │ │ │ │ └── vite-plugin-angular │ │ │ │ │ │ ├── css-preprocessors.md │ │ │ │ │ │ └── overview.md │ │ │ │ │ ├── sponsoring.mdx │ │ │ │ │ └── support.md │ │ │ └── docusaurus-theme-classic │ │ │ │ ├── footer.json │ │ │ │ └── navbar.json │ │ ├── es │ │ │ ├── code.json │ │ │ ├── docusaurus-plugin-content-docs │ │ │ │ ├── current.json │ │ │ │ └── current │ │ │ │ │ ├── contributing.md │ │ │ │ │ ├── contributors.mdx │ │ │ │ │ ├── contributors.module.css │ │ │ │ │ ├── experimental │ │ │ │ │ └── sfc │ │ │ │ │ │ └── index.md │ │ │ │ │ ├── features │ │ │ │ │ ├── api │ │ │ │ │ │ ├── og-image-generation.md │ │ │ │ │ │ └── overview.md │ │ │ │ │ ├── data-fetching │ │ │ │ │ │ ├── overview.md │ │ │ │ │ │ └── server-side-data-fetching.md │ │ │ │ │ ├── deployment │ │ │ │ │ │ ├── overview.md │ │ │ │ │ │ └── providers.md │ │ │ │ │ ├── generation │ │ │ │ │ │ └── code-generation.md │ │ │ │ │ ├── routing │ │ │ │ │ │ ├── content.md │ │ │ │ │ │ ├── metadata.md │ │ │ │ │ │ ├── middleware.md │ │ │ │ │ │ └── overview.md │ │ │ │ │ ├── server │ │ │ │ │ │ ├── server-side-rendering.md │ │ │ │ │ │ └── static-site-generation.md │ │ │ │ │ ├── testing │ │ │ │ │ │ ├── overview.md │ │ │ │ │ │ └── vitest.md │ │ │ │ │ └── updating │ │ │ │ │ │ └── overview.md │ │ │ │ │ ├── getting-started.md │ │ │ │ │ ├── guides │ │ │ │ │ ├── compatibility.md │ │ │ │ │ ├── forms.md │ │ │ │ │ └── migrating.md │ │ │ │ │ ├── integrations │ │ │ │ │ ├── angular-material │ │ │ │ │ │ └── index.md │ │ │ │ │ ├── ionic │ │ │ │ │ │ └── index.md │ │ │ │ │ ├── nx │ │ │ │ │ │ └── index.md │ │ │ │ │ └── storybook │ │ │ │ │ │ └── index.md │ │ │ │ │ ├── introduction.md │ │ │ │ │ ├── packages │ │ │ │ │ ├── astro-angular │ │ │ │ │ │ └── overview.md │ │ │ │ │ ├── create-analog │ │ │ │ │ │ └── overview.md │ │ │ │ │ ├── router │ │ │ │ │ │ └── overview.md │ │ │ │ │ └── vite-plugin-angular │ │ │ │ │ │ ├── css-preprocessors.md │ │ │ │ │ │ └── overview.md │ │ │ │ │ ├── sponsoring.mdx │ │ │ │ │ └── support.md │ │ │ └── docusaurus-theme-classic │ │ │ │ ├── footer.json │ │ │ │ └── navbar.json │ │ ├── fr │ │ │ ├── code.json │ │ │ ├── docusaurus-plugin-content-docs │ │ │ │ └── current.json │ │ │ └── docusaurus-theme-classic │ │ │ │ ├── footer.json │ │ │ │ └── navbar.json │ │ ├── ko │ │ │ ├── code.json │ │ │ ├── docusaurus-plugin-content-docs │ │ │ │ └── current.json │ │ │ └── docusaurus-theme-classic │ │ │ │ ├── footer.json │ │ │ │ └── navbar.json │ │ ├── pt-br │ │ │ ├── code.json │ │ │ ├── docusaurus-plugin-content-docs │ │ │ │ └── current.json │ │ │ └── docusaurus-theme-classic │ │ │ │ ├── footer.json │ │ │ │ └── navbar.json │ │ ├── tr │ │ │ ├── code.json │ │ │ ├── docusaurus-plugin-content-docs │ │ │ │ └── current.json │ │ │ └── docusaurus-theme-classic │ │ │ │ ├── footer.json │ │ │ │ └── navbar.json │ │ └── zh-hans │ │ │ ├── code.json │ │ │ ├── docusaurus-plugin-content-docs │ │ │ ├── current.json │ │ │ └── current │ │ │ │ ├── contributors.mdx │ │ │ │ ├── contributors.module.css │ │ │ │ ├── experimental │ │ │ │ └── sfc │ │ │ │ │ └── index.md │ │ │ │ ├── features │ │ │ │ ├── api │ │ │ │ │ ├── og-image-generation.md │ │ │ │ │ ├── overview.md │ │ │ │ │ └── websockets.md │ │ │ │ ├── data-fetching │ │ │ │ │ ├── overview.md │ │ │ │ │ └── server-side-data-fetching.md │ │ │ │ ├── deployment │ │ │ │ │ ├── overview.md │ │ │ │ │ └── providers.md │ │ │ │ ├── generation │ │ │ │ │ └── code-generation.md │ │ │ │ ├── routing │ │ │ │ │ ├── content.md │ │ │ │ │ ├── metadata.md │ │ │ │ │ ├── middleware.md │ │ │ │ │ └── overview.md │ │ │ │ ├── server │ │ │ │ │ ├── server-side-rendering.md │ │ │ │ │ └── static-site-generation.md │ │ │ │ ├── testing │ │ │ │ │ ├── overview.md │ │ │ │ │ └── vitest.md │ │ │ │ └── updating │ │ │ │ │ └── overview.md │ │ │ │ ├── getting-started.md │ │ │ │ ├── guides │ │ │ │ ├── compatibility.md │ │ │ │ ├── forms.md │ │ │ │ └── migrating.md │ │ │ │ ├── integrations │ │ │ │ ├── angular-material │ │ │ │ │ └── index.md │ │ │ │ ├── ionic │ │ │ │ │ └── index.md │ │ │ │ ├── nx │ │ │ │ │ └── index.md │ │ │ │ └── storybook │ │ │ │ │ └── index.md │ │ │ │ ├── introduction.md │ │ │ │ ├── packages │ │ │ │ ├── astro-angular │ │ │ │ │ └── overview.md │ │ │ │ ├── create-analog │ │ │ │ │ └── overview.md │ │ │ │ ├── vite-plugin-angular │ │ │ │ │ ├── css-preprocessors.md │ │ │ │ │ └── overview.md │ │ │ │ └── vite-plugin-nitro │ │ │ │ │ └── overview.md │ │ │ │ ├── sponsoring.mdx │ │ │ │ └── support.md │ │ │ └── docusaurus-theme-classic │ │ │ ├── footer.json │ │ │ └── navbar.json │ ├── package.json │ ├── project.json │ ├── sidebars.js │ ├── src │ │ ├── components │ │ │ ├── HomepageFeatures │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ └── StackblitzButton │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ ├── css │ │ │ └── custom.css │ │ └── pages │ │ │ ├── index.module.css │ │ │ └── index.tsx │ ├── static │ │ ├── .nojekyll │ │ ├── img │ │ │ ├── analog-banner.png │ │ │ ├── debug-routes.png │ │ │ ├── favicon.ico │ │ │ └── logos │ │ │ │ ├── analog-logo.svg │ │ │ │ ├── angular-gradient.png │ │ │ │ ├── angular-logo.svg │ │ │ │ ├── code.build-1x1.svg │ │ │ │ ├── github-logo.svg │ │ │ │ ├── github-sponsors-logo.svg │ │ │ │ ├── house-of-angular.png │ │ │ │ ├── mirahi-logo.svg │ │ │ │ ├── nx-logo.dark.svg │ │ │ │ ├── nx-logo.light.svg │ │ │ │ ├── snyder-logo.dark.svg │ │ │ │ ├── snyder-logo.light.svg │ │ │ │ ├── stackblitz-logo.svg │ │ │ │ ├── vite-logo.svg │ │ │ │ └── zerops-logo.svg │ │ └── new │ │ │ └── index.html │ └── tsconfig.json ├── ng-app │ ├── .eslintrc.json │ ├── index.html │ ├── project.json │ ├── src │ │ ├── app │ │ │ ├── another-one.ag │ │ │ ├── app.component.ag │ │ │ ├── app.config.ts │ │ │ ├── export-stuff.ag │ │ │ ├── external │ │ │ │ ├── external-two.css │ │ │ │ ├── external.ag │ │ │ │ ├── external.css │ │ │ │ └── external.html │ │ │ ├── goodbye.ag │ │ │ ├── hello.ag │ │ │ ├── hello.ag.spec.ts │ │ │ ├── hello.ts │ │ │ ├── highlight.ag │ │ │ ├── models.ts │ │ │ ├── my-components.ts │ │ │ ├── my.service.ts │ │ │ └── pages │ │ │ │ ├── (home).page.ag │ │ │ │ ├── about.page.ag │ │ │ │ ├── another.page.ag │ │ │ │ ├── posts.[slug].page.ag │ │ │ │ └── posts.page.ag │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── content │ │ │ └── post.agx │ │ ├── favicon.ico │ │ ├── main.ts │ │ ├── styles.css │ │ ├── test-setup.ts │ │ └── vite-env.d.ts │ ├── tsconfig.app.json │ ├── tsconfig.editor.json │ ├── tsconfig.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── nx-plugin-e2e │ ├── project.json │ ├── tests │ │ └── nx-plugin.spec.ts │ ├── tsconfig.json │ └── vite.config.ts ├── trpc-app-e2e-playwright │ ├── .eslintrc.json │ ├── project.json │ ├── tests │ │ ├── app.spec.ts │ │ └── fixtures │ │ │ ├── notes.po.ts │ │ │ └── notes.ts │ ├── tsconfig.json │ └── vite.config.ts └── trpc-app │ ├── .eslintrc.json │ ├── favicon.ico │ ├── index.html │ ├── postcss.config.cjs │ ├── project.json │ ├── src │ ├── app.config.server.ts │ ├── app.config.ts │ ├── app │ │ ├── app.component.spec.ts │ │ ├── app.component.ts │ │ └── pages │ │ │ └── index.page.ts │ ├── main.server.ts │ ├── main.ts │ ├── note.ts │ ├── public │ │ └── assets │ │ │ ├── .gitkeep │ │ │ └── spartan.svg │ ├── server │ │ ├── routes │ │ │ ├── health.ts │ │ │ └── trpc │ │ │ │ └── [trpc].ts │ │ └── trpc │ │ │ ├── context.ts │ │ │ ├── routers │ │ │ ├── index.ts │ │ │ └── notes.ts │ │ │ └── trpc.ts │ ├── styles.css │ ├── test-setup.ts │ ├── trpc-client.ts │ └── vite-env.d.ts │ ├── tailwind.config.cjs │ ├── tsconfig.app.json │ ├── tsconfig.editor.json │ ├── tsconfig.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── commitlint.config.cjs ├── decorate-angular-cli.js ├── jest.config.ts ├── jest.preset.js ├── libs ├── card │ ├── .eslintrc.json │ ├── README.md │ ├── project.json │ ├── src │ │ ├── index.ts │ │ ├── lib │ │ │ ├── autocomplete │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── autocomplete.component.spec.ts.snap │ │ │ │ ├── autocomplete.component.html │ │ │ │ ├── autocomplete.component.scss │ │ │ │ ├── autocomplete.component.spec.ts │ │ │ │ ├── autocomplete.component.ts │ │ │ │ └── index.ts │ │ │ ├── card │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── card.component.spec.ts.snap │ │ │ │ ├── card.component.css │ │ │ │ ├── card.component.html │ │ │ │ ├── card.component.spec.ts │ │ │ │ └── card.component.ts │ │ │ └── card2 │ │ │ │ ├── __snapshots__ │ │ │ │ └── card.component.spec.ts.snap │ │ │ │ ├── card.component.css │ │ │ │ ├── card.component.html │ │ │ │ ├── card.component.spec.ts │ │ │ │ └── card.component.ts │ │ └── test-setup.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── my-package │ ├── .eslintrc.json │ ├── README.md │ ├── package.json │ ├── project.json │ ├── src │ │ ├── index.ts │ │ ├── lib │ │ │ └── my-package │ │ │ │ ├── my-package.component.css │ │ │ │ ├── my-package.component.html │ │ │ │ ├── my-package.component.spec.ts │ │ │ │ └── my-package.component.ts │ │ └── test-setup.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ ├── tsconfig.lib.prod.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── shared │ └── feature │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── project.json │ │ ├── src │ │ ├── api │ │ │ └── routes │ │ │ │ └── api │ │ │ │ └── ping.ts │ │ ├── content │ │ │ ├── test.agx │ │ │ └── test.md │ │ ├── index.ts │ │ ├── pages │ │ │ ├── about-me.page.ts │ │ │ ├── about-you.page.analog │ │ │ ├── test.page.ts │ │ │ └── test.server.ts │ │ └── test-setup.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tsconfig.spec.json └── top-bar │ ├── .eslintrc.json │ ├── README.md │ ├── project.json │ ├── src │ ├── index.ts │ ├── lib │ │ └── top-bar │ │ │ ├── template.html │ │ │ ├── top-bar.component.spec.ts │ │ │ └── top-bar.component.ts │ └── test-setup.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── nx.json ├── package.json ├── packages ├── .gitkeep ├── astro-angular │ ├── .eslintrc.json │ ├── README.md │ ├── migrations │ │ └── migration.json │ ├── package.json │ ├── project.json │ ├── src │ │ ├── client.ts │ │ ├── index.spec.mts │ │ ├── index.ts │ │ ├── server.ts │ │ ├── test-setup.ts │ │ ├── utils.ts │ │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── content-plugin │ ├── .eslintrc.json │ ├── README.md │ ├── migrations.json │ ├── package.json │ ├── project.json │ ├── src │ │ ├── index.ts │ │ └── migrations │ │ │ ├── update-markdown-renderer-feature │ │ │ ├── compat.ts │ │ │ ├── update-markdown-renderer-feature.spec.ts │ │ │ └── update-markdown-renderer-feature.ts │ │ │ └── update-markdown-version │ │ │ ├── compat.ts │ │ │ ├── update-markdown-version.spec.ts │ │ │ └── update-markdown-version.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── content │ ├── .eslintrc.json │ ├── README.md │ ├── ng-package.json │ ├── og │ │ ├── README.md │ │ ├── ng-package.json │ │ └── src │ │ │ ├── index.ts │ │ │ └── lib │ │ │ ├── og.ts │ │ │ └── options.ts │ ├── package.json │ ├── prism-highlighter │ │ ├── README.md │ │ ├── ng-package.json │ │ └── src │ │ │ ├── index.ts │ │ │ └── lib │ │ │ ├── prism-highlighter.ts │ │ │ └── prism │ │ │ └── angular.js │ ├── project.json │ ├── shiki-highlighter │ │ ├── README.md │ │ ├── ng-package.json │ │ └── src │ │ │ └── index.ts │ ├── src │ │ ├── index.ts │ │ ├── lib │ │ │ ├── LICENSE.scully.md │ │ │ ├── anchor-navigation.directive.spec.ts │ │ │ ├── anchor-navigation.directive.ts │ │ │ ├── content-file.ts │ │ │ ├── content-files-list-token.spec.ts │ │ │ ├── content-files-list-token.ts │ │ │ ├── content-files-token.ts │ │ │ ├── content-renderer.ts │ │ │ ├── content.spec.ts │ │ │ ├── content.ts │ │ │ ├── get-content-files.ts │ │ │ ├── inject-content-files.spec.ts │ │ │ ├── inject-content-files.ts │ │ │ ├── markdown-content-renderer.service.spec.ts │ │ │ ├── markdown-content-renderer.service.ts │ │ │ ├── markdown-route.component.ts │ │ │ ├── markdown.component.ts │ │ │ ├── marked-content-highlighter.ts │ │ │ ├── marked-setup.service.ts │ │ │ ├── parse-raw-content-file.ts │ │ │ ├── provide-content.ts │ │ │ ├── render-task.service.ts │ │ │ └── utils │ │ │ │ └── zone-wait-for.ts │ │ └── test-setup.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ ├── tsconfig.lib.prod.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── create-analog │ ├── .gitignore │ ├── .npmignore │ ├── LICENSE │ ├── README.md │ ├── __tests__ │ │ └── cli.spec.ts │ ├── files │ │ ├── analog-env.d.ts │ │ └── styles.css │ ├── index.js │ ├── package.json │ ├── project.json │ ├── template-angular-v16 │ │ ├── .editorconfig │ │ ├── .vscode │ │ │ ├── extensions.json │ │ │ ├── launch.json │ │ │ └── tasks.json │ │ ├── README.md │ │ ├── _gitignore │ │ ├── angular.json │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── package.json │ │ ├── src │ │ │ ├── app │ │ │ │ ├── app.component.spec.ts │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.config.server.ts │ │ │ │ ├── app.config.ts │ │ │ │ └── pages │ │ │ │ │ └── index.page.ts │ │ │ ├── assets │ │ │ │ ├── .gitkeep │ │ │ │ ├── analog.svg │ │ │ │ └── vite.svg │ │ │ ├── main.server.ts │ │ │ ├── main.ts │ │ │ ├── server │ │ │ │ └── routes │ │ │ │ │ └── v1 │ │ │ │ │ └── hello.ts │ │ │ ├── styles.css │ │ │ ├── test.ts │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ ├── tsconfig.spec.json │ │ └── vite.config.ts │ ├── template-angular-v17 │ │ ├── .editorconfig │ │ ├── .vscode │ │ │ ├── extensions.json │ │ │ ├── launch.json │ │ │ └── tasks.json │ │ ├── README.md │ │ ├── _gitignore │ │ ├── angular.json │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── package.json │ │ ├── src │ │ │ ├── app │ │ │ │ ├── app.component.spec.ts │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.config.server.ts │ │ │ │ ├── app.config.ts │ │ │ │ └── pages │ │ │ │ │ └── index.page.ts │ │ │ ├── assets │ │ │ │ ├── .gitkeep │ │ │ │ ├── analog.svg │ │ │ │ └── vite.svg │ │ │ ├── main.server.ts │ │ │ ├── main.ts │ │ │ ├── server │ │ │ │ └── routes │ │ │ │ │ └── v1 │ │ │ │ │ └── hello.ts │ │ │ ├── styles.css │ │ │ ├── test.ts │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ ├── tsconfig.spec.json │ │ └── vite.config.ts │ ├── template-angular-v18 │ │ ├── .editorconfig │ │ ├── .vscode │ │ │ ├── extensions.json │ │ │ ├── launch.json │ │ │ └── tasks.json │ │ ├── README.md │ │ ├── _gitignore │ │ ├── angular.json │ │ ├── index.html │ │ ├── package.json │ │ ├── public │ │ │ ├── .gitkeep │ │ │ ├── analog.svg │ │ │ ├── favicon.ico │ │ │ └── vite.svg │ │ ├── src │ │ │ ├── app │ │ │ │ ├── app-root.ag │ │ │ │ ├── app-root.spec.ts │ │ │ │ ├── app.component.spec.ts │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.config.server.ts │ │ │ │ ├── app.config.ts │ │ │ │ └── pages │ │ │ │ │ ├── index.page.ag │ │ │ │ │ └── index.page.ts │ │ │ ├── main.server.ts │ │ │ ├── main.ts │ │ │ ├── server │ │ │ │ └── routes │ │ │ │ │ └── v1 │ │ │ │ │ └── hello.ts │ │ │ ├── styles.css │ │ │ ├── test-setup.ts │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ ├── tsconfig.spec.json │ │ └── vite.config.ts │ ├── template-angular-v19 │ │ ├── .editorconfig │ │ ├── .vscode │ │ │ ├── extensions.json │ │ │ ├── launch.json │ │ │ └── tasks.json │ │ ├── README.md │ │ ├── _gitignore │ │ ├── angular.json │ │ ├── index.html │ │ ├── package.json │ │ ├── public │ │ │ ├── .gitkeep │ │ │ ├── analog.svg │ │ │ ├── favicon.ico │ │ │ └── vite.svg │ │ ├── src │ │ │ ├── app │ │ │ │ ├── app-root.ag │ │ │ │ ├── app-root.spec.ts │ │ │ │ ├── app.component.spec.ts │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.config.server.ts │ │ │ │ ├── app.config.ts │ │ │ │ └── pages │ │ │ │ │ ├── index.page.ag │ │ │ │ │ └── index.page.ts │ │ │ ├── main.server.ts │ │ │ ├── main.ts │ │ │ ├── server │ │ │ │ └── routes │ │ │ │ │ └── api │ │ │ │ │ └── v1 │ │ │ │ │ └── hello.ts │ │ │ ├── styles.css │ │ │ ├── test-setup.ts │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ ├── tsconfig.spec.json │ │ └── vite.config.ts │ ├── template-blog │ │ ├── .editorconfig │ │ ├── .vscode │ │ │ ├── extensions.json │ │ │ ├── launch.json │ │ │ └── tasks.json │ │ ├── README.md │ │ ├── _gitignore │ │ ├── angular.json │ │ ├── index.html │ │ ├── package.json │ │ ├── public │ │ │ ├── .gitkeep │ │ │ ├── analog.svg │ │ │ ├── favicon.ico │ │ │ └── vite.svg │ │ ├── src │ │ │ ├── app │ │ │ │ ├── app-root.ag │ │ │ │ ├── app-root.spec.ts │ │ │ │ ├── app.config.server.ts │ │ │ │ ├── app.config.ts │ │ │ │ ├── app.spec.ts │ │ │ │ ├── app.ts │ │ │ │ ├── pages │ │ │ │ │ ├── blog │ │ │ │ │ │ ├── [slug].page.ag │ │ │ │ │ │ ├── [slug].page.ts │ │ │ │ │ │ ├── index.page.ag │ │ │ │ │ │ └── index.page.ts │ │ │ │ │ └── index.page.ts │ │ │ │ └── post-attributes.ts │ │ │ ├── content │ │ │ │ └── example-post.md │ │ │ ├── main.server.ts │ │ │ ├── main.ts │ │ │ ├── server │ │ │ │ └── routes │ │ │ │ │ └── api │ │ │ │ │ └── v1 │ │ │ │ │ └── hello.ts │ │ │ ├── styles.css │ │ │ ├── test-setup.ts │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ ├── tsconfig.spec.json │ │ └── vite.config.ts │ ├── template-latest │ │ ├── .editorconfig │ │ ├── .vscode │ │ │ ├── extensions.json │ │ │ ├── launch.json │ │ │ └── tasks.json │ │ ├── README.md │ │ ├── _gitignore │ │ ├── angular.json │ │ ├── index.html │ │ ├── package.json │ │ ├── public │ │ │ ├── .gitkeep │ │ │ ├── analog.svg │ │ │ ├── favicon.ico │ │ │ └── vite.svg │ │ ├── src │ │ │ ├── app │ │ │ │ ├── app-root.ag │ │ │ │ ├── app-root.spec.ts │ │ │ │ ├── app.config.server.ts │ │ │ │ ├── app.config.ts │ │ │ │ ├── app.spec.ts │ │ │ │ ├── app.ts │ │ │ │ └── pages │ │ │ │ │ ├── analog-welcome.ts │ │ │ │ │ ├── index.page.ag │ │ │ │ │ └── index.page.ts │ │ │ ├── main.server.ts │ │ │ ├── main.ts │ │ │ ├── server │ │ │ │ └── routes │ │ │ │ │ └── api │ │ │ │ │ └── v1 │ │ │ │ │ └── hello.ts │ │ │ ├── styles.css │ │ │ ├── test-setup.ts │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ ├── tsconfig.spec.json │ │ └── vite.config.ts │ ├── template-minimal │ │ ├── .editorconfig │ │ ├── .vscode │ │ │ ├── extensions.json │ │ │ ├── launch.json │ │ │ └── tasks.json │ │ ├── README.md │ │ ├── _gitignore │ │ ├── angular.json │ │ ├── index.html │ │ ├── package.json │ │ ├── public │ │ │ ├── .gitkeep │ │ │ └── favicon.ico │ │ ├── src │ │ │ ├── app │ │ │ │ ├── app-root.ag │ │ │ │ ├── app.config.server.ts │ │ │ │ ├── app.config.ts │ │ │ │ ├── app.ts │ │ │ │ └── pages │ │ │ │ │ ├── index.page.ag │ │ │ │ │ └── index.page.ts │ │ │ ├── main.server.ts │ │ │ ├── main.ts │ │ │ ├── styles.css │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── nx-plugin │ ├── .babelrc │ ├── .eslintrc.json │ ├── README.md │ ├── executors.json │ ├── generators.json │ ├── package.json │ ├── project.json │ ├── src │ │ ├── executors │ │ │ ├── vite-dev-server │ │ │ │ ├── compat.ts │ │ │ │ ├── schema.d.ts │ │ │ │ ├── schema.json │ │ │ │ └── vite-dev-server.impl.ts │ │ │ ├── vite │ │ │ │ ├── compat.ts │ │ │ │ ├── schema.d.ts │ │ │ │ ├── schema.json │ │ │ │ └── vite.impl.ts │ │ │ └── vitest │ │ │ │ ├── compat.ts │ │ │ │ ├── schema.d.ts │ │ │ │ ├── schema.json │ │ │ │ └── vitest.impl.ts │ │ ├── generators │ │ │ ├── app │ │ │ │ ├── compat.ts │ │ │ │ ├── files │ │ │ │ │ ├── index-page │ │ │ │ │ │ └── src │ │ │ │ │ │ │ └── app │ │ │ │ │ │ │ └── pages │ │ │ │ │ │ │ └── (home).page.ts__template__ │ │ │ │ │ ├── root │ │ │ │ │ │ └── tsconfig.base.json │ │ │ │ │ ├── tailwind │ │ │ │ │ │ ├── v2 │ │ │ │ │ │ │ ├── postcss.config.cjs__template__ │ │ │ │ │ │ │ └── tailwind.config.cjs__template__ │ │ │ │ │ │ └── v3 │ │ │ │ │ │ │ ├── postcss.config.cjs__template__ │ │ │ │ │ │ │ └── tailwind.config.ts__template__ │ │ │ │ │ ├── template-angular-v15 │ │ │ │ │ │ ├── .eslintrc.json__template__ │ │ │ │ │ │ ├── index.html__template__ │ │ │ │ │ │ ├── src │ │ │ │ │ │ │ ├── app │ │ │ │ │ │ │ │ ├── app.component.spec.ts__template__ │ │ │ │ │ │ │ │ └── app.component.ts__template__ │ │ │ │ │ │ │ ├── favicon.ico__template__ │ │ │ │ │ │ │ ├── main.providers.ts__template__ │ │ │ │ │ │ │ ├── main.server.ts__template__ │ │ │ │ │ │ │ ├── main.ts__template__ │ │ │ │ │ │ │ ├── public │ │ │ │ │ │ │ │ └── assets │ │ │ │ │ │ │ │ │ ├── .gitkeep__template__ │ │ │ │ │ │ │ │ │ ├── analog.svg__template__ │ │ │ │ │ │ │ │ │ └── vite.svg__template__ │ │ │ │ │ │ │ ├── server │ │ │ │ │ │ │ │ └── routes │ │ │ │ │ │ │ │ │ └── v1 │ │ │ │ │ │ │ │ │ └── hello.ts__template__ │ │ │ │ │ │ │ ├── styles.css__template__ │ │ │ │ │ │ │ ├── test-setup.ts__template__ │ │ │ │ │ │ │ └── vite-env.d.ts__template__ │ │ │ │ │ │ ├── tsconfig.app.json__template__ │ │ │ │ │ │ ├── tsconfig.editor.json__template__ │ │ │ │ │ │ ├── tsconfig.json__template__ │ │ │ │ │ │ ├── tsconfig.spec.json__template__ │ │ │ │ │ │ └── vite.config.ts__template__ │ │ │ │ │ ├── template-angular-v16 │ │ │ │ │ │ ├── .eslintrc.json__template__ │ │ │ │ │ │ ├── index.html__template__ │ │ │ │ │ │ ├── src │ │ │ │ │ │ │ ├── app │ │ │ │ │ │ │ │ ├── app.component.spec.ts__template__ │ │ │ │ │ │ │ │ ├── app.component.ts__template__ │ │ │ │ │ │ │ │ ├── app.config.server.ts__template__ │ │ │ │ │ │ │ │ └── app.config.ts__template__ │ │ │ │ │ │ │ ├── favicon.ico__template__ │ │ │ │ │ │ │ ├── main.server.ts__template__ │ │ │ │ │ │ │ ├── main.ts__template__ │ │ │ │ │ │ │ ├── public │ │ │ │ │ │ │ │ └── assets │ │ │ │ │ │ │ │ │ ├── .gitkeep__template__ │ │ │ │ │ │ │ │ │ └── analog.svg__template__ │ │ │ │ │ │ │ ├── server │ │ │ │ │ │ │ │ └── routes │ │ │ │ │ │ │ │ │ └── v1 │ │ │ │ │ │ │ │ │ └── hello.ts__template__ │ │ │ │ │ │ │ ├── styles.css__template__ │ │ │ │ │ │ │ ├── test-setup.ts__template__ │ │ │ │ │ │ │ └── vite-env.d.ts__template__ │ │ │ │ │ │ ├── tsconfig.app.json__template__ │ │ │ │ │ │ ├── tsconfig.editor.json__template__ │ │ │ │ │ │ ├── tsconfig.json__template__ │ │ │ │ │ │ ├── tsconfig.spec.json__template__ │ │ │ │ │ │ └── vite.config.ts__template__ │ │ │ │ │ ├── template-angular-v17 │ │ │ │ │ │ ├── .eslintrc.json__template__ │ │ │ │ │ │ ├── index.html__template__ │ │ │ │ │ │ ├── package.json__template__ │ │ │ │ │ │ ├── src │ │ │ │ │ │ │ ├── app │ │ │ │ │ │ │ │ ├── app.component.spec.ts__template__ │ │ │ │ │ │ │ │ ├── app.component.ts__template__ │ │ │ │ │ │ │ │ ├── app.config.server.ts__template__ │ │ │ │ │ │ │ │ └── app.config.ts__template__ │ │ │ │ │ │ │ ├── favicon.ico__template__ │ │ │ │ │ │ │ ├── main.server.ts__template__ │ │ │ │ │ │ │ ├── main.ts__template__ │ │ │ │ │ │ │ ├── public │ │ │ │ │ │ │ │ └── assets │ │ │ │ │ │ │ │ │ ├── .gitkeep__template__ │ │ │ │ │ │ │ │ │ └── analog.svg__template__ │ │ │ │ │ │ │ ├── server │ │ │ │ │ │ │ │ └── routes │ │ │ │ │ │ │ │ │ └── v1 │ │ │ │ │ │ │ │ │ └── hello.ts__template__ │ │ │ │ │ │ │ ├── styles.css__template__ │ │ │ │ │ │ │ ├── test-setup.ts__template__ │ │ │ │ │ │ │ └── vite-env.d.ts__template__ │ │ │ │ │ │ ├── tsconfig.app.json__template__ │ │ │ │ │ │ ├── tsconfig.editor.json__template__ │ │ │ │ │ │ ├── tsconfig.json__template__ │ │ │ │ │ │ ├── tsconfig.spec.json__template__ │ │ │ │ │ │ └── vite.config.ts__template__ │ │ │ │ │ ├── template-angular-v18 │ │ │ │ │ │ ├── .eslintrc.json__template__ │ │ │ │ │ │ ├── index.html__template__ │ │ │ │ │ │ ├── package.json__template__ │ │ │ │ │ │ ├── public │ │ │ │ │ │ │ ├── .gitkeep__template__ │ │ │ │ │ │ │ ├── analog.svg__template__ │ │ │ │ │ │ │ └── favicon.ico__template__ │ │ │ │ │ │ ├── src │ │ │ │ │ │ │ ├── app │ │ │ │ │ │ │ │ ├── app.component.spec.ts__template__ │ │ │ │ │ │ │ │ ├── app.component.ts__template__ │ │ │ │ │ │ │ │ ├── app.config.server.ts__template__ │ │ │ │ │ │ │ │ └── app.config.ts__template__ │ │ │ │ │ │ │ ├── main.server.ts__template__ │ │ │ │ │ │ │ ├── main.ts__template__ │ │ │ │ │ │ │ ├── server │ │ │ │ │ │ │ │ └── routes │ │ │ │ │ │ │ │ │ └── api │ │ │ │ │ │ │ │ │ └── v1 │ │ │ │ │ │ │ │ │ └── hello.ts__template__ │ │ │ │ │ │ │ ├── styles.css__template__ │ │ │ │ │ │ │ ├── test-setup.ts__template__ │ │ │ │ │ │ │ └── vite-env.d.ts__template__ │ │ │ │ │ │ ├── tsconfig.app.json__template__ │ │ │ │ │ │ ├── tsconfig.editor.json__template__ │ │ │ │ │ │ ├── tsconfig.json__template__ │ │ │ │ │ │ ├── tsconfig.spec.json__template__ │ │ │ │ │ │ └── vite.config.ts__template__ │ │ │ │ │ ├── template-angular-v19 │ │ │ │ │ │ ├── index.html__template__ │ │ │ │ │ │ ├── package.json__template__ │ │ │ │ │ │ ├── public │ │ │ │ │ │ │ ├── .gitkeep__template__ │ │ │ │ │ │ │ ├── analog.svg__template__ │ │ │ │ │ │ │ └── favicon.ico__template__ │ │ │ │ │ │ ├── src │ │ │ │ │ │ │ ├── app │ │ │ │ │ │ │ │ ├── app.component.spec.ts__template__ │ │ │ │ │ │ │ │ ├── app.component.ts__template__ │ │ │ │ │ │ │ │ ├── app.config.server.ts__template__ │ │ │ │ │ │ │ │ └── app.config.ts__template__ │ │ │ │ │ │ │ ├── main.server.ts__template__ │ │ │ │ │ │ │ ├── main.ts__template__ │ │ │ │ │ │ │ ├── server │ │ │ │ │ │ │ │ └── routes │ │ │ │ │ │ │ │ │ └── api │ │ │ │ │ │ │ │ │ └── v1 │ │ │ │ │ │ │ │ │ └── hello.ts__template__ │ │ │ │ │ │ │ ├── styles.css__template__ │ │ │ │ │ │ │ ├── test-setup.ts__template__ │ │ │ │ │ │ │ └── vite-env.d.ts__template__ │ │ │ │ │ │ ├── tsconfig.app.json__template__ │ │ │ │ │ │ ├── tsconfig.editor.json__template__ │ │ │ │ │ │ ├── tsconfig.json__template__ │ │ │ │ │ │ ├── tsconfig.spec.json__template__ │ │ │ │ │ │ └── vite.config.ts__template__ │ │ │ │ │ ├── template-angular │ │ │ │ │ │ ├── package.json__template__ │ │ │ │ │ │ ├── public │ │ │ │ │ │ │ ├── .gitkeep__template__ │ │ │ │ │ │ │ ├── analog.svg__template__ │ │ │ │ │ │ │ └── favicon.ico__template__ │ │ │ │ │ │ ├── src │ │ │ │ │ │ │ ├── app │ │ │ │ │ │ │ │ ├── app.component.spec.ts__template__ │ │ │ │ │ │ │ │ ├── app.component.ts__template__ │ │ │ │ │ │ │ │ ├── app.config.server.ts__template__ │ │ │ │ │ │ │ │ └── app.config.ts__template__ │ │ │ │ │ │ │ ├── main.server.ts__template__ │ │ │ │ │ │ │ ├── main.ts__template__ │ │ │ │ │ │ │ ├── server │ │ │ │ │ │ │ │ └── routes │ │ │ │ │ │ │ │ │ └── api │ │ │ │ │ │ │ │ │ └── v1 │ │ │ │ │ │ │ │ │ └── hello.ts__template__ │ │ │ │ │ │ │ ├── styles.css__template__ │ │ │ │ │ │ │ ├── test-setup.ts__template__ │ │ │ │ │ │ │ └── vite-env.d.ts__template__ │ │ │ │ │ │ ├── tsconfig.app.json__template__ │ │ │ │ │ │ ├── tsconfig.editor.json__template__ │ │ │ │ │ │ ├── tsconfig.json__template__ │ │ │ │ │ │ ├── tsconfig.spec.json__template__ │ │ │ │ │ │ └── vite.config.ts__template__ │ │ │ │ │ ├── trpc │ │ │ │ │ │ └── src │ │ │ │ │ │ │ ├── note.ts__template__ │ │ │ │ │ │ │ ├── server │ │ │ │ │ │ │ ├── routes │ │ │ │ │ │ │ │ └── api │ │ │ │ │ │ │ │ │ └── trpc │ │ │ │ │ │ │ │ │ └── [trpc].ts__template__ │ │ │ │ │ │ │ └── trpc │ │ │ │ │ │ │ │ ├── context.ts__template__ │ │ │ │ │ │ │ │ ├── routers │ │ │ │ │ │ │ │ ├── index.ts__template__ │ │ │ │ │ │ │ │ └── notes.ts__template__ │ │ │ │ │ │ │ │ └── trpc.ts__template__ │ │ │ │ │ │ │ └── trpc-client.ts__template__ │ │ │ │ │ └── welcome-components │ │ │ │ │ │ ├── css-trpc │ │ │ │ │ │ └── src │ │ │ │ │ │ │ └── app │ │ │ │ │ │ │ └── pages │ │ │ │ │ │ │ └── analog-welcome.component.ts__template__ │ │ │ │ │ │ ├── css │ │ │ │ │ │ └── src │ │ │ │ │ │ │ └── app │ │ │ │ │ │ │ └── pages │ │ │ │ │ │ │ └── analog-welcome.component.ts__template__ │ │ │ │ │ │ ├── tailwind-trpc │ │ │ │ │ │ └── src │ │ │ │ │ │ │ └── app │ │ │ │ │ │ │ └── pages │ │ │ │ │ │ │ └── analog-welcome.component.ts__template__ │ │ │ │ │ │ └── tailwind │ │ │ │ │ │ └── src │ │ │ │ │ │ └── app │ │ │ │ │ │ └── pages │ │ │ │ │ │ └── analog-welcome.component.ts__template__ │ │ │ │ ├── generator.spec.ts │ │ │ │ ├── generator.ts │ │ │ │ ├── lib │ │ │ │ │ ├── add-analog-dependencies.ts │ │ │ │ │ ├── add-analog-project-config.ts │ │ │ │ │ ├── add-angular-app.ts │ │ │ │ │ ├── add-eslint.ts │ │ │ │ │ ├── add-files.ts │ │ │ │ │ ├── add-home-page.ts │ │ │ │ │ ├── add-tailwind-config.ts │ │ │ │ │ ├── add-tailwind-helpers.ts │ │ │ │ │ ├── add-trpc.ts │ │ │ │ │ ├── add-vite-plugin.ts │ │ │ │ │ ├── cleanup-files.ts │ │ │ │ │ └── initialize-analog-workspace.ts │ │ │ │ ├── schema.d.ts │ │ │ │ ├── schema.json │ │ │ │ ├── versions.ts │ │ │ │ └── versions │ │ │ │ │ ├── dependencies.ts │ │ │ │ │ ├── dev-dependencies.ts │ │ │ │ │ ├── minimum-supported-versions.ts │ │ │ │ │ ├── nx-dependencies.ts │ │ │ │ │ ├── nx_15_X │ │ │ │ │ └── versions.ts │ │ │ │ │ ├── nx_16_X │ │ │ │ │ └── versions.ts │ │ │ │ │ ├── nx_17_X │ │ │ │ │ └── versions.ts │ │ │ │ │ ├── nx_18_X │ │ │ │ │ └── versions.ts │ │ │ │ │ ├── tailwind-dependencies.ts │ │ │ │ │ └── trpc-dependencies.ts │ │ │ ├── init │ │ │ │ ├── compat.ts │ │ │ │ ├── files │ │ │ │ │ ├── src │ │ │ │ │ │ ├── app │ │ │ │ │ │ │ └── app.config.server.ts__template__ │ │ │ │ │ │ ├── main.server.ts__template__ │ │ │ │ │ │ └── server │ │ │ │ │ │ │ └── routes │ │ │ │ │ │ │ └── api │ │ │ │ │ │ │ └── v1 │ │ │ │ │ │ │ └── hello.ts__template__ │ │ │ │ │ └── vite.config.ts__template__ │ │ │ │ ├── generator.ts │ │ │ │ ├── lib │ │ │ │ │ ├── add-analog-dependencies.ts │ │ │ │ │ ├── update-app-tsconfig.ts │ │ │ │ │ ├── update-build-target.ts │ │ │ │ │ ├── update-git-ignore.ts │ │ │ │ │ ├── update-index-html.ts │ │ │ │ │ ├── update-main.ts │ │ │ │ │ ├── update-package-json.ts │ │ │ │ │ ├── update-serve-target.ts │ │ │ │ │ ├── update-test-target.ts │ │ │ │ │ └── update-test-tsconfig.ts │ │ │ │ ├── schema.d.ts │ │ │ │ ├── schema.json │ │ │ │ └── test-files │ │ │ │ │ └── src │ │ │ │ │ └── test-setup.ts__template__ │ │ │ ├── page │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── generator.spec.ts.snap │ │ │ │ ├── files │ │ │ │ │ └── __fileName__.page.ts__template__ │ │ │ │ ├── generator.spec.ts │ │ │ │ ├── generator.ts │ │ │ │ ├── schema.d.ts │ │ │ │ └── schema.json │ │ │ ├── preset │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── generator.spec.ts.snap │ │ │ │ ├── generator.spec.ts │ │ │ │ ├── generator.ts │ │ │ │ ├── schema.d.ts │ │ │ │ └── schema.json │ │ │ └── setup-vitest │ │ │ │ ├── compat.ts │ │ │ │ ├── files │ │ │ │ ├── src │ │ │ │ │ └── test-setup.ts__template__ │ │ │ │ └── vite.config.mts__template__ │ │ │ │ ├── generator.spec.ts │ │ │ │ ├── generator.ts │ │ │ │ ├── lib │ │ │ │ ├── add-analog-dependencies.ts │ │ │ │ ├── update-test-target.ts │ │ │ │ └── update-tsconfig.ts │ │ │ │ ├── schema.d.ts │ │ │ │ └── schema.json │ │ ├── index.ts │ │ └── utils │ │ │ ├── version-utils.ts │ │ │ └── versions │ │ │ ├── dependencies.ts │ │ │ ├── dev-dependencies.ts │ │ │ ├── ng_15_X │ │ │ └── versions.ts │ │ │ ├── ng_16_X │ │ │ └── versions.ts │ │ │ ├── ng_17_X │ │ │ └── versions.ts │ │ │ ├── ng_18_X │ │ │ └── versions.ts │ │ │ └── ng_19_X │ │ │ └── versions.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── platform │ ├── .eslintrc.json │ ├── README.md │ ├── migrations │ │ └── migration.json │ ├── package.json │ ├── project.json │ ├── src │ │ ├── index.ts │ │ ├── lib │ │ │ ├── clear-client-page-endpoint.ts │ │ │ ├── content-plugin.spec.ts │ │ │ ├── content-plugin.ts │ │ │ ├── content │ │ │ │ ├── marked │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── marked-content-highlighter.ts │ │ │ │ │ └── marked-setup.service.ts │ │ │ │ ├── prism │ │ │ │ │ ├── angular.js │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options.ts │ │ │ │ │ └── prism-highlighter.ts │ │ │ │ └── shiki │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── options.ts │ │ │ │ │ └── shiki-highlighter.ts │ │ │ ├── deps-plugin.ts │ │ │ ├── options.ts │ │ │ ├── platform-plugin.spec.ts │ │ │ ├── platform-plugin.ts │ │ │ ├── router-plugin.ts │ │ │ └── ssr │ │ │ │ ├── inject-html-plugin.ts │ │ │ │ ├── ssr-build-plugin.ts │ │ │ │ └── ssr-xhr-plugin.ts │ │ ├── server-mode-plugin.ts │ │ └── test-setup.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ ├── tsconfig.lib.prod.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── router │ ├── .eslintrc.json │ ├── LICENSE │ ├── README.md │ ├── migrations │ │ └── migration.json │ ├── ng-package.json │ ├── package.json │ ├── project.json │ ├── server │ │ ├── actions │ │ │ ├── ng-package.json │ │ │ └── src │ │ │ │ ├── actions.ts │ │ │ │ └── index.ts │ │ ├── ng-package.json │ │ └── src │ │ │ ├── index.ts │ │ │ ├── provide-server-context.ts │ │ │ ├── render.ts │ │ │ ├── server-component-render.ts │ │ │ └── tokens.ts │ ├── src │ │ ├── index.ts │ │ ├── lib │ │ │ ├── cache-key.ts │ │ │ ├── constants.ts │ │ │ ├── cookie-interceptor.ts │ │ │ ├── debug │ │ │ │ ├── debug.page.ts │ │ │ │ ├── index.ts │ │ │ │ └── routes.ts │ │ │ ├── define-route.ts │ │ │ ├── endpoints.ts │ │ │ ├── form-action.directive.ts │ │ │ ├── get-load-resolver.ts │ │ │ ├── inject-load.ts │ │ │ ├── inject-route-endpoint-url.ts │ │ │ ├── markdown-helpers.ts │ │ │ ├── meta-tags.spec.ts │ │ │ ├── meta-tags.ts │ │ │ ├── models.ts │ │ │ ├── provide-file-router.ts │ │ │ ├── request-context.ts │ │ │ ├── route-config.ts │ │ │ ├── route-types.ts │ │ │ ├── routes.spec.ts │ │ │ ├── routes.ts │ │ │ └── server.component.ts │ │ └── test-setup.ts │ ├── tokens │ │ ├── ng-package.json │ │ └── src │ │ │ └── index.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ ├── tsconfig.lib.prod.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── storybook-angular │ ├── .eslintrc.json │ ├── README.md │ ├── package.json │ ├── preset │ │ ├── preset.d.ts │ │ ├── preset.js.map │ │ └── preset.mjs │ ├── project.json │ ├── src │ │ ├── index.ts │ │ ├── lib │ │ │ ├── build-storybook │ │ │ │ ├── build-storybook.ts │ │ │ │ └── schema.json │ │ │ ├── builders.json │ │ │ ├── start-storybook │ │ │ │ ├── schema.json │ │ │ │ └── start-storybook.ts │ │ │ └── utils │ │ │ │ └── standalone-options.ts │ │ ├── test-setup.ts │ │ └── types.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── trpc │ ├── .eslintrc.json │ ├── README.md │ ├── migrations │ │ └── migration.json │ ├── ng-package.json │ ├── package.json │ ├── project.json │ ├── server │ │ ├── ng-package.json │ │ └── src │ │ │ ├── index.ts │ │ │ └── lib │ │ │ └── server.ts │ ├── src │ │ ├── index.ts │ │ ├── lib │ │ │ ├── client │ │ │ │ ├── cache-state.ts │ │ │ │ ├── client.ts │ │ │ │ ├── links │ │ │ │ │ └── transfer-state-link.ts │ │ │ │ ├── shared-internal.ts │ │ │ │ └── trpc-rxjs-proxy.ts │ │ │ └── utils │ │ │ │ └── wait-for.ts │ │ └── test-setup.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ ├── tsconfig.lib.prod.json │ └── vite.config.ts ├── vite-plugin-angular │ ├── .eslintrc.json │ ├── README.md │ ├── esbuild.ts │ ├── jest.config.ts │ ├── migrations │ │ └── migration.json │ ├── package.json │ ├── project.json │ ├── setup-vitest.ts │ ├── src │ │ ├── index.ts │ │ ├── lib │ │ │ ├── __snapshots__ │ │ │ │ └── angular-fixture-snapshot.spec.ts.snap │ │ │ ├── angular-build-optimizer-plugin.ts │ │ │ ├── angular-fixture-snapshot.spec.ts │ │ │ ├── angular-jit-plugin.ts │ │ │ ├── angular-pending-tasks.plugin.ts │ │ │ ├── angular-storybook-plugin.ts │ │ │ ├── angular-vite-plugin.spec.ts │ │ │ ├── angular-vite-plugin.ts │ │ │ ├── angular-vitest-plugin.spec.ts │ │ │ ├── angular-vitest-plugin.ts │ │ │ ├── authoring │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── analog.spec.ts.snap │ │ │ │ ├── analog.spec.ts │ │ │ │ ├── analog.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── frontmatter.ts │ │ │ │ ├── markdown-transform.ts │ │ │ │ └── marked-setup.service.ts │ │ │ ├── compiler-plugin.ts │ │ │ ├── component-resolvers.spec.ts │ │ │ ├── component-resolvers.ts │ │ │ ├── host.ts │ │ │ ├── live-reload-plugin.ts │ │ │ ├── models.ts │ │ │ ├── router-plugin.ts │ │ │ └── utils │ │ │ │ ├── compiler-plugin-options.ts │ │ │ │ ├── devkit.ts │ │ │ │ ├── hmr-candidates.ts │ │ │ │ └── source-file-cache.ts │ │ └── test-setup.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ ├── tsconfig.spec.json │ └── vite.config.ts ├── vite-plugin-nitro │ ├── .eslintrc.json │ ├── README.md │ ├── migrations │ │ └── migration.json │ ├── package.json │ ├── project.json │ ├── src │ │ ├── index.ts │ │ └── lib │ │ │ ├── build-server.ts │ │ │ ├── build-sitemap.spec.ts │ │ │ ├── build-sitemap.ts │ │ │ ├── build-ssr.ts │ │ │ ├── hooks │ │ │ ├── post-rendering-hook.ts │ │ │ └── post-rendering-hooks.spec.ts │ │ │ ├── options.ts │ │ │ ├── plugins │ │ │ ├── dev-server-plugin.ts │ │ │ └── page-endpoints.ts │ │ │ ├── runtime │ │ │ ├── renderer-client.mjs │ │ │ ├── renderer-client.ts │ │ │ └── renderer.ts │ │ │ ├── utils │ │ │ ├── get-content-files.ts │ │ │ ├── get-page-handlers.ts │ │ │ ├── load-esm.ts │ │ │ └── register-dev-middleware.ts │ │ │ ├── vite-nitro-plugin.spec.data.ts │ │ │ ├── vite-plugin-nitro.spec.ts │ │ │ └── vite-plugin-nitro.ts │ ├── test-data │ │ └── content │ │ │ ├── 01-first.md │ │ │ ├── 02-second.md │ │ │ └── 03-third.md │ ├── tsconfig.json │ ├── tsconfig.lib.json │ ├── tsconfig.spec.json │ └── vite.config.ts └── vitest-angular │ ├── .eslintrc.json │ ├── README.md │ ├── builders.json │ ├── package.json │ ├── project.json │ ├── setup-snapshots.ts │ ├── setup-zone.ts │ ├── src │ ├── index.ts │ └── lib │ │ └── builders │ │ ├── build │ │ ├── devkit.ts │ │ ├── plugins │ │ │ ├── angular-memory-plugin.ts │ │ │ └── esbuild-downlevel-plugin.ts │ │ ├── schema.d.ts │ │ ├── schema.json │ │ ├── utils.ts │ │ └── vitest.impl.ts │ │ └── test │ │ ├── LICENSE.nx.md │ │ ├── schema.d.ts │ │ ├── schema.json │ │ └── vitest.impl.ts │ ├── tsconfig.json │ └── tsconfig.lib.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── release.config.cjs ├── server.mjs ├── tools ├── publish.sh ├── scripts │ └── publish.mjs └── tsconfig.tools.json ├── tsconfig.base.json ├── vitest.workspace.ts └── zerops.yaml /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.githooks/commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | pnpm exec commitlint --edit $1 4 | -------------------------------------------------------------------------------- /.githooks/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | pnpm exec lint-staged 4 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [brandonroberts, goetzrobin] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | custom: https://analogjs.org/docs/sponsoring # Replace with a single custom sponsorship URL 5 | -------------------------------------------------------------------------------- /.lintstagedrc: -------------------------------------------------------------------------------- 1 | { 2 | "*.{js,ts,css,scss,html,json,md}": "prettier --write" 3 | } 4 | -------------------------------------------------------------------------------- /.node-version: -------------------------------------------------------------------------------- 1 | 22.14.0 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | node-options=--max-old-space-size=16384 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Add files here to ignore them from prettier formatting 2 | 3 | /dist 4 | /coverage 5 | .prettierignore 6 | .docusaurus/ 7 | pnpm-lock.yaml 8 | /.nx/cache 9 | .angular 10 | *.analog 11 | /.nx/workspace-data 12 | /packages/create-analog/template-* 13 | .vite-inspect 14 | .all-contributorsrc 15 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all", 4 | "overrides": [ 5 | { 6 | "files": "*.md", 7 | "options": { 8 | "printWidth": 80 9 | } 10 | }, 11 | { 12 | "files": "*.analog", 13 | "options": { 14 | "parser": "angular" 15 | } 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "angular.ng-template", 4 | "nrwl.angular-console", 5 | "esbenp.prettier-vscode", 6 | "firsttris.vscode-jest-runner", 7 | "dbaeumer.vscode-eslint", 8 | "ms-playwright.playwright" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "eslint.validate": ["json"] 3 | } 4 | -------------------------------------------------------------------------------- /apps/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/.gitkeep -------------------------------------------------------------------------------- /apps/analog-app-e2e-cypress/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["plugin:cypress/recommended", "../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["src/plugins/index.js"], 11 | "rules": { 12 | "@typescript-eslint/no-var-requires": "off", 13 | "no-undef": "off" 14 | } 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /apps/analog-app-e2e-cypress/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "analog-app-e2e-cypress", 3 | "private": true, 4 | "type": "commonjs" 5 | } 6 | -------------------------------------------------------------------------------- /apps/analog-app-e2e-cypress/src/fixtures/.gitkeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /apps/analog-app-e2e-cypress/src/support/app.po.ts: -------------------------------------------------------------------------------- 1 | export const getTitle = () => cy.contains('h1', /my store/i); 2 | 3 | export const get404Title = () => cy.contains('h2', /page not found/i); 4 | 5 | export const getNested404Title = () => 6 | cy.contains('h2', /shipping page not found/i); 7 | -------------------------------------------------------------------------------- /apps/analog-app-e2e-cypress/src/support/form.ts: -------------------------------------------------------------------------------- 1 | export const getControlByLabel = (label: string | RegExp) => { 2 | return cy 3 | .contains('label', label) 4 | .invoke('attr', 'for') 5 | .then((id) => cy.get(`#${id}`)); 6 | }; 7 | -------------------------------------------------------------------------------- /apps/analog-app-e2e-cypress/src/support/newsletter.po.ts: -------------------------------------------------------------------------------- 1 | export const typeEmail = (email: string) => 2 | cy.get('input[name="email"]').type(email); 3 | 4 | export const submit = () => cy.contains('button', /submit/i).click(); 5 | 6 | export const getSubmitMessage = () => cy.get('#signup-message'); 7 | -------------------------------------------------------------------------------- /apps/analog-app-e2e-cypress/src/support/phones.ts: -------------------------------------------------------------------------------- 1 | export const phones = { 2 | mini: { 3 | name: /phone mini/i, 4 | price: '$699.00', 5 | }, 6 | standard: { 7 | name: /phone standard/i, 8 | price: '$299.00', 9 | }, 10 | xl: { 11 | name: /phone xl/i, 12 | price: '$799.00', 13 | }, 14 | } as const; 15 | -------------------------------------------------------------------------------- /apps/analog-app-e2e-cypress/src/support/product-details.po.ts: -------------------------------------------------------------------------------- 1 | import * as productList from './product-list.po'; 2 | 3 | const isActiveScreen = () => 4 | cy 5 | .contains('h2', /product details/i) 6 | .closest('h2') 7 | .should('be.visible'); 8 | 9 | export const getBuyButton = () => cy.contains('button', /buy/i); 10 | export const getPrice = () => cy.get('h4'); 11 | export const navigateToByName = (name: string | RegExp) => { 12 | productList.getHeadingByName(name).find('a').click(); 13 | isActiveScreen(); 14 | }; 15 | -------------------------------------------------------------------------------- /apps/analog-app-e2e-cypress/src/support/product.ts: -------------------------------------------------------------------------------- 1 | export interface Product { 2 | readonly name: RegExp; 3 | readonly price: string; 4 | } 5 | -------------------------------------------------------------------------------- /apps/analog-app-e2e-playwright/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": [ 4 | "!**/*", 5 | "**/vite.config.*.timestamp*", 6 | "**/vitest.config.*.timestamp*" 7 | ], 8 | "overrides": [ 9 | { 10 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["src/plugins/index.js"], 15 | "rules": { 16 | "@typescript-eslint/no-var-requires": "off", 17 | "no-undef": "off" 18 | } 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /apps/analog-app-e2e-playwright/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "analog-app-e2e-playwright", 3 | "private": true, 4 | "type": "commonjs" 5 | } 6 | -------------------------------------------------------------------------------- /apps/analog-app-e2e-playwright/tests/fixtures/phones.ts: -------------------------------------------------------------------------------- 1 | interface Phone { 2 | name: string; 3 | price: string; 4 | } 5 | 6 | export const phones: Record<'mini' | 'standard' | 'xl', Phone> = { 7 | mini: { 8 | name: 'phone mini', 9 | price: '$699.00', 10 | }, 11 | standard: { 12 | name: 'phone standard', 13 | price: '$299.00', 14 | }, 15 | xl: { 16 | name: 'phone xl', 17 | price: '$799.00', 18 | }, 19 | } as const; 20 | 21 | export const allPhones = Object.values(phones); 22 | -------------------------------------------------------------------------------- /apps/analog-app-e2e-playwright/tests/fixtures/products-details.po.ts: -------------------------------------------------------------------------------- 1 | import { Page } from 'playwright'; 2 | 3 | export class ProductDetailPage { 4 | constructor(readonly page: Page) {} 5 | 6 | getPrice() { 7 | return this.page.locator('h4'); 8 | } 9 | 10 | getBuyButton() { 11 | return this.page.locator('button >> text=/buy/i'); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /apps/analog-app/error.ts: -------------------------------------------------------------------------------- 1 | export default async function errorHandler(error, event) { 2 | event.res.end('error' + error.toString()); 3 | } 4 | -------------------------------------------------------------------------------- /apps/analog-app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/analog-app/favicon.ico -------------------------------------------------------------------------------- /apps/analog-app/src/app/about.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-about', 5 | template: `About Store`, 6 | }) 7 | export default class AboutComponent {} 8 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterOutlet } from '@angular/router'; 3 | import { TopBarComponent } from '@analogjs/top-bar'; 4 | 5 | @Component({ 6 | selector: 'analogjs-root', 7 | standalone: true, 8 | imports: [TopBarComponent, RouterOutlet], 9 | template: ` 10 | 11 |
12 | 13 |
14 | `, 15 | }) 16 | export class AppComponent {} 17 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/app.config.server.ts: -------------------------------------------------------------------------------- 1 | import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; 2 | import { provideServerRendering } from '@angular/platform-server'; 3 | 4 | import { appConfig } from './app.config'; 5 | 6 | const serverConfig: ApplicationConfig = { 7 | providers: [provideServerRendering()], 8 | }; 9 | 10 | export const config = mergeApplicationConfig(appConfig, serverConfig); 11 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/pages/(auth).page.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterOutlet } from '@angular/router'; 3 | 4 | @Component({ 5 | imports: [RouterOutlet], 6 | template: ` `, 7 | }) 8 | export default class AuthLayoutPageComponent {} 9 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/pages/(auth)/sign-up.page.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | template: `

SignUp

`, 5 | }) 6 | export default class SignupPageComponent {} 7 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/pages/(home).server.ts: -------------------------------------------------------------------------------- 1 | import { setCookie } from 'h3'; 2 | import { PageServerLoad } from '@analogjs/router'; 3 | 4 | import { Product } from '../products'; 5 | 6 | export const load = async ({ fetch, event }: PageServerLoad) => { 7 | setCookie(event, 'test', 'test'); 8 | const products = await fetch('/api/v1/products'); 9 | 10 | return { 11 | products: products, 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/pages/[...slug].page.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-page-not-found', 5 | template: `

Page Not Found

`, 6 | }) 7 | export default class PageNotFoundComponent {} 8 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/pages/[...slug].server.ts: -------------------------------------------------------------------------------- 1 | import { PageServerLoad } from '@analogjs/router'; 2 | 3 | export function load({ params }: PageServerLoad) { 4 | console.log('params', params); 5 | 6 | return { 7 | loaded: true, 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/pages/goodbye.page.analog: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/pages/package.page.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { MyPackageComponent } from 'my-package'; 3 | 4 | @Component({ 5 | imports: [MyPackageComponent], 6 | template: ` `, 7 | }) 8 | export default class PackagePageComponent {} 9 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/pages/products.[productId].server.ts: -------------------------------------------------------------------------------- 1 | import { PageServerLoad } from '@analogjs/router'; 2 | 3 | export const load = async ({ params, fetch }: PageServerLoad) => { 4 | return { 5 | slug: true, 6 | }; 7 | }; 8 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/pages/search.server.ts: -------------------------------------------------------------------------------- 1 | import type { PageServerLoad } from '@analogjs/router'; 2 | import { getQuery } from 'h3'; 3 | 4 | export async function load({ event }: PageServerLoad) { 5 | const query = getQuery(event); 6 | console.log('loaded search', query['search']); 7 | 8 | return { 9 | loaded: true, 10 | searchTerm: `${query['search'] || ''}`, 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/pages/server/(server).page.ts: -------------------------------------------------------------------------------- 1 | import { RouteMeta } from '@analogjs/router'; 2 | 3 | import { ServerOnly } from '@analogjs/router'; 4 | 5 | export const routeMeta: RouteMeta = { 6 | data: { 7 | component: 'hello', 8 | }, 9 | }; 10 | 11 | export default ServerOnly; 12 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/pages/shipping/[...slug].page.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-shipping-page-not-found', 5 | template: `

Shipping Page Not Found

`, 6 | }) 7 | export default class ShippingPageNotFoundComponent {} 8 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/pages/shipping/[...slug].server.ts: -------------------------------------------------------------------------------- 1 | import { PageServerLoad } from '@analogjs/router'; 2 | 3 | export function load({ params }: PageServerLoad) { 4 | console.log('slug', params?.['slug']); 5 | 6 | return { 7 | loaded: true, 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/pages/shipping/index.server.ts: -------------------------------------------------------------------------------- 1 | import { parseCookies } from 'h3'; 2 | import { PageServerLoad } from '@analogjs/router'; 3 | 4 | export const load = async ({ event }: PageServerLoad) => { 5 | console.log('shipping'); 6 | const cookies = parseCookies(event); 7 | 8 | console.log('test cookie', cookies['test']); 9 | 10 | return { 11 | shipping: true, 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/pages/shipping/shipping.html: -------------------------------------------------------------------------------- 1 |

Shipping Prices

2 | @for (shipping of shippingCosts | async; track $index) { 3 |
4 | {{ shipping.type }} 5 | {{ shipping.price | currency }} 6 |
7 | } 8 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/pages/shipping/shipping.scss: -------------------------------------------------------------------------------- 1 | h3 { 2 | border: solid 1px darkblue; 3 | } 4 | -------------------------------------------------------------------------------- /apps/analog-app/src/app/products.ts: -------------------------------------------------------------------------------- 1 | export interface Product { 2 | id: number; 3 | name: string; 4 | price: number; 5 | description: string; 6 | } 7 | -------------------------------------------------------------------------------- /apps/analog-app/src/main.server.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js/node'; 2 | import '@angular/platform-server/init'; 3 | import { render } from '@analogjs/router/server'; 4 | 5 | import { config } from './app/app.config.server'; 6 | import { AppComponent } from './app/app.component'; 7 | 8 | export default render(AppComponent, config); 9 | -------------------------------------------------------------------------------- /apps/analog-app/src/main.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | 4 | import { AppComponent } from './app/app.component'; 5 | import { appConfig } from './app/app.config'; 6 | 7 | bootstrapApplication(AppComponent, appConfig); 8 | -------------------------------------------------------------------------------- /apps/analog-app/src/public/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/analog-app/src/public/.gitkeep -------------------------------------------------------------------------------- /apps/analog-app/src/public/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/analog-app/src/public/assets/.gitkeep -------------------------------------------------------------------------------- /apps/analog-app/src/public/assets/shipping.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "type": "Overnight", 4 | "price": 25.99 5 | }, 6 | { 7 | "type": "2-Day", 8 | "price": 9.99 9 | }, 10 | { 11 | "type": "Postal", 12 | "price": 2.99 13 | } 14 | ] 15 | -------------------------------------------------------------------------------- /apps/analog-app/src/server/components/goodbye.ag: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/analog-app/src/server/middleware/redirect.ts: -------------------------------------------------------------------------------- 1 | import { eventHandler, sendRedirect, setHeaders } from 'h3'; 2 | 3 | export default eventHandler((event) => { 4 | if (event.node.req.originalUrl === '/checkout') { 5 | console.log('event url', event.node.req.originalUrl); 6 | 7 | setHeaders(event, { 8 | 'x-analog-test': 'true', 9 | }); 10 | 11 | sendRedirect(event, '/cart'); 12 | } 13 | }); 14 | -------------------------------------------------------------------------------- /apps/analog-app/src/server/routes/api/v1/products.ts: -------------------------------------------------------------------------------- 1 | import { eventHandler } from 'h3'; 2 | 3 | export default eventHandler(() => [ 4 | { 5 | id: 1, 6 | name: 'Phone XL', 7 | price: 799, 8 | description: 'A large phone with one of the best screens', 9 | }, 10 | { 11 | id: 2, 12 | name: 'Phone Mini', 13 | price: 699, 14 | description: 'A great phone with one of the best cameras', 15 | }, 16 | { 17 | id: 3, 18 | name: 'Phone Standard', 19 | price: 299, 20 | description: '', 21 | }, 22 | ]); 23 | -------------------------------------------------------------------------------- /apps/analog-app/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vite-plugin-angular/setup-vitest'; 2 | 3 | import { 4 | BrowserDynamicTestingModule, 5 | platformBrowserDynamicTesting, 6 | } from '@angular/platform-browser-dynamic/testing'; 7 | import { getTestBed } from '@angular/core/testing'; 8 | 9 | getTestBed().initTestEnvironment( 10 | BrowserDynamicTestingModule, 11 | platformBrowserDynamicTesting(), 12 | ); 13 | -------------------------------------------------------------------------------- /apps/analog-app/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | interface ImportMetaEnv { 4 | readonly VITE_ANALOG_PUBLIC_BASE_URL: string; 5 | } 6 | 7 | interface ImportMeta { 8 | readonly env: ImportMetaEnv; 9 | } 10 | -------------------------------------------------------------------------------- /apps/analog-app/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": [], 6 | "target": "ES2022", 7 | "useDefineForClassFields": false 8 | }, 9 | "files": ["src/main.ts", "src/main.server.ts"], 10 | "include": [ 11 | "src/**/*.d.ts", 12 | "src/app/pages/**/*.page.ts", 13 | "src/server/components/**/*.ts", 14 | "src/server/middleware/**/*.ts" 15 | ], 16 | "exclude": ["**/*.test.ts", "**/*.spec.ts"] 17 | } 18 | -------------------------------------------------------------------------------- /apps/analog-app/tsconfig.editor.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["**/*.ts"], 4 | "compilerOptions": { 5 | "types": ["node", "vitest/globals"] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /apps/analog-app/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": ["node", "vitest/globals"] 6 | }, 7 | "files": ["src/test-setup.ts", "src/polyfills.ts"], 8 | "include": ["src/**/*.spec.ts", "**/*.d.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/analog-preset-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "analog-preset-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "sourceRoot": "apps/analog-preset-e2e/src", 6 | "tags": [], 7 | "implicitDependencies": ["platform"], 8 | "targets": { 9 | "e2e": { 10 | "executor": "@nx/vite:test" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /apps/astro-app-e2e-playwright/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": [ 4 | "!**/*", 5 | "**/vite.config.*.timestamp*", 6 | "**/vitest.config.*.timestamp*" 7 | ], 8 | "overrides": [ 9 | { 10 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["src/plugins/index.js"], 15 | "rules": { 16 | "@typescript-eslint/no-var-requires": "off", 17 | "no-undef": "off" 18 | } 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /apps/astro-app-e2e-playwright/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "astro-app-e2e-playwright", 3 | "private": true, 4 | "type": "commonjs" 5 | } 6 | -------------------------------------------------------------------------------- /apps/astro-app/.astro/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "_variables": { 3 | "lastUpdateCheck": 1743174745314 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /apps/astro-app/.gitignore: -------------------------------------------------------------------------------- 1 | # build output 2 | dist/ 3 | .output/ 4 | 5 | # dependencies 6 | node_modules/ 7 | 8 | # logs 9 | npm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | pnpm-debug.log* 13 | 14 | 15 | # environment variables 16 | .env 17 | .env.production 18 | 19 | # macOS-specific files 20 | .DS_Store 21 | -------------------------------------------------------------------------------- /apps/astro-app/.npmrc: -------------------------------------------------------------------------------- 1 | # Expose Astro dependencies for `pnpm` users 2 | shamefully-hoist=true 3 | -------------------------------------------------------------------------------- /apps/astro-app/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["astro-build.astro-vscode"], 3 | "unwantedRecommendations": [] 4 | } 5 | -------------------------------------------------------------------------------- /apps/astro-app/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "command": "./node_modules/.bin/astro dev", 6 | "name": "Development server", 7 | "request": "launch", 8 | "type": "node-terminal" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /apps/astro-app/astro.config.mjs: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'astro/config'; 2 | import angular from '@analogjs/astro-angular'; 3 | import react from '@astrojs/react'; 4 | import mdx from '@astrojs/mdx'; 5 | 6 | // https://astro.build/config 7 | export default defineConfig({ 8 | outDir: '../../dist/apps/astro-app', 9 | integrations: [angular(), react(), mdx({ syntaxHighlight: 'prism' })], 10 | }); 11 | -------------------------------------------------------------------------------- /apps/astro-app/src/components/Instructions.tsx: -------------------------------------------------------------------------------- 1 | export const Instructions = () => { 2 | return ( 3 | <> 4 |

5 | Check out the src/pages directory to get started. 6 |
7 | Code Challenge: Tweak the "Welcome to Astro" message 8 | above. 9 |

10 | 11 | ); 12 | }; 13 | -------------------------------------------------------------------------------- /apps/astro-app/src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /apps/astro-app/src/pages/test.mdx: -------------------------------------------------------------------------------- 1 | import { CardComponent } from '../components/card.component.ts'; 2 | 3 | Angular Component in an MDX file 4 | 5 | 10 | -------------------------------------------------------------------------------- /apps/astro-app/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "astro/tsconfigs/strict", 3 | "compilerOptions": { 4 | "jsx": "react-jsx", 5 | "jsxImportSource": "react" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /apps/blog-app-e2e-cypress/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["plugin:cypress/recommended", "../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /apps/blog-app-e2e-cypress/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "blog-app-e2e-cypress", 3 | "private": true, 4 | "type": "commonjs" 5 | } 6 | -------------------------------------------------------------------------------- /apps/blog-app-e2e-cypress/src/fixtures/.gitkeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /apps/blog-app-e2e-cypress/src/support/app.po.ts: -------------------------------------------------------------------------------- 1 | // leaving this empty for now 2 | -------------------------------------------------------------------------------- /apps/blog-app-e2e-cypress/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "sourceMap": false, 5 | "outDir": "../../dist/out-tsc", 6 | "allowJs": true, 7 | "types": ["cypress", "node"] 8 | }, 9 | "include": ["src/**/*.ts", "src/**/*.js", "cypress.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/blog-app/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterOutlet } from '@angular/router'; 3 | import NavComponent from './components/nav.component'; 4 | 5 | @Component({ 6 | selector: 'blog-root', 7 | standalone: true, 8 | imports: [RouterOutlet, NavComponent], 9 | template: ` 10 | 11 | 12 | `, 13 | }) 14 | export class AppComponent {} 15 | -------------------------------------------------------------------------------- /apps/blog-app/src/app/app.config.server.ts: -------------------------------------------------------------------------------- 1 | import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; 2 | import { provideServerRendering } from '@angular/platform-server'; 3 | 4 | import { appConfig } from './app.config'; 5 | 6 | const serverConfig: ApplicationConfig = { 7 | providers: [provideServerRendering()], 8 | }; 9 | 10 | export const config = mergeApplicationConfig(appConfig, serverConfig); 11 | -------------------------------------------------------------------------------- /apps/blog-app/src/app/components/nav.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterLink } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: 'app-nav', 6 | standalone: true, 7 | imports: [RouterLink], 8 | template: ` 9 | 14 | `, 15 | }) 16 | export default class NavComponent {} 17 | -------------------------------------------------------------------------------- /apps/blog-app/src/app/pages/[...page-not-found].md: -------------------------------------------------------------------------------- 1 | ## Oops 2 | 3 | Page Not Found 4 | -------------------------------------------------------------------------------- /apps/blog-app/src/app/pages/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: About 3 | meta: 4 | - name: description 5 | content: About Page Description 6 | - property: og:title 7 | content: About 8 | --- 9 | 10 | ## About Analog 11 | 12 | Analog is a meta-framework for Angular. 13 | 14 | This is some codes 15 | 16 | ```ts 17 | import { enableProdMode } from '@angular/core'; 18 | ``` 19 | 20 | [Back Home](./) 21 | -------------------------------------------------------------------------------- /apps/blog-app/src/app/pages/archived/models.ts: -------------------------------------------------------------------------------- 1 | export interface ArchivedPostAttributes { 2 | title: string; 3 | slug: string; 4 | description: string; 5 | coverImage: string; 6 | draft?: boolean; 7 | } 8 | -------------------------------------------------------------------------------- /apps/blog-app/src/app/pages/blog/models.ts: -------------------------------------------------------------------------------- 1 | export interface PostAttributes { 2 | title: string; 3 | slug: string; 4 | description: string; 5 | coverImage: string; 6 | } 7 | -------------------------------------------------------------------------------- /apps/blog-app/src/app/pages/contact.md: -------------------------------------------------------------------------------- 1 | # Contact Us 2 | 3 | Take me [home](./). 4 | -------------------------------------------------------------------------------- /apps/blog-app/src/app/pages/index.page.ts: -------------------------------------------------------------------------------- 1 | import { RouteMeta } from '@analogjs/router'; 2 | 3 | export const routeMeta: RouteMeta = { 4 | redirectTo: '/blog', 5 | pathMatch: 'full', 6 | }; 7 | -------------------------------------------------------------------------------- /apps/blog-app/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/blog-app/src/assets/.gitkeep -------------------------------------------------------------------------------- /apps/blog-app/src/assets/angular-gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/blog-app/src/assets/angular-gradient.png -------------------------------------------------------------------------------- /apps/blog-app/src/content/archived/2022-01-08-post1-2024.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: My First Archived Blog Post 3 | slug: post1-2024 4 | description: My First Archived Blog Post Description 5 | --- 6 | 7 | This is the first archived blog post in 2024 with a custom slug 8 | -------------------------------------------------------------------------------- /apps/blog-app/src/content/archived/2022-01-10-post2-2024.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: My Second Archived Blog Post 3 | description: My Second Archived Post Description 4 | draft: true 5 | --- 6 | 7 | This is the second archived blog post in 2024 with the slug inherited from filename and in draft mode, so it shouldn't be visible / pre-rendered at all. 8 | -------------------------------------------------------------------------------- /apps/blog-app/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/blog-app/src/favicon.ico -------------------------------------------------------------------------------- /apps/blog-app/src/main.server.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js/node'; 2 | import '@angular/platform-server/init'; 3 | import { render } from '@analogjs/router/server'; 4 | 5 | import { config } from './app/app.config.server'; 6 | import { AppComponent } from './app/app.component'; 7 | 8 | export default render(AppComponent, config); 9 | -------------------------------------------------------------------------------- /apps/blog-app/src/main.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | 4 | import { AppComponent } from './app/app.component'; 5 | import { appConfig } from './app/app.config'; 6 | 7 | bootstrapApplication(AppComponent, appConfig); 8 | -------------------------------------------------------------------------------- /apps/blog-app/src/server/routes/rss.xml.ts: -------------------------------------------------------------------------------- 1 | import { defineEventHandler } from 'h3'; 2 | export default defineEventHandler((event) => { 3 | const feedString = ` 4 | 5 | 6 | `; 7 | event.node.res.setHeader('content-type', 'text/xml'); 8 | event.node.res.end(feedString); 9 | }); 10 | -------------------------------------------------------------------------------- /apps/blog-app/src/styles.css: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | /* include CSS for prism toolbar */ 3 | @import 'prismjs/plugins/toolbar/prism-toolbar.css'; 4 | /* check node_modules/prismjs/themes/ for the available themes */ 5 | @import 'prismjs/themes/prism-tomorrow.css'; 6 | -------------------------------------------------------------------------------- /apps/blog-app/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | interface ImportMetaEnv { 4 | readonly VITE_ANALOG_PUBLIC_BASE_URL: string; 5 | } 6 | 7 | interface ImportMeta { 8 | readonly env: ImportMetaEnv; 9 | } 10 | -------------------------------------------------------------------------------- /apps/blog-app/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": [], 6 | "target": "ES2022", 7 | "useDefineForClassFields": false 8 | }, 9 | "files": ["src/main.ts", "src/main.server.ts"], 10 | "include": [ 11 | "src/**/*.d.ts", 12 | "src/app/routes/**/*.ts", 13 | "src/app/pages/**/*.page.ts" 14 | ], 15 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 16 | } 17 | -------------------------------------------------------------------------------- /apps/blog-app/tsconfig.editor.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["src/**/*.ts"], 4 | "compilerOptions": { 5 | "types": [] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /apps/create-analog-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "create-analog-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "sourceRoot": "apps/create-analog-e2e/src", 6 | "tags": [], 7 | "implicitDependencies": ["create-analog"], 8 | "targets": { 9 | "e2e": { 10 | "executor": "@nx/vite:test" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /apps/docs-app/README.md: -------------------------------------------------------------------------------- 1 | # analogjs.org website and docs 2 | 3 | This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. 4 | 5 | See [`CONTRIBUTING.md`](../../CONTRIBUTING.md) for instructions on contributing to this project. 6 | -------------------------------------------------------------------------------- /apps/docs-app/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [require.resolve('@docusaurus/core/lib/babel/preset')], 3 | }; 4 | -------------------------------------------------------------------------------- /apps/docs-app/blog/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/docs-app/blog/.gitkeep -------------------------------------------------------------------------------- /apps/docs-app/docs/contributing.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 4 3 | title: Contributing 4 | --- 5 | 6 | import Contributing, { toc as ContributingToc } from '../../../CONTRIBUTING.md'; 7 | 8 | 9 | 10 | 11 | 12 | 13 | export const toc = [...ContributingToc]; 14 | -------------------------------------------------------------------------------- /apps/docs-app/docs/contributors.module.css: -------------------------------------------------------------------------------- 1 | [data-theme='light'] .githubLogo > * { 2 | fill: #000000; 3 | } 4 | -------------------------------------------------------------------------------- /apps/docs-app/docs/packages/astro-angular/overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: '' 3 | --- 4 | 5 | import AstroIntegration, { toc as AstroIntegrationTOC } from '../../../../../packages/astro-angular/README.md'; 6 | 7 | 8 | 9 | 10 | 11 | 12 | export const toc = [...AstroIntegrationTOC]; 13 | -------------------------------------------------------------------------------- /apps/docs-app/docs/packages/router/overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: '' 3 | --- 4 | 5 | import RouterIntegration, { toc as RouterIntegrationTOC } from '../../../../../packages/router/README.md'; 6 | 7 | 8 | 9 | 10 | 11 | 12 | export const toc = [...RouterIntegrationTOC]; 13 | -------------------------------------------------------------------------------- /apps/docs-app/docs/packages/vite-plugin-angular/overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: '' 3 | --- 4 | 5 | import VitePlugin, { toc as VitePluginToc } from '../../../../../packages/vite-plugin-angular/README.md'; 6 | 7 | 8 | 9 | 10 | 11 | 12 | export const toc = [...VitePluginToc]; 13 | -------------------------------------------------------------------------------- /apps/docs-app/docs/packages/vite-plugin-nitro/overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: '' 3 | --- 4 | 5 | import VitePlugin, { toc as VitePluginToc } from '../../../../../packages/vite-plugin-nitro/README.md'; 6 | 7 | 8 | 9 | 10 | 11 | 12 | export const toc = [...VitePluginToc]; 13 | -------------------------------------------------------------------------------- /apps/docs-app/i18n/de/docusaurus-plugin-content-docs/current/contributors.module.css: -------------------------------------------------------------------------------- 1 | [data-theme='light'] .githubLogo > * { 2 | fill: #000000; 3 | } 4 | -------------------------------------------------------------------------------- /apps/docs-app/i18n/de/docusaurus-plugin-content-docs/current/packages/router/overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: '' 3 | --- 4 | 5 | # Analog 6 | 7 | Das Fullstack-Meta-Framework für Angular 8 | 9 | Weitere Informationen unter [analogjs.org](https://analogjs.org) 10 | -------------------------------------------------------------------------------- /apps/docs-app/i18n/de/docusaurus-theme-classic/navbar.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": { 3 | "message": "Analog", 4 | "description": "The title in the navbar" 5 | }, 6 | "item.label.Docs": { 7 | "message": "Dokumentation", 8 | "description": "Navbar item with label Docs" 9 | }, 10 | "item.label.GitHub": { 11 | "message": "GitHub", 12 | "description": "Navbar item with label GitHub" 13 | }, 14 | "item.label.Discord": { 15 | "message": "Discord", 16 | "description": "Navbar item with label Discord" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /apps/docs-app/i18n/es/docusaurus-plugin-content-docs/current/contributing.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 4 3 | title: Contribuyendo 4 | --- 5 | 6 | import Contributing, { toc as ContributingToc } from '../../../../../../CONTRIBUTING.md'; 7 | 8 | 9 | 10 | 11 | 12 | 13 | export const toc = [...ContributingToc]; 14 | -------------------------------------------------------------------------------- /apps/docs-app/i18n/es/docusaurus-plugin-content-docs/current/contributors.module.css: -------------------------------------------------------------------------------- 1 | [data-theme='light'] .githubLogo > * { 2 | fill: #000000; 3 | } 4 | -------------------------------------------------------------------------------- /apps/docs-app/i18n/es/docusaurus-plugin-content-docs/current/packages/astro-angular/overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: '' 3 | --- 4 | 5 | import AstroIntegration, { toc as AstroIntegrationTOC } from '../../../../../../../../packages/astro-angular/README.md'; 6 | 7 | 8 | 9 | 10 | 11 | 12 | export const toc = [...AstroIntegrationTOC]; 13 | -------------------------------------------------------------------------------- /apps/docs-app/i18n/es/docusaurus-plugin-content-docs/current/packages/router/overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: '' 3 | --- 4 | 5 | import RouterIntegration, { toc as RouterIntegrationTOC } from '../../../../../../../../packages/router/README.md'; 6 | 7 | 8 | 9 | 10 | 11 | 12 | export const toc = [...RouterIntegrationTOC]; 13 | -------------------------------------------------------------------------------- /apps/docs-app/i18n/es/docusaurus-plugin-content-docs/current/packages/vite-plugin-angular/overview.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: '' 3 | --- 4 | 5 | import VitePlugin, { toc as VitePluginToc } from '../../../../../../../../packages/vite-plugin-angular/README.md'; 6 | 7 | 8 | 9 | 10 | 11 | 12 | export const toc = [...VitePluginToc]; 13 | -------------------------------------------------------------------------------- /apps/docs-app/i18n/zh-hans/docusaurus-plugin-content-docs/current/contributors.module.css: -------------------------------------------------------------------------------- 1 | [data-theme='light'] .githubLogo > * { 2 | fill: #000000; 3 | } 4 | -------------------------------------------------------------------------------- /apps/docs-app/src/components/HomepageFeatures/styles.module.css: -------------------------------------------------------------------------------- 1 | .features { 2 | display: flex; 3 | align-items: center; 4 | padding: 2rem 0; 5 | width: 100%; 6 | border-top: var(--ifm-global-border-width) solid var(--global-border-color); 7 | } 8 | 9 | .featureSvg { 10 | height: 200px; 11 | width: 200px; 12 | } 13 | -------------------------------------------------------------------------------- /apps/docs-app/static/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/docs-app/static/.nojekyll -------------------------------------------------------------------------------- /apps/docs-app/static/img/analog-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/docs-app/static/img/analog-banner.png -------------------------------------------------------------------------------- /apps/docs-app/static/img/debug-routes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/docs-app/static/img/debug-routes.png -------------------------------------------------------------------------------- /apps/docs-app/static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/docs-app/static/img/favicon.ico -------------------------------------------------------------------------------- /apps/docs-app/static/img/logos/angular-gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/docs-app/static/img/logos/angular-gradient.png -------------------------------------------------------------------------------- /apps/docs-app/static/img/logos/house-of-angular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/docs-app/static/img/logos/house-of-angular.png -------------------------------------------------------------------------------- /apps/docs-app/static/img/logos/stackblitz-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | StackBlitz 5 | 6 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /apps/docs-app/static/new/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Analog - New Project 6 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /apps/docs-app/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "esModuleInterop": true, 6 | "jsx": "react", 7 | "lib": ["DOM"], 8 | "noEmit": true, 9 | "noImplicitAny": false, 10 | "types": [ 11 | "node", 12 | "@docusaurus/module-type-aliases", 13 | "@docusaurus/theme-classic" 14 | ], 15 | "baseUrl": ".", 16 | "paths": { 17 | "@site/*": ["./*"] 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /apps/ng-app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ng-app 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /apps/ng-app/src/app/export-stuff.ag: -------------------------------------------------------------------------------- 1 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /apps/ng-app/src/app/external/external-two.css: -------------------------------------------------------------------------------- 1 | h1 { 2 | color: darkblue; 3 | } 4 | -------------------------------------------------------------------------------- /apps/ng-app/src/app/external/external.ag: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /apps/ng-app/src/app/external/external.css: -------------------------------------------------------------------------------- 1 | p { 2 | color: tomato; 3 | background: #eee; 4 | } 5 | -------------------------------------------------------------------------------- /apps/ng-app/src/app/external/external.html: -------------------------------------------------------------------------------- 1 |
2 |

I am in external template!!!

3 | 4 |

Value: {{ value() }}

5 |
6 | -------------------------------------------------------------------------------- /apps/ng-app/src/app/goodbye.ag: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /apps/ng-app/src/app/hello.ag.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | import Hello from './hello.ag'; 3 | 4 | describe('Hello', () => { 5 | beforeEach(async () => { 6 | await TestBed.configureTestingModule({ 7 | imports: [Hello], 8 | }).compileComponents(); 9 | }); 10 | 11 | it('should create the component', () => { 12 | const fixture = TestBed.createComponent(Hello); 13 | const app = fixture.componentInstance; 14 | expect(app).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /apps/ng-app/src/app/highlight.ag: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /apps/ng-app/src/app/models.ts: -------------------------------------------------------------------------------- 1 | export interface PostAttributes { 2 | title: string; 3 | slug: string; 4 | description: string; 5 | coverImage: string; 6 | } 7 | -------------------------------------------------------------------------------- /apps/ng-app/src/app/my-components.ts: -------------------------------------------------------------------------------- 1 | import Goodbye from './goodbye.ag'; 2 | 3 | export { Goodbye }; 4 | -------------------------------------------------------------------------------- /apps/ng-app/src/app/my.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | 3 | @Injectable() 4 | export class MyService { 5 | sayHello() { 6 | return 'hello'; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /apps/ng-app/src/app/pages/(home).page.ag: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /apps/ng-app/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/ng-app/src/assets/.gitkeep -------------------------------------------------------------------------------- /apps/ng-app/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/ng-app/src/favicon.ico -------------------------------------------------------------------------------- /apps/ng-app/src/main.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | import { appConfig } from './app/app.config'; 4 | import AppComponent from './app/app.component.ag'; 5 | 6 | bootstrapApplication(AppComponent, appConfig).catch((err) => 7 | console.error(err), 8 | ); 9 | -------------------------------------------------------------------------------- /apps/ng-app/src/styles.css: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | /* include CSS for prism toolbar */ 3 | @import 'prismjs/plugins/toolbar/prism-toolbar.css'; 4 | /* check node_modules/prismjs/themes/ for the available themes */ 5 | @import 'prismjs/themes/prism-tomorrow.css'; 6 | -------------------------------------------------------------------------------- /apps/ng-app/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vite-plugin-angular/setup-vitest'; 2 | 3 | import { 4 | BrowserDynamicTestingModule, 5 | platformBrowserDynamicTesting, 6 | } from '@angular/platform-browser-dynamic/testing'; 7 | import { getTestBed } from '@angular/core/testing'; 8 | 9 | getTestBed().initTestEnvironment( 10 | BrowserDynamicTestingModule, 11 | platformBrowserDynamicTesting(), 12 | ); 13 | -------------------------------------------------------------------------------- /apps/ng-app/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": [] 6 | }, 7 | "files": ["src/main.ts"], 8 | "include": ["src/**/*.d.ts"], 9 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/ng-app/tsconfig.editor.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["src/**/*.ts"], 4 | "compilerOptions": { 5 | "types": [] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /apps/ng-app/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": ["node", "vitest/globals"], 6 | "target": "es2016" 7 | }, 8 | "files": ["src/test-setup.ts"], 9 | "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/nx-plugin-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nx-plugin-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "sourceRoot": "apps/nx-plugin-e2e/src", 6 | "tags": [], 7 | "implicitDependencies": ["platform", "trpc", "content"], 8 | "targets": { 9 | "e2e": { 10 | "executor": "@nx/vite:test" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /apps/trpc-app-e2e-playwright/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": [ 4 | "!**/*", 5 | "**/vite.config.*.timestamp*", 6 | "**/vitest.config.*.timestamp*" 7 | ], 8 | "overrides": [ 9 | { 10 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["src/plugins/index.js"], 15 | "rules": { 16 | "@typescript-eslint/no-var-requires": "off", 17 | "no-undef": "off" 18 | } 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /apps/trpc-app-e2e-playwright/tests/fixtures/notes.ts: -------------------------------------------------------------------------------- 1 | type Note = { 2 | note: string; 3 | }; 4 | 5 | export const notes: Record<'first', Note> = { 6 | first: { 7 | note: 'I am the first note', 8 | }, 9 | } as const; 10 | -------------------------------------------------------------------------------- /apps/trpc-app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/trpc-app/favicon.ico -------------------------------------------------------------------------------- /apps/trpc-app/postcss.config.cjs: -------------------------------------------------------------------------------- 1 | const { join } = require('node:path'); 2 | 3 | module.exports = { 4 | plugins: { 5 | tailwindcss: { 6 | config: join(__dirname, 'tailwind.config.cjs'), 7 | }, 8 | autoprefixer: {}, 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /apps/trpc-app/src/app.config.server.ts: -------------------------------------------------------------------------------- 1 | import { ApplicationConfig, mergeApplicationConfig } from '@angular/core'; 2 | import { provideServerRendering } from '@angular/platform-server'; 3 | import { appConfig } from './app.config'; 4 | import { provideClientHydration } from '@angular/platform-browser'; 5 | 6 | const serverConfig: ApplicationConfig = { 7 | providers: [provideServerRendering(), provideClientHydration()], 8 | }; 9 | 10 | export const config = mergeApplicationConfig(appConfig, serverConfig); 11 | -------------------------------------------------------------------------------- /apps/trpc-app/src/app.config.ts: -------------------------------------------------------------------------------- 1 | import { ApplicationConfig } from '@angular/core'; 2 | import { provideClientHydration } from '@angular/platform-browser'; 3 | import { provideFileRouter } from '@analogjs/router'; 4 | import { provideTrpcClient } from './trpc-client'; 5 | 6 | export const appConfig: ApplicationConfig = { 7 | providers: [ 8 | provideFileRouter(), 9 | provideClientHydration(), 10 | provideTrpcClient(), 11 | ], 12 | }; 13 | -------------------------------------------------------------------------------- /apps/trpc-app/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { RouterOutlet } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: 'trpc-app-root', 6 | standalone: true, 7 | imports: [RouterOutlet], 8 | host: { 9 | class: 'max-w-screen-md mx-auto block h-full bg-zinc-900 text-zinc-50', 10 | }, 11 | changeDetection: ChangeDetectionStrategy.Default, 12 | template: ` `, 13 | }) 14 | export class AppComponent {} 15 | -------------------------------------------------------------------------------- /apps/trpc-app/src/main.server.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js/node'; 2 | import '@angular/platform-server/init'; 3 | import { render } from '@analogjs/router/server'; 4 | 5 | import { config } from './app.config.server'; 6 | import { AppComponent } from './app/app.component'; 7 | 8 | export default render(AppComponent, config); 9 | -------------------------------------------------------------------------------- /apps/trpc-app/src/main.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | 4 | import { AppComponent } from './app/app.component'; 5 | import { appConfig } from './app.config'; 6 | 7 | bootstrapApplication(AppComponent, appConfig).catch((err) => 8 | console.error(err), 9 | ); 10 | -------------------------------------------------------------------------------- /apps/trpc-app/src/note.ts: -------------------------------------------------------------------------------- 1 | export type Note = { 2 | id: number; 3 | note: string; 4 | createdAt: Date; 5 | }; 6 | -------------------------------------------------------------------------------- /apps/trpc-app/src/public/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/apps/trpc-app/src/public/assets/.gitkeep -------------------------------------------------------------------------------- /apps/trpc-app/src/server/routes/health.ts: -------------------------------------------------------------------------------- 1 | import { eventHandler } from 'h3'; 2 | 3 | export default eventHandler(() => ({ success: true })); 4 | -------------------------------------------------------------------------------- /apps/trpc-app/src/server/routes/trpc/[trpc].ts: -------------------------------------------------------------------------------- 1 | import { appRouter } from '../../trpc/routers'; 2 | import { createContext } from '../../trpc/context'; 3 | import { createTrpcNitroHandler } from '@analogjs/trpc/server'; 4 | // export API handler 5 | export default createTrpcNitroHandler({ 6 | router: appRouter, 7 | createContext, 8 | }); 9 | -------------------------------------------------------------------------------- /apps/trpc-app/src/server/trpc/routers/index.ts: -------------------------------------------------------------------------------- 1 | import { router } from '../trpc'; 2 | import { noteRouter } from './notes'; 3 | 4 | export const appRouter = router({ 5 | note: noteRouter, 6 | }); 7 | // export type definition of API 8 | export type AppRouter = typeof appRouter; 9 | -------------------------------------------------------------------------------- /apps/trpc-app/src/styles.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @tailwind base; 6 | @tailwind components; 7 | @tailwind utilities; 8 | -------------------------------------------------------------------------------- /apps/trpc-app/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vite-plugin-angular/setup-vitest'; 2 | 3 | import { 4 | BrowserDynamicTestingModule, 5 | platformBrowserDynamicTesting, 6 | } from '@angular/platform-browser-dynamic/testing'; 7 | import { getTestBed } from '@angular/core/testing'; 8 | 9 | getTestBed().initTestEnvironment( 10 | BrowserDynamicTestingModule, 11 | platformBrowserDynamicTesting(), 12 | ); 13 | -------------------------------------------------------------------------------- /apps/trpc-app/src/trpc-client.ts: -------------------------------------------------------------------------------- 1 | import { AppRouter } from './server/trpc/routers'; 2 | import { createTrpcClient } from '@analogjs/trpc'; 3 | import { inject } from '@angular/core'; 4 | import superjson from 'superjson'; 5 | 6 | export const { provideTrpcClient, TrpcClient, TrpcHeaders } = 7 | createTrpcClient({ 8 | url: '/api/trpc', 9 | options: { 10 | transformer: superjson, 11 | }, 12 | }); 13 | 14 | export function injectTrpcClient() { 15 | return inject(TrpcClient); 16 | } 17 | -------------------------------------------------------------------------------- /apps/trpc-app/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /apps/trpc-app/tailwind.config.cjs: -------------------------------------------------------------------------------- 1 | const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); 2 | const { join } = require('node:path'); 3 | 4 | /** @type {import('tailwindcss').Config} */ 5 | module.exports = { 6 | darkMode: 'class', 7 | content: [ 8 | './index.html', 9 | join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), 10 | ...createGlobPatternsForDependencies(__dirname), 11 | ], 12 | theme: { 13 | extend: {}, 14 | }, 15 | plugins: [], 16 | }; 17 | -------------------------------------------------------------------------------- /apps/trpc-app/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": [], 6 | "target": "ES2022", 7 | "useDefineForClassFields": false 8 | }, 9 | "files": ["src/main.ts", "src/main.server.ts"], 10 | "include": [ 11 | "src/**/*.d.ts", 12 | "src/app/routes/**/*.ts", 13 | "src/app/pages/**/*.page.ts" 14 | ], 15 | "exclude": ["**/*.test.ts", "**/*.spec.ts"] 16 | } 17 | -------------------------------------------------------------------------------- /apps/trpc-app/tsconfig.editor.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["**/*.ts"], 4 | "compilerOptions": { 5 | "types": ["node", "vitest/globals"] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /apps/trpc-app/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": ["node", "vitest/globals"] 6 | }, 7 | "files": ["src/test-setup.ts", "src/polyfills.ts"], 8 | "include": ["src/**/*.spec.ts", "**/*.d.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /jest.config.ts: -------------------------------------------------------------------------------- 1 | import { getJestProjectsAsync } from '@nx/jest'; 2 | 3 | export default async () => ({ 4 | projects: await getJestProjectsAsync(), 5 | }); 6 | -------------------------------------------------------------------------------- /libs/card/README.md: -------------------------------------------------------------------------------- 1 | # libs/card 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | -------------------------------------------------------------------------------- /libs/card/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "card", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/card/src", 5 | "prefix": "lib", 6 | "projectType": "library", 7 | "tags": [], 8 | "targets": { 9 | "tests": { 10 | "executor": "@nx/vite:test" 11 | }, 12 | "lint": { 13 | "executor": "@nx/eslint:lint", 14 | "outputs": ["{options.outputFile}"] 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /libs/card/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/card/card.component'; 2 | -------------------------------------------------------------------------------- /libs/card/src/lib/autocomplete/autocomplete.component.scss: -------------------------------------------------------------------------------- 1 | :host { 2 | display: block; 3 | } 4 | -------------------------------------------------------------------------------- /libs/card/src/lib/autocomplete/index.ts: -------------------------------------------------------------------------------- 1 | export * from './autocomplete.component'; 2 | -------------------------------------------------------------------------------- /libs/card/src/lib/card/__snapshots__/card.component.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`CardComponent > should create the app 1`] = ` 4 | 5 | card-works 6 | 7 | 13 | 16 | 17 | `; 18 | -------------------------------------------------------------------------------- /libs/card/src/lib/card/card.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/libs/card/src/lib/card/card.component.css -------------------------------------------------------------------------------- /libs/card/src/lib/card/card.component.html: -------------------------------------------------------------------------------- 1 | {{ title }} 2 | 3 | Some card 4 | -------------------------------------------------------------------------------- /libs/card/src/lib/card/card.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { MatCardModule } from '@angular/material/card'; 4 | 5 | @Component({ 6 | selector: 'lib-card', 7 | standalone: true, 8 | imports: [CommonModule, MatCardModule], 9 | templateUrl: './card.component.html', 10 | styleUrls: ['./card.component.css'], 11 | }) 12 | export class CardComponent { 13 | title = 'card-works'; 14 | render = false; 15 | } 16 | -------------------------------------------------------------------------------- /libs/card/src/lib/card2/__snapshots__/card.component.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`CardComponent > should create the app 1`] = ` 4 | 5 | card-works 6 | 7 | 13 | 16 | 17 | `; 18 | -------------------------------------------------------------------------------- /libs/card/src/lib/card2/card.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/libs/card/src/lib/card2/card.component.css -------------------------------------------------------------------------------- /libs/card/src/lib/card2/card.component.html: -------------------------------------------------------------------------------- 1 | {{ title }} 2 | 3 | Some card 4 | -------------------------------------------------------------------------------- /libs/card/src/lib/card2/card.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { MatCardModule } from '@angular/material/card'; 4 | 5 | @Component({ 6 | selector: 'lib-card', 7 | standalone: true, 8 | imports: [CommonModule, MatCardModule], 9 | templateUrl: './card.component.html', 10 | styleUrls: ['./card.component.css'], 11 | }) 12 | export class CardComponent { 13 | title = 'card-works'; 14 | render = false; 15 | } 16 | -------------------------------------------------------------------------------- /libs/card/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vitest-angular/setup-zone'; 2 | 3 | /** 4 | * Initialize TestBed for all tests inside of content 5 | */ 6 | import { TestBed } from '@angular/core/testing'; 7 | import { 8 | BrowserDynamicTestingModule, 9 | platformBrowserDynamicTesting, 10 | } from '@angular/platform-browser-dynamic/testing'; 11 | 12 | TestBed.initTestEnvironment( 13 | BrowserDynamicTestingModule, 14 | platformBrowserDynamicTesting(), 15 | ); 16 | -------------------------------------------------------------------------------- /libs/card/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "declaration": true, 6 | "declarationMap": true, 7 | "inlineSources": true, 8 | "types": [], 9 | "esModuleInterop": true, 10 | "isolatedModules": true, 11 | "moduleResolution": "bundler" 12 | }, 13 | "exclude": ["src/**/*.spec.ts", "vite.config.ts"], 14 | "include": ["src/**/*.ts"] 15 | } 16 | -------------------------------------------------------------------------------- /libs/card/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": ["node", "vitest/globals"] 6 | }, 7 | "files": ["src/test-setup.ts"], 8 | "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/my-package/README.md: -------------------------------------------------------------------------------- 1 | # my-package 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test my-package` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/my-package/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/my-package/my-package.component'; 2 | -------------------------------------------------------------------------------- /libs/my-package/src/lib/my-package/my-package.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/libs/my-package/src/lib/my-package/my-package.component.css -------------------------------------------------------------------------------- /libs/my-package/src/lib/my-package/my-package.component.html: -------------------------------------------------------------------------------- 1 |

MyPackage works!

2 | -------------------------------------------------------------------------------- /libs/my-package/src/lib/my-package/my-package.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | @Component({ 5 | selector: 'lib-my-package', 6 | imports: [CommonModule], 7 | templateUrl: './my-package.component.html', 8 | styleUrl: './my-package.component.css', 9 | }) 10 | export class MyPackageComponent {} 11 | -------------------------------------------------------------------------------- /libs/my-package/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vitest-angular/setup-zone'; 2 | 3 | /** 4 | * Initialize TestBed for all tests inside of content 5 | */ 6 | import { TestBed } from '@angular/core/testing'; 7 | import { 8 | BrowserDynamicTestingModule, 9 | platformBrowserDynamicTesting, 10 | } from '@angular/platform-browser-dynamic/testing'; 11 | 12 | TestBed.initTestEnvironment( 13 | BrowserDynamicTestingModule, 14 | platformBrowserDynamicTesting(), 15 | ); 16 | -------------------------------------------------------------------------------- /libs/my-package/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "declaration": true, 6 | "declarationMap": true, 7 | "inlineSources": true, 8 | "types": [] 9 | }, 10 | "exclude": [ 11 | "src/**/*.spec.ts", 12 | "src/test-setup.ts", 13 | "vite.config.ts", 14 | "src/**/*.test.ts" 15 | ], 16 | "include": ["src/**/*.ts"] 17 | } 18 | -------------------------------------------------------------------------------- /libs/my-package/tsconfig.lib.prod.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.lib.json", 3 | "compilerOptions": { 4 | "declarationMap": false, 5 | "target": "ES2022", 6 | "useDefineForClassFields": false 7 | }, 8 | "angularCompilerOptions": { 9 | "compilationMode": "partial" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /libs/my-package/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": ["node", "vitest/globals"] 6 | }, 7 | "files": ["src/test-setup.ts"], 8 | "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/shared/feature/README.md: -------------------------------------------------------------------------------- 1 | # shared-routes 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test shared-routes` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/shared/feature/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "shared-feature", 3 | "$schema": "../../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/shared/feature/src", 5 | "prefix": "lib", 6 | "projectType": "library", 7 | "tags": [], 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /libs/shared/feature/src/api/routes/api/ping.ts: -------------------------------------------------------------------------------- 1 | import { eventHandler } from 'h3'; 2 | 3 | export default eventHandler(() => 'pong'); 4 | -------------------------------------------------------------------------------- /libs/shared/feature/src/content/test.agx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Shared Test Agx 3 | slug: shared-test-agx 4 | --- 5 | 6 | 9 | 10 | 13 | -------------------------------------------------------------------------------- /libs/shared/feature/src/content/test.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Shared Test Content 3 | slug: shared-test 4 | --- 5 | 6 | This is a test 7 | -------------------------------------------------------------------------------- /libs/shared/feature/src/index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/libs/shared/feature/src/index.ts -------------------------------------------------------------------------------- /libs/shared/feature/src/pages/about-me.page.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-about', 5 | standalone: true, 6 | template: `

about me page

`, 7 | }) 8 | export default class AboutPageComponent {} 9 | -------------------------------------------------------------------------------- /libs/shared/feature/src/pages/about-you.page.analog: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /libs/shared/feature/src/pages/test.page.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-test', 5 | standalone: true, 6 | template: `

shared test page works

`, 7 | }) 8 | export default class SharedTestPageComponent {} 9 | -------------------------------------------------------------------------------- /libs/shared/feature/src/pages/test.server.ts: -------------------------------------------------------------------------------- 1 | export function load() { 2 | console.log('test from server'); 3 | return { 4 | tested: true, 5 | }; 6 | } 7 | -------------------------------------------------------------------------------- /libs/shared/feature/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vitest-angular/setup-zone'; 2 | 3 | /** 4 | * Initialize TestBed for all tests inside of content 5 | */ 6 | import { TestBed } from '@angular/core/testing'; 7 | import { 8 | BrowserDynamicTestingModule, 9 | platformBrowserDynamicTesting, 10 | } from '@angular/platform-browser-dynamic/testing'; 11 | 12 | TestBed.initTestEnvironment( 13 | BrowserDynamicTestingModule, 14 | platformBrowserDynamicTesting(), 15 | ); 16 | -------------------------------------------------------------------------------- /libs/shared/feature/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "declaration": true, 6 | "declarationMap": true, 7 | "inlineSources": true, 8 | "types": [] 9 | }, 10 | "exclude": [ 11 | "src/**/*.spec.ts", 12 | "src/test-setup.ts", 13 | "jest.config.ts", 14 | "src/**/*.test.ts" 15 | ], 16 | "include": ["src/**/*.ts"] 17 | } 18 | -------------------------------------------------------------------------------- /libs/shared/feature/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": ["node", "vitest/globals"], 6 | "target": "es2016" 7 | }, 8 | "files": ["src/test-setup.ts"], 9 | "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /libs/top-bar/README.md: -------------------------------------------------------------------------------- 1 | # top-bar 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test top-bar` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/top-bar/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "top-bar", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "library", 5 | "sourceRoot": "libs/top-bar/src", 6 | "prefix": "analogjs", 7 | "tags": [], 8 | "targets": { 9 | "test": { 10 | "executor": "@nx/vite:test" 11 | }, 12 | "lint": { 13 | "executor": "@nx/eslint:lint", 14 | "outputs": ["{options.outputFile}"] 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /libs/top-bar/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/top-bar/top-bar.component'; 2 | -------------------------------------------------------------------------------- /libs/top-bar/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vite-plugin-angular/setup-vitest'; 2 | import '@angular/compiler'; 3 | 4 | /** 5 | * Initialize TestBed for all tests inside of content 6 | */ 7 | import { TestBed } from '@angular/core/testing'; 8 | import { 9 | BrowserDynamicTestingModule, 10 | platformBrowserDynamicTesting, 11 | } from '@angular/platform-browser-dynamic/testing'; 12 | 13 | TestBed.initTestEnvironment( 14 | BrowserDynamicTestingModule, 15 | platformBrowserDynamicTesting(), 16 | ); 17 | -------------------------------------------------------------------------------- /libs/top-bar/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "declaration": true, 6 | "declarationMap": true, 7 | "inlineSources": true, 8 | "types": [] 9 | }, 10 | "exclude": ["src/test-setup.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], 11 | "include": ["src/**/*.ts"] 12 | } 13 | -------------------------------------------------------------------------------- /libs/top-bar/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": ["node", "vitest/globals"] 6 | }, 7 | "files": ["src/test-setup.ts"], 8 | "include": ["src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/.gitkeep -------------------------------------------------------------------------------- /packages/astro-angular/migrations/migration.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../../node_modules/@angular-devkit/schematics/collection-schema.json", 3 | "schematics": {} 4 | } 5 | -------------------------------------------------------------------------------- /packages/astro-angular/src/index.spec.mts: -------------------------------------------------------------------------------- 1 | import astroPlugin from './index'; 2 | 3 | describe('angularVitePlugin', () => { 4 | it('should return astro configurations', () => { 5 | expect(astroPlugin().name).toEqual('@analogjs/astro-angular'); 6 | expect(astroPlugin().hooks).toStrictEqual({ 7 | 'astro:config:setup': expect.anything(), 8 | 'astro:config:done': expect.anything(), 9 | }); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /packages/astro-angular/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vite-plugin-angular/setup-vitest'; 2 | -------------------------------------------------------------------------------- /packages/astro-angular/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/astro-angular/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["node", "vitest/globals"] 7 | }, 8 | "files": ["src/test-setup.ts"], 9 | "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/content-plugin/README.md: -------------------------------------------------------------------------------- 1 | # content-plugin 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Building 6 | 7 | Run `nx build content-plugin` to build the library. 8 | 9 | ## Running unit tests 10 | 11 | Run `nx test content-plugin` to execute the unit tests via [Jest](https://jestjs.io). 12 | -------------------------------------------------------------------------------- /packages/content-plugin/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "content-plugin", 3 | "version": "0.0.1", 4 | "main": "./src/index.js", 5 | "type": "commonjs" 6 | } 7 | -------------------------------------------------------------------------------- /packages/content-plugin/src/index.ts: -------------------------------------------------------------------------------- 1 | export default void 0; 2 | -------------------------------------------------------------------------------- /packages/content-plugin/src/migrations/update-markdown-renderer-feature/compat.ts: -------------------------------------------------------------------------------- 1 | import { convertNxGenerator } from '@nx/devkit'; 2 | import updateMarkdownRendererFeature from './update-markdown-renderer-feature'; 3 | 4 | export default convertNxGenerator(updateMarkdownRendererFeature); 5 | -------------------------------------------------------------------------------- /packages/content-plugin/src/migrations/update-markdown-version/compat.ts: -------------------------------------------------------------------------------- 1 | import { convertNxGenerator } from '@nx/devkit'; 2 | import updateMarkdownVersion from './update-markdown-version'; 3 | 4 | export default convertNxGenerator(updateMarkdownVersion); 5 | -------------------------------------------------------------------------------- /packages/content-plugin/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "CommonJS" 5 | }, 6 | "files": [], 7 | "include": [], 8 | "references": [ 9 | { 10 | "path": "./tsconfig.lib.json" 11 | }, 12 | { 13 | "path": "./tsconfig.spec.json" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /packages/content-plugin/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "declaration": true, 6 | "types": ["node"] 7 | }, 8 | "include": ["src/**/*.ts"], 9 | "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/content-plugin/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": ["src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"], 9 | "exclude": [ 10 | "src/**/files/**/*.test.ts", 11 | "src/**/files/**/*.spec.ts", 12 | "src/**/files/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/content/README.md: -------------------------------------------------------------------------------- 1 | # Analog 2 | 3 | The fullstack meta-framework for Angular 4 | 5 | Learn more at [analogjs.org](https://analogjs.org) 6 | -------------------------------------------------------------------------------- /packages/content/ng-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", 3 | "dest": "../../node_modules/@analogjs/content", 4 | "lib": { 5 | "entryFile": "src/index.ts" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/content/og/README.md: -------------------------------------------------------------------------------- 1 | # @analogjs/content/og 2 | 3 | Secondary entry point of `@analogjs/content`. It can be used by importing from `@analogjs/content/og`. 4 | -------------------------------------------------------------------------------- /packages/content/og/ng-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "lib": { 3 | "entryFile": "src/index.ts" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /packages/content/og/src/index.ts: -------------------------------------------------------------------------------- 1 | export { ImageResponse } from './lib/og'; 2 | export { ImageResponseOptions } from './lib/options'; 3 | -------------------------------------------------------------------------------- /packages/content/og/src/lib/options.ts: -------------------------------------------------------------------------------- 1 | import type { SatoriOptions } from 'satori/wasm'; 2 | 3 | export interface ImageResponseOptions { 4 | width?: number; 5 | height?: number; 6 | fonts?: SatoriOptions['fonts']; 7 | debug?: boolean; 8 | status?: number; 9 | statusText?: string; 10 | headers?: Record; 11 | tailwindConfig?: SatoriOptions['tailwindConfig']; 12 | } 13 | -------------------------------------------------------------------------------- /packages/content/prism-highlighter/README.md: -------------------------------------------------------------------------------- 1 | # @analogjs/content/prism-highlighter 2 | 3 | Secondary entry point of `@analogjs/content`. It can be used by importing from `@analogjs/content/prism-highlighter`. 4 | -------------------------------------------------------------------------------- /packages/content/prism-highlighter/ng-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "lib": { 3 | "entryFile": "src/index.ts" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /packages/content/shiki-highlighter/README.md: -------------------------------------------------------------------------------- 1 | # @analogjs/content/shiki-highlighter 2 | 3 | Secondary entry point of `@analogjs/content`. It can be used by importing from `@analogjs/content/shiki-highlighter`. 4 | -------------------------------------------------------------------------------- /packages/content/shiki-highlighter/ng-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "lib": { 3 | "entryFile": "src/index.ts" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /packages/content/src/lib/content-file.ts: -------------------------------------------------------------------------------- 1 | export interface ContentFile< 2 | Attributes extends Record = Record, 3 | > { 4 | filename: string; 5 | slug: string; 6 | content?: string | object; 7 | attributes: Attributes; 8 | } 9 | -------------------------------------------------------------------------------- /packages/content/src/lib/parse-raw-content-file.ts: -------------------------------------------------------------------------------- 1 | import fm from 'front-matter'; 2 | 3 | export function parseRawContentFile>( 4 | rawContentFile: string, 5 | ): { content: string; attributes: Attributes } { 6 | const { body, attributes } = fm(rawContentFile); 7 | return { content: body, attributes }; 8 | } 9 | -------------------------------------------------------------------------------- /packages/content/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vite-plugin-angular/setup-vitest'; 2 | import '@angular/compiler'; 3 | 4 | /** 5 | * Initialize TestBed for all tests inside of content 6 | */ 7 | import { TestBed } from '@angular/core/testing'; 8 | import { 9 | BrowserDynamicTestingModule, 10 | platformBrowserDynamicTesting, 11 | } from '@angular/platform-browser-dynamic/testing'; 12 | 13 | TestBed.initTestEnvironment( 14 | BrowserDynamicTestingModule, 15 | platformBrowserDynamicTesting(), 16 | ); 17 | -------------------------------------------------------------------------------- /packages/content/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "declaration": true, 6 | "declarationMap": true, 7 | "inlineSources": true, 8 | "types": [], 9 | "allowJs": true 10 | }, 11 | "exclude": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts"], 12 | "include": ["**/*.ts"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/content/tsconfig.lib.prod.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.lib.json", 3 | "compilerOptions": { 4 | "declarationMap": false 5 | }, 6 | "angularCompilerOptions": { 7 | "compilationMode": "partial" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/content/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["node", "vitest/globals"] 7 | }, 8 | "files": ["src/test-setup.ts"], 9 | "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/create-analog/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /packages/create-analog/.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | __tests__ 3 | yarn.lock 4 | project.json -------------------------------------------------------------------------------- /packages/create-analog/files/analog-env.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.analog' { 2 | import { Type } from '@angular/core'; 3 | 4 | const cmp: Type; 5 | export default cmp; 6 | } 7 | 8 | declare module '*.ag' { 9 | import { Type } from '@angular/core'; 10 | 11 | const cmp: Type; 12 | export default cmp; 13 | } 14 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v16/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v16/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 3 | "recommendations": ["angular.ng-template", "analogjs.vscode-analog"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v16/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/create-analog/template-angular-v16/favicon.ico -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v16/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | MyApp 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v16/src/app/app.config.ts: -------------------------------------------------------------------------------- 1 | import { provideHttpClient } from '@angular/common/http'; 2 | import { ApplicationConfig } from '@angular/core'; 3 | import { provideClientHydration } from '@angular/platform-browser'; 4 | import { provideFileRouter } from '@analogjs/router'; 5 | 6 | export const appConfig: ApplicationConfig = { 7 | providers: [ 8 | provideFileRouter(), 9 | provideHttpClient(), 10 | provideClientHydration(), 11 | ], 12 | }; 13 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v16/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/create-analog/template-angular-v16/src/assets/.gitkeep -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v16/src/main.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | 4 | import { AppComponent } from './app/app.component'; 5 | import { appConfig } from './app/app.config'; 6 | 7 | bootstrapApplication(AppComponent, appConfig); 8 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v16/src/server/routes/v1/hello.ts: -------------------------------------------------------------------------------- 1 | import { defineEventHandler } from 'h3'; 2 | 3 | export default defineEventHandler(() => ({ message: 'Hello World' })); 4 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v16/src/test.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vitest-angular/setup-zone'; 2 | 3 | import { 4 | BrowserDynamicTestingModule, 5 | platformBrowserDynamicTesting, 6 | } from '@angular/platform-browser-dynamic/testing'; 7 | import { getTestBed } from '@angular/core/testing'; 8 | 9 | getTestBed().initTestEnvironment( 10 | BrowserDynamicTestingModule, 11 | platformBrowserDynamicTesting() 12 | ); 13 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v16/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v16/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "composite": false, 6 | "outDir": "./out-tsc/app", 7 | "types": [] 8 | }, 9 | "files": ["src/main.ts", "src/main.server.ts"], 10 | "include": [ 11 | "src/**/*.d.ts", 12 | "src/app/routes/**/*.ts", 13 | "src/app/pages/**/*.page.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v16/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "composite": false, 6 | "outDir": "./out-tsc/spec", 7 | "types": ["node", "vitest/globals"] 8 | }, 9 | "files": ["src/test.ts"], 10 | "include": ["src/**/*.spec.ts", "src/**/*.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v17/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v17/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 3 | "recommendations": ["angular.ng-template", "analogjs.vscode-analog"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v17/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/create-analog/template-angular-v17/favicon.ico -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v17/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | MyApp 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v17/src/app/app.config.ts: -------------------------------------------------------------------------------- 1 | import { provideHttpClient, withFetch } from '@angular/common/http'; 2 | import { ApplicationConfig } from '@angular/core'; 3 | import { provideClientHydration } from '@angular/platform-browser'; 4 | import { provideFileRouter } from '@analogjs/router'; 5 | 6 | export const appConfig: ApplicationConfig = { 7 | providers: [ 8 | provideFileRouter(), 9 | provideHttpClient(withFetch()), 10 | provideClientHydration(), 11 | ], 12 | }; 13 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v17/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/create-analog/template-angular-v17/src/assets/.gitkeep -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v17/src/main.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | 4 | import { AppComponent } from './app/app.component'; 5 | import { appConfig } from './app/app.config'; 6 | 7 | bootstrapApplication(AppComponent, appConfig); 8 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v17/src/server/routes/v1/hello.ts: -------------------------------------------------------------------------------- 1 | import { defineEventHandler } from 'h3'; 2 | 3 | export default defineEventHandler(() => ({ message: 'Hello World' })); 4 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v17/src/test.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vitest-angular/setup-zone'; 2 | 3 | import { 4 | BrowserDynamicTestingModule, 5 | platformBrowserDynamicTesting, 6 | } from '@angular/platform-browser-dynamic/testing'; 7 | import { getTestBed } from '@angular/core/testing'; 8 | 9 | getTestBed().initTestEnvironment( 10 | BrowserDynamicTestingModule, 11 | platformBrowserDynamicTesting() 12 | ); 13 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v17/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/app", 6 | "types": [] 7 | }, 8 | "files": ["src/main.ts", "src/main.server.ts"], 9 | "include": [ 10 | "src/**/*.d.ts", 11 | "src/app/routes/**/*.ts", 12 | "src/app/pages/**/*.page.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v17/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/spec", 6 | "target": "es2016", 7 | "types": ["node", "vitest/globals"] 8 | }, 9 | "files": ["src/test.ts"], 10 | "include": ["src/**/*.spec.ts", "src/**/*.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v18/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v18/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 3 | "recommendations": ["angular.ng-template", "analogjs.vscode-analog"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v18/public/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/create-analog/template-angular-v18/public/.gitkeep -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v18/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/create-analog/template-angular-v18/public/favicon.ico -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v18/src/app/app-root.ag: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 | 17 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v18/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterOutlet } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: 'app-root', 6 | standalone: true, 7 | imports: [RouterOutlet], 8 | template: ``, 9 | styles: ` 10 | :host { 11 | max-width: 1280px; 12 | margin: 0 auto; 13 | padding: 2rem; 14 | text-align: center; 15 | } 16 | `, 17 | }) 18 | export class AppComponent {} 19 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v18/src/app/app.config.server.ts: -------------------------------------------------------------------------------- 1 | import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; 2 | import { provideServerRendering } from '@angular/platform-server'; 3 | 4 | import { appConfig } from './app.config'; 5 | 6 | const serverConfig: ApplicationConfig = { 7 | providers: [provideServerRendering()], 8 | }; 9 | 10 | export const config = mergeApplicationConfig(appConfig, serverConfig); 11 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v18/src/main.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | 4 | __APP_COMPONENT_IMPORT__ 5 | import { appConfig } from './app/app.config'; 6 | 7 | bootstrapApplication(__APP_COMPONENT__, appConfig); 8 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v18/src/server/routes/v1/hello.ts: -------------------------------------------------------------------------------- 1 | import { defineEventHandler } from 'h3'; 2 | 3 | export default defineEventHandler(() => ({ message: 'Hello World' })); 4 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v18/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vitest-angular/setup-zone'; 2 | 3 | import { 4 | BrowserDynamicTestingModule, 5 | platformBrowserDynamicTesting, 6 | } from '@angular/platform-browser-dynamic/testing'; 7 | import { getTestBed } from '@angular/core/testing'; 8 | 9 | getTestBed().initTestEnvironment( 10 | BrowserDynamicTestingModule, 11 | platformBrowserDynamicTesting() 12 | ); 13 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v18/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v18/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/app", 6 | "types": [] 7 | }, 8 | "files": ["src/main.ts", "src/main.server.ts"], 9 | "include": [ 10 | "src/**/*.d.ts", 11 | "src/app/pages/**/*.page.ts", 12 | "src/server/middleware/**/*.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v18/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/spec", 6 | "target": "es2016", 7 | "types": ["node", "vitest/globals"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v19/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v19/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 3 | "recommendations": ["angular.ng-template", "analogjs.vscode-analog"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v19/public/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/create-analog/template-angular-v19/public/.gitkeep -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v19/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/create-analog/template-angular-v19/public/favicon.ico -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v19/src/app/app-root.ag: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 | 17 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v19/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterOutlet } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: 'app-root', 6 | imports: [RouterOutlet], 7 | template: ``, 8 | styles: ` 9 | :host { 10 | max-width: 1280px; 11 | margin: 0 auto; 12 | padding: 2rem; 13 | text-align: center; 14 | } 15 | `, 16 | }) 17 | export class AppComponent {} 18 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v19/src/app/app.config.server.ts: -------------------------------------------------------------------------------- 1 | import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; 2 | import { provideServerRendering } from '@angular/platform-server'; 3 | 4 | import { appConfig } from './app.config'; 5 | 6 | const serverConfig: ApplicationConfig = { 7 | providers: [provideServerRendering()], 8 | }; 9 | 10 | export const config = mergeApplicationConfig(appConfig, serverConfig); 11 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v19/src/main.server.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js/node'; 2 | import '@angular/platform-server/init'; 3 | import { render } from '@analogjs/router/server'; 4 | 5 | __APP_COMPONENT_IMPORT__ 6 | import { config } from './app/app.config.server'; 7 | 8 | export default render(__APP_COMPONENT__, config); 9 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v19/src/main.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | 4 | __APP_COMPONENT_IMPORT__ 5 | import { appConfig } from './app/app.config'; 6 | 7 | bootstrapApplication(__APP_COMPONENT__, appConfig); 8 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v19/src/server/routes/api/v1/hello.ts: -------------------------------------------------------------------------------- 1 | import { defineEventHandler } from 'h3'; 2 | 3 | export default defineEventHandler(() => ({ message: 'Hello World' })); 4 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v19/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vitest-angular/setup-zone'; 2 | 3 | import { 4 | BrowserDynamicTestingModule, 5 | platformBrowserDynamicTesting, 6 | } from '@angular/platform-browser-dynamic/testing'; 7 | import { getTestBed } from '@angular/core/testing'; 8 | 9 | getTestBed().initTestEnvironment( 10 | BrowserDynamicTestingModule, 11 | platformBrowserDynamicTesting() 12 | ); 13 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v19/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v19/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/app", 6 | "types": [] 7 | }, 8 | "files": ["src/main.ts", "src/main.server.ts"], 9 | "include": [ 10 | "src/**/*.d.ts", 11 | "src/app/pages/**/*.page.ts", 12 | "src/server/middleware/**/*.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/create-analog/template-angular-v19/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/spec", 6 | "target": "es2016", 7 | "types": ["node", "vitest/globals"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /packages/create-analog/template-blog/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /packages/create-analog/template-blog/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 3 | "recommendations": ["angular.ng-template", "analogjs.vscode-analog"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/create-analog/template-blog/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | __PROJECT_TITLE__ 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /packages/create-analog/template-blog/public/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/create-analog/template-blog/public/.gitkeep -------------------------------------------------------------------------------- /packages/create-analog/template-blog/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/create-analog/template-blog/public/favicon.ico -------------------------------------------------------------------------------- /packages/create-analog/template-blog/src/app/app.config.server.ts: -------------------------------------------------------------------------------- 1 | import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; 2 | import { provideServerRendering } from '@angular/platform-server'; 3 | import { appConfig } from './app.config'; 4 | 5 | const serverConfig: ApplicationConfig = { 6 | providers: [provideServerRendering()], 7 | }; 8 | 9 | export const config = mergeApplicationConfig(appConfig, serverConfig); 10 | -------------------------------------------------------------------------------- /packages/create-analog/template-blog/src/app/pages/index.page.ts: -------------------------------------------------------------------------------- 1 | import { RouteMeta } from '@analogjs/router'; 2 | 3 | export const routeMeta: RouteMeta = { 4 | redirectTo: '/blog', 5 | pathMatch: 'full', 6 | }; 7 | -------------------------------------------------------------------------------- /packages/create-analog/template-blog/src/app/post-attributes.ts: -------------------------------------------------------------------------------- 1 | export default interface PostAttributes { 2 | title: string; 3 | slug: string; 4 | description: string; 5 | coverImage: string; 6 | } 7 | -------------------------------------------------------------------------------- /packages/create-analog/template-blog/src/main.server.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js/node'; 2 | import '@angular/platform-server/init'; 3 | import { render } from '@analogjs/router/server'; 4 | 5 | __APP_COMPONENT_IMPORT__ 6 | import { config } from './app/app.config.server'; 7 | 8 | export default render(__APP_COMPONENT__, config); 9 | -------------------------------------------------------------------------------- /packages/create-analog/template-blog/src/main.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | 4 | __APP_COMPONENT_IMPORT__ 5 | import { appConfig } from './app/app.config'; 6 | 7 | bootstrapApplication(__APP_COMPONENT__, appConfig); 8 | -------------------------------------------------------------------------------- /packages/create-analog/template-blog/src/server/routes/api/v1/hello.ts: -------------------------------------------------------------------------------- 1 | import { defineEventHandler } from 'h3'; 2 | 3 | export default defineEventHandler(() => ({ message: 'Hello World' })); 4 | -------------------------------------------------------------------------------- /packages/create-analog/template-blog/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@angular/compiler'; 2 | import '@analogjs/vitest-angular/setup-zone'; 3 | 4 | import { 5 | BrowserTestingModule, 6 | platformBrowserTesting, 7 | } from '@angular/platform-browser/testing'; 8 | import { getTestBed } from '@angular/core/testing'; 9 | 10 | getTestBed().initTestEnvironment( 11 | BrowserTestingModule, 12 | platformBrowserTesting() 13 | ); 14 | -------------------------------------------------------------------------------- /packages/create-analog/template-blog/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/create-analog/template-blog/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/app", 6 | "types": [] 7 | }, 8 | "files": ["src/main.ts", "src/main.server.ts"], 9 | "include": [ 10 | "src/**/*.d.ts", 11 | "src/app/pages/**/*.page.ts", 12 | "src/server/middleware/**/*.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/create-analog/template-blog/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/spec", 6 | "target": "es2016", 7 | "types": ["node", "vitest/globals"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": ["src/**/*.spec.ts", "src/**/*.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /packages/create-analog/template-latest/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /packages/create-analog/template-latest/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 3 | "recommendations": ["angular.ng-template", "analogjs.vscode-analog"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/create-analog/template-latest/public/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/create-analog/template-latest/public/.gitkeep -------------------------------------------------------------------------------- /packages/create-analog/template-latest/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/create-analog/template-latest/public/favicon.ico -------------------------------------------------------------------------------- /packages/create-analog/template-latest/src/app/app-root.ag: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 | 17 | -------------------------------------------------------------------------------- /packages/create-analog/template-latest/src/app/app.config.server.ts: -------------------------------------------------------------------------------- 1 | import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; 2 | import { provideServerRendering } from '@angular/platform-server'; 3 | 4 | import { appConfig } from './app.config'; 5 | 6 | const serverConfig: ApplicationConfig = { 7 | providers: [provideServerRendering()], 8 | }; 9 | 10 | export const config = mergeApplicationConfig(appConfig, serverConfig); 11 | -------------------------------------------------------------------------------- /packages/create-analog/template-latest/src/app/app.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterOutlet } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: 'app-root', 6 | imports: [RouterOutlet], 7 | template: ``, 8 | styles: ` 9 | :host { 10 | max-width: 1280px; 11 | margin: 0 auto; 12 | padding: 2rem; 13 | text-align: center; 14 | } 15 | `, 16 | }) 17 | export class AppComponent {} 18 | -------------------------------------------------------------------------------- /packages/create-analog/template-latest/src/app/pages/index.page.ag: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /packages/create-analog/template-latest/src/app/pages/index.page.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | import { AnalogWelcome } from './analog-welcome'; 4 | 5 | @Component({ 6 | selector: 'app-home', 7 | imports: [AnalogWelcome], 8 | template: ` 9 | 10 | `, 11 | }) 12 | export default class HomeComponent { 13 | } 14 | -------------------------------------------------------------------------------- /packages/create-analog/template-latest/src/main.server.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js/node'; 2 | import '@angular/platform-server/init'; 3 | import { render } from '@analogjs/router/server'; 4 | 5 | __APP_COMPONENT_IMPORT__ 6 | import { config } from './app/app.config.server'; 7 | 8 | export default render(__APP_COMPONENT__, config); 9 | -------------------------------------------------------------------------------- /packages/create-analog/template-latest/src/main.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | 4 | __APP_COMPONENT_IMPORT__ 5 | import { appConfig } from './app/app.config'; 6 | 7 | bootstrapApplication(__APP_COMPONENT__, appConfig); 8 | -------------------------------------------------------------------------------- /packages/create-analog/template-latest/src/server/routes/api/v1/hello.ts: -------------------------------------------------------------------------------- 1 | import { defineEventHandler } from 'h3'; 2 | 3 | export default defineEventHandler(() => ({ message: 'Hello World' })); 4 | -------------------------------------------------------------------------------- /packages/create-analog/template-latest/src/styles.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | display: block; 3 | height: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /packages/create-analog/template-latest/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@angular/compiler'; 2 | import '@analogjs/vitest-angular/setup-zone'; 3 | 4 | import { 5 | BrowserTestingModule, 6 | platformBrowserTesting, 7 | } from '@angular/platform-browser/testing'; 8 | import { getTestBed } from '@angular/core/testing'; 9 | 10 | getTestBed().initTestEnvironment( 11 | BrowserTestingModule, 12 | platformBrowserTesting() 13 | ); 14 | -------------------------------------------------------------------------------- /packages/create-analog/template-latest/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/create-analog/template-latest/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/app", 6 | "types": [] 7 | }, 8 | "files": ["src/main.ts", "src/main.server.ts"], 9 | "include": [ 10 | "src/**/*.d.ts", 11 | "src/app/pages/**/*.page.ts", 12 | "src/server/middleware/**/*.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/create-analog/template-latest/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/spec", 6 | "target": "es2016", 7 | "types": ["node", "vitest/globals"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /packages/create-analog/template-minimal/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /packages/create-analog/template-minimal/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 3 | "recommendations": ["angular.ng-template", "analogjs.vscode-analog"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/create-analog/template-minimal/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 3 | "version": "0.2.0", 4 | "configurations": [ 5 | { 6 | "name": "ng serve", 7 | "type": "chrome", 8 | "request": "launch", 9 | "preLaunchTask": "npm: start", 10 | "url": "http://localhost:5173/" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /packages/create-analog/template-minimal/public/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/create-analog/template-minimal/public/.gitkeep -------------------------------------------------------------------------------- /packages/create-analog/template-minimal/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/create-analog/template-minimal/public/favicon.ico -------------------------------------------------------------------------------- /packages/create-analog/template-minimal/src/app/app-root.ag: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /packages/create-analog/template-minimal/src/app/app.config.server.ts: -------------------------------------------------------------------------------- 1 | import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; 2 | import { provideServerRendering } from '@angular/platform-server'; 3 | 4 | import { appConfig } from './app.config'; 5 | 6 | const serverConfig: ApplicationConfig = { 7 | providers: [provideServerRendering()], 8 | }; 9 | 10 | export const config = mergeApplicationConfig(appConfig, serverConfig); 11 | -------------------------------------------------------------------------------- /packages/create-analog/template-minimal/src/app/app.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterOutlet } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: 'app-root', 6 | imports: [RouterOutlet], 7 | template: ``, 8 | }) 9 | export class AppComponent {} 10 | -------------------------------------------------------------------------------- /packages/create-analog/template-minimal/src/main.server.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js/node'; 2 | import '@angular/platform-server/init'; 3 | import { render } from '@analogjs/router/server'; 4 | 5 | __APP_COMPONENT_IMPORT__ 6 | import { config } from './app/app.config.server'; 7 | 8 | export default render(__APP_COMPONENT__, config); 9 | -------------------------------------------------------------------------------- /packages/create-analog/template-minimal/src/main.ts: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | 4 | __APP_COMPONENT_IMPORT__ 5 | import { appConfig } from './app/app.config'; 6 | 7 | bootstrapApplication(__APP_COMPONENT__, appConfig); 8 | -------------------------------------------------------------------------------- /packages/create-analog/template-minimal/src/styles.css: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | -------------------------------------------------------------------------------- /packages/create-analog/template-minimal/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/create-analog/template-minimal/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/app", 6 | "types": [] 7 | }, 8 | "files": ["src/main.ts", "src/main.server.ts"], 9 | "include": [ 10 | "src/**/*.d.ts", 11 | "src/app/pages/**/*.page.ts", 12 | "src/server/middleware/**/*.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/create-analog/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "target": "es2020", 5 | "module": "es2020", 6 | "forceConsistentCasingInFileNames": true, 7 | "strict": true, 8 | "noImplicitOverride": true, 9 | "noPropertyAccessFromIndexSignature": true, 10 | "noImplicitReturns": true, 11 | "noFallthroughCasesInSwitch": true 12 | }, 13 | "files": [], 14 | "include": [] 15 | } 16 | -------------------------------------------------------------------------------- /packages/create-analog/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "outDir": "../../dist/out-tsc", 6 | "inlineSourceMap": true, 7 | "sourceMap": false, 8 | "declaration": true, 9 | "types": [] 10 | }, 11 | "include": ["**/*.ts"], 12 | "exclude": [ 13 | "vite.config.ts", 14 | "**/*.spec.ts", 15 | "**/*.test.ts", 16 | "src/test-setup.ts" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /packages/create-analog/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["vitest/globals", "node"] 7 | }, 8 | "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/create-analog/vite.config.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | import { defineConfig } from 'vite'; 4 | 5 | // https://vitejs.dev/config/ 6 | export default defineConfig(({ mode }) => { 7 | return { 8 | test: { 9 | globals: true, 10 | environment: 'jsdom', 11 | include: ['__tests__/**/*.spec.ts'], 12 | reporters: ['default'], 13 | }, 14 | define: { 15 | 'import.meta.vitest': mode !== 'production', 16 | }, 17 | }; 18 | }); 19 | -------------------------------------------------------------------------------- /packages/nx-plugin/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | [ 4 | "@nx/js/babel", 5 | { 6 | "useBuiltIns": "usage" 7 | } 8 | ] 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /packages/nx-plugin/README.md: -------------------------------------------------------------------------------- 1 | # @analogjs/platform 2 | 3 | Official plugin to add Analog to your Nx monorepo. 4 | 5 | ## Supported Generators 6 | 7 | ### app 8 | 9 | Creates a preconfigured Analog application. 10 | 11 | ```sh 12 | nx g @analogjs/platform:application analog-app 13 | ``` 14 | 15 | ## Development 16 | 17 | ### Building 18 | 19 | Run `nx build nx-plugin` to build the library. 20 | 21 | ### Running unit tests 22 | 23 | Run `nx test nx-plugin` to execute the unit tests via [Jest](https://jestjs.io). 24 | -------------------------------------------------------------------------------- /packages/nx-plugin/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@analogjs/nx", 3 | "version": "0.0.1", 4 | "main": "src/index.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/executors/vite-dev-server/compat.ts: -------------------------------------------------------------------------------- 1 | import { convertNxExecutor } from '@nx/devkit'; 2 | 3 | import viteDevServerExecutor from './vite-dev-server.impl'; 4 | 5 | export default convertNxExecutor(viteDevServerExecutor); 6 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/executors/vite-dev-server/schema.d.ts: -------------------------------------------------------------------------------- 1 | export { ViteDevServerExecutorOptions } from '@nx/vite/executors'; 2 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/executors/vite-dev-server/vite-dev-server.impl.ts: -------------------------------------------------------------------------------- 1 | import { viteDevServerExecutor } from '@nx/vite/executors'; 2 | 3 | export default viteDevServerExecutor; 4 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/executors/vite/compat.ts: -------------------------------------------------------------------------------- 1 | import { convertNxExecutor } from '@nx/devkit'; 2 | 3 | import viteBuildExecutor from './vite.impl'; 4 | 5 | export default convertNxExecutor(viteBuildExecutor); 6 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/executors/vite/schema.d.ts: -------------------------------------------------------------------------------- 1 | import type { FileReplacement } from '@nx/vite/plugins/rollup-replace-files.plugin'; 2 | export { ViteBuildExecutorOptions } from '@nx/vite/executors'; 3 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/executors/vite/vite.impl.ts: -------------------------------------------------------------------------------- 1 | import { viteBuildExecutor } from '@nx/vite/executors'; 2 | 3 | export default viteBuildExecutor; 4 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/executors/vitest/compat.ts: -------------------------------------------------------------------------------- 1 | import { convertNxExecutor } from '@nx/devkit'; 2 | 3 | import vitestExecutor from './vitest.impl'; 4 | 5 | export default convertNxExecutor(vitestExecutor); 6 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/executors/vitest/schema.d.ts: -------------------------------------------------------------------------------- 1 | export { VitestExecutorOptions } from '@nx/vite/executors'; 2 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/executors/vitest/vitest.impl.ts: -------------------------------------------------------------------------------- 1 | import { vitestExecutor } from '@nx/vite/executors'; 2 | 3 | export default vitestExecutor; 4 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/compat.ts: -------------------------------------------------------------------------------- 1 | import { convertNxGenerator } from '@nx/devkit'; 2 | import generator from './generator'; 3 | 4 | export default convertNxGenerator(generator); 5 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/index-page/src/app/pages/(home).page.ts__template__: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | import { AnalogWelcomeComponent } from './analog-welcome.component'; 4 | 5 | @Component({ 6 | selector: '<%= fileName %>-home', 7 | <% if (majorAngularVersion < 19) { %>standalone: true,<% } %> 8 | imports: [AnalogWelcomeComponent], 9 | template: ` 10 | <<%= fileName %>-analog-welcome/> 11 | `, 12 | }) 13 | export default class HomeComponent { 14 | } 15 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/tailwind/v2/postcss.config.cjs__template__: -------------------------------------------------------------------------------- 1 | const { join } = require('node:path'); 2 | 3 | module.exports = { 4 | plugins: { 5 | tailwindcss: { 6 | config: join(__dirname, 'tailwind.config.cjs') 7 | }, 8 | autoprefixer: {} 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/tailwind/v2/tailwind.config.cjs__template__: -------------------------------------------------------------------------------- 1 | const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); 2 | const { join } = require('node:path'); 3 | 4 | /** @type {import('tailwindcss').Config} */ 5 | module.exports = { 6 | content: [ 7 | join(__dirname, '<%= relativeSourceRoot %>/**/!(*.stories|*.spec).{ts,html}'), 8 | ...createGlobPatternsForDependencies(__dirname), 9 | ], 10 | theme: { 11 | extend: {}, 12 | }, 13 | plugins: [], 14 | }; 15 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/tailwind/v3/postcss.config.cjs__template__: -------------------------------------------------------------------------------- 1 | const { join } = require('node:path'); 2 | 3 | module.exports = { 4 | plugins: { 5 | tailwindcss: { 6 | config: join(__dirname, 'tailwind.config.ts') 7 | }, 8 | autoprefixer: {} 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/tailwind/v3/tailwind.config.ts__template__: -------------------------------------------------------------------------------- 1 | import type { Config } from 'tailwindcss'; 2 | import { createGlobPatternsForDependencies } from '@nx/angular/tailwind'; 3 | import { join } from 'node:path'; 4 | 5 | export default { 6 | content: [ 7 | join(__dirname, '<%= relativeSourceRoot %>/**/!(*.stories|*.spec).{ts,html,md,analog,ag}'), 8 | ...createGlobPatternsForDependencies(__dirname), 9 | ], 10 | theme: { 11 | extend: {}, 12 | }, 13 | plugins: [], 14 | } satisfies Config; 15 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v15/src/app/app.component.ts__template__: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterOutlet } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: '<%= fileName %>-root', 6 | standalone: true, 7 | imports: [RouterOutlet], 8 | template: ` `, 9 | }) 10 | export class AppComponent {} 11 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v15/src/main.providers.ts__template__: -------------------------------------------------------------------------------- 1 | /** 2 | * Common providers shared with client and server-side. 3 | */ 4 | 5 | export const mainProviders = []; 6 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v15/src/public/assets/.gitkeep__template__: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/nx-plugin/src/generators/app/files/template-angular-v15/src/public/assets/.gitkeep__template__ -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v15/src/server/routes/v1/hello.ts__template__: -------------------------------------------------------------------------------- 1 | import { defineEventHandler } from 'h3'; 2 | 3 | export default defineEventHandler(() => ({ message: 'Hello World' })); 4 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v15/src/styles.css__template__: -------------------------------------------------------------------------------- 1 | html, body { 2 | display: block; 3 | height: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v15/src/test-setup.ts__template__: -------------------------------------------------------------------------------- 1 | import '@analogjs/vitest-angular/setup-zone'; 2 | 3 | import { 4 | BrowserDynamicTestingModule, 5 | platformBrowserDynamicTesting, 6 | } from '@angular/platform-browser-dynamic/testing'; 7 | import { getTestBed } from '@angular/core/testing'; 8 | 9 | getTestBed().initTestEnvironment( 10 | BrowserDynamicTestingModule, 11 | platformBrowserDynamicTesting() 12 | ); 13 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v15/src/vite-env.d.ts__template__: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v15/tsconfig.editor.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["**/*.ts"], 4 | "compilerOptions": { 5 | "types": ["node", "vitest/globals"] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v15/tsconfig.spec.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "<%= offsetFromRoot %>dist/out-tsc", 5 | "types": ["node", "vitest/globals"] 6 | }, 7 | "files": [ 8 | "src/test-setup.ts", 9 | ], 10 | "include": [ 11 | "src/**/*.spec.ts", 12 | "**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v16/src/app/app.component.ts__template__: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterOutlet } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: '<%= fileName %>-root', 6 | standalone: true, 7 | imports: [RouterOutlet], 8 | template: ` `, 9 | }) 10 | export class AppComponent {} 11 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v16/src/app/app.config.server.ts__template__: -------------------------------------------------------------------------------- 1 | import { ApplicationConfig, mergeApplicationConfig } from '@angular/core'; 2 | import { provideServerRendering } from '@angular/platform-server'; 3 | import { appConfig } from './app.config'; 4 | 5 | const serverConfig: ApplicationConfig = { 6 | providers: [provideServerRendering()], 7 | }; 8 | 9 | export const config = mergeApplicationConfig(appConfig, serverConfig); 10 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v16/src/main.ts__template__: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | 4 | import { AppComponent } from './app/app.component'; 5 | import { appConfig } from './app/app.config'; 6 | 7 | bootstrapApplication(AppComponent, appConfig).catch((err) => 8 | console.error(err) 9 | ); 10 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v16/src/public/assets/.gitkeep__template__: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/nx-plugin/src/generators/app/files/template-angular-v16/src/public/assets/.gitkeep__template__ -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v16/src/server/routes/v1/hello.ts__template__: -------------------------------------------------------------------------------- 1 | import { defineEventHandler } from 'h3'; 2 | 3 | export default defineEventHandler(() => ({ message: 'Hello World' })); 4 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v16/src/styles.css__template__: -------------------------------------------------------------------------------- 1 | html, body { 2 | display: block; 3 | height: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v16/src/test-setup.ts__template__: -------------------------------------------------------------------------------- 1 | import '@analogjs/vitest-angular/setup-zone'; 2 | 3 | import { 4 | BrowserDynamicTestingModule, 5 | platformBrowserDynamicTesting, 6 | } from '@angular/platform-browser-dynamic/testing'; 7 | import { getTestBed } from '@angular/core/testing'; 8 | 9 | getTestBed().initTestEnvironment( 10 | BrowserDynamicTestingModule, 11 | platformBrowserDynamicTesting() 12 | ); 13 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v16/src/vite-env.d.ts__template__: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v16/tsconfig.editor.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["**/*.ts"], 4 | "compilerOptions": { 5 | "types": ["node", "vitest/globals"] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v16/tsconfig.spec.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "<%= offsetFromRoot %>dist/out-tsc", 5 | "types": ["node", "vitest/globals"] 6 | }, 7 | "files": [ 8 | "src/test-setup.ts", 9 | ], 10 | "include": [ 11 | "src/**/*.spec.ts", 12 | "**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v17/package.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module" 3 | } 4 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v17/src/app/app.component.ts__template__: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterOutlet } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: '<%= fileName %>-root', 6 | standalone: true, 7 | imports: [RouterOutlet], 8 | template: ` `, 9 | }) 10 | export class AppComponent {} 11 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v17/src/main.ts__template__: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | 4 | import { AppComponent } from './app/app.component'; 5 | import { appConfig } from './app/app.config'; 6 | 7 | bootstrapApplication(AppComponent, appConfig).catch((err) => 8 | console.error(err) 9 | ); 10 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v17/src/public/assets/.gitkeep__template__: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/nx-plugin/src/generators/app/files/template-angular-v17/src/public/assets/.gitkeep__template__ -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v17/src/server/routes/v1/hello.ts__template__: -------------------------------------------------------------------------------- 1 | import { defineEventHandler } from 'h3'; 2 | 3 | export default defineEventHandler(() => ({ message: 'Hello World' })); 4 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v17/src/styles.css__template__: -------------------------------------------------------------------------------- 1 | html, body { 2 | display: block; 3 | height: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v17/src/test-setup.ts__template__: -------------------------------------------------------------------------------- 1 | import '@analogjs/vitest-angular/setup-zone'; 2 | 3 | import { 4 | BrowserDynamicTestingModule, 5 | platformBrowserDynamicTesting, 6 | } from '@angular/platform-browser-dynamic/testing'; 7 | import { getTestBed } from '@angular/core/testing'; 8 | 9 | getTestBed().initTestEnvironment( 10 | BrowserDynamicTestingModule, 11 | platformBrowserDynamicTesting() 12 | ); 13 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v17/src/vite-env.d.ts__template__: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v17/tsconfig.editor.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["**/*.ts"], 4 | "compilerOptions": { 5 | "types": ["node", "vitest/globals"] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v17/tsconfig.spec.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "<%= offsetFromRoot %>dist/out-tsc", 5 | "types": ["node", "vitest/globals"] 6 | }, 7 | "files": [ 8 | "src/test-setup.ts", 9 | ], 10 | "include": [ 11 | "src/**/*.spec.ts", 12 | "**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v18/package.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module" 3 | } 4 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v18/public/.gitkeep__template__: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/nx-plugin/src/generators/app/files/template-angular-v18/public/.gitkeep__template__ -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v18/src/app/app.component.ts__template__: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterOutlet } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: '<%= fileName %>-root', 6 | standalone: true, 7 | imports: [RouterOutlet], 8 | template: ` `, 9 | }) 10 | export class AppComponent {} 11 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v18/src/app/app.config.server.ts__template__: -------------------------------------------------------------------------------- 1 | import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; 2 | import { provideServerRendering } from '@angular/platform-server'; 3 | 4 | import { appConfig } from './app.config'; 5 | 6 | const serverConfig: ApplicationConfig = { 7 | providers: [provideServerRendering()], 8 | }; 9 | 10 | export const config = mergeApplicationConfig(appConfig, serverConfig); 11 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v18/src/main.server.ts__template__: -------------------------------------------------------------------------------- 1 | import 'zone.js/node'; 2 | import '@angular/platform-server/init'; 3 | import { render } from '@analogjs/router/server'; 4 | 5 | import { config } from './app/app.config.server'; 6 | import { AppComponent } from './app/app.component'; 7 | 8 | export default render(AppComponent, config); 9 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v18/src/main.ts__template__: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | 4 | import { AppComponent } from './app/app.component'; 5 | import { appConfig } from './app/app.config'; 6 | 7 | bootstrapApplication(AppComponent, appConfig).catch((err) => 8 | console.error(err) 9 | ); 10 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v18/src/server/routes/api/v1/hello.ts__template__: -------------------------------------------------------------------------------- 1 | import { defineEventHandler } from 'h3'; 2 | 3 | export default defineEventHandler(() => ({ message: 'Hello World' })); 4 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v18/src/styles.css__template__: -------------------------------------------------------------------------------- 1 | html, body { 2 | display: block; 3 | height: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v18/src/test-setup.ts__template__: -------------------------------------------------------------------------------- 1 | import '@analogjs/vitest-angular/setup-zone'; 2 | 3 | import { 4 | BrowserDynamicTestingModule, 5 | platformBrowserDynamicTesting, 6 | } from '@angular/platform-browser-dynamic/testing'; 7 | import { getTestBed } from '@angular/core/testing'; 8 | 9 | getTestBed().initTestEnvironment( 10 | BrowserDynamicTestingModule, 11 | platformBrowserDynamicTesting() 12 | ); 13 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v18/src/vite-env.d.ts__template__: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v18/tsconfig.editor.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["**/*.ts"], 4 | "compilerOptions": { 5 | "types": ["node", "vitest/globals"] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v18/tsconfig.spec.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "<%= offsetFromRoot %>dist/out-tsc", 5 | "types": ["node", "vitest/globals"] 6 | }, 7 | "files": [ 8 | "src/test-setup.ts", 9 | ], 10 | "include": [ 11 | "src/**/*.spec.ts", 12 | "**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v19/package.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module" 3 | } 4 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v19/public/.gitkeep__template__: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/nx-plugin/src/generators/app/files/template-angular-v19/public/.gitkeep__template__ -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v19/src/app/app.component.ts__template__: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterOutlet } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: '<%= fileName %>-root', 6 | imports: [RouterOutlet], 7 | template: ` `, 8 | }) 9 | export class AppComponent {} 10 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v19/src/app/app.config.server.ts__template__: -------------------------------------------------------------------------------- 1 | import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; 2 | import { provideServerRendering } from '@angular/platform-server'; 3 | 4 | import { appConfig } from './app.config'; 5 | 6 | const serverConfig: ApplicationConfig = { 7 | providers: [provideServerRendering()], 8 | }; 9 | 10 | export const config = mergeApplicationConfig(appConfig, serverConfig); 11 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v19/src/main.server.ts__template__: -------------------------------------------------------------------------------- 1 | import 'zone.js/node'; 2 | import '@angular/platform-server/init'; 3 | import { render } from '@analogjs/router/server'; 4 | 5 | import { AppComponent } from './app/app.component'; 6 | import { config } from './app/app.config.server'; 7 | 8 | export default render(AppComponent, config); 9 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v19/src/main.ts__template__: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | 4 | import { AppComponent } from './app/app.component'; 5 | import { appConfig } from './app/app.config'; 6 | 7 | bootstrapApplication(AppComponent, appConfig).catch((err) => 8 | console.error(err) 9 | ); 10 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v19/src/server/routes/api/v1/hello.ts__template__: -------------------------------------------------------------------------------- 1 | import { defineEventHandler } from 'h3'; 2 | 3 | export default defineEventHandler(() => ({ message: 'Hello World' })); 4 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v19/src/styles.css__template__: -------------------------------------------------------------------------------- 1 | html, body { 2 | display: block; 3 | height: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v19/src/test-setup.ts__template__: -------------------------------------------------------------------------------- 1 | import '@analogjs/vitest-angular/setup-zone'; 2 | 3 | import { 4 | BrowserDynamicTestingModule, 5 | platformBrowserDynamicTesting, 6 | } from '@angular/platform-browser-dynamic/testing'; 7 | import { getTestBed } from '@angular/core/testing'; 8 | 9 | getTestBed().initTestEnvironment( 10 | BrowserDynamicTestingModule, 11 | platformBrowserDynamicTesting() 12 | ); 13 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v19/src/vite-env.d.ts__template__: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v19/tsconfig.editor.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["**/*.ts"], 4 | "compilerOptions": { 5 | "types": ["node", "vitest/globals"] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular-v19/tsconfig.spec.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "<%= offsetFromRoot %>dist/out-tsc", 5 | "types": ["node", "vitest/globals"] 6 | }, 7 | "files": [ 8 | "src/test-setup.ts", 9 | ], 10 | "include": [ 11 | "src/**/*.spec.ts", 12 | "**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular/package.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "type": "module" 3 | } 4 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular/public/.gitkeep__template__: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/nx-plugin/src/generators/app/files/template-angular/public/.gitkeep__template__ -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular/src/app/app.component.ts__template__: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterOutlet } from '@angular/router'; 3 | 4 | @Component({ 5 | selector: 'app-root', 6 | imports: [RouterOutlet], 7 | template: ` `, 8 | }) 9 | export class AppComponent {} 10 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular/src/app/app.config.server.ts__template__: -------------------------------------------------------------------------------- 1 | import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; 2 | import { provideServerRendering } from '@angular/platform-server'; 3 | 4 | import { appConfig } from './app.config'; 5 | 6 | const serverConfig: ApplicationConfig = { 7 | providers: [provideServerRendering()], 8 | }; 9 | 10 | export const config = mergeApplicationConfig(appConfig, serverConfig); 11 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular/src/main.server.ts__template__: -------------------------------------------------------------------------------- 1 | import 'zone.js/node'; 2 | import '@angular/platform-server/init'; 3 | import { render } from '@analogjs/router/server'; 4 | 5 | import { AppComponent } from './app/app.component'; 6 | import { config } from './app/app.config.server'; 7 | 8 | export default render(AppComponent, config); 9 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular/src/main.ts__template__: -------------------------------------------------------------------------------- 1 | import 'zone.js'; 2 | import { bootstrapApplication } from '@angular/platform-browser'; 3 | 4 | import { AppComponent } from './app/app.component'; 5 | import { appConfig } from './app/app.config'; 6 | 7 | bootstrapApplication(AppComponent, appConfig).catch((err) => 8 | console.error(err) 9 | ); 10 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular/src/server/routes/api/v1/hello.ts__template__: -------------------------------------------------------------------------------- 1 | import { defineEventHandler } from 'h3'; 2 | 3 | export default defineEventHandler(() => ({ message: 'Hello World' })); 4 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular/src/styles.css__template__: -------------------------------------------------------------------------------- 1 | html, body { 2 | display: block; 3 | height: 100%; 4 | } 5 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular/src/vite-env.d.ts__template__: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular/tsconfig.editor.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["**/*.ts"], 4 | "compilerOptions": { 5 | "types": ["node", "vitest/globals"] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/template-angular/tsconfig.spec.json__template__: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "<%= offsetFromRoot %>dist/out-tsc", 5 | "types": ["node", "vitest/globals"] 6 | }, 7 | "files": [ 8 | "src/test-setup.ts", 9 | ], 10 | "include": [ 11 | "src/**/*.spec.ts", 12 | "**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/trpc/src/note.ts__template__: -------------------------------------------------------------------------------- 1 | export type Note = { 2 | id: number; 3 | note: string; 4 | createdAt: string; 5 | }; 6 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/trpc/src/server/routes/api/trpc/[trpc].ts__template__: -------------------------------------------------------------------------------- 1 | import { createTrpcNitroHandler } from '@analogjs/trpc/server'; 2 | 3 | import { appRouter } from '../../../trpc/routers'; 4 | import { createContext } from '../../../trpc/context'; 5 | 6 | // export API handler 7 | export default createTrpcNitroHandler({ 8 | router: appRouter, 9 | createContext, 10 | }); 11 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/trpc/src/server/trpc/context.ts__template__: -------------------------------------------------------------------------------- 1 | import { inferAsyncReturnType } from '@trpc/server'; 2 | /** 3 | * Creates context for an incoming request 4 | * @link https://trpc.io/docs/context 5 | */ 6 | export const createContext = () => ({}); 7 | export type Context = inferAsyncReturnType; 8 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/trpc/src/server/trpc/routers/index.ts__template__: -------------------------------------------------------------------------------- 1 | import { router } from '../trpc'; 2 | import { noteRouter } from './notes'; 3 | 4 | export const appRouter = router({ 5 | note: noteRouter, 6 | }); 7 | // export type definition of API 8 | export type AppRouter = typeof appRouter; 9 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/trpc/src/server/trpc/trpc.ts__template__: -------------------------------------------------------------------------------- 1 | import { initTRPC } from '@trpc/server'; 2 | import { Context } from './context'; 3 | import { SuperJSON } from 'superjson'; 4 | 5 | const t = initTRPC.context().create({ 6 | transformer: SuperJSON, 7 | }); 8 | /** 9 | * Unprotected procedure 10 | **/ 11 | export const publicProcedure = t.procedure; 12 | export const router = t.router; 13 | export const middleware = t.middleware; 14 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/files/trpc/src/trpc-client.ts__template__: -------------------------------------------------------------------------------- 1 | import { AppRouter } from './server/trpc/routers'; 2 | import { createTrpcClient } from '@analogjs/trpc'; 3 | import { inject } from '@angular/core'; 4 | import { SuperJSON } from 'superjson'; 5 | 6 | export const { provideTrpcClient, TrpcClient } = createTrpcClient({ 7 | url: '/api/trpc', 8 | options: { 9 | transformer: SuperJSON, 10 | }, 11 | }); 12 | 13 | export function injectTrpcClient() { 14 | return inject(TrpcClient); 15 | } 16 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/lib/add-vite-plugin.ts: -------------------------------------------------------------------------------- 1 | import { Tree } from '@nx/devkit'; 2 | 3 | export async function initVite(tree: Tree): Promise { 4 | const linterOptions = { 5 | addPlugin: true, 6 | skipFormat: true, 7 | }; 8 | await ( 9 | await import( 10 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment 11 | // @ts-ignore 12 | '@nx/vite' 13 | ) 14 | ).initGenerator(tree, linterOptions); 15 | } 16 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/app/schema.d.ts: -------------------------------------------------------------------------------- 1 | export interface AnalogNxApplicationGeneratorOptions { 2 | analogAppName: string; 3 | tags?: string; 4 | addTailwind?: boolean; 5 | addTRPC?: boolean; 6 | skipFormat?: boolean; 7 | } 8 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/init/compat.ts: -------------------------------------------------------------------------------- 1 | import { convertNxGenerator } from '@nx/devkit'; 2 | 3 | import setupAnalogGenerator from './generator'; 4 | 5 | export default convertNxGenerator(setupAnalogGenerator); 6 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/init/files/src/app/app.config.server.ts__template__: -------------------------------------------------------------------------------- 1 | import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; 2 | import { provideServerRendering } from '@angular/platform-server'; 3 | 4 | import { appConfig } from './app.config'; 5 | 6 | const serverConfig: ApplicationConfig = { 7 | providers: [provideServerRendering()], 8 | }; 9 | 10 | export const config = mergeApplicationConfig(appConfig, serverConfig); 11 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/init/files/src/main.server.ts__template__: -------------------------------------------------------------------------------- 1 | import 'zone.js/node'; 2 | import '@angular/platform-server/init'; 3 | import { render } from '@analogjs/router/server'; 4 | 5 | import { AppComponent } from './app/app.component'; 6 | import { config } from './app/app.config.server'; 7 | 8 | export default render(AppComponent, config); 9 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/init/files/src/server/routes/api/v1/hello.ts__template__: -------------------------------------------------------------------------------- 1 | import { defineEventHandler } from 'h3'; 2 | 3 | export default defineEventHandler(() => ({ message: 'Hello World' })); 4 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/init/schema.d.ts: -------------------------------------------------------------------------------- 1 | export interface SetupAnalogGeneratorSchema { 2 | project: string; 3 | vitest: boolean; 4 | } 5 | 6 | export interface NormalizedSchema extends SetupAnalogGeneratorSchema { 7 | projectRoot: string; 8 | } 9 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/page/schema.d.ts: -------------------------------------------------------------------------------- 1 | export interface AnalogPageGeneratorSchema { 2 | pathname: string; 3 | project: string; 4 | metadata?: boolean; 5 | title?: string; 6 | redirectPage?: boolean; 7 | redirectPath?: string; 8 | pathMatch?: string; 9 | } 10 | 11 | export interface NormalizedSchema extends AnalogPageGeneratorSchema { 12 | projectRoot: string; 13 | } 14 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/preset/generator.ts: -------------------------------------------------------------------------------- 1 | import { ensurePackage, NX_VERSION, Tree } from '@nx/devkit'; 2 | import { PresetGeneratorSchema } from './schema'; 3 | 4 | export default async function (tree: Tree, options: PresetGeneratorSchema) { 5 | ensurePackage('@nx/angular', NX_VERSION); 6 | ensurePackage('@angular-devkit/build-angular', 'latest'); 7 | 8 | return await import('../app/generator').then(({ appGenerator }) => 9 | appGenerator(tree, options), 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/preset/schema.d.ts: -------------------------------------------------------------------------------- 1 | export interface PresetGeneratorSchema { 2 | analogAppName: string; 3 | tags?: string; 4 | addTailwind?: boolean; 5 | addTRPC?: boolean; 6 | skipFormat?: boolean; 7 | } 8 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/setup-vitest/compat.ts: -------------------------------------------------------------------------------- 1 | import { convertNxGenerator } from '@nx/devkit'; 2 | 3 | import setupVitestGenerator from './generator'; 4 | 5 | export default convertNxGenerator(setupVitestGenerator); 6 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/setup-vitest/lib/add-analog-dependencies.ts: -------------------------------------------------------------------------------- 1 | import { addDependenciesToPackageJson, Tree } from '@nx/devkit'; 2 | 3 | import { getAnalogDevDependencies } from '../../../utils/versions/dev-dependencies'; 4 | 5 | export function addAnalogDependencies( 6 | tree: Tree, 7 | angularVersion: string, 8 | nxVersion: string, 9 | ) { 10 | const devDependencies = getAnalogDevDependencies(angularVersion, nxVersion); 11 | 12 | addDependenciesToPackageJson(tree, {}, devDependencies); 13 | } 14 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/generators/setup-vitest/schema.d.ts: -------------------------------------------------------------------------------- 1 | export interface SetupVitestGeneratorSchema { 2 | project: string; 3 | } 4 | 5 | export interface NormalizedSchema extends AnalogPageGeneratorSchema { 6 | projectRoot: string; 7 | } 8 | -------------------------------------------------------------------------------- /packages/nx-plugin/src/index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/nx-plugin/src/index.ts -------------------------------------------------------------------------------- /packages/nx-plugin/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "commonjs" 5 | }, 6 | "files": [], 7 | "include": [], 8 | "references": [ 9 | { 10 | "path": "./tsconfig.lib.json" 11 | }, 12 | { 13 | "path": "./tsconfig.spec.json" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /packages/nx-plugin/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "resolveJsonModule": true, 5 | "esModuleInterop": true, 6 | "outDir": "../../dist/out-tsc", 7 | "declaration": true, 8 | "types": ["node"] 9 | }, 10 | "include": ["src/**/*.ts"], 11 | "exclude": [ 12 | "src/generators/app/files/**/*", 13 | "src/**/*.spec.ts", 14 | "src/**/*.test.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /packages/nx-plugin/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": ["src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"], 9 | "exclude": [ 10 | "src/**/files/**/*.test.ts", 11 | "src/**/files/**/*.spec.ts", 12 | "src/**/files/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/platform/README.md: -------------------------------------------------------------------------------- 1 | # Analog 2 | 3 | The fullstack meta-framework for Angular 4 | 5 | Learn more at [analogjs.org](https://analogjs.org) 6 | -------------------------------------------------------------------------------- /packages/platform/migrations/migration.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../../node_modules/@angular-devkit/schematics/collection-schema.json", 3 | "schematics": {} 4 | } 5 | -------------------------------------------------------------------------------- /packages/platform/src/index.ts: -------------------------------------------------------------------------------- 1 | import { platformPlugin } from './lib/platform-plugin.js'; 2 | 3 | export { Options, PrerenderContentFile } from './lib/options'; 4 | export default platformPlugin; 5 | -------------------------------------------------------------------------------- /packages/platform/src/lib/content/marked/index.ts: -------------------------------------------------------------------------------- 1 | import { MarkedExtension } from 'marked'; 2 | 3 | export type WithMarkedOptions = { 4 | mangle?: boolean; 5 | extensions?: MarkedExtension[]; 6 | }; 7 | -------------------------------------------------------------------------------- /packages/platform/src/lib/content/marked/marked-content-highlighter.ts: -------------------------------------------------------------------------------- 1 | export interface MarkedContentHighlighter { 2 | augmentCodeBlock?(code: string, lang: string): string; 3 | } 4 | 5 | export abstract class MarkedContentHighlighter { 6 | abstract getHighlightExtension(): import('marked').MarkedExtension; 7 | } 8 | -------------------------------------------------------------------------------- /packages/platform/src/lib/content/prism/index.ts: -------------------------------------------------------------------------------- 1 | import { PrismHighlighter } from './prism-highlighter.js'; 2 | 3 | export { PrismHighlighter }; 4 | 5 | export function getPrismHighlighter() { 6 | return new PrismHighlighter(); 7 | } 8 | -------------------------------------------------------------------------------- /packages/platform/src/lib/content/prism/options.ts: -------------------------------------------------------------------------------- 1 | export type WithPrismHighlighterOptions = { 2 | additionalLangs?: string[]; 3 | }; 4 | -------------------------------------------------------------------------------- /packages/platform/src/lib/content/shiki/options.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ShikiHighlighterOptions, 3 | ShikiHighlightOptions, 4 | } from './shiki-highlighter.js'; 5 | 6 | import { BundledLanguage } from 'shiki/langs'; 7 | 8 | export interface WithShikiHighlighterOptions { 9 | highlighter?: Partial & { 10 | additionalLangs?: BundledLanguage[]; 11 | }; 12 | highlight?: ShikiHighlightOptions; 13 | container?: string; 14 | } 15 | -------------------------------------------------------------------------------- /packages/platform/src/test-setup.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/analogjs/analog/057b3020a94455a054c4eb87bb4b46755ab54b43/packages/platform/src/test-setup.ts -------------------------------------------------------------------------------- /packages/platform/tsconfig.lib.prod.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.lib.json", 3 | "compilerOptions": { 4 | "declarationMap": false 5 | }, 6 | "angularCompilerOptions": { 7 | "compilationMode": "partial" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/platform/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["vitest/globals", "node"] 7 | }, 8 | "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/router/README.md: -------------------------------------------------------------------------------- 1 | # Analog 2 | 3 | The fullstack meta-framework for Angular 4 | 5 | Learn more at [analogjs.org](https://analogjs.org) 6 | -------------------------------------------------------------------------------- /packages/router/migrations/migration.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../../node_modules/@angular-devkit/schematics/collection-schema.json", 3 | "schematics": {} 4 | } 5 | -------------------------------------------------------------------------------- /packages/router/ng-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", 3 | "dest": "../../node_modules/@analogjs/router", 4 | "assets": ["*.md", "migrations/migration.json"], 5 | "lib": { 6 | "entryFile": "src/index.ts" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/router/server/actions/ng-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "lib": { 3 | "entryFile": "src/index.ts" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /packages/router/server/actions/src/index.ts: -------------------------------------------------------------------------------- 1 | export { PageServerAction, json, redirect, fail } from './actions'; 2 | -------------------------------------------------------------------------------- /packages/router/server/ng-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "lib": { 3 | "entryFile": "src/index.ts" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /packages/router/server/src/index.ts: -------------------------------------------------------------------------------- 1 | export { provideServerContext } from './provide-server-context'; 2 | export { injectStaticProps, injectStaticOutputs } from './tokens'; 3 | export { 4 | serverComponentRequest, 5 | renderServerComponent, 6 | } from './server-component-render'; 7 | export { render } from './render'; 8 | -------------------------------------------------------------------------------- /packages/router/src/lib/constants.ts: -------------------------------------------------------------------------------- 1 | export const ENDPOINT_EXTENSION = '.server.ts'; 2 | export const APP_DIR = 'src/app'; 3 | -------------------------------------------------------------------------------- /packages/router/src/lib/debug/index.ts: -------------------------------------------------------------------------------- 1 | import { ROUTES } from '@angular/router'; 2 | 3 | /** 4 | * Provides routes that provide additional 5 | * pages for displaying and debugging 6 | * routes. 7 | */ 8 | export function withDebugRoutes() { 9 | const routes = [ 10 | { 11 | path: '__analog/routes', 12 | loadComponent: () => import('./debug.page'), 13 | }, 14 | ]; 15 | 16 | return { 17 | ɵkind: 101 as number, 18 | ɵproviders: [{ provide: ROUTES, useValue: routes, multi: true }], 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /packages/router/src/lib/endpoints.ts: -------------------------------------------------------------------------------- 1 | export const ANALOG_META_KEY = Symbol( 2 | '@analogjs/router Analog Route Metadata Key', 3 | ); 4 | 5 | /** 6 | * This variable reference is replaced with a glob of all route endpoints. 7 | */ 8 | export let ANALOG_PAGE_ENDPOINTS: any = {}; 9 | -------------------------------------------------------------------------------- /packages/router/src/lib/get-load-resolver.ts: -------------------------------------------------------------------------------- 1 | import { ActivatedRouteSnapshot } from '@angular/router'; 2 | 3 | /** 4 | * Get server load resolver data for the route 5 | * 6 | * @param route Provides the route to get server load resolver 7 | * @returns Returns server load resolver data for the route 8 | */ 9 | export async function getLoadResolver( 10 | route: ActivatedRouteSnapshot, 11 | ): Promise { 12 | return route.routeConfig?.resolve?.['load']?.(route); 13 | } 14 | -------------------------------------------------------------------------------- /packages/router/src/lib/route-types.ts: -------------------------------------------------------------------------------- 1 | import type { H3Event, H3EventContext } from 'h3'; 2 | import type { $Fetch } from 'nitropack'; 3 | 4 | export type PageServerLoad = { 5 | params: H3EventContext['params']; 6 | req: H3Event['node']['req']; 7 | res: H3Event['node']['res']; 8 | fetch: $Fetch; 9 | event: H3Event; 10 | }; 11 | 12 | export type LoadResult< 13 | A extends (pageServerLoad: PageServerLoad) => Promise, 14 | > = Awaited>; 15 | -------------------------------------------------------------------------------- /packages/router/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vite-plugin-angular/setup-vitest'; 2 | import '@angular/compiler'; 3 | 4 | /** 5 | * Initialize TestBed for all tests inside of router 6 | */ 7 | import { TestBed } from '@angular/core/testing'; 8 | import { 9 | BrowserDynamicTestingModule, 10 | platformBrowserDynamicTesting, 11 | } from '@angular/platform-browser-dynamic/testing'; 12 | 13 | TestBed.initTestEnvironment( 14 | BrowserDynamicTestingModule, 15 | platformBrowserDynamicTesting(), 16 | ); 17 | -------------------------------------------------------------------------------- /packages/router/tokens/ng-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "lib": { 3 | "entryFile": "src/index.ts" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /packages/router/tsconfig.lib.prod.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.lib.json", 3 | "compilerOptions": { 4 | "declarationMap": false, 5 | "target": "ES2022", 6 | "useDefineForClassFields": false 7 | }, 8 | "angularCompilerOptions": { 9 | "compilationMode": "partial" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/router/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["node", "vitest/globals"] 7 | }, 8 | "files": ["src/test-setup.ts"], 9 | "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/storybook-angular/preset/preset.d.ts: -------------------------------------------------------------------------------- 1 | import { PresetProperty } from 'storybook/internal/types'; 2 | import { StorybookConfig } from './src/types'; 3 | export declare const core: PresetProperty<'core'>; 4 | export declare const viteFinal: NonNullable; 5 | export { addons, previewAnnotations } from '@storybook/angular/dist/preset.js'; 6 | -------------------------------------------------------------------------------- /packages/storybook-angular/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types'; 2 | export * from '@storybook/angular/dist/client/index.js'; 3 | -------------------------------------------------------------------------------- /packages/storybook-angular/src/lib/build-storybook/build-storybook.ts: -------------------------------------------------------------------------------- 1 | import BuildStorybookBuilder from '@storybook/angular/dist/builders/build-storybook/index.js'; 2 | 3 | export default BuildStorybookBuilder; 4 | -------------------------------------------------------------------------------- /packages/storybook-angular/src/lib/builders.json: -------------------------------------------------------------------------------- 1 | { 2 | "builders": { 3 | "build-storybook": { 4 | "implementation": "./build-storybook/build-storybook", 5 | "schema": "./build-storybook/schema.json", 6 | "description": "Build storybook" 7 | }, 8 | "start-storybook": { 9 | "implementation": "./start-storybook/start-storybook", 10 | "schema": "./start-storybook/schema.json", 11 | "description": "Start storybook" 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/storybook-angular/src/lib/start-storybook/start-storybook.ts: -------------------------------------------------------------------------------- 1 | import StartStorybookBuilder from '@storybook/angular/dist/builders/start-storybook/index.js'; 2 | 3 | export default StartStorybookBuilder; 4 | -------------------------------------------------------------------------------- /packages/storybook-angular/src/lib/utils/standalone-options.ts: -------------------------------------------------------------------------------- 1 | import { 2 | BuilderOptions, 3 | CLIOptions, 4 | LoadOptions, 5 | } from 'storybook/internal/types'; 6 | 7 | export type StandaloneOptions = CLIOptions & 8 | LoadOptions & 9 | BuilderOptions & { 10 | mode?: 'static' | 'dev'; 11 | enableProdMode: boolean; 12 | angularBuilderOptions?: Record & { 13 | experimentalZoneless?: boolean; 14 | }; 15 | tsConfig?: string; 16 | }; 17 | -------------------------------------------------------------------------------- /packages/storybook-angular/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vite-plugin-angular/setup-vitest'; 2 | import { getTestBed } from '@angular/core/testing'; 3 | import { 4 | BrowserDynamicTestingModule, 5 | platformBrowserDynamicTesting, 6 | } from '@angular/platform-browser-dynamic/testing'; 7 | 8 | getTestBed().initTestEnvironment( 9 | BrowserDynamicTestingModule, 10 | platformBrowserDynamicTesting(), 11 | ); 12 | -------------------------------------------------------------------------------- /packages/storybook-angular/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "commonjs" 5 | }, 6 | "files": [], 7 | "include": [], 8 | "references": [ 9 | { 10 | "path": "./tsconfig.lib.json" 11 | }, 12 | { 13 | "path": "./tsconfig.spec.json" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /packages/storybook-angular/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "resolveJsonModule": true, 5 | "esModuleInterop": true, 6 | "outDir": "../../dist/out-tsc", 7 | "declaration": true, 8 | "types": ["node"] 9 | }, 10 | "include": ["src/**/*.ts"], 11 | "exclude": [ 12 | "src/generators/app/files/**/*", 13 | "src/**/*.spec.ts", 14 | "src/**/*.test.ts", 15 | "**/template/**" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /packages/storybook-angular/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "types": ["webpack-env", "node"], 5 | "typeRoots": ["../../node_modules/@types", "node_modules/@types"], 6 | "allowJs": true 7 | }, 8 | "include": ["**/*.test.ts", "**/*.d.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/trpc/README.md: -------------------------------------------------------------------------------- 1 | # Analog 2 | 3 | The fullstack meta-framework for Angular 4 | 5 | Learn more at [analogjs.org](https://analogjs.org) 6 | -------------------------------------------------------------------------------- /packages/trpc/migrations/migration.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../../node_modules/@angular-devkit/schematics/collection-schema.json", 3 | "schematics": {}, 4 | "packageJsonUpdates": { 5 | "0.2.30": { 6 | "version": "0.2.29", 7 | "description": "Updates the superjson dependency from 1.x to 2.x", 8 | "packages": { 9 | "superjson": { 10 | "version": "^2.2.1", 11 | "alwaysAddToPackageJson": true 12 | } 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/trpc/ng-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", 3 | "dest": "../../node_modules/@analogjs/trpc", 4 | "assets": ["*.md", "migrations/migration.json"], 5 | "lib": { 6 | "entryFile": "src/index.ts" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/trpc/server/ng-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "lib": { 3 | "entryFile": "src/index.ts" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /packages/trpc/server/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/server'; 2 | -------------------------------------------------------------------------------- /packages/trpc/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/client/client'; 2 | export * from './lib/utils/wait-for'; 3 | 4 | export { CreateTrpcProxyClient } from './lib/client/trpc-rxjs-proxy'; 5 | -------------------------------------------------------------------------------- /packages/trpc/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '@analogjs/vite-plugin-angular/setup-vitest'; 2 | import '@angular/compiler'; 3 | 4 | /** 5 | * Initialize TestBed for all tests inside of router 6 | */ 7 | import { TestBed } from '@angular/core/testing'; 8 | import { 9 | BrowserDynamicTestingModule, 10 | platformBrowserDynamicTesting, 11 | } from '@angular/platform-browser-dynamic/testing'; 12 | 13 | TestBed.initTestEnvironment( 14 | BrowserDynamicTestingModule, 15 | platformBrowserDynamicTesting(), 16 | ); 17 | -------------------------------------------------------------------------------- /packages/trpc/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "declaration": true, 6 | "declarationMap": true, 7 | "inlineSources": true, 8 | "types": ["node"] 9 | }, 10 | "exclude": ["src/**/*.spec.ts", "jest.config.ts", "src/**/*.test.ts"], 11 | "include": ["src/**/*.ts"] 12 | } 13 | -------------------------------------------------------------------------------- /packages/trpc/tsconfig.lib.prod.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.lib.json", 3 | "compilerOptions": { 4 | "declarationMap": false 5 | }, 6 | "angularCompilerOptions": { 7 | "compilationMode": "partial" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/vite-plugin-angular/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'vite-plugin-angular', 4 | preset: '../../jest.preset.js', 5 | globals: { 6 | 'ts-jest': { 7 | tsconfig: '/tsconfig.spec.json', 8 | }, 9 | }, 10 | transform: { 11 | '^.+\\.[tj]s$': 'ts-jest', 12 | }, 13 | moduleFileExtensions: ['ts', 'js', 'html'], 14 | coverageDirectory: '../../coverage/packages/vite-plugin-angular', 15 | }; 16 | -------------------------------------------------------------------------------- /packages/vite-plugin-angular/migrations/migration.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../../node_modules/@angular-devkit/schematics/collection-schema.json", 3 | "schematics": {} 4 | } 5 | -------------------------------------------------------------------------------- /packages/vite-plugin-angular/src/index.ts: -------------------------------------------------------------------------------- 1 | import { angular } from './lib/angular-vite-plugin.js'; 2 | export { PluginOptions } from './lib/angular-vite-plugin.js'; 3 | export { compileAnalogFile } from './lib/authoring/analog.js'; 4 | export { 5 | MarkdownTemplateTransform, 6 | defaultMarkdownTemplateTransforms, 7 | } from './lib/authoring/markdown-transform.js'; 8 | 9 | export default angular; 10 | -------------------------------------------------------------------------------- /packages/vite-plugin-angular/src/lib/models.ts: -------------------------------------------------------------------------------- 1 | import type ts from 'typescript'; 2 | 3 | export interface EmitFileResult { 4 | content?: string; 5 | map?: string; 6 | dependencies: readonly string[]; 7 | hash?: Uint8Array; 8 | errors?: (string | ts.DiagnosticMessageChain)[]; 9 | warnings?: (string | ts.DiagnosticMessageChain)[]; 10 | hmrUpdateCode?: string | null; 11 | hmrEligible?: boolean | null; 12 | } 13 | -------------------------------------------------------------------------------- /packages/vite-plugin-angular/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import '../setup-vitest'; 2 | import '@angular/compiler'; 3 | 4 | /** 5 | * Initialize TestBed for all tests inside of vite-plugin-angular 6 | */ 7 | import { getTestBed } from '@angular/core/testing'; 8 | import { 9 | BrowserDynamicTestingModule, 10 | platformBrowserDynamicTesting, 11 | } from '@angular/platform-browser-dynamic/testing'; 12 | 13 | getTestBed().initTestEnvironment( 14 | BrowserDynamicTestingModule, 15 | platformBrowserDynamicTesting(), 16 | ); 17 | -------------------------------------------------------------------------------- /packages/vite-plugin-angular/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "module": "es2020", 5 | "outDir": "../../dist/out-tsc", 6 | "declaration": true, 7 | "types": [], 8 | "allowSyntheticDefaultImports": true 9 | }, 10 | "include": ["**/*.ts"], 11 | "exclude": [ 12 | "jest.config.ts", 13 | "**/*.spec.ts", 14 | "**/*.test.ts", 15 | "src/test-setup.ts" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /packages/vite-plugin-angular/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["node", "vitest/globals"] 7 | }, 8 | "include": ["**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /packages/vite-plugin-nitro/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": [ 4 | "!**/*", 5 | "**/vite.config.*.timestamp*", 6 | "**/vitest.config.*.timestamp*" 7 | ], 8 | "overrides": [ 9 | { 10 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.ts", "*.tsx"], 15 | "rules": {} 16 | }, 17 | { 18 | "files": ["*.js", "*.jsx"], 19 | "rules": {} 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /packages/vite-plugin-nitro/migrations/migration.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../../node_modules/@angular-devkit/schematics/collection-schema.json", 3 | "schematics": {} 4 | } 5 | -------------------------------------------------------------------------------- /packages/vite-plugin-nitro/src/index.ts: -------------------------------------------------------------------------------- 1 | import { nitro } from './lib/vite-plugin-nitro.js'; 2 | export { 3 | Options, 4 | SitemapConfig, 5 | PrerenderRouteConfig, 6 | PrerenderContentDir, 7 | PrerenderContentFile, 8 | } from './lib/options.js'; 9 | 10 | declare module 'nitropack' { 11 | interface NitroRouteConfig { 12 | ssr?: boolean; 13 | } 14 | 15 | interface NitroRouteRules { 16 | ssr?: boolean; 17 | } 18 | } 19 | 20 | export default nitro; 21 | -------------------------------------------------------------------------------- /packages/vite-plugin-nitro/src/lib/hooks/post-rendering-hook.ts: -------------------------------------------------------------------------------- 1 | import { Nitro, PrerenderRoute } from 'nitropack'; 2 | 3 | export function addPostRenderingHooks( 4 | nitro: Nitro, 5 | hooks: ((pr: PrerenderRoute) => Promise)[], 6 | ): void { 7 | hooks.forEach((hook: (preRoute: PrerenderRoute) => void) => { 8 | nitro.hooks.hook('prerender:generate', (route: PrerenderRoute) => { 9 | hook(route); 10 | }); 11 | }); 12 | } 13 | -------------------------------------------------------------------------------- /packages/vite-plugin-nitro/src/lib/runtime/renderer-client.mjs: -------------------------------------------------------------------------------- 1 | import { eventHandler } from 'h3'; 2 | 3 | // @ts-ignore 4 | import template from '#analog/index'; 5 | 6 | export default eventHandler(async () => { 7 | return template; 8 | }); 9 | -------------------------------------------------------------------------------- /packages/vite-plugin-nitro/src/lib/runtime/renderer-client.ts: -------------------------------------------------------------------------------- 1 | import { eventHandler } from 'h3'; 2 | 3 | // @ts-ignore 4 | import template from '#analog/index'; 5 | 6 | export default eventHandler(async () => { 7 | return template; 8 | }); 9 | -------------------------------------------------------------------------------- /packages/vite-plugin-nitro/test-data/content/01-first.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: First 3 | slug: first 4 | description: My First Post 5 | --- 6 | 7 | First Content File 8 | -------------------------------------------------------------------------------- /packages/vite-plugin-nitro/test-data/content/02-second.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Second 3 | description: My Second Post 4 | --- 5 | 6 | Second Content File 7 | -------------------------------------------------------------------------------- /packages/vite-plugin-nitro/test-data/content/03-third.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Third (Draft) 3 | description: My Third Post (Draft) 4 | draft: true 5 | --- 6 | 7 | Third Content File (Draft) 8 | -------------------------------------------------------------------------------- /packages/vite-plugin-nitro/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "esModuleInterop": true, 5 | "outDir": "../../dist/out-tsc", 6 | "declaration": true, 7 | "types": [] 8 | }, 9 | "include": ["src/**/*.ts"], 10 | "exclude": [ 11 | "vite.config.ts", 12 | "src/**/*.spec.ts", 13 | "src/**/*.spec.data.ts", 14 | "src/**/*.test.ts", 15 | "src/lib/runtime/*.ts" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /packages/vite-plugin-nitro/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": ["vitest/globals", "vitest/importMeta", "vite/client", "node"] 6 | }, 7 | "include": [ 8 | "vite.config.ts", 9 | "./src/**/*.test.ts", 10 | "./src/**/*.spec.ts", 11 | "./src/**/*.d.ts" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /packages/vitest-angular/builders.json: -------------------------------------------------------------------------------- 1 | { 2 | "builders": { 3 | "test": { 4 | "implementation": "./src/lib/builders/test/vitest.impl", 5 | "schema": "./src/lib/builders/test/schema.json", 6 | "description": "Run tests with Vitest" 7 | }, 8 | "build-test": { 9 | "implementation": "./src/lib/builders/build/vitest.impl", 10 | "schema": "./src/lib/builders/build/schema.json", 11 | "description": "Bundle and run tests with Vitest using the Application Builder" 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/vitest-angular/src/index.ts: -------------------------------------------------------------------------------- 1 | import vitestBuilder from './lib/builders/test/vitest.impl'; 2 | import vitestApplicationBuilder from './lib/builders/build/vitest.impl'; 3 | 4 | export { vitestBuilder, vitestApplicationBuilder }; 5 | -------------------------------------------------------------------------------- /packages/vitest-angular/src/lib/builders/build/schema.d.ts: -------------------------------------------------------------------------------- 1 | export interface VitestSchema { 2 | mode?: string; 3 | setupFile: string; 4 | configFile?: string; 5 | include: string[]; 6 | exclude?: string[]; 7 | watch?: boolean; 8 | tsConfig: string; 9 | } 10 | -------------------------------------------------------------------------------- /packages/vitest-angular/src/lib/builders/build/utils.ts: -------------------------------------------------------------------------------- 1 | export type AngularMemoryOutputFiles = Map< 2 | string, 3 | { contents: Uint8Array; hash: string; servable: boolean } 4 | >; 5 | -------------------------------------------------------------------------------- /packages/vitest-angular/src/lib/builders/test/schema.d.ts: -------------------------------------------------------------------------------- 1 | export interface VitestSchema { 2 | mode?: string; 3 | configFile?: string; 4 | reportsDirectory?: string; 5 | testFiles?: string[]; 6 | watch?: boolean; 7 | ui?: boolean; 8 | coverage?: boolean; 9 | update?: boolean; 10 | } 11 | -------------------------------------------------------------------------------- /packages/vitest-angular/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "declaration": true, 6 | "types": ["node"] 7 | }, 8 | "include": [ 9 | "src/**/*.ts", 10 | "setup-zone.ts", 11 | "setup-snapshots.ts", 12 | "plugin.ts" 13 | ], 14 | "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"] 15 | } 16 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - 'apps/docs-app' 3 | -------------------------------------------------------------------------------- /tools/tsconfig.tools.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.base.json", 3 | "compilerOptions": { 4 | "outDir": "../dist/out-tsc/tools", 5 | "rootDir": ".", 6 | "module": "commonjs", 7 | "target": "es5", 8 | "types": ["node"], 9 | "importHelpers": false 10 | }, 11 | "include": ["**/*.ts"] 12 | } 13 | -------------------------------------------------------------------------------- /vitest.workspace.ts: -------------------------------------------------------------------------------- 1 | export default [ 2 | 'packages/**/vite.config.{mjs,js,ts,mts}', 3 | '!**/create-analog/**', 4 | ]; 5 | -------------------------------------------------------------------------------- /zerops.yaml: -------------------------------------------------------------------------------- 1 | zerops: 2 | - setup: docs0 3 | build: 4 | base: nodejs@22 5 | envVariables: 6 | CI: true 7 | buildCommands: 8 | - pnpm i 9 | - pnpm exec nx build docs-app 10 | deployFiles: 11 | - dist/apps/docs-app/~ 12 | cache: 13 | - node_modules 14 | run: 15 | base: static 16 | --------------------------------------------------------------------------------