{"id":13559045,"url":"https://github.com/DSpace/dspace-angular","last_synced_at":"2025-04-03T14:31:17.822Z","repository":{"id":37502420,"uuid":"73815225","full_name":"DSpace/dspace-angular","owner":"DSpace","description":"DSpace 7.x (and later) User Interface built on Angular.io","archived":false,"fork":false,"pushed_at":"2024-05-22T12:13:16.000Z","size":73885,"stargazers_count":120,"open_issues_count":363,"forks_count":381,"subscribers_count":44,"default_branch":"main","last_synced_at":"2024-05-22T18:28:56.182Z","etag":null,"topics":["angular","angular-ui","dspace","ngrx","repository","typescript","user-interface","yarn"],"latest_commit_sha":null,"homepage":"https://wiki.lyrasis.org/display/DSDOC7x/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DSpace.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-11-15T13:16:32.000Z","updated_at":"2024-06-21T20:40:13.216Z","dependencies_parsed_at":"2023-10-20T21:24:33.118Z","dependency_job_id":"ec9ee419-b225-412f-baf9-c78218646414","html_url":"https://github.com/DSpace/dspace-angular","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DSpace%2Fdspace-angular","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DSpace%2Fdspace-angular/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DSpace%2Fdspace-angular/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DSpace%2Fdspace-angular/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DSpace","download_url":"https://codeload.github.com/DSpace/dspace-angular/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247018414,"owners_count":20869999,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","angular-ui","dspace","ngrx","repository","typescript","user-interface","yarn"],"created_at":"2024-08-01T12:05:18.751Z","updated_at":"2025-04-03T14:31:17.808Z","avatar_url":"https://github.com/DSpace.png","language":"TypeScript","readme":"[![Build Status](https://github.com/DSpace/dspace-angular/workflows/Build/badge.svg?branch=main)](https://github.com/DSpace/dspace-angular/actions?query=workflow%3ABuild) [![Coverage Status](https://codecov.io/gh/DSpace/dspace-angular/branch/main/graph/badge.svg)](https://codecov.io/gh/DSpace/dspace-angular) [![Universal Angular](https://img.shields.io/badge/universal-angular2-brightgreen.svg?style=flat)](https://github.com/angular/universal)\n\ndspace-angular\n==============\n\n\u003e The DSpace User Interface built on [Angular](https://angular.io/), written in [TypeScript](https://www.typescriptlang.org/) and using [Angular Universal](https://angular.io/guide/universal).\n\nOverview\n--------\n\nDSpace open source software is a turnkey repository application used by more than\n2,000 organizations and institutions worldwide to provide durable access to digital resources.\nFor more information, visit http://www.dspace.org/\n\nDSpace consists of both a Java-based backend and an Angular-based frontend.\n\n* Backend (https://github.com/DSpace/DSpace/) provides a REST API, along with other machine-based interfaces (e.g. OAI-PMH, SWORD, etc)\n    * The REST Contract is at https://github.com/DSpace/RestContract\n* Frontend (this codebase) is the User Interface built on the REST API\n\nDownloads\n---------\n\n* Backend (REST API): https://github.com/DSpace/DSpace/releases\n* Frontend (User Interface): https://github.com/DSpace/dspace-angular/releases\n\n\n## Documentation / Installation\n\nDocumentation for each release may be viewed online or downloaded via our [Documentation Wiki](https://wiki.lyrasis.org/display/DSDOC/).\n\nThe latest DSpace Installation instructions are available at:\nhttps://wiki.lyrasis.org/display/DSDOC7x/Installing+DSpace\n\nQuick start\n-----------\n\n**Ensure you're running [Node](https://nodejs.org) `v18.x` or `v20.x`, [npm](https://www.npmjs.com/) \u003e= `v10.x`**\n\n```bash\n# clone the repo\ngit clone https://github.com/DSpace/dspace-angular.git\n\n# change directory to our repo\ncd dspace-angular\n\n# install the local dependencies\nnpm install\n\n# start the server\nnpm start\n```\n\nThen go to [http://localhost:4000](http://localhost:4000) in your browser\n\nNot sure where to start? watch the training videos linked in the [Introduction to the technology](#introduction-to-the-technology) section below.\n\nTable of Contents\n-----------------\n\n-\t[Introduction to the technology](#introduction-to-the-technology)\n-\t[Requirements](#requirements)\n-\t[Installing](#installing)\n    - [Configuring](#configuring)\n-\t[Running the app](#running-the-app)\n    - [Running in production mode](#running-in-production-mode)\n    - [Deploy](#deploy)\n    - [Running the application with Docker](#running-the-application-with-docker)\n-\t[Cleaning](#cleaning)\n-\t[Testing](#testing)\n    - [Test a Pull Request](#test-a-pull-request)\n\t- [Unit Tests](#unit-tests)\n\t- [E2E Tests](#e2e-tests)\n\t\t- [Writing E2E Tests](#writing-e2e-tests)\n-\t[Documentation](#documentation)\n-\t[Other commands](#other-commands)\n-\t[Recommended Editors/IDEs](#recommended-editorsides)\n-\t[Collaborating](#collaborating)\n-\t[File Structure](#file-structure)\n-\t[Managing Dependencies (via npm)](#managing-dependencies-via-npm)\n-\t[Frequently asked questions](#frequently-asked-questions)\n-\t[License](#license)\n\nIntroduction to the technology\n------------------------------\n\nYou can find more information on the technologies used in this project (Angular.io, Angular CLI, Typescript, Angular Universal, RxJS, etc) on the [LYRASIS wiki](https://wiki.lyrasis.org/display/DSPACE/DSpace+7+UI+Technology+Stack)\n\nRequirements\n------------\n\n-\t[Node.js](https://nodejs.org)\n-\tEnsure you're running node `v18.x` or `v20.x`\n\nIf you have [`nvm`](https://github.com/creationix/nvm#install-script) or [`nvm-windows`](https://github.com/coreybutler/nvm-windows) installed, which is highly recommended, you can run `nvm install --lts \u0026\u0026 nvm use` to install and start using the latest Node LTS.\n\nInstalling\n----------\n\n-\t`npm install` to install the local dependencies\n\n### Configuring\n\nDefault runtime configuration file is located in `config/` folder. These configurations can be changed without rebuilding the distribution.\n\nTo override the default configuration values, create local files that override the parameters you need to change. You can use `config.example.yml` as a starting point.\n\n-\tCreate a new `config.(dev or development).yml` file in `config/` for a `development` environment;\n-\tCreate a new `config.(prod or production).yml` file in `config/` for a `production` environment;\n\nThe settings can also be overwritten using an environment file or environment variables.\n\nThis file should be called `.env` and be placed in the project root.\n\nThe following non-convention settings:\n\n```bash\nDSPACE_HOST # The host name of the angular application\nDSPACE_PORT # The port number of the angular application\nDSPACE_NAMESPACE # The namespace of the angular application\nDSPACE_SSL # Whether the angular application uses SSL [true/false]\n```\n\nAll other settings can be set using the following convention for naming the environment variables:\n\n1. replace all `.` with `_`\n2. convert all characters to upper case\n3. prefix with `DSPACE_`\n\ne.g.\n\n```bash\n# The host name of the REST application\nrest.host =\u003e DSPACE_REST_HOST\n\n# The port number of the REST application\nrest.port =\u003e DSPACE_REST_PORT\n\n# The namespace of the REST application\nrest.nameSpace =\u003e DSPACE_REST_NAMESPACE\n\n# Whether the angular REST uses SSL [true/false]\nrest.ssl =\u003e DSPACE_REST_SSL\n\ncache.msToLive.default =\u003e DSPACE_CACHE_MSTOLIVE_DEFAULT\nauth.ui.timeUntilIdle =\u003e DSPACE_AUTH_UI_TIMEUNTILIDLE\n```\n\nThe equavelant to the non-conventional legacy settings:\n\n```bash\nDSPACE_UI_HOST =\u003e DSPACE_HOST\nDSPACE_UI_PORT =\u003e DSPACE_PORT\nDSPACE_UI_NAMESPACE =\u003e DSPACE_NAMESPACE\nDSPACE_UI_SSL =\u003e DSPACE_SSL\n```\n\nThe same settings can also be overwritten by setting system environment variables instead, E.g.:\n```bash\nexport DSPACE_HOST=demo.dspace.org\nexport DSPACE_UI_PORT=4000\n```\n\nThe priority works as follows: **environment variable** overrides **variable in `.env` file** overrides external config set by `DSPACE_APP_CONFIG_PATH` overrides **`config.(prod or dev).yml`**\n\nThese configuration sources are collected **at run time**, and written to `dist/browser/assets/config.json` for production and `src/app/assets/config.json` for development.\n\nThe configuration file can be externalized by using environment variable `DSPACE_APP_CONFIG_PATH`.\n\n#### Buildtime Configuring\n\nBuildtime configuration must defined before build in order to include in transpiled JavaScript. This is primarily for the server. These settings can be found under `src/environment/` folder.\n\nTo override the default configuration values for development, create local file that override the build time parameters you need to change.\n\n-\tCreate a new `environment.(dev or development).ts` file in `src/environment/` for a `development` environment;\n\nIf needing to update default configurations values for production, update local file that override the build time parameters you need to change.\n\n-\tUpdate `environment.production.ts` file in `src/environment/` for a `production` environment;\n\nThe environment object is provided for use as import in code and is extended with the runtime configuration on bootstrap of the application.\n\n\u003e Take caution moving runtime configs into the buildtime configuration. They will be overwritten by what is defined in the runtime config on bootstrap.\n\n#### Using environment variables in code\nTo use environment variables in a UI component, use:\n\n```typescript\nimport { AppConfig, APP_CONFIG } from 'src/config/app-config.interface';\n...\nconstructor(@Inject(APP_CONFIG) private appConfig: AppConfig) {}\n...\n```\n\nor\n\n```typescript\nimport { environment } from '../environment.ts';\n```\n\nRunning the app\n---------------\n\nAfter you have installed all dependencies you can now run the app. Run `npm run start:dev` to start a local server which will watch for changes, rebuild the code, and reload the server for you. You can visit it at `http://localhost:4000`.\n\n### Running in production mode\n\nWhen building for production we're using Ahead of Time (AoT) compilation. With AoT, the browser downloads a pre-compiled version of the application, so it can render the application immediately, without waiting to compile the app first. The compiler is roughly half the size of Angular itself, so omitting it dramatically reduces the application payload.\n\nTo build the app for production and start the server (in one command) run:\n\n```bash\nnpm start\n```\nThis will run the application in an instance of the Express server, which is included.\n\nIf you only want to build for production, without starting, run:\n\n```bash\nnpm run build:prod\n```\nThis will build the application and put the result in the `dist` folder.  You can copy this folder to wherever you need it for your application server.  If you will be using the built-in Express server, you'll also need a copy of the `node_modules` folder tucked inside your copy of `dist`.\n\nAfter building the app for production, it can be started by running:\n```bash\nnpm run serve:ssr\n```\n\n### Running the application with Docker\nNOTE: At this time, we do not have production-ready Docker images for DSpace.\nThat said, we do have quick-start Docker Compose scripts for development or testing purposes.\n\nSee [Docker Runtime Options](docker/README.md)\n\n\nCleaning\n--------\n\n```bash\n# clean everything, including node_modules. You'll need to run npm install again afterwards.\nnpm run clean\n\n# clean files generated by the production build (.ngfactory files, css files, etc)\nnpm run clean:prod\n\n# cleans the distribution directory\nnpm run clean:dist\n```\n\n\nTesting\n-------\n\n### Test a Pull Request\n\nIf you would like to contribute by testing a Pull Request (PR), here's how to do so. Keep in mind, you **do not need to have a DSpace backend / REST API installed locally to test a PR**. By default, the dspace-angular project points at our demo REST API\n\n1. Pull down the branch that the Pull Request was built from.  Easy instructions for doing so can be found on the Pull Request itself.\n\t* Next to the \"Merge\" button, you'll see a link that says \"command line instructions\".\n\t* Click it, and follow \"Step 1\" of those instructions to checkout the pull down the PR branch.\n2. `npm run clean`  (This resets your local dependencies to ensure you are up-to-date with this PR)\n3. `npm install` (Updates your local dependencies to those in the PR)\n4. `npm start` (Rebuilds the project, and deploys to localhost:4000, by default)\n5. At this point, the code from the PR will be deployed to http://localhost:4000.  Test it out, and ensure that it does what is described in the PR (or fixes the bug described in the ticket linked to the PR).\n\nOnce you have tested the Pull Request, please add a comment and/or approval to the PR to let us know whether you found it to be successful (or not). Thanks!\n\n\n### Unit Tests\n\nUnit tests use the [Jasmine test framework](https://jasmine.github.io/), and are run via [Karma](https://karma-runner.github.io/).\n\nYou can find the Karma configuration file at the same level of this README file:`./karma.conf.js` If you are going to use a remote test environment you need to edit the `./karma.conf.js`. Follow the instructions you will find inside it. To executing tests whenever any file changes you can modify the 'autoWatch' option to 'true' and 'singleRun' option to 'false'. A coverage report is also available at: http://localhost:9876/ after you run: `npm run coverage`.\n\nThe default browser is Google Chrome.\n\nPlace your tests in the same location of the application source code files that they test, e.g. ending with `*.component.spec.ts`\n\nand run: `npm test`\n\nIf you run into odd test errors, see the Angular guide to debugging tests: https://angular.io/guide/test-debugging\n\n### E2E Tests\n\nE2E tests (aka integration tests) use [Cypress.io](https://www.cypress.io/). Configuration for cypress can be found in the `cypress.json` file in the root directory.\n\nThe test files can be found in the `./cypress/integration/` folder.\n\nBefore you can run e2e tests, two things are REQUIRED:\n1. You MUST be running the DSpace backend (i.e. REST API) locally. The e2e tests will *NOT* succeed if run against our demo/sandbox REST API (https://demo.dspace.org/server/ or https://sandbox.dspace.org/server/), as those sites may have content added/removed at any time.\n    * After starting up your backend on localhost, make sure either your `config.prod.yml` or `config.dev.yml` has its `rest` settings defined to use that localhost backend.\n\t* If you'd prefer, you may instead use environment variables as described at [Configuring](#configuring). For example:\n       ```\n       DSPACE_REST_SSL = false\n       DSPACE_REST_HOST = localhost\n       DSPACE_REST_PORT = 8080\n       ```\n2. Your backend MUST include our [Entities Test Data set](https://github.com/DSpace-Labs/AIP-Files/releases/tag/demo-entities-data). Some tests run against a specific Community/Collection/Item UUID. These UUIDs are all valid for our Entities Test Data set.\n\t * (Recommended) The Entities Test Data set may be installed easily via Docker, see https://github.com/DSpace/DSpace/tree/main/dspace/src/main/docker-compose#ingest-option-2-ingest-entities-test-data\n\t * Alternatively, the Entities Test Data set may be installed via a simple SQL import (e. g. `psql -U dspace \u003c dspace7-entities-data.sql`). See instructions in link above.\n\nAfter performing the above setup, you can run the e2e tests using\n```\nng e2e\n````\nNOTE: By default these tests will run against the REST API backend configured via environment variables or in `config.prod.yml`. If you'd rather it use `config.dev.yml`, just set the NODE_ENV environment variable like this:\n```\nNODE_ENV=development ng e2e\n```\n\nThe `ng e2e` command will start Cypress and allow you to select the browser you wish to use, as well as whether you wish to run all tests or an individual test file.  Once you click run on test(s), this opens the [Cypress Test Runner](https://docs.cypress.io/guides/core-concepts/test-runner) to run your test(s) and show you the results.\n\n#### Writing E2E Tests\n\nAll E2E tests must be created under the `./cypress/integration/` folder, and must end in `.spec.ts`. Subfolders are allowed.\n\n* The easiest way to start creating new tests is by running `ng e2e`. This builds the app and brings up Cypress.\n* From here, if you are editing an existing test file, you can either open it in your IDE or run it first to see what it already does.\n* To create a new test file, click `+ New Spec File`.  Choose a meaningful name ending in `spec.ts` (Please make sure it ends in `.ts` so that it's a Typescript file, and not plain Javascript)\n* Start small. Add a basic `describe` and `it` which just [cy.visit](https://docs.cypress.io/api/commands/visit) the page you want to test. For example:\n   ```\n   describe('Community/Collection Browse Page', () =\u003e {\n    it('should exist as a page', () =\u003e {\n        cy.visit('/community-list');\n    });\n   });\n   ```\n* Run your test file from the Cypress window. This starts the [Cypress Test Runner](https://docs.cypress.io/guides/core-concepts/test-runner) in a new browser window.\n* In the [Cypress Test Runner](https://docs.cypress.io/guides/core-concepts/test-runner), you'll Cypress automatically visit the page.  This first test will succeed, as all you are doing is making sure the _page exists_.\n* From here, you can use the [Selector Playground](https://docs.cypress.io/guides/core-concepts/test-runner#Selector-Playground) in the Cypress Test Runner window to determine how to tell Cypress to interact with a specific HTML element on that page.\n    * Most commands start by telling Cypress to [get()](https://docs.cypress.io/api/commands/get) a specific element, using a CSS or jQuery style selector\n      * It's generally best not to rely on attributes like `class` and `id` in tests, as those are likely to change later on. Instead, you can add a `data-test` attribute to makes it clear that it's required for a test.\n    * Cypress can then do actions like [click()](https://docs.cypress.io/api/commands/click) an element, or [type()](https://docs.cypress.io/api/commands/type) text in an input field, etc.\n      * When running with server-side rendering enabled, the client first receives HTML without the JS; only once the page is rendered client-side do some elements (e.g. a button that toggles a Bootstrap dropdown) become fully interactive. This can trip up Cypress in some cases as it may try to `click` or `type` in an element that's not fully loaded yet, causing tests to fail.\n      * To work around this issue, define the attributes you use for Cypress selectors as `[attr.data-test]=\"'button' | ngBrowserOnly\"`. This will only show the attribute in CSR HTML, forcing Cypress to wait until CSR is complete before interacting with the element.\n    * Cypress can also validate that something occurs, using [should()](https://docs.cypress.io/api/commands/should) assertions.\n* Any time you save your test file, the Cypress Test Runner will reload \u0026 rerun it. This allows you can see your results quickly as you write the tests \u0026 correct any broken tests rapidly.\n* Cypress also has a great guide on [writing your first test](https://on.cypress.io/writing-first-test) with much more info. Keep in mind, while the examples in the Cypress docs often involve Javascript files (.js), the same examples will work in our Typescript (.ts) e2e tests.\n\n_Hint: Creating e2e tests is easiest in an IDE (like Visual Studio), as it can help prompt/autocomplete your Cypress commands._\n\nMore Information: [docs.cypress.io](https://docs.cypress.io/) has great guides \u0026 documentation helping you learn more about writing/debugging e2e tests in Cypress.\n\n### Learning how to build tests\n\nSee our [DSpace Code Testing Guide](https://wiki.lyrasis.org/display/DSPACE/Code+Testing+Guide) for more hints/tips.\n\nDocumentation\n--------------\n\nOfficial DSpace documentation is available in the DSpace wiki at https://wiki.lyrasis.org/display/DSDOC7x/\n\nSome UI specific configuration documentation is also found in the [`./docs`](docs) folder of this codebase.\n\n### Building code documentation\n\nTo build the code documentation we use [TYPEDOC](http://typedoc.org). TYPEDOC is a documentation generator for TypeScript projects. It extracts information from properly formatted comments that can be written within the code files. Follow the instructions [here](http://typedoc.org/guides/doccomments/) to know how to make those comments.\n\nRun:`npm run docs` to produce the documentation that will be available in the 'doc' folder.\n\nOther commands\n--------------\n\nThere are many more commands in the `scripts` section of `package.json`. Most of these are executed by one of the commands mentioned above.\n\nA command with a name that starts with `pre` or `post` will be executed automatically before or after the script with the matching name. e.g. if you type `npm run start` the `prestart` script will run first, then the `start` script will trigger.\n\nRecommended Editors/IDEs\n------------------------\n\nTo get the most out of TypeScript, you'll need a TypeScript-aware editor. We've had good experiences using these editors:\n\n-\tFree\n\t-\t[Visual Studio Code](https://code.visualstudio.com/)\n\t\t-\t[Debugger for Chrome](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome)\n-\tPaid\n\t-\t[Webstorm](https://www.jetbrains.com/webstorm/download/) or [IntelliJ IDEA Ultimate](https://www.jetbrains.com/idea/)\n\t-\t[Sublime Text](http://www.sublimetext.com/3)\n\t\t-\t[Typescript-Sublime-Plugin](https://github.com/Microsoft/Typescript-Sublime-plugin#installation)\n\nContributing\n-------------\n\nSee [Contributing documentation](CONTRIBUTING.md)\n\nFile Structure\n--------------\n\n```\ndspace-angular\n├── config                                              *\n│   └── config.yml                                      * Default app config\n├── cypress                                             * Folder for Cypress (https://cypress.io/) / e2e tests\n│   ├── downloads                                       *\n│   ├── fixtures                                        * Folder for e2e/integration test files\n│   ├── integration                                     * Folder for any fixtures needed by e2e tests\n│   ├── plugins                                         * Folder for Cypress plugins (if any)\n│   ├── support                                         * Folder for global e2e test actions/commands (run for all tests)\n│   └── tsconfig.json                                   * TypeScript configuration file for e2e tests\n├── docker                                              * See docker/README.md for details\n│   ├── cli.assetstore.yml                              *\n│   ├── cli.ingest.yml                                  *\n│   ├── cli.yml                                         *\n│   ├── db.entities.yml                                 *\n│   ├── docker-compose-ci.yml                           *\n│   ├── docker-compose-rest.yml                         *\n│   ├── docker-compose.yml                              *\n│   └── README.md                                       *\n├── docs                                                * Folder for documentation\n│   └── Configuration.md                                * Configuration documentation\n├── scripts                                             *\n│   ├── merge-i18n-files.ts                             *\n│   ├── serve.ts                                        *\n│   ├── sync-i18n-files.ts                              *\n│   └── test-rest.ts                                    *\n├── src                                                 * The source of the application\n│   ├── app                                             * The source code of the application, subdivided by module/page.\n│   ├── assets                                          * Folder for static resources\n│   │   ├── fonts                                       * Folder for fonts\n│   │   ├── i18n                                        * Folder for i18n translations\n│   │   └── images                                      * Folder for images\n│   ├── backend                                         * Folder containing a mock of the REST API, hosted by the express server\n│   ├── config                                          *\n│   ├── environments                                    *\n│   │   ├── environment.production.ts                   * Production configuration files\n│   │   ├── environment.test.ts                         * Test configuration files\n│   │   └── environment.ts                              * Default (development) configuration files\n│   ├── mirador-viewer                                  *\n│   ├── modules                                         *\n│   ├── ngx-translate-loaders                           *\n│   ├── styles                                          * Folder containing global styles\n│   ├── themes                                          * Folder containing available themes\n│   │   ├── custom                                      * Template folder for creating a custom theme\n│   │   └── dspace                                      * Default 'dspace' theme\n│   ├── index.csr.html                                  * The index file for client side rendering fallback\n│   ├── index.html                                      * The index file\n│   ├── main.browser.ts                                 * The bootstrap file for the client\n│   ├── main.server.ts                                  * The express (http://expressjs.com/) config and bootstrap file for the server\n│   ├── polyfills.ts                                    *\n│   ├── robots.txt                                      * The robots.txt file\n│   ├── test.ts                                         *\n│   └── typings.d.ts                                    *\n├── webpack                                             *\n│   ├── helpers.ts                                      * Webpack helpers\n│   ├── webpack.browser.ts                              * Webpack (https://webpack.github.io/) config for browser build\n│   ├── webpack.common.ts                               * Webpack (https://webpack.github.io/) common build config\n│   ├── webpack.mirador.config.ts                       * Webpack (https://webpack.github.io/) config for mirador config build\n│   ├── webpack.prod.ts                                 * Webpack (https://webpack.github.io/) config for prod build\n│   └── webpack.test.ts                                 * Webpack (https://webpack.github.io/) config for test build\n├── angular.json                                        * Angular CLI (https://angular.io/cli) configuration\n├── cypress.json                                        * Cypress Test (https://www.cypress.io/) configuration\n├── Dockerfile                                          *\n├── karma.conf.js                                       * Karma configuration file for Unit Test\n├── LICENSE                                             *\n├── LICENSES_THIRD_PARTY                                *\n├── nodemon.json                                        * Nodemon (https://nodemon.io/) configuration\n├── package.json                                        * This file describes the npm package for this project, its dependencies, scripts, etc.\n├── package-lock.json                                   * npm lockfile (https://docs.npmjs.com/cli/v10/configuring-npm/package-lock-json)\n├── postcss.config.js                                   * PostCSS (http://postcss.org/) configuration\n├── README.md                                           * This document\n├── SECURITY.md                                         *\n├── server.ts                                           * Angular Universal Node.js Express server\n├── tsconfig.app.json                                   * TypeScript config for browser (app)\n├── tsconfig.json                                       * TypeScript common config\n├── tsconfig.server.json                                * TypeScript config for server\n├── tsconfig.spec.json                                  * TypeScript config for tests\n├── tsconfig.ts-node.json                               * TypeScript config for using ts-node directly\n├── tslint.json                                         * TSLint (https://palantir.github.io/tslint/) configuration\n└── typedoc.json                                        * TYPEDOC configuration\n```\n\nManaging Dependencies (via npm)\n-------------\n\nThis project makes use of [`npm`](https://docs.npmjs.com/about-npm) to ensure that the exact same dependency versions are used every time you install it.\n\n* `npm` creates a [`package-lock.json`](https://docs.npmjs.com/cli/v10/configuring-npm/package-lock-json) to track those versions. That file is updated automatically by whenever dependencies are added/updated/removed via npm.\n* **Adding new dependencies**: To install/add a new dependency (third party library), use [`npm install`](https://docs.npmjs.com/cli/v10/commands/npm-install). For example: `npm install some-lib`.\n    * If you are adding a new build tool dependency (to `devDependencies`), use `npm install some-lib --save--dev`\n* **Upgrading existing dependencies**: To upgrade existing dependencies, you can use [`npm update`](https://docs.npmjs.com/cli/v10/commands/npm-update).  For example: `npm update some-lib` or `npm update some-lib@version`\n* **Removing dependencies**: If a dependency is no longer needed, or replaced, use [`npm uninstall`](https://docs.npmjs.com/cli/v10/commands/npm-uninstall) to remove it.\n\nAs you can see above, using `npm` commandline tools means that you should never need to modify the `package.json` manually. *We recommend always using `npm` to keep dependencies updated / in sync.*\n\n### Adding Typings for libraries\n\nIf the library does not include typings, you can install them using npm:\n\n```bash\nnpm install d3\nnpm install @types/d3 --save-dev\n```\n\nIf the library doesn't have typings available at `@types/`, you can still use it by manually adding typings for it:\n\n1.\tIn `src/typings.d.ts`, add the following code:\n\n\t```typescript\n\t  declare module 'typeless-package';\n\t```\n\n2.\tThen, in the component or file that uses the library, add the following code:\n\n\t```typescript\n\t  import * as typelessPackage from 'typeless-package';\n\t  typelessPackage.method();\n\t```\n\nDone. Note: you might need or find useful to define more typings for the library that you're trying to use.\n\nIf you're importing a module that uses CommonJS you need to import as\n\n```typescript\nimport * as _ from 'lodash';\n```\n\nFrequently asked questions\n--------------------------\n\n-\tWhy is my service, aka provider, is not injecting a parameter correctly?\n\t-\tPlease use `@Injectable()` for your service for typescript to correctly attach the metadata\n-\tWhere do I write my tests?\n\t-\tYou can write your tests next to your component files. e.g. for `src/app/home/home.component.ts` call it `src/app/home/home.component.spec.ts`\n-\tHow do I start the app when I get `EACCES` and `EADDRINUSE` errors?\n\t-\tThe `EADDRINUSE` error means the port `4000` is currently being used and `EACCES` is lack of permission to build files to `./dist/`\n-\tWhat are the naming conventions for Angular?\n\t-\tSee [the official angular style guide](https://angular.io/styleguide)\n-\tWhy is the size of my app larger in development?\n\t-\tThe production build uses a whole host of techniques (ahead-of-time compilation, rollup to remove unreachable code, minification, etc.) to reduce the size, that aren't used during development in the interest of build speed.\n-\tnode-pre-gyp ERR in npm install (Windows)\n\t-\tinstall Python x86 version between 2.5 and 3.0 on windows. See [this issue](https://github.com/AngularClass/angular2-webpack-starter/issues/626)\n-\tHow do I handle merge conflicts in package-lock.json?\n\t-\tfirst check out the package-lock.json file from the branch you're merging in to yours: e.g. `git checkout --theirs package-lock.json`\n\t-\tnow run `npm install` again. NPM will create a new lockfile that contains both sets of changes.\n\t-\tthen run `git add package-lock.json` to stage the lockfile for commit\n\t-\tand `git commit` to conclude the merge\n\nGetting Help\n------------\n\nDSpace provides public mailing lists where you can post questions or raise topics for discussion.\nWe welcome everyone to participate in these lists:\n\n* [dspace-community@googlegroups.com](https://groups.google.com/d/forum/dspace-community) : General discussion about DSpace platform, announcements, sharing of best practices\n* [dspace-tech@googlegroups.com](https://groups.google.com/d/forum/dspace-tech) : Technical support mailing list. See also our guide for [How to troubleshoot an error](https://wiki.lyrasis.org/display/DSPACE/Troubleshoot+an+error).\n* [dspace-devel@googlegroups.com](https://groups.google.com/d/forum/dspace-devel) : Developers / Development mailing list\n\nGreat Q\u0026A is also available under the [DSpace tag on Stackoverflow](http://stackoverflow.com/questions/tagged/dspace)\n\nAdditional support options are at https://wiki.lyrasis.org/display/DSPACE/Support\n\nDSpace also has an active service provider network. If you'd rather hire a service provider to\ninstall, upgrade, customize or host DSpace, then we recommend getting in touch with one of our\n[Registered Service Providers](http://www.dspace.org/service-providers).\n\n\nIssue Tracker\n-------------\n\nDSpace uses GitHub to track issues:\n* Backend (REST API) issues: https://github.com/DSpace/DSpace/issues\n* Frontend (User Interface) issues: https://github.com/DSpace/dspace-angular/issues\n\nLicense\n-------\nDSpace source code is freely available under a standard [BSD 3-Clause license](https://opensource.org/licenses/BSD-3-Clause).\nThe full license is available in the [LICENSE](LICENSE) file or online at http://www.dspace.org/license/\n\nDSpace uses third-party libraries which may be distributed under different licenses. Those licenses are listed\nin the [LICENSES_THIRD_PARTY](LICENSES_THIRD_PARTY) file.\n","funding_links":[],"categories":["TypeScript","angular"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDSpace%2Fdspace-angular","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDSpace%2Fdspace-angular","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDSpace%2Fdspace-angular/lists"}