{"id":25383153,"url":"https://github.com/AmadeusITGroup/otter","last_synced_at":"2025-10-30T12:30:54.161Z","repository":{"id":65510896,"uuid":"589619867","full_name":"AmadeusITGroup/otter","owner":"AmadeusITGroup","description":"The Otter project is a highly modular framework whose goal is to provide a common platform to accelerate and facilitate the development of runtime customizable Angular based Web Applications","archived":false,"fork":false,"pushed_at":"2025-10-25T13:24:55.000Z","size":263988,"stargazers_count":56,"open_issues_count":136,"forks_count":44,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-25T21:41:44.481Z","etag":null,"topics":["angular","chrome-extension","github-actions","github-apps","typescript","vscode-extension"],"latest_commit_sha":null,"homepage":"https://amadeusitgroup.github.io/otter/","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/AmadeusITGroup.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-01-16T14:47:51.000Z","updated_at":"2025-10-24T06:56:02.000Z","dependencies_parsed_at":"2023-09-22T10:45:28.467Z","dependency_job_id":"47bfd3bc-2727-4e95-9473-20794ee492e7","html_url":"https://github.com/AmadeusITGroup/otter","commit_stats":{"total_commits":1603,"total_committers":35,"mean_commits":45.8,"dds":0.7479725514660012,"last_synced_commit":"9780d874456e2de0f318b69cb8888293f6735fda"},"previous_names":[],"tags_count":2748,"template":false,"template_full_name":null,"purl":"pkg:github/AmadeusITGroup/otter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmadeusITGroup%2Fotter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmadeusITGroup%2Fotter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmadeusITGroup%2Fotter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmadeusITGroup%2Fotter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AmadeusITGroup","download_url":"https://codeload.github.com/AmadeusITGroup/otter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmadeusITGroup%2Fotter/sbom","scorecard":{"id":527058,"data":{"date":"2025-08-19T15:33:49Z","repo":{"name":"github.com/AmadeusITGroup/otter","commit":"5c26eaa67d82ecb9b3f7aeab320e0ea06db2ca30"},"scorecard":{"version":"v5.2.1","commit":"ab2f6e92482462fe66246d9e32f642855a691dc1"},"score":7.2,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#maintained"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: RenovateBot: .renovaterc.json5:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#dependency-update-tool"}},{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#code-review"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#security-policy"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'actions' permission set to 'write': .github/workflows/clean-cache.yml:19","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:34","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:35","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/e2e-tests.yml:63","Info: jobLevel 'contents' permission set to 'read': .github/workflows/main.yml:30","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/main.yml:77","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/main.yml:126","Info: jobLevel 'contents' permission set to 'read': .github/workflows/main.yml:140","Info: jobLevel 'actions' permission set to 'read': .github/workflows/publish-pr.yml:16","Info: jobLevel 'contents' permission set to 'read': .github/workflows/publish-pr.yml:41","Warn: jobLevel 'checks' permission set to 'write': .github/workflows/publish-pr.yml:57","Info: jobLevel 'contents' permission set to 'read': .github/workflows/publish.yml:61","Info: jobLevel 'contents' permission set to 'read': .github/workflows/scorecards.yml:29","Info: jobLevel 'actions' permission set to 'read': .github/workflows/scorecards.yml:30","Warn: jobLevel 'checks' permission set to 'write': .github/workflows/tests-reporter.yml:16","Warn: jobLevel 'checks' permission set to 'write': .github/workflows/tests-reporter.yml:29","Info: topLevel 'contents' permission set to 'read': .github/workflows/audit.yml:23","Info: topLevel 'contents' permission set to 'read': .github/workflows/check-all-releases.yml:17","Warn: no topLevel permission defined: .github/workflows/check-release.yml:1","Info: topLevel permissions set to 'read-all': .github/workflows/clean-cache.yml:11","Info: topLevel 'contents' permission set to 'read': .github/workflows/code-check.yml:33","Info: topLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:27","Info: topLevel 'contents' permission set to 'read': .github/workflows/deploy-showcase.yml:14","Info: topLevel 'contents' permission set to 'read': .github/workflows/documentation.yml:4","Warn: topLevel 'contents' permission set to 'write': .github/workflows/e2e-tests.yml:24","Info: topLevel 'contents' permission set to 'read': .github/workflows/first-pr.yml:9","Info: topLevel 'contents' permission set to 'read': .github/workflows/it-tests.yml:30","Info: topLevel 'contents' permission set to 'read': .github/workflows/main.yml:8","Info: topLevel 'contents' permission set to 'read': .github/workflows/md-external-links-check.yml:7","Info: topLevel 'contents' permission set to 'read': .github/workflows/pr-labels.yml:6","Info: topLevel 'contents' permission set to 'read': .github/workflows/publish-pr.yml:10","Info: topLevel 'contents' permission set to 'read': .github/workflows/publish.yml:54","Info: topLevel permissions set to 'read-all': .github/workflows/scorecards.yml:18","Info: topLevel permissions set to 'read-all': .github/workflows/tests-reporter.yml:9"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: apps/intellij-extension/gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":9,"reason":"dependency not pinned by hash detected -- score normalized to 9","details":["Info: Possibly incomplete results: error parsing job operating system: .github/workflows/code-check.yml:73","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/code-check.yml:75","Warn: npmCommand not pinned by hash: .github/workflows/publish.yml:109","Info:  55 out of  55 GitHub-owned GitHubAction dependencies pinned","Info:  11 out of  11 third-party GitHubAction dependencies pinned","Info:   0 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#cii-best-practices"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (30) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#sast"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during GetBranch(release/13.0.0-next): error during branchesHandler.query: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":10,"reason":"16 out of 16 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#ci-tests"}},{"name":"Contributors","score":10,"reason":"project has 7 contributing companies or organizations","details":["Info: found contributions from: AmadeusITGroup, amadeus, amadeus it group, amadeus software labs, amadeusitgroup, ariatemplates, ng-bootstrap"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#contributors"}},{"name":"Vulnerabilities","score":0,"reason":"11 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-67mh-4wv8-2f99","Warn: Project is vulnerable to: GHSA-q5j8-9m9g-x2jh","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GHSA-776f-qx25-q3cc"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T04:40:48.549Z","repository_id":65510896,"created_at":"2025-08-20T04:40:48.549Z","updated_at":"2025-08-20T04:40:48.549Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281520716,"owners_count":26515681,"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","status":"online","status_checked_at":"2025-10-28T02:00:06.022Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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","chrome-extension","github-actions","github-apps","typescript","vscode-extension"],"created_at":"2025-02-15T08:00:58.989Z","updated_at":"2025-10-30T12:30:54.147Z","avatar_url":"https://github.com/AmadeusITGroup.png","language":"TypeScript","readme":"\u003ch1 align=\"center\"\u003eOtter Framework\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./assets/logo/otter.png\" alt=\"Super cute Otter!\" width=\"40%\"/\u003e\n\u003c/p\u003e\n\n## Description\n\n[![Stable Version](https://img.shields.io/npm/v/@o3r/core?style=for-the-badge)](https://www.npmjs.com/package/@o3r/core)\n[![Chrome Extension](https://img.shields.io/chrome-web-store/v/aejabgendbpckkdnjaphhlifbhepmbne?style=for-the-badge\u0026label=Chrome%20Extension\u0026color=%23F2C146)](https://chromewebstore.google.com/detail/otter-devtools/aejabgendbpckkdnjaphhlifbhepmbne)\n[![VSCode Extension](https://img.shields.io/visual-studio-marketplace/v/AmadeusITGroup.otter-devtools?style=for-the-badge\u0026label=VSCode%20Extension\u0026color=%2352A6E7)](https://marketplace.visualstudio.com/items?itemName=AmadeusITGroup.otter-devtools)\n[![Downloads](https://img.shields.io/npm/dm/@o3r/core?style=for-the-badge)](https://www.npmjs.com/package/@o3r/core)\n\n[![Build](https://img.shields.io/github/actions/workflow/status/AmadeusITGroup/otter/main.yml?branch=main\u0026style=for-the-badge)](https://github.com/AmadeusITGroup/otter/actions/workflows/main.yml)\n[![Coverage](https://img.shields.io/codecov/c/github/AmadeusITGroup/otter?style=for-the-badge)](https://app.codecov.io/gh/AmadeusITGroup/otter)\n[![Bugs](https://img.shields.io/github/issues-search/AmadeusITGroup/otter?query=is:open%20is:issue%20label:bug\u0026style=for-the-badge\u0026label=Open%20Bugs\u0026color=red\n)](https://github.com/AmadeusITGroup/otter/issues?q=is:issue+is:open+label:bug)\n\n\nThe **Otter** project is a highly modular framework whose goal is to provide a common platform to accelerate and facilitate the development on Angular web applications.\nIt is split into several units to cover different aspects of these applications (localization, testing, customization, etc.).\nAlso, to customize an application, metadata can be extracted from the application source code and injected into a CMS to manage dynamic configuration.\n\n\u003e [!TIP]\n\u003e The full list of modules and their documentation is available in the [/docs folder](./docs/README.md).\n\u003e An overview of the technical module interactions and the architecture of the dependencies is available in the [architecture section](./docs/core/ARCHITECTURE.md).\n\u003e\n\u003e A demonstration of a list of features provided by Otter is accessible on the [showcase application](https://amadeusitgroup.github.io/otter/#/home).\n\n## Built With\n\n* [Angular](https://angular.io/)\n* [Typescript](https://www.typescriptlang.org/)\n* [RxJs](https://github.com/ReactiveX/rxjs)\n* [Redux](http://redux.js.org/)\n* [Sass](http://sass-lang.com/)\n* [Nx](https://nx.dev/)\n\n## Get Started\n\nTo set up a new Otter project with a monorepo structure, use the following simple command:\n\n```shell\n# Creating a new Otter monorepo\nnpm create @o3r my-project\n```\n\n\u003e [!TIP]\n\u003e Please refer to [Otter Get Started](./docs/core/START_NEW_APPLICATION.md) and [Angular Get Started](https://angular.io/guide/setup-local#install-the-angular-cli) for complete documentation.\n\n## Contributing\n\nPlease read the [Contributing](./CONTRIBUTING.md) file for details on our code of conduct and the process to submit pull requests.\n\n## Versioning\n\nPlease refer to [Security file](./SECURITY.md).\n\n## License\n\nPlease refer to the [License file](./LICENSE).\n\n## Acknowledgments\n\nThe Otter Team, @AmadeusITGroup/otter_admins, is responsible for the review of the code of this repository.\nAny bug of feature request can be addressed via [issue](https://github.com/AmadeusITGroup/otter/issues/new) report.\n\n## Developer\n\n### Experimental\n\nIn this monorepo, certain APIs across all packages are marked with the `@experimental` tag in their TypeScript documentation (TSDoc). This tag highlights that these exports — whether classes, functions, types, or constants — are experimental and may change without warning.\n\n#### What does @experimental mean?\n\n- The marked APIs are not stable and can undergo breaking changes in future releases.\n- Experimental features may be added, modified, or removed at any time.\n- These APIs are intended for early adopters and should be used with caution.\n\n#### What should you do?\n\n- When using any `@experimental` APIs from any package in this monorepo, pin the package versions explicitly to avoid unexpected breaking changes.\n- Regularly check release notes and changelogs for updates on experimental features.\n- Treat these APIs as preview or evolving interfaces that may mature or be deprecated in upcoming versions.\n\n### Building and Testing library\n\nThese documents describe how to set up your development environment to build and test the framework.\nIt also explains the basic mechanics of using `git`, `node`, and `npm`.\n\n- [Description](#description)\n- [Built With](#built-with)\n- [Get Started](#get-started)\n- [Contributing](#contributing)\n- [Versioning](#versioning)\n- [License](#license)\n- [Acknowledgments](#acknowledgments)\n- [Developer](#developer)\n  - [Building and Testing library](#building-and-testing-library)\n    - [Prerequisite Software](#prerequisite-software)\n    - [Getting the sources](#getting-the-sources)\n    - [Installing NPM modules](#installing-npm-modules)\n    - [Build command](#build-command)\n    - [Running tests locally](#running-tests-locally)\n    - [Manage task cache](#manage-task-cache)\n    - [Debugging with Visual Studio Code](#debugging-with-visual-studio-code)\n    - [Link local packages](#link-local-packages)\n    - [SSL Certificate issue (behind proxy)](#ssl-certificate-issue-behind-proxy)\n\nRefer to the [contribution guidelines](./CONTRIBUTING.md)\nif you'd like to contribute to the framework.\n\n#### Prerequisite Software\n\nBefore you can build and test Otter modules, you must install and configure the\nfollowing products on your development machine:\n\n* [Git](http://git-scm.com) and/or the **GitHub app** (for [Mac](http://mac.github.com) or\n  [Windows](http://windows.github.com))\n  * [GitHub's Guide to Installing\n    Git](https://help.github.com/articles/set-up-git) is a good source of information.\n\n* [Node.js](http://nodejs.org), (version `\u003e=18.0.0`)\n  * This is used to run tests and generate distributable files. We strongly encourage to use an up-to-date LTS version of Node.js to ensure the support of all the Otter packages.\n    Each package comes with a minimum Node.js version range defined in the `engine` property of its package.json file.\n\n* [Yarn](https://yarnpkg.com/lang/en/docs/install/), a Node's Package Manager\n  * You can install yarn using NPM manager (coming with Node.js).\n    The version of Yarn currently used is embedded in the repository and it can be installed using the provided Node.js [corepack](https://yarnpkg.com/getting-started/install).\n    In case you need to link this library with your project, you can check the section \"Link local packages\".\n\n* [Chrome](https://www.google.com/chrome/browser/desktop/index.html)\n  * We use Chrome to run our tests.\n\n#### Getting the sources\n\nClone the Otter repository using the button `Code` or using the following git command:\n\n```shell\ngit clone https://github.com/AmadeusITGroup/otter.git\n```\n\n#### Installing NPM modules\n\nNext, install the JavaScript modules needed to build:\n\n```shell\n# Install library project dependencies (package.json)\nyarn install\n```\n\n#### Build command\n\nTo build the modules, run:\n\n```shell\nyarn run build\n```\n\nEach module can be built independently thanks to [Nx](https://nx.dev/packages/nx/documents/run) commands:\n\n```shell\n# ex: Build Core package only\nyarn nx build core\n```\n\n\u003e [!NOTE]\n\u003e Results are put in the `dist` of each module (`packages/@\u003cscope\u003e/\u003cmodule\u003e/dist`).\n\n#### Running tests locally\n\nCheck the formatting:\n\n```shell\nyarn run lint\n```\n\nCheck Unit Tests:\n\n```shell\nyarn run test\n```\n\nCheck Integration Tests:\n\n```shell\nyarn run test-int\n```\n\n[Verdaccio](./.verdaccio/README.md) is used to run the integration tests as close as possible to a real npm publication.\n\nEach module can be tested independently thanks to [Nx](https://nx.dev/packages/nx/documents/run) commands:\n\n```shell\n# ex: Test Core package only\nyarn nx test core\n\n# ex: Lint Core package only\nyarn nx lint core\n```\n\n#### Manage task cache\n\nWhen running the Build, Lint, or Test commands, **Nx** can use its [cache mechanism](https://nx.dev/concepts/how-caching-works).\nIn some cases, it may be useful to clear the cache to investigate an issue. This can be done with the following command:\n\n```shell\nyarn nx reset\n```\n\n#### Debugging with Visual Studio Code\n\nThe repository contains the mandatory configuration and the recommended VSCode plugins to ensure optimal comfort and productivity while developing on the Otter Framework.\n\nThe default configuration of the repository provides a way to run Unit Tests one by one and to define, within VSCode, break points using the `vscode-jest-tests` debugger task.\n\n#### Link local packages\n\nFor Yarn v1, add the `resolutions` property in the main package.json. It should be filled with the relative path to the `dist` of the local packages you want to link. The protocol `link:` can be used.\n\nNOTE: It will not import the transitive dependencies of the linked packages.\n\nExample:\n\n```json\n{\n  \"resolutions\": {\n    \"@o3r/localization\": \"./relative/path/to/otter/packages/@o3r/localization/dist\",\n    \"@o3r/core\": \"link:./relative/path/to/otter/packages/@o3r/core/dist\",\n  }\n}\n```\n\nFor Yarn v2+, the protocol `portal:` can also be used.\n\nNOTE: The portal protocol will also import all the transitive dependencies of the linked packages.\nPlease keep in mind that mismatched versions of these dependencies may cause some issues.\n\nExample:\n\n```json\n{\n  \"resolutions\": {\n    \"@o3r/localization\": \"./relative/path/to/otter/library/@o3r/localization/dist\",\n    \"@o3r/core\": \"link:./relative/path/to/otter/library/@o3r/core/dist\",\n    \"@o3r/rules-engine\": \"portal:./relative/path/to/otter/library/@o3r/rules-engine/dist\",\n  }\n}\n```\n\n#### SSL Certificate issue (behind proxy)\n\nDue to proxy redirection you may face an SSL certificate issue on Yarn when installing the Otter project locally:\n\n```\nRequest Error: self-signed certificate in certificate chain\n```\n\nTo solve this, you can provide your own certificate in two different ways:\n\n* Specify your certificate path in the Environment Variable [NODE_EXTRA_CA_CERTS](https://nodejs.org/docs/latest-v4.x/api/cli.html#cli_node_extra_ca_certs_file).\n* Specify your certificate path in the Yarn configuration [httpsCertFilePath](https://yarnpkg.com/configuration/yarnrc#httpsCertFilePath).\n","funding_links":[],"categories":["Framework Interoperability"],"sub_categories":["External Integration"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAmadeusITGroup%2Fotter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAmadeusITGroup%2Fotter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAmadeusITGroup%2Fotter/lists"}