├── .eslintignore ├── .vscode ├── settings.json └── extensions.json ├── apps ├── notes │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── app │ │ │ ├── notes │ │ │ │ ├── notes.component.scss │ │ │ │ ├── notes-list │ │ │ │ │ ├── notes-list.component.scss │ │ │ │ │ └── notes-list.component.html │ │ │ │ ├── note-details │ │ │ │ │ └── note-details.component.scss │ │ │ │ └── notes.component.html │ │ │ ├── app.routes.ts │ │ │ ├── app.config.server.ts │ │ │ └── remote-entry │ │ │ │ ├── entry.component.ts │ │ │ │ └── entry.routes.ts │ │ ├── main.ts │ │ ├── favicon.ico │ │ ├── bootstrap.ts │ │ ├── test-setup.ts │ │ ├── bootstrap.server.ts │ │ └── index.html │ ├── server.ts │ ├── webpack.config.ts │ ├── tsconfig.editor.json │ ├── webpack.server.config.ts │ ├── module-federation.config.ts │ ├── tsconfig.server.json │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ ├── tailwind.config.js │ └── webpack.prod.config.ts ├── portal │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── app │ │ │ ├── app.component.scss │ │ │ ├── features │ │ │ │ ├── features.component.scss │ │ │ │ ├── features-list │ │ │ │ │ ├── features-list.component.scss │ │ │ │ │ └── features-list.component.html │ │ │ │ ├── feature-details │ │ │ │ │ └── feature-details.component.scss │ │ │ │ └── features.component.html │ │ │ ├── app.component.html │ │ │ ├── app.config.server.ts │ │ │ ├── app.component.ts │ │ │ └── app.routes.ts │ │ ├── favicon.ico │ │ ├── main.ts │ │ ├── main.server.ts │ │ ├── test-setup.ts │ │ └── index.html │ ├── tsconfig.editor.json │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ └── tailwind.config.js ├── users │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── app │ │ │ ├── users │ │ │ │ ├── users.component.scss │ │ │ │ ├── users-list │ │ │ │ │ ├── users-list.component.scss │ │ │ │ │ └── users-list.component.html │ │ │ │ ├── user-details │ │ │ │ │ └── user-details.component.scss │ │ │ │ └── users.component.html │ │ │ ├── app.routes.ts │ │ │ ├── app.config.server.ts │ │ │ └── remote-entry │ │ │ │ └── entry.component.ts │ │ ├── main.ts │ │ ├── favicon.ico │ │ ├── bootstrap.ts │ │ ├── test-setup.ts │ │ ├── bootstrap.server.ts │ │ └── index.html │ ├── server.ts │ ├── webpack.config.ts │ ├── tsconfig.editor.json │ ├── webpack.server.config.ts │ ├── module-federation.config.ts │ ├── tsconfig.server.json │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ ├── tailwind.config.js │ └── webpack.prod.config.ts ├── challenges │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── app │ │ │ ├── challenges │ │ │ │ ├── challenges.component.scss │ │ │ │ ├── challenges-list │ │ │ │ │ ├── challenges-list.component.scss │ │ │ │ │ └── challenges-list.component.html │ │ │ │ ├── challenge-details │ │ │ │ │ └── challenge-details.component.scss │ │ │ │ └── challenges.component.html │ │ │ ├── app.routes.ts │ │ │ ├── app.config.server.ts │ │ │ └── remote-entry │ │ │ │ ├── entry.component.ts │ │ │ │ └── entry.routes.ts │ │ ├── main.ts │ │ ├── favicon.ico │ │ ├── bootstrap.ts │ │ ├── test-setup.ts │ │ ├── bootstrap.server.ts │ │ └── index.html │ ├── server.ts │ ├── webpack.config.ts │ ├── tsconfig.editor.json │ ├── webpack.server.config.ts │ ├── module-federation.config.ts │ ├── tsconfig.server.json │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ ├── tailwind.config.js │ └── webpack.prod.config.ts ├── dashboard │ ├── src │ │ ├── assets │ │ │ ├── .gitkeep │ │ │ └── module-federation.manifest.json │ │ ├── app │ │ │ ├── app.component.scss │ │ │ ├── home │ │ │ │ ├── home.component.scss │ │ │ │ ├── home.component.ts │ │ │ │ ├── home.component.html │ │ │ │ └── home.component.spec.ts │ │ │ ├── app.routes.ts │ │ │ └── app.config.server.ts │ │ ├── favicon.ico │ │ ├── bootstrap.ts │ │ ├── bootstrap.server.ts │ │ ├── test-setup.ts │ │ └── main.ts │ ├── server.ts │ ├── webpack.config.ts │ ├── tsconfig.editor.json │ ├── webpack.server.config.ts │ ├── tsconfig.app.json │ ├── tsconfig.server.json │ ├── tsconfig.spec.json │ ├── tailwind.config.js │ └── module-federation.config.ts ├── flashcards │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── app │ │ │ ├── flashcards │ │ │ │ ├── flashcards.component.scss │ │ │ │ ├── flashcards-list │ │ │ │ │ └── flashcards-list.component.scss │ │ │ │ ├── flashcard-details │ │ │ │ │ └── flashcard-details.component.scss │ │ │ │ └── flashcards.component.html │ │ │ ├── app.routes.ts │ │ │ ├── app.config.server.ts │ │ │ └── remote-entry │ │ │ │ ├── entry.component.ts │ │ │ │ └── entry.routes.ts │ │ ├── main.ts │ │ ├── favicon.ico │ │ ├── bootstrap.ts │ │ ├── test-setup.ts │ │ ├── bootstrap.server.ts │ │ └── index.html │ ├── server.ts │ ├── webpack.config.ts │ ├── tsconfig.editor.json │ ├── webpack.server.config.ts │ ├── module-federation.config.ts │ ├── tsconfig.server.json │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ ├── tailwind.config.js │ └── webpack.prod.config.ts ├── notes-e2e │ ├── src │ │ ├── support │ │ │ └── app.po.ts │ │ ├── fixtures │ │ │ └── example.json │ │ └── e2e │ │ │ └── app.cy.ts │ ├── .eslintrc.json │ ├── project.json │ ├── cypress.config.ts │ └── tsconfig.json ├── portal-e2e │ ├── src │ │ ├── support │ │ │ ├── app.po.ts │ │ │ └── e2e.ts │ │ ├── fixtures │ │ │ └── example.json │ │ └── e2e │ │ │ └── app.cy.ts │ ├── .eslintrc.json │ ├── project.json │ ├── cypress.config.ts │ └── tsconfig.json ├── users-e2e │ ├── src │ │ ├── support │ │ │ └── app.po.ts │ │ ├── fixtures │ │ │ └── example.json │ │ └── e2e │ │ │ └── app.cy.ts │ ├── .eslintrc.json │ ├── project.json │ ├── cypress.config.ts │ └── tsconfig.json ├── challenges-e2e │ ├── src │ │ ├── support │ │ │ └── app.po.ts │ │ ├── fixtures │ │ │ └── example.json │ │ └── e2e │ │ │ └── app.cy.ts │ ├── .eslintrc.json │ ├── project.json │ ├── cypress.config.ts │ └── tsconfig.json ├── dashboard-e2e │ ├── src │ │ ├── support │ │ │ └── app.po.ts │ │ ├── fixtures │ │ │ └── example.json │ │ └── e2e │ │ │ └── app.cy.ts │ ├── .eslintrc.json │ ├── project.json │ ├── cypress.config.ts │ └── tsconfig.json └── flashcards-e2e │ ├── src │ ├── support │ │ └── app.po.ts │ ├── fixtures │ │ └── example.json │ └── e2e │ │ └── app.cy.ts │ ├── .eslintrc.json │ ├── project.json │ ├── cypress.config.ts │ └── tsconfig.json ├── remote ├── notes │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ └── app │ │ │ ├── notes │ │ │ ├── dto │ │ │ │ ├── create-note.dto.ts │ │ │ │ └── update-note.dto.ts │ │ │ ├── note.providers.ts │ │ │ └── notes.module.ts │ │ │ ├── database │ │ │ ├── database.module.ts │ │ │ ├── entities │ │ │ │ └── note.entity.ts │ │ │ └── subscribers │ │ │ │ └── note.subscriber.ts │ │ │ └── app.module.ts │ ├── tsconfig.json │ ├── tsconfig.spec.json │ ├── tsconfig.app.json │ ├── jest.config.ts │ ├── .eslintrc.json │ ├── webpack.config.js │ └── project.json ├── users │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ └── app │ │ │ ├── users │ │ │ ├── dto │ │ │ │ ├── create-user.dto.ts │ │ │ │ └── update-user.dto.ts │ │ │ ├── user.providers.ts │ │ │ └── users.module.ts │ │ │ ├── auth │ │ │ ├── auth.constants.ts │ │ │ ├── role.decorator.ts │ │ │ ├── guards │ │ │ │ ├── local-auth.guard.ts │ │ │ │ └── jwt-auth.guard.ts │ │ │ └── strategies │ │ │ │ └── jwt.strategy.ts │ │ │ ├── database │ │ │ ├── database.module.ts │ │ │ ├── entities │ │ │ │ ├── company.entity.ts │ │ │ │ └── user.entity.ts │ │ │ └── subscribers │ │ │ │ └── user.subscriber.ts │ │ │ └── app.module.ts │ ├── tsconfig.spec.json │ ├── tsconfig.app.json │ ├── jest.config.ts │ ├── .eslintrc.json │ ├── tsconfig.json │ ├── webpack.config.js │ └── project.json ├── challenges │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ └── app │ │ │ ├── challenges │ │ │ ├── dto │ │ │ │ ├── create-challenge.dto.ts │ │ │ │ └── update-challenge.dto.ts │ │ │ ├── challenge.providers.ts │ │ │ └── challenges.module.ts │ │ │ ├── database │ │ │ ├── database.module.ts │ │ │ ├── entities │ │ │ │ └── challenge.entity.ts │ │ │ └── subscribers │ │ │ │ └── challenge.subscriber.ts │ │ │ └── app.module.ts │ ├── tsconfig.json │ ├── tsconfig.spec.json │ ├── tsconfig.app.json │ ├── jest.config.ts │ ├── .eslintrc.json │ ├── webpack.config.js │ └── project.json ├── features │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ └── app │ │ │ ├── database │ │ │ ├── database.module.ts │ │ │ ├── entities │ │ │ │ └── feature.entity.ts │ │ │ └── subscribers │ │ │ │ └── feature.subscriber.ts │ │ │ ├── features │ │ │ ├── feature.providers.ts │ │ │ └── features.module.ts │ │ │ └── app.module.ts │ ├── tsconfig.json │ ├── tsconfig.spec.json │ ├── tsconfig.app.json │ ├── jest.config.ts │ ├── .eslintrc.json │ ├── webpack.config.js │ └── project.json ├── flashcards │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ └── app │ │ │ ├── flashcards │ │ │ ├── dto │ │ │ │ ├── create-flashcard.dto.ts │ │ │ │ └── update-flashcard.dto.ts │ │ │ ├── flashcard.providers.ts │ │ │ └── flashcards.module.ts │ │ │ ├── database │ │ │ ├── database.module.ts │ │ │ ├── entities │ │ │ │ └── flashcard.entity.ts │ │ │ └── subscribers │ │ │ │ └── flashcard.subscriber.ts │ │ │ └── app.module.ts │ ├── tsconfig.json │ ├── tsconfig.spec.json │ ├── tsconfig.app.json │ ├── jest.config.ts │ ├── .eslintrc.json │ ├── webpack.config.js │ └── project.json ├── features-e2e │ ├── tsconfig.spec.json │ ├── tsconfig.json │ ├── src │ │ ├── support │ │ │ ├── global-teardown.ts │ │ │ ├── test-setup.ts │ │ │ └── global-setup.ts │ │ └── features-api │ │ │ └── features-api.spec.ts │ ├── .eslintrc.json │ ├── project.json │ └── jest.config.ts ├── notes-e2e │ ├── tsconfig.spec.json │ ├── tsconfig.json │ ├── src │ │ ├── support │ │ │ ├── global-teardown.ts │ │ │ ├── test-setup.ts │ │ │ └── global-setup.ts │ │ └── notes-api │ │ │ └── notes-api.spec.ts │ ├── .eslintrc.json │ ├── project.json │ └── jest.config.ts ├── users-e2e │ ├── tsconfig.spec.json │ ├── tsconfig.json │ ├── src │ │ ├── support │ │ │ ├── global-teardown.ts │ │ │ ├── test-setup.ts │ │ │ └── global-setup.ts │ │ └── users-api │ │ │ └── users-api.spec.ts │ ├── .eslintrc.json │ ├── project.json │ └── jest.config.ts ├── challenges-e2e │ ├── tsconfig.spec.json │ ├── tsconfig.json │ ├── src │ │ ├── support │ │ │ ├── global-teardown.ts │ │ │ ├── test-setup.ts │ │ │ └── global-setup.ts │ │ └── challenges-api │ │ │ └── challenges-api.spec.ts │ ├── .eslintrc.json │ ├── project.json │ └── jest.config.ts └── flashcards-e2e │ ├── tsconfig.spec.json │ ├── tsconfig.json │ ├── src │ ├── support │ │ ├── global-teardown.ts │ │ ├── test-setup.ts │ │ └── global-setup.ts │ └── flashcards-api │ │ └── flashcards-api.spec.ts │ ├── .eslintrc.json │ ├── project.json │ └── jest.config.ts ├── tooling ├── wizard │ ├── src │ │ ├── assets │ │ │ └── .gitkeep │ │ ├── app │ │ │ ├── app.component.scss │ │ │ ├── wizard │ │ │ │ └── wizard.component.scss │ │ │ ├── app.component.html │ │ │ ├── app.routes.ts │ │ │ ├── app.config.ts │ │ │ └── app.component.ts │ │ ├── favicon.ico │ │ ├── test-setup.ts │ │ └── main.ts │ ├── tsconfig.editor.json │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ └── tailwind.config.js └── wizard-e2e │ ├── src │ ├── support │ │ ├── app.po.ts │ │ └── e2e.ts │ ├── fixtures │ │ └── example.json │ └── e2e │ │ └── app.cy.ts │ ├── .eslintrc.json │ ├── project.json │ ├── cypress.config.ts │ └── tsconfig.json ├── .prettierrc ├── server └── routes.json ├── libs ├── material │ ├── src │ │ └── index.ts │ ├── README.md │ ├── project.json │ └── tsconfig.lib.json ├── api-interfaces │ ├── src │ │ └── index.ts │ ├── package.json │ ├── tsconfig.lib.json │ ├── tsconfig.json │ ├── .eslintrc.json │ └── project.json ├── ui-login │ ├── src │ │ ├── index.ts │ │ ├── test-setup.ts │ │ └── lib │ │ │ └── ui-login.module.ts │ ├── README.md │ ├── project.json │ ├── tsconfig.spec.json │ └── tsconfig.lib.json ├── guards │ └── remote-auth │ │ ├── src │ │ ├── lib │ │ │ ├── roles.decorator.ts │ │ │ ├── guards-remote-auth.module.ts │ │ │ ├── roles.guard.spec.ts │ │ │ └── jwt-auth.guard.spec.ts │ │ └── index.ts │ │ ├── README.md │ │ ├── project.json │ │ ├── tsconfig.spec.json │ │ ├── .eslintrc.json │ │ ├── jest.config.ts │ │ ├── tsconfig.lib.json │ │ └── tsconfig.json ├── challenges-local-state │ ├── src │ │ ├── index.ts │ │ ├── lib │ │ │ ├── challenges-local-state.module.ts │ │ │ └── state │ │ │ │ └── challenges-local.facade.spec.ts │ │ └── test-setup.ts │ ├── README.md │ ├── project.json │ ├── tsconfig.spec.json │ └── tsconfig.lib.json ├── notes-data │ ├── src │ │ ├── index.ts │ │ ├── lib │ │ │ └── notes-data.module.ts │ │ └── test-setup.ts │ ├── README.md │ ├── project.json │ ├── tsconfig.spec.json │ └── tsconfig.lib.json ├── users-data │ ├── src │ │ ├── index.ts │ │ ├── lib │ │ │ └── users-data.module.ts │ │ └── test-setup.ts │ ├── README.md │ ├── project.json │ ├── tsconfig.spec.json │ └── tsconfig.lib.json ├── features-data │ ├── src │ │ ├── index.ts │ │ ├── lib │ │ │ ├── features-data.module.ts │ │ │ └── services │ │ │ │ └── features.service.spec.ts │ │ └── test-setup.ts │ ├── README.md │ ├── project.json │ ├── tsconfig.spec.json │ └── tsconfig.lib.json ├── challenges-data │ ├── src │ │ ├── index.ts │ │ ├── lib │ │ │ └── challenges-data.module.ts │ │ └── test-setup.ts │ ├── README.md │ ├── project.json │ ├── tsconfig.spec.json │ └── tsconfig.lib.json ├── flashcards-data │ ├── src │ │ ├── index.ts │ │ ├── lib │ │ │ └── flashcards-data.module.ts │ │ └── test-setup.ts │ ├── README.md │ ├── project.json │ ├── tsconfig.spec.json │ └── tsconfig.lib.json ├── notes-state │ ├── README.md │ ├── project.json │ ├── src │ │ ├── index.ts │ │ ├── test-setup.ts │ │ └── lib │ │ │ └── state │ │ │ └── state.ts │ ├── tsconfig.spec.json │ └── tsconfig.lib.json ├── users-state │ ├── README.md │ ├── project.json │ ├── src │ │ ├── index.ts │ │ ├── test-setup.ts │ │ └── lib │ │ │ └── state │ │ │ └── state.ts │ ├── tsconfig.spec.json │ └── tsconfig.lib.json ├── features-state │ ├── README.md │ ├── project.json │ ├── src │ │ ├── index.ts │ │ ├── test-setup.ts │ │ └── lib │ │ │ └── state │ │ │ └── state.ts │ ├── tsconfig.spec.json │ └── tsconfig.lib.json ├── challenges-state │ ├── README.md │ ├── project.json │ ├── src │ │ ├── index.ts │ │ ├── test-setup.ts │ │ └── lib │ │ │ └── state │ │ │ └── state.ts │ ├── tsconfig.spec.json │ └── tsconfig.lib.json ├── flashcards-state │ ├── README.md │ ├── project.json │ ├── src │ │ ├── index.ts │ │ ├── test-setup.ts │ │ └── lib │ │ │ └── state │ │ │ └── state.ts │ ├── tsconfig.spec.json │ └── tsconfig.lib.json └── testing │ ├── src │ └── index.ts │ ├── package.json │ ├── README.md │ ├── tsconfig.lib.json │ ├── tsconfig.spec.json │ ├── jest.config.ts │ ├── .eslintrc.json │ ├── tsconfig.json │ └── project.json ├── databases ├── notes.sqlite ├── users.sqlite ├── features.sqlite ├── challenges.sqlite └── flashcards.sqlite ├── jest.preset.js ├── .prettierignore ├── jest.config.ts ├── .editorconfig ├── .gitignore └── compose.yaml /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | } 3 | -------------------------------------------------------------------------------- /apps/notes/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/portal/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/users/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /remote/notes/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /remote/users/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/challenges/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/dashboard/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/flashcards/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/portal/src/app/app.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /remote/challenges/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /remote/features/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /remote/flashcards/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tooling/wizard/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/dashboard/src/app/app.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tooling/wizard/src/app/app.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/dashboard/src/app/home/home.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/notes/src/app/notes/notes.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/users/src/app/users/users.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true 3 | } 4 | -------------------------------------------------------------------------------- /apps/notes/server.ts: -------------------------------------------------------------------------------- 1 | import('./src/main.server'); 2 | -------------------------------------------------------------------------------- /apps/portal/src/app/features/features.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/users/server.ts: -------------------------------------------------------------------------------- 1 | import('./src/main.server'); 2 | -------------------------------------------------------------------------------- /server/routes.json: -------------------------------------------------------------------------------- 1 | { 2 | "/api/*": "/$1" 3 | } 4 | -------------------------------------------------------------------------------- /tooling/wizard/src/app/wizard/wizard.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/challenges/server.ts: -------------------------------------------------------------------------------- 1 | import('./src/main.server'); 2 | -------------------------------------------------------------------------------- /apps/dashboard/server.ts: -------------------------------------------------------------------------------- 1 | import('./src/main.server'); 2 | -------------------------------------------------------------------------------- /apps/flashcards/server.ts: -------------------------------------------------------------------------------- 1 | import('./src/main.server'); 2 | -------------------------------------------------------------------------------- /apps/challenges/src/app/challenges/challenges.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/flashcards/src/app/flashcards/flashcards.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/notes/src/app/notes/notes-list/notes-list.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/users/src/app/users/users-list/users-list.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/notes/src/app/notes/note-details/note-details.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/users/src/app/users/user-details/user-details.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/portal/src/app/features/features-list/features-list.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /libs/material/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/material.module'; 2 | -------------------------------------------------------------------------------- /apps/portal/src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /apps/portal/src/app/features/feature-details/feature-details.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /libs/api-interfaces/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/api-interfaces'; 2 | -------------------------------------------------------------------------------- /apps/challenges/src/app/challenges/challenges-list/challenges-list.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/flashcards/src/app/flashcards/flashcards-list/flashcards-list.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /remote/notes/src/app/notes/dto/create-note.dto.ts: -------------------------------------------------------------------------------- 1 | export class CreateNoteDto {} 2 | -------------------------------------------------------------------------------- /remote/users/src/app/users/dto/create-user.dto.ts: -------------------------------------------------------------------------------- 1 | export class CreateUserDto {} 2 | -------------------------------------------------------------------------------- /apps/challenges/src/app/challenges/challenge-details/challenge-details.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/flashcards/src/app/flashcards/flashcard-details/flashcard-details.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/notes-e2e/src/support/app.po.ts: -------------------------------------------------------------------------------- 1 | export const getGreeting = () => cy.get('h1'); 2 | -------------------------------------------------------------------------------- /apps/notes/src/main.ts: -------------------------------------------------------------------------------- 1 | import('./bootstrap').catch((err) => console.error(err)); 2 | -------------------------------------------------------------------------------- /apps/portal-e2e/src/support/app.po.ts: -------------------------------------------------------------------------------- 1 | export const getGreeting = () => cy.get('h1'); 2 | -------------------------------------------------------------------------------- /apps/users-e2e/src/support/app.po.ts: -------------------------------------------------------------------------------- 1 | export const getGreeting = () => cy.get('h1'); 2 | -------------------------------------------------------------------------------- /apps/users/src/main.ts: -------------------------------------------------------------------------------- 1 | import('./bootstrap').catch((err) => console.error(err)); 2 | -------------------------------------------------------------------------------- /apps/challenges-e2e/src/support/app.po.ts: -------------------------------------------------------------------------------- 1 | export const getGreeting = () => cy.get('h1'); 2 | -------------------------------------------------------------------------------- /apps/challenges/src/main.ts: -------------------------------------------------------------------------------- 1 | import('./bootstrap').catch((err) => console.error(err)); 2 | -------------------------------------------------------------------------------- /apps/dashboard-e2e/src/support/app.po.ts: -------------------------------------------------------------------------------- 1 | export const getGreeting = () => cy.get('h1'); 2 | -------------------------------------------------------------------------------- /apps/flashcards-e2e/src/support/app.po.ts: -------------------------------------------------------------------------------- 1 | export const getGreeting = () => cy.get('h1'); 2 | -------------------------------------------------------------------------------- /apps/flashcards/src/main.ts: -------------------------------------------------------------------------------- 1 | import('./bootstrap').catch((err) => console.error(err)); 2 | -------------------------------------------------------------------------------- /libs/material/README.md: -------------------------------------------------------------------------------- 1 | # material 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | -------------------------------------------------------------------------------- /remote/challenges/src/app/challenges/dto/create-challenge.dto.ts: -------------------------------------------------------------------------------- 1 | export class CreateChallengeDto {} 2 | -------------------------------------------------------------------------------- /remote/flashcards/src/app/flashcards/dto/create-flashcard.dto.ts: -------------------------------------------------------------------------------- 1 | export class CreateFlashcardDto {} 2 | -------------------------------------------------------------------------------- /databases/notes.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onehungrymind/enterprisey-apps/HEAD/databases/notes.sqlite -------------------------------------------------------------------------------- /databases/users.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onehungrymind/enterprisey-apps/HEAD/databases/users.sqlite -------------------------------------------------------------------------------- /remote/users/src/app/auth/auth.constants.ts: -------------------------------------------------------------------------------- 1 | export const jwtConstants = { 2 | secret: 'secretKey', 3 | }; 4 | -------------------------------------------------------------------------------- /tooling/wizard/src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /apps/notes/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onehungrymind/enterprisey-apps/HEAD/apps/notes/src/favicon.ico -------------------------------------------------------------------------------- /apps/users/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onehungrymind/enterprisey-apps/HEAD/apps/users/src/favicon.ico -------------------------------------------------------------------------------- /databases/features.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onehungrymind/enterprisey-apps/HEAD/databases/features.sqlite -------------------------------------------------------------------------------- /jest.preset.js: -------------------------------------------------------------------------------- 1 | const nxPreset = require('@nx/jest/preset').default; 2 | 3 | module.exports = { ...nxPreset }; 4 | -------------------------------------------------------------------------------- /apps/portal/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onehungrymind/enterprisey-apps/HEAD/apps/portal/src/favicon.ico -------------------------------------------------------------------------------- /databases/challenges.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onehungrymind/enterprisey-apps/HEAD/databases/challenges.sqlite -------------------------------------------------------------------------------- /databases/flashcards.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onehungrymind/enterprisey-apps/HEAD/databases/flashcards.sqlite -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Add files here to ignore them from prettier formatting 2 | /dist 3 | /coverage 4 | /.nx/cache 5 | .angular 6 | -------------------------------------------------------------------------------- /apps/challenges/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onehungrymind/enterprisey-apps/HEAD/apps/challenges/src/favicon.ico -------------------------------------------------------------------------------- /apps/dashboard/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onehungrymind/enterprisey-apps/HEAD/apps/dashboard/src/favicon.ico -------------------------------------------------------------------------------- /apps/flashcards/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onehungrymind/enterprisey-apps/HEAD/apps/flashcards/src/favicon.ico -------------------------------------------------------------------------------- /tooling/wizard/src/app/app.routes.ts: -------------------------------------------------------------------------------- 1 | import { Route } from '@angular/router'; 2 | 3 | export const appRoutes: Route[] = []; 4 | -------------------------------------------------------------------------------- /tooling/wizard/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/onehungrymind/enterprisey-apps/HEAD/tooling/wizard/src/favicon.ico -------------------------------------------------------------------------------- /jest.config.ts: -------------------------------------------------------------------------------- 1 | import { getJestProjects } from '@nx/jest'; 2 | 3 | export default { 4 | projects: getJestProjects(), 5 | }; 6 | -------------------------------------------------------------------------------- /libs/ui-login/src/index.ts: -------------------------------------------------------------------------------- 1 | export { LoginModule } from './lib/ui-login.module'; 2 | export { LoginComponent } from './lib/ui-login/ui-login.component'; 3 | -------------------------------------------------------------------------------- /remote/users/src/app/auth/role.decorator.ts: -------------------------------------------------------------------------------- 1 | import { Reflector } from '@nestjs/core'; 2 | 3 | export const Role = Reflector.createDecorator(); 4 | -------------------------------------------------------------------------------- /libs/guards/remote-auth/src/lib/roles.decorator.ts: -------------------------------------------------------------------------------- 1 | import { Reflector } from '@nestjs/core'; 2 | 3 | export const Roles = Reflector.createDecorator(); 4 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "nrwl.angular-console", 4 | "esbenp.prettier-vscode", 5 | "firsttris.vscode-jest-runner" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /libs/challenges-local-state/src/index.ts: -------------------------------------------------------------------------------- 1 | export { ChallengesLocalFacade } from './lib/state/challenges-local.facade'; 2 | export * from './lib/challenges-local-state.module'; 3 | -------------------------------------------------------------------------------- /libs/notes-data/src/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Public API Surface of notes-data 3 | */ 4 | 5 | export * from './lib/services/notes.service'; 6 | export * from './lib/notes-data.module'; 7 | -------------------------------------------------------------------------------- /libs/users-data/src/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Public API Surface of users-data 3 | */ 4 | 5 | export * from './lib/services/users.service'; 6 | export * from './lib/users-data.module'; 7 | -------------------------------------------------------------------------------- /tooling/wizard-e2e/src/support/app.po.ts: -------------------------------------------------------------------------------- 1 | export const getGreeting = () => cy.get('h1'); 2 | 3 | export const getReferenceTitle = () => cy.get('[data-test="reference-title"]'); 4 | -------------------------------------------------------------------------------- /libs/ui-login/README.md: -------------------------------------------------------------------------------- 1 | # ui-login 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test ui-login` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/features-data/src/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Public API Surface of challenges-data 3 | */ 4 | 5 | export * from './lib/services/features.service'; 6 | export * from './lib/features-data.module'; 7 | -------------------------------------------------------------------------------- /libs/notes-data/README.md: -------------------------------------------------------------------------------- 1 | # notes-data 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test notes-data` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/users-data/README.md: -------------------------------------------------------------------------------- 1 | # users-data 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test users-data` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/challenges-data/src/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Public API Surface of challenges-data 3 | */ 4 | 5 | export * from './lib/services/challenges.service'; 6 | export * from './lib/challenges-data.module'; 7 | -------------------------------------------------------------------------------- /libs/flashcards-data/src/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Public API Surface of flashcards-data 3 | */ 4 | 5 | export * from './lib/services/flashcards.service'; 6 | export * from './lib/flashcards-data.module'; 7 | -------------------------------------------------------------------------------- /libs/notes-state/README.md: -------------------------------------------------------------------------------- 1 | # notes-state 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test notes-state` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/users-state/README.md: -------------------------------------------------------------------------------- 1 | # users-state 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test users-state` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/features-data/README.md: -------------------------------------------------------------------------------- 1 | # features-data 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test features-data` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /apps/dashboard/webpack.config.ts: -------------------------------------------------------------------------------- 1 | import { withModuleFederation } from '@nx/angular/module-federation'; 2 | import config from './module-federation.config'; 3 | 4 | export default withModuleFederation(config); 5 | -------------------------------------------------------------------------------- /apps/notes/webpack.config.ts: -------------------------------------------------------------------------------- 1 | import { withModuleFederation } from '@nx/angular/module-federation'; 2 | import config from './module-federation.config'; 3 | 4 | export default withModuleFederation(config); 5 | -------------------------------------------------------------------------------- /apps/users/webpack.config.ts: -------------------------------------------------------------------------------- 1 | import { withModuleFederation } from '@nx/angular/module-federation'; 2 | import config from './module-federation.config'; 3 | 4 | export default withModuleFederation(config); 5 | -------------------------------------------------------------------------------- /libs/challenges-data/README.md: -------------------------------------------------------------------------------- 1 | # challenges-data 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test challenges-data` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/features-state/README.md: -------------------------------------------------------------------------------- 1 | # features-state 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test features-state` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/flashcards-data/README.md: -------------------------------------------------------------------------------- 1 | # flashcards-data 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test flashcards-data` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/guards/remote-auth/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/guards-remote-auth.module'; 2 | export * from './lib/jwt-auth.guard'; 3 | export * from './lib/roles.guard'; 4 | export * from './lib/roles.decorator'; 5 | -------------------------------------------------------------------------------- /apps/challenges/webpack.config.ts: -------------------------------------------------------------------------------- 1 | import { withModuleFederation } from '@nx/angular/module-federation'; 2 | import config from './module-federation.config'; 3 | 4 | export default withModuleFederation(config); 5 | -------------------------------------------------------------------------------- /apps/flashcards/webpack.config.ts: -------------------------------------------------------------------------------- 1 | import { withModuleFederation } from '@nx/angular/module-federation'; 2 | import config from './module-federation.config'; 3 | 4 | export default withModuleFederation(config); 5 | -------------------------------------------------------------------------------- /apps/notes-e2e/src/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } 6 | -------------------------------------------------------------------------------- /apps/notes/tsconfig.editor.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["src/**/*.ts"], 4 | "compilerOptions": {}, 5 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 6 | } 7 | -------------------------------------------------------------------------------- /apps/portal-e2e/src/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } 6 | -------------------------------------------------------------------------------- /apps/users-e2e/src/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } 6 | -------------------------------------------------------------------------------- /apps/users/tsconfig.editor.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["src/**/*.ts"], 4 | "compilerOptions": {}, 5 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 6 | } 7 | -------------------------------------------------------------------------------- /libs/challenges-state/README.md: -------------------------------------------------------------------------------- 1 | # challenges-state 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test challenges-state` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/flashcards-state/README.md: -------------------------------------------------------------------------------- 1 | # flashcards-state 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test flashcards-state` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /apps/challenges-e2e/src/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } 6 | -------------------------------------------------------------------------------- /apps/challenges/tsconfig.editor.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["src/**/*.ts"], 4 | "compilerOptions": {}, 5 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 6 | } 7 | -------------------------------------------------------------------------------- /apps/dashboard-e2e/src/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } 6 | -------------------------------------------------------------------------------- /apps/dashboard/tsconfig.editor.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["src/**/*.ts"], 4 | "compilerOptions": {}, 5 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 6 | } 7 | -------------------------------------------------------------------------------- /apps/flashcards-e2e/src/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } 6 | -------------------------------------------------------------------------------- /apps/flashcards/tsconfig.editor.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["src/**/*.ts"], 4 | "compilerOptions": {}, 5 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 6 | } 7 | -------------------------------------------------------------------------------- /apps/portal/tsconfig.editor.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["src/**/*.ts"], 4 | "compilerOptions": {}, 5 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 6 | } 7 | -------------------------------------------------------------------------------- /tooling/wizard-e2e/src/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } 6 | -------------------------------------------------------------------------------- /tooling/wizard/tsconfig.editor.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["src/**/*.ts"], 4 | "compilerOptions": {}, 5 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 6 | } 7 | -------------------------------------------------------------------------------- /apps/notes/webpack.server.config.ts: -------------------------------------------------------------------------------- 1 | import { withModuleFederationForSSR } from '@nx/angular/module-federation'; 2 | import config from './module-federation.config'; 3 | 4 | export default withModuleFederationForSSR(config); 5 | -------------------------------------------------------------------------------- /apps/users/webpack.server.config.ts: -------------------------------------------------------------------------------- 1 | import { withModuleFederationForSSR } from '@nx/angular/module-federation'; 2 | import config from './module-federation.config'; 3 | 4 | export default withModuleFederationForSSR(config); 5 | -------------------------------------------------------------------------------- /libs/testing/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/challenges.mock'; 2 | export * from './lib/features.mock'; 3 | export * from './lib/flashcards.mock'; 4 | export * from './lib/notes.mock'; 5 | export * from './lib/users.mock'; 6 | -------------------------------------------------------------------------------- /apps/challenges/webpack.server.config.ts: -------------------------------------------------------------------------------- 1 | import { withModuleFederationForSSR } from '@nx/angular/module-federation'; 2 | import config from './module-federation.config'; 3 | 4 | export default withModuleFederationForSSR(config); 5 | -------------------------------------------------------------------------------- /apps/dashboard/webpack.server.config.ts: -------------------------------------------------------------------------------- 1 | import { withModuleFederationForSSR } from '@nx/angular/module-federation'; 2 | import config from './module-federation.config'; 3 | 4 | export default withModuleFederationForSSR(config); 5 | -------------------------------------------------------------------------------- /apps/flashcards/webpack.server.config.ts: -------------------------------------------------------------------------------- 1 | import { withModuleFederationForSSR } from '@nx/angular/module-federation'; 2 | import config from './module-federation.config'; 3 | 4 | export default withModuleFederationForSSR(config); 5 | -------------------------------------------------------------------------------- /libs/challenges-local-state/README.md: -------------------------------------------------------------------------------- 1 | # challenges-local-state 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test challenges-local-state` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /apps/dashboard/src/assets/module-federation.manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "users": "http://localhost:4201", 3 | "challenges": "http://localhost:4202", 4 | "flashcards": "http://localhost:4203", 5 | "notes": "http://localhost:4204" 6 | } 7 | -------------------------------------------------------------------------------- /libs/guards/remote-auth/src/lib/guards-remote-auth.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | 3 | @Module({ 4 | controllers: [], 5 | providers: [], 6 | exports: [], 7 | }) 8 | export class GuardsRemoteAuthModule {} 9 | -------------------------------------------------------------------------------- /libs/notes-data/src/lib/notes-data.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | @NgModule({ 5 | imports: [CommonModule], 6 | }) 7 | export class NotesDataModule {} 8 | -------------------------------------------------------------------------------- /libs/users-data/src/lib/users-data.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | @NgModule({ 5 | imports: [CommonModule], 6 | }) 7 | export class UsersDataModule {} 8 | -------------------------------------------------------------------------------- /remote/notes/src/app/notes/dto/update-note.dto.ts: -------------------------------------------------------------------------------- 1 | import { PartialType } from '@nestjs/mapped-types'; 2 | import { CreateNoteDto } from './create-note.dto'; 3 | 4 | export class UpdateNoteDto extends PartialType(CreateNoteDto) {} 5 | -------------------------------------------------------------------------------- /remote/users/src/app/auth/guards/local-auth.guard.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@nestjs/common'; 2 | import { AuthGuard } from '@nestjs/passport'; 3 | 4 | @Injectable() 5 | export class LocalAuthGuard extends AuthGuard('local') {} 6 | -------------------------------------------------------------------------------- /remote/users/src/app/users/dto/update-user.dto.ts: -------------------------------------------------------------------------------- 1 | import { PartialType } from '@nestjs/mapped-types'; 2 | import { CreateUserDto } from './create-user.dto'; 3 | 4 | export class UpdateUserDto extends PartialType(CreateUserDto) {} 5 | -------------------------------------------------------------------------------- /libs/guards/remote-auth/src/lib/roles.guard.spec.ts: -------------------------------------------------------------------------------- 1 | import { RolesGuard } from './roles.guard'; 2 | 3 | describe('RolesGuard', () => { 4 | it('should be defined', () => { 5 | expect(new RolesGuard()).toBeDefined(); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /libs/features-data/src/lib/features-data.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | @NgModule({ 5 | imports: [CommonModule], 6 | }) 7 | export class FeaturesDataModule {} 8 | -------------------------------------------------------------------------------- /remote/users/src/app/auth/guards/jwt-auth.guard.ts: -------------------------------------------------------------------------------- 1 | import { HttpException, Injectable } from '@nestjs/common'; 2 | import { AuthGuard } from '@nestjs/passport'; 3 | 4 | @Injectable() 5 | export class JwtAuthGuard extends AuthGuard('jwt') {} 6 | -------------------------------------------------------------------------------- /libs/challenges-data/src/lib/challenges-data.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | @NgModule({ 5 | imports: [CommonModule], 6 | }) 7 | export class ChallengesDataModule {} 8 | -------------------------------------------------------------------------------- /libs/flashcards-data/src/lib/flashcards-data.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | @NgModule({ 5 | imports: [CommonModule], 6 | }) 7 | export class FlashcardsDataModule {} 8 | -------------------------------------------------------------------------------- /libs/guards/remote-auth/README.md: -------------------------------------------------------------------------------- 1 | # guards-remote-auth 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test guards-remote-auth` to execute the unit tests via [Jest](https://jestjs.io). 8 | -------------------------------------------------------------------------------- /libs/guards/remote-auth/src/lib/jwt-auth.guard.spec.ts: -------------------------------------------------------------------------------- 1 | import { JwtAuthGuard } from './jwt-auth.guard'; 2 | 3 | describe('JwtAuthGuard', () => { 4 | it('should be defined', () => { 5 | expect(new JwtAuthGuard()).toBeDefined(); 6 | }); 7 | }); 8 | -------------------------------------------------------------------------------- /libs/testing/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@proto/testing", 3 | "version": "0.0.1", 4 | "dependencies": { 5 | "tslib": "^2.3.0" 6 | }, 7 | "type": "commonjs", 8 | "main": "./src/index.js", 9 | "typings": "./src/index.d.ts" 10 | } 11 | -------------------------------------------------------------------------------- /apps/dashboard/src/app/app.routes.ts: -------------------------------------------------------------------------------- 1 | import { Route } from '@angular/router'; 2 | import { HomeComponent } from './home/home.component'; 3 | 4 | export const appRoutes: Route[] = [ 5 | { 6 | path: '', 7 | component: HomeComponent, 8 | }, 9 | ]; 10 | -------------------------------------------------------------------------------- /libs/api-interfaces/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@proto/api-interfaces", 3 | "version": "0.0.1", 4 | "dependencies": { 5 | "tslib": "^2.3.0" 6 | }, 7 | "type": "commonjs", 8 | "main": "./src/index.js", 9 | "typings": "./src/index.d.ts" 10 | } 11 | -------------------------------------------------------------------------------- /libs/challenges-local-state/src/lib/challenges-local-state.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | @NgModule({ 5 | imports: [CommonModule], 6 | }) 7 | export class ChallengesLocalStateModule {} 8 | -------------------------------------------------------------------------------- /remote/challenges/src/app/challenges/dto/update-challenge.dto.ts: -------------------------------------------------------------------------------- 1 | import { PartialType } from '@nestjs/mapped-types'; 2 | import { CreateChallengeDto } from './create-challenge.dto'; 3 | 4 | export class UpdateChallengeDto extends PartialType(CreateChallengeDto) {} 5 | -------------------------------------------------------------------------------- /remote/flashcards/src/app/flashcards/dto/update-flashcard.dto.ts: -------------------------------------------------------------------------------- 1 | import { PartialType } from '@nestjs/mapped-types'; 2 | import { CreateFlashcardDto } from './create-flashcard.dto'; 3 | 4 | export class UpdateFlashcardDto extends PartialType(CreateFlashcardDto) {} 5 | -------------------------------------------------------------------------------- /libs/guards/remote-auth/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "guards-remote-auth", 3 | "$schema": "../../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/guards/remote-auth/src", 5 | "projectType": "library", 6 | "targets": {}, 7 | "tags": [] 8 | } 9 | -------------------------------------------------------------------------------- /apps/notes/src/app/app.routes.ts: -------------------------------------------------------------------------------- 1 | import { Route } from '@angular/router'; 2 | 3 | export const appRoutes: Route[] = [ 4 | { 5 | path: '', 6 | loadChildren: () => 7 | import('./remote-entry/entry.routes').then((m) => m.remoteRoutes), 8 | }, 9 | ]; 10 | -------------------------------------------------------------------------------- /apps/users/src/app/app.routes.ts: -------------------------------------------------------------------------------- 1 | import { Route } from '@angular/router'; 2 | 3 | export const appRoutes: Route[] = [ 4 | { 5 | path: '', 6 | loadChildren: () => 7 | import('./remote-entry/entry.routes').then((m) => m.remoteRoutes), 8 | }, 9 | ]; 10 | -------------------------------------------------------------------------------- /libs/material/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "material", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/material/src", 5 | "prefix": "proto", 6 | "tags": [], 7 | "projectType": "library", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /libs/ui-login/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ui-login", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/ui-login/src", 5 | "prefix": "proto", 6 | "tags": [], 7 | "projectType": "library", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /apps/challenges/src/app/app.routes.ts: -------------------------------------------------------------------------------- 1 | import { Route } from '@angular/router'; 2 | 3 | export const appRoutes: Route[] = [ 4 | { 5 | path: '', 6 | loadChildren: () => 7 | import('./remote-entry/entry.routes').then((m) => m.remoteRoutes), 8 | }, 9 | ]; 10 | -------------------------------------------------------------------------------- /apps/flashcards/src/app/app.routes.ts: -------------------------------------------------------------------------------- 1 | import { Route } from '@angular/router'; 2 | 3 | export const appRoutes: Route[] = [ 4 | { 5 | path: '', 6 | loadChildren: () => 7 | import('./remote-entry/entry.routes').then((m) => m.remoteRoutes), 8 | }, 9 | ]; 10 | -------------------------------------------------------------------------------- /apps/notes-e2e/.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/portal-e2e/.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/users-e2e/.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 | -------------------------------------------------------------------------------- /libs/notes-data/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "notes-data", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/notes-data/src", 5 | "prefix": "proto", 6 | "tags": [], 7 | "projectType": "library", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /libs/users-data/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "users-data", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/users-data/src", 5 | "prefix": "proto", 6 | "tags": [], 7 | "projectType": "library", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /remote/features-e2e/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": ["jest.config.ts", "src/**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /remote/notes-e2e/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": ["jest.config.ts", "src/**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /remote/users-e2e/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": ["jest.config.ts", "src/**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/challenges-e2e/.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/dashboard-e2e/.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/flashcards-e2e/.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 | -------------------------------------------------------------------------------- /libs/notes-state/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "notes-state", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/notes-state/src", 5 | "prefix": "proto", 6 | "tags": [], 7 | "projectType": "library", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /libs/notes-state/src/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Public API Surface of notes-state 3 | */ 4 | import * as NotesState from './lib/state/state'; 5 | 6 | export { NotesFacade } from './lib/state/notes.facade'; 7 | export * as NotesEffects from './lib/state/notes.effects'; 8 | export { NotesState }; 9 | -------------------------------------------------------------------------------- /libs/users-state/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "users-state", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/users-state/src", 5 | "prefix": "proto", 6 | "tags": [], 7 | "projectType": "library", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /libs/users-state/src/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Public API Surface of users-state 3 | */ 4 | import * as UsersState from './lib/state/state'; 5 | 6 | export { UsersFacade } from './lib/state/users.facade'; 7 | export * as UsersEffects from './lib/state/users.effects'; 8 | export { UsersState }; 9 | -------------------------------------------------------------------------------- /remote/challenges-e2e/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": ["jest.config.ts", "src/**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /remote/flashcards-e2e/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": ["jest.config.ts", "src/**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /tooling/wizard-e2e/.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 | -------------------------------------------------------------------------------- /libs/features-data/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "features-data", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/features-data/src", 5 | "prefix": "proto", 6 | "tags": [], 7 | "projectType": "library", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /libs/features-state/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "features-state", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/features-state/src", 5 | "prefix": "proto", 6 | "tags": [], 7 | "projectType": "library", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /remote/notes/src/app/database/database.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { databaseProviders } from './database.providers'; 3 | 4 | @Module({ 5 | providers: [...databaseProviders], 6 | exports: [...databaseProviders], 7 | }) 8 | export class DatabaseModule {} 9 | -------------------------------------------------------------------------------- /remote/users/src/app/database/database.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { databaseProviders } from './database.providers'; 3 | 4 | @Module({ 5 | providers: [...databaseProviders], 6 | exports: [...databaseProviders], 7 | }) 8 | export class DatabaseModule {} 9 | -------------------------------------------------------------------------------- /apps/notes-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "notes-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "sourceRoot": "apps/notes-e2e/src", 6 | "targets": {}, 7 | "tags": [], 8 | "implicitDependencies": ["notes"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/portal/src/main.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { appConfig } from './app/app.config'; 3 | import { AppComponent } from './app/app.component'; 4 | 5 | bootstrapApplication(AppComponent, appConfig).catch((err) => 6 | console.error(err) 7 | ); 8 | -------------------------------------------------------------------------------- /apps/users-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "users-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "sourceRoot": "apps/users-e2e/src", 6 | "targets": {}, 7 | "tags": [], 8 | "implicitDependencies": ["users"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/challenges-data/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "challenges-data", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/challenges-data/src", 5 | "prefix": "proto", 6 | "tags": [], 7 | "projectType": "library", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /libs/flashcards-data/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flashcards-data", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/flashcards-data/src", 5 | "prefix": "proto", 6 | "tags": [], 7 | "projectType": "library", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /remote/challenges/src/app/database/database.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { databaseProviders } from './database.providers'; 3 | 4 | @Module({ 5 | providers: [...databaseProviders], 6 | exports: [...databaseProviders], 7 | }) 8 | export class DatabaseModule {} 9 | -------------------------------------------------------------------------------- /remote/features-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.spec.json" 8 | } 9 | ], 10 | "compilerOptions": { 11 | "esModuleInterop": true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /remote/features/src/app/database/database.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { databaseProviders } from './database.providers'; 3 | 4 | @Module({ 5 | providers: [...databaseProviders], 6 | exports: [...databaseProviders], 7 | }) 8 | export class DatabaseModule {} 9 | -------------------------------------------------------------------------------- /remote/flashcards/src/app/database/database.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { databaseProviders } from './database.providers'; 3 | 4 | @Module({ 5 | providers: [...databaseProviders], 6 | exports: [...databaseProviders], 7 | }) 8 | export class DatabaseModule {} 9 | -------------------------------------------------------------------------------- /remote/notes-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.spec.json" 8 | } 9 | ], 10 | "compilerOptions": { 11 | "esModuleInterop": true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /remote/users-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.spec.json" 8 | } 9 | ], 10 | "compilerOptions": { 11 | "esModuleInterop": true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /apps/portal-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "portal-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "sourceRoot": "apps/portal-e2e/src", 6 | "targets": {}, 7 | "tags": [], 8 | "implicitDependencies": ["portal"] 9 | } 10 | -------------------------------------------------------------------------------- /libs/challenges-state/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "challenges-state", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/challenges-state/src", 5 | "prefix": "proto", 6 | "tags": [], 7 | "projectType": "library", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /libs/flashcards-state/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flashcards-state", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/flashcards-state/src", 5 | "prefix": "proto", 6 | "tags": [], 7 | "projectType": "library", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /libs/testing/README.md: -------------------------------------------------------------------------------- 1 | # testing 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Building 6 | 7 | Run `nx build testing` to build the library. 8 | 9 | ## Running unit tests 10 | 11 | Run `nx test testing` to execute the unit tests via [Jest](https://jestjs.io). 12 | -------------------------------------------------------------------------------- /remote/challenges-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.spec.json" 8 | } 9 | ], 10 | "compilerOptions": { 11 | "esModuleInterop": true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /remote/flashcards-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.spec.json" 8 | } 9 | ], 10 | "compilerOptions": { 11 | "esModuleInterop": true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /apps/dashboard/src/bootstrap.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { appConfig } from './app/app.config'; 3 | import { AppComponent } from './app/app.component'; 4 | 5 | bootstrapApplication(AppComponent, appConfig).catch((err) => 6 | console.error(err) 7 | ); 8 | -------------------------------------------------------------------------------- /tooling/wizard-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wizard-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "sourceRoot": "tooling/wizard-e2e/src", 6 | "targets": {}, 7 | "tags": [], 8 | "implicitDependencies": ["wizard"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/notes/module-federation.config.ts: -------------------------------------------------------------------------------- 1 | import { ModuleFederationConfig } from '@nx/webpack'; 2 | 3 | const config: ModuleFederationConfig = { 4 | name: 'notes', 5 | exposes: { 6 | './Routes': 'apps/notes/src/app/remote-entry/entry.routes.ts', 7 | }, 8 | }; 9 | 10 | export default config; 11 | -------------------------------------------------------------------------------- /apps/users/module-federation.config.ts: -------------------------------------------------------------------------------- 1 | import { ModuleFederationConfig } from '@nx/webpack'; 2 | 3 | const config: ModuleFederationConfig = { 4 | name: 'users', 5 | exposes: { 6 | './Routes': 'apps/users/src/app/remote-entry/entry.routes.ts', 7 | }, 8 | }; 9 | 10 | export default config; 11 | -------------------------------------------------------------------------------- /libs/features-state/src/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Public API Surface of features-state 3 | */ 4 | import * as FeaturesState from './lib/state/state'; 5 | 6 | export { FeaturesFacade } from './lib/state/features.facade'; 7 | export * as FeaturesEffects from './lib/state/features.effects'; 8 | export { FeaturesState }; 9 | -------------------------------------------------------------------------------- /apps/challenges-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "challenges-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "sourceRoot": "apps/challenges-e2e/src", 6 | "targets": {}, 7 | "tags": [], 8 | "implicitDependencies": ["challenges"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/dashboard-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dashboard-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "sourceRoot": "apps/dashboard-e2e/src", 6 | "targets": {}, 7 | "tags": [], 8 | "implicitDependencies": ["dashboard"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/flashcards-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flashcards-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "sourceRoot": "apps/flashcards-e2e/src", 6 | "targets": {}, 7 | "tags": [], 8 | "implicitDependencies": ["flashcards"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/portal/src/main.server.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { AppComponent } from './app/app.component'; 3 | import { config } from './app/app.config.server'; 4 | 5 | const bootstrap = () => bootstrapApplication(AppComponent, config); 6 | 7 | export default bootstrap; 8 | -------------------------------------------------------------------------------- /libs/api-interfaces/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 | -------------------------------------------------------------------------------- /libs/challenges-local-state/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "challenges-local-state", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/challenges-local-state/src", 5 | "prefix": "proto", 6 | "tags": [], 7 | "projectType": "library", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /remote/features-e2e/src/support/global-teardown.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | module.exports = async function () { 4 | // Put clean up logic here (e.g. stopping services, docker-compose, etc.). 5 | // Hint: `globalThis` is shared between setup and teardown. 6 | console.log(globalThis.__TEARDOWN_MESSAGE__); 7 | }; 8 | -------------------------------------------------------------------------------- /remote/notes-e2e/src/support/global-teardown.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | module.exports = async function () { 4 | // Put clean up logic here (e.g. stopping services, docker-compose, etc.). 5 | // Hint: `globalThis` is shared between setup and teardown. 6 | console.log(globalThis.__TEARDOWN_MESSAGE__); 7 | }; 8 | -------------------------------------------------------------------------------- /remote/users-e2e/src/support/global-teardown.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | module.exports = async function () { 4 | // Put clean up logic here (e.g. stopping services, docker-compose, etc.). 5 | // Hint: `globalThis` is shared between setup and teardown. 6 | console.log(globalThis.__TEARDOWN_MESSAGE__); 7 | }; 8 | -------------------------------------------------------------------------------- /apps/challenges/module-federation.config.ts: -------------------------------------------------------------------------------- 1 | import { ModuleFederationConfig } from '@nx/webpack'; 2 | 3 | const config: ModuleFederationConfig = { 4 | name: 'challenges', 5 | exposes: { 6 | './Routes': 'apps/challenges/src/app/remote-entry/entry.routes.ts', 7 | }, 8 | }; 9 | 10 | export default config; 11 | -------------------------------------------------------------------------------- /apps/dashboard/src/bootstrap.server.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { AppComponent } from './app/app.component'; 3 | import { config } from './app/app.config.server'; 4 | 5 | const bootstrap = () => bootstrapApplication(AppComponent, config); 6 | 7 | export default bootstrap; 8 | -------------------------------------------------------------------------------- /apps/flashcards/module-federation.config.ts: -------------------------------------------------------------------------------- 1 | import { ModuleFederationConfig } from '@nx/webpack'; 2 | 3 | const config: ModuleFederationConfig = { 4 | name: 'flashcards', 5 | exposes: { 6 | './Routes': 'apps/flashcards/src/app/remote-entry/entry.routes.ts', 7 | }, 8 | }; 9 | 10 | export default config; 11 | -------------------------------------------------------------------------------- /libs/challenges-state/src/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Public API Surface of challenges-state 3 | */ 4 | import * as ChallengesState from './lib/state/state'; 5 | 6 | export { ChallengesFacade } from './lib/state/challenges.facade'; 7 | export * as ChallengesEffects from './lib/state/challenges.effects'; 8 | export { ChallengesState }; 9 | -------------------------------------------------------------------------------- /libs/flashcards-state/src/index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Public API Surface of flashcards-state 3 | */ 4 | import * as FlashcardsState from './lib/state/state'; 5 | 6 | export { FlashcardsFacade } from './lib/state/flashcards.facade'; 7 | export * as FlashcardsEffects from './lib/state/flashcards.effects'; 8 | export { FlashcardsState }; 9 | -------------------------------------------------------------------------------- /libs/testing/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": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /remote/challenges-e2e/src/support/global-teardown.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | module.exports = async function () { 4 | // Put clean up logic here (e.g. stopping services, docker-compose, etc.). 5 | // Hint: `globalThis` is shared between setup and teardown. 6 | console.log(globalThis.__TEARDOWN_MESSAGE__); 7 | }; 8 | -------------------------------------------------------------------------------- /remote/flashcards-e2e/src/support/global-teardown.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | module.exports = async function () { 4 | // Put clean up logic here (e.g. stopping services, docker-compose, etc.). 5 | // Hint: `globalThis` is shared between setup and teardown. 6 | console.log(globalThis.__TEARDOWN_MESSAGE__); 7 | }; 8 | -------------------------------------------------------------------------------- /tooling/wizard/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/dashboard/src/app/home/home.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'proto-home', 5 | standalone: true, 6 | imports: [], 7 | templateUrl: './home.component.html', 8 | styleUrl: './home.component.scss' 9 | }) 10 | export class HomeComponent { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /apps/dashboard/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /apps/notes/src/bootstrap.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { appConfig } from './app/app.config'; 3 | import { RemoteEntryComponent } from './app/remote-entry/entry.component'; 4 | 5 | bootstrapApplication(RemoteEntryComponent, appConfig).catch((err) => 6 | console.error(err) 7 | ); 8 | -------------------------------------------------------------------------------- /apps/notes/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /apps/portal/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /apps/users/src/bootstrap.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { appConfig } from './app/app.config'; 3 | import { RemoteEntryComponent } from './app/remote-entry/entry.component'; 4 | 5 | bootstrapApplication(RemoteEntryComponent, appConfig).catch((err) => 6 | console.error(err) 7 | ); 8 | -------------------------------------------------------------------------------- /apps/users/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /libs/ui-login/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /remote/users/src/app/database/entities/company.entity.ts: -------------------------------------------------------------------------------- 1 | import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; 2 | 3 | @Entity() 4 | export class Company { 5 | @PrimaryGeneratedColumn('uuid') 6 | id: string; 7 | 8 | @Column() 9 | name: string; 10 | 11 | @Column() 12 | description: string; 13 | } 14 | -------------------------------------------------------------------------------- /tooling/wizard/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /apps/challenges/src/bootstrap.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { appConfig } from './app/app.config'; 3 | import { RemoteEntryComponent } from './app/remote-entry/entry.component'; 4 | 5 | bootstrapApplication(RemoteEntryComponent, appConfig).catch((err) => 6 | console.error(err) 7 | ); 8 | -------------------------------------------------------------------------------- /apps/challenges/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /apps/flashcards/src/bootstrap.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { appConfig } from './app/app.config'; 3 | import { RemoteEntryComponent } from './app/remote-entry/entry.component'; 4 | 5 | bootstrapApplication(RemoteEntryComponent, appConfig).catch((err) => 6 | console.error(err) 7 | ); 8 | -------------------------------------------------------------------------------- /apps/flashcards/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /libs/features-data/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /libs/features-state/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /libs/notes-data/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /libs/notes-state/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /libs/users-data/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /libs/users-state/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /libs/challenges-data/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /libs/challenges-state/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /libs/flashcards-data/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /libs/flashcards-state/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /remote/notes-e2e/src/notes-api/notes-api.spec.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | describe('GET /api', () => { 4 | it('should return a message', async () => { 5 | const res = await axios.get(`/api`); 6 | 7 | expect(res.status).toBe(200); 8 | expect(res.data).toEqual({ message: 'Hello API' }); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /remote/users-e2e/src/users-api/users-api.spec.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | describe('GET /api', () => { 4 | it('should return a message', async () => { 5 | const res = await axios.get(`/api`); 6 | 7 | expect(res.status).toBe(200); 8 | expect(res.data).toEqual({ message: 'Hello API' }); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /libs/challenges-local-state/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | // @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment 2 | globalThis.ngJest = { 3 | testEnvironmentOptions: { 4 | errorOnUnknownElements: true, 5 | errorOnUnknownProperties: true, 6 | }, 7 | }; 8 | import 'jest-preset-angular/setup-jest'; 9 | -------------------------------------------------------------------------------- /remote/features-e2e/src/features-api/features-api.spec.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | describe('GET /api', () => { 4 | it('should return a message', async () => { 5 | const res = await axios.get(`/api`); 6 | 7 | expect(res.status).toBe(200); 8 | expect(res.data).toEqual({ message: 'Hello API' }); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /apps/notes/src/bootstrap.server.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { RemoteEntryComponent } from './app/remote-entry/entry.component'; 3 | import { config } from './app/app.config.server'; 4 | 5 | const bootstrap = () => bootstrapApplication(RemoteEntryComponent, config); 6 | 7 | export default bootstrap; 8 | -------------------------------------------------------------------------------- /apps/notes/tsconfig.server.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.app.json", 4 | "compilerOptions": { 5 | "outDir": "../../out-tsc/server", 6 | "target": "es2019", 7 | "types": ["node"] 8 | }, 9 | "files": ["src/main.server.ts", "server.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/users/src/bootstrap.server.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { RemoteEntryComponent } from './app/remote-entry/entry.component'; 3 | import { config } from './app/app.config.server'; 4 | 5 | const bootstrap = () => bootstrapApplication(RemoteEntryComponent, config); 6 | 7 | export default bootstrap; 8 | -------------------------------------------------------------------------------- /apps/users/tsconfig.server.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.app.json", 4 | "compilerOptions": { 5 | "outDir": "../../out-tsc/server", 6 | "target": "es2019", 7 | "types": ["node"] 8 | }, 9 | "files": ["src/main.server.ts", "server.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /libs/ui-login/src/lib/ui-login.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { LoginComponent } from './ui-login/ui-login.component'; 4 | 5 | @NgModule({ 6 | imports: [CommonModule, LoginComponent], 7 | exports: [LoginComponent] 8 | }) 9 | export class LoginModule {} 10 | -------------------------------------------------------------------------------- /remote/notes/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { NotesModule } from './notes/notes.module'; 3 | import { DatabaseModule } from './database/database.module'; 4 | 5 | @Module({ 6 | imports: [NotesModule, DatabaseModule], 7 | controllers: [], 8 | providers: [], 9 | }) 10 | export class AppModule {} 11 | -------------------------------------------------------------------------------- /apps/challenges/src/bootstrap.server.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { RemoteEntryComponent } from './app/remote-entry/entry.component'; 3 | import { config } from './app/app.config.server'; 4 | 5 | const bootstrap = () => bootstrapApplication(RemoteEntryComponent, config); 6 | 7 | export default bootstrap; 8 | -------------------------------------------------------------------------------- /apps/challenges/tsconfig.server.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.app.json", 4 | "compilerOptions": { 5 | "outDir": "../../out-tsc/server", 6 | "target": "es2019", 7 | "types": ["node"] 8 | }, 9 | "files": ["src/main.server.ts", "server.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/dashboard/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": [], 6 | "target": "ES2020" 7 | }, 8 | "files": ["src/main.ts"], 9 | "include": ["src/**/*.d.ts"], 10 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /apps/dashboard/tsconfig.server.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.app.json", 4 | "compilerOptions": { 5 | "outDir": "../../out-tsc/server", 6 | "target": "es2019", 7 | "types": ["node"] 8 | }, 9 | "files": ["src/main.server.ts", "server.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/flashcards/src/bootstrap.server.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { RemoteEntryComponent } from './app/remote-entry/entry.component'; 3 | import { config } from './app/app.config.server'; 4 | 5 | const bootstrap = () => bootstrapApplication(RemoteEntryComponent, config); 6 | 7 | export default bootstrap; 8 | -------------------------------------------------------------------------------- /apps/flashcards/tsconfig.server.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.app.json", 4 | "compilerOptions": { 5 | "outDir": "../../out-tsc/server", 6 | "target": "es2019", 7 | "types": ["node"] 8 | }, 9 | "files": ["src/main.server.ts", "server.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /remote/challenges-e2e/src/challenges-api/challenges-api.spec.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | describe('GET /api', () => { 4 | it('should return a message', async () => { 5 | const res = await axios.get(`/api`); 6 | 7 | expect(res.status).toBe(200); 8 | expect(res.data).toEqual({ message: 'Hello API' }); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /remote/features/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.app.json" 8 | }, 9 | { 10 | "path": "./tsconfig.spec.json" 11 | } 12 | ], 13 | "compilerOptions": { 14 | "esModuleInterop": true 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /remote/flashcards-e2e/src/flashcards-api/flashcards-api.spec.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | 3 | describe('GET /api', () => { 4 | it('should return a message', async () => { 5 | const res = await axios.get(`/api`); 6 | 7 | expect(res.status).toBe(200); 8 | expect(res.data).toEqual({ message: 'Hello API' }); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /remote/notes/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.app.json" 8 | }, 9 | { 10 | "path": "./tsconfig.spec.json" 11 | } 12 | ], 13 | "compilerOptions": { 14 | "esModuleInterop": true 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /libs/testing/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": [ 9 | "jest.config.ts", 10 | "src/**/*.test.ts", 11 | "src/**/*.spec.ts", 12 | "src/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /remote/challenges/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.app.json" 8 | }, 9 | { 10 | "path": "./tsconfig.spec.json" 11 | } 12 | ], 13 | "compilerOptions": { 14 | "esModuleInterop": true 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /remote/flashcards/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.app.json" 8 | }, 9 | { 10 | "path": "./tsconfig.spec.json" 11 | } 12 | ], 13 | "compilerOptions": { 14 | "esModuleInterop": true 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /remote/notes-e2e/src/support/test-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import axios from 'axios'; 4 | 5 | module.exports = async function () { 6 | // Configure axios for tests to use. 7 | const host = process.env.HOST ?? 'localhost'; 8 | const port = process.env.PORT ?? '3000'; 9 | axios.defaults.baseURL = `http://${host}:${port}`; 10 | }; 11 | -------------------------------------------------------------------------------- /remote/notes/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": [ 9 | "jest.config.ts", 10 | "src/**/*.test.ts", 11 | "src/**/*.spec.ts", 12 | "src/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /remote/users-e2e/src/support/test-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import axios from 'axios'; 4 | 5 | module.exports = async function () { 6 | // Configure axios for tests to use. 7 | const host = process.env.HOST ?? 'localhost'; 8 | const port = process.env.PORT ?? '3000'; 9 | axios.defaults.baseURL = `http://${host}:${port}`; 10 | }; 11 | -------------------------------------------------------------------------------- /remote/users/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": [ 9 | "jest.config.ts", 10 | "src/**/*.test.ts", 11 | "src/**/*.spec.ts", 12 | "src/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /apps/portal/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": ["node"] 6 | }, 7 | "files": ["src/main.ts", "src/main.server.ts", "server.ts"], 8 | "include": ["src/**/*.d.ts"], 9 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /remote/challenges-e2e/src/support/test-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import axios from 'axios'; 4 | 5 | module.exports = async function () { 6 | // Configure axios for tests to use. 7 | const host = process.env.HOST ?? 'localhost'; 8 | const port = process.env.PORT ?? '3000'; 9 | axios.defaults.baseURL = `http://${host}:${port}`; 10 | }; 11 | -------------------------------------------------------------------------------- /remote/challenges/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": [ 9 | "jest.config.ts", 10 | "src/**/*.test.ts", 11 | "src/**/*.spec.ts", 12 | "src/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /remote/features-e2e/src/support/test-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import axios from 'axios'; 4 | 5 | module.exports = async function () { 6 | // Configure axios for tests to use. 7 | const host = process.env.HOST ?? 'localhost'; 8 | const port = process.env.PORT ?? '3000'; 9 | axios.defaults.baseURL = `http://${host}:${port}`; 10 | }; 11 | -------------------------------------------------------------------------------- /remote/features/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": [ 9 | "jest.config.ts", 10 | "src/**/*.test.ts", 11 | "src/**/*.spec.ts", 12 | "src/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /remote/flashcards-e2e/src/support/test-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import axios from 'axios'; 4 | 5 | module.exports = async function () { 6 | // Configure axios for tests to use. 7 | const host = process.env.HOST ?? 'localhost'; 8 | const port = process.env.PORT ?? '3000'; 9 | axios.defaults.baseURL = `http://${host}:${port}`; 10 | }; 11 | -------------------------------------------------------------------------------- /remote/flashcards/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": [ 9 | "jest.config.ts", 10 | "src/**/*.test.ts", 11 | "src/**/*.spec.ts", 12 | "src/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /libs/guards/remote-auth/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": [ 9 | "jest.config.ts", 10 | "src/**/*.test.ts", 11 | "src/**/*.spec.ts", 12 | "src/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /remote/challenges/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { ChallengesModule } from './challenges/challenges.module'; 3 | import { DatabaseModule } from './database/database.module'; 4 | 5 | @Module({ 6 | imports: [ChallengesModule, DatabaseModule], 7 | controllers: [], 8 | providers: [], 9 | }) 10 | export class AppModule {} 11 | -------------------------------------------------------------------------------- /remote/flashcards/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { FlashcardsModule } from './flashcards/flashcards.module'; 3 | import { DatabaseModule } from './database/database.module'; 4 | 5 | @Module({ 6 | imports: [FlashcardsModule, DatabaseModule], 7 | controllers: [], 8 | providers: [], 9 | }) 10 | export class AppModule {} 11 | -------------------------------------------------------------------------------- /remote/notes/src/app/notes/note.providers.ts: -------------------------------------------------------------------------------- 1 | import { Connection } from 'typeorm'; 2 | import { Note } from '../database/entities/note.entity'; 3 | 4 | export const noteProviders = [ 5 | { 6 | provide: 'NOTE_REPOSITORY', 7 | useFactory: (connection: Connection) => connection.getRepository(Note), 8 | inject: ['DATABASE_CONNECTION'], 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /remote/users/src/app/users/user.providers.ts: -------------------------------------------------------------------------------- 1 | import { Connection } from 'typeorm'; 2 | import { User } from '../database/entities/user.entity'; 3 | 4 | export const userProviders = [ 5 | { 6 | provide: 'USER_REPOSITORY', 7 | useFactory: (connection: Connection) => connection.getRepository(User), 8 | inject: ['DATABASE_CONNECTION'], 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /libs/material/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/**/*.spec.ts", "jest.config.ts", "src/**/*.test.ts"], 11 | "include": ["src/**/*.ts"] 12 | } 13 | -------------------------------------------------------------------------------- /apps/notes/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": [], 6 | "target": "ES2020" 7 | }, 8 | "files": ["src/main.ts", "src/app/remote-entry/entry.routes.ts"], 9 | "include": ["src/**/*.d.ts"], 10 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /apps/users/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": [], 6 | "target": "ES2020" 7 | }, 8 | "files": ["src/main.ts", "src/app/remote-entry/entry.routes.ts"], 9 | "include": ["src/**/*.d.ts"], 10 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /tooling/wizard/src/app/app.config.ts: -------------------------------------------------------------------------------- 1 | import { ApplicationConfig } from '@angular/core'; 2 | import { provideAnimations } from '@angular/platform-browser/animations'; 3 | import { provideRouter } from '@angular/router'; 4 | import { appRoutes } from './app.routes'; 5 | 6 | export const appConfig: ApplicationConfig = { 7 | providers: [provideAnimations(), provideRouter(appRoutes)], 8 | }; 9 | -------------------------------------------------------------------------------- /apps/challenges/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": [], 6 | "target": "ES2020" 7 | }, 8 | "files": ["src/main.ts", "src/app/remote-entry/entry.routes.ts"], 9 | "include": ["src/**/*.d.ts"], 10 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /apps/flashcards/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": [], 6 | "target": "ES2020" 7 | }, 8 | "files": ["src/main.ts", "src/app/remote-entry/entry.routes.ts"], 9 | "include": ["src/**/*.d.ts"], 10 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /remote/features/src/app/features/feature.providers.ts: -------------------------------------------------------------------------------- 1 | import { Feature } from '../database/entities/feature.entity'; 2 | import { Connection } from 'typeorm'; 3 | 4 | export const featureProviders = [ 5 | { 6 | provide: 'FEATURE_REPOSITORY', 7 | useFactory: (connection: Connection) => connection.getRepository(Feature), 8 | inject: ['DATABASE_CONNECTION'], 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /remote/features/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["node"], 7 | "emitDecoratorMetadata": true, 8 | "target": "es2021" 9 | }, 10 | "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], 11 | "include": ["src/**/*.ts"] 12 | } 13 | -------------------------------------------------------------------------------- /remote/notes/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["node"], 7 | "emitDecoratorMetadata": true, 8 | "target": "es2021" 9 | }, 10 | "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], 11 | "include": ["src/**/*.ts"] 12 | } 13 | -------------------------------------------------------------------------------- /remote/users/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["node"], 7 | "emitDecoratorMetadata": true, 8 | "target": "es2021" 9 | }, 10 | "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], 11 | "include": ["src/**/*.ts"] 12 | } 13 | -------------------------------------------------------------------------------- /libs/testing/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'testing', 4 | preset: '../../jest.preset.js', 5 | testEnvironment: 'node', 6 | transform: { 7 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 8 | }, 9 | moduleFileExtensions: ['ts', 'js', 'html'], 10 | coverageDirectory: '../../coverage/libs/testing', 11 | }; 12 | -------------------------------------------------------------------------------- /remote/challenges/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["node"], 7 | "emitDecoratorMetadata": true, 8 | "target": "es2021" 9 | }, 10 | "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], 11 | "include": ["src/**/*.ts"] 12 | } 13 | -------------------------------------------------------------------------------- /remote/flashcards/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["node"], 7 | "emitDecoratorMetadata": true, 8 | "target": "es2021" 9 | }, 10 | "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], 11 | "include": ["src/**/*.ts"] 12 | } 13 | -------------------------------------------------------------------------------- /remote/notes/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'notes-api', 4 | preset: '../../jest.preset.js', 5 | testEnvironment: 'node', 6 | transform: { 7 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 8 | }, 9 | moduleFileExtensions: ['ts', 'js', 'html'], 10 | coverageDirectory: '../../coverage/remote/notes', 11 | }; 12 | -------------------------------------------------------------------------------- /remote/users/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'users-api', 4 | preset: '../../jest.preset.js', 5 | testEnvironment: 'node', 6 | transform: { 7 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 8 | }, 9 | moduleFileExtensions: ['ts', 'js', 'html'], 10 | coverageDirectory: '../../coverage/remote/users', 11 | }; 12 | -------------------------------------------------------------------------------- /remote/challenges/src/app/challenges/challenge.providers.ts: -------------------------------------------------------------------------------- 1 | import { Challenge } from '../database/entities/challenge.entity'; 2 | import { Connection } from 'typeorm'; 3 | 4 | export const challengeProviders = [ 5 | { 6 | provide: 'CHALLENGE_REPOSITORY', 7 | useFactory: (connection: Connection) => connection.getRepository(Challenge), 8 | inject: ['DATABASE_CONNECTION'], 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /remote/features/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'features-api', 4 | preset: '../../jest.preset.js', 5 | testEnvironment: 'node', 6 | transform: { 7 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 8 | }, 9 | moduleFileExtensions: ['ts', 'js', 'html'], 10 | coverageDirectory: '../../coverage/remote/features', 11 | }; 12 | -------------------------------------------------------------------------------- /remote/flashcards/src/app/flashcards/flashcard.providers.ts: -------------------------------------------------------------------------------- 1 | import { Connection } from 'typeorm'; 2 | import { Flashcard } from '../database/entities/flashcard.entity'; 3 | 4 | export const flashcardProviders = [ 5 | { 6 | provide: 'FLASHCARD_REPOSITORY', 7 | useFactory: (connection: Connection) => connection.getRepository(Flashcard), 8 | inject: ['DATABASE_CONNECTION'], 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /remote/notes/src/app/database/entities/note.entity.ts: -------------------------------------------------------------------------------- 1 | import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; 2 | 3 | @Entity() 4 | export class Note { 5 | @PrimaryGeneratedColumn('uuid') 6 | id: string; 7 | 8 | @Column() 9 | title: string; 10 | 11 | @Column() 12 | content: string; 13 | 14 | @Column() 15 | type: string; 16 | 17 | @Column() 18 | user_id: string; 19 | } 20 | -------------------------------------------------------------------------------- /apps/notes/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 | -------------------------------------------------------------------------------- /apps/users/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 | -------------------------------------------------------------------------------- /apps/users/src/app/remote-entry/entry.component.ts: -------------------------------------------------------------------------------- 1 | import { CommonModule } from '@angular/common'; 2 | import { Component } from '@angular/core'; 3 | import { RouterOutlet } from '@angular/router'; 4 | 5 | @Component({ 6 | standalone: true, 7 | imports: [CommonModule, RouterOutlet], 8 | selector: 'proto-users-entry', 9 | template: ``, 10 | }) 11 | export class RemoteEntryComponent {} 12 | -------------------------------------------------------------------------------- /remote/challenges/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'challenges-api', 4 | preset: '../../jest.preset.js', 5 | testEnvironment: 'node', 6 | transform: { 7 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 8 | }, 9 | moduleFileExtensions: ['ts', 'js', 'html'], 10 | coverageDirectory: '../../coverage/remote/challenges', 11 | }; 12 | -------------------------------------------------------------------------------- /remote/features/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /remote/flashcards/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'flashcards-api', 4 | preset: '../../jest.preset.js', 5 | testEnvironment: 'node', 6 | transform: { 7 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 8 | }, 9 | moduleFileExtensions: ['ts', 'js', 'html'], 10 | coverageDirectory: '../../coverage/remote/flashcards', 11 | }; 12 | -------------------------------------------------------------------------------- /remote/notes-e2e/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /remote/notes/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /remote/users-e2e/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /remote/users/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /apps/challenges/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 | -------------------------------------------------------------------------------- /apps/dashboard/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 | -------------------------------------------------------------------------------- /apps/flashcards/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 | -------------------------------------------------------------------------------- /apps/notes/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /apps/portal/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 | -------------------------------------------------------------------------------- /apps/users/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /remote/challenges-e2e/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /remote/challenges/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /remote/features-e2e/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /remote/flashcards-e2e/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /remote/flashcards/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /apps/challenges/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /apps/dashboard/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /apps/flashcards/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /apps/portal/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /libs/guards/remote-auth/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /libs/notes-data/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /libs/ui-login/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /libs/users-data/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /tooling/wizard/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /libs/challenges-data/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /libs/features-data/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /libs/features-state/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /libs/flashcards-data/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /libs/notes-state/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /libs/users-state/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /remote/notes-e2e/src/support/global-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | var __TEARDOWN_MESSAGE__: string; 3 | 4 | module.exports = async function () { 5 | // Start services that that the app needs to run (e.g. database, docker-compose, etc.). 6 | console.log('\nSetting up...\n'); 7 | 8 | // Hint: Use `globalThis` to pass variables to global teardown. 9 | globalThis.__TEARDOWN_MESSAGE__ = '\nTearing down...\n'; 10 | }; 11 | -------------------------------------------------------------------------------- /remote/users-e2e/src/support/global-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | var __TEARDOWN_MESSAGE__: string; 3 | 4 | module.exports = async function () { 5 | // Start services that that the app needs to run (e.g. database, docker-compose, etc.). 6 | console.log('\nSetting up...\n'); 7 | 8 | // Hint: Use `globalThis` to pass variables to global teardown. 9 | globalThis.__TEARDOWN_MESSAGE__ = '\nTearing down...\n'; 10 | }; 11 | -------------------------------------------------------------------------------- /libs/challenges-state/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /libs/flashcards-state/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /libs/guards/remote-auth/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'guards-remote-auth', 4 | preset: '../../../jest.preset.js', 5 | testEnvironment: 'node', 6 | transform: { 7 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 8 | }, 9 | moduleFileExtensions: ['ts', 'js', 'html'], 10 | coverageDirectory: '../../../coverage/libs/guards/remote-auth', 11 | }; 12 | -------------------------------------------------------------------------------- /remote/challenges-e2e/src/support/global-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | var __TEARDOWN_MESSAGE__: string; 3 | 4 | module.exports = async function () { 5 | // Start services that that the app needs to run (e.g. database, docker-compose, etc.). 6 | console.log('\nSetting up...\n'); 7 | 8 | // Hint: Use `globalThis` to pass variables to global teardown. 9 | globalThis.__TEARDOWN_MESSAGE__ = '\nTearing down...\n'; 10 | }; 11 | -------------------------------------------------------------------------------- /remote/features-e2e/src/support/global-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | var __TEARDOWN_MESSAGE__: string; 3 | 4 | module.exports = async function () { 5 | // Start services that that the app needs to run (e.g. database, docker-compose, etc.). 6 | console.log('\nSetting up...\n'); 7 | 8 | // Hint: Use `globalThis` to pass variables to global teardown. 9 | globalThis.__TEARDOWN_MESSAGE__ = '\nTearing down...\n'; 10 | }; 11 | -------------------------------------------------------------------------------- /remote/flashcards-e2e/src/support/global-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | var __TEARDOWN_MESSAGE__: string; 3 | 4 | module.exports = async function () { 5 | // Start services that that the app needs to run (e.g. database, docker-compose, etc.). 6 | console.log('\nSetting up...\n'); 7 | 8 | // Hint: Use `globalThis` to pass variables to global teardown. 9 | globalThis.__TEARDOWN_MESSAGE__ = '\nTearing down...\n'; 10 | }; 11 | -------------------------------------------------------------------------------- /apps/notes/src/app/remote-entry/entry.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { NotesComponent } from '../notes/notes.component'; 4 | 5 | @Component({ 6 | standalone: true, 7 | imports: [CommonModule, NotesComponent], 8 | selector: 'proto-notes-entry', 9 | template: ``, 10 | }) 11 | export class RemoteEntryComponent {} 12 | -------------------------------------------------------------------------------- /libs/challenges-local-state/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /remote/users/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.app.json" 8 | }, 9 | { 10 | "path": "./tsconfig.spec.json" 11 | } 12 | ], 13 | "compilerOptions": { 14 | "esModuleInterop": true, 15 | "paths": { 16 | "@proto/*": ["libs/guards/remote-auth/src/*"], 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /libs/notes-data/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/ui-login/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/users-data/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 | -------------------------------------------------------------------------------- /apps/dashboard/src/app/home/home.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
Microfrontends
4 |
Dyanmic Module Fedaration Example
5 |
This dashboard is dynamically loading microfrontends that are being defined before the application bootstraps.
6 |
7 |
8 | -------------------------------------------------------------------------------- /apps/dashboard/tailwind.config.js: -------------------------------------------------------------------------------- 1 | const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); 2 | const { join } = require('path'); 3 | 4 | /** @type {import('tailwindcss').Config} */ 5 | module.exports = { 6 | content: [ 7 | join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), 8 | ...createGlobPatternsForDependencies(__dirname), 9 | ], 10 | theme: { 11 | extend: {}, 12 | }, 13 | plugins: [], 14 | }; 15 | -------------------------------------------------------------------------------- /apps/notes/tailwind.config.js: -------------------------------------------------------------------------------- 1 | const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); 2 | const { join } = require('path'); 3 | 4 | /** @type {import('tailwindcss').Config} */ 5 | module.exports = { 6 | content: [ 7 | join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), 8 | ...createGlobPatternsForDependencies(__dirname), 9 | ], 10 | theme: { 11 | extend: {}, 12 | }, 13 | plugins: [], 14 | }; 15 | -------------------------------------------------------------------------------- /apps/portal/tailwind.config.js: -------------------------------------------------------------------------------- 1 | const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); 2 | const { join } = require('path'); 3 | 4 | /** @type {import('tailwindcss').Config} */ 5 | module.exports = { 6 | content: [ 7 | join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), 8 | ...createGlobPatternsForDependencies(__dirname), 9 | ], 10 | theme: { 11 | extend: {}, 12 | }, 13 | plugins: [], 14 | }; 15 | -------------------------------------------------------------------------------- /apps/users/tailwind.config.js: -------------------------------------------------------------------------------- 1 | const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); 2 | const { join } = require('path'); 3 | 4 | /** @type {import('tailwindcss').Config} */ 5 | module.exports = { 6 | content: [ 7 | join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), 8 | ...createGlobPatternsForDependencies(__dirname), 9 | ], 10 | theme: { 11 | extend: {}, 12 | }, 13 | plugins: [], 14 | }; 15 | -------------------------------------------------------------------------------- /libs/challenges-data/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/features-data/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/features-state/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/flashcards-data/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/notes-state/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/users-state/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 | -------------------------------------------------------------------------------- /tooling/wizard/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterModule } from '@angular/router'; 3 | import { WizardComponent } from './wizard/wizard.component'; 4 | 5 | @Component({ 6 | standalone: true, 7 | imports: [WizardComponent, RouterModule], 8 | selector: 'proto-root', 9 | templateUrl: './app.component.html', 10 | styleUrl: './app.component.scss', 11 | }) 12 | export class AppComponent {} 13 | -------------------------------------------------------------------------------- /tooling/wizard/tailwind.config.js: -------------------------------------------------------------------------------- 1 | const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); 2 | const { join } = require('path'); 3 | 4 | /** @type {import('tailwindcss').Config} */ 5 | module.exports = { 6 | content: [ 7 | join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), 8 | ...createGlobPatternsForDependencies(__dirname), 9 | ], 10 | theme: { 11 | extend: {}, 12 | }, 13 | plugins: [], 14 | }; 15 | -------------------------------------------------------------------------------- /apps/challenges/tailwind.config.js: -------------------------------------------------------------------------------- 1 | const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); 2 | const { join } = require('path'); 3 | 4 | /** @type {import('tailwindcss').Config} */ 5 | module.exports = { 6 | content: [ 7 | join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), 8 | ...createGlobPatternsForDependencies(__dirname), 9 | ], 10 | theme: { 11 | extend: {}, 12 | }, 13 | plugins: [], 14 | }; 15 | -------------------------------------------------------------------------------- /apps/flashcards/tailwind.config.js: -------------------------------------------------------------------------------- 1 | const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); 2 | const { join } = require('path'); 3 | 4 | /** @type {import('tailwindcss').Config} */ 5 | module.exports = { 6 | content: [ 7 | join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), 8 | ...createGlobPatternsForDependencies(__dirname), 9 | ], 10 | theme: { 11 | extend: {}, 12 | }, 13 | plugins: [], 14 | }; 15 | -------------------------------------------------------------------------------- /libs/challenges-state/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/flashcards-state/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/challenges-local-state/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 | -------------------------------------------------------------------------------- /remote/flashcards/src/app/database/entities/flashcard.entity.ts: -------------------------------------------------------------------------------- 1 | import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; 2 | 3 | @Entity() 4 | export class Flashcard { 5 | @PrimaryGeneratedColumn('uuid') 6 | id: string; 7 | 8 | @Column() 9 | title: string; 10 | 11 | @Column() 12 | description: string; 13 | 14 | @Column() 15 | question: string; 16 | 17 | @Column() 18 | answer: string; 19 | 20 | @Column() 21 | user_id: string; 22 | } 23 | -------------------------------------------------------------------------------- /apps/challenges/src/app/remote-entry/entry.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { ChallengesComponent } from '../challenges/challenges.component'; 4 | 5 | @Component({ 6 | standalone: true, 7 | imports: [CommonModule, ChallengesComponent], 8 | selector: 'proto-challenges-entry', 9 | template: ``, 10 | }) 11 | export class RemoteEntryComponent {} 12 | -------------------------------------------------------------------------------- /apps/flashcards/src/app/remote-entry/entry.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { FlashcardsComponent } from '../flashcards/flashcards.component'; 4 | 5 | @Component({ 6 | standalone: true, 7 | imports: [CommonModule, FlashcardsComponent], 8 | selector: 'proto-flashcards-entry', 9 | template: ``, 10 | }) 11 | export class RemoteEntryComponent {} 12 | -------------------------------------------------------------------------------- /apps/notes-e2e/src/e2e/app.cy.ts: -------------------------------------------------------------------------------- 1 | import { getGreeting } from '../support/app.po'; 2 | 3 | describe('notes-e2e', () => { 4 | beforeEach(() => cy.visit('/')); 5 | 6 | it('should display welcome message', () => { 7 | // Custom command example, see `../support/commands.ts` file 8 | cy.login('my-email@something.com', 'myPassword'); 9 | 10 | // Function helper example, see `../support/app.po.ts` file 11 | getGreeting().contains(/Welcome/); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /apps/portal-e2e/src/e2e/app.cy.ts: -------------------------------------------------------------------------------- 1 | import { getGreeting } from '../support/app.po'; 2 | 3 | describe('portal-e2e', () => { 4 | beforeEach(() => cy.visit('/')); 5 | 6 | it('should display welcome message', () => { 7 | // Custom command example, see `../support/commands.ts` file 8 | cy.login('my-email@something.com', 'myPassword'); 9 | 10 | // Function helper example, see `../support/app.po.ts` file 11 | getGreeting().contains(/Welcome/); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /apps/users-e2e/src/e2e/app.cy.ts: -------------------------------------------------------------------------------- 1 | import { getGreeting } from '../support/app.po'; 2 | 3 | describe('users-e2e', () => { 4 | beforeEach(() => cy.visit('/')); 5 | 6 | it('should display welcome message', () => { 7 | // Custom command example, see `../support/commands.ts` file 8 | cy.login('my-email@something.com', 'myPassword'); 9 | 10 | // Function helper example, see `../support/app.po.ts` file 11 | getGreeting().contains(/Welcome/); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /libs/notes-state/src/lib/state/state.ts: -------------------------------------------------------------------------------- 1 | import { ActionReducerMap, createFeatureSelector } from '@ngrx/store'; 2 | 3 | import * as fromNotes from './notes.reducer'; 4 | 5 | export const NOTES_FEATURE_KEY = 'notes'; 6 | 7 | export interface State { 8 | notes: fromNotes.NotesState; 9 | } 10 | 11 | export const reducers: ActionReducerMap = { 12 | notes: fromNotes.reducer, 13 | }; 14 | 15 | export const getNotesState = createFeatureSelector(NOTES_FEATURE_KEY); 16 | -------------------------------------------------------------------------------- /apps/dashboard-e2e/src/e2e/app.cy.ts: -------------------------------------------------------------------------------- 1 | import { getGreeting } from '../support/app.po'; 2 | 3 | describe('dashboard-e2e', () => { 4 | beforeEach(() => cy.visit('/')); 5 | 6 | it('should display welcome message', () => { 7 | // Custom command example, see `../support/commands.ts` file 8 | cy.login('my-email@something.com', 'myPassword'); 9 | 10 | // Function helper example, see `../support/app.po.ts` file 11 | getGreeting().contains(/Welcome/); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /apps/portal/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { RouterModule } from '@angular/router'; 3 | import { FeaturesComponent } from './features/features.component'; 4 | 5 | @Component({ 6 | standalone: true, 7 | imports: [FeaturesComponent, RouterModule], 8 | selector: 'proto-root', 9 | templateUrl: './app.component.html', 10 | styleUrl: './app.component.scss', 11 | }) 12 | export class AppComponent { 13 | title = 'portal'; 14 | } 15 | -------------------------------------------------------------------------------- /remote/features/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { FeaturesModule } from './features/features.module'; 3 | import { DatabaseModule } from './database/database.module'; 4 | import { ConfigModule } from '@nestjs/config'; 5 | 6 | @Module({ 7 | imports: [ 8 | ConfigModule.forRoot({ isGlobal: true }), 9 | FeaturesModule, 10 | DatabaseModule, 11 | ], 12 | controllers: [], 13 | providers: [], 14 | }) 15 | export class AppModule {} 16 | -------------------------------------------------------------------------------- /apps/challenges-e2e/src/e2e/app.cy.ts: -------------------------------------------------------------------------------- 1 | import { getGreeting } from '../support/app.po'; 2 | 3 | describe('challenges-e2e', () => { 4 | beforeEach(() => cy.visit('/')); 5 | 6 | it('should display welcome message', () => { 7 | // Custom command example, see `../support/commands.ts` file 8 | cy.login('my-email@something.com', 'myPassword'); 9 | 10 | // Function helper example, see `../support/app.po.ts` file 11 | getGreeting().contains(/Welcome/); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /apps/flashcards-e2e/src/e2e/app.cy.ts: -------------------------------------------------------------------------------- 1 | import { getGreeting } from '../support/app.po'; 2 | 3 | describe('flashcards-e2e', () => { 4 | beforeEach(() => cy.visit('/')); 5 | 6 | it('should display welcome message', () => { 7 | // Custom command example, see `../support/commands.ts` file 8 | cy.login('my-email@something.com', 'myPassword'); 9 | 10 | // Function helper example, see `../support/app.po.ts` file 11 | getGreeting().contains(/Welcome/); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /libs/features-data/src/lib/services/features.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { FeaturesService } from './features.service'; 4 | 5 | describe('FeaturesService', () => { 6 | let service: FeaturesService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(FeaturesService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /libs/users-state/src/lib/state/state.ts: -------------------------------------------------------------------------------- 1 | import { ActionReducerMap, createFeatureSelector } from '@ngrx/store'; 2 | 3 | import * as fromUsers from './users.reducer'; 4 | 5 | export const USERS_FEATURE_KEY = 'users'; 6 | 7 | export interface State { 8 | users: fromUsers.UsersState; 9 | } 10 | 11 | export const reducers: ActionReducerMap = { 12 | users: fromUsers.reducer, 13 | }; 14 | 15 | export const getUsersState = 16 | createFeatureSelector(USERS_FEATURE_KEY); 17 | -------------------------------------------------------------------------------- /remote/users/src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { Module, forwardRef } from '@nestjs/common'; 2 | import { UsersModule } from './users/users.module'; 3 | import { DatabaseModule } from './database/database.module'; 4 | import { AuthModule } from './auth/auth.module'; 5 | 6 | @Module({ 7 | imports: [ 8 | forwardRef(() => UsersModule), 9 | forwardRef(() => AuthModule), 10 | DatabaseModule, 11 | ], 12 | controllers: [], 13 | providers: [], 14 | }) 15 | export class AppModule {} 16 | -------------------------------------------------------------------------------- /apps/notes/src/app/notes/notes.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 7 |
8 |
9 | 13 |
14 |
15 | -------------------------------------------------------------------------------- /apps/users/src/app/users/users.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 7 |
8 |
9 | 13 |
14 |
15 | -------------------------------------------------------------------------------- /remote/users/src/app/database/entities/user.entity.ts: -------------------------------------------------------------------------------- 1 | import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; 2 | 3 | @Entity() 4 | export class User { 5 | @PrimaryGeneratedColumn('uuid') 6 | id: string; 7 | 8 | @Column() 9 | firstName: string; 10 | 11 | @Column() 12 | lastName: string; 13 | 14 | @Column() 15 | email: string; 16 | 17 | @Column() 18 | password: string; 19 | 20 | @Column() 21 | role: string; 22 | 23 | @Column() 24 | company_id: string; 25 | } 26 | -------------------------------------------------------------------------------- /apps/dashboard/src/main.ts: -------------------------------------------------------------------------------- 1 | import { setRemoteDefinitions } from '@nx/angular/mf'; 2 | 3 | const FEATURES_API_URI = 'http://localhost:3000/api/features'; 4 | 5 | fetch(FEATURES_API_URI) 6 | .then((res) => res.json()) 7 | .then((res) => 8 | res.reduce((acc: any, r: any) => { 9 | acc[r.slug] = r.remote_uri; 10 | return acc; 11 | }, {}) 12 | ) 13 | .then((definitions: any) => setRemoteDefinitions(definitions)) 14 | .then(() => import('./bootstrap').catch((err) => console.error(err))); 15 | -------------------------------------------------------------------------------- /remote/features/src/app/database/entities/feature.entity.ts: -------------------------------------------------------------------------------- 1 | import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; 2 | 3 | @Entity() 4 | export class Feature { 5 | @PrimaryGeneratedColumn('uuid') 6 | id: string; 7 | 8 | @Column() 9 | title: string; 10 | 11 | @Column() 12 | description: string; 13 | 14 | @Column() 15 | remote_uri: string; 16 | 17 | @Column() 18 | api_uri: string; 19 | 20 | @Column() 21 | slug: string; 22 | 23 | @Column() 24 | healthy: boolean; 25 | } 26 | -------------------------------------------------------------------------------- /remote/notes-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "notes-api-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "implicitDependencies": ["notes-api"], 5 | "projectType": "application", 6 | "targets": { 7 | "e2e": { 8 | "executor": "@nx/jest:jest", 9 | "outputs": ["{workspaceRoot}/coverage/{e2eProjectRoot}"], 10 | "options": { 11 | "jestConfig": "remote/notes-e2e/jest.config.ts", 12 | "passWithNoTests": true 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /remote/users-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "users-api-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "implicitDependencies": ["users-api"], 5 | "projectType": "application", 6 | "targets": { 7 | "e2e": { 8 | "executor": "@nx/jest:jest", 9 | "outputs": ["{workspaceRoot}/coverage/{e2eProjectRoot}"], 10 | "options": { 11 | "jestConfig": "remote/users-e2e/jest.config.ts", 12 | "passWithNoTests": true 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tooling/wizard-e2e/src/e2e/app.cy.ts: -------------------------------------------------------------------------------- 1 | import { getReferenceTitle } from '../support/app.po'; 2 | 3 | describe('wizard-e2e', () => { 4 | beforeEach(() => cy.visit('/')); 5 | 6 | it('should display reference template title', () => { 7 | // Custom command example, see `../support/commands.ts` file 8 | // cy.login('my-email@something.com', 'myPassword'); 9 | 10 | // Function helper example, see `../support/app.po.ts` file 11 | getReferenceTitle().contains(/Reference Template/); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /apps/notes/webpack.prod.config.ts: -------------------------------------------------------------------------------- 1 | import { withModuleFederation } from '@nx/angular/module-federation'; 2 | import config from './module-federation.config'; 3 | 4 | export default withModuleFederation({ 5 | ...config, 6 | /* 7 | * Remote overrides for production. 8 | * Each entry is a pair of a unique name and the URL where it is deployed. 9 | * 10 | * e.g. 11 | * remotes: [ 12 | * ['app1', 'https://app1.example.com'], 13 | * ['app2', 'https://app2.example.com'], 14 | * ] 15 | */ 16 | }); 17 | -------------------------------------------------------------------------------- /apps/users/webpack.prod.config.ts: -------------------------------------------------------------------------------- 1 | import { withModuleFederation } from '@nx/angular/module-federation'; 2 | import config from './module-federation.config'; 3 | 4 | export default withModuleFederation({ 5 | ...config, 6 | /* 7 | * Remote overrides for production. 8 | * Each entry is a pair of a unique name and the URL where it is deployed. 9 | * 10 | * e.g. 11 | * remotes: [ 12 | * ['app1', 'https://app1.example.com'], 13 | * ['app2', 'https://app2.example.com'], 14 | * ] 15 | */ 16 | }); 17 | -------------------------------------------------------------------------------- /libs/features-state/src/lib/state/state.ts: -------------------------------------------------------------------------------- 1 | import { ActionReducerMap, createFeatureSelector } from '@ngrx/store'; 2 | 3 | import * as fromFeatures from './features.reducer'; 4 | 5 | export const FEATURES_FEATURE_KEY = 'features'; 6 | 7 | export interface State { 8 | features: fromFeatures.FeaturesState; 9 | } 10 | 11 | export const reducers: ActionReducerMap = { 12 | features: fromFeatures.reducer, 13 | }; 14 | 15 | export const getFeaturesState = 16 | createFeatureSelector(FEATURES_FEATURE_KEY); 17 | -------------------------------------------------------------------------------- /remote/challenges/src/app/database/entities/challenge.entity.ts: -------------------------------------------------------------------------------- 1 | import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm'; 2 | 3 | @Entity() 4 | export class Challenge { 5 | @PrimaryGeneratedColumn('uuid') 6 | id: string; 7 | 8 | @Column() 9 | title: string; 10 | 11 | @Column() 12 | description: string; 13 | 14 | @Column() 15 | completed: boolean; 16 | 17 | @Column() 18 | repo_url: string; 19 | 20 | @Column() 21 | comment: string; 22 | 23 | @Column() 24 | user_id: string; 25 | } 26 | -------------------------------------------------------------------------------- /remote/notes/src/app/notes/notes.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { NotesService } from './notes.service'; 3 | import { NotesController } from './notes.controller'; 4 | import { noteProviders } from './note.providers'; 5 | import { DatabaseModule } from '../database/database.module'; 6 | 7 | @Module({ 8 | imports: [DatabaseModule], 9 | controllers: [NotesController], 10 | providers: [...noteProviders, NotesService], 11 | exports: [NotesService], 12 | }) 13 | export class NotesModule {} 14 | -------------------------------------------------------------------------------- /apps/challenges/webpack.prod.config.ts: -------------------------------------------------------------------------------- 1 | import { withModuleFederation } from '@nx/angular/module-federation'; 2 | import config from './module-federation.config'; 3 | 4 | export default withModuleFederation({ 5 | ...config, 6 | /* 7 | * Remote overrides for production. 8 | * Each entry is a pair of a unique name and the URL where it is deployed. 9 | * 10 | * e.g. 11 | * remotes: [ 12 | * ['app1', 'https://app1.example.com'], 13 | * ['app2', 'https://app2.example.com'], 14 | * ] 15 | */ 16 | }); 17 | -------------------------------------------------------------------------------- /apps/flashcards/webpack.prod.config.ts: -------------------------------------------------------------------------------- 1 | import { withModuleFederation } from '@nx/angular/module-federation'; 2 | import config from './module-federation.config'; 3 | 4 | export default withModuleFederation({ 5 | ...config, 6 | /* 7 | * Remote overrides for production. 8 | * Each entry is a pair of a unique name and the URL where it is deployed. 9 | * 10 | * e.g. 11 | * remotes: [ 12 | * ['app1', 'https://app1.example.com'], 13 | * ['app2', 'https://app2.example.com'], 14 | * ] 15 | */ 16 | }); 17 | -------------------------------------------------------------------------------- /libs/api-interfaces/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "forceConsistentCasingInFileNames": true, 6 | "strict": true, 7 | "noImplicitOverride": true, 8 | "noPropertyAccessFromIndexSignature": true, 9 | "noImplicitReturns": true, 10 | "noFallthroughCasesInSwitch": true 11 | }, 12 | "files": [], 13 | "include": [], 14 | "references": [ 15 | { 16 | "path": "./tsconfig.lib.json" 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /libs/challenges-local-state/src/lib/state/challenges-local.facade.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { ChallengesLocalFacade } from './challenges-local.facade'; 4 | 5 | describe('ChallengesService', () => { 6 | let service: ChallengesLocalFacade; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(ChallengesLocalFacade); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /remote/features-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "features-api-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "implicitDependencies": ["features-api"], 5 | "projectType": "application", 6 | "targets": { 7 | "e2e": { 8 | "executor": "@nx/jest:jest", 9 | "outputs": ["{workspaceRoot}/coverage/{e2eProjectRoot}"], 10 | "options": { 11 | "jestConfig": "remote/features-e2e/jest.config.ts", 12 | "passWithNoTests": true 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /remote/challenges-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "challenges-api-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "implicitDependencies": ["challenges-api"], 5 | "projectType": "application", 6 | "targets": { 7 | "e2e": { 8 | "executor": "@nx/jest:jest", 9 | "outputs": ["{workspaceRoot}/coverage/{e2eProjectRoot}"], 10 | "options": { 11 | "jestConfig": "remote/challenges-e2e/jest.config.ts", 12 | "passWithNoTests": true 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /remote/flashcards-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flashcards-api-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "implicitDependencies": ["flashcards-api"], 5 | "projectType": "application", 6 | "targets": { 7 | "e2e": { 8 | "executor": "@nx/jest:jest", 9 | "outputs": ["{workspaceRoot}/coverage/{e2eProjectRoot}"], 10 | "options": { 11 | "jestConfig": "remote/flashcards-e2e/jest.config.ts", 12 | "passWithNoTests": true 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /apps/portal/src/app/features/features.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 7 |
8 |
9 | 13 |
14 |
15 | -------------------------------------------------------------------------------- /remote/notes/webpack.config.js: -------------------------------------------------------------------------------- 1 | const { NxWebpackPlugin } = require('@nx/webpack'); 2 | const { join } = require('path'); 3 | 4 | module.exports = { 5 | output: { 6 | path: join(__dirname, '../../dist/remote/notes'), 7 | }, 8 | plugins: [ 9 | new NxWebpackPlugin({ 10 | target: 'node', 11 | compiler: 'tsc', 12 | main: './src/main.ts', 13 | tsConfig: './tsconfig.app.json', 14 | assets: ['./src/assets'], 15 | optimization: false, 16 | outputHashing: 'none', 17 | }), 18 | ], 19 | }; 20 | -------------------------------------------------------------------------------- /remote/users/webpack.config.js: -------------------------------------------------------------------------------- 1 | const { NxWebpackPlugin } = require('@nx/webpack'); 2 | const { join } = require('path'); 3 | 4 | module.exports = { 5 | output: { 6 | path: join(__dirname, '../../dist/remote/users'), 7 | }, 8 | plugins: [ 9 | new NxWebpackPlugin({ 10 | target: 'node', 11 | compiler: 'tsc', 12 | main: './src/main.ts', 13 | tsConfig: './tsconfig.app.json', 14 | assets: ['./src/assets'], 15 | optimization: false, 16 | outputHashing: 'none', 17 | }), 18 | ], 19 | }; 20 | -------------------------------------------------------------------------------- /libs/challenges-state/src/lib/state/state.ts: -------------------------------------------------------------------------------- 1 | import { ActionReducerMap, createFeatureSelector } from '@ngrx/store'; 2 | 3 | import * as fromChallenges from './challenges.reducer'; 4 | 5 | export const CHALLENGES_FEATURE_KEY = 'challenges'; 6 | 7 | export interface State { 8 | challenges: fromChallenges.ChallengesState; 9 | } 10 | 11 | export const reducers: ActionReducerMap = { 12 | challenges: fromChallenges.reducer, 13 | }; 14 | 15 | export const getChallengesState = 16 | createFeatureSelector(CHALLENGES_FEATURE_KEY); 17 | -------------------------------------------------------------------------------- /libs/flashcards-state/src/lib/state/state.ts: -------------------------------------------------------------------------------- 1 | import { ActionReducerMap, createFeatureSelector } from '@ngrx/store'; 2 | 3 | import * as fromFlashcards from './flashcards.reducer'; 4 | 5 | export const FLASHCARDS_FEATURE_KEY = 'flashcards'; 6 | 7 | export interface State { 8 | flashcards: fromFlashcards.FlashcardsState; 9 | } 10 | 11 | export const reducers: ActionReducerMap = { 12 | flashcards: fromFlashcards.reducer, 13 | }; 14 | 15 | export const getFlashcardsState = 16 | createFeatureSelector(FLASHCARDS_FEATURE_KEY); 17 | -------------------------------------------------------------------------------- /remote/features/webpack.config.js: -------------------------------------------------------------------------------- 1 | const { NxWebpackPlugin } = require('@nx/webpack'); 2 | const { join } = require('path'); 3 | 4 | module.exports = { 5 | output: { 6 | path: join(__dirname, '../../dist/remote/features'), 7 | }, 8 | plugins: [ 9 | new NxWebpackPlugin({ 10 | target: 'node', 11 | compiler: 'tsc', 12 | main: './src/main.ts', 13 | tsConfig: './tsconfig.app.json', 14 | assets: ['./src/assets'], 15 | optimization: false, 16 | outputHashing: 'none', 17 | }), 18 | ], 19 | }; 20 | -------------------------------------------------------------------------------- /apps/notes-e2e/cypress.config.ts: -------------------------------------------------------------------------------- 1 | import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset'; 2 | 3 | import { defineConfig } from 'cypress'; 4 | 5 | export default defineConfig({ 6 | e2e: { 7 | ...nxE2EPreset(__filename, { 8 | cypressDir: 'src', 9 | webServerCommands: { 10 | default: 'nx run notes:serve:development', 11 | production: 'nx run notes:serve:production', 12 | }, 13 | ciWebServerCommand: 'nx run notes:serve-static', 14 | }), 15 | baseUrl: 'http://localhost:4200', 16 | }, 17 | }); 18 | -------------------------------------------------------------------------------- /apps/users-e2e/cypress.config.ts: -------------------------------------------------------------------------------- 1 | import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset'; 2 | 3 | import { defineConfig } from 'cypress'; 4 | 5 | export default defineConfig({ 6 | e2e: { 7 | ...nxE2EPreset(__filename, { 8 | cypressDir: 'src', 9 | webServerCommands: { 10 | default: 'nx run users:serve:development', 11 | production: 'nx run users:serve:production', 12 | }, 13 | ciWebServerCommand: 'nx run users:serve-static', 14 | }), 15 | baseUrl: 'http://localhost:4200', 16 | }, 17 | }); 18 | -------------------------------------------------------------------------------- /remote/challenges/webpack.config.js: -------------------------------------------------------------------------------- 1 | const { NxWebpackPlugin } = require('@nx/webpack'); 2 | const { join } = require('path'); 3 | 4 | module.exports = { 5 | output: { 6 | path: join(__dirname, '../../dist/remote/challenges'), 7 | }, 8 | plugins: [ 9 | new NxWebpackPlugin({ 10 | target: 'node', 11 | compiler: 'tsc', 12 | main: './src/main.ts', 13 | tsConfig: './tsconfig.app.json', 14 | assets: ['./src/assets'], 15 | optimization: false, 16 | outputHashing: 'none', 17 | }), 18 | ], 19 | }; 20 | -------------------------------------------------------------------------------- /remote/flashcards/webpack.config.js: -------------------------------------------------------------------------------- 1 | const { NxWebpackPlugin } = require('@nx/webpack'); 2 | const { join } = require('path'); 3 | 4 | module.exports = { 5 | output: { 6 | path: join(__dirname, '../../dist/remote/flashcards'), 7 | }, 8 | plugins: [ 9 | new NxWebpackPlugin({ 10 | target: 'node', 11 | compiler: 'tsc', 12 | main: './src/main.ts', 13 | tsConfig: './tsconfig.app.json', 14 | assets: ['./src/assets'], 15 | optimization: false, 16 | outputHashing: 'none', 17 | }), 18 | ], 19 | }; 20 | -------------------------------------------------------------------------------- /apps/portal-e2e/cypress.config.ts: -------------------------------------------------------------------------------- 1 | import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset'; 2 | 3 | import { defineConfig } from 'cypress'; 4 | 5 | export default defineConfig({ 6 | e2e: { 7 | ...nxE2EPreset(__filename, { 8 | cypressDir: 'src', 9 | webServerCommands: { 10 | default: 'nx run portal:serve:development', 11 | production: 'nx run portal:serve:production', 12 | }, 13 | ciWebServerCommand: 'nx run portal:serve-static', 14 | }), 15 | baseUrl: 'http://localhost:4200', 16 | }, 17 | }); 18 | -------------------------------------------------------------------------------- /libs/guards/remote-auth/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "declaration": true, 6 | "types": ["node"], 7 | "target": "es2021", 8 | "strictNullChecks": true, 9 | "noImplicitAny": true, 10 | "strictBindCallApply": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "noFallthroughCasesInSwitch": true 13 | }, 14 | "include": ["src/**/*.ts"], 15 | "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] 16 | } 17 | -------------------------------------------------------------------------------- /tooling/wizard-e2e/cypress.config.ts: -------------------------------------------------------------------------------- 1 | import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset'; 2 | 3 | import { defineConfig } from 'cypress'; 4 | 5 | export default defineConfig({ 6 | e2e: { 7 | ...nxE2EPreset(__filename, { 8 | cypressDir: 'src', 9 | webServerCommands: { 10 | default: 'nx run wizard:serve:development', 11 | production: 'nx run wizard:serve:production', 12 | }, 13 | ciWebServerCommand: 'nx run wizard:serve-static', 14 | }), 15 | baseUrl: 'http://localhost:4200', 16 | }, 17 | }); 18 | -------------------------------------------------------------------------------- /apps/challenges/src/app/challenges/challenges.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 7 |
8 |
9 | 13 |
14 |
15 | -------------------------------------------------------------------------------- /apps/flashcards/src/app/flashcards/flashcards.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 7 |
8 |
9 | 13 |
14 |
15 | -------------------------------------------------------------------------------- /remote/features/src/app/features/features.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { FeaturesService } from './features.service'; 3 | import { FeaturesController } from './features.controller'; 4 | import { featureProviders } from './feature.providers'; 5 | import { DatabaseModule } from '../database/database.module'; 6 | 7 | @Module({ 8 | imports: [DatabaseModule], 9 | controllers: [FeaturesController], 10 | providers: [...featureProviders, FeaturesService], 11 | exports: [FeaturesService], 12 | }) 13 | export class FeaturesModule {} 14 | -------------------------------------------------------------------------------- /apps/challenges-e2e/cypress.config.ts: -------------------------------------------------------------------------------- 1 | import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset'; 2 | 3 | import { defineConfig } from 'cypress'; 4 | 5 | export default defineConfig({ 6 | e2e: { 7 | ...nxE2EPreset(__filename, { 8 | cypressDir: 'src', 9 | webServerCommands: { 10 | default: 'nx run challenges:serve:development', 11 | production: 'nx run challenges:serve:production', 12 | }, 13 | ciWebServerCommand: 'nx run challenges:serve-static', 14 | }), 15 | baseUrl: 'http://localhost:4200', 16 | }, 17 | }); 18 | -------------------------------------------------------------------------------- /apps/dashboard-e2e/cypress.config.ts: -------------------------------------------------------------------------------- 1 | import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset'; 2 | 3 | import { defineConfig } from 'cypress'; 4 | 5 | export default defineConfig({ 6 | e2e: { 7 | ...nxE2EPreset(__filename, { 8 | cypressDir: 'src', 9 | webServerCommands: { 10 | default: 'nx run dashboard:serve:development', 11 | production: 'nx run dashboard:serve:production', 12 | }, 13 | ciWebServerCommand: 'nx run dashboard:serve-static', 14 | }), 15 | baseUrl: 'http://localhost:4200', 16 | }, 17 | }); 18 | -------------------------------------------------------------------------------- /apps/flashcards-e2e/cypress.config.ts: -------------------------------------------------------------------------------- 1 | import { nxE2EPreset } from '@nx/cypress/plugins/cypress-preset'; 2 | 3 | import { defineConfig } from 'cypress'; 4 | 5 | export default defineConfig({ 6 | e2e: { 7 | ...nxE2EPreset(__filename, { 8 | cypressDir: 'src', 9 | webServerCommands: { 10 | default: 'nx run flashcards:serve:development', 11 | production: 'nx run flashcards:serve:production', 12 | }, 13 | ciWebServerCommand: 'nx run flashcards:serve-static', 14 | }), 15 | baseUrl: 'http://localhost:4200', 16 | }, 17 | }); 18 | -------------------------------------------------------------------------------- /remote/notes/src/app/database/subscribers/note.subscriber.ts: -------------------------------------------------------------------------------- 1 | import { Logger } from '@nestjs/common'; 2 | import { 3 | EntitySubscriberInterface, 4 | EventSubscriber, 5 | UpdateEvent, 6 | } from 'typeorm'; 7 | import { Note } from '../entities/note.entity'; 8 | 9 | @EventSubscriber() 10 | export class NoteSubscriber implements EntitySubscriberInterface { 11 | listenTo(): any { 12 | return Note; 13 | } 14 | 15 | afterUpdate(event: UpdateEvent): Promise | void { 16 | Logger.log(`Note Updated: ${event.databaseEntity.id}`); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /remote/users/src/app/database/subscribers/user.subscriber.ts: -------------------------------------------------------------------------------- 1 | import { Logger } from '@nestjs/common'; 2 | import { 3 | EntitySubscriberInterface, 4 | EventSubscriber, 5 | UpdateEvent, 6 | } from 'typeorm'; 7 | import { User } from '../entities/user.entity'; 8 | 9 | @EventSubscriber() 10 | export class UserSubscriber implements EntitySubscriberInterface { 11 | listenTo(): any { 12 | return User; 13 | } 14 | 15 | afterUpdate(event: UpdateEvent): Promise | void { 16 | Logger.log(`User Updated: ${event.databaseEntity.id}`); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /libs/testing/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | }, 17 | { 18 | "files": ["*.json"], 19 | "parser": "jsonc-eslint-parser", 20 | "rules": { 21 | "@nx/dependency-checks": "error" 22 | } 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /libs/testing/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "forceConsistentCasingInFileNames": true, 6 | "strict": true, 7 | "noImplicitOverride": true, 8 | "noPropertyAccessFromIndexSignature": true, 9 | "noImplicitReturns": true, 10 | "noFallthroughCasesInSwitch": true 11 | }, 12 | "files": [], 13 | "include": [], 14 | "references": [ 15 | { 16 | "path": "./tsconfig.lib.json" 17 | }, 18 | { 19 | "path": "./tsconfig.spec.json" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /libs/api-interfaces/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | }, 17 | { 18 | "files": ["*.json"], 19 | "parser": "jsonc-eslint-parser", 20 | "rules": { 21 | "@nx/dependency-checks": "error" 22 | } 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /remote/challenges/src/app/challenges/challenges.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { ChallengesService } from './challenges.service'; 3 | import { ChallengesController } from './challenges.controller'; 4 | import { challengeProviders } from './challenge.providers'; 5 | import { DatabaseModule } from '../database/database.module'; 6 | 7 | @Module({ 8 | imports: [DatabaseModule], 9 | controllers: [ChallengesController], 10 | providers: [...challengeProviders, ChallengesService], 11 | exports: [ChallengesService], 12 | }) 13 | export class ChallengesModule {} 14 | -------------------------------------------------------------------------------- /remote/flashcards/src/app/flashcards/flashcards.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { FlashcardsService } from './flashcards.service'; 3 | import { FlashcardsController } from './flashcards.controller'; 4 | import { flashcardProviders } from './flashcard.providers'; 5 | import { DatabaseModule } from '../database/database.module'; 6 | 7 | @Module({ 8 | imports: [DatabaseModule], 9 | controllers: [FlashcardsController], 10 | providers: [...flashcardProviders, FlashcardsService], 11 | exports: [FlashcardsService], 12 | }) 13 | export class FlashcardsModule {} 14 | -------------------------------------------------------------------------------- /libs/guards/remote-auth/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "forceConsistentCasingInFileNames": true, 6 | "strict": true, 7 | "noImplicitOverride": true, 8 | "noPropertyAccessFromIndexSignature": true, 9 | "noImplicitReturns": true, 10 | "noFallthroughCasesInSwitch": true 11 | }, 12 | "files": [], 13 | "include": [], 14 | "references": [ 15 | { 16 | "path": "./tsconfig.lib.json" 17 | }, 18 | { 19 | "path": "./tsconfig.spec.json" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /libs/testing/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "testing", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/testing/src", 5 | "projectType": "library", 6 | "targets": { 7 | "build": { 8 | "executor": "@nx/js:tsc", 9 | "outputs": ["{options.outputPath}"], 10 | "options": { 11 | "outputPath": "dist/libs/testing", 12 | "main": "libs/testing/src/index.ts", 13 | "tsConfig": "libs/testing/tsconfig.lib.json", 14 | "assets": ["libs/testing/*.md"] 15 | } 16 | } 17 | }, 18 | "tags": [] 19 | } 20 | -------------------------------------------------------------------------------- /apps/notes/src/app/remote-entry/entry.routes.ts: -------------------------------------------------------------------------------- 1 | 2 | import { Route } from '@angular/router'; 3 | import { provideEffects } from '@ngrx/effects'; 4 | import { provideState } from '@ngrx/store'; 5 | import { NotesEffects, NotesState } from '@proto/notes-state'; 6 | import { RemoteEntryComponent } from './entry.component'; 7 | 8 | export const remoteRoutes: Route[] = [ 9 | { 10 | path: '', 11 | component: RemoteEntryComponent, 12 | providers: [ 13 | provideEffects(NotesEffects), 14 | provideState(NotesState.NOTES_FEATURE_KEY, NotesState.reducers), 15 | ], 16 | }, 17 | ]; 18 | -------------------------------------------------------------------------------- /remote/features/src/app/database/subscribers/feature.subscriber.ts: -------------------------------------------------------------------------------- 1 | import { Logger } from '@nestjs/common'; 2 | import { 3 | EntitySubscriberInterface, 4 | EventSubscriber, 5 | UpdateEvent, 6 | } from 'typeorm'; 7 | import { Feature } from '../entities/feature.entity'; 8 | 9 | @EventSubscriber() 10 | export class FeatureSubscriber implements EntitySubscriberInterface { 11 | listenTo(): any { 12 | return Feature; 13 | } 14 | 15 | afterUpdate(event: UpdateEvent): Promise | void { 16 | Logger.log(`Feature Updated: ${event.databaseEntity.id}`); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /apps/portal/src/app/app.routes.ts: -------------------------------------------------------------------------------- 1 | import { Route } from '@angular/router'; 2 | import { FeaturesComponent } from './features/features.component'; 3 | import { FeaturesEffects, FeaturesState } from '@proto/features-state'; 4 | import { provideState } from '@ngrx/store'; 5 | import { provideEffects } from '@ngrx/effects'; 6 | 7 | export const appRoutes: Route[] = [ 8 | { 9 | path: '', 10 | component: FeaturesComponent, 11 | providers: [ 12 | provideEffects(FeaturesEffects), 13 | provideState(FeaturesState.FEATURES_FEATURE_KEY, FeaturesState.reducers), 14 | ], 15 | }, 16 | ]; 17 | -------------------------------------------------------------------------------- /libs/api-interfaces/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "api-interfaces", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "libs/api-interfaces/src", 5 | "projectType": "library", 6 | "targets": { 7 | "build": { 8 | "executor": "@nx/js:tsc", 9 | "outputs": ["{options.outputPath}"], 10 | "options": { 11 | "outputPath": "dist/libs/api-interfaces", 12 | "main": "libs/api-interfaces/src/index.ts", 13 | "tsConfig": "libs/api-interfaces/tsconfig.lib.json", 14 | "assets": [] 15 | } 16 | } 17 | }, 18 | "tags": [] 19 | } 20 | -------------------------------------------------------------------------------- /remote/users/src/app/users/users.module.ts: -------------------------------------------------------------------------------- 1 | import { Module, forwardRef } from '@nestjs/common'; 2 | import { UsersService } from './users.service'; 3 | import { UsersController } from './users.controller'; 4 | import { userProviders } from './user.providers'; 5 | import { DatabaseModule } from '../database/database.module'; 6 | import { AuthModule } from '../auth/auth.module'; 7 | 8 | @Module({ 9 | imports: [DatabaseModule, forwardRef(() => AuthModule)], 10 | controllers: [UsersController], 11 | providers: [...userProviders, UsersService], 12 | exports: [UsersService], 13 | }) 14 | export class UsersModule {} 15 | -------------------------------------------------------------------------------- /apps/portal/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | portal 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /remote/challenges/src/app/database/subscribers/challenge.subscriber.ts: -------------------------------------------------------------------------------- 1 | import { Logger } from '@nestjs/common'; 2 | import { 3 | EntitySubscriberInterface, 4 | EventSubscriber, 5 | UpdateEvent, 6 | } from 'typeorm'; 7 | import { Challenge } from '../entities/challenge.entity'; 8 | 9 | @EventSubscriber() 10 | export class ChallengeSubscriber 11 | implements EntitySubscriberInterface 12 | { 13 | listenTo(): any { 14 | return Challenge; 15 | } 16 | 17 | afterUpdate(event: UpdateEvent): Promise | void { 18 | Logger.log(`Challenge Updated: ${event.databaseEntity.id}`); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /remote/flashcards/src/app/database/subscribers/flashcard.subscriber.ts: -------------------------------------------------------------------------------- 1 | import { Logger } from '@nestjs/common'; 2 | import { 3 | EntitySubscriberInterface, 4 | EventSubscriber, 5 | UpdateEvent, 6 | } from 'typeorm'; 7 | import { Flashcard } from '../entities/flashcard.entity'; 8 | 9 | @EventSubscriber() 10 | export class FlashcardSubscriber 11 | implements EntitySubscriberInterface 12 | { 13 | listenTo(): any { 14 | return Flashcard; 15 | } 16 | 17 | afterUpdate(event: UpdateEvent): Promise | void { 18 | Logger.log(`Flashcard Updated: ${event.databaseEntity.id}`); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /apps/challenges/src/app/remote-entry/entry.routes.ts: -------------------------------------------------------------------------------- 1 | import { Route } from '@angular/router'; 2 | import { provideEffects } from '@ngrx/effects'; 3 | import { provideState } from '@ngrx/store'; 4 | import { ChallengesEffects, ChallengesState } from '@proto/challenges-state'; 5 | import { RemoteEntryComponent } from './entry.component'; 6 | 7 | export const remoteRoutes: Route[] = [ 8 | { 9 | path: '', 10 | component: RemoteEntryComponent, 11 | providers: [ 12 | provideEffects(ChallengesEffects), 13 | provideState(ChallengesState.CHALLENGES_FEATURE_KEY, ChallengesState.reducers), 14 | ], 15 | }, 16 | ]; 17 | -------------------------------------------------------------------------------- /apps/flashcards/src/app/remote-entry/entry.routes.ts: -------------------------------------------------------------------------------- 1 | import { Route } from '@angular/router'; 2 | import { provideEffects } from '@ngrx/effects'; 3 | import { provideState } from '@ngrx/store'; 4 | import { FlashcardsEffects, FlashcardsState } from '@proto/flashcards-state'; 5 | import { RemoteEntryComponent } from './entry.component'; 6 | 7 | export const remoteRoutes: Route[] = [ 8 | { 9 | path: '', 10 | component: RemoteEntryComponent, 11 | providers: [ 12 | provideEffects(FlashcardsEffects), 13 | provideState(FlashcardsState.FLASHCARDS_FEATURE_KEY, FlashcardsState.reducers), 14 | ], 15 | }, 16 | ]; 17 | -------------------------------------------------------------------------------- /apps/notes/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | notes 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /apps/users/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Feature: Users 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /remote/notes-e2e/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'notes-api-e2e', 4 | preset: '../../jest.preset.js', 5 | globalSetup: '/src/support/global-setup.ts', 6 | globalTeardown: '/src/support/global-teardown.ts', 7 | setupFiles: ['/src/support/test-setup.ts'], 8 | testEnvironment: 'node', 9 | transform: { 10 | '^.+\\.[tj]s$': [ 11 | 'ts-jest', 12 | { 13 | tsconfig: '/tsconfig.spec.json', 14 | }, 15 | ], 16 | }, 17 | moduleFileExtensions: ['ts', 'js', 'html'], 18 | coverageDirectory: '../../coverage/notes-api-e2e', 19 | }; 20 | -------------------------------------------------------------------------------- /remote/users-e2e/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'users-api-e2e', 4 | preset: '../../jest.preset.js', 5 | globalSetup: '/src/support/global-setup.ts', 6 | globalTeardown: '/src/support/global-teardown.ts', 7 | setupFiles: ['/src/support/test-setup.ts'], 8 | testEnvironment: 'node', 9 | transform: { 10 | '^.+\\.[tj]s$': [ 11 | 'ts-jest', 12 | { 13 | tsconfig: '/tsconfig.spec.json', 14 | }, 15 | ], 16 | }, 17 | moduleFileExtensions: ['ts', 'js', 'html'], 18 | coverageDirectory: '../../coverage/users-api-e2e', 19 | }; 20 | -------------------------------------------------------------------------------- /remote/features-e2e/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'features-api-e2e', 4 | preset: '../../jest.preset.js', 5 | globalSetup: '/src/support/global-setup.ts', 6 | globalTeardown: '/src/support/global-teardown.ts', 7 | setupFiles: ['/src/support/test-setup.ts'], 8 | testEnvironment: 'node', 9 | transform: { 10 | '^.+\\.[tj]s$': [ 11 | 'ts-jest', 12 | { 13 | tsconfig: '/tsconfig.spec.json', 14 | }, 15 | ], 16 | }, 17 | moduleFileExtensions: ['ts', 'js', 'html'], 18 | coverageDirectory: '../../coverage/features-api-e2e', 19 | }; 20 | -------------------------------------------------------------------------------- /remote/challenges-e2e/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'challenges-api-e2e', 4 | preset: '../../jest.preset.js', 5 | globalSetup: '/src/support/global-setup.ts', 6 | globalTeardown: '/src/support/global-teardown.ts', 7 | setupFiles: ['/src/support/test-setup.ts'], 8 | testEnvironment: 'node', 9 | transform: { 10 | '^.+\\.[tj]s$': [ 11 | 'ts-jest', 12 | { 13 | tsconfig: '/tsconfig.spec.json', 14 | }, 15 | ], 16 | }, 17 | moduleFileExtensions: ['ts', 'js', 'html'], 18 | coverageDirectory: '../../coverage/challenges-api-e2e', 19 | }; 20 | -------------------------------------------------------------------------------- /remote/flashcards-e2e/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'flashcards-api-e2e', 4 | preset: '../../jest.preset.js', 5 | globalSetup: '/src/support/global-setup.ts', 6 | globalTeardown: '/src/support/global-teardown.ts', 7 | setupFiles: ['/src/support/test-setup.ts'], 8 | testEnvironment: 'node', 9 | transform: { 10 | '^.+\\.[tj]s$': [ 11 | 'ts-jest', 12 | { 13 | tsconfig: '/tsconfig.spec.json', 14 | }, 15 | ], 16 | }, 17 | moduleFileExtensions: ['ts', 'js', 'html'], 18 | coverageDirectory: '../../coverage/flashcards-api-e2e', 19 | }; 20 | -------------------------------------------------------------------------------- /apps/challenges/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | challenges 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /apps/flashcards/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | flashcards 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /tooling/wizard/src/main.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { appConfig } from './app/app.config'; 3 | import { AppComponent } from './app/app.component'; 4 | 5 | import 'codemirror/mode/javascript/javascript'; 6 | import 'codemirror/addon/fold/foldgutter'; 7 | import 'codemirror/addon/fold/brace-fold'; 8 | import 'codemirror/lib/codemirror'; 9 | import 'codemirror/addon/edit/closebrackets'; 10 | import 'codemirror/addon/edit/matchbrackets'; 11 | import 'codemirror/addon/lint/lint'; 12 | import 'codemirror/addon/lint/json-lint'; 13 | 14 | bootstrapApplication(AppComponent, appConfig).catch((err) => 15 | console.error(err) 16 | ); 17 | -------------------------------------------------------------------------------- /apps/notes-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "outDir": "../../dist/out-tsc", 6 | "module": "commonjs", 7 | "types": ["cypress", "node"], 8 | "sourceMap": false, 9 | "forceConsistentCasingInFileNames": true, 10 | "strict": true, 11 | "noImplicitOverride": true, 12 | "noPropertyAccessFromIndexSignature": true, 13 | "noImplicitReturns": true, 14 | "noFallthroughCasesInSwitch": true 15 | }, 16 | "include": [ 17 | "**/*.ts", 18 | "**/*.js", 19 | "cypress.config.ts", 20 | "**/*.cy.ts", 21 | "**/*.cy.js", 22 | "**/*.d.ts" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /apps/notes/src/app/notes/notes-list/notes-list.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Notes 5 | 6 | 7 | 8 | {{ note.title }} 9 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /apps/portal-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "outDir": "../../dist/out-tsc", 6 | "module": "commonjs", 7 | "types": ["cypress", "node"], 8 | "sourceMap": false, 9 | "forceConsistentCasingInFileNames": true, 10 | "strict": true, 11 | "noImplicitOverride": true, 12 | "noPropertyAccessFromIndexSignature": true, 13 | "noImplicitReturns": true, 14 | "noFallthroughCasesInSwitch": true 15 | }, 16 | "include": [ 17 | "**/*.ts", 18 | "**/*.js", 19 | "cypress.config.ts", 20 | "**/*.cy.ts", 21 | "**/*.cy.js", 22 | "**/*.d.ts" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /apps/users-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "outDir": "../../dist/out-tsc", 6 | "module": "commonjs", 7 | "types": ["cypress", "node"], 8 | "sourceMap": false, 9 | "forceConsistentCasingInFileNames": true, 10 | "strict": true, 11 | "noImplicitOverride": true, 12 | "noPropertyAccessFromIndexSignature": true, 13 | "noImplicitReturns": true, 14 | "noFallthroughCasesInSwitch": true 15 | }, 16 | "include": [ 17 | "**/*.ts", 18 | "**/*.js", 19 | "cypress.config.ts", 20 | "**/*.cy.ts", 21 | "**/*.cy.js", 22 | "**/*.d.ts" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /apps/challenges-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "outDir": "../../dist/out-tsc", 6 | "module": "commonjs", 7 | "types": ["cypress", "node"], 8 | "sourceMap": false, 9 | "forceConsistentCasingInFileNames": true, 10 | "strict": true, 11 | "noImplicitOverride": true, 12 | "noPropertyAccessFromIndexSignature": true, 13 | "noImplicitReturns": true, 14 | "noFallthroughCasesInSwitch": true 15 | }, 16 | "include": [ 17 | "**/*.ts", 18 | "**/*.js", 19 | "cypress.config.ts", 20 | "**/*.cy.ts", 21 | "**/*.cy.js", 22 | "**/*.d.ts" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /apps/dashboard-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "outDir": "../../dist/out-tsc", 6 | "module": "commonjs", 7 | "types": ["cypress", "node"], 8 | "sourceMap": false, 9 | "forceConsistentCasingInFileNames": true, 10 | "strict": true, 11 | "noImplicitOverride": true, 12 | "noPropertyAccessFromIndexSignature": true, 13 | "noImplicitReturns": true, 14 | "noFallthroughCasesInSwitch": true 15 | }, 16 | "include": [ 17 | "**/*.ts", 18 | "**/*.js", 19 | "cypress.config.ts", 20 | "**/*.cy.ts", 21 | "**/*.cy.js", 22 | "**/*.d.ts" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /apps/flashcards-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "outDir": "../../dist/out-tsc", 6 | "module": "commonjs", 7 | "types": ["cypress", "node"], 8 | "sourceMap": false, 9 | "forceConsistentCasingInFileNames": true, 10 | "strict": true, 11 | "noImplicitOverride": true, 12 | "noPropertyAccessFromIndexSignature": true, 13 | "noImplicitReturns": true, 14 | "noFallthroughCasesInSwitch": true 15 | }, 16 | "include": [ 17 | "**/*.ts", 18 | "**/*.js", 19 | "cypress.config.ts", 20 | "**/*.cy.ts", 21 | "**/*.cy.js", 22 | "**/*.d.ts" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /tooling/wizard-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "outDir": "../../dist/out-tsc", 6 | "module": "commonjs", 7 | "types": ["cypress", "node"], 8 | "sourceMap": false, 9 | "forceConsistentCasingInFileNames": true, 10 | "strict": true, 11 | "noImplicitOverride": true, 12 | "noPropertyAccessFromIndexSignature": true, 13 | "noImplicitReturns": true, 14 | "noFallthroughCasesInSwitch": true 15 | }, 16 | "include": [ 17 | "**/*.ts", 18 | "**/*.js", 19 | "cypress.config.ts", 20 | "**/*.cy.ts", 21 | "**/*.cy.js", 22 | "**/*.d.ts" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /apps/portal-e2e/src/support/e2e.ts: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/e2e.ts is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.ts using ES2015 syntax: 17 | import './commands'; 18 | -------------------------------------------------------------------------------- /remote/notes/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "notes-api", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "remote/notes/src", 5 | "projectType": "application", 6 | "targets": { 7 | "serve": { 8 | "executor": "@nx/js:node", 9 | "defaultConfiguration": "development", 10 | "options": { 11 | "buildTarget": "notes-api:build" 12 | }, 13 | "configurations": { 14 | "development": { 15 | "buildTarget": "notes-api:build:development" 16 | }, 17 | "production": { 18 | "buildTarget": "notes-api:build:production" 19 | } 20 | } 21 | } 22 | }, 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /remote/users/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "users-api", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "remote/users/src", 5 | "projectType": "application", 6 | "targets": { 7 | "serve": { 8 | "executor": "@nx/js:node", 9 | "defaultConfiguration": "development", 10 | "options": { 11 | "buildTarget": "users-api:build" 12 | }, 13 | "configurations": { 14 | "development": { 15 | "buildTarget": "users-api:build:development" 16 | }, 17 | "production": { 18 | "buildTarget": "users-api:build:production" 19 | } 20 | } 21 | } 22 | }, 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /tooling/wizard-e2e/src/support/e2e.ts: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/e2e.ts is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.ts using ES2015 syntax: 17 | import './commands'; 18 | -------------------------------------------------------------------------------- /apps/dashboard/module-federation.config.ts: -------------------------------------------------------------------------------- 1 | import { ModuleFederationConfig } from '@nx/webpack'; 2 | 3 | const config: ModuleFederationConfig = { 4 | name: 'dashboard', 5 | /** 6 | * To use a remote that does not exist in your current Nx Workspace 7 | * You can use the tuple-syntax to define your remote 8 | * 9 | * remotes: [['my-external-remote', 'https://nx-angular-remote.netlify.app']] 10 | * 11 | * You _may_ need to add a `remotes.d.ts` file to your `src/` folder declaring the external remote for tsc, with the 12 | * following content: 13 | * 14 | * declare module 'my-external-remote'; 15 | * 16 | */ 17 | remotes: [], 18 | }; 19 | 20 | export default config; 21 | -------------------------------------------------------------------------------- /apps/portal/src/app/features/features-list/features-list.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Features 5 | 6 | 7 | 8 | {{ feature.title }} 9 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /apps/users/src/app/users/users-list/users-list.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Users 5 | 6 | 7 | 8 | {{ user.firstName }} 9 | {{ user.lastName }} 10 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /remote/features/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "features-api", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "remote/features/src", 5 | "projectType": "application", 6 | "targets": { 7 | "serve": { 8 | "executor": "@nx/js:node", 9 | "defaultConfiguration": "development", 10 | "options": { 11 | "buildTarget": "features-api:build" 12 | }, 13 | "configurations": { 14 | "development": { 15 | "buildTarget": "features-api:build:development" 16 | }, 17 | "production": { 18 | "buildTarget": "features-api:build:production" 19 | } 20 | } 21 | } 22 | }, 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /apps/dashboard/src/app/home/home.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HomeComponent } from './home.component'; 4 | 5 | describe('HomeComponent', () => { 6 | let component: HomeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | imports: [HomeComponent] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(HomeComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | dist 5 | tmp 6 | /out-tsc 7 | 8 | # dependencies 9 | node_modules 10 | 11 | # IDEs and editors 12 | /.idea 13 | .project 14 | .classpath 15 | .c9/ 16 | *.launch 17 | .settings/ 18 | *.sublime-workspace 19 | 20 | # IDE - VSCode 21 | .vscode/* 22 | !.vscode/settings.json 23 | !.vscode/tasks.json 24 | !.vscode/launch.json 25 | !.vscode/extensions.json 26 | 27 | # misc 28 | /.sass-cache 29 | /connect.lock 30 | /coverage 31 | /libpeerconnection.log 32 | npm-debug.log 33 | yarn-error.log 34 | testem.log 35 | /typings 36 | 37 | # System Files 38 | .DS_Store 39 | Thumbs.db 40 | 41 | .nx/cache 42 | .angular 43 | *.env 44 | -------------------------------------------------------------------------------- /compose.yaml: -------------------------------------------------------------------------------- 1 | services: 2 | challenges: 3 | image: app-challenges 4 | environment: 5 | - "AUTH_URL=http://users:3500" 6 | flashcards: 7 | image: app-flashcards 8 | environment: 9 | - "AUTH_URL=http://users:3500" 10 | notes: 11 | image: app-notes 12 | environment: 13 | - "AUTH_URL=http://users:3500" 14 | users: 15 | image: app-users 16 | environment: 17 | - "AUTH_URL=http://users:3500" 18 | features: 19 | image: app-features 20 | environment: 21 | - "AUTH_URL=http://users:3500" 22 | gateway: 23 | image: envoyproxy/envoy:tools-v1.29-latest 24 | volumes: 25 | - ./envoy.yaml:/etc/envoy/envoy.yaml 26 | ports: 27 | - "3500:3500" 28 | -------------------------------------------------------------------------------- /remote/challenges/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "challenges-api", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "remote/challenges/src", 5 | "projectType": "application", 6 | "targets": { 7 | "serve": { 8 | "executor": "@nx/js:node", 9 | "defaultConfiguration": "development", 10 | "options": { 11 | "buildTarget": "challenges-api:build" 12 | }, 13 | "configurations": { 14 | "development": { 15 | "buildTarget": "challenges-api:build:development" 16 | }, 17 | "production": { 18 | "buildTarget": "challenges-api:build:production" 19 | } 20 | } 21 | } 22 | }, 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /remote/flashcards/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flashcards-api", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "sourceRoot": "remote/flashcards/src", 5 | "projectType": "application", 6 | "targets": { 7 | "serve": { 8 | "executor": "@nx/js:node", 9 | "defaultConfiguration": "development", 10 | "options": { 11 | "buildTarget": "flashcards-api:build" 12 | }, 13 | "configurations": { 14 | "development": { 15 | "buildTarget": "flashcards-api:build:development" 16 | }, 17 | "production": { 18 | "buildTarget": "flashcards-api:build:production" 19 | } 20 | } 21 | } 22 | }, 23 | "tags": [] 24 | } 25 | -------------------------------------------------------------------------------- /remote/users/src/app/auth/strategies/jwt.strategy.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@nestjs/common'; 2 | import { PassportStrategy } from '@nestjs/passport'; 3 | import { ExtractJwt, Strategy } from 'passport-jwt'; 4 | import { jwtConstants } from '../auth.constants'; 5 | import { JwtPayload } from 'jsonwebtoken'; 6 | 7 | @Injectable() 8 | export class JwtStrategy extends PassportStrategy(Strategy) { 9 | constructor() { 10 | super({ 11 | jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), 12 | ignoreExpiration: false, 13 | secretOrKey: jwtConstants.secret, 14 | }); 15 | } 16 | 17 | async validate(payload: JwtPayload) { 18 | return { id: payload.sub, role: payload.role }; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /apps/challenges/src/app/challenges/challenges-list/challenges-list.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Challenges 5 | 6 | 7 | 8 | {{ challenge.title }} 9 | 14 | 15 | 16 | 17 | 18 | --------------------------------------------------------------------------------