diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 51a75ac34..d18bcba43 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -16,3 +16,7 @@ /book/zh/ @WillemJiang /translation/pt/ @jrcosta @zilio /book/pt/ @jrcosta @zilio +/pattern-categorization/pt-br/ @jrcosta @zilio +/translation/gl/ @psanxiao +/book/gl/ @psanxiao +/pattern-categorization/gl/ @psanxiao diff --git a/.github/workflows/book.yml b/.github/workflows/book.yml index 9c6dac81d..b56f538b3 100644 --- a/.github/workflows/book.yml +++ b/.github/workflows/book.yml @@ -1,10 +1,11 @@ name: Gitbook Generation on: + workflow_dispatch: push: branches: - main - pull_request: + pull_request_target: branches: - main @@ -14,12 +15,10 @@ jobs: strategy: matrix: - language: [en, ja, zh, pt-br] + language: [en, ja, zh, pt-br, gl] steps: - uses: actions/checkout@v3 - with: - ref: ${{ github.head_ref }} - uses: ruby/setup-ruby@v1 with: @@ -37,3 +36,4 @@ jobs: uses: stefanzweifel/git-auto-commit-action@v4 with: commit_message: Writing updated toc.md for the ${{ matrix.language }} book + branch: ${{ github.head_ref }} diff --git a/.github/workflows/generate-mindmap.yml b/.github/workflows/generate-mindmap.yml index 9da560145..cafe00238 100644 --- a/.github/workflows/generate-mindmap.yml +++ b/.github/workflows/generate-mindmap.yml @@ -1,6 +1,7 @@ name: Generate Mindmap on: + workflow_dispatch: push: branches: - "main" @@ -9,6 +10,8 @@ on: - ".github/workflows/generate-mindmap.yml" - "pattern-categorization/innersource-program-mind-map.md" - "pattern-categorization/package.json" + - "pattern-categorization/gl/*" + - "pattern-categorization/pt-br/*" defaults: run: @@ -17,6 +20,11 @@ defaults: jobs: generate-mindmap: runs-on: ubuntu-latest + + strategy: + matrix: + folder: [".", "./gl", "./pt-br"] + steps: - uses: actions/checkout@v3 - name: Use Node.js @@ -28,18 +36,18 @@ jobs: - name: Install Node.js dependencies run: npm install - name: Run Markmap - run: npx markmap --no-toolbar innersource-program-mind-map.md -o innersource-program-mind-map.html + run: npx markmap --no-toolbar ${{ matrix.folder }}/innersource-program-mind-map.md -o ${{ matrix.folder }}/innersource-program-mind-map.html - name: Screenshot Markmap Website id: screenshot-generator uses: swinton/screenshot-website@v1.x with: - source: pattern-categorization/innersource-program-mind-map.html + source: pattern-categorization/${{ matrix.folder }}/innersource-program-mind-map.html #strange syntax here. seems to not respect the working-directory default either destination: innersource-program-mind-map.png full-page: false - name: Copy Screenshot - run: cp ${{ steps.screenshot-generator.outputs.path }} . + run: cp ${{ steps.screenshot-generator.outputs.path }} ${{ matrix.folder }} - name: Reduce Screenshot Size (PNG) - run: npx optipng innersource-program-mind-map.png + run: npx optipng ${{ matrix.folder }}/innersource-program-mind-map.png - name: Commit Changes uses: stefanzweifel/git-auto-commit-action@v4 with: diff --git a/.github/workflows/i18n-consistency-checker.yaml b/.github/workflows/i18n-consistency-checker.yaml index 4b7a5f6b2..e0084b4a2 100644 --- a/.github/workflows/i18n-consistency-checker.yaml +++ b/.github/workflows/i18n-consistency-checker.yaml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - language: [ja, zh] + language: [ja, zh, pt-br, gl] steps: - uses: actions/checkout@v3 with: @@ -24,7 +24,7 @@ jobs: id: check-consistency run: | # Declare the flags - declare -A flags=( ["ja"]=":jp: Japanese" ["zh"]=":cn: Chinese") + declare -A flags=( ["ja"]=":jp: Japanese" ["zh"]=":cn: Chinese" ["pt-br"]=":brazil: Brazilian Portuguese" ["gl"]="Galician") issue_title="${flags['${{matrix.language}}']}: Content Consistency Issue" diff --git a/.github/workflows/lint-patterns.yml b/.github/workflows/lint-patterns.yml index 408619ea7..14d4f2b33 100644 --- a/.github/workflows/lint-patterns.yml +++ b/.github/workflows/lint-patterns.yml @@ -1,6 +1,6 @@ # from: https://github.com/marketplace/actions/markdown-linting-action # To test this locally, switch to the root of the repo and run: -# markdownlint -r config/lint/pattern-template.js -c config/lint/pattern-template.yml patterns/2-structured/*.md patterns/2-structured/project-setup/*.md patterns/3-validated/*.md +# markdownlint -r config/lint/pattern-template.js -c config/lint/pattern-template.yml patterns/2-structured/*.md patterns/3-validated/*.md name: Pattern Syntax Validation on: @@ -12,7 +12,6 @@ on: - ".github/workflows/lint-patterns.yml" - ".github/lint-pattern-syntax/*" - "patterns/2-structured/*.md" - - "patterns/2-structured/project-setup/*.md" - "patterns/3-validated/*.md" jobs: @@ -27,4 +26,4 @@ jobs: with: rules: './.github/lint-pattern-syntax/pattern-template.js' config: './.github/lint-pattern-syntax/pattern-template.yml' - args: 'patterns/2-structured/*.md patterns/2-structured/project-setup/*.md patterns/3-validated/*.md' + args: 'patterns/2-structured/*.md patterns/3-validated/*.md' diff --git a/.github/workflows/pattern-metrics.yaml b/.github/workflows/pattern-metrics.yaml index d1750f3f7..4419ab4fc 100644 --- a/.github/workflows/pattern-metrics.yaml +++ b/.github/workflows/pattern-metrics.yaml @@ -52,7 +52,7 @@ jobs: # Store CODEOWNERS_FILTERto GitHub Action environment (not permanent) echo "CODEOWNERS_FILTER=$CODEOWNERS_FILTER" >> "$GITHUB_ENV" - - name: Run issue-metrics tool + - name: Run issue-metrics tool for issues uses: github/issue-metrics@v2 env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index a2c6693d8..78d2b902a 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ # InnerSource Patterns - +The InnerSource Patterns book This repository contains the InnerSource Patterns collected by the [InnerSource Commons][isc-website]. These patterns are InnerSource best practices codified in a specific format to make it easy to understand, evaluate, and reuse them. @@ -47,9 +47,9 @@ Our mission * [Review Committee](patterns/2-structured/review-committee.md) - *The InnerSource working model is a radical departure from more traditional approaches, for developers and managers alike. By establishing a review committee as an interface between the InnerSource initiative and all senior managers of business units participating in it, the latter are more likely to familiarise themselves with the initiative and support it, as it affords them a certain level of oversight and control without fostering micromanagement.* * [Service vs. Library](patterns/2-structured/service-vs-library.md) - *Teams in a DevOps environment may be reluctant to work across team boundaries on common code bases due to ambiguity over who will be responsible for responding to service downtime. The solution is to realize that often it's possible to either deploy the same service in independent environments with separate escalation chains in the event of service downtime or factor a lot of shared code out into one library and collaborate on that.* * [Trusted Committer](patterns/2-structured/trusted-committer.md) - *Many InnerSource projects will find themselves in a situation where they consistently receive feedback, features, and bug-fixes from contributors. In these situations project maintainers seek ways to recognize and reward the work of the contributor above and beyond single contributions.* -* [Standard Base Documentation](patterns/2-structured/project-setup/base-documentation.md) - *New contributors to an InnerSource project have a hard time figuring out who maintains the project, what to work on, and how to contribute. Providing documentation in standard files like README.md/CONTRIBUTING.md enables a self service process for new contributors, so that they can find the answers to the most common questions on their own.* -* [Issue Tracker Use Cases](patterns/2-structured/project-setup/issue-tracker.md) - *The InnerSource host team fails to make not only plans and progress but also context for changes transparent. This is solved by increasing the use cases for the project issue tracker to also serve brainstorming, implementation discussion, and feature design.* -* [Communication Tooling](patterns/2-structured/project-setup/communication-tooling.md) - *The users of an InnerSource project have trouble getting help and getting in touch with the host team. By consistently using asynchronous communication tooling, the project makes discussions visible, archived and searchable, leading to an improved level of support for users.* +* [Standard Base Documentation](patterns/2-structured/base-documentation.md) - *New contributors to an InnerSource project have a hard time figuring out who maintains the project, what to work on, and how to contribute. Providing documentation in standard files like README.md/CONTRIBUTING.md enables a self service process for new contributors, so that they can find the answers to the most common questions on their own.* +* [Issue Tracker Use Cases](patterns/2-structured/issue-tracker.md) - *The InnerSource host team fails to make not only plans and progress but also context for changes transparent. This is solved by increasing the use cases for the project issue tracker to also serve brainstorming, implementation discussion, and feature design.* +* [Communication Tooling](patterns/2-structured/communication-tooling.md) - *The users of an InnerSource project have trouble getting help and getting in touch with the host team. By consistently using asynchronous communication tooling, the project makes discussions visible, archived and searchable, leading to an improved level of support for users.* * [Cross-Team Project Valuation](patterns/2-structured/crossteam-project-valuation.md) - *It's hard to sell the value of cross-team InnerSource projects that don't provide a direct impact on company revenue. Here's a data-driven way to represent your project that both articulates its value and amplifies it.* * [Transparent Cross-Team Decision Making using RFCs](patterns/2-structured/transparent-cross-team-decision-making-using-rfcs.md) - *InnerSource projects that want to achieve high participation rates and make the best possible decisions for everybody involved need to find ways to create participatory systems throughout the full software lifecycle. Publishing internal Requests for Comments (RFCs) documents allows for discussions early on in the design process, and increases the chances to build solutions with a high degree of commitment from all involved parties.* * [Start as an Experiment](patterns/2-structured/start-as-experiment.md) - *Start your InnerSource initiative as a time limited experiment to make it easier for managers unfamiliar with InnerSource to endorse and support the initiative.* @@ -108,6 +108,7 @@ This is why we keep these patterns at the bottom of the list. * [Bad Weather For Liftoff](patterns/1-initial/bad-weather-for-liftoff.md) * [Incentive mechanisms to foster voluntary contribution](patterns/1-initial/incentive-mechanisms-for-voluntary-contribution.md) * [Duplicated Projects](patterns/1-initial/duplicated-projects.md) +* [Sustainable InnerSource Program](patterns/1-initial/sustainable-innersource-program.md) ## What are InnerSource Patterns? diff --git a/TRUSTED-COMMITTERS.md b/TRUSTED-COMMITTERS.md index 1721bc85d..3b1a32f23 100644 --- a/TRUSTED-COMMITTERS.md +++ b/TRUSTED-COMMITTERS.md @@ -25,6 +25,7 @@ While they don't take all responsibilities of a Trusted Committer (yet), they do * Japanese - [@yuhattor](https://github.com/yuhattor) * Chinese - [@WillemJiang](https://github.com/WillemJiang) * Brazilian Portuguese - [@jrcosta](https://github.com/jrcosta), [@zilio](https://github.com/zilio) +* Galician - [@psanxiao](https://github.com/psanxiao) ## Hall of Fame (aka Alumni) diff --git a/assets/img/gl/CONTRIBUTING-for-contributors.png b/assets/img/gl/CONTRIBUTING-for-contributors.png new file mode 100644 index 000000000..d0a8c1772 Binary files /dev/null and b/assets/img/gl/CONTRIBUTING-for-contributors.png differ diff --git a/assets/img/gl/README-for-users.png b/assets/img/gl/README-for-users.png new file mode 100644 index 000000000..17fd8d155 Binary files /dev/null and b/assets/img/gl/README-for-users.png differ diff --git a/assets/img/gl/bios-principles.png b/assets/img/gl/bios-principles.png new file mode 100644 index 000000000..dcd72a807 Binary files /dev/null and b/assets/img/gl/bios-principles.png differ diff --git a/assets/img/gl/communication-tooling.png b/assets/img/gl/communication-tooling.png new file mode 100644 index 000000000..8301837c9 Binary files /dev/null and b/assets/img/gl/communication-tooling.png differ diff --git a/assets/img/gl/core-team.png b/assets/img/gl/core-team.png new file mode 100644 index 000000000..a272cbb7d Binary files /dev/null and b/assets/img/gl/core-team.png differ diff --git a/assets/img/gl/extensions-for-sustainable-growth.png b/assets/img/gl/extensions-for-sustainable-growth.png new file mode 100644 index 000000000..293910e08 Binary files /dev/null and b/assets/img/gl/extensions-for-sustainable-growth.png differ diff --git a/assets/img/gl/repository_activity_score.png b/assets/img/gl/repository_activity_score.png new file mode 100644 index 000000000..280eebe21 Binary files /dev/null and b/assets/img/gl/repository_activity_score.png differ diff --git a/assets/img/gl/review-committee-sketch.png b/assets/img/gl/review-committee-sketch.png new file mode 100644 index 000000000..e17e11b2f Binary files /dev/null and b/assets/img/gl/review-committee-sketch.png differ diff --git a/assets/img/standard-base-documentation/README.md b/assets/img/standard-base-documentation/README.md index 22160c45a..7eacaf14d 100644 --- a/assets/img/standard-base-documentation/README.md +++ b/assets/img/standard-base-documentation/README.md @@ -1,6 +1,6 @@ # Credits -The current illustration is a digital remake of this [original visual](/patterns/2-structured/project-setup/assets/base_docs_drawing.png). +The current illustration is a digital remake of this [original visual](./base_docs_drawing.png). If you want to edit this illustration, please request access to this [source document](https://docs.google.com/presentation/d/11JOByEO9QXlRLXX5BIv9rjUzPzCKErZzknD1OLcprQQ/edit?usp=sharing). The humans in the illustration are [bro](https://storyset.com/illustration/coding/bro) and [pana](https://storyset.com/illustration/high-five/pana) from Storyset. diff --git a/patterns/2-structured/project-setup/assets/base_docs_drawing.png b/assets/img/standard-base-documentation/base_docs_drawing.png similarity index 100% rename from patterns/2-structured/project-setup/assets/base_docs_drawing.png rename to assets/img/standard-base-documentation/base_docs_drawing.png diff --git a/patterns/2-structured/project-setup/assets/base_docs_drawing.svg b/assets/img/standard-base-documentation/base_docs_drawing.svg similarity index 100% rename from patterns/2-structured/project-setup/assets/base_docs_drawing.svg rename to assets/img/standard-base-documentation/base_docs_drawing.svg diff --git a/book/en/toc.md b/book/en/toc.md index 82e952290..4755accc5 100644 --- a/book/en/toc.md +++ b/book/en/toc.md @@ -21,7 +21,7 @@ Instead edit toc_template.md * [30 Day Warranty](../../patterns/2-structured/30-day-warranty.md) - When accepting contributions from outside of your own team, there is a natural aversion to taking responsibility for code not written by the team itself. Through the 30 Day Warranty the contributing team consents to provide bug fixes to the receiving team, which will increase the level of trust between both teams and makes it more likely that contributions get accepted. * [Common Requirements](../../patterns/2-structured/common-requirements.md) - Common code in a shared repository isn't meeting the needs of all the project-teams that want to use it; this is solved through requirements alignment and refactoring. -* [Communication Tooling](../../patterns/2-structured/project-setup/communication-tooling.md) - The users of an InnerSource project have trouble getting help and getting in touch with the host team. By consistently using asynchronous communication tooling, the project makes discussions visible, archived and searchable, leading to an improved level of support for users. +* [Communication Tooling](../../patterns/2-structured/communication-tooling.md) - The users of an InnerSource project have trouble getting help and getting in touch with the host team. By consistently using asynchronous communication tooling, the project makes discussions visible, archived and searchable, leading to an improved level of support for users. * [Contracted Contributor](../../patterns/2-structured/contracted-contributor.md) - Associates wanting to contribute to InnerSource are discouraged from doing so by their line management. Relief is provided by formal contracts and agreements. * [Core Team](../../patterns/2-structured/core-team.md) - Even when an InnerSource project is widely needed, contributions and usage may be hindered because the project is difficult to work with. Establish a core team that is dedicated to take care of the project's fundamental items. Their work enables contributors to add and use the features that provide value to their scenarios. * [Cross-Team Project Valuation](../../patterns/2-structured/crossteam-project-valuation.md) - It's hard to sell the value of cross-team InnerSource projects that don't provide a direct impact on company revenue. Here's a data-driven way to represent your project that both articulates its value and amplifies it. @@ -32,13 +32,13 @@ Instead edit toc_template.md * [Group Support](../../patterns/2-structured/group-support.md) - What happens if a team or individual no longer supports an InnerSource project? Keep the project alive by forming a group of interested individuals. * [InnerSource License](../../patterns/2-structured/innersource-license.md) - Two legal entities that belong to the same organization want to share software source code with each other but they are concerned about the implications in terms of legal liabilities or cross-company accounting. An InnerSource License provides a reusable legal framework for the sharing of source code within the organization. This opens up new collaboration options, and makes the rights and obligations of the involved legal entities explicit. * [InnerSource Portal](../../patterns/2-structured/innersource-portal.md) - Potential contributors cannot easily discover InnerSource projects that they are interested in. By creating an intranet website that indexes all available InnerSource project information you enable contributors to learn about projects that might interest them and InnerSource project owners to attract an outside audience. -* [Issue Tracker Use Cases](../../patterns/2-structured/project-setup/issue-tracker.md) - The InnerSource host team fails to make not only plans and progress but also context for changes transparent. This is solved by increasing the use cases for the project issue tracker to also serve brainstorming, implementation discussion, and feature design. +* [Issue Tracker Use Cases](../../patterns/2-structured/issue-tracker.md) - The InnerSource host team fails to make not only plans and progress but also context for changes transparent. This is solved by increasing the use cases for the project issue tracker to also serve brainstorming, implementation discussion, and feature design. * [Maturity Model](../../patterns/2-structured/maturity-model.md) - Teams have started adopting InnerSource. The practice is spreading to multiple departments. However, the understanding of what constitutes an InnerSource project varies. The solution is to provide a maturity model to allow for teams to go through a self check and discover patterns and practices that they are not yet aware of. * [Praise Participants](../../patterns/2-structured/praise-participants.md) - After an inner source contribution, it's important to thank the contributor for their time and effort. This pattern gives guidance that not only effectively acknowledges the contribution but also engenders further engagement from the contributor and others. * [Repository Activity Score](../../patterns/2-structured/repository-activity-score.md) - Potential contributors want to find active InnerSource projects in need of their help. By calculating a repository activity score for each project, a ranked list of projects can be created (e.g. on the InnerSource Portal), so that potential contributors can more easily determine which project they want to contribute to. * [Review Committee](../../patterns/2-structured/review-committee.md) - The InnerSource working model is a radical departure from more traditional approaches, for developers and managers alike. By establishing a review committee as an interface between the InnerSource initiative and all senior managers of business units participating in it, the latter are more likely to familiarize themselves with the initiative and support it, as it affords them a certain level of oversight and control without fostering micromanagement. * [Service vs. Library](../../patterns/2-structured/service-vs-library.md) - Teams in a DevOps environment may be reluctant to work across team boundaries on common code bases due to ambiguity over who will be responsible for responding to service downtime. The solution is to realize that often it's possible to either deploy the same service in independent environments with separate escalation chains in the event of service downtime or factor a lot of shared code out into one library and collaborate on that. -* [Standard Base Documentation](../../patterns/2-structured/project-setup/base-documentation.md) - New contributors to an InnerSource project have a hard time figuring out who maintains the project, what to work on, and how to contribute. Providing documentation in standard files like README.md/CONTRIBUTING.md/COMMUNICATION.md enables a self service process for new contributors, so that they can find the answers to the most common questions on their own. +* [Standard Base Documentation](../../patterns/2-structured/base-documentation.md) - New contributors to an InnerSource project have a hard time figuring out who maintains the project, what to work on, and how to contribute. Providing documentation in standard files like README.md/CONTRIBUTING.md/COMMUNICATION.md enables a self service process for new contributors, so that they can find the answers to the most common questions on their own. * [Standard Release Process](../../patterns/2-structured/release-process.md) - Teams may hesitate to adopt an InnerSource project if they are unsure of its maturity. To address this, consistent release notes and published artifacts are crucial. These practices showcase a strong dedication to the project, instilling confidence and assuring users of ongoing commitment to sustainable and well-managed software. * [Start as an Experiment](../../patterns/2-structured/start-as-experiment.md) - Start your InnerSource initiative as a time limited experiment to make it easier for managers unfamiliar with InnerSource to endorse and support the initiative. * [Transparent Cross-Team Decision Making using RFCs](../../patterns/2-structured/transparent-cross-team-decision-making-using-rfcs.md) - InnerSource projects that want to achieve high participation rates and make the best possible decisions for everybody involved need to find ways to create participatory systems throughout the full software lifecycle. Publishing internal Requests for Comments (RFCs) documents allows for discussions early on in the design process, and increases the chances to build solutions with a high degree of commitment from all involved parties. @@ -48,9 +48,9 @@ Instead edit toc_template.md * [Pattern Template](../../meta/pattern-template.md) * Extras - * [README Template](../../patterns/2-structured/project-setup/templates/README-template.md) - * [CONTRIBUTING Template](../../patterns/2-structured/project-setup/templates/CONTRIBUTING-template.md) - * [COMMUNICATION Template](../../patterns/2-structured/project-setup/templates/COMMUNICATION-template.md) + * [README Template](../../patterns/2-structured/templates/README-template.md) + * [CONTRIBUTING Template](../../patterns/2-structured/templates/CONTRIBUTING-template.md) + * [COMMUNICATION Template](../../patterns/2-structured/templates/COMMUNICATION-template.md) * [RFC Template](../../patterns/2-structured/templates/rfc.md) ## Resources diff --git a/book/en/toc_template.md b/book/en/toc_template.md index cb7b3b956..85aea6452 100644 --- a/book/en/toc_template.md +++ b/book/en/toc_template.md @@ -25,9 +25,9 @@ Instead edit toc_template.md * [Pattern Template](../../meta/pattern-template.md) * Extras - * [README Template](../../patterns/2-structured/project-setup/templates/README-template.md) - * [CONTRIBUTING Template](../../patterns/2-structured/project-setup/templates/CONTRIBUTING-template.md) - * [COMMUNICATION Template](../../patterns/2-structured/project-setup/templates/COMMUNICATION-template.md) + * [README Template](../../patterns/2-structured/templates/README-template.md) + * [CONTRIBUTING Template](../../patterns/2-structured/templates/CONTRIBUTING-template.md) + * [COMMUNICATION Template](../../patterns/2-structured/templates/COMMUNICATION-template.md) * [RFC Template](../../patterns/2-structured/templates/rfc.md) ## Resources diff --git a/book/gl/.gitbook.yaml b/book/gl/.gitbook.yaml new file mode 100644 index 000000000..fb44a6a2c --- /dev/null +++ b/book/gl/.gitbook.yaml @@ -0,0 +1,5 @@ +root : ./ + +structure: + readme: introduction.md + summary: toc.md diff --git a/book/gl/contribute.md b/book/gl/contribute.md new file mode 100644 index 000000000..05c176a1f --- /dev/null +++ b/book/gl/contribute.md @@ -0,0 +1,29 @@ +# Contribúa a este libro + +Quere mellorar este libro? Estupendo! + +O libro Modelos InnerSource é un [proxecto de software libre](https://github.com/InnerSourceCommons/InnerSourcePatterns) en si mesmo e dá a benvida a calquera forma de contribución, por pequena que sexa. + +Non importa se desexa axudarnos a corrixir erratas, a mellorar o deseño ou a contribuír con modelos completamente novos baseados nas experiencias InnerSource que realizou no seu lugar de traballo. Calquera aportación é benvida. + +Se nunca antes realizou unha contribución a un proxecto de software libre, saiba que a comunidade de Modelos InnerSource é un grupo de persoas amigables e, polo tanto, é un lugar seguro para tentalo. + +## Antes de comezar + +As fontes do Modelo InnerSource e este mesmo libro atópanse nun repositorio de GitHub. Polo tanto, necesitará unha conta de usuario/a de GitHub para realizar modificacións e suxestións a este libro. Se aínda non ten unha, diríxase a [github.com](https://github.com/) e cree unha conta gratuíta. + +## Diferentes xeitos de contribución + +Velaquí algunhas formas nas que pode contribuír: + +1. Corrección ortotipográficas, de formato ou doutros erros que atope neste libro. +2. Mellora do contido dun modelo existente (por exemplo, pode engadir unha breve descrición de como está a empregar vostede o modelo no apartado *Exemplos coñecidos*). +3. Aportación dun novo modelo no que describa como superou os desafíos relacionados con InnerSource na súa organización. + +Para (1) e (2), basta con premer na ligazón **Editar en GitHub** que observa na parte superior de cada páxina deste libro para acceder directamente ao arquivo respectivo do noso repositorio de GitHub, onde pode suxerir os cambios que considere. + +Para (3) necesita clonar o repositorio [InnerSourcePatterns](https://github.com/InnerSourceCommons/InnerSourcePatterns) e engadir un novo arquivo co modelo suxerido. Para facer tales importantes contribucións a este libro, revise a sección de [CONTRIBUTING.md](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/CONTRIBUTING.md) e tamén o noso [Manual de contribución](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/meta/contributor-handbook.md). + +## Licenzas das Contribucións + +O contido deste repositorio ten licenza [CC-BY-SA-4.0](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/LICENSE.txt). Se contribúe ao mesmo, estanos a outorgar (e, por ende, a tódolos/as demais) o dereito a empregar a súa contribución de acordo coa devandita licenza. diff --git a/book/gl/explore-patterns.md b/book/gl/explore-patterns.md new file mode 100644 index 000000000..210f4c65e --- /dev/null +++ b/book/gl/explore-patterns.md @@ -0,0 +1,19 @@ +# Explore os modelos + +A comunidade InnerSource Commons aporta cada vez máis modelos a este libro; o que é incrible! + +Pero, como facilitar que os/as lectores/as descubran os modelos que poden axudalos/as na súa situación particular? + +Para isto proporcionamos este mapa conceptual, que **clasifica os modelos en función das diferentes fases dun programa InnerSource** e dos desafíos que poden xurdir nas respectivas fases. + +![Mapa conceptual dos modelos InnerSource](../../pattern-categorization/gl/innersource-program-mind-map.png) + +## Mellore este mapa conceptual + +Se vostede detecta algo neste mapa conceptual que lle resulta incorrecto, pode [abrir unha incidencia](https://github.com/InnerSourceCommons/InnerSourcePatterns/issues) na que describa o problema xunto co arranxo que se debería levar a cabo. + +Ademais, se ten outras ideas para dar a coñecer estes modelos ou desexa mellorar este mapa conceptual, revise a documentación do noso enfoque de [Categorización de modelos](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/pattern-categorization/README.md) e verifique como [contribuír a este libro](./contribute.md). + +## Referencias + +A idea de categorizar modelos como este baséase, parcialmente, na descrición en [*Thoughts on an InnerSource Pattern Language*](https://drive.google.com/file/d/13AY8glCOdpLOVuz7cVD6QOB8d2xbHCS1/view) [Reflexións arredor do modelo InnerSource] de Tim Yao, Bob Hanmer e Padma Sudarsan (2018). Para obter máis detalles, pode consultar a diapositiva 15 da presentación. diff --git a/book/gl/fondos-publicos.png b/book/gl/fondos-publicos.png new file mode 100644 index 000000000..8e65d80ad Binary files /dev/null and b/book/gl/fondos-publicos.png differ diff --git a/book/gl/innersource-patterns-book-cover.png b/book/gl/innersource-patterns-book-cover.png new file mode 100644 index 000000000..eb3596857 Binary files /dev/null and b/book/gl/innersource-patterns-book-cover.png differ diff --git a/book/gl/introduction.md b/book/gl/introduction.md new file mode 100644 index 000000000..570924641 --- /dev/null +++ b/book/gl/introduction.md @@ -0,0 +1,77 @@ +# Introdución + +![Modelos InnerSource](innersource-patterns-book-cover.png) + +{% hint style="info" %} +Vostede está a ler unha versión preliminar do libro *Modelos InnerSource: Guía das mellores prácticas por casos: Fáciles de entender, avaliar e aplicar*, polo que é posible que algunhas ligazóns non funcionen, ou atope algún erro. Pode axudarnos a corrixilos e así poder ofrecer o mellor libro posible, se escolle facer [contribucións](contribute.md) a este libro. +{% endhint %} + +Benvido ao libro **Modelos de InnerSource**. + +Este libro contén as mellores prácticas de InnerSource debulladas nun formato pensado especificamente para que sexan sinxelas de comprender, de avaliar e de aplicar no seu contexto. Referímonos a este tipo de formato como **modelo**. + +[InnerSource Commons](http://innersourcecommons.org) recompilou estes modelos ao longo de varios anos e publicou os máis maduros neste libro, no que os membros da comunidade revisitan cada modelo a partir de, polo menos, un exemplo de uso coñecido. + +Nesta introdución explicamos [que é InnerSource](#que-é-innersource), [que é un modelo](#que-son-os-modelos-innersource) e [como empregar eses modelos](#como-pode-empregar-os-modelos-innersource) na súa organización. + +Se xa está a empregar InnerSource na súa empresa e quere contribuír aportando experiencias a este libro, encantaríanos [recibir as súas contribucións](./contribute.md) + +## Que é InnerSource? + +Definimos InnerSource como: + +> O uso de principios e prácticas de software libre para o desenvolvemento de software dentro dos límites dunha organización. + +InnerSource toma as leccións aprendidas do desenvolvemento de software libre e aplícaas á forma en que as empresas desenvolven software de maneira interna. Cando os/as desenvolvedores/as xa estaban afeitos a traballar en software libre de xeito universal, xurdiu un forte desexo de volver a introducir esas prácticas dentro do *firewall* e de aplicalas ao software que as empresas poden amosarse reticentes a lanzar. + +Para as empresas que crean na súa meirande parte software de código pechado, InnerSource pode ser unha boa ferramenta coa que eliminar os silos, fomentar e escalar a colaboración interna, acelerar a incorporación de novos/as enxeñeiros/as e identificar as oportunidades para contribuír ao mundo do software libre. + +## Que son os modelos InnerSource? + +Os modelos son unha forma de describir unha solución probada e repetible para un problema nun contexto concreto. Os modelos empregan un formato sinxelo co que, na propia aplicación da solución, axudan a comprender as limitacións do problema, os aspectos que mellorar e o contexto resultante; é dicir, a nova situación xerada trala aplicación desta solución. + +Os modelos poden proporcionar aos/ás participantes de InnerSource Commons un medio polo que compartir información de xeito conciso, para mellorar a práctica InnerSource. Algunhas das seccións principais destes modelos son: Título, Problema, Contexto, Aspectos que mellorar e Solucións. + +* [Vídeos de Youtube sobre que son os modelos](http://bit.ly/innersource_patterns_videos): Visualice esta serie de vídeos de YouTube de entre 2 e 5 minutos, na que se explican os modelos InnerSource. +* [Webinario sobre os modelos](https://youtu.be/i-0IVhfRVFU): O 16 de marzo de 2017 levouse a cabo este webinario no que se debateu en vivo un modelo donut (minuto 24:30). É un exemplo do proceso de revisión que seguimos. Tamén pode consultar o [webinario sobre modelos InnerSource de O’Reilly do 1 de xuño de 2017](http://www.oreilly.com/pub/e/3884). +* [Prototipo de modelo](../../translation/gl/templates/pattern-template.md): Observe a estrutura dun modelo InnerSource para ter unha idea do que acontece nun modelo novo. +* [Introdución aos modelos InnerSource (presentación en inglés do cumio de outono de 2016)](https://drive.google.com/open?id=0B7_9iQb93uBQbnlkdHNuUGhpTXc), de Tim Yao e Padma Sudarsan (PDF). Expón os antecedentes e algúns exemplos de modelos, e permitiralle comprender en detalle os motivos polos que facer uso dos nosos modelos e como facelo. Consulte tamén a [Introdución aos modelos InnerSource (do cume de outono de 2017)](https://drive.google.com/open?id=0B7_9iQb93uBQWmYwMFpyaGh4OFU) de Tim Yao e Bob Hanmer (PDF). + +## Como pode empregar os modelos InnerSource? + +Os modelos deben empregarse coidadosamente. Non poden aplicarse de xeito indiscriminado. Na maioría dos casos, vostede necesitará adaptar unha solución á súa situación particular; mais a información proporcionada no modelo, que define o contexto (os límites inamovibles) e os aspectos que mellorar (os límites que poden cambiar e equilibrarse entre si), debería servir de axuda para poñela en práctica. Teña en conta que tamén deberá determinar se existen limitacións adicionais (o contexto e os aspectos que queira mellorar a empresa) que se apliquen á súa compañía/organización en particular e deban engadirse ao modelo (como se fose unha especie de filtro). Estas limitacións adicionais poden chegar a requirir pasos adicionais para chegar a unha solución. + +O impreso do modelo é útil para describir solucións probadas, pero tamén se pode empregar para xerar ideas sobre novas solucións onde aínda non se estableceron modelos. Isto débese a que a anatomía dun modelo proporciona un marco de traballo para pensar sobre un problema dun xeito estruturado. Vostede tamén pode crear un *modelo de donut* (completando os campos de problema, contexto, aspectos que mellorar e contexto resultante; pero deixando a solución en branco) como unha forma de pedir axuda á comunidade InnerSource Commons (para encontrar unha solución comprobada ou para aportar ideas sobre que cousas probar). + +## Como contribuír? + +Consulte: [Como contribuír a este libro](./contribute.md). + +## Créditos + +Este libro é o resultado de moitos anos de traballo de incontables [contribuidores/as de software libre](https://github.com/InnerSourceCommons/InnerSourcePatterns/graphs/contributors) de todo o mundo. A súa vontade de compartir abertamente os desafíos que afrontaron as súas empresas e o xeito no que InnerSource lles axudou a abordar eses desafíos, fan deste libro un recurso valioso para calquera que inicie o seu percorrido InnerSource. + +Queremos facer unha mención especial ao InnerSource Patterns Working Group, que nutriu a calidade dos modelos e axudou a outros/as a facer contribucións. E tamén compilou a selección de modelos dispoñibles neste libro. + +A imaxe do título do libro foi creada por [Sebastian Spier](https://spier.hu) e adaptada dunha imaxe de [Tony Hisgett - Alhambra 6](https://www.flickr.com/photos/hisgett/29345405788/), dispoñible baixo a licenza [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/). + +**Moitas grazas a tódolos/as contribuidores/as! E feliz día InnerSource. :)** + +## Licenza + +![Licenza Creative Commons](https://i.creativecommons.org/l/by-sa/4.0/88x31.png) + +Modelos InnerSource de [InnerSourceCommons.org](http://innersourcecommons.org) ten unha licenza [Creative Commons Attribution-ShareAlike 4.0 International](http://creativecommons.org/licenses/by-sa/4.0/). + +## Sobre a tradución + +Esta tradución á lingua galega foi elaborada pola [AMTEGA](https://amtega.xunta.gal) (Xunta de Galicia). Cofinanciada a través de Fondos Europeos. Esta iniciativa foi coordinada pola [Oficina de Software Libre](https://amtega.xunta.gal/gl/software-libre). + +Distribúese baixo licenza Creative Commons Atribución - Compartir Igual 4.0 Internacional (CC BY-SA 4.0). Pode consultar as condicións desta licenza [aquí](https://creativecommons.org/licenses/by-sa/4.0/deed.gl). + +**Autoras da tradución:** + +* Leticia Gómez Cadahía +* María Lucía González Castro + +![Fondos Públicos](fondos-publicos.png) diff --git a/book/gl/toc.md b/book/gl/toc.md new file mode 100644 index 000000000..588d8c369 --- /dev/null +++ b/book/gl/toc.md @@ -0,0 +1,56 @@ +# Índice + + + + + +* [Introdución](./introduction.md) +* [Índice](./toc.md) +* [Explore os modelos](./explore-patterns.md) +* [Contribúa a este libro](./contribute.md) + +![Mapa conceptual dos modelos InnerSource](../../pattern-categorization/gl/innersource-program-mind-map.png) + +## Modelos + +* [Agradecemento aos/ás participantes](../../translation/gl/patterns/praise-participants.md) - Tras unha contribución a un proxecto InnerSource, é importante agradecer ao/á colaborador/a polo seu tempo e esforzo. Este modelo brinda unha orientación que non só recoñece dun xeito eficaz a súa contribución, senón que tamén xera un maior compromiso deste/a e doutros/as contribuidores/as. +* [Casos de uso cun sistema de seguimento de incidencias](../../translation/gl/patterns/issue-tracker.md) - O host team de InnerSource non logra ter transparencia nos plans nin no progreso, e tampouco no contexto para os cambios. Isto resólvese aumentando os casos de uso co sistema de seguimento de incidencias do proxecto para que tamén favoreza o intercambio de ideas, o debate sobre estas e o deseño de funcionalidades. +* [Comece como un experimento](../../translation/gl/patterns/start-as-experiment.md) - Comece a súa iniciativa InnerSource como un experimento de tempo limitado para facilitar que o persoal directivo, que non estea familiarizado con InnerSource, secunde e apoie a iniciativa. +* [Comité de revisión](../../translation/gl/patterns/review-committee.md) - O modelo de traballo InnerSource é un afastamento radical dos enfoques máis tradicionais, tanto para os/as desenvolvedores/as como para os/as seus/súas superiores/as. Ao establecer un comité de revisión como interface entre a iniciativa InnerSource e tódolos altos cargos das áreas empresariais que participan nela, é máis probable que estes últimos se familiaricen coa iniciativa e a apoien; xa que lles brinda un certo nivel de supervisión e control, sen fomentar a microxestión. +* [Contracted contributor](../../translation/gl/patterns/contracted-contributor.md) - Os/As socios/as que desexen contribuír a InnerSource son disuadidos/as de facelo polos/as seus/súas superiores/as. Os contratos e acordos formais son un alivio. +* [Core team](../../translation/gl/patterns/core-team.md) - Incluso cando se necesita moito un proxecto InnerSource, as colaboracións e o seu uso poden verse obstaculizados porque é difícil traballar co proxecto. Estableza un core team que se dedique a coidar dos elementos fundamentais do proxecto. O traballo do core team permite aos/ás contribuidores/as engadir e empregar as funcionalidades que aportan valor aos seus escenarios. +* [Cualificación da actividade do repositorio](../../translation/gl/patterns/repository-activity-score.md) - Os/As potenciais contribuidores/as queren atopar proxectos InnerSource activos que precisen da súa participación. Ao calcular a cualificación da actividade do repositorio para cada proxecto, pódese crear unha listaxe clasificada de proxectos (por exemplo, no portal InnerSource) para que os/as posibles contribuidores/as poidan determinar dun xeito máis doado en que proxecto desexan colaborar. +* [Documentación base estándar](../../translation/gl/patterns/base-documentation.md) - Os/As novos/as contribuidores/as dun proxecto InnerSource teñen dificultades para determinar quen mantén o proxecto, en que traballar e como contribuír. Ao proporcionar documentación en arquivos estándar como README.md/CONTRIBUTING.md permítese un proceso de autoservizo para os/as novos/as contribuidores/as, de xeito que poidan atopar por si mesmos/as as respostas ás preguntas máis comúns. +* [Documente os seus principios reitores](../../translation/gl/patterns/document-your-guiding-principles.md) - A explicación habitual de InnerSource baseada en «aplicar as mellores prácticas de software libre dentro dunha organización» non funciona correctamente coas persoas que carecen de experiencia con software libre. Como solución, os principios InnerSource máis importantes documéntanse e publícanse de maneira aberta. +* [Extensións para o crecemento sostible](../../translation/gl/patterns/extensions-for-sustainable-growth.md) - Un proxecto InnerSource está a recibir demasiadas contribucións, o que dificulta o seu mantemento. Os/As responsables ofrecen un mecanismo de extensión fóra do proxecto principal, que permite escalar as capacidades do proxecto cun custo e gastos xerais de mantemento mínimos. +* [Ferramentas de comunicación](../../translation/gl/patterns/communication-tooling.md) - Os/As usuarios/as dun proxecto InnerSource teñen problemas para obter axuda e poñerse en contacto co host team. Mediante o uso sistemático de ferramentas de comunicación asíncrona, os debates serán visibles e permanecerán arquivados e accesibles; o que se traduce nunha mellora do nivel de asistencia aos/ás usuarios/as. +* [Garantía de 30 días](../../translation/gl/patterns/30-day-warranty.md) - Cando se aceptan contribucións externas, existe unha aversión natural do equipo a asumir a responsabilidade do código que non foi escrito por eles/as. A través da garantía de 30 días, o equipo contribuidor acepta proporcionar correccións de erros ao equipo receptor. Isto aumentará o nivel de confianza de ambos equipos e fará que sexa máis probable que se acepten as contribucións. +* [Gig marketplace](../../translation/gl/patterns/gig-marketplace.md) - Establécese un marketplace mediante a creacion dunha intranet que enumere as necesidades específicas do proxecto InnerSource como «Gigs», con requisitos explícitos de tempo e habilidades. Isto permitirá ao personal directivo comprender mellor o compromiso no tempo e os beneficios profesionais dos/as seus/súas traballadores/as, o que aumentará a probabilidade de obter a aprobación para realizar contribucións InnerSource. +* [Licenza InnerSource](../../translation/gl/patterns/innersource-license.md) - Dúas entidades xurídicas que pertencen á mesma organización queren compartir o código fonte do software entre elas, mais preocúpanlles as implicacións en termos de responsabilidades legais ou de contabilidade entre as empresas. +* [Líder da comunidade experto/a en InnerSource](../../translation/gl/patterns/dedicated-community-leader.md) - Seleccione persoas con habilidades técnicas e de comunicación para liderar as comunidades e garantir o éxito no inicio dunha iniciativa InnerSource +* [Modelo de madurez](../../translation/gl/patterns/maturity-model.md) - Os equipos comezaron a adoptar InnerSource e a práctica estase estendendo a varios departamentos. Con todo, a comprensión do que constitúe un proxecto InnerSource varía. A solución consiste en proporcionar un modelo de madurez que permita aos equipos realizar unha autoavaliación e descubrir modelos e prácticas que aínda non coñecían. +* [Portal InnerSource](../../translation/gl/patterns/innersource-portal.md) - Os/As contribuidores/as potenciais non poden descubrir dun xeito sinxelo os proxectos InnerSource nos que están interesados/as. Ao crear unha intranet que indexe toda a información dispoñible do proxecto InnerSource, permítese que os/as contribuidores/as coñezan os proxectos que lles poderían interesar; do mesmo xeito que lles serve aos/ás project owners de InnerSource para atraer a un público externo. +* [Requisitos comúns](../../translation/gl/patterns/common-requirements.md) - O código común dun repositorio compartido non satisfai as necesidades de tódolos equipos do proxecto que desexan empregalo; isto resólvese mediante a aliñación de requisitos e a refactorización. +* [Servizo vs. libraría](../../translation/gl/patterns/service-vs-library.md) - Os equipos DevOps poden ser reticentes a traballar máis alá dos límites do equipo, en bases de código comúns; posto que non está definido quen sería a persoa responsable de responder ante unha situación de inactividade do servizo. Con frecuencia, a solución pode ser implantar o mesmo servizo en contextos independentes con cadeas de escalada separadas, en caso de caída do servizo ou de factorización dunha gran cantidade de código compartido nunha libraría na que se poidan facer colaboracións. +* [Soporte grupal](../../translation/gl/patterns/group-support.md) - Que acontece se un equipo ou unha persoa abandona un proxecto InnerSource? Para manter vivo o proxecto fórmase un novo grupo de colaboradores/as interesados/as. +* [Toma de decisións transparente entre equipos mediante RFC](../../translation/gl/patterns/transparent-cross-team-decision-making-using-rfcs.md) - Os proxectos InnerSource que desexan lograr un alto índice de participación e tomar as mellores decisións posibles para tódalas persoas involucradas, necesitan atopar formas de crear sistemas participativos durante todo o ciclo de vida do software. A publicación de documentos internos con peticións de comentarios (RFC) permite manter debates desde o comezo do proceso de deseño. Tamén aumenta as posibilidades de idear solucións cun alto grao de compromiso por parte de tódalas partes implicadas. +* [Trusted commiter](../../translation/gl/patterns/trusted-committer.md) - Moitos proxectos InnerSource recibirán valoracións constantemente ou requirirán a posta en marcha de novas funcionalidades e a corrección de erros por parte dos/as contribuidores/as. Nestas situacións, as persoas encargadas do mantemento do proxecto buscan formas de recoñecer e recompensar o traballo do/a contribuidor/a máis alá das contribucións individuais. +* [Valoración de proxectos entre equipos](../../translation/gl/patterns/crossteam-project-valuation.md) - É difícil convencer acerca do valor dos proxectos InnerSource desenvolvidos entre equipos que non teñen un impacto directo nos ingresos da empresa. Velaquí unha forma de representar o seu proxecto baseada en datos, que articula o seu valor e amplifícao. + +## Apéndice + +- [Prototipo de modelo](../../translation/gl/templates/pattern-template.md) +- Extras + - [Prototipo README](../../translation/gl/templates/README-template.md) + - [Prototipo CONTRIBUTING](../../translation/gl/templates/CONTRIBUTING-template.md) + +## Recursos + +- [O libro en GitHub](https://github.com/InnerSourceCommons/InnerSourcePatterns) +- [InnerSource Commons](http://innersourcecommons.org) diff --git a/book/gl/toc_template.md b/book/gl/toc_template.md new file mode 100644 index 000000000..fa07ab7a2 --- /dev/null +++ b/book/gl/toc_template.md @@ -0,0 +1,34 @@ +# Índice + + + + + +* [Introdución](./introduction.md) +* [Índice](./toc.md) +* [Explore os modelos](./explore-patterns.md) +* [Contribúa a este libro](./contribute.md) + +![Mapa conceptual dos modelos InnerSource](../../pattern-categorization/gl/innersource-program-mind-map.png) + +## Modelos + +<> + +## Apéndice + +- [Prototipo de modelo](../../translation/gl/templates/pattern-template.md) +- Extras + - [Prototipo README](../../translation/gl/templates/README-template.md) + - [Prototipo CONTRIBUTING](../../translation/gl/templates/CONTRIBUTING-template.md) + +## Recursos + +- [O libro en GitHub](https://github.com/InnerSourceCommons/InnerSourcePatterns) +- [InnerSource Commons](http://innersourcecommons.org) diff --git a/book/pt-br/explore-patterns.md b/book/pt-br/explore-patterns.md index aa1cdb7b0..8caf04f88 100644 --- a/book/pt-br/explore-patterns.md +++ b/book/pt-br/explore-patterns.md @@ -6,7 +6,7 @@ Agora, como tornar mais fácil para os leitores descobrirem os padrões que pode Para esse propósito, fornecemos este mapa mental. Ele **classifica os padrões com base nas diferentes fases de um Programa InnerSource** e nos desafios que podem surgir nas respectivas fases. -![Mapa Mental dos Padrões InnerSource](../../pattern-categorization/innersource-program-mind-map.png) +![Mapa Mental dos Padrões InnerSource](../../pattern-categorization/pt-br/innersource-program-mind-map.png) ## Melhore este Mapa Mental diff --git a/book/pt-br/toc.md b/book/pt-br/toc.md index b068430e4..429a3e78c 100644 --- a/book/pt-br/toc.md +++ b/book/pt-br/toc.md @@ -15,7 +15,7 @@ Em vez disso, edite toc_template.md * [Explorar Padrões](./explore-patterns.md) * [Contribuir para Este Livro](./contribute.md) -![Mapa Mental dos Padrões InnerSource](../../pattern-categorization/innersource-program-mind-map.png) +![Mapa Mental dos Padrões InnerSource](../../pattern-categorization/pt-br/innersource-program-mind-map.png) ## Padrões @@ -27,6 +27,7 @@ Em vez disso, edite toc_template.md * [Documente seus Princípios Orientadores](../../translation/pt-br/patterns/document-your-guiding-principles.md) - A explicação comum do InnerSource, "aplicando as melhores práticas de código aberto dentro de uma organização", não funciona bem com pessoas que não possuem um background em código aberto. Como solução, os princípios mais importantes do InnerSource são documentados e publicados amplamente. * [Elogiar Participantes](../../translation/pt-br/patterns/praise-participants.md) - Após uma contribuição de InnerSource, é importante agradecer ao contribuidor pelo seu tempo e esforço. Este padrão fornece orientações que não apenas reconhecem efetivamente a contribuição, mas também promovem um maior envolvimento do contribuidor e de outros. * [Equipe Central](../../translation/pt-br/patterns/core-team.md) - Mesmo quando um projeto InnerSource é amplamente necessário, as contribuições e uso podem ser prejudicados porque o projeto é difícil de trabalhar. Estabelecer uma equipe central dedicada a cuidar dos itens fundamentais do projeto. O trabalho deles permite que os contributors adicionem e usem recursos que oferecem valor para seus cenários. +* [Extensões para Crescimento Sustentável](../../translation/pt-br/patterns/extensions-for-sustainable-growth.md) - Um projeto InnerSource está recebendo um grande número de contribuições, tornando a manutenção difícil. Ao oferecer um mecanismo de extensão fora do projeto principal, os mantenedores possibilitam a expansão das capacidades do projeto com custos mínimos e sobrecarga de manutenção. * [Ferramentas de Comunicação](../../translation/pt-br/patterns/communication-tooling.md) - Os usuários de um projeto InnerSource têm dificuldade em obter ajuda e entrar em contato com a equipe responsável pelo projeto. Ao usar consistentemente ferramentas de comunicação assíncronas, o projeto torna as discussões visíveis, arquivadas e pesquisáveis, o que leva a um nível melhorado de suporte para os usuários. * [Garantia de 30 dias](../../translation/pt-br/patterns/30-day-warranty.md) - Ao aceitar contribuições de fora da sua própria equipe, há uma aversão natural em assumir a responsabilidade pelo código que não foi escrito pela própria equipe. Através da Garantia de 30 dias, a equipe contribuinte concorda em fornecer correções de bugs para a equipe receptora, o que aumentará o nível de confiança entre as duas equipes e torna mais provável que as contribuições sejam aceitas. * [Gig Marketplace](../../translation/pt-br/patterns/gig-marketplace.md) - Estabeleça um mercado criando um site intranet que liste necessidades específicas de projetos InnerSource como "Gigs", com requisitos explícitos de tempo e habilidades. Isso permitirá que os gerentes entendam melhor o compromisso de tempo de seus funcionários e os benefícios profissionais, aumentando assim a probabilidade de obter a aprovação para fazer contribuições InnerSource. @@ -35,9 +36,11 @@ Em vez disso, edite toc_template.md * [Líder de Comunidade Dedicado](../../translation/pt-br/patterns/dedicated-community-leader.md) - Selecione pessoas com habilidades tanto em comunicação quanto em técnicas para liderar as comunidades e garantir o sucesso na iniciativa InnerSource * [Modelo de Maturidade](../../translation/pt-br/patterns/maturity-model.md) - As equipes começaram a adotar o InnerSource. A prática está se espalhando para vários departamentos. No entanto, a compreensão do que constitui um projeto InnerSource varia. A solução é fornecer um modelo de maturidade para permitir que as equipes realizem uma autoavaliação e descubram padrões e práticas das quais ainda não têm conhecimento. * [Portal InnerSource](../../translation/pt-br/patterns/innersource-portal.md) - Potenciais contribuidores não conseguem descobrir facilmente os projetos de InnerSource que lhes interessam. Ao criar um site de intranet que indexa todas as informações disponíveis sobre projetos de InnerSource, você permite que os contribuidores aprendam sobre projetos que possam interessá-los e que os proprietários de projetos de InnerSource atraiam um público externo. +* [Processo de Liberação Padrão](../../translation/pt-br/patterns/release-process.md) - As equipes podem hesitar em adotar um projeto InnerSource se não tiverem certeza de sua maturidade. Para abordar isso, notas de lançamento consistentes e artefatos publicados são cruciais. Essas práticas demonstram um compromisso sólido com o projeto, transmitindo confiança e garantindo aos usuários o comprometimento contínuo com software sustentável e bem gerenciado. * [Repositório Pontuação de Atividade](../../translation/pt-br/patterns/repository-activity-score.md) - Potenciais contribuidores desejam encontrar projetos InnerSource ativos que precisem de sua ajuda. Ao calcular uma pontuação de atividade do repositório para cada projeto, uma lista classificada de projetos pode ser criada (por exemplo, no Portal InnerSource), para que os potenciais contribuidores possam determinar mais facilmente em qual projeto desejam contribuir. * [Requisitos Comuns](../../translation/pt-br/patterns/common-requirements.md) - O código comum em um repositório compartilhado não está atendendo às necessidades de todas as equipes de projeto que desejam usá-lo; isso é resolvido por meio do alinhamento de requisitos e refatoração. * [Serviço vs. Biblioteca](../../translation/pt-br/patterns/service-vs-library.md) - Equipes em um ambiente DevOps podem relutar em trabalhar além dos limites de suas equipes em bases de código comuns, devido à ambiguidade sobre quem será responsável por responder a interrupções de serviço. A solução é perceber que muitas vezes é possível implantar o mesmo serviço em ambientes independentes com cadeias de escalonamento separadas no caso de interrupções de serviço, ou separar grande parte do código compartilhado em uma biblioteca única e colaborar nela. +* [Suporte em Grupo](../../translation/pt-br/patterns/group-support.md) - O que acontece se uma equipe ou indivíduo não suporta mais um projeto InnerSource? Mantenha o projeto vivo formando um grupo de indivíduos interessados. * [Tomada de Decisão Transparente entre Equipes usando RFCs](../../translation/pt-br/patterns/transparent-cross-team-decision-making-using-rfcs.md) - Projetos InnerSource que desejam alcançar altas taxas de participação e tomar as melhores decisões possíveis para todos os envolvidos precisam encontrar maneiras de criar sistemas participativos ao longo de todo o ciclo de vida do software. A publicação de documentos internos de "Requests for Comments" (RFCs) permite discussões desde o início do processo de design e aumenta as chances de construir soluções com um alto grau de comprometimento de todas as partes envolvidas. * [Trusted Committer](../../translation/pt-br/patterns/trusted-committer.md) - Muitos projetos InnerSource se encontram em uma situação em que consistentemente recebem feedback, funcionalidades e correções de bugs de contribuidores. Nessas situações, os mantenedores do projeto buscam maneiras de reconhecer e recompensar o trabalho do contribuidor acima e além de contribuições individuais. diff --git a/book/pt-br/toc_template.md b/book/pt-br/toc_template.md index b4164ecce..c73a0a57d 100644 --- a/book/pt-br/toc_template.md +++ b/book/pt-br/toc_template.md @@ -15,7 +15,7 @@ Em vez disso, edite toc_template.md * [Explorar Padrões](./explore-patterns.md) * [Contribuir para Este Livro](./contribute.md) -![Mapa Mental dos Padrões InnerSource](../../pattern-categorization/innersource-program-mind-map.png) +![Mapa Mental dos Padrões InnerSource](../../pattern-categorization/pt-br/innersource-program-mind-map.png) ## Padrões diff --git a/book/scripts/generate_toc.rb b/book/scripts/generate_toc.rb index 07a51f590..3a42b7088 100644 --- a/book/scripts/generate_toc.rb +++ b/book/scripts/generate_toc.rb @@ -77,7 +77,7 @@ def generate_patterns_overview(patterns) if (BOOK_LANGUAGE == "en") TOC_TEMPLATE_FILE = "../en/toc_template.md" TOC_FILE = "../en/toc.md" - PATTERNS = Dir["../../patterns/2-structured/*.md","../../patterns/2-structured/project-setup/*.md", "../../patterns/3-validated/*.md"] + PATTERNS = Dir["../../patterns/2-structured/*.md", "../../patterns/3-validated/*.md"] else TOC_TEMPLATE_FILE = "../#{BOOK_LANGUAGE}/toc_template.md" TOC_FILE = "../#{BOOK_LANGUAGE}/toc.md" diff --git a/meta/boardreports/2023-11.md b/meta/boardreports/2023-11.md new file mode 100644 index 000000000..7a4bc88d4 --- /dev/null +++ b/meta/boardreports/2023-11.md @@ -0,0 +1,62 @@ +# InnerSource Patterns WG - Report for Board Meeting 2023-11 + +## Meta + +* Reporting Period: 2023-08..2023-10 +* [merged PRs](https://github.com/InnerSourceCommons/InnerSourcePatterns/pulls?q=is%3Apr+closed%3A2023-08..2023-10+is%3Amerged) +* [opened issues](https://github.com/InnerSourceCommons/InnerSourcePatterns/issues?q=is%3Aissue+created%3A2023-08..2023-10+is%3Aopen) + +## Engagement + +The [patterns book][] is the way InnerSource practices are captured and shared. Recent web analytics: + +* total traffic on the patterns book (tracking_id: `G-QL1S8MW5D9`) + * 24,920 views total (previous report was 19,704 views) + * 2,230 users (11.17 views/users) +* Most popular patterns: + * InnerSource Portal + * 30 Day Warranty + * Core Team + * Maturity Model + * Common Requirements +* traffic for translations: + * Japanese - 1,733 views (previous was 1,596) + * Chinese - 524 views + * Brazilian Portuguese - 1,001 views + * Galician - (in next report) + +## Changes + +Changes are contributed via the [InnerSourcePatterns][] repository: + +* new pattern [Standard Release Process](https://github.com/InnerSourceCommons/InnerSourcePatterns/releases/tag/v1.6) - thank you **@dgrizzanti** +* translation to [Brazilian Portuguese](https://github.com/InnerSourceCommons/InnerSourcePatterns/releases/tag/v1.7) - Thanks to the very awesome **@jrcosta @zilio @DanielleAlmeida** that made this happen. +* additions of Known Instances (applications of our patterns in the wild) + * ADI to innersource-customer-interview-questions.md (initial pattern) + * GitHub to [Standard Release Process](https://patterns.innersourcecommons.org/p/release-process) +* experimenting with various tools to understand the contribution patterns of our community better. e.g. see [these stats](https://github.com/InnerSourceCommons/InnerSourcePatterns/issues/625) - shout outs to **@zkoppert** not only for building these tools but also for helping us to integrate them into our repo +* added a **welcome bot** to our repo, that greats new contributors and points them to helpful info about our contribution process - see [this example](https://github.com/InnerSourceCommons/InnerSourcePatterns/pull/573) +* by using gitbook's "monorepo approach", we are now able to deploying multiple translations in parallel via gitbook a lot easier +* added a new `COMMUNICATION-template.md` to streamline the communication to the **Standard Base Documentation** pattern. - thank you **@kschueths** + +## Things to come + +* Toying with the idea to add [Adopters pages](https://innersourcecommons.gitbook.io/innersource-patterns-staging/v/adopters-test/adopters/adopters) to our book. Goal: showcase the organizations and the patterns they use more prominently in our book. Looking for feedback! More [details here](https://github.com/InnerSourceCommons/InnerSourcePatterns/issues/623). +* Galician translation (released in 11/2023 therefore not part of this report yet) +* hoping to integrate further PRs that were contributed some time back but we did not have time to review them properly (or the communication stopped somewhere) + * pattern proposal [Feature Owner](https://github.com/InnerSourceCommons/InnerSourcePatterns/pull/573) by Manoj Gawande (@magawande) from Fidelty (part of FINOS?) - new contributor! + * proposal to add a [Code of Conduct template](https://github.com/InnerSourceCommons/InnerSourcePatterns/pull/556) to the **Standard Base Documentation** pattern - by Jose Roman Martin Gil (@rmarting) from Red Hat - new contributor? + +## Trusted Committers (Community) + +* Last [Trusted Committer][] added was [@yuhattor](https://github.com/yuhattor) (added 2022-07-21) +* Trusted Committer candidates in the pipeline: No +* However fuelled by the translation process we have a couple of people that are taking ownership of keeping the translations in sync with the original patterns. Some of these [translation leads](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/TRUSTED-COMMITTERS.md#translation-leads) might turn into Trusted Committers in the future. + +## Next Goals + +Same as previous Board report. + +[patterns book]: https://patterns.innersourcecommons.org/ +[InnerSourcePatterns]: https://github.com/InnerSourceCommons/InnerSourcePatterns/ +[Trusted Committer]: https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/TRUSTED-COMMITTERS.md diff --git a/meta/scripts/find_upgradeable_patterns.rb b/meta/scripts/find_upgradeable_patterns.rb index b80bde4fb..2ac5710a6 100644 --- a/meta/scripts/find_upgradeable_patterns.rb +++ b/meta/scripts/find_upgradeable_patterns.rb @@ -76,7 +76,7 @@ def collect_section_nodes(file, section_title) puts "\n" puts "## Structured => Validated" puts "## 2-Structured patterns primed for upgrade to 3-Validated (based on Known Instances only)" -l2_patterns = Dir["../../patterns/2-structured/*.md", "../../patterns/2-structured/project-setup/*.md"] +l2_patterns = Dir["../../patterns/2-structured/*.md"] l2_patterns.each do |file| known_instances_count = count_known_instances(file) diff --git a/pattern-categorization/README.md b/pattern-categorization/README.md index 1dbf14db9..6c80d1f5c 100644 --- a/pattern-categorization/README.md +++ b/pattern-categorization/README.md @@ -35,8 +35,15 @@ To test your changes locally, you can also generate the mind map yourself like t We are using `node 12.x` at the moment. ``` +# install the markmap CLI npm install -g markmap-cli -npx markmap --no-toolbar innersource-program-mind-map.md + +# then generate the mindmap (it will open in your browser automatically) +npx markmap --no-toolbar innersource-program-mind-map.md -o innersource-program-mind-map.html + +# to generate the mindmap for a different language, run the script on the files in the respetive subfolder. +# e.g. for Galician (`gl`) +npx markmap --no-toolbar gl/innersource-program-mind-map.md -o gl/innersource-program-mind-map.html ``` ## Future Ideas for Categorization diff --git a/pattern-categorization/gl/innersource-program-mind-map.html b/pattern-categorization/gl/innersource-program-mind-map.html new file mode 100644 index 000000000..a4d077149 --- /dev/null +++ b/pattern-categorization/gl/innersource-program-mind-map.html @@ -0,0 +1,28 @@ + + + + + + +Markmap + + + + + + + + diff --git a/pattern-categorization/gl/innersource-program-mind-map.md b/pattern-categorization/gl/innersource-program-mind-map.md new file mode 100644 index 000000000..5497676b4 --- /dev/null +++ b/pattern-categorization/gl/innersource-program-mind-map.md @@ -0,0 +1,131 @@ +# [Programa InnerSource](https://patterns.innersourcecommons.org/toc) + +## Comezo + +### Configuración do programa + +#### O persoal directivo dubida se apostar por InnerSource + +##### [Comezar como un experimento](https://patterns.innersourcecommons.org/p/start-as-experiment) + +#### O crecemento lento da comunidade é unha rémora para InnerSource + +##### [Líder da comunidade experto en InnerSource](https://patterns.innersourcecommons.org/p/dedicated-community-leader) + +#### Os principios InnerSource non son intuitivos para todos + +##### [Documente os seus principios reitores](https://patterns.innersourcecommons.org/p/document-your-guiding-principles) + +### Organización do proxecto + +#### É difícil avaliar rapidamente un proxecto + +##### [Documentación base estándar](https://patterns.innersourcecommons.org/p/base-documentation) + +#### A comunicación ad-hoc obstaculiza o crecemento do proxecto + +##### [Ferramentas de comunicación](https://patterns.innersourcecommons.org/p/communication-tooling) + +#### A folla de ruta e dirección do proxecto son pouco transparentes + +##### [Casos de uso cun sistema de seguimento de incidencias](https://patterns.innersourcecommons.org/p/issue-tracker) + +## Aplicación + +### Desafíos da valoración + +#### Como medir o valor dun proxecto empresarial + +##### [Valoración de proxectos entre equipos](https://patterns.innersourcecommons.org/p/crossteam-project-valuation) + +### Desafíos culturais + +#### Esforzo non recoñecido + +##### [Agradecemento aos participantes](https://patterns.innersourcecommons.org/p/praise-participants) + +##### [Trusted committer](https://patterns.innersourcecommons.org/p/trusted-committer) + +### Desafíos técnicos + +#### Necesidades non satisfeitas para todos + +##### [Requisitos comúns](https://patterns.innersourcecommons.org/p/common-requirements) + +#### Medo á responsabilidade compartida de soporte + +##### [Servizo vs. Libraría](https://patterns.innersourcecommons.org/p/service-vs-library) + +#### Contribucións ao proxecto difíciles de facer e empregar + +##### [Core team](https://patterns.innersourcecommons.org/p/core-team) + +### Desafíos organizativos + +#### Disuasión á contribución de recursos + +##### [Contracted contributor](https://patterns.innersourcecommons.org/p/contracted-contributor) + +#### Rexeitamento dunha contribución aceptada + +##### [Garantía de 30 días](https://patterns.innersourcecommons.org/p/30-day-warranty) + +#### Cambio radical da xestión + +##### [Comité de revisión](https://patterns.innersourcecommons.org/p/review-committee) + +#### Medo á responsabilidade compartida de soporte + +##### [Servizo vs. Libraría](https://patterns.innersourcecommons.org/p/service-vs-library) + +#### Número de mantedores insuficiente para a escalada do proxecto + +##### [Trusted committer](https://patterns.innersourcecommons.org/p/trusted-committer) + +#### Coordinación complexa entre equipos + +##### [Toma de decisións transparente entre equipos RFC](https://patterns.innersourcecommons.org/p/transparent-cross-team-decision-making-using-rfcs) + +#### Proxecto orfo + +##### [Core team](https://patterns.innersourcecommons.org/p/core-team) + +##### [Soporte grupal](https://patterns.innersourcecommons.org/p/group-support) + +### Desafíos entre entidades xurídicas + +#### Preocupación polas responsabilidades xurídicas ou a contabilidade entre empresas + +##### [Licenza InnerSource](https://patterns.innersourcecommons.org/p/innersource-license) + +## Crecemento + +### Desafíos de dispoñibilidade + +#### Dificultade para atopar ao desenvolvedor axeitado para cada proxecto + +##### [Gig marketplace](https://patterns.innersourcecommons.org/p/gig-marketplace) + +##### [Portal InnerSource](https://patterns.innersourcecommons.org/p/innersource-portal) + +#### Dificultade para atopar proxectos activos + +##### [Cualificación da actividade do repositorio](https://patterns.innersourcecommons.org/p/repository-activity-score) + +## Escalada + +### Autoaprendizaxe/Desafíos de mellora + +#### Descoñecemento das mellores prácticas InnerSource + +##### [Modelo de madurez](https://patterns.innersourcecommons.org/p/maturity-model) + +#### Falta de coñecemento sobre código aberto + +##### [Documente os seus principios reitores](https://patterns.innersourcecommons.org/p/document-your-guiding-principles) + +### Desafíos técnicos + +#### Aumento dos gastos de mantemento + +##### [Extensións para o crecemento sostible](https://patterns.innersourcecommons.org/p/extensions-for-sustainable-growth) diff --git a/pattern-categorization/gl/innersource-program-mind-map.png b/pattern-categorization/gl/innersource-program-mind-map.png new file mode 100644 index 000000000..299ba3289 Binary files /dev/null and b/pattern-categorization/gl/innersource-program-mind-map.png differ diff --git a/pattern-categorization/innersource-program-mind-map.html b/pattern-categorization/innersource-program-mind-map.html index 8555997b1..3ba800f4c 100644 --- a/pattern-categorization/innersource-program-mind-map.html +++ b/pattern-categorization/innersource-program-mind-map.html @@ -20,9 +20,9 @@ - + diff --git a/pattern-categorization/innersource-program-mind-map.png b/pattern-categorization/innersource-program-mind-map.png index fba9de764..4b1bdee54 100644 Binary files a/pattern-categorization/innersource-program-mind-map.png and b/pattern-categorization/innersource-program-mind-map.png differ diff --git a/pattern-categorization/package-lock.json b/pattern-categorization/package-lock.json index d64702418..8b68e393e 100644 --- a/pattern-categorization/package-lock.json +++ b/pattern-categorization/package-lock.json @@ -9,47 +9,360 @@ "version": "0.0.1", "license": "ISC", "dependencies": { - "markmap-cli": ">=0.13.3", + "markmap-cli": ">=0.15.4", "optipng-bin": "^9.0.0" } }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/runtime": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", - "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "node_modules/@gera2ld/jsx-dom": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@gera2ld/jsx-dom/-/jsx-dom-2.2.2.tgz", + "integrity": "sha512-EOqf31IATRE6zS1W1EoWmXZhGfLAoO9FIlwTtHduSrBdud4npYBxYAkv8dZ5hudDPwJeeSjn40kbCL4wAzr8dA==", + "dependencies": { + "@babel/runtime": "^7.21.5" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", "engines": { - "node": ">=6" + "node": ">=12.22.0" } }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "dependencies": { - "defer-to-connect": "^1.0.1" + "graceful-fs": "4.2.10" }, "engines": { - "node": ">=6" + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==" + }, + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==" + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", + "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "dependencies": { + "@types/d3-selection": "*" } }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==" + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.9.tgz", + "integrity": "sha512-IKtvyFdb4Q0LWna6ymywQsEYjK/94SGhPrMfEr1TIc5OBeziTi+1jcCvttts8e0UWZIxpasjnQk9MNk/3iS+kA==" + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==" + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.6.tgz", + "integrity": "sha512-qlmD/8aMk5xGorUvTUWHCiumvgaUXYldYjNVOWtYoTYY/L+WwIEAmJxUmTgr9LoGNG0PPAOmqMDJVDPc7DOpPw==" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.2.tgz", + "integrity": "sha512-WAIEVlOCdd/NKRYTsqCpOMHQHemKBEINf8YXMYOtXH0GA7SY0dqMB78P3Uhgfy+4X+/Mlw2wDtlETkN6kQUCMA==" + }, + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==" + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.5.tgz", + "integrity": "sha512-Cb1f3jyNBnvMMkf4KBZ7IgAQVWd9yzBwYcrxGqg3aPCUgWELAS+nyeB7r76aqu1e3+CGDjhk4BrWaFBekMwigg==" + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.2.tgz", + "integrity": "sha512-kpKNZMDT3OAX6b5ct5nS/mv6LULagnUy4DmS6yyNjclje1qVe7vbjPwY3q1TGz6+Wr2IUkgFatCzqYUl54fHag==" + }, + "node_modules/@types/d3-selection": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.10.tgz", + "integrity": "sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg==" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.5.tgz", + "integrity": "sha512-dfEWpZJ1Pdg8meLlICX1M3WBIpxnaH2eQV2eY43Y5ysRJOTAV9f3/R++lgJKFstfrEOE2zdJ0sv5qwr2Bkic6Q==", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==" + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.8.tgz", + "integrity": "sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ==", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, + "node_modules/@types/geojson": { + "version": "7946.0.13", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.13.tgz", + "integrity": "sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==" + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" + }, "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" @@ -63,7 +376,7 @@ "string-width": "^4.1.0" } }, - "node_modules/ansi-regex": { + "node_modules/ansi-align/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", @@ -71,24 +384,61 @@ "node": ">=8" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { - "color-convert": "^2.0.1" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -141,9 +491,9 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/autolinker": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.15.0.tgz", - "integrity": "sha512-N/5Dk5AZnqL9k6kkHdFIGLm/0/rRuSnJwqYYhLCJjU7ZtiaJwCBzNTvjzy1zzJADngv/wvtHYcrPHytPnASeFA==", + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.16.2.tgz", + "integrity": "sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==", "dependencies": { "tslib": "^2.3.0" } @@ -167,6 +517,14 @@ } ] }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/bin-build": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", @@ -506,26 +864,59 @@ } }, "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", + "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" + "ansi-align": "^3.0.1", + "camelcase": "^7.0.1", + "chalk": "^5.2.0", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.1.0" }, "engines": { - "node": ">=10" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -587,6 +978,20 @@ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cache-content-type": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", @@ -599,51 +1004,84 @@ "node": ">= 6.0.0" } }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "engines": { + "node": ">=14.16" + } + }, "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=14.16" } }, "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -664,24 +1102,28 @@ } }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" } }, "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -699,16 +1141,25 @@ } }, "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } }, "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -725,34 +1176,31 @@ "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" } }, "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", "engines": { - "node": ">= 10" + "node": ">=16" } }, "node_modules/config-chain": { @@ -770,20 +1218,22 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", + "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" + "dot-prop": "^6.0.1", + "graceful-fs": "^4.2.6", + "unique-string": "^3.0.0", + "write-file-atomic": "^3.0.3", + "xdg-basedir": "^5.0.1" }, "engines": { - "node": ">=8" - } + "node": ">=12" + }, + "funding": { + "url": "https://github.com/yeoman/configstore?sponsor=1" + } }, "node_modules/content-disposition": { "version": "0.5.4", @@ -797,9 +1247,9 @@ } }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 0.6" } @@ -846,17 +1296,425 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "dependencies": { + "type-fest": "^1.0.1" + }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-flextree": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/d3-flextree/-/d3-flextree-2.1.2.tgz", + "integrity": "sha512-gJiHrx5uTTHq44bjyIb3xpbmmdZcWLYPKeO9EPVOq8EylMFOiH2+9sWqKAiQ4DcFuOZTAxPOQyv0Rnmji/g15A==", + "dependencies": { + "d3-hierarchy": "^1.1.5" + } + }, + "node_modules/d3-flextree/node_modules/d3-hierarchy": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" } }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { "ms": "2.1.2" }, @@ -1027,7 +1885,7 @@ "node_modules/deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==" }, "node_modules/deep-extend": { "version": "0.6.0", @@ -1037,23 +1895,192 @@ "node": ">=4.0.0" } }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/default-browser/node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-browser/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/default-browser/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-browser/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/default-browser/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" + "node_modules/delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "dependencies": { + "robust-predicates": "^3.0.0" } }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "node_modules/depd": { "version": "2.0.0", @@ -1064,19 +2091,26 @@ } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "dependencies": { "is-obj": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/download": { @@ -1183,20 +2217,25 @@ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } @@ -1209,18 +2248,29 @@ "once": "^1.4.0" } }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { "version": "1.0.5", @@ -1345,6 +2395,21 @@ "node": ">=8" } }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/find-versions": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", @@ -1356,10 +2421,18 @@ "node": ">=6" } }, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "engines": { + "node": ">= 14.17" + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } @@ -1379,9 +2452,9 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "hasInstallScript": true, "optional": true, "os": [ @@ -1391,6 +2464,14 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-proxy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", @@ -1425,9 +2506,9 @@ } }, "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "dependencies": { "ini": "2.0.0" }, @@ -1439,37 +2520,101 @@ } }, "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" }, "engines": { - "node": ">=8.6" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/got/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got/node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got/node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/has-symbol-support-x": { @@ -1481,9 +2626,9 @@ } }, "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { "node": ">= 0.4" }, @@ -1517,11 +2662,44 @@ } }, "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", + "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highlight.js": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", + "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/http-assert": { @@ -1537,9 +2715,9 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "node_modules/http-errors": { "version": "1.8.1", @@ -1559,11 +2737,42 @@ "node_modules/http-errors/node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "engines": { "node": ">= 0.6" } }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -1584,17 +2793,17 @@ ] }, "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "engines": { "node": ">=0.8.19" } @@ -1612,6 +2821,14 @@ "node": ">=10" } }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, "node_modules/into-stream": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", @@ -1624,6 +2841,11 @@ "node": ">=4" } }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1636,25 +2858,36 @@ } }, "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dependencies": { - "ci-info": "^2.0.0" + "ci-info": "^3.2.0" }, "bin": { "is-ci": "bin.js" } }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "bin": { "is-docker": "cli.js" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1663,7 +2896,7 @@ "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } @@ -1701,6 +2934,23 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -1722,11 +2972,11 @@ "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" }, "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", + "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1791,7 +3041,7 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/is-wsl": { "version": "2.2.0", @@ -1804,10 +3054,27 @@ "node": ">=8" } }, + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", + "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", + "engines": { + "node": ">=12" + } }, "node_modules/isarray": { "version": "1.0.0", @@ -1831,6 +3098,11 @@ "node": ">= 4" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1847,16 +3119,24 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/katex": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.15.6.tgz", - "integrity": "sha512-UpzJy4yrnqnhXvRPhjEuLA4lcPn6eRngixW7Q3TJErjg3Aw2PuLFBzTkdUb89UtumxjhHTqL3a5GDGETMSwgJA==", + "version": "0.16.9", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.9.tgz", + "integrity": "sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==", "funding": [ "https://opencollective.com/katex", "https://github.com/sponsors/katex" ], "dependencies": { - "commander": "^8.0.0" + "commander": "^8.3.0" }, "bin": { "katex": "cli.js" @@ -1882,17 +3162,22 @@ } }, "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dependencies": { - "json-buffer": "3.0.0" + "json-buffer": "3.0.1" } }, + "node_modules/keyv/node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, "node_modules/koa": { - "version": "2.13.4", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.4.tgz", - "integrity": "sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g==", + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.14.2.tgz", + "integrity": "sha512-VFI2bpJaodz6P7x2uyLiX6RLYpZmOJqNmoCst/Yyd7hQlszyPwG/I9CQJ63nOtKSxpt5M7NH67V6nJL2BwCl7g==", "dependencies": { "accepts": "^1.3.5", "cache-content-type": "^1.0.0", @@ -1940,14 +3225,39 @@ } }, "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", "dependencies": { - "package-json": "^6.3.0" + "package-json": "^8.1.0" }, "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lines-and-columns": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lowercase-keys": { @@ -1959,110 +3269,143 @@ } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", "dependencies": { - "semver": "^6.0.0" + "semver": "^7.3.5" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" + "node": "14 || >=16.14" } }, "node_modules/markmap-cli": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/markmap-cli/-/markmap-cli-0.13.3.tgz", - "integrity": "sha512-+HhtOoHW6JddFqESLGElaapRWX8IT9QiBO9BcSXX9KOomzaXxUikThwDwxy6loBuCusrYRq58G6rVrJw4W5o9Q==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "chokidar": "^3.5.1", - "commander": "^7.1.0", - "koa": "^2.13.1", - "markmap-lib": "^0.13.3", - "open": "^8.0.3", - "update-notifier": "^5.1.0" + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/markmap-cli/-/markmap-cli-0.15.4.tgz", + "integrity": "sha512-CpyQ7aBoL8CKGl8Kn9pKqA3TDiYBSeba5UyuWVdZXG47sqgdx2VaV/ybh80flkmamkeVURcbezYe9K4M1JTo+g==", + "dependencies": { + "@babel/runtime": "^7.22.6", + "chokidar": "^3.5.3", + "commander": "^11.0.0", + "d3": "^7.8.5", + "highlight.js": "^11.8.0", + "katex": "^0.16.8", + "koa": "^2.14.2", + "markmap-common": "0.15.3", + "markmap-lib": "0.15.4", + "markmap-toolbar": "0.15.4", + "markmap-view": "0.15.4", + "open": "^9.1.0", + "pkg-dir": "^7.0.0", + "prismjs": "^1.29.0", + "read-pkg-up": "^10.0.0", + "update-notifier": "^6.0.2", + "webfontloader": "^1.6.28" }, "bin": { "markmap": "bin/cli.js" }, "engines": { - "node": ">=10" + "node": ">=16" } }, "node_modules/markmap-common": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/markmap-common/-/markmap-common-0.13.3.tgz", - "integrity": "sha512-bKdEUgeLmloyJXrPErg+LdD7HppqRm836TQzhIWN1Wm5THOG8POouAdnLh14X6JCe1ofFbEMhPMZFs9unRLhtQ==", + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/markmap-common/-/markmap-common-0.15.3.tgz", + "integrity": "sha512-a40FfdzFEKoyIhd5KDsV6FfkM55WWi2spRq/cUCsOZd8e4PAHMc9auCEjdxTWRiS2EGzET9sPpvyAmPSTva+/w==", + "dependencies": { + "@babel/runtime": "^7.22.6", + "@gera2ld/jsx-dom": "^2.2.2", + "npm2url": "^0.2.1" + } + }, + "node_modules/markmap-lib": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/markmap-lib/-/markmap-lib-0.15.4.tgz", + "integrity": "sha512-uz/IedoGXoDD6eXpmyD+1vx+g3rEzomX1uwnXOxnigXC9ApXG67lUhA4ffNlucgoV4/BLA2m6KyVvswECjljVQ==", + "dependencies": { + "@babel/runtime": "^7.22.6", + "highlight.js": "^11.8.0", + "js-yaml": "^4.1.0", + "katex": "^0.16.8", + "prismjs": "^1.29.0", + "remarkable": "^2.0.1", + "remarkable-katex": "^1.2.1" + }, + "peerDependencies": { + "markmap-common": "*" + } + }, + "node_modules/markmap-toolbar": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/markmap-toolbar/-/markmap-toolbar-0.15.4.tgz", + "integrity": "sha512-g95ne4YXJ9qptQAzoTyL0a1Pj/1ZNWzGWkbV/9w537LRTKJndQQ2FN71tCZQjAK95zri3cM0bJDv8krK7w4Q5w==", "dependencies": { - "@babel/runtime": "^7.12.1" + "@babel/runtime": "^7.22.6", + "@gera2ld/jsx-dom": "^2.2.2" + }, + "peerDependencies": { + "markmap-common": "*" } }, - "node_modules/markmap-lib": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/markmap-lib/-/markmap-lib-0.13.3.tgz", - "integrity": "sha512-4ldQfldiEZddMOUoEJnfVpekiJas+mG9D9oAUpDM+9Ypg+x3bThnjjXlx8isfXsSjRV6caZnn4+I9lAa2i5Wfg==", + "node_modules/markmap-view": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/markmap-view/-/markmap-view-0.15.4.tgz", + "integrity": "sha512-6PJnoPZHiQIb0YE+fg0Ht1ptEXgf9QOOTBEiC2DrzjAbZ3rrRa2g+0VhpZ+9vSzDsUa+m/IGz4xkiNepuPfs5w==", "dependencies": { - "@babel/runtime": "^7.16.3", - "js-yaml": "^4.1.0", - "katex": "^0.15.1", - "markmap-common": "^0.13.3", - "prismjs": "^1.25.0", - "remarkable": "^2.0.1", - "remarkable-katex": "^1.1.8" + "@babel/runtime": "^7.22.6", + "@gera2ld/jsx-dom": "^2.2.2", + "@types/d3": "^7.4.0", + "d3": "^7.8.5", + "d3-flextree": "^2.1.2" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "markmap-common": "*" } }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" } }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", @@ -2072,9 +3415,12 @@ } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/ms": { "version": "2.1.2", @@ -2082,9 +3428,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { "node": ">= 0.6" } @@ -2094,6 +3440,20 @@ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, + "node_modules/normalize-package-data": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", + "dependencies": { + "hosted-git-info": "^7.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2103,11 +3463,14 @@ } }, "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm-conf": { @@ -2141,6 +3504,11 @@ "node": ">=4" } }, + "node_modules/npm2url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/npm2url/-/npm2url-0.2.1.tgz", + "integrity": "sha512-Ls7mMyud1Kk0EisqsTt2TPtM7gLRvgmvDxOg3FPI5zjfhQ+ZFNBXX2K9VT7vo+HqUsz/uCiIxkcO0SvIuneVug==" + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -2150,9 +3518,9 @@ } }, "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { "ee-first": "1.1.1" }, @@ -2168,22 +3536,37 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/only": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" + "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==" }, "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", "is-wsl": "^2.2.0" }, "engines": { - "node": ">=12" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2217,11 +3600,11 @@ } }, "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "engines": { - "node": ">=6" + "node": ">=12.20" } }, "node_modules/p-event": { @@ -2251,6 +3634,34 @@ "node": ">=4" } }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-map-series": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", @@ -2282,25 +3693,49 @@ } }, "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", + "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" }, "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" + "node_modules/parse-json": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.1.tgz", + "integrity": "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==", + "dependencies": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/parseurl": { @@ -2311,6 +3746,14 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -2362,6 +3805,20 @@ "node": ">=0.10.0" } }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", @@ -2371,9 +3828,9 @@ } }, "node_modules/prismjs": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", - "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==", + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", "engines": { "node": ">=6" } @@ -2403,14 +3860,17 @@ } }, "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", + "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", "dependencies": { - "escape-goat": "^2.0.0" + "escape-goat": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/query-string": { @@ -2426,6 +3886,17 @@ "node": ">=0.10.0" } }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -2445,6 +3916,39 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, + "node_modules/read-pkg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.1.0.tgz", + "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", + "dependencies": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^6.0.0", + "parse-json": "^7.0.0", + "type-fest": "^4.2.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.1.0.tgz", + "integrity": "sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==", + "dependencies": { + "find-up": "^6.3.0", + "read-pkg": "^8.1.0", + "type-fest": "^4.2.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -2476,67 +3980,246 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/remarkable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-2.0.1.tgz", + "integrity": "sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==", + "dependencies": { + "argparse": "^1.0.10", + "autolinker": "^3.11.0" + }, + "bin": { + "remarkable": "bin/remarkable.js" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/remarkable-katex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/remarkable-katex/-/remarkable-katex-1.2.1.tgz", + "integrity": "sha512-Y1VquJBZnaVsfsVcKW2hmjT+pDL7mp8l5WAVlvuvViltrdok2m1AIKmJv8SsH+mBY84PoMw67t3kTWw1dIm8+g==" + }, + "node_modules/remarkable/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/run-applescript/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/run-applescript/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { - "rc": "^1.2.8" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dependencies": { - "rc": "^1.2.8" - }, + "node_modules/run-applescript/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "engines": { "node": ">=8" } }, - "node_modules/remarkable": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-2.0.1.tgz", - "integrity": "sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==", + "node_modules/run-applescript/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/run-applescript/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { - "argparse": "^1.0.10", - "autolinker": "^3.11.0" + "isexe": "^2.0.0" }, "bin": { - "remarkable": "bin/remarkable.js" + "node-which": "bin/node-which" }, "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/remarkable-katex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/remarkable-katex/-/remarkable-katex-1.2.1.tgz", - "integrity": "sha512-Y1VquJBZnaVsfsVcKW2hmjT+pDL7mp8l5WAVlvuvViltrdok2m1AIKmJv8SsH+mBY84PoMw67t3kTWw1dIm8+g==" - }, - "node_modules/remarkable/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" + "node": ">= 8" } }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dependencies": { - "lowercase-keys": "^1.0.0" - } + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "node_modules/safe-buffer": { "version": "5.2.1", @@ -2557,6 +4240,11 @@ } ] }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "node_modules/seek-bzip": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", @@ -2589,22 +4277,17 @@ } }, "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", "dependencies": { - "semver": "^6.3.0" + "semver": "^7.3.5" }, "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/semver-regex": { @@ -2634,6 +4317,17 @@ "semver": "bin/semver" } }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -2659,9 +4353,9 @@ } }, "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/sort-keys": { "version": "1.1.2", @@ -2685,15 +4379,43 @@ "node": ">=0.10.0" } }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==" + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "engines": { "node": ">= 0.6" } @@ -2720,27 +4442,33 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dependencies": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/strip-dirs": { @@ -2759,10 +4487,21 @@ "node": ">=0.10.0" } }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "engines": { "node": ">=0.10.0" } @@ -2779,14 +4518,14 @@ } }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/tar-stream": { @@ -2839,19 +4578,22 @@ "node": ">=0.10.0" } }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "engines": { - "node": ">=6" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2883,9 +4625,9 @@ } }, "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tsscmp": { "version": "1.0.6", @@ -2907,11 +4649,11 @@ } }, "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.1.tgz", + "integrity": "sha512-ShaaYnjf+0etG8W/FumARKMjjIToy/haCaTjN2dvcewOSoNqCQzdgG7m2JVOlM5qndGTHjkvsrWZs+k/2Z7E0Q==", "engines": { - "node": ">=10" + "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2947,43 +4689,65 @@ } }, "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", "dependencies": { - "crypto-random-string": "^2.0.0" + "crypto-random-string": "^4.0.0" }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "engines": { "node": ">=8" } }, "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", + "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", + "dependencies": { + "boxen": "^7.0.0", + "chalk": "^5.0.1", + "configstore": "^6.0.0", + "has-yarn": "^3.0.0", + "import-lazy": "^4.0.0", + "is-ci": "^3.0.1", "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" + "is-npm": "^6.0.0", + "is-yarn-global": "^0.4.0", + "latest-version": "^7.0.0", + "pupa": "^3.1.0", + "semver": "^7.3.7", + "semver-diff": "^4.0.0", + "xdg-basedir": "^5.1.0" }, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -3017,14 +4781,28 @@ "uuid": "bin/uuid" } }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "engines": { "node": ">= 0.8" } }, + "node_modules/webfontloader": { + "version": "1.6.28", + "resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz", + "integrity": "sha512-Egb0oFEga6f+nSgasH3E0M405Pzn6y3/9tOVanv/DLfa1YBIgcv90L18YyWnvXkRbIM17v5Kv6IT2N6g1x5tvQ==" + }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -3037,32 +4815,46 @@ } }, "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "dependencies": { - "string-width": "^4.0.0" + "string-width": "^5.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -3080,11 +4872,14 @@ } }, "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/xtend": { @@ -3110,43 +4905,346 @@ } }, "node_modules/ylru": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", - "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz", + "integrity": "sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==", "engines": { "node": ">= 4.0.0" } + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } }, "dependencies": { + "@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "requires": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" + }, + "@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + } + }, "@babel/runtime": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", - "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "requires": { + "regenerator-runtime": "^0.14.0" + } + }, + "@gera2ld/jsx-dom": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@gera2ld/jsx-dom/-/jsx-dom-2.2.2.tgz", + "integrity": "sha512-EOqf31IATRE6zS1W1EoWmXZhGfLAoO9FIlwTtHduSrBdud4npYBxYAkv8dZ5hudDPwJeeSjn40kbCL4wAzr8dA==", + "requires": { + "@babel/runtime": "^7.21.5" + } + }, + "@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==" + }, + "@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "requires": { + "graceful-fs": "4.2.10" + } + }, + "@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "requires": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + } + }, + "@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==" + }, + "@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "requires": { + "defer-to-connect": "^2.0.1" + } + }, + "@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "requires": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==" + }, + "@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==" + }, + "@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" + }, + "@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "requires": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==" + }, + "@types/d3-dispatch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", + "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==" + }, + "@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==" + }, + "@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==" + }, + "@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "requires": { + "@types/d3-dsv": "*" + } + }, + "@types/d3-force": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.9.tgz", + "integrity": "sha512-IKtvyFdb4Q0LWna6ymywQsEYjK/94SGhPrMfEr1TIc5OBeziTi+1jcCvttts8e0UWZIxpasjnQk9MNk/3iS+kA==" + }, + "@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==" + }, + "@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "requires": { + "@types/geojson": "*" + } + }, + "@types/d3-hierarchy": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.6.tgz", + "integrity": "sha512-qlmD/8aMk5xGorUvTUWHCiumvgaUXYldYjNVOWtYoTYY/L+WwIEAmJxUmTgr9LoGNG0PPAOmqMDJVDPc7DOpPw==" + }, + "@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "requires": { + "@types/d3-color": "*" + } + }, + "@types/d3-path": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.2.tgz", + "integrity": "sha512-WAIEVlOCdd/NKRYTsqCpOMHQHemKBEINf8YXMYOtXH0GA7SY0dqMB78P3Uhgfy+4X+/Mlw2wDtlETkN6kQUCMA==" + }, + "@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==" + }, + "@types/d3-quadtree": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.5.tgz", + "integrity": "sha512-Cb1f3jyNBnvMMkf4KBZ7IgAQVWd9yzBwYcrxGqg3aPCUgWELAS+nyeB7r76aqu1e3+CGDjhk4BrWaFBekMwigg==" + }, + "@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==" + }, + "@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "requires": { + "@types/d3-time": "*" + } + }, + "@types/d3-scale-chromatic": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.2.tgz", + "integrity": "sha512-kpKNZMDT3OAX6b5ct5nS/mv6LULagnUy4DmS6yyNjclje1qVe7vbjPwY3q1TGz6+Wr2IUkgFatCzqYUl54fHag==" + }, + "@types/d3-selection": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.10.tgz", + "integrity": "sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg==" + }, + "@types/d3-shape": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.5.tgz", + "integrity": "sha512-dfEWpZJ1Pdg8meLlICX1M3WBIpxnaH2eQV2eY43Y5ysRJOTAV9f3/R++lgJKFstfrEOE2zdJ0sv5qwr2Bkic6Q==", "requires": { - "regenerator-runtime": "^0.13.4" + "@types/d3-path": "*" } }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + "@types/d3-time": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==" }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==" + }, + "@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==" + }, + "@types/d3-transition": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.8.tgz", + "integrity": "sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ==", + "requires": { + "@types/d3-selection": "*" + } + }, + "@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", "requires": { - "defer-to-connect": "^1.0.1" + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" } }, + "@types/geojson": { + "version": "7946.0.13", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.13.tgz", + "integrity": "sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==" + }, + "@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" + }, + "@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" + }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "ansi-align": { @@ -3155,25 +5253,55 @@ "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "requires": { "string-width": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" }, "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" } }, "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3205,9 +5333,9 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "autolinker": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.15.0.tgz", - "integrity": "sha512-N/5Dk5AZnqL9k6kkHdFIGLm/0/rRuSnJwqYYhLCJjU7ZtiaJwCBzNTvjzy1zzJADngv/wvtHYcrPHytPnASeFA==", + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.16.2.tgz", + "integrity": "sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==", "requires": { "tslib": "^2.3.0" } @@ -3217,6 +5345,11 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" + }, "bin-build": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-3.0.0.tgz", @@ -3490,18 +5623,38 @@ } }, "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", + "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", + "requires": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.1", + "chalk": "^5.2.0", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.1.0" + }, + "dependencies": { + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" + }, + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + } + } + }, + "bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" + "big-integer": "^1.6.44" } }, "braces": { @@ -3545,6 +5698,14 @@ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" }, + "bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "requires": { + "run-applescript": "^5.0.0" + } + }, "cache-content-type": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", @@ -3554,39 +5715,54 @@ "ylru": "^1.2.0" } }, + "cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==" + }, "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" }, "dependencies": { "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" }, "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==" + }, + "mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==" + }, + "responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "requires": { + "lowercase-keys": "^3.0.0" + } } } }, "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==" }, "caw": { "version": "2.0.1", @@ -3600,18 +5776,19 @@ } }, "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -3624,14 +5801,14 @@ } }, "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==" }, "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" }, "clone-response": { "version": "1.0.2", @@ -3644,25 +5821,25 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" }, "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "color-name": "~1.1.4" + "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==" }, "config-chain": { "version": "1.1.13", @@ -3681,16 +5858,15 @@ } }, "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", + "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" + "dot-prop": "^6.0.1", + "graceful-fs": "^4.2.6", + "unique-string": "^3.0.0", + "write-file-atomic": "^3.0.3", + "xdg-basedir": "^5.0.1" } }, "content-disposition": { @@ -3702,9 +5878,9 @@ } }, "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" }, "cookies": { "version": "0.8.0", @@ -3747,14 +5923,309 @@ } }, "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "requires": { + "type-fest": "^1.0.1" + }, + "dependencies": { + "type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" + } + } + }, + "d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "requires": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + } + }, + "d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "requires": { + "internmap": "1 - 2" + } + }, + "d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==" + }, + "d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + } + }, + "d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "requires": { + "d3-path": "1 - 3" + } + }, + "d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" + }, + "d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "requires": { + "d3-array": "^3.2.0" + } + }, + "d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "requires": { + "delaunator": "5" + } + }, + "d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" + }, + "d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + } + }, + "d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "requires": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + } + } + }, + "d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" + }, + "d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "requires": { + "d3-dsv": "1 - 3" + } + }, + "d3-flextree": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/d3-flextree/-/d3-flextree-2.1.2.tgz", + "integrity": "sha512-gJiHrx5uTTHq44bjyIb3xpbmmdZcWLYPKeO9EPVOq8EylMFOiH2+9sWqKAiQ4DcFuOZTAxPOQyv0Rnmji/g15A==", + "requires": { + "d3-hierarchy": "^1.1.5" + }, + "dependencies": { + "d3-hierarchy": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" + } + } + }, + "d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" + }, + "d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "requires": { + "d3-array": "2.5.0 - 3" + } + }, + "d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==" + }, + "d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "requires": { + "d3-color": "1 - 3" + } + }, + "d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==" + }, + "d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==" + }, + "d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" + }, + "d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==" + }, + "d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "requires": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + } + }, + "d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "requires": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + } + }, + "d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" + }, + "d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "requires": { + "d3-path": "^3.1.0" + } + }, + "d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "requires": { + "d3-array": "2 - 3" + } + }, + "d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "requires": { + "d3-time": "1 - 3" + } + }, + "d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" + }, + "d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "requires": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + } }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { "ms": "2.1.2" } @@ -3883,27 +6354,134 @@ "deep-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==" }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, + "default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "requires": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==" + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==" + } + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "requires": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + } + }, "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" }, "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==" + }, + "delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "requires": { + "robust-predicates": "^3.0.0" + } }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "depd": { "version": "2.0.0", @@ -3911,14 +6489,14 @@ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "requires": { "is-obj": "^2.0.0" } @@ -4005,20 +6583,25 @@ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "end-of-stream": { "version": "1.4.4", @@ -4028,15 +6611,23 @@ "once": "^1.4.0" } }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==" }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "escape-string-regexp": { "version": "1.0.5", @@ -4132,6 +6723,15 @@ "to-regex-range": "^5.0.1" } }, + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, "find-versions": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", @@ -4140,10 +6740,15 @@ "semver-regex": "^2.0.0" } }, + "form-data-encoder": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==" + }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, "from2": { "version": "2.3.0", @@ -4160,11 +6765,16 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "optional": true }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, "get-proxy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", @@ -4190,40 +6800,73 @@ } }, "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "requires": { "ini": "2.0.0" } }, "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", + "requires": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "dependencies": { + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "requires": { + "mimic-response": "^3.1.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==" + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + }, + "responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "requires": { + "lowercase-keys": "^3.0.0" + } + } } }, "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "has-symbol-support-x": { "version": "1.4.2", @@ -4231,9 +6874,9 @@ "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" }, "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-to-string-tag-x": { "version": "1.4.1", @@ -4252,9 +6895,30 @@ } }, "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", + "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==" + }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "highlight.js": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", + "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==" + }, + "hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "requires": { + "lru-cache": "^10.0.1" + } }, "http-assert": { "version": "1.5.0", @@ -4266,9 +6930,9 @@ } }, "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "http-errors": { "version": "1.8.1", @@ -4285,24 +6949,46 @@ "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" } } }, + "http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + } + }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==" + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==" }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" }, "inherits": { "version": "2.0.4", @@ -4314,6 +7000,11 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" }, + "internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" + }, "into-stream": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", @@ -4323,6 +7014,11 @@ "p-is-promise": "^1.1.0" } }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -4332,22 +7028,30 @@ } }, "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "requires": { - "ci-info": "^2.0.0" + "ci-info": "^3.2.0" + } + }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "requires": { + "hasown": "^2.0.0" } }, "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==" }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -4370,6 +7074,14 @@ "is-extglob": "^2.1.1" } }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "requires": { + "is-docker": "^3.0.0" + } + }, "is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -4385,9 +7097,9 @@ "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" }, "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", + "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==" }, "is-number": { "version": "7.0.0", @@ -4427,7 +7139,7 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "is-wsl": { "version": "2.2.0", @@ -4435,12 +7147,19 @@ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "requires": { "is-docker": "^2.0.0" + }, + "dependencies": { + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + } } }, "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", + "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==" }, "isarray": { "version": "1.0.0", @@ -4461,6 +7180,11 @@ "is-object": "^1.0.1" } }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -4474,12 +7198,17 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" }, + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==" + }, "katex": { - "version": "0.15.6", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.15.6.tgz", - "integrity": "sha512-UpzJy4yrnqnhXvRPhjEuLA4lcPn6eRngixW7Q3TJErjg3Aw2PuLFBzTkdUb89UtumxjhHTqL3a5GDGETMSwgJA==", + "version": "0.16.9", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.9.tgz", + "integrity": "sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==", "requires": { - "commander": "^8.0.0" + "commander": "^8.3.0" }, "dependencies": { "commander": { @@ -4498,17 +7227,24 @@ } }, "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "requires": { - "json-buffer": "3.0.0" + "json-buffer": "3.0.1" + }, + "dependencies": { + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + } } }, "koa": { - "version": "2.13.4", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.13.4.tgz", - "integrity": "sha512-43zkIKubNbnrULWlHdN5h1g3SEKXOEzoAlRsHOTFpnlDu8JlAOZSMJBLULusuXRequboiwJcj5vtYXKB3k7+2g==", + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.14.2.tgz", + "integrity": "sha512-VFI2bpJaodz6P7x2uyLiX6RLYpZmOJqNmoCst/Yyd7hQlszyPwG/I9CQJ63nOtKSxpt5M7NH67V6nJL2BwCl7g==", "requires": { "accepts": "^1.3.5", "cache-content-type": "^1.0.0", @@ -4550,11 +7286,24 @@ } }, "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", + "requires": { + "package-json": "^8.1.0" + } + }, + "lines-and-columns": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==" + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "requires": { - "package-json": "^6.3.0" + "p-locate": "^6.0.0" } }, "lowercase-keys": { @@ -4563,91 +7312,119 @@ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } + "semver": "^7.3.5" } }, "markmap-cli": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/markmap-cli/-/markmap-cli-0.13.3.tgz", - "integrity": "sha512-+HhtOoHW6JddFqESLGElaapRWX8IT9QiBO9BcSXX9KOomzaXxUikThwDwxy6loBuCusrYRq58G6rVrJw4W5o9Q==", - "requires": { - "@babel/runtime": "^7.13.10", - "chokidar": "^3.5.1", - "commander": "^7.1.0", - "koa": "^2.13.1", - "markmap-lib": "^0.13.3", - "open": "^8.0.3", - "update-notifier": "^5.1.0" + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/markmap-cli/-/markmap-cli-0.15.4.tgz", + "integrity": "sha512-CpyQ7aBoL8CKGl8Kn9pKqA3TDiYBSeba5UyuWVdZXG47sqgdx2VaV/ybh80flkmamkeVURcbezYe9K4M1JTo+g==", + "requires": { + "@babel/runtime": "^7.22.6", + "chokidar": "^3.5.3", + "commander": "^11.0.0", + "d3": "^7.8.5", + "highlight.js": "^11.8.0", + "katex": "^0.16.8", + "koa": "^2.14.2", + "markmap-common": "0.15.3", + "markmap-lib": "0.15.4", + "markmap-toolbar": "0.15.4", + "markmap-view": "0.15.4", + "open": "^9.1.0", + "pkg-dir": "^7.0.0", + "prismjs": "^1.29.0", + "read-pkg-up": "^10.0.0", + "update-notifier": "^6.0.2", + "webfontloader": "^1.6.28" } }, "markmap-common": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/markmap-common/-/markmap-common-0.13.3.tgz", - "integrity": "sha512-bKdEUgeLmloyJXrPErg+LdD7HppqRm836TQzhIWN1Wm5THOG8POouAdnLh14X6JCe1ofFbEMhPMZFs9unRLhtQ==", + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/markmap-common/-/markmap-common-0.15.3.tgz", + "integrity": "sha512-a40FfdzFEKoyIhd5KDsV6FfkM55WWi2spRq/cUCsOZd8e4PAHMc9auCEjdxTWRiS2EGzET9sPpvyAmPSTva+/w==", "requires": { - "@babel/runtime": "^7.12.1" + "@babel/runtime": "^7.22.6", + "@gera2ld/jsx-dom": "^2.2.2", + "npm2url": "^0.2.1" } }, "markmap-lib": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/markmap-lib/-/markmap-lib-0.13.3.tgz", - "integrity": "sha512-4ldQfldiEZddMOUoEJnfVpekiJas+mG9D9oAUpDM+9Ypg+x3bThnjjXlx8isfXsSjRV6caZnn4+I9lAa2i5Wfg==", + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/markmap-lib/-/markmap-lib-0.15.4.tgz", + "integrity": "sha512-uz/IedoGXoDD6eXpmyD+1vx+g3rEzomX1uwnXOxnigXC9ApXG67lUhA4ffNlucgoV4/BLA2m6KyVvswECjljVQ==", "requires": { - "@babel/runtime": "^7.16.3", + "@babel/runtime": "^7.22.6", + "highlight.js": "^11.8.0", "js-yaml": "^4.1.0", - "katex": "^0.15.1", - "markmap-common": "^0.13.3", - "prismjs": "^1.25.0", + "katex": "^0.16.8", + "prismjs": "^1.29.0", "remarkable": "^2.0.1", - "remarkable-katex": "^1.1.8" + "remarkable-katex": "^1.2.1" + } + }, + "markmap-toolbar": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/markmap-toolbar/-/markmap-toolbar-0.15.4.tgz", + "integrity": "sha512-g95ne4YXJ9qptQAzoTyL0a1Pj/1ZNWzGWkbV/9w537LRTKJndQQ2FN71tCZQjAK95zri3cM0bJDv8krK7w4Q5w==", + "requires": { + "@babel/runtime": "^7.22.6", + "@gera2ld/jsx-dom": "^2.2.2" + } + }, + "markmap-view": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/markmap-view/-/markmap-view-0.15.4.tgz", + "integrity": "sha512-6PJnoPZHiQIb0YE+fg0Ht1ptEXgf9QOOTBEiC2DrzjAbZ3rrRa2g+0VhpZ+9vSzDsUa+m/IGz4xkiNepuPfs5w==", + "requires": { + "@babel/runtime": "^7.22.6", + "@gera2ld/jsx-dom": "^2.2.2", + "@types/d3": "^7.4.0", + "d3": "^7.8.5", + "d3-flextree": "^2.1.2" } }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" } }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==" + }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "ms": { "version": "2.1.2", @@ -4655,24 +7432,35 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, + "normalize-package-data": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", + "integrity": "sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==", + "requires": { + "hosted-git-info": "^7.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==" }, "npm-conf": { "version": "1.1.3", @@ -4698,15 +7486,20 @@ "path-key": "^2.0.0" } }, + "npm2url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/npm2url/-/npm2url-0.2.1.tgz", + "integrity": "sha512-Ls7mMyud1Kk0EisqsTt2TPtM7gLRvgmvDxOg3FPI5zjfhQ+ZFNBXX2K9VT7vo+HqUsz/uCiIxkcO0SvIuneVug==" + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "requires": { "ee-first": "1.1.1" } @@ -4719,18 +7512,27 @@ "wrappy": "1" } }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "requires": { + "mimic-fn": "^4.0.0" + } + }, "only": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" + "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==" }, "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", "is-wsl": "^2.2.0" } }, @@ -4752,9 +7554,9 @@ } }, "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==" }, "p-event": { "version": "1.3.0", @@ -4774,6 +7576,22 @@ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "requires": { + "p-limit": "^4.0.0" + } + }, "p-map-series": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", @@ -4796,20 +7614,32 @@ } }, "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", + "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", + "requires": { + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" + } + }, + "parse-json": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.1.tgz", + "integrity": "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==", "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" }, "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==" } } }, @@ -4818,6 +7648,11 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==" + }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -4851,15 +7686,23 @@ "pinkie": "^2.0.0" } }, + "pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "requires": { + "find-up": "^6.3.0" + } + }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, "prismjs": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", - "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==" + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" }, "process-nextick-args": { "version": "2.0.1", @@ -4886,11 +7729,11 @@ } }, "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", + "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", "requires": { - "escape-goat": "^2.0.0" + "escape-goat": "^4.0.0" } }, "query-string": { @@ -4903,6 +7746,11 @@ "strict-uri-encode": "^1.0.0" } }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -4921,6 +7769,27 @@ } } }, + "read-pkg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.1.0.tgz", + "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", + "requires": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^6.0.0", + "parse-json": "^7.0.0", + "type-fest": "^4.2.0" + } + }, + "read-pkg-up": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.1.0.tgz", + "integrity": "sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==", + "requires": { + "find-up": "^6.3.0", + "read-pkg": "^8.1.0", + "type-fest": "^4.2.0" + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -4951,24 +7820,24 @@ } }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", "requires": { - "rc": "^1.2.8" + "@pnpm/npm-conf": "^2.1.0" } }, "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", "requires": { - "rc": "^1.2.8" + "rc": "1.2.8" } }, "remarkable": { @@ -4995,6 +7864,11 @@ "resolved": "https://registry.npmjs.org/remarkable-katex/-/remarkable-katex-1.2.1.tgz", "integrity": "sha512-Y1VquJBZnaVsfsVcKW2hmjT+pDL7mp8l5WAVlvuvViltrdok2m1AIKmJv8SsH+mBY84PoMw67t3kTWw1dIm8+g==" }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, "responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", @@ -5003,11 +7877,129 @@ "lowercase-keys": "^1.0.0" } }, + "robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, + "run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "requires": { + "execa": "^5.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "seek-bzip": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", @@ -5029,21 +8021,24 @@ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + } } }, "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - } + "semver": "^7.3.5" } }, "semver-regex": { @@ -5085,9 +8080,9 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "sort-keys": { "version": "1.1.2", @@ -5105,15 +8100,43 @@ "sort-keys": "^1.0.0" } }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==" + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" }, "strict-uri-encode": { "version": "1.1.0", @@ -5136,21 +8159,21 @@ } }, "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" } }, "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "requires": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^6.0.1" } }, "strip-dirs": { @@ -5166,10 +8189,15 @@ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==" + }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" }, "strip-outer": { "version": "1.0.1", @@ -5180,11 +8208,11 @@ } }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" } }, "tar-stream": { @@ -5225,16 +8253,16 @@ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, + "titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==" + }, "to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -5257,9 +8285,9 @@ } }, "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "tsscmp": { "version": "1.0.6", @@ -5275,9 +8303,9 @@ } }, "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.1.tgz", + "integrity": "sha512-ShaaYnjf+0etG8W/FumARKMjjIToy/haCaTjN2dvcewOSoNqCQzdgG7m2JVOlM5qndGTHjkvsrWZs+k/2Z7E0Q==" }, "type-is": { "version": "1.6.18", @@ -5306,32 +8334,44 @@ } }, "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", "requires": { - "crypto-random-string": "^2.0.0" + "crypto-random-string": "^4.0.0" } }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==" + }, "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", + "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", + "requires": { + "boxen": "^7.0.0", + "chalk": "^5.0.1", + "configstore": "^6.0.0", + "has-yarn": "^3.0.0", + "import-lazy": "^4.0.0", + "is-ci": "^3.0.1", "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" + "is-npm": "^6.0.0", + "is-yarn-global": "^0.4.0", + "latest-version": "^7.0.0", + "pupa": "^3.1.0", + "semver": "^7.3.7", + "semver-diff": "^4.0.0", + "xdg-basedir": "^5.1.0" + }, + "dependencies": { + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" + } } }, "url-parse-lax": { @@ -5357,10 +8397,24 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "webfontloader": { + "version": "1.6.28", + "resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz", + "integrity": "sha512-Egb0oFEga6f+nSgasH3E0M405Pzn6y3/9tOVanv/DLfa1YBIgcv90L18YyWnvXkRbIM17v5Kv6IT2N6g1x5tvQ==" }, "which": { "version": "1.3.1", @@ -5371,21 +8425,28 @@ } }, "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "requires": { - "string-width": "^4.0.0" + "string-width": "^5.0.1" } }, "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + } } }, "wrappy": { @@ -5405,9 +8466,9 @@ } }, "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==" }, "xtend": { "version": "4.0.2", @@ -5429,9 +8490,14 @@ } }, "ylru": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", - "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.3.2.tgz", + "integrity": "sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==" + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==" } } } diff --git a/pattern-categorization/package.json b/pattern-categorization/package.json index 222df9751..f60cf4b82 100644 --- a/pattern-categorization/package.json +++ b/pattern-categorization/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "description": "Generate mindmap of the patterns in our book, using markmap.", "dependencies": { - "markmap-cli": ">=0.13.3", + "markmap-cli": ">=0.15.4", "optipng-bin": "^9.0.0" }, "scripts": { diff --git a/pattern-categorization/pt-br/innersource-program-mind-map.html b/pattern-categorization/pt-br/innersource-program-mind-map.html new file mode 100644 index 000000000..8481a780d --- /dev/null +++ b/pattern-categorization/pt-br/innersource-program-mind-map.html @@ -0,0 +1,28 @@ + + + + + + +Markmap + + + + + + + + diff --git a/pattern-categorization/pt-br/innersource-program-mind-map.md b/pattern-categorization/pt-br/innersource-program-mind-map.md new file mode 100644 index 000000000..a61caa1f1 --- /dev/null +++ b/pattern-categorization/pt-br/innersource-program-mind-map.md @@ -0,0 +1,137 @@ +# [Programa InnerSource](https://patterns.innersourcecommons.org/toc) + +## Começar + +### Etapa de Preparação + +#### A gerência hesita em investir em InnerSource + +##### [Inicie como um experimento](https://patterns.innersourcecommons.org/v/pt-br/p/start-as-experiment) + +#### O crescimento lento da comunidade dificulta o InnerSource + +##### [Líder de comunidade dedicado](https://patterns.innersourcecommons.org/v/pt-br/p/dedicated-community-leader) + +#### Os princípios do InnerSource não são intuitivos a todos + +##### [Documente seus princípios orientadores](https://patterns.innersourcecommons.org/v/pt-br/p/document-your-guiding-principles) + +### Configuração do Projeto + +#### Dificuldade para avaliar um projeto rapidamente + +##### [Documentação base padrão](https://patterns.innersourcecommons.org/v/pt-br/p/base-documentation) + +#### Comunicação ad-hoc prejudica o crescimento do projeto + +##### [Ferramentas de comunicação](https://patterns.innersourcecommons.org/v/pt-br/p/communication-tooling) + +#### Falta de transparência no roadmap e direção do projeto + +##### [Casos de uso do rastreador de problemas](https://patterns.innersourcecommons.org/v/pt-br/p/issue-tracker) + +## Adotar + +### Desafios de Avaliação + +#### Como medir o valor de negócio de um projeto + +##### [Avaliação de projetos entre equipes](https://patterns.innersourcecommons.org/v/pt-br/p/crossteam-project-valuation) + +#### Podemos contar com o projeto por um tempo prolongado? + +##### [Processo de liberação padrão](https://patterns.innersourcecommons.org/v/pt-br/p/release-process) + +##### [Documentação base padrão](https://patterns.innersourcecommons.org/v/pt-br/p/base-documentation) + +### Desafios Culturais + +#### Esforço não reconhecido + +##### [Elogiar participantes](https://patterns.innersourcecommons.org/v/pt-br/p/praise-participants) + +##### [Trusted Committer](https://patterns.innersourcecommons.org/v/pt-br/p/trusted-committer) + +### Desafios Técnicos + +#### Não atender às necessidades de todos + +##### [Requisitos comuns](https://patterns.innersourcecommons.org/v/pt-br/p/common-requirements) + +#### Medo da responsabilidade compartilhada de suporte + +##### [Serviço vs. Biblioteca](https://patterns.innersourcecommons.org/v/pt-br/p/service-vs-library) + +#### Projeto é dificil de contribuir e usar + +##### [Equipe Central](https://patterns.innersourcecommons.org/v/pt-br/p/core-team) + +### Desafios Organizacionais + +#### Desencorajamento em contribuir com recursos + +##### [Colaborador Contratado](https://patterns.innersourcecommons.org/v/pt-br/p/contracted-contributor) + +#### Rejeição na aceitação de contribuições + +##### [Garantia de 30 dias](https://patterns.innersourcecommons.org/v/pt-br/p/30-day-warranty) + +#### Mudança radical na gestão + +##### [Comitê de Revisão](https://patterns.innersourcecommons.org/v/pt-br/p/review-committee) + +#### Medo da responsabilidade compartilhada + +##### [Serviço vs. Biblioteca](https://patterns.innersourcecommons.org/v/pt-br/p/service-vs-library) + +#### Não há mantenedores suficientes para escalar + +##### [Trusted Committer](https://patterns.innersourcecommons.org/v/pt-br/p/trusted-committer) + +#### Coordenação dificil entre equipes + +##### [Tomada de Decisão Transparentes entre Equipes usando RFCs](https://patterns.innersourcecommons.org/v/pt-br/p/transparent-cross-team-decision-making-using-rfcs) + +#### Projeto sem proprietário/mantenedor + +##### [Equipe Central](https://patterns.innersourcecommons.org/v/pt-br/p/core-team) + +##### [Suporte em Grupo](https://patterns.innersourcecommons.org/v/pt-br/p/group-support) + +### Desafios entre entidades legais + +#### Preocupação com responsabilidades legais ou contabilidade entre empresas + +##### [Licença InnerSource](https://patterns.innersourcecommons.org/v/pt-br/p/innersource-license) + +## Crescer + +### Desafios de Descoberta + +#### Não é possível encontrar projetos correspondentes + +##### [Gig Marketplace](https://patterns.innersourcecommons.org/v/pt-br/p/gig-marketplace) + +##### [Portal InnerSource](https://patterns.innersourcecommons.org/v/pt-br/p/innersource-portal) + +#### Dificuldade em encontrar projetos ativos + +##### [Pontuação de Atividade de Repositório](https://patterns.innersourcecommons.org/v/pt-br/p/repository-activity-score) + +## Escalar + +### Desafios de Autoeducação/Melhoria + +#### Não conhecer as melhores práticas do InnerSource + +##### [Modelo de Maturidade](https://patterns.innersourcecommons.org/v/pt-br/p/maturity-model) + +#### Falta de conhecimento em Open Source + +##### [Documente seus Princípios Orientadores](https://patterns.innersourcecommons.org/v/pt-br/p/document-your-guiding-principles) + +### Desafios Técnicos + +#### Aumento de overhead de manutenção + +##### [Extensões para Crescimento Sustentável](https://patterns.innersourcecommons.org/v/pt-br/p/extensions-for-sustainable-growth) diff --git a/pattern-categorization/pt-br/innersource-program-mind-map.png b/pattern-categorization/pt-br/innersource-program-mind-map.png new file mode 100644 index 000000000..c8ac9d7ea Binary files /dev/null and b/pattern-categorization/pt-br/innersource-program-mind-map.png differ diff --git a/patterns/1-initial/explicit-shared-ownership.md b/patterns/1-initial/explicit-shared-ownership.md index aadcf36c9..87104cb76 100644 --- a/patterns/1-initial/explicit-shared-ownership.md +++ b/patterns/1-initial/explicit-shared-ownership.md @@ -41,7 +41,7 @@ A volunteer creates an issue in the component's repository highlighting the appa There is an initial team of [Trusted Committers](../2-structured/trusted-committer.md) committed to the component. -Expectations related to collaboration are transparent for everyone involved going forward e.g. by creating [base documentation in CONTRIBUTING.md](../2-structured/project-setup/base-documentation.md). +Expectations related to collaboration are transparent for everyone involved going forward e.g. by creating [base documentation in CONTRIBUTING.md](../2-structured/base-documentation.md). The entire decision process backing the result is transparent and can be influenced by those affected, leading to higher buy-in for the final result. Also the argument leading to the final decisions are accessible for those new to the project. diff --git a/patterns/1-initial/governance-levels.md b/patterns/1-initial/governance-levels.md index 996ce276b..2b64bee67 100644 --- a/patterns/1-initial/governance-levels.md +++ b/patterns/1-initial/governance-levels.md @@ -69,7 +69,7 @@ Examples of common InnerSource operating models (1) are: Examples of promoting the model names (3) are: -- Using the names within project documentation and contributing guides (see also [Standard Base Documentation](../2-structured/project-setup/base-documentation.md)). +- Using the names within project documentation and contributing guides (see also [Standard Base Documentation](../2-structured/base-documentation.md)). - Labelling projects with the names in an [InnerSource Portal](../2-structured/innersource-portal.md). - Presenting the names as a menu of adoption options for new InnerSource projects. - Including the names and models in any internal InnerSource training or promotion. diff --git a/patterns/1-initial/innersource-guidance-group.md b/patterns/1-initial/innersource-guidance-group.md index 9683d3320..ade83ae55 100644 --- a/patterns/1-initial/innersource-guidance-group.md +++ b/patterns/1-initial/innersource-guidance-group.md @@ -33,7 +33,7 @@ Recognize that Trusted Committers are both **situational leaders** and **subject - The “committee” is scheduled periodically as necessary by the Trusted Committers – twice a week, once a month, quarterly, etc. - The goal is to establish general direction, or a highway, while leaving freedom for individual teams to adapt to local needs, or side streets -- Trusted Committers establish organization guidelines that become templates for [Contribution Agreements](../2-structured/project-setup/base-documentation.md) +- Trusted Committers establish organization guidelines that become templates for [Contribution Agreements](../2-structured/base-documentation.md) - Trusted Committers collaborate on and refine guidelines asynchronously via passive documentation and the establishment of organizational patterns. - This guideline definition project itself can be run as an InnerSource project, accepting contributions from anywhere in the organization. - By running this as a collaborative documentation project, it can role-model and verify the behaviors that they want to promote for other InnerSource projects as well. diff --git a/patterns/1-initial/sustainable-innersource-program.md b/patterns/1-initial/sustainable-innersource-program.md new file mode 100644 index 000000000..14adcc0fa --- /dev/null +++ b/patterns/1-initial/sustainable-innersource-program.md @@ -0,0 +1,73 @@ +## Title + +Sustainable InnerSource Program + +## Patlet + +I've started an InnerSource program - what next? How do I ensure InnerSource remains a part of how we create software in the long term? + +## Problem + +Given an InnerSource program and/or community has been started within your organisation, you are unsure how to scale and/or sustain to ensure that InnerSource remains part of culture and best practice in the long term. When scaling and sustaining an InnerSource program fails, it leads to problems including unusable projects/products, an unengaged community, and loss of support from leadership. + +## Context + +* The problem exists in fledgling InnerSource programs/communities +* You may not have full time support from an InnerSource or Open Source Program Office (ISPO/OSPO) +* There is no clear vision on the future of the program +* You are worried that key people will move on to new roles, momentum will be lost and silently die, or future leaders will stop supporting InnerSource. +* You are an individual or organization who is concerned with the fragile state and future of highly-used and impactful InnerSource projects. +[(Sustain. 2017.)](https://sustainoss.org/assets/pdf/SustainOSS-west-2017-report.pdf) +* There is increasing quantity and decreasing quality of InnerSource projects at your organization. + +## Forces + +* The business may not believe further investment in InnerSource is necessary +* Key individuals may be seeking new challenges in other initiatives or job roles + +## Solutions + +(Assumptions of possible solutions, as this is a donut Pattern) + +* Start an ISPO: strategy, resources, buy-in +* Measure/prove value constantly +* Training +* InnerSource libraries that are critical to business success + +## Resulting Context + +**to-be-done** + +What is the situation after the problem has been solved? +The original context is changed indirectly by way of the solution. +Often this section can include discussion of the next possible Patterns/problems introduced. +This section can be short in content - the solution may not introduce new problems or change much context. + +## Rationale (optional) + +**to-be-done** + +Explains why this is the right solution; using totally different words WHY this solution balances these forces and this context to solve this problem. +Can expand on what-if's or theories. + +## Known Instances (optional) + +**to-be-done** + +Where has this been seen before? +Helps to reinforce that this is a REAL pattern and that you match the context. + +May mention: + +* A particular business +* Anonymized instances ex: "3 companies have proven that this is a good solution" or "A large financial services org...". + +## Status + +Initial (Donut) + +## Author(s) + +Tom Sadler +Chan Voong +We welcome any authors who would like to contribute. diff --git a/patterns/1-initial/transitioning-contractor-code-to-innersource-model.md b/patterns/1-initial/transitioning-contractor-code-to-innersource-model.md index a29d77a54..446e47a22 100644 --- a/patterns/1-initial/transitioning-contractor-code-to-innersource-model.md +++ b/patterns/1-initial/transitioning-contractor-code-to-innersource-model.md @@ -8,7 +8,7 @@ Contract developers are often not motivated to engage in InnerSource activities, ## Problem -Contractor developers are often not motivated (through forces described below) to not engage in InnerSource activities. Once delivered, and even if the code is made visible, their projects are often less likely to be part of successful InnerSourced engagements. +Contractor developers are often not motivated (through forces described below) to engage in InnerSource activities. Once delivered, and even if the code is made visible, their projects are often less likely to be part of successful InnerSource engagements. ## Context diff --git a/patterns/2-structured/30-day-warranty.md b/patterns/2-structured/30-day-warranty.md index 7c2ab75c3..ce93a1b13 100644 --- a/patterns/2-structured/30-day-warranty.md +++ b/patterns/2-structured/30-day-warranty.md @@ -34,7 +34,7 @@ Address the fears of both the receiving and the contributing teams by establishi Note that the warranty period could be 45, 60, or 100 days too. The duration may vary based upon the constraints of the project, the software life cycle of the project, commitments to customers, and other factors. -In addition it helps to provide clear [contribution guidelines](./project-setup/base-documentation.md), spelling out the expectations of the receiving team and the contributing team. +In addition it helps to provide clear [contribution guidelines](./base-documentation.md), spelling out the expectations of the receiving team and the contributing team. ![30 Day Warranty](../../assets/img/thirtydaywarranty.jpg) diff --git a/patterns/2-structured/project-setup/base-documentation.md b/patterns/2-structured/base-documentation.md similarity index 95% rename from patterns/2-structured/project-setup/base-documentation.md rename to patterns/2-structured/base-documentation.md index 8e6ebc538..bd20b821b 100644 --- a/patterns/2-structured/project-setup/base-documentation.md +++ b/patterns/2-structured/base-documentation.md @@ -58,10 +58,10 @@ contain: * Documentation needed for making modifications to the project - or a link to that. * Documentation on how to contribute to the project - or a link to that. * A "Getting involved" section that explains which public, archived, linkable communication channels the project uses. This should include a link to the project issue tracker, but also to any further discussion media used. -* A "Who we are" section explaining who the [Trusted Committers](../trusted-committer.md) behind the project are - with an explanation that instead of contacting these people privately the public communication channels above should be used for communication. +* A "Who we are" section explaining who the [Trusted Committers](trusted-committer.md) behind the project are - with an explanation that instead of contacting these people privately the public communication channels above should be used for communication. * An explanation of what the criteria are for the project to turn contributors into Trusted Committers - if that path exists. -![README.md](../../../assets/img/standard-base-documentation/README-for-users.png) +![README.md](../../assets/img/standard-base-documentation/README-for-users.png) ### CONTRIBUTING.md @@ -79,7 +79,7 @@ topics: * How to submit your modifications back to the project. * Some information on which turnaround time to expect for modifications made. -![CONTRIBUTING.md](../../../assets/img/standard-base-documentation/CONTRIBUTING-for-contributors.png) +![CONTRIBUTING.md](../../assets/img/standard-base-documentation/CONTRIBUTING-for-contributors.png) ### COMMUNICATION.md @@ -123,7 +123,7 @@ started right away: [README-template.md](templates/README-template.md), ## Resulting Context * The time for contributors to get up to speed is significantly reduced. -* Time spent on answering initial questions for [Trusted Committers](../trusted-committer.md) is significantly reduced, leaving them more time to work on other tasks. +* Time spent on answering initial questions for [Trusted Committers](trusted-committer.md) is significantly reduced, leaving them more time to work on other tasks. * Escalations due to misunderstandings and misalignment are significantly reduced. ## Known Instances @@ -132,6 +132,7 @@ started right away: [README-template.md](templates/README-template.md), * Paypal Inc. * Mercado Libre - create a documentation site that contains how to get started with InnerSource and also define the basic artifacts that a repository must have to be InnerSource (README, CONTRIBUTING, CODING_GUIDELINES, etc). * Analog Devices Inc. +* Airbus ## Authors diff --git a/patterns/2-structured/project-setup/communication-tooling.md b/patterns/2-structured/communication-tooling.md similarity index 93% rename from patterns/2-structured/project-setup/communication-tooling.md rename to patterns/2-structured/communication-tooling.md index 67ad6b844..08b1a33d3 100644 --- a/patterns/2-structured/project-setup/communication-tooling.md +++ b/patterns/2-structured/communication-tooling.md @@ -39,7 +39,7 @@ A project should set up the following communication tooling: 1. **a dedicated issue tracker** where structured communication, decision-making and progress tracking can happen transparently for all host team members but also for downstream users and contributors to follow. For further applications of the issue tracker see [Issue Tracker Use Cases](./issue-tracker.md). 2. **public discussion channel(s)** that come with less rigid a structure. Typically, this will be mailing lists, online forums, Q&A systems or even archived chat channels. Usually it is enough to start with just one channel for the project. If traffic increases too much it is helpful to split discussions about project usage from discussions about project development. -3. **a private channel** where communication about sensitive topics can happen between [Trusted Committers](../trusted-committer.md) - e.g. adding further Trusted Committers to the host team. This channel should be used with great care such that communication defaults to open and is kept private only under very rare circumstances. +3. **a private channel** where communication about sensitive topics can happen between [Trusted Committers](./trusted-committer.md) - e.g. adding further Trusted Committers to the host team. This channel should be used with great care such that communication defaults to open and is kept private only under very rare circumstances. While communication can happen outside of those written channels, as much information as possible should be brought back to the asynchronous channels. @@ -47,7 +47,7 @@ All communication channels should be documented in the project `README.md`. For The host team members need to make an effort to direct questions that they receive personally (e.g. via email or private chat messages) back to official communication channels. -![Recommended Communication Tooling for an InnerSource Project](../../../assets/img/communication-tooling/communication-tooling.png) +![Recommended Communication Tooling for an InnerSource Project](../../assets/img/communication-tooling/communication-tooling.png) ## Resulting Context diff --git a/patterns/2-structured/dedicated-community-leader.md b/patterns/2-structured/dedicated-community-leader.md index 91f3c3d0d..8f5235d75 100644 --- a/patterns/2-structured/dedicated-community-leader.md +++ b/patterns/2-structured/dedicated-community-leader.md @@ -59,6 +59,7 @@ Having excellent and dedicated community leaders is a precondition for the succe ## Known Instances * _BIOS at Robert Bosch GmbH_. Note that InnerSource at Bosch was, for the majority, aimed at increasing innovation and to a large degree dealt with internal facing products. This pattern is currently not used at Bosch for lack of funding. +* _Airbus_. A data scientist wanted to improve the collaboration with peers in the group and found: i) many developers (beyond data science) wanted that too and were happy someone was taking care of the issue, and ii) support from line manager and middle management to eventually act as the _de facto_ community leader, on top of his regular line of duty. ## Alias diff --git a/patterns/2-structured/group-support.md b/patterns/2-structured/group-support.md index 12396aaeb..9bf49202e 100644 --- a/patterns/2-structured/group-support.md +++ b/patterns/2-structured/group-support.md @@ -80,7 +80,7 @@ Structured [Russell R. Rutledge][] [Russell R. Rutledge]: https://github.com/rrrutledge -[Standard Base Documentation]: ../2-structured/project-setup/base-documentation.md -[Communication Tooling]: ../2-structured/project-setup/communication-tooling.md +[Standard Base Documentation]: ../2-structured/base-documentation.md +[Communication Tooling]: ../2-structured/communication-tooling.md [Trusted Committer]: ../2-structured/trusted-committer.md [Core Team]: ../2-structured/core-team.md diff --git a/patterns/2-structured/innersource-license.md b/patterns/2-structured/innersource-license.md index b23cf77dc..80f4d1937 100644 --- a/patterns/2-structured/innersource-license.md +++ b/patterns/2-structured/innersource-license.md @@ -31,6 +31,7 @@ At the time of sharing the source code, it can not be reliably predicted what th - Freedom over using the software leads to competition, and spread of ownership - There are legal contracts in place which cover the sharing of source code. These contracts are not standardized, so they create additional effort in negotiating and understanding for every project. The existing contracts may also not allow sharing source code in an open enough sense to support a true InnerSource approach. - Alternatively, there are no legal contracts in place but source code is shared informally. That might create uncertainty in cases where clarity about ownership and rights and obligations is needed. +- Choosing a restrictive and/or copyleft license can constitute a barrier for InnerSource adoption. Specifically, limiting publication to the organisation might require a costly relicensing procedure prior to transitioning to Open Source. ## Solutions @@ -50,8 +51,10 @@ The license simplifies the conversations within our organization about sharing s ## Known Instances -* DB Systel -* GovTech (Singapore Government) +- **DB Systel** +- **Robert Bosch GmbH** +- **Airbus** +- **GovTech (Singapore Government)** ### DB Systel @@ -70,6 +73,10 @@ The mentioned collaboration challenges include: It is worth mentioning that so far the software shared under this InnerSource license is mostly tooling, infrastructure, and tools lower in the stack. +## Airbus + +Airbus created ad hoc InnerSource licenses to enable InnerSource way of working within a large part of the group. + ### GovTech (Singapore Government) GovTech is responsible for the delivery of the Singapore government's digital services to the public. diff --git a/patterns/2-structured/innersource-portal.md b/patterns/2-structured/innersource-portal.md index 141d2fbb7..e362a616a 100644 --- a/patterns/2-structured/innersource-portal.md +++ b/patterns/2-structured/innersource-portal.md @@ -52,10 +52,39 @@ Key properties of the portal are: When launching the portal, a communications campaign promoting the addition of InnerSource data files or meta-data to code repositories should be considered, to bolster the number of projects displayed within the portal. +### Implementations + +#### SAP Project Portal + A [reference implementation](https://github.com/SAP/project-portal-for-innersource) of an InnerSource portal is available on GitHub and open for contributions. It lists all InnerSource projects of an organization in an interactive and easy to use way. Projects can self-register using a dedicated GitHub topic and provide additional metadata. ![Example of an InnerSource Portal](../../assets/img/portal-overview.png "Example of an InnerSource Portal") +#### Wiki + +As a simple way to start, you can set aside a page on an internal wiki for listing out available projects. +An easy way to display this information is in a table with columns giving just a little bit of extra information about the projects. +Try to have just enough columns so that viewers can determine if they want to learn more about the project, but no more. +Too much information will make the page overwhelming and difficult to use. +Individuals and teams can self-add their projects to the page. + +Here is a sample set of columns: + +* **Name**. Name of the project (optionally linked to its homepage). +* **Brief Description**. Explaining the purpose of the project (which problem does it solve?) +* **Technology Pre-requisites**. You must use these technologies in order to on-board to the project. +* **Getting Started**. Link to instructions on how to start using the project. +* **Chat**. Link to a chat channel to ask questions about the project. +* **Host Team**. Seeing if a team is behind the project can help others to have the confidence to use it. +* **Production Since**. How long as the project been used in a production environment? Seeing this information is a rough proxy for its maturity. +* **Contribution**. Link to instructions on how to contribute to the project. + +This solution doesn't allow for a fancy display - it is just a wiki table. +If it's important for you to have a snazzy-looking UI, then this idea won't work for you. +Additionally, if you end up with a lot of projects (e.g. nearing 100), +this solution won't scale to allow the search and filtering or auto-updating of project entries that you'll probably need. +It is a good solution for a portal with a few dozen projects, though. + ## Resulting Context * The InnerSource Portal has enabled InnerSource project owners to advertise their projects to an organization-wide audience. Due to this increased visibility they are attracting much larger communities of contributors than ever before. @@ -78,6 +107,7 @@ A [reference implementation](https://github.com/SAP/project-portal-for-innersour * **Airbus** used the [SAP Portal](https://github.com/SAP/project-portal-for-innersource) as a Proof of Concept. It is now using the [Bazaar plugin](https://github.com/backstage/backstage/blob/master/plugins/bazaar/README.md) of [Backstage](https://backstage.io) as the latter became the official developer experience tool internally. It provides a convenient self-registering capability for all the divisions. * **Mercado Libre** use an instance of the [SAP portal](https://github.com/SAP/project-portal-for-innersource) to discover existing InnerSource projects within the organization. * **Mercedes-Benz** is [using](https://opensource.mercedes-benz.com/news/sponsor_innersource_commonsoss) the SAP reference implementation mentioned above for their InnerSource Portal. +* **WellSky** has a simple _Confluence Wiki_ page were InnerSource and reusable projects are listed. ## References diff --git a/patterns/2-structured/project-setup/issue-tracker.md b/patterns/2-structured/issue-tracker.md similarity index 100% rename from patterns/2-structured/project-setup/issue-tracker.md rename to patterns/2-structured/issue-tracker.md diff --git a/patterns/2-structured/maturity-model.md b/patterns/2-structured/maturity-model.md index 8e410625e..629c2e477 100644 --- a/patterns/2-structured/maturity-model.md +++ b/patterns/2-structured/maturity-model.md @@ -213,6 +213,7 @@ long term. * Entelgy * Zylk * Bitergia +* Airbus ## Authors diff --git a/patterns/2-structured/project-setup/README.md b/patterns/2-structured/project-setup/README.md new file mode 100644 index 000000000..b4045fc26 --- /dev/null +++ b/patterns/2-structured/project-setup/README.md @@ -0,0 +1,3 @@ +# Files moved + +Files from this folder were moved [here](../). diff --git a/patterns/2-structured/release-process.md b/patterns/2-structured/release-process.md index 9ee5188aa..ae46068fd 100644 --- a/patterns/2-structured/release-process.md +++ b/patterns/2-structured/release-process.md @@ -53,7 +53,7 @@ A good example of quality release notes can be found [here](https://github.com/j Teams who come across your project will see published release notes and gain confidence in your tool. Published artifacts also make using your product easier and quicker to adopt. Having well-defined and visible processes such as these also help with cross-team collaboration and new contributors. Folks can be confident that their contributions are made available and distributed in a reasonable amount of time with a clear usage path. -Release notes are also a great opportunity to [praise participants](praise-participants.md)! As we know, [documentation is extremely important](project-setup/base-documentation.md) for new folks looking to get involved with your project. Praising outside teammates for contributions, including documentation and release notes, is a great way to foster community and grow your user base. +Release notes are also a great opportunity to [praise participants](praise-participants.md)! As we know, [documentation is extremely important](base-documentation.md) for new folks looking to get involved with your project. Praising outside teammates for contributions, including documentation and release notes, is a great way to foster community and grow your user base. ## Known Instances diff --git a/patterns/2-structured/repository-activity-score.md b/patterns/2-structured/repository-activity-score.md index c7d699058..dae8f3e2b 100644 --- a/patterns/2-structured/repository-activity-score.md +++ b/patterns/2-structured/repository-activity-score.md @@ -115,6 +115,7 @@ The repository activity score is a simple calculation based on the GitHub API. I ## Known Instances * Used in SAP's InnerSource project portal to define the default order of the InnerSource projects. It was first created in July 2020 and is fine-tuned and updated frequently ever since. When proposed to the InnerSource Commons in July 2020, this pattern emerged. Also see [Michael Graf & Harish B (SAP) at ISC.S11 - The Unexpected Path of Applying InnerSource Patterns](https://www.youtube.com/watch?v=6r9QOw9dcQo&list=PLCH-i0B0otNQZQt_QzGR9Il_kE4C6cQRy&index=6). +* Airbus took a lot of inspiration from this pattern to create an "InnerSource score" that combines the activity score together with checks from the [Standard Base Documentation](./base-documentation.md) and the [InnerSource License](./innersource-license.md). ## Status diff --git a/patterns/2-structured/review-committee.md b/patterns/2-structured/review-committee.md index e1a47e48e..f27d793ea 100644 --- a/patterns/2-structured/review-committee.md +++ b/patterns/2-structured/review-committee.md @@ -30,6 +30,7 @@ Company A wants to introduce its first InnerSource initiative. Most managers in - Every InnerSource project is to be given the chance to react to feedback received on one session of the review committee until the next session in order to avoid shutting down the project prematurely. - An InnerSource project leader can also present the motion to be shut down on its own initiative on a review committee. The review committee then has to decide whether or not the business units using the software need to be given time to put measures in place to ensure that development and/or maintenance of the codebase continues until an alternative solution to development by the InnerSource community is found (if business relevant or mission critical). - The review committee should convene regularly. A cadence of two meetings per year has proven successful. +- The review committee can become optional, if InnerSource has been widely adopted and understood by the organization. ![Review Committee Sketch](../../assets/img/review-committee-sketch.jpg) @@ -40,7 +41,7 @@ Company A wants to introduce its first InnerSource initiative. Most managers in ## Known Instances -* BIOS at Robert Bosch GmbH +* BIOS at Robert Bosch GmbH (in the early stages of adoption, only - 2009-2012) ## Status diff --git a/patterns/2-structured/start-as-experiment.md b/patterns/2-structured/start-as-experiment.md index 53326df2d..56e0c7d31 100644 --- a/patterns/2-structured/start-as-experiment.md +++ b/patterns/2-structured/start-as-experiment.md @@ -54,6 +54,7 @@ Finally, starting as an experiment makes it much easier to sidestep regulations ## Known Instances - Robert Bosch GmbH (globally distributed software development) +- Airbus: the data science community collaborated on shared Python libraries that eventually lead to a group-wide InnerSource scheme for any software. ## Status diff --git a/patterns/2-structured/project-setup/templates/COMMUNICATION-template.md b/patterns/2-structured/templates/COMMUNICATION-template.md similarity index 100% rename from patterns/2-structured/project-setup/templates/COMMUNICATION-template.md rename to patterns/2-structured/templates/COMMUNICATION-template.md diff --git a/patterns/2-structured/project-setup/templates/CONTRIBUTING-template.md b/patterns/2-structured/templates/CONTRIBUTING-template.md similarity index 100% rename from patterns/2-structured/project-setup/templates/CONTRIBUTING-template.md rename to patterns/2-structured/templates/CONTRIBUTING-template.md diff --git a/patterns/2-structured/project-setup/templates/README-template.md b/patterns/2-structured/templates/README-template.md similarity index 100% rename from patterns/2-structured/project-setup/templates/README-template.md rename to patterns/2-structured/templates/README-template.md diff --git a/translation/README.md b/translation/README.md index 0f457061a..7ea75bc04 100644 --- a/translation/README.md +++ b/translation/README.md @@ -45,6 +45,13 @@ There are a few things you should prepare before starting a translation project. However, since git does not create empty folders, it is better to create directories accordingly or add `.keep` files to keep folders. +### Translating Visuals (images, mindmap, etc) + +Most of the translations have not translated the text in the visuals (e.g. in images, the mindmap, etc). However if you like, you can! + +- To translate the mindmap, create a new folder similar to [pattern-categorization/gl](../pattern-categorization/gl/). Then edit the file `innersource-program-mind-map.md` in there, and run the scripts as explained [here](../pattern-categorization/README.md). +- To add translated visuals, add a subfolder in `assets/img`, see [assets/img/gl/](../assets/img/gl/) as an example. Make sure that in the markdown files of your patterns you link to the correct image files. + ### Translation Quality and Review Process We consider it best practice to have **at least one native speaker** review the translation. @@ -62,3 +69,17 @@ They will then get notified on any fixes/additions to the translation in the fut When you complete a translation under `/translation//`, a GitHub Actions pipeline will run to generate the output for publication in the gitbook. The process is described in detail in [/book/README.md](/book/README.md). [^1]: Replace `` with the [2-letter ISO 639-1 language code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) for your language. + +## Maintainer Section + +This documentation contains information that is only relevant for maintainers of this repo. +If you are just creating a new translation you do not need this information! + +**If you are a maintainer of this repo, keep reading :)** + +When a new translation is added, there are a couple of tasks to do: + +a) determine a translation lead, and add them to the relevant files. See [code change](https://github.com/InnerSourceCommons/InnerSourcePatterns/commit/95b8fc76b64909af5e95bf93fad6e7c105307812) +b) [book.yml](../.github/workflows/book.yml) - update the GitHub Actions that generate book. See [code change](https://github.com/InnerSourceCommons/InnerSourcePatterns/commit/241bdf2a12c8750c66e71865a770d321cca67511) +c) [i18n-consistency-checker.yaml](../.github/workflows/i18n-consistency-checker.yaml) - update the GitHub Actions that does the consistency checks. See [code change](https://github.com/InnerSourceCommons/InnerSourcePatterns/pull/619/commits/fce53091faac83b99de8d699d7672a44810408f0) +d) (optional) [generate-mindmap.yml](../.github/workflows/generate-mindmap.yml) - if the mindmap was translated too, you need to update the GitHub Actions that regenerates the mindmap as well diff --git a/translation/gl/patterns/30-day-warranty.md b/translation/gl/patterns/30-day-warranty.md new file mode 100644 index 000000000..d2082290b --- /dev/null +++ b/translation/gl/patterns/30-day-warranty.md @@ -0,0 +1,76 @@ +## Title + +Garantía de 30 días + +## Patlet + +Cando se aceptan contribucións externas, existe unha aversión natural do equipo a asumir a responsabilidade do código que non foi escrito por eles/as. A través da garantía de 30 días, o equipo contribuidor acepta proporcionar correccións de erros ao equipo receptor. Isto aumentará o nivel de confianza de ambos equipos e fará que sexa máis probable que se acepten as contribucións. + +## Problema + +Un equipo desenvolve un compoñente que se emprega na organización e resístese a aceptar ou directamente rexeita as contribucións (*feature requests*). Este comportamento bloquea o progreso e xera frecuentes interrupcións a causa das escaladas. + +## Contexto + +- Os equipos dependen de que outro equipo acepte as súas contribucións para que o compoñente producido polo equipo receptor poida ser empregado polo equipo contribuidor. +- O equipo receptor non dispón dos recursos, dos coñecementos, dos permisos ou da disposición necesaria para escribir, por si mesmo, o compoñente/funcionalidade aportado/a. + +## Aspectos que mellorar + +- Desconfíase das contribucións a causa dun pasado de enganos: os equipos enviaban contribucións que non estaban rematadas e, posteriormente, presentaban peticións de correccións que as deixaban listas para o seu uso en produción. +- Se se aporta código externo, o equipo receptor pode albergar a sospeita natural de que o outro equipo non saiba escribir un código que satisfaga as súas expectativas. +- Cada equipo tenta axudar primeiro a que os/as seus/súas propios/as líderes acaden as súas propias metas. Esta lealdade cara a directiva pode complicar a resolución deste problema. +- Naturalmente, existe un rexeitamento a responsabilizarse do código que non foi escrito por un/unha mesmo/a. +- As contribucións de código deben reescribirse a fondo antes de ser aceptadas na base de código. +- Témese que os/as contribuidores/as non estean dispoñibles para recibir asistencia coa corrección de erros unha vez transcorrido o tempo da contribución. +- Os equipos temen que as contribucións de código xeren custos de mantemento elevados, pero non saben como controlalo. +- Os equipos receptores poden temer que, ensinar a outras persoas a contribuír co código, expoña unha débeda técnica no seu sistema e que a visibilidade poida ser prexudicial. +- É posible que os equipos receptores non crean que obterán un código aceptable por moito asesoramento que brinden. +- Calquera dos equipos pode sentirse inseguro á hora de medir os riscos ou certificar que están mitigados nunha contribución; o sistema en si é algo fráxil (pode que non haxa maneiras de probalo completamente e detectar tódolos problemas). + +## Solución + +Aborde os temores dos equipos receptores e contribuidores establecendo un período de garantía de 30 días, a partir do momento no que a contribución de código entra na fase de produción. Durante este período de garantía, o equipo contribuidor comprométese a proporcionar correccións de erros ao equipo receptor. + +Teña en conta que o período de garantía tamén pode chegar a ser de 45, 60 ou 100 días. A duración pode variar en función das limitacións do proxecto, o ciclo de vida do software do proxecto ou os compromisos cos/coas clientes/as, entre outros factores. + +Ademais, axuda a proporcionar [directrices de contribución](./base-documentation.md) claras, concretando as expectativas do equipo receptor e o equipo contribuidor. + +![Garantía de 30 días](../../../assets/img/thirtydaywarranty.jpg) + +## Contexto resultante + +- O equipo receptor está disposto a aceptar contribucións e pode compartir a carga de traballo das adaptacións/reparacións iniciais. +- Maior transparencia e equidade. +- Evita que as escaladas se volvan demasiado pesadas. + +## Exemplos coñecidos + +- Isto foi probado con éxito en PayPal. +- GitHub emprega internamente este modelo cun prazo de garantía modificado de 6 semanas. +- Microsoft recomenda este modelo coma un principio: os equipos establecen o seu propio obxectivo temporal específico en función das súas necesidades e confianza. + +## Autoría + +- Cedric Willians + +## Recoñecementos + +- Dirk-Willem van Gulik +- Padma Sudarsan +- Klaas-Jan Stol +- Georg Grütter + +## Estado + +* Estruturado +* Redactado no Cume InnerSource de primavera de 2017; revisado o 18 de xuño de 2017. + +## Variantes + +- Garanta a cooperación dos equipos dependentes, converténdoos nunha comunidade mediante a responsabilidade de máis dun/dunha [*trusted commiter*](./trusted-committer.md) (TC), designados/as por meritocracia. + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/base-documentation.md b/translation/gl/patterns/base-documentation.md new file mode 100644 index 000000000..1edbe00ce --- /dev/null +++ b/translation/gl/patterns/base-documentation.md @@ -0,0 +1,102 @@ +### Title + +Documentación base estándar + +## Patlet + +Os/As novos/as contribuidores/as dun proxecto InnerSource teñen dificultades para determinar quen mantén o proxecto, en que traballar e como contribuír. Ao proporcionar documentación en arquivos estándar como `README.md`/`CONTRIBUTING.md` permítese un proceso de autoservizo para os/as novos/as contribuidores/as, de xeito que poidan atopar por si mesmos/as as respostas ás preguntas máis comúns. + +## Problema + +O equipo quere compartir un proxecto iniciado recentemente ou preexistente co resto da empresa e que ese proxecto reciba contribucións. A miúdo, os/as posibles contribuidores/as pérdense. Deste xeito, non conseguen identificar cales son as canles de comunicación predilectas do equipo. Tamén teñen problemas para xulgar con rapidez se ten sentido poñer en marcha unha nova funcionalidade ou non. Por outra banda, resúltalles difícil comprender que compañeiros/as en particular están a manter de xeito activo o proxecto nese momento. + +## Contexto + +O proxecto debe compartirse con outros/as contribuidores/as como proxecto InnerSource. Para que outros/as poidan comprender de que trata o proxecto e como contribuír a el, este debe proporcionar certa documentación básica. Polo de agora, o proxecto carece da documentación ou dalgúns aspectos necesarios para que os/as usuarios/as poidan probalo en modo autoservicio, así como para que os/as contribuidores/as se actualicen rapidamente. + +## Aspectos que mellorar + +- O proxecto converteuse nun proxecto InnerSource fai pouco. Antes, os/as usuarios/as eran só internos/as ou incorporábanse en sesións presenciais cara a cara. Do mesmo xeito, as persoas que traballaban no proxecto asistían a sesións presenciais de incorporación que non se adaptaban ao crecente número de contribuidores/as ou ás situacións daqueles/as que colaboraban en remoto. Como resultado, existe unha falta de documentación de autoservicio. +- O proxecto creouse como unha iniciativa InnerSource fai pouco. Con todo, o equipo anfitrión carece da experiencia con InnerSource. Como consecuencia, este necesita orientación para saber que información incluír na súa documentación, onde colocar esa documentación do código para que outros/as poidan atopala, ademais de entender como dirixirse ás persoas que despois van a ler esa documentación de código. +- O proxecto converteuse nun proxecto InnerSource recentemente, o equipo anfitrión ten experiencia limitada con InnerSource. Como resultado, a documentación de código existente aborda moitos aspectos técnicos. Así a todo, non se aborda a comunicación, a coordinación ou a información necesaria para facilitar unha planificación transparente. +- O proxecto converteuse nun proxecto InnerSource recentemente. Como resultado, a meirande parte do coñecemento implícito que existe dentro do equipo non está escrito, polo que non é visible para os/as contribuidores/as. +- A falta de documentación de código fai que os/as posibles contribuíntes tarden moito tempo en distribuírse e comezar. Elaborar documentación de código (e mantela actualizada) require unha inversión de tempo. Incluso se o equipo anfitrión confía nos/as contribuidores/as para que lle axuden coa documentación de código que falta, esta aínda precisa dun tempo para revisarse. +- Os membros do proxecto pasan moito tempo respondendo a preguntas con respecto á posta en marcha do devandito proxecto. Porén, manter unha base de datos exhaustiva cunha especie de preguntas de asistencia, require moito tempo e esforzo. +- Os distintos equipos da empresa teñen estándares diverxentes respecto a como formatar o código fonte e que modelos de software empregar. Por conseguinte, a miúdo a maior parte de contribucións teñen que reescribirse ata incluso na súa totalidade. Estandarizar estes aspectos e facer que se cumpra a norma adoita requirir de moito tempo e traballo. +- O traballo adicional resultado das explicacións repetidas e as reescrituras diminúe a utilidade do enfoque InnerSource. +- As escaladas frecuentes por mor do traballo adicional e dos atrasos son o resultado das reescrituras de código e, estas, conducen a unha situación que require a intervención dun/dunha especialista. + +## Solución + +Abordar a necesidade de establecer unha documentación de código máis clara para os/as novos/as contribuidores/as. O obxectivo á hora de crear esta documentación de código debería ser que a posta en marcha sexa un proceso de autoservizo na medida do posible, que dea resposta ás preguntas máis frecuentes nun formato de documentación estándar. + +### README.md + +Se aínda non o fixo, cree un arquivo `README.md` para o seu proxecto que conteña: + +- [A misión do proxecto](https://producingoss.com/en/producingoss.html#mission-statement) no formato máis conciso posible. Debe dar resposta ao propósito do proxecto e permitir que os/as contribuidores/as se fagan unha idea inicial de se é probable que a posta en marcha da funcionalidade suxerida estea dentro do alcance do proxecto ou non. +- Unha sección de «Comezo» para os/as usuarios/as intermedios/as do proxecto. Esta sección debe explicar como configurar/integrar os dispositivos do proxecto, así como tamén ha de incluír unha explicación dalgúns dos primeiros pasos habituais para os/as usuarios/as recentemente incorporados/as. +- Documentación máis detallada para os/as usuarios/as do proxecto ou unha ligazón á mesma. +- Documentación necesaria para realizar modificacións no proxecto ou unha ligazón á mesma. +- Documentación sobre como contribuír ao proxecto ou unha ligazón á mesma. +- Unha sección de «Comezo» que explique que canles de comunicación públicas, arquivadas e asociadas se empregan no proxecto. Isto debe incluír unha ligazón ao sistema de seguimento de incidencias do proxecto, pero tamén a calquera outro medio de discusión utilizado. +- Unha sección de «Quen somos?» na que se explica quen son os/as [*trusted committers*](./trusted-committer.md) que están detrás do proxecto, cunha explicación na que se especifica que, na contra de contactar a estas persoas en privado, débense empregar as canles de comunicación públicas mencionadas anteriormente. +- Unha explicación que expoña os criterios do proxecto polos que os/as contribuidores/as pasan a ser *trusted committers*, no caso de que exista esa posibilidade. + +![README.md](../../../assets/img/gl/README-for-users.png) + +### CONTRIBUTING.md + +Se a guía dos pasos para facer unha contribución é demasiado complicada, cree un documento CONTRIBUTING.md por separado. Este documento debe responder ás preguntas máis frecuentes que outros/as contribuidores/as fixeron no pasado. Non hai necesidade de proporcionarlles un libro detallado con antelación. Máis ben, comparta a información que sexa indispensable para os/as contribuidores/as. É probable que esta información aborde un ou máis dos seguintes temas: + +- Como verificar o código fonte do proxecto desde o control de versións. +- Como facer as modificacións no proxecto (que posiblemente inclúa información sobre as pautas de codificación). +- Como construír o proxecto. +- Como executar probas para asegurarse de que as modificacións anteriores non engaden novos *bugs*. +- Como enviar as súas modificacións ao proxecto. +- Información sobre o tempo total necesario para que se fagan as modificacións. + +![CONTRIBUTING.md](../../../assets/img/gl/CONTRIBUTING-for-contributors.png) + +Existen moitos e moi bos exemplos de como escribir a un `README.md`, así como do tipo de información que incluír nun arquivo `CONTRIBUTING.md` en varios proxectos de software libre. Páxinas como [*How to write a readme that rocks*](https://m.dotdev.co/how-to-write-a-readme-that-rocks-bc29f279611a) [Como escribir un README que sexa un éxito], [*Open Source Guide from GitHub*](https://opensource.guide/) [Guía de software libre en Github], así como o libro [*Producing Open Source*](https://producingoss.com/en/producingoss.html) [A creación do software libre] conteñen información valiosa sobre o tipo de información que precisa proporcionar aos/ás contribuidores/as. Posto que *Producing Open Source* non contén un capítulo sobre como escribir un bo README *per se*, o capítulo «[Getting Started](https://producingoss.com/en/producingoss.html#starting-from-what-you-have)» [Comezo] proporciona unha listaxe bastante extensa de cousas que necesitarán os membros do *host team*, os/as usuarios/as e os/as contribuidores/as. É probable que os proxectos InnerSource non cubran todos eses aspectos desde o comezo, pero a listaxe en si é útil a modo inspiración que serve para determinar aquelas áreas que se poderían incluír. + +Ademais, este modelo contén dous exemplos moi básicos para que poida iniciarse de inmediato: [README-template.md](../templates/README-template.md) e [CONTRIBUTING-template.md](../templates/CONTRIBUTING-template.md) + +## Contexto resultante + +- O tempo que tardan os/as contribuidores/as en poñerse ao día redúcese de xeito significativo. +- Redúcese de xeito considerable o tempo dedicado a responder ás preguntas iniciais dos/as [*trusted committers*](./trusted-committer.md), o que lles permite ter máis tempo para traballar noutras tarefas. +- As escaladas por mor de malentendidos e discordancias redúcense de xeito significativo. + +## Exemplos coñecidos + +- Europace AG - Ver entrada do blog [*InnerSource: Adding base documentation*](https://tech.europace.de/post/innersource-base-documentation/) [InnerSource: Como engadir documentación base]. +- Paypal inc. +- Mercado Libre: cree un sitio de documentación que conteña instrucións para iniciarse en InnerSource e tamén defina os elementos básicos que debe ter un repositorio para poder ser considerado InnerSource (README, CONTRIBUTING, CODING_GUIDELINES etc.). + +## Autoría + +* Isabel Drost-Fromm + +## Título alternativo + +Proporcionar documentación base estándar a través dun README + +## Estado + +* Estruturado +* Redactado en decembro de 2019 + +## Referencias + +* [README-template.md](../templates/README-template.md) +* [CONTRIBUTING-template.md](../templates/CONTRIBUTING-template.md) + +## Créditos + +Ilustracións de [xente](https://storyset.com/people) e [web](https://storyset.com/web) de Storyset + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/common-requirements.md b/translation/gl/patterns/common-requirements.md new file mode 100644 index 000000000..ab9d7d435 --- /dev/null +++ b/translation/gl/patterns/common-requirements.md @@ -0,0 +1,77 @@ +## Title + +Requisitos comúns + +## Patlet + +O código común dun repositorio compartido non satisfai as necesidades de tódolos equipos do proxecto que desexan empregalo; isto resólvese mediante a aliñación de requisitos e a refactorización. + +## Problema + +O código común do repositorio compartido non satisfai as necesidades de tódolos proxectos que queren empregalo. + +## Contexto + +* Moitos proxectos están tentando empregar un código común. Tódolos proxectos teñen acceso a un repositorio compartido. +* Alguén (ou algún proxecto) escribe o código desde o principio e apórtao ao repositorio. +* O código común é unha pequena porcentaxe da entrega global de calquera dos proxectos. +* Cada proxecto ten o seu propio calendario de entrega, o seu propio conxunto de entregables e os/as seus/súas propios/as clientes/as. +* Este modelo aplícase en calquera destas situacións: + * Existe un/unha **propietario/a do código sólido**; de modo que tódolos cambios no repositorio compartido deben ser aprobados por el/ela. + * A **propiedade do código é débil**, polo que ninguén é o/a propietario/a do código realmente. + * Non hai **un/unha patrocinador/a benévolo/a**, polo que ningunha organización ou executivo/a proporciona recursos para organizar o código común á maneira InnerSource. + +## Aspectos que mellorar + +O proxecto que fixo que o código estivera dispoñible ten certas necesidades, similares ás de parte da organización receptora, pero non exactamente as mesmas. Os requisitos do código han de derivarse das necesidades reais do/a cliente/a. + +As necesidades dos/as distintos/as clientes/as adoitan ser bastante similares; con todo, poden expresarse de maneira diferente ou ponderarse de distinto xeito entre uns/unhas clientes/as e outros/as. Un exemplo podería ser que algúns/algunhas clientes/as queren que un resultado se presente dunha maneira, mentres que outros/as queren que se presente na orde contraria. É sinxelo facer a tradución entre eles/as, pero require codificación adicional para un dos casos e, como resultado, o compoñente que computa o resultado non pode ser reempregado para ambos/as clientes/as. + +Moitos/as clientes/as queren que o/a provedor/a lles axude no que precisan. A empresa ten moitos/as enxeñeiros/as de sistemas que redactan os requisitos para os produtos. Suponse que estes requisitos foron extraídos das necesidades do/a cliente/a para guiar o desenvolvemento do produto. Reempregar o código é un obxectivo importante para aforrarlle tempo e diñeiro á empresa. + +## Solución + +Hai dous aspectos que deben facerse en paralelo para resolver este problema: + +1. Aliñar os requisitos dos proxectos para que o código que cumpra os requisitos dun proxecto tamén cumpra as necesidades dos demais proxectos. +2. Refactorizar o código en fragmentos máis pequenos para que os numerosos proxectos que o empregan poidan poñerse de acordo acerca dos requisitos. + +Ademais, aproveite que os/as clientes/as esperan que o/a provedor/a axude a dilucidar os requisitos. Consiga a aliñación dos requisitos durante as negociacións cos/coas clientes/as e inflúa nos requisitos do/a cliente/a na contra de cambiar o compoñente. + +No exemplo presentado anteriormente, o/a provedor/a axuda a ambos/as clientes/as a darse conta de que queren o mesmo e aforraralles esforzo (e diñeiro) a todos/as se se poñen de acordo á hora de elixir o resultado no mesmo formato. + +![Requisitos comúns](../../../assets/img/CommonReqtsv2.jpg) + +## Contexto resultante + +Para isto podería ser necesario negociar os cambios nos requisitos co/coa cliente/a. Os cambios tamén poden requirir a participación dos equipos de ventas e dos/as xefes/as de produtos para conseguir a aliñación cos requisitos. O/A cliente/a pode necesitar incentivos, como descontos, para aceptar os cambios. + +Un reto relacionado (e un posible modelo novo) é un exercicio circular de redacción de historias de usuario/a do que se informa nunha empresa que emprega InnerSource. En poucas palabras: + +* Os/As desenvolvedores/as escriben unha historia de usuario/a para resolver un problema dunha maneira. +* Os/As directivos/as do programa reescriben a historia de usuario/a para expresar mellor as súas necesidades, mantendo a mesma esencia. No momento no que regresa ás mans dos/as desenvolvedores/as, estes/as non recoñecen o que querían facer nun primeiro lugar e, por tanto, resístense a poñelo en práctica. +* A solución a este modelo é contar con máis asentos arredor da mesa de planificación para que as modificacións da historia de usuario/a se entendan en todo o proxecto, non só no grupo dos/as desenvolvedores/as ou directivos/as de programas. + +## Exemplos coñecidos + +* Gran provedor/a de telecomunicacións + +## Estado + +* Estruturado + +## Autoría + +* Roberto Hanmer + +## Recoñecementos + +* Manrique López +* Daniel Izquierdo +* Tim Yao +* Sebastian Spier + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/communication-tooling.md b/translation/gl/patterns/communication-tooling.md new file mode 100644 index 000000000..92e80e4f3 --- /dev/null +++ b/translation/gl/patterns/communication-tooling.md @@ -0,0 +1,83 @@ +## Title + +Ferramentas de comunicación + +## Patlet + +Os/As usuarios/as dun proxecto InnerSource teñen problemas para obter axuda e poñerse en contacto co *host team*. Mediante o uso sistemático de ferramentas de comunicación asíncrona, os debates serán visibles e permanecerán arquivados e accesibles; o que se traduce nunha mellora do nivel de asistencia aos/ás usuarios/as. + +## Problema + +Un equipo está aberto a recibir contribucións de usuarios/as intermedios/as do seu compoñente. A coordinación e a comunicación prodúcense de maneira *ad hoc*, o que causa que se comparta información incoherente, que se reciban respostas con atraso ou que os/as contribuidores/as fagan *ping* a varios membros do *host team* antes de recibir unha resposta definitiva. + +## Contexto + +- Hai un equipo dependente do compoñente do outro equipo. +- Hai un equipo ao que lle gustaría facer contribucións a ese compoñente. +- Incluso cando isto ocorre por escrito, a comunicación ten lugar de maneira individual. + +## Aspectos que mellorar + +- O equipo anfitrión está interesado en recibir contribucións e disposto a asesorar aos/ás contribuidores/as. +- Os equipos teñen unha cultura sólida baseada na comunicación verbal e non teñen experiencia na configuración de canles de comunicación asíncrona específicas do proxecto. +- As canles de comunicación poden estar aliñadas cos grupos específicos aos que se debe chegar, pero non por un propósito comunicativo. + +## Solución + +O *host team* debe proporcionar canles de comunicación públicas, arquivadas, con capacidade de busca e vinculables ás que poida subscribirse calquera persoa da empresa; posto que o apoio ás canles abertas de comunicación escrita aporta beneficios medibles. + +O obxectivo ao optimizar as canles de comunicación para os proxectos InnerSource debe ser aliñar a comunicación arredor de temas, non arredor de certos grupos de persoas. + +Un proxecto debe establecer as seguintes ferramentas de comunicación: + +1. **Un sistema especializado de seguimento de incidencias** co que avaliar o progreso que estruture a comunicación e a toma de decisións de xeito transparente para tódolos membros do equipo anfitrión, pero tamén para os/as futuros/as usuarios/as intermedios/as e contribuidores/as. Para coñecer máis aplicacións deste sistema, consulte [Casos de uso cun sistema de seguimento de incidencias](./issue-tracker.md). +2. **Canles conversacionais públicas** cunha estrutura menos ríxida. Polo xeral, trátase de listaxes de correo, foros en liña, sistemas *Q&A* ou, incluso, canles de chat arquivadas. Normalmente, abonda con comezar cunha soa canle para o proxecto. Se o tráfico aumenta demasiado, é útil separar as conversacións sobre o uso do proxecto das outras acerca do desenvolvemento do proxecto. +3. **Unha canle privada na que poida ter lugar** a comunicación entre os/as [*trusted committers*](./trusted-committer.md) sobre os temas máis sensibles; como, por exemplo, incorporar a máis *trusted comitters* ao *host team*. Esta canle debe empregarse con sumo coidado, de xeito que a comunicación sexa aberta por defecto e só se manteña privada en circunstancias moi excepcionais. + +Mentres que a comunicación pode ter lugar fóra desas canles escritas, debería ser devolta ás canles asíncronas tanta información como sexa posible. + +Tódalas canles de comunicación deberían estar documentadas no proxecto README.md. Para obter máis información acerca do emprego deste arquivo vexa [Documentación base estándar](./base-documentation.md). + +Os membros do *host team* necesitan facer o esforzo de dirixir as preguntas que reciban persoalmente (por exemplo, por medio do correo electrónico ou chats de mensaxería) de volta á comunicación nas canles oficiais. + +![Ferramentas de comunicación recomendadas para os proxectos InnerSource](../../../assets/img/gl/communication-tooling.png) + +## Contexto resultante + +Establecer e empregar sistematicamente canles oficiais de comunicación asíncrona axuda a crear o nivel base da [documentación de pasivos](https://www.oreilly.com/library/view/understanding-the-innersource/9781491986899/ch04.html) que pode volver a consultarse cando xurdan preguntas similares. + +Cando a comunicación é aberta, os/as demais poden seguir facilmente o progreso do proxecto e obter contribucións activas. O feito de que outros/as estean espreitando e poidan lelas reduce a barreira de participación e aumenta a probabilidade de recibir contribucións. + +Se as preguntas se contestan en público, máis persoas poden aportar a súa opinión, o que conduce a ter unha visión xeral: Isto inclúe non só aos membros do *host team*, senón tamén aos/ás usuarios/as do proxecto. + +Manter a comunicación en canles asíncronas permite que os/as participantes con horarios diferentes —xa sexa por mor das diferenzas horarias, por ter rutinas de traballo diferentes, diferentes calendarios de reunións ou rutinas de traballo en equipo— contribúan de xeito significativo ao proxecto. + +Responder ás preguntas nesas canles significa que non só outros membros do equipo poden escoitar e proporcionar información adicional, senón que tamén outros/as usuarios/as que teñan a mesma pregunta poden consultar (e máis tarde atopar) a resposta; o que reduce a necesidade de repetir as explicacións. + +## Exemplos coñecidos + +* Europace AG +* Paypal Inc. +* Mercado Libre + +## Autoría + +* Isabel Drost-Fromm + +## Recoñecementos + +* Sebastian Spier (nos visuais) + +## Status + +* Estruturado +* Redactado en decembro de 2019 + +## Créditos + +Ilustracións de [xente](https://storyset.com/people) de StorySet. + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/contracted-contributor.md b/translation/gl/patterns/contracted-contributor.md new file mode 100644 index 000000000..e3ae04824 --- /dev/null +++ b/translation/gl/patterns/contracted-contributor.md @@ -0,0 +1,91 @@ +## Title + +*Contracted contributor* + +## Patlet + +Os/As socios/as que desexen contribuír a InnerSource son disuadidos/as de facelo polos/as seus/súas superiores/as. Os contratos e acordos formais son un alivio. + +## Problema + +Sen o apoio dos/as responsables de área, é probable que o número total de contribuidores/as e, en consecuencia, a cantidade de contribucións realizadas, así como o calidade xerada pola iniciativa InnerSource, sexa inferior á das expectativas dos altos cargos. Probablemente esta situación se vexa agravada se non se financia adecuadamente aos/ás [líderes da comunidade expertos/as en InnerSource](./dedicated-community-leader.md) e se lles capacita correctamente. Córrese o risco de que a dirección decida non seguir adiante coa inicitiva InnerSource. + +## Contexto + +Unha gran corporación puxo en marcha unha iniciativa InnerSource. Os principais obxectivos da iniciativa son aumentar a eficiencia do desenvolvemento do software distribuído e fomentar a innovación permitindo que tódolos/as traballadores/as contribúan voluntariamente nos proxectos InnerSource, independentemente do tema e da unidade de negocio. + +Os altos cargos apoian a iniciativa InnerSource. Para eles/as, é só unha das moitas iniciativas para fomentar a innovación e a eficacia. Financian InnerSource con diñeiro e capacitación para os/as *líderes da comunidade*, ademais de dotalos/as de autonomía para o gasto do presuposto. Tamén limitan a amplitude e a duración da iniciativa e participan en revisións periódicas ata que haxa probas de que da os resultados esperados (vexa [Comité de revisión](./review-committee.md)). Os/As directivos/as anunciaron o seu apoio á iniciativa InnerSource en varias reunións internas de empresa. + +Con todo, aínda non capacitaron ou incentivaron aos/ás responsables de área para que permitan, ou incluso motiven, aos/ás seus/súas traballadores/as a participar en actividades InnerSource interdivisionais. Ademais, a capacidade de cada socio/a adoita asignarse a proxectos alleos a InnerSource durante toda a súa xornada de traballo. A colaboración entre organizacións aínda non é a norma e os cargos superiores non adoitan ter obxectivos fóra da súa propia compañía. Espérase que as contribucións aos proxectos InnerSource teñan lugar durante o horario laboral, non durante o tempo libre. + +## Aspectos que mellorar + +- O persoal directivo é responsable dos resultados das súas unidades de negocio. Permitir que o seu persoal participe en actividades InnerSource nas que poderían perder tempo facendo contribucións fóra da súa área empresarial, reduce eficazmente a capacidade da súa unidade. É probable que isto dificulte que o persoal directivo alcance ou supere os seus obxectivos. +- Os/As responsables de área e RR HH xulgarán, por defecto, o rendemento dos/as seus/súas subordinados/as en función dos obxectivos das súas unidades de negocio, que poderían non estar aliñados cos obxectivos da comunidade InnerSource. +- Canto menor sexa o apoio executivo percibido polo/a superior/a inmediato/a, menos probable será que permita que o seu persoal participe en actividades InnerSource que contribúan a outra unidade de negocio. +- Canta menor transparencia e control teña o/a superior/a do traballo realizado por un/unha dos/das seus/súas subordinados/as, menos probable será que lles permita facer contribucións. +- Canto menos formal sexa a xestión e organización do traballo en InnerSource, menos probable será que un cargo superior acostumado aos procesos oficiais autorice a un/unha dos/as seus/súas traballadores/as a contribuír en InnerSource. +- Canto máis tempo dedique un/unha socio/a a contribuír a un proxecto InnerSource que non beneficie ao seu propio traballo diario, máis aumentará a carga de traballo para os/as seus/súas compañeiros/as de equipo na súa unidade de negocio. +- É probable que os/as contribuidores/as individuais consideren participar en InnerSource para ter a oportunidade de mellorar a súa rede profesional dentro da empresa e adquirir coñecementos e experiencia na área técnica das súas contribucións. + +## Solución + +Estableza un sistema de contratación formal entre o/a contribuidor/a, o/a seu/súa superior/a e unha oficina de gobernación InnerSource (ISGO), financiada e dirixida de maneira centralizada. Faga que a ISGO reembolse ás unidades de negocio que contrataron a contribuidores/as polo tempo contratado. + +- A contratación especifica unha porcentaxe máxima de tempo de traballo dos/as socios/as en InnerSource. +- A contratación establece, claramente, que o traballo na unidade de negocio do/a contribuidor/a ten prioridade sobre o traballo en InnerSource. +- A contratación establece que non é obrigatorio traballar en InnerSource durante a porcentaxe máxima especificada no contrato. +- A contratación está firmada polo/a contribuidor/a, o/a seu/súa superior/a inmediato/a, a oficina de gobernación e o/a [líder da comunidade experto/a en InnerSource](./dedicated-community-leader.md) coa que vaia colaborar o/a contribuidor/a. +- A oficina de gobernación ofrécese a mediar entre o/a contribuidor/a e o/a seu/súa superior/a en caso de conflito acerca do horario das contribucións. +- O/A [líder da comunidade experto/a en InnerSource](./dedicated-community-leader.md) participa nas revisións do rendemento dos/as contribuidores/as contratados/as por máis dun 20% ou realiza aportacións ás mesmas. + +![*Contracted contributor*](../../../assets/img/contracted-contributor.png) + +## Contexto resultante + +A contratación formal e os reembolsos financiados de xeito centralizado comunican de forma convincente o apoio da organización á iniciativa InnerSource, capacitando así aos mandos intermedios para que aproben a devandita iniciativa: + +- A asignación dos fondos corporativos das unidades de negocio para o reembolso da capacidade de desenvolvemento indícalles aos/ás responsables de área que InnerSource aporta valor á organización, que conta con apoio executivo e que se espera que tamén eles/as a apoien. +- A contratación formal indica que o traballo mediante InnerSource se xestiona de xeito profesional e inspira confianza. +- Unha contratación formal aumenta a transparencia e proporciona unha mellor visión de conxunto sobre a capacidade dispoñible do/a socio/a para a súa unidade de negocio e sobre os seus proxectos InnerSource, reducindo así o risco de planificar en exceso a capacidade de produción. + +A contratación formal tamén é beneficiosa para os/as contribuidores/as e as comunidades: + +- Cun grupo estable de contribuidores/as, é moito máis probable que algúns/algunhas deles/as rematen acadando o status de [*Trusted committer*](./trusted-committer.md) +- Unha contratación formal proporciona un marco para resolver conflitos vencellados á participación nas actividades InnerSource. Teña en conta que probablemente a mediación só sexa frutífera para as compañías que teñan unha cultura que o propicie. + +## Exemplos coñecidos + +- BIOS na empresa Robert Bosch GmbH + +## Estado + +- Estruturado + +## Autoría + +- Georg Grütter (Robert Bosch GmbH) + +## Recoñecementos + +- Diogo Fregonese (Robert Bosch GmbH) +- Robert Hansel (Robert Bosch GmbH) +- Jim Jagielski +- Tim Yao +- Klaas-Jan Stol +- Padma Sudarsan +- Nick Stahl +- Ofer Hermoni +- Robert C. Hanmer + +## Rexistro de cambios + +- **2016-10-25:** Primeira revisión +- **2017-05-09:** Reelaboración +- **2017-09-08:** Segunda revisión, reelaboración final e unificación +- **2021-02-27**: Solución de cuestións coa visualización do modelo do libro + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/core-team.md b/translation/gl/patterns/core-team.md new file mode 100644 index 000000000..80b65c711 --- /dev/null +++ b/translation/gl/patterns/core-team.md @@ -0,0 +1,95 @@ +## Title + +*Core team* + +## Patlet + +Incluso cando se necesita moito un proxecto InnerSource, as colaboracións e o seu uso poden verse obstaculizados porque é difícil traballar co proxecto. Estableza un *core team* que se dedique a coidar dos elementos fundamentais do proxecto. O traballo do *core team* permite aos/ás contribuidores/as engadir e empregar as funcionalidades que aportan valor aos seus escenarios. + +## Problema + +- É difícil contribuír ao proxecto. Isto podería deberse a aspectos como: + - Non se pode executar o proxecto de maneira local. + - Documentación deficiente. + - Código intrincado. + - Probas inadecuadas. +- É difícil usar o proxecto. Algunhas causas posibles son: + - Documentación deficiente (unha vez máis). + - Erros frecuentes. + - Configuración pouco intuitiva. + +## Historia + +Hai un proxecto central do que todos/as dependen. Gran candidato para InnerSource! Desafortunadamente, o proxecto creceu de maneira orgánica e con varias contribucións e adicións fortuítas. Agora trátase dunha maraña de código desordenado e denso que ninguén entende e no que todo o mundo ten medo a somerxerse. Está claro que necesita unha revisión (por exemplo, refactorización, probas, documentación etc.), pero aínda que todos/as necesitan e queren que se leve a cabo a tarefa, ninguén emprega tempo en facelo. + +## Contexto + +- Moitos equipos necesitan o proxecto. +- O proxecto ten unha débeda tecnolóxica significativa. +- A adopción e iteración do proxecto é lenta. +- Non hai un/unha propietario/a ou encargado/a do mantemento que asuma a responsabilidade do proxecto e o ecosistema de contribución no seu conxunto. + +## Aspectos que mellorar + +- Tódolos equipos contribuidores están ocupados e, por tanto, priorizan o traballo que supón unha recompensa inmediata para eles mesmos. +- A medida que o proxecto crece, a tendencia natural é que se volva máis difícil de empregar e modificar. + +## Solución + +Forme un *core team* cuxo traballo sexa manter este proxecto nun estado no que outros/as poidan incorporarse e contribuír facilmente. Este equipo leva a cabo o traballo necesario para crear un ecosistema saudable de uso e de contribución. Este traballo crítico a miúdo non se prioriza tanto como a contribución. As categorías deste tipo de traballo inclúen a comunicación, un entorno local e unha infraestrutura DevOps. + +Velaquí algúns exemplos específicos: + +- Erros de produción. +- Documentación. +- Titorial de incorporación e exemplos. +- CI/CD. +- Medio local. +- Modularización. +- Versión actualizada. +- Monitorización. +- Clases/categorías de funcionalidades pioneiras. + +Cada un destes elementos é moi importante para un ecosistema de produtos saudable, pero é pouco probable que se lle dea tanta prioridade como á contribución. + +O *core team* pode estar composto por un pequeno número de persoas a tempo completo ou parcial. A elección depende da cantidade de traballo necesario, a dispoñibilidade de recursos e a cultura da organización. A consideración máis importante é formar ao equipo de maneira que permita á organización capacitalos e responsabilizalos da mesma maneira que a outro equipo calquera. + +Por mor do seu rol central, os membros do *core team* case sempre deben desempeñar tamén o rol de ***trusted committers*** (para obter máis información acerca deste concepto, consulte [Learning Path](https://innersourcecommons.org/learn/learning-path/trusted-committer/) ou *Ruta de aprendizaxe* e o [modelo](./trusted-committer.md)). Se ben o rol de *trusted committer* se centra principalmente en facilitar a contribución e o uso do proxecto por parte doutros/as, un membro do *core team* tamén contribúe regularmente ao proxecto. O *core team* non ten unha axenda propia que determine as súas contribucións. Estes deciden en que traballar en función daquilo que máis axudará aos/ás demais a empregar e contribuír ao proxecto. + +Unha boa maneira de recordarlles constantemente ao equipo central este obxectivo é facer que estes proporcionen información regularmente sobre: + +- O número de equipos activos que emprega o proxecto. +- O número de contribucións externas ao equipo. + +Centrarse de xeito continuo nestas métricas, naturalmente, impulsará ao *core team* a priorizar, en xeral, o traballo axeitado co fin de crear un ecosistema InnerSource próspero arredor do proxecto. + +![Responsabilidades do *core team* e dos/as contribuidores/as de InnerSource](../../../assets/img/gl/core-team.png) + +## Contexto resultante + +- É doado de empregar e contribuír ao proxecto. +- Moitos equipos empregan e contribúen ao proxecto. +- O éxito do *core team* defínese nos termos da interacción dos/as demais e a resposta ao seu proxecto. + +## Fundamento + +Separar a un *core team* e asignarlle tarefas axuda a encher os baleiros que necesita un proxecto frutífero e que, porén, exclúe aos/ás contribuíntes que só se preocupan dos seus propios obxectivos. O *core team* enche eses baleiros e engraxa as rodas para que o ecosistema de contribución se manteña saudable. + +## Exemplos coñecidos + +- **Nike** aplicou este modelo para xestionar o esforzo InnerSource arredor das súas planificacións non reutilizables de CI/CD. +- **WellSky** estableceu un *core team* para un proxecto chave. Isto permitiulles escalar as súas contribucións InnerSource a ese proxecto de xeito significativo; vexa [*Wide-Scaled InnerSource with a Core Team*](https://www.youtube.com/watch?v=kgxexjYdhIc) [InnerSource de grande escala cun *core team]*. +- **BBVA AI Factory** aplicou este modelo como parte dunha estratexia InnerSource para fomentar a contribución e a reutilización do código de ciencia de datos; vexa [*Mercury: Scaling Data Science reusability at BBVA*](https://www.bbvaaifactory.com/mercury-acelerando-la-reutilizacion-en-ciencia-de-datos-dentro-de-bbva/) [Mercury: Acelerando a reutilización da ciencia de datos en BBVA]. + +## Estado + +- Estruturado + +## Autoría + +* [Russell R. Rutledge](https://github.com/rrrutledge) + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/crossteam-project-valuation.md b/translation/gl/patterns/crossteam-project-valuation.md new file mode 100644 index 000000000..0f8f6e862 --- /dev/null +++ b/translation/gl/patterns/crossteam-project-valuation.md @@ -0,0 +1,101 @@ +## Title + +Valoración de proxectos entre equipos + +## Patlet + +É difícil convencer acerca do valor dos proxectos InnerSource desenvolvidos entre equipos que non teñen un impacto directo nos ingresos da empresa. Velaquí unha forma de representar o seu proxecto baseada en datos, que articula o seu valor e amplifícao. + +## Contexto + +- Vostede é responsable da colaboración entre equipos que serve de plataforma para outros/as traballadores/as da empresa. +- O proxecto de colaboración entre equipos non aporta ningún valor directo aos ingresos da empresa. + +## Problema + +Os proxectos de colaboración entre equipos poden ter un grande impacto na empresa, pero son difíciles de representar mediante datos. En consecuencia, é doado e habitual seguir adiante con proxectos que non aportan valor real ou non inverter suficiente diñeiro, o que, en caso contrario, si aportaría un gran valor. + +## Aspectos que mellorar + +- Os proxectos deben amosar valor (obxectivo ou subxectivo) ao liderado da empresa para que se poidan financiar. +- O valor do proxecto de colaboración entre equipos distribúese entre múltiples unidades comerciais afíns. +- Por mor desta dispersión, o valor do proxecto de colaboración entre equipos é difícil de medir de xeito directo. + +## Solución + +Estableza un modelo e unha fórmula para avaliar os proxectos de colaboración entre equipos. Estes modelos bríndannos a ferramenta que necesitamos para centrar e amplificar a colaboración de gran valor para a empresa. + +O núcleo do valor de todo proxecto de colaboración entre equipos é a idea de que podemos facer máis cousas xuntos/as que separados/as. Atribuírlle valor ao esforzo de colaboración entre equipos é un exercicio para cuantificar *canto máis* se está avanzando xuntos/as. O *delta* exacto de produtividade variará segundo o ámbito e o proxecto. Existe un proceso común, mediante o cal pode crear unha fórmula para calculalo. + +### Explicación + +Reúna a un pequeno equipo de expertos/as na materia do seu ámbito. Empregando ese equipo de expertos/as, estime catro aspectos sobre cada consumidor/a da produción do seu proxecto: + +- Canto tempo lles leva consumir a produción do seu proxecto? +- Canto tempo lles levaría, pola contra, calcular o valor da produción do seu proxecto por si mesmos/as? +- Que porcentaxe da produción do seu proxecto é realmente útil para eles/as? +- Canto tempo (por uso óptimo) dedicarían a empregar unha solución caseira? + +Á hora de facer estas estimacións, é imposible saber con gran precisión canto tempo leva cada actividade. Ese non é o seu obxectivo. En lugar da exactitude, debe esforzarse en ***establecer un límite para delimitar o peor escenario posible*** destas estimacións. + +A idea é que o grupo de expertos/as poida dicirse uns/unhas a outros/as: «Non sabemos exactamente canto tempo nos levaría, pero todos/as estamos de acordo en que, *polo menos*, levaríanos este tempo.». Concretamente, debe estimar un tempo *máximo* razoable e tempos *mínimos* razoables para que os/as consumidores/as poidan, por outra parte, improvisar e aplicar as súas propias solucións. + +Un apunte sobre o custo de idear unha «solución caseira propia»; o custo de pór en marcha unha solución caseira NON é necesariamente (de feito, é moi pouco probable) o mesmo que o de crear unha solución común. A miúdo, para a mesma funcionalidade, a modularidade e a calidade involucradas na creación dunha solución mediante a colaboración entre equipos, fai que sexa unha inversión notablemente maior que unha aplicación rápida e codificada que se emprega só unha vez. + +### Fórmula + +Unha vez que teña os límites do peor escenario posible, pode valorar o resultado do seu proxecto de colaboración entre equipos durante un período de tempo concreto a través da sinxela fórmula: + +``` +[Time Saved] - [Time Invested] + +([Count of New Onboardings] * [Cost to Home-Roll] * [Percent Useful Functionality] + [Count of Usages] * [Maintenance Cost Per Use]) - ([Count of New Onboardings] * [Cost to Onboard]) + +[Count of New Onboardings] * ([Cost to Home-Roll] * [Percent Useful Functionality] - [Cost to Onboard]) + [Count of Usages] * [Maintenance Cost Per Use] +``` + +### Comentario + +A pesar do seu rigor, este proceso non produce unha forma exacta para medir o resultado nun proxecto de colaboración entre equipos. Na práctica, con todo, brinda un marco mediante o cal pode tomar unha decisión acertada para financiar este traballo. Tras dispor de datos fiables e razoables, de acordo coa explicación anterior, debe financiar as horas de desenvolvemento dedicadas a executar o proxecto ata, **polo menos**, chegar ao nivel máis baixo destes tres niveis seguintes: + +1. As horas brutas que se aforraron mediante a fórmula anterior. Posto que todos/as estamos seguros/as de que a fórmula devolveranos unha cifra inferior ao número real de horas aforradas, pode estar seguro/a de que financiar o proxecto é unha vitoria asegurada. +2. A cantidade de tempo que se necesita para apoiar as contribucións InnerSource a proxectos de colaboración entre equipos. Posto que o/a contribuidor/a probablemente tería feito o traballo de tódolos xeitos puntualmente, merece a pena financiar o tempo que se necesita para facilitar que o seu traballo pase a estar nunha arquitectura de información compartida. +3. O que a vostede lle pareza mellor. Un efecto secundario intencionado de dispor dunha fórmula de valoración é que, naturalmente, obriga a medir puntos chave que aportan valor aos/ás consumidores/as. + +Esas medicións poden entenderse e consumirse na súa forma bruta para que vostede poida intuír a valía deste proxecto: + +Pode que a algúns/algunhas lles preocupe a falta de precisión deste método de valoración. Está ben que este proceso non teña un resultado de medición exacta. Só ten que ser o suficientemente preciso para cumprimentar dous obxectivos: + +1. Ofrecer un medio para representar o valor do que está acontecendo a quen organiza e financia o esforzo dos equipos. +2. Axudar aos/ás implicados/as a saber que áreas dos esforzos entre os equipos son máis prioritarias en función do seu valor. + +Na práctica, sempre que estas valoracións se atopen dentro dunha orde de magnitude da realidade e entre si, son suficientemente precisas para cumprimentar con estes fins. Mellorarán con creces os resultados obtidos respecto das valoracións *ad hoc* (e dos efectos resultantes) descritas na sección **Problema** ao comezo deste documento. + +## Contexto resultante + +- Medios baseados en datos para debater o valor e a financiación do proxecto de colaboración entre equipos mediante o liderado. +- Métricas clave arredor do proxecto de colaboración entre equipos instrumentados en bruto. +- Definir a forma na que o proxecto de colaboración entre equipos aporta valor e como iso adoita producir un maior valor para a empresa. +- Éxito xeral do proxecto e axitación ao seu redor. + +## Exemplos coñecidos + +- Nike + +## Estado + +- Estruturado +- Probado en múltiples dominios + +## Autoría + +- Russ Rutledge + +## Recoñecementos + +- Jeremiah Wright, por ensinarme a considerar os proxectos de colaboración entre equipos como un negocio interno no que a moeda é o tempo dos/as desenvolvedores/as. + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/dedicated-community-leader.md b/translation/gl/patterns/dedicated-community-leader.md new file mode 100644 index 000000000..67f4a20c9 --- /dev/null +++ b/translation/gl/patterns/dedicated-community-leader.md @@ -0,0 +1,93 @@ +## Title + +Líder da comunidade experto/a en InnerSource + +## Patlet + +Seleccione persoas con habilidades técnicas e de comunicación para liderar as comunidades e garantir o éxito no inicio dunha iniciativa InnerSource + +## Problema + +Como asegura que a nova iniciativa InnerSource ten ao/á [líder da comunidade](http://www.artofcommunityonline.org/) axeitado/a para que o impacto poida ser maior? + +Ao seleccionar ás persoas coas habilidades erróneas e/ou non proporcionarlles a capacitación suficiente arríscase a desperdiciar esforzos e, en última instancia, a que a nova iniciativa InnerSource fracase. + +## Historia + +Considere o seguinte escenario. Unha empresa quere comezar unha iniciativa InnerSource para fomentar a colaboración fóra dos límites da organización. A empresa decidiu comezar cunha fase experimental de alcance limitado. O persoal directivo foi escollendo un tema piloto axeitado para a primeira comunidade InnerSource e espera contribucións de moitas áreas de negocio de toda a organización. A empresa nomeou a un/unha novo/a traballador/a para dirixir a comunidade durante o 50 % do seu tempo de traballo, porque aínda non estaba planificado ao 100 %. Despois de seis meses, a comunidade recibiu só unhas poucas contribucións, a maioría das cales proveñen só dunha unidade de negocio. A empresa substitúe ao/á seu/súa líder da comunidade por alguén cunha maior traxectoria na empresa, esta vez só durante un 30 % do seu tempo. Ao cabo doutros seis meses, o número de contribucións aumenta só lixeiramente. + +## Contexto + +- A empresa é grande e antiga. Non ten experiencia previa en software libre ou outros modelos de traballo colaborativo. A cultura da empresa caracterízase por un estilo de xestión clásico de arriba cara abaixo: xeralmente está en desacordo coa cultura da comunidade. +- Aínda que hai paritarios/as e un/unha patrocinador/a no alto cargo, aos/ás responsables de área da empresa non lles entusiasma InnerSource. +- Non se conseguiu convencer á dirección para que aportase máis ca un presuposto limitado para financiar unicamente a un/unha líder da comunidade a tempo parcial. +- O/A líder da comunidade seleccionado/a inicialmente ten pouca ou ningunha experiencia previa co modelo de traballo de software libre. +- O/A desenvolvedor/a seleccionado/a como líder da comunidade inicialmente non conta cunha ampla rede de contactos dentro da empresa. + +## Aspectos que mellorar + +Se unha empresa non inverte de xeito significativo na comunidade inicial de InnerSource en termos de presuposto e de capacitación, a credibilidade do seu compromiso coa iniciativa podería parecer cuestionable. O impulso común dunha empresa cunha cultura de xestión tradicional ante un proxecto ou iniciativa que non funciona como se esperaba, será a de substituír ao/á seu/súa líder. Facer isto sen involucrar á comunidade e sen seguir os principios meritocráticos, socavará aínda máis o compromiso da empresa con InnerSource ao pór de manifesto a fricción existente entre a cultura actual da empresa e a cultura obxectivo: a cultura comunitaria. + +A aportación do valor dos proxectos InnerSource non resultará evidente para o persoal directivo que está inmerso nos métodos tradicionais de xestión de proxectos. É menos probable que o persoal directivo asigne a unha persoa de alto cargo, que xeralmente ten unha gran demanda de proxectos que non son InnerSource, a un proxecto InnerSource que ocuparía unha parte significativa da súa xornada de traballo. + +A meirande parte do traballo diario dun/dunha líder da comunidade ocúpao na comunicación. Do mesmo xeito, é probable que tamén teña que encabezar un desenvolvemento inicial. Ante a capacidade limitada, os/as líderes sen experiencia tenderán a centrarse no desenvolvemento e descoidar a comunicación. A barreira para que os/as posibles contribuidores/as fagan a súa primeira contribución e se comprometan coa comunidade será moito maior se non é doado contactar co/coa líder da comunidade ou se tarda en dar retroalimentación e responder a preguntas por falta de tempo. Ademais, os/as líderes inexpertos/as no ámbito técnico probablemente terán máis dificultades para atraer e reter contribuidores/as con moita experiencia, das que tería un/unha líder cun alto desempeño e grao de visibilidade dentro da empresa. + +Se unha comunidade non pode crecer o suficientemente rápido e alcanzar a velocidade suficiente, é probable que non poida demostrar de maneira convincente o potencial de InnerSource. + +Se a empresa selecciona a un/unha responsable de área con experiencia que está empapado/a dos métodos de xestión tradicionais para que sexa o/a líder da comunidade, é probable que este/a se centre en temas de xestión tradicionais como a asignación de recursos, a provisión dunha estrutura e as canles de información; na contra de liderar co exemplo a través de principios meritocráticos. Isto socavaría a credibilidade da iniciativa InnerSource aos ollos dos/as desenvolvedores/as. + +## Solución + +Seleccione a un/unha líder da comunidade que: + +- Teña experiencia no modelo de traballo de software libre ou modelos de traballo baseados na comunidade que sexan similares. +- Que teña habilidades brandas necesarias para actuar coma un/unha auténtico/a líder. +- Que predique co exemplo e así xustifique a súa posición na meritocracia comunitaria. +- Que sexa un/unha excelente *networker*. +- Que inspire aos membros da comunidade. +- Que poida comunicarse de maneira efectiva tanto coa xerencia executiva como cos/coas desenvolvedores/as. +- Que sexa capaz de xestionar aspectos administrativos do traballo colaborativo. + +Apoderar ao/á líder da comunidade para que dedique o 100 % do seu tempo ao traballo comunitario, incluíndo a comunicación e o desenvolvemento. Informar á xerencia sobre a necesidade de ter en conta os puntos de vista da comunidade ao xerar un cambio na xestión comunitaria. No mellor dos casos, apoderar á comunidade para que eles/as mesmos/as nomeen a un/unha líder da comunidade. + +## Contexto resultante + +Un/Unha líder da comunidade coas prioridades descritas anteriormente dará a cara e encarnará o compromiso da empresa con InnerSource. Así será máis probable que outros/as socios/as da súa rede sigan o seu exemplo e contribúan a InnerSource. Co tempo, o/a líder da comunidade poderá crear un *core team* estable de desenvolvedores/as e, por tanto, aumentar as posibilidades de éxito do proxecto InnerSource. Ao convencer a un público o suficientemente amplo dentro da súa empresa do potencial de InnerSource, contribuirá a cambiar a cultura da empresa vixente por unha cultura comunitaria. + +Contar con excelentes líderes da comunidade especializados/as é unha condición previa para o éxito de InnerSource. Con todo, non é unha solución milagrosa. InnerSource abrangue moitos retos que superan o que un/unha líder da comunidade pode abordar, como son os retos presupostarios, xurídicos, fiscais e outros retos organizativos. + +## Exemplos coñecidos + +- BIOS en Robert Bosch GmbH: Teña en conta que InnerSource en Bosch estivo dirixido maioritariamente a aumentar a innovación de gran magnitude ao encargarse de produtos de revestimento interno. Actualmente, este modelo non se está a empregar en Bosch por mor da falta de financiación. + +## Título alternativo + +Coordinador/a da comunidade experto/a en InnerSource + +## Estado + +- Estruturado + +## Autoría + +- Greorg Grütter (Robert Bosch GmbH) +- Diogo Fregonese (Robert Bosch GmbH) + +## Recoñecementos + +- Tim Yao +- Padma Sudarsan +- Nigel Green +- Nick Yeates +- Erin Bank +- Daniel Izquierdo + +## Rexistro de cambios + +- **2016-11-06**; 1ª revisión +- **2017-04-06**; 2ª revisión + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/document-your-guiding-principles.md b/translation/gl/patterns/document-your-guiding-principles.md new file mode 100644 index 000000000..a322c78f0 --- /dev/null +++ b/translation/gl/patterns/document-your-guiding-principles.md @@ -0,0 +1,193 @@ +## Title + +Documente os seus principios reitores + +## Patlet + +A explicación habitual de InnerSource baseada en «aplicar as mellores prácticas de software libre dentro dunha organización» non funciona correctamente coas persoas que carecen de experiencia con software libre. Como solución, os principios InnerSource máis importantes documéntanse e publícanse de maneira aberta. + +## Problema + +A organización está intentando despregar InnerSource a grande escala. A iniciativa comezou cos/coas entusiastas do software libre e,agora, o obxectivo agora é conseguir a adhesión de persoas que carecen de experiencia no software libre. Para ese público, o típico slogan de «aplicar as mellores prácticas de software libre» non basta para transmitir a mensaxe do que supón InnerSource, os problemas que se poden resolver ou as ferramentas que se poden empregar para resolvelos. Como resultado, a adopción de InnerSource na organización relentízase. Os equipos desenvolven ideas diverxentes sobre os obxectivos de InnerSource e a mellor forma de aplicalo, o que xera confusión cando os/as contribuidores/as comezan a cruzar os límites dos equipos. + +## Historia + +Os primeiros experimentos levados a cabo nunha organización demostraron que as mellores prácticas de colaboración en software libre poden ser beneficiosas. O seguinte paso agora é trasladar a iniciativa aos equipos e persoal que carecen de formación en software libre. O obxectivo agora é comunicar claramente os obxectivos da iniciativa InnerSource, así como o camiño claro cara a consecución destes obxectivos. + +## Contexto + +- O termo InnerSource estase a dar a coñecer entre os/as traballadores/as. +- A iniciativa xurdiu entre os/as entusiastas do software libre. + +## Aspectos que mellorar + +- Os equipos teñen dificultades á hora de comunicar de xeito exacto cales son os aspectos fundamentais de InnerSource. +- Quen carece de experiencia en software libre non entende o que significa implantar as mellores prácticas do software libre na empresa. +- No día a día, os equipos que intentan seguir as mellores prácticas InnerSource teñen dificultades para decidir se o que están facendo se atopa aliñado cos valores xerais de InnerSource. + +## Solución + +Quen impulsa a iniciativa InnerSource na organización debe axudar aos equipos e individuos que carecen dunha forte formación en software libre e, polo tanto, teñen unha comprensión menos intuitiva de InnerSource. + +Débese proporcionar claridade aos equipos e individuos documentando estas dúas áreas: + +1. **Propósito**: Por que quere adoptar InnerSource a organización? +2. **Principios:** Que principios InnerSource axudarán a abordar estes retos? + +As seguintes seccións proporcionan máis detalles acerca destas áreas pensadas como posibles puntos de partida para documentalos para a súa organización. + +### Cal é o motivo polo que as organizacións queren adoptar InnerSource? + +No pasado, InnerSource amosou a súa eficacia na resolución de problemas habituais das organizacións. + +Con todo, que retos organizativos espera mellorar a súa organización cando emprega InnerSource? + +Na contra de facer xeneralizacións, intente identificar exactamente as solucións que se axustan aos retos da súa organización, preferiblemente coas persoas afectadas polo cambio que desexa aplicar. + +Algúns retos que outras empresas abordaron seguindo as mellores prácticas InnerSource son: + +- Reducir o desenvolvemento de silos causados pola cultura da propiedade excesiva. +- Aumentar a velocidade da innovación reducindo o tempo dedicado a resolver problemas similares mediante o fomento da reutilización saudable do código. +- Aumentar a velocidade de desenvolvemento mediante unha mellor colaboración entre equipos +- Resolver as dependencias de proxecto/equipo máis aló da espera e das solucións provisionais, reducindo así os puntos de conxestión na enxeñaría. +- Aumentar a calidade. +- Aumentar a felicidade dos/as traballadores/as. +- Aumentar o éxito das novas contratacións. +- Crear documentación viable. + +### Que principios InnerSource axudarían a abordar estes retos? + +Unha vez que os equipos entendan que problemas lles axudarían a resolver InnerSource, o seguinte paso é explicar que principios axudan a afrontar estes retos. + +Baseándonos nos principios básicos do desenvolvemento de software libre, as seguintes directrices amosaron a súa eficacia: + +(1) O código debe aloxarse de maneira transparente na organización. + +O código fonte, a documentación e os datos relevantes para o desenvolvemento do proxecto deben estar dispoñibles e ser fáciles de atopar para calquera persoa da organización. + +(2) As contribucións priman sobre as *feature requests*. + +Tódalas partes interesadas no proxecto actúan como posibles contribuidores/as e son tratados/as e apoiados/as como tal. As contribucións seguen sendo suxestións na contra de requisitos. A coordinación previa axuda a evitar esforzos inútiles. Os proxectos proporcionan directrices para evitar friccións. + +(3) Os erros son oportunidades para aprender. + +Cando o traballo é visible para toda a organización, calquera erro será tamén visible para todos/as. Deste xeito, debe establecerse unha cultura na que os erros sexan oportunidades de aprendizaxe na contra de fracasos que deben ser evitados a toda costa. + +(4) A comunicación escrita prima respecto da comunicación oral. + +Para os proxectos que abarcan varios equipos, con posibles calendarios de reunións diverxentes, ten que ser posible colaborar de maneira asíncrona. O obxectivo dos proxectos InnerSource é recrutar a novos/as contribuidores/as. Para iso, os/as posibles futuros/as contribuidores/as deben poder seguir o progreso do proxecto de maneira autónoma con poucas barreiras de acceso. Se a comunicación relevante do proxecto se produce a través da comunicación asíncrona, os razoamentos que se debatan deben facerse transparentes na canle escrita; as decisións unicamente poden finalizar nesa canle. Como efecto secundario, isto conduce a unha documentación de pasivos base moi valiosa para calquera novo/a colaborador/a do proxecto. + +(5) Permita que o asesoramento escrito se acumule nun arquivo accesible no que se poidan realizar buscas. + +Toda a comunicación do proxecto, en particular as decisión tomadas e os debates que conduciron a esas decisións, deben ser arquivados. Debe ser posible facer referencia á comunicación a través de URL estables. As conversacións previas deben poder almacenarse de maneira que se poidan atopar facilmente. + +Mais é necesario facer dúas advertencias: + +1. Isto non substitúe a unha documentación estruturada. Con todo, pode servir como punto de partida para recompilar a documentación estruturada. +2. Existen excepcións á regra de que todo debe estar por escrito e ser accesible para toda a organización: as conversacións relacionadas cos/coas traballadores/as, así como coa seguridade, son confidenciais e non deben facerse públicas. + +(6) Recompensa aos/ás *trusted committers*. + +Tódalas contribucións (por exemplo, de código fonte, de documentación, de informes de erros, de aportacións aos debates, de apoio aos/ás usuarios/as, de marketing) son benvidas e deben ser recompensadas. Aqueles/as que amosen o seu apoio ao proxecto serán invitados/as como [*trusted committers*](./trusted-committer.md), e tódolos/as *trusted committers* dun proxecto se publican. + +## Contexto resultante + +- Os membros da organización comprenden que retos poden abordar aplicando as mellores prácticas InnerSource. +- Os membros da organización que carecen de experiencia previa no software libre comprenden os valores e os principios básicos dos proxectos InnerSource. +- Os membros da organización que carecen de experiencia previa en software libre son capaces de contrastar a súa actividade diaria cun conxunto de valores comúns establecidos. + +## Exemplos coñecidos + +- Europace AG +- Github +- Robert Bosch GmbH + +### Europace AG + +Os principios de InnerSource enumerados na sección de **Solución** baséanse, na súa meirande parte, na experiencia de Europace. Ver [máis](https://tech.europace.de/post/europace-inner-source-prinzipien/) (en alemán). + +### GitHub + +#### Finalidade + +A miúdo en GitHub traballamos cun modelo no que os equipos aportan funcionalidades a áreas que están fóra do seu ámbito de competencia. Algúns exemplos comúns inclúen a enxeñaría de ventas que aporta funcionalidades para desbloquear unha venta, os proxectos especiais que contribúen cando é estritamente necesario, as funcionalidades de grande impacto en todo o produto e un equipo de traballo en múltiples áreas para entregar unha funcionalidade. + +#### Principios + +Polo xeral, os principios descritos neste documento son evitar o aumento da débeda tecnolóxica e a carga para o equipo propietario. A miúdo, préstase axuda a un equipo que quedou atrás por mor dos costes de soporte e mantemento na súa área de competencia e non ten ancho de banda para contribuír á funcionalidade. Calquera nova funcionalidade realizada por outro equipo que aumente a carga de soporte ou a débeda técnica supón aínda menos tempo para que o equipo propietario traballe nas novas funcionalidades, polo que queremos asegurarnos de que se fai ben. + +Do mesmo xeito, esforzámonos por ser unha empresa na que os/as enxeñeiros/as traballen libremente máis aló das fronteiras e as prioridades empresariais que, a miúdo, esixen que contribuamos en áreas alleas ás nosas principais áreas de especialidade. + +Un bo resumo dos principios é deixar a área en tan bo estado ou nun estado aínda mellor do que a atopou. + +Tendo isto en conta, velaquí os principios nos que estamos de acordo: + +- Evite os produtos menos viables (MVP, polas súas siglas en inglés, Produto-Viable-Mínimo) que acumulan débeda de funcionalidades. Está ben lanzar un MVP para obter *retroalimentación* dos/as clientes/as, pero o equipo que contribúe debe comprometerse a rematar o conxunto de funcionalidades. Algúns exemplos son: + - Compromiso de ir máis aló do MVP para chegar a unha solución que satisfaga á maioría dos/as clientes/as. + - Soporte completo para a administración das novas funcionalidades (por exemplo, soporte na interface de usuario/a (IU)). + - Presentar as funcionalidades tanto na IU como na API (polas súas siglas en inglés, Interface de Programación de Aplicacións). + - Garantir que as funcionalidades responden en ambientes de servidores locais e na nube. +- Apoie o traballo das funcionalidades ata o seu despregamento para a produción e tras esta. + - Xestionar o despregamento progresivo. + - Xestionar os tíckets de asistencia. + - Planificar o tempo para responder aos comentarios dos/as clientes/as (funcionalidades e erros). +- Crear funcionalidades do xeito correcto (sen acumular débeda tecnolóxica). + - Acordar os requisitos e a solución cos equipos de produto e de enxeñaría. + - Arquitectura e deseño axeitados. + - Asegúrese de que os datos se almacenan correctamente para evitar posteriores migracións de datos. + - Implantar telemetría apropiada. + - Soporte en ambientes de produción locais e na nube (incluídos a instalación, configuración e copia de seguridade/restauración, migracións etc.). + - Erros reparados. + - Documentación actualizada. + +#### Compromiso + +Empregamos un modelo de compromiso porque nos gusta establecer que pasos concretos pode dar un equipo cando contribúe con funcionalidades a áreas fóra do seu ámbito de responsabilidade. + +Un modelo de compromiso típico de GitHub é o seguinte: + +- Obter a aprobación do conxunto de características e do plan de despregamento do/a *product owner*. +- Obter a aprobación do deseño da enxeñaría, incluído o cumprimento dos requisitos non funcionais (telemetría, cobertura de probas, ensaios e asistencia multiambientais) do/a propietario/a de enxeñaría (normalmente o/a enxeñeiro/a xefe/a e o/a director/a). +- Facer revisións do código ao longo do proceso, así como revisión de requisitos novos ou modificados. + +### Robert Bosch GmbH + +#### Finalidade + +O principal obxectivo da iniciativa InnerSource de Bosch (BIOS) é fomentar a colaboración, a aprendizaxe e a innovación. + +#### Principios + +Para isto, Bosch aplica os seguintes principios: + +- **Apertura:** Reducimos ao máximo as barreiras de entrada ás comunidades BIOS. +- **Transparencia:** Somos radicalmente transparentes, compartimos o traballo realizado e comunicámonos na toma de decisións tendo en conta a tódolos/as socios/as da empresa. +- **Carácter voluntario:** A decisión de unirse e contribuír a unha comunidade BIOS corresponde a cada socio/a. Os/As socios/as deben traballar na BIOS por mor da súa motivación intrínseca, non porque o persoal directivo llo pedise. +- **Autodeterminación:** As comunidades BIOS son libres de elixir en que traballar, cando traballar e que ferramentas e procesos empregar. +- **Meritocracia:** O poder conferido aos membros do proxecto BIOS vén dado en función dos seus méritos, é dicir, en función da calidade e da cantidade de contribucións. + +![Os principios BIOS](../../../assets/img/gl/bios-principles.png) + +Os principios de *apertura*, *transparencia* e *carácter voluntario* axudaron a crear comunidades diversas de traballadores/as cunha motivación intrínseca. A *meritocracia* amosou ser unha motivación eficaz para realizar grandes contribucións. E a *autodeterminación* permitiu ás comunidades empregar o seu tempo limitado para facer contribucións dunha maneira máis eficaz e eficiente. + +## Estado + +- Estruturado + +## Autoría + +- Isabel Drost-Fromm +- Georg Grütter + +## Recoñecementos + +- Zack Koppert, por compartir o enfoque de GitHub nos exemplos coñecidos. + +## Título alternativo + +Principios explícitos InnerSource + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/extensions-for-sustainable-growth.md b/translation/gl/patterns/extensions-for-sustainable-growth.md new file mode 100644 index 000000000..bb6c7180f --- /dev/null +++ b/translation/gl/patterns/extensions-for-sustainable-growth.md @@ -0,0 +1,117 @@ +## Title + +Extensións para o crecemento sostible + +## Patlet + +Un proxecto InnerSource está a recibir demasiadas contribucións, o que dificulta o seu mantemento. Os/As responsables ofrecen un mecanismo de extensión fóra do proxecto principal, que permite escalar as capacidades do proxecto cun custo e gastos xerais de mantemento mínimos. + +## Problema + +A medida que o número de contribucións a un repositorio InnerSource maduro aumenta rapidamente, engádese máis carga de traballo nas revisións e mantemento do código. Isto provoca unha grande acumulación de código pendente de revisión ou un rexeitamento prematuro das contribucións de novas funcionalidades. + +Como pode o *host team* lanzar novas funcionalidades de contado e fomentar a innovación e a experimentación, ao tempo que se encarga do mantemento do repositorio? + +## Historia + +Trátase dun proxecto estratéxico co obxectivo de recompilar nunha pila compartida as mellores innovacións dentro dun espazo de dominio, o que permite a reutilización dunha infraestrutura común e proporciona unha experiencia de usuario/a estándar. A través de InnerSource, distintos equipos da organización que traballen neste espazo de dominio, poderán ter a oportunidade de colaborar e contribuír coas súas innovacións á base de código común. + +Non obstante, ter un gran número de contribucións paralelas de varios/as desenvolvedores/as dificulta o mantemento da base de código. Isto está a engadir unha enorme carga para os/as mantedores/as do proxecto, que asumen a responsabilidade dos estándares de calidade do código e habilitan á comunidade a través de diversas formas de comunicación. + +Os/As encargados/as do mantemento do proxecto poderían estar en risco de esgotamento por: + +- A acumulación continua de *pull requests* de contribuidores/as que precisan ser revisadas. +- A insatisfacción laboral: Os/As mantedores/as empregan a meirande parte do seu tempo no servizo de asistencia á comunidade, o que non deixa espazo para a innovación. +- A percepción de falta de consecución de logros: Se non contan con suficiente demanda dos/as usuarios/as, non tódalas funcionalidades engadidas tornarán na súa conseguinte adopción. +- Os lanzamentos que levan moito tempo: Máis funcionalidades na base de código requiren probas de longa duración. +- O aumento das actividades de mantemento: Xorden máis erros (*bugs*) a medida que se engaden novas capacidades. + +Dedícase moito tempo a madurar cada nova funcionalidade engadida, antes de que os/as potenciais usuarios/as teñan a oportunidade de explorala para os seus casos de uso. Se a nova funcionalidade non resultase satisfactoria para o caso de uso, todo o tempo empregado en acadar os estándares de calidade de código desexados suporía un desproveito. + +## Contexto + +- Unha base de código estratéxica de InnerSource escálase rapidamente coas contribucións de novas funcionalidades de distintos/as empregados/as. +- A proporción número de revisores/as por contribucións ten como resultado unha crecente acumulación de *pull requests*. Isto desacelera o lanzamento de novas funcionalidades á comunidade. +- A calidade da base de código estase a degradar e a experiencia do/a usuario/a vese afectada negativamente. +- Os/As mantedores/as da base de código están sobrecargados/as e non poden seguir o ritmo da afluencia de contribucións e o incremento do servizo de asistencia á comunidade. +- Algunhas das características engadidas non están a ser adoptadas polos/as usuarios/as, e mesmo poderían quedar completamente inactivas. Sen embargo, aínda se non se empregan, estas características contribúen á suma dos gastos xerais de mantemento. +- A organización inverte considerablemente no fortalecemento das contribucións de novas funcionalidades para manter os estándares de calidade, mesmo antes de que esas ideas sexan exploradas pola comunidade. +- O modelo aplícase en calquera escenario: + - Os/As mantedores/as teñen que rexeitar ideas de novas funcionalidades para limitar o alcance do proxecto. Isto está a dificultar a innovación na comunidade e a restrinxir unha expansión maior. + - Para reducir as acumulacións, lánzanse novas funcionalidades sen documentación, fortalecemento ou probas exhaustivas; o que xera unha experiencia de usuario/a deficiente. Ademais, isto está a aumentar o tamaño da base de código, un grande engadido no gráfico de dependencia que dificulta o seu mantemento. + +## Aspectos que mellorar + +- Os/As mantedores/as e *product owners* queren permitir a expansión, fomentar a innovación e a experimentación sen ser excesivamente restritivos/as nas contribucións; cun bo código e estándares de calidade para a experiencia do/a usuario/a. +- Para cumprir eses estándares do produto, dedícase unha gran cantidade de tempo ao fortalecemento e probas exhaustivas das funcionalidades. Por outra banda, os/as *product owners* tamén poderían permitir un lanzamento máis rápido de innovacións, para adoptar produtos que explorar antes de investir tempo en madurar as súas capacidades. +- Os/As mantedores/as queren alentar á comunidade a compartir innovacións que combinen as capacidades do produto con outros casos de uso, sen engadir máis dependencias ao repositorio primario. + +## Solucións + +Permitir [extensións/plugins](https://en.wikipedia.org/wiki/Extensibility) para bases de código InnerSource a grande escala pode aliviar a carga de traballo dos/as mantedores/as do repositorio e permitir un lanzamento máis rápido de novas funcionalidades para adoptar produtos que explorar. Isto traslada o mantemento das capacidades aos/ás *extension owners*, ao tempo que permite que o repositorio primario atenda ás capacidades adoptadas dun xeito máis extenso e estratéxico. + +As extensións proporcionan un filtro para novas capacidades que, eventualmente, poden pasar ao núcleo do proxecto. Estas extensións tamén actúan como un entorno de incubación e fortalecemento da comunidade, o que permite que gran parte dese fortalecemento ocorra de xeito orgánico, en lugar de nun custoso proceso de revisión. + +Para que o modelo de extensións teña éxito, haberá que ter en conta algunhas consideracións arquitectónicas coas que cumprir: + +1. **Fáciles de crear:** Para obter a participación da comunidade, as extensións deben ser doadas de crear. + - As extensións deberían ter como punto de partida un repositorio prototipo. A creación destes prototipos permite que as novas funcionalidades das extensións se engadan a novos repositorios separados do proxecto principal. O prototipo debe aportar a mesma estrutura modular que o repositorio primario e incluír o marco de traballo para empaquetar e lanzar extensións. + - É necesario asegurarse de que, a medida que cambia o repositorio primario, os prototipos continúan ben mantidos. Os/As propios/as mantedores/as do devandito repositorio serán tamén os/as responsables de actualizar os prototipos para garantir a súa compatibilidade co proxecto principal. Seguir bos mecanismos de versionado, por exemplo, [SemVer](https://semver.org/), facilita ese proceso. + - Recoméndase, ademais, que os/as mantedores/as do repositorio primario proporcionen orientación sobre como actualizar as extensións baseadas en versións antigas dos prototipos, a medida que se publiquen versións máis novas. + - É preciso engadir exemplos de extensións desenvolvidas a partir do prototipo, que os/as desenvolvedores/as do proxecto poidan consultar para comprender como escribir unha extensión ben modelada. + - E haberá que afrouxar os requisitos para que os/as contribuidores/as creen extensións que eviten as revisións e permitir así un lanzamento ou experimentación máis rápidos. +2. **Baixa dependencia:** Ter compoñentes modulares que conteñan funcionalidades pode favorecer a baixa dependencia, na que os cambios nas extensións non afectan á calidade da base de código principal ou doutras extensións. +3. **Xestión de dependencia**: Cada extensión debe coidar de fixar o rango de versións do repositorio primario sobre o que se constrúe (do mesmo xeito que faría con calquera outra dependencia). Tamén se debe ter coidado no uso doutras dependencias que ocultan as do repositorio primario, e que as versións elixidas para esas dependencias sexan compatibles coas versións seleccionadas. Calquera conflito co repositorio primario recollerase no marco de proba da extensión. +4. **Estratexia de proba:** Como probar as extensións tanto individualmente como de xeito combinado? + - **Probar a extensión individualmente:** O prototipo de extensión proporcionará un marco de proba, que será empregado polos/as desenvolvedores/as de extensións para probar a capacidade engadida. Isto pode incluír un marco para probas unitarias, o rendemento en tempo de execución e probas de calidade. + - **Probar a extensión en combinación co repositorio primario:** Os/As desenvolvedores/as de extensións teñen un método ben establecido para probar a súa extensión fronte a versións específicas do repositorio primario sen a implicación dos/as mantedores/as do devandito repositorio. + - **Probar a extensión en combinación con outras extensións:** Proporcionar un marco de proba para este escenario podería resultar excesivo, especialmente se hai un gran número de extensións que aínda están explorando os/as usuarios/as e é improbable que se empreguen todas de xeito combinado. Se un/unha usuario/a se atopa con conflitos ao usar extensións combinadas (o que debería ser improbable cunha baixa dependencia), pode informar dunha incidencia aos/ás respectivos/as *extension owners* para que o resolvan. A medida que unha extensión acade as derradeiras fases do seu ciclo de vida e se integre co repositorio primario, pasará probas combinadas co resto da libraría e calquera incidencia posible resolveríase nese intre. +5. **Dispoñibilidade e utilización:** + - É necesario que os/as usuarios/as que crearon as extensións as mostren nunha páxina de publicación, co fin de compartilas de maneira sinxela para o seu uso. + - Será preciso permitir o rexistro de extensións co proxecto primario, para que os/as usuarios/as poidan valerse das extensións xunto co proxecto orixinal, mantendo así a mesma experiencia de usuario/a. +6. **Ciclo de vida das extensións e o seu mantemento:** Débese establecer o ciclo de vida das extensións desde a súa creación ata a súa portabilidade á base de código primario, xunto con directrices de propiedade claras. + - Os/As creadores/as de extensións teñen que continuar o seu mantemento, proporcionar asistencia e corrixir as fallas. Calquera extensión sen mantemento será eliminada da páxina de publicación. + - Teranse que crear criterios específicos para cando unha extensión pode ser portada ao repositorio primario, como a adopción da extensión por produtos internos e a demanda da funcionalidade. + - O proceso de portar a extensión ao repositorio primario seguirá directrices de revisión de código máis estritas, establecidas polos/as mantedores/as da libraría. + +![Arquitectura de software con extensións](../../../assets/img/gl/extensions-for-sustainable-growth.png) + +Seguir estes principios garante que: + +- Os/As desenvolvedores/as poidan engadir novas funcionalidades ao ecosistema do proxecto sen a esixencia de ter que escribir grandes cantidades de código [repetitivo](https://en.wikipedia.org/wiki/Boilerplate_code). +- As extensións pódense descubrir dun xeito replicable por tódolos/as usuarios/as do proxecto principal. Só porque o código non estea no repositorio primario non implica que non sexa valioso. +- A carga de traballo do/a mantedor/a redúcese ata que unha extensión permita cubrir un baleiro importante no proxecto primario. +- O código central común do proxecto (por exemplo, clases base e funcionalidades de utilidade) pode ser un punto de partida para novos desenvolvementos que estendan o dominio de proxecto. Isto evita a necesidade de portar traballos innovadores despois, reducindo así a carga xeral de desenvolver funcionalidades novidosas para o proxecto. +- É máis probable que os/as desenvolvedores/as contribúan e sigan involucrados/as no mantemento e na construción de comunidades para a súa base de código, o que tamén é bo para a saúde xeral do ecosistema do proxecto. + +## Contexto resultante + +- O proxecto é capaz de escalar coa adición de novas funcionalidades, sen engadir sobrecarga de mantemento no repositorio primario do proxecto. +- Un lanzamento máis rápido de novas funcionalidades para que a comunidade explore, fomenta a innovación e a experimentación. +- Cómpre reducir o custoso proceso de revisión de código e o fortalecemento das funcionalidades ata que se poida probar a utilidade da funcionalidade. Pois isto repercutirá nos beneficios de aforro de custos para a organización. +- Un problema que pode xurdir posteriormente é: que pasa se unha extensión non pode completar o ciclo de vida? + - Se unha extensión non se adopta durante un período de tempo e non se puido construír unha comunidade ao seu redor para dar soporte ao seu mantemento, corresponderíalle ao/á *extension owner* continuar manténdoa durante tanto tempo como queira. Se unha extensión non ten mantemento, quedaría sen publicar. + - Se un/unha desenvolvedor/a de extensións non pode seguir mantendo o seu proxecto e outros/as desenvolvedores/as da comunidade quixesen seguir prestándolle soporte, estes/as últimos/as poderían continuar co mantemento da extensión no futuro. + +## Exemplos coñecidos + +* **IBM Corporation** adoptou esta solución para escalar [librarías InnerSource de IA](https://youtu.be/Lz-tIc2cyRM). Ao usar extensións, os/as desenvolvedores/as poden ampliar as librarías IA con máis algoritmos e compartir as súas innovacións coa comunidade interna da compañía. As librarías principais conteñen só algoritmos estratéxicos que xa foron adoptados e validados, polo que serán máis doados de manter segundo escalamos as contribucións. + +## Título alternativo + +Extensións para xestionar contribucións a escala + +## Estado + +* Estruturado + +## Autoría + +- Sukriti Sharma, IBM +- Alexander Brooks, IBM +- Gabe Goodhart, IBM + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/gig-marketplace.md b/translation/gl/patterns/gig-marketplace.md new file mode 100644 index 000000000..c50a15a3b --- /dev/null +++ b/translation/gl/patterns/gig-marketplace.md @@ -0,0 +1,78 @@ +## Title + +*Gig marketplace* + +## Patlet + +Establécese un *marketplace* mediante a creacion dunha intranet que enumere as necesidades específicas do proxecto InnerSource como «*Gigs*», con requisitos explícitos de tempo e habilidades. Isto permitirá ao personal directivo comprender mellor o compromiso no tempo e os beneficios profesionais dos/as seus/súas traballadores/as, o que aumentará a probabilidade de obter a aprobación para realizar contribucións InnerSource. + +## Problema + +Nin os/as directivos/as nin os/as empregados/as entenden como poderían beneficiarse de involucrarse nun proxecto InnerSource. + +Para os/as empregados/as é difícil comunicar á xerencia o compromiso de tempo que supón para eles/as a implicación nun proxecto InnerSource. + +Os cargos superiores non contan cun sistema uniforme de seguimento ou recompensas en relación á implicación dos/as seus/súas empregados/as en proxectos InnerSource. + +## Historia + +Créase con éxito un programa InnerSource, coa aceptación dos altos cargos, mandos intermedios e desenvolvedores/as da compañía. Non obstante, despois de case un ano, apenas houbo contribucións reais a ningún proxecto de InnerSource fóra dos equipos que os crearon. Tras entrevistar a tódalas partes implicadas, o principal escollo resulta ser a dificultade para coñecer o compromiso de tempo que se lles ía ter que pedir aos/ás desenvolvedores/as que elixisen involucrarse nalgún proxecto InnerSource e como se beneficiarían persoalmente ao facelo. Tampouco existe un sistema establecido para anunciar as oportunidades dispoñibles para os/as contribuidores/as, expor o que se lles vai pedir facer ou unha aproximación do tempo que poden precisar. Os/As directivos/as apoian e alentan aos/ás seus/súas empregados/as a participar pero, ata agora, non tiñan forma de contabilizar ou recompensar as actividades destes/as empregados/as dentro dos proxectos InnerSource. Como se pode mellorar esta situación para tódalas partes (*project owners* de InnerSource, potenciais contribuidores/as e xestores/as de desenvolvemento)? + +## Contexto + +Os/As empregados/as desexan poder aumentar a súa exposición a actividades que se desenvolven noutras áreas da compañía sen ter que abandonar os seus cargos actuais. A existencia dos proxectos InnerSource poderíalles proporcionar nova experiencia, mais son dous os principais factores que impiden que os/as empregados/as participen. En primeiro lugar, a incapacidade tanto para descubrir con facilidade cales son as oportunidades de contribución dentro dos proxectos InnerSource en curso, como para comunicalo aos/ás seus/súas superiores/as. En segundo lugar, a incapacidade dos altos cargos para planificar e dar conta do compromiso de tempo dos/as seus/súas empregados/as con estas tarefas; que ten como resultado que os/as *project owners* de InnerSource estean a atopar dificultades á hora de construír comunidades dun tamaño suficiente como para cumprir os obxectivos manifestados. + +## Aspectos que mellorar + +* Os/As empregados/as non contan cun sistema sinxelo para descubrir as oportunidades de InnerSource. +* Os/As empregados/as non teñen modo de comprobar como a súa contribución podería beneficialos/as profesionalmente. +* A xerencia non entende os requisitos tempo/esforzo asociados ás tarefas relacionadas co proxecto InnerSource. + +### Requisitos previos + +* Os/As directivos/as proporcionan tempo aos/ás empregados/as para implicarse nos proxectos InnerSource. +* As contribucións a InnerSource deben ser cuantificables para que os altos cargos poidan rastrexalas e rexistralas e, á súa vez, sexan debidamente contabilizadas e recompensadas. + +## Solucións + +Será necesaria a creación dunha intranet baseada en *Gig* na que os/as empregados/as poidan anunciar de maneira individual as súas habilidades e áreas de interese, e os/as *project owners* de InnerSource poidan atopar oportunidades de colaboración. + +Os/As empregados/as crearían un perfil na aplicación no que enumerarían as súas habilidades e áreas de interese. O sistema tomaría estes datos e, de maneira proactiva e individual (por correo electrónico ou por outros medios), informaría da publicación dun *Gig* que coincida cun ou máis deses criterios. + +Cada *Gig* publicado polo/a *project owner* de InnerSource debería incluír os requisitos estimados de tempo e habilidades precisadas, na procura do/a empregado/a dispoñible mais indicado/a; para poder comunicarllo directamente ao/á seu/súa superior/a inmediato/a. A descrición tamén debería incluír a base dos beneficios para a persoa que asuma a tarefa, de modo que resulte o máis atractiva posible. + +Pódese crear un sistema baseado en puntos para recompensar e rastrexar a participación dun/dunha empregado/a nun *Gig*. Así, outorgaríanse, por exemplo, 10 puntos ao/á propietario/a do *Gig* por publicalo unha vez completado e 100 puntos para o/a desenvolvedor/a que o complete. Os puntos acumulados ao completar *Gigs* poderían usarse como mecanismo de gamificación e como criterio de xestión do rendemento ao obter información sobre as áreas de especialización que existen dentro dunha organización. + +Quen queira aceptar un *Gig* será examinado/a primeiro polo/a propietario/a do mesmo para determinar que o/a empregado/a cumpre cos requisitos previos de habilidades e adxudicación de tempo do/a seu/súa xestor/a para completar o *Gig*. + +A transparencia das contribucións a través de *Gigs* pode axudar a construír (ou desmerecer) a reputación dun/dunha contribuidor/a, favorecendo por iso a probabilidade de que a calidade da contribución sexa alta. Completar *Gigs* tamén poderá servir para probar a experiencia nun área en particular. + +A natureza dos *Gigs* publicados no *marketplace* pode incluír tanto habilidades técnicas como competencias sociais; tales como organizar un evento grupal, escribir un informe ou solicitar unha mentoría etc. + +A responsabilidade da creación do «*Gig marketplace*» debería ser asumida por un equipo dunha organización que proporcione infraestrutura e capacidades para toda a compañía. + +## Contexto resultante + +O «*Gig marketplace*» de InnerSource aumentou considerablemente o número de proxectos InnerSource; así como o número de empregados/as implicados/as neles. A natureza autodirixida do *Gig marketplace* mellorou a satisfacción laboral entre os/as empregados/as, pois permitiulles elixir o traballo que realizan e con quen asociarse dentro da empresa. Os/As empregados/as saben exactamente a que se comprometen e o que poden esperar da experiencia. Os/As directivos/as poden estimar e rastrexar mellor os compromisos de tempo dos/as seus/súas empregados/as con respecto aos proxectos InnerSource, recoñecer os seus esforzos individuais e tomar os *Gigs* completados como unha forma de validar as súas habilidades específicas. Ademais, os cargos superiores poden aproveitar o tempo dispoñible de inactividade dun/dunha empregado/a e permitirlle que pase a traballar no *Gig marketplace*. Os datos xerados polas interaccións no *Gig marketplace* axudan tamén a impulsar as decisións de contratación e formación en tódolos departamentos. + +Cando se usa en combinación co modelo do portal InnerSource, o *Gig marketplace* ofrece unha maior precisión de contexto e datos, xunto coas ligazóns aos repositorios de código e a documentación do proxecto relacionado co *Gig*. + +## Exemplos coñecidos + +* Unha grande organización de servizos financeiros empregou a creación dunha web *Gig marketplace* de InnerSource para promover o seu programa InnerSource. +* SAP implementou o modelo de *Gig marketplace*, engadindo un novo programa InnerSource á plataforma de traballo interna na que se poden publicar ofertas similares. +* O modelo *Gig marketplace* probou funcionar extremadamente ben co prototipo asociado do [portal InnerSource](./innersource-portal.md) neste contexto. O portal InnerSource dá a coñecer os proxectos específicos que se están levando a cabo na actualidade, mentres que o *Gig marketplace* anuncia certo tipo de tarefas dispoñibles para traballar neses proxectos. + +## Estado + +* Estruturado + +## Autoría + +* Stephen McCall +* Shreyans Dugar + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/group-support.md b/translation/gl/patterns/group-support.md new file mode 100644 index 000000000..e2970c165 --- /dev/null +++ b/translation/gl/patterns/group-support.md @@ -0,0 +1,69 @@ +## Title + +Soporte grupal + +## Patlet + +Que acontece se un equipo ou unha persoa abandona un proxecto InnerSource? Para manter vivo o proxecto fórmase un novo grupo de colaboradores/as interesados/as. + +## Problema + +* Un proxecto InnerSource popular queda orfo. +* Non se conta cun sitio claro para a súa publicación. + +## Historia + +Máis de 50 proxectos de toda a compañía empregan unha libraría de *widgets* UI. O equipo disólvese ao esgotarse o financiamento do equipo propietario da libraría. Nun principio, ninguén se decata mais, despois dalgún tempo, cada vez que alguén pregunta quen é o/a propietario/a, non hai resposta. Que vai pasar agora? Os novos equipos evitarán usala? Estancarase o proxecto e permanecerá así ata que finalmente os/as seus/súas usuarios/as se vexan obrigados/as a cambiar a outra cousa? Unha mágoa se iso pasase cun proxecto bo e perfectamente útil! + +## Contexto + +* Proxecto InnerSource popular. +* Consumido como unha dependencia do tempo de compilación (por exemplo, o módulo de código). +* Ninguén lle presta soporte de forma activa. +* A compañía non pode asignar un equipo de soporte. + +## Aspectos que mellorar + +* Ninguén ten asignado como traballo principal encargarse do caso. +* Todos/as están ocupados/as. +* A migración fóra do proxecto ten un alto custo. + +## Solucións + +Convocar voluntarios/as interesados/as de calquera sector da compañía para formar un grupo de [*trusted committers*](./trusted-committer.md) que dean soporte ao proxecto. Pode ser preciso pórse en contacto con individuos específicos, en función do historial de uso e *commits*. É importante que sexan suficientes para que a carga de cada un/unha deles/as sexa razoablemente pequena. + +Ao formarse, este grupo debería identificar ou constituír unha [documentación base estándar](./base-documentation.md) e [ferramentas de comunicación](./communication-tooling.md). + +O grupo fará o posible para xestionar estes aspectos do proxecto: + +* **Mantemento**. Se o proxecto está totalmente roto para o caso de uso estándar, haberá que arranxalo. É preciso manter o proxecto actualizado a medida que as dependencias e os marcos que usa seguen a desenvolverse. +* **Incorporación**. Se alguén ten unha pregunta sobre como empregar o proxecto, haberá que asegurarse de que obtén unha resposta razoable. +* **Actualizacións**. Se alguén quere engadir novas funcionalidades ao proxecto, proporcionaráselle o deseño e soporte técnico precisos para a súa contribución, de xeito que sexa tanto bo para eles/as como para o proxecto. As *pull requests* entrantes revisaranse de maneira oportuna. + +Posto que o grupo está formado por voluntarios/as, é importante comunicar que o soporte é só o seu «mellor esforzo». E, en consecuencia, este modelo de soporte non é adecuado para proxectos de produción críticos en tempo de execución como as *live* API. Será máis axeitado para proxectos que se consomen no tempo de compilación, como librarías/paquetes/módulos. Non se espera que o grupo introduza ningunha funcionalidade nova para outros. + +## Contexto resultante + +* Soporte feble para o proxecto InnerSource. +* A longo prazo, é probable que volva faltar o soporte nalgún momento. Polo que se o proxecto continúa no tempo, deberá empregarse este período de soporte grupal estable para dar cunha forma duradeira de mantelo (por exemplo, o [*core team*](./core-team.md)). + +## Fundamento + +A xente xeralmente estará disposta a axudar. Se alguén quere converterse en [*trusted committer*](./trusted-committer.md), o máis probable é que un gran número de persoas estean de acordo. Sentirse parte dun grupo e ter certa estrutura e responsabilidade, en xeral, motiva á xente a dar o máximo posible, o que a meirande parte das veces acaba sendo suficiente. + +## Exemplos coñecidos + +* WellSky + +## Estado + +* Estruturado + +## Autoría + +* [Russell R. Rutledge](https://github.com/rrrutledge) + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/innersource-license.md b/translation/gl/patterns/innersource-license.md new file mode 100644 index 000000000..2e49e6f75 --- /dev/null +++ b/translation/gl/patterns/innersource-license.md @@ -0,0 +1,93 @@ +## Title + +Licenza InnerSource + +## Patlet + +Dúas entidades xurídicas que pertencen á mesma organización queren compartir o código fonte do software entre elas, mais preocúpanlles as implicacións en termos de responsabilidades legais ou de contabilidade entre as empresas. + +Unha **licenza InnerSource** proporciona un marco legal reutilizable para compartir o código fonte dentro da organización. Isto abre novas opcións de colaboración e fai explícitos os dereitos e obrigas das persoas xurídicas implicadas. + +## Problema + +Cando dúas ou máis entidades xurídicas dentro dunha organización queren compartir código entre elas, necesitan un acordo sobre os termos e moitas veces un contrato legal. Crear tales acordos en base ao proxecto require esforzo e xera unha barreira para compartir; isto é, un equipo dunha entidade xurídica pode decidir non compartir o seu código fonte con outra entidade xurídica da organización por parecer complicado. + +As barreiras para compartir poden levar a silos e duplicación de esforzos na reconstrución de solucións similares en varias partes da organización. + +No momento de compartir o código fonte, non se pode prever de forma fiable cal será o valor de compartir. Se a actividade compartida require un esforzo significativo (por exemplo, negociar os termos para o uso), as persoas xurídicas teñen menos probabilidades de facelo, xa que están preocupadas polo retorno do investimento. + +## Contexto + +- Cando unha grande organización con moitas entidades xurídicas (filiais) crece, o valor do modelo en que estas queren compartir código aumenta. +- Por definición, as entidades xurídicas teñen os seus propios dereitos e obrigas legais. +- Varias destas entidades xurídicas están a desenvolver software e empregan os servizos doutras entidades xurídicas. De xeito que existe unha motivación para contribuír ao código fonte do/a outro/a. +- Suficiente complexidade da organización e da súa estrutura. + +## Aspectos que mellorar + +- **Nivel de esforzo.** Necesario para redactar acordos formais, especialmente se teñen que ter en conta perspectivas técnicas, legais e empresariais. +- **Regulacións internas.** Unha organización grande (formada por moitas entidades xurídicas) ten moitas regulacións internas. Calquera acordo novo terá que cumprir as normativas de, por exemplo, seguridade, privacidade, procesos de contratación etc. O volume das regulacións pode dificultar a valoración de se o uso compartido de software entre dúas entidades xurídicas cumpre coa normativa, especialmente cando non existe un procedemento normalizado. +- **Modelo de negocio.** Deberase discernir se algunha das entidades xurídicas da organización ten un modelo de negocio que depende do código propietario e da contabilidade dos custos de licenza dentro da organización. +- **Cultura da empresa.** Non acostuma a colaborar e compartir código de InnerSource. Isto provoca incerteza sobre os dereitos e obrigas cando se emprega código compartido. +- A liberdade de usar o software leva á competencia e á difusión da propiedade. +- Existen contratos legais para cubrir o feito de compartir o código fonte. Estes contratos non están estandarizados, polo que crean un esforzo adicional na negociación e comprensión de cada proxecto. Os contratos existentes tamén poderían non permitir compartir o código fonte nun sentido o suficientemente aberto como para apoiar un verdadeiro enfoque InnerSource. +- Alternativamente, non hai contratos legais en vigor, pero o código fonte compártese de forma informal. Isto pode xerar incerteza nos casos en que se precisa claridade sobre a propiedade e os dereitos e obrigas. + +## Solucións + +Creación dunha **licenza InnerSource** personalizada ás necesidades da organización en cuestión (e das súas entidades xurídicas). Esta licenza terá que ser o suficientemente xenérica como para poderse aplicar ás relacións entre empresas máis importantes. + +É necesario escribir a licenza InnerSource de xeito que permita as colaboracións reais de tipo software libre entre os límites das entidades xurídicas implicadas. Polo tanto, as catro liberdades do software libre deberían estar integradas na licenza. + +A licenza está escrita como un documento legal formal e pódese utilizar como parte dos contratos entre as entidades xurídicas para rexer os acordos polos que se comparten os códigos. + +## Contexto resultante + +Coa licenza InnerSource temos unha ferramenta para compartir código entre entidades xurídicas dentro da nosa organización. + +A licenza simplifica as conversas dentro da organización sobre o feito de compartir o código fonte, e xa está a motivar ás primeiras entidades xurídicas a facelo. + +**Nota**: O experimento descrito nos **Exemplos coñecidos** atópase nunha fase inicial. Polo tanto, aínda non se formou un **Contexto resultante** firme. Nun par de meses, con efectos máis claros da licenza InnerSource neste espazo problemático, poderase actualizar. + +## Exemplos coñecidos + +DB Systel creou a súa propia licenza InnerSource, pódese consultar en [DB Inner Source License](https://github.com/dbsystel/open-source-policies/blob/master/DB-Inner-Source-License.md). Usaron a [EUPL](https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12), xa que ofrecía un software libre como punto de partida, e despois elaboraron as limitacións e as regras adicionais necesarias no seu contexto organizativo específico. + +As primeiras entidades xurídicas (empresas) dentro da DB AG están a usar a súa licenza InnerSource. + +Un efecto positivo e visible é que simplifica a conversación, especialmente se algunhas das partes implicadas aínda non coñecen ben InnerSource. As licenzas son un concepto moi coñecido, polo que ter unha licenza InnerSource é un grande inicio de discusión. + +Os experimentos tamén están a descubrir outros retos de colaboración que deben resolverse para chegar a un verdadeiro modelo de colaboración e contribución InnerSource. + +Os retos de colaboración mencionados inclúen: + +- Facer que os proxectos con licenza InnerSource sexan detectables. +- Crear comunidades para a colaboración en proxectos, como no software libre. + +Paga a pena mencionar que, ata agora, o software compartido baixo esta licenza InnerSource consiste principalmente en empregar unha serie de ferramentas e infraestruturas. + +## Estado + +* Estruturado. +* O experimento que aparece en **Exemplos coñecidos** está en execución desde 02/2020. A experiencia inicial mostra os primeiros efectos positivos, pero necesítase máis experiencia para avaliar completamente o modelo. + +## Autoría + +- Cornelius Schumacher (DB Systel GmbH) +- Schlomo Schapiro (DB Systel GmbH) +- Sebastian Spier + +## Referencias + +- Presentación FOSSBack 2020: [Cornelius Schumacher - Blending Open Source and Corporate Values](https://youtu.be/hikC6U8X_Ec) [Cornelius Schumacher: Mesturando código aberto e valores corporativos]; vexa a partir do minuto 27:30 para máis información sobre a licenza InnerSource. +- [DB Inner Source License](https://github.com/dbsystel/open-source-policies/blob/master/DB-Inner-Source-License.md). + +## Glosario + +- **Organización**: Un paraugas para varias entidades xurídicas. (Sinónimos: grupo, empresa. Por exemplo, Lufthansa.). +- **Entidade xurídica**: Unha entidade que ten os seus propios dereitos e obrigas legais. (Sinónimos: empresa, filial. Por exemplo, Lufthansa Systems GmbH, Lufthansa Industry Solutions TS GmbH etc). + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/innersource-portal.md b/translation/gl/patterns/innersource-portal.md new file mode 100644 index 000000000..922ce5dc4 --- /dev/null +++ b/translation/gl/patterns/innersource-portal.md @@ -0,0 +1,104 @@ +## Title + +Portal InnerSource + +## Patlet + +Os/As contribuidores/as potenciais non poden descubrir dun xeito sinxelo os proxectos InnerSource nos que están interesados/as. Ao crear unha intranet que indexe toda a información dispoñible do proxecto InnerSource, permítese que os/as contribuidores/as coñezan os proxectos que lles poderían interesar; do mesmo xeito que lles serve aos/ás *project owners* de InnerSource para atraer a un público externo. + +## Problema + +Os equipos do proxecto InnerSource teñen dificultades para atraer contribucións externas. + +Os proxectos InnerSource da súa organización están en aumento, pero os/as posibles contribuidores/as non poden descubrilos dun xeito sinxelo. + +## Historia + +Está tentando establecer unha práctica InnerSource dentro da súa organización. Coñece algúns proxectos que se executan mediante un modelo InnerSource, pero a súa existencia só se comunica a través do boca en boca, o correo electrónico ou conversas privadas con outros/as empregados/as. Como resultado, os/as *project owners* de InnerSource teñen dificultades para atraer aos/ás contribuidores/as. + +Non hai un recurso de acceso único e compartido para os/as empregados/as de toda a organización que lles permita descubrir facilmente tódolos proxectos InnerSource en curso. Isto está a limitar dun xeito importante o potencial de crecemento de cada proxecto InnerSource. + +Que se pode facer para axudar a que tódolos proxectos de InnerSource eleven a súa visibilidade a un público tan grande como sexa posible e poidan atraer contribuidores/as de toda a organización? + +## Contexto + +* A súa organización está interesada en adoptar un estilo de traballo InnerSource. +* Os/As *project owners* de InnerSource buscan unha forma de atraer público aos seus proxectos. Non obstante, están limitados/as polas canles de comunicación dispoñibles a través das cales poderían facer publicidade ante posibles contribuidores/as. +* O número de proxectos InnerSource na súa organización está aumentando. +* O agravante deste problema é o feito de que a aplicación compartida en uso, de xestión de control de fontes, ten capacidades de busca tan limitadas que, ata para os/as desenvolvedores/as que buscan proxectos InnerSource, resulta frustrante localizalos. + +### Requisitos previos + +* Os/As directivos/as aceptan de maneira tácita que os/as seus/súas empregados/as participen nos proxectos InnerSource. +* Está en uso un sistema compartido de xestión de control de fontes que proporciona acceso programático aos contidos dos repositorios que aloxa. +* Existe un departamento dentro da súa organización coa responsabilidade de promover a colaboración InnerSource. + +## Aspectos que mellorar + +* Non se está a conseguir todo o potencial de equipos separados de enxeñaría para colaborar en desafíos compartidos. +* É difícil que os individuos descubran que proxectos InnerSource existen. +* É difícil para os/as *project owners* de InnerSource atraer a un público de contribuidores/as externos/as. + +## Solucións + +É necesario crear unha web de intranet do portal InnerSource na que os/as *project owners* de InnerSource poidan anunciar facilmente a dispoñibilidade dos seus proxectos. + +As propiedades chave do portal poden ser: + +* As persoas visitantes do portal InnerSource deberían poder ver tódolos proxectos dispoñibles e buscar proxectos específicos en función de varios criterios, como o nome do proxecto, as tecnoloxías en uso, os nomes dos/as contribuidores/as, a área empresarial patrocinadora etc. +* A información que se mostra a través do portal InnerSource debe estar baixo o control total dos/as *project owners* de InnerSource en todo momento. E, preferiblemente, esta información obterase directamente dun ficheiro de datos específico ou metadatos almacenados no propio repositorio do proxecto. +* Os/As *project owners* deben incluír toda a información relevante sobre os seus proxectos nos ficheiros de datos; e engadir o nome do proxecto, os nomes dos/as *trusted contributors*, unha breve descrición e ligazóns ao repositorio de código ou calquera documentación do soporte. +* (Opcional) Aínda que a meirande parte das organizacións escollerán facer o seu portal dispoñible só na súa intranet, algunhas outras optaron por deixalo dispoñible na internet pública. Esta última opción pode ser interesante para as organizacións que queiran mostrar información adicional sobre o seu enfoque InnerSource no seu portal; por exemplo, con fins corporativos e de contratación. + +No lanzamento do portal debe terse en consideración unha campaña de comunicación que promova a suma de ficheiros InnerSource de datos ou metadatos aos repositorios de código, para reforzar o número de proxectos que se mostran no portal. + +Unha [implantación de referencia](https://github.com/SAP/project-portal-for-innersource) dun portal InnerSource está dispoñible en GitHub e aberta ás contribucións. Enumera tódolos proxectos InnerSource dunha organización dun xeito interactivo e fácil de usar. Os proxectos poden autorrexistrarse a partir dun tema dedicado de GitHub e proporcionar metadatos adicionais. + +![Exemplo de portal InnerSource](../../../assets/img/portal-overview.png "Exemplo de portal InnerSource") + +## Contexto resultante + +* O portal InnerSource permitiu aos/ás *project owners* anunciar os seus proxectos a toda a organización. Debido a esta maior visibilidade, están a atraer comunidades de contribuidores/as moito máis grandes que nunca antes. +* Para aqueles/as que buscan involucrarse en proxectos InnerSource, o portal InnerSource permitiulles descubrir exactamente o tipo de oportunidades que lles interesan ou poder buscar de maneira simultánea entre tódolos proxectos InnerSource dispoñibles, en función dos seus criterios específicos. +* Satisfacer as necesidades destes dous tipos de audiencia axudou a establecer InnerSource como unha opción viable e atractiva para que tódalas áreas da organización poidan chegar a logros comúns que non poderían alcanzar por separado. + +## Exemplos coñecidos + +* **Unha grande organización de servizos financeiros** empregou a creación dun portal InnerSource para ofrecer un mecanismo de publicidade e descubrimento de proxectos InnerSource existentes en diferentes áreas empresariais. +* **SAP** promove proxectos InnerSource no portal InnerSource: Os proxectos poden autorrexistrarse usando temas de GitHub. A [cualificación da actividade do repositorio](./repository-activity-score.md) define a orde predeterminada dos proxectos InnerSource no portal. Podes ver tamén [Michael Graf & Harish B (SAP) at ISC.S11 - The Unexpected Path of Applying InnerSource Patterns](https://www.youtube.com/watch?v=6r9QOw9dcQo&list=PLCH-i0B0otNQZQt_QzGR9Il_kE4C6cQRy&index=6) [A senda inesperada na aplicación de modelos InnerSource]. A súa base de código publícase como [implantación de referencia](https://github.com/SAP/project-portal-for-innersource) e está aberta a contribucións. +* **Elbit Systems** usou este modelo e engadiulle gamificación. + * [Gamificación como medio de cambio cultural e potenciador de compromiso InnerSource](https://www.oreilly.com/library/view/oscon-2018-/9781492026075/video321579.html) | Shelly Nizri | OSCON 2018: Portland, Oregon. + * De islas, monstros e InnerSource [(presentación)](https://docs.google.com/presentation/d/1P1OCEK9B6eSrVRUclVWY6meSI-qHOBjM_UAPNvCZamU/edit#slide=id.p15), [(vídeo)](https://drive.google.com/file/d/1pM89uHMn0vhE3ayFJDGYcCO8R0tAXXZD/view?usp=drivesdk) | Cume InnerSource primavera de 2019 (Galway, Ireland). + * O [código](https://gitlab.com/gilda2) desta plataforma era de software libre. +* **American Airlines** promove proxectos InnerSource a través dun [*Marketplace* InnerSource interno](https://tech.aa.com/2020-10-30-innersource/). Do mesmo xeito que SAP, os proxectos autorrexístranse engadindo InnerSource como tema de GitHub. Os proxectos pódense buscar e filtrar por idioma, temas, número de incidencias abertas etc. +* **Banco Santander** creou un portal público chamado «Santander ONE Europe InnerSource Community» para dar soporte e mellorar a adopción de InnerSource. Ademais do catálogo de proxectos, o portal inclúe contidos relevantes como documentación, forma de traballar, noticias e eventos. + +![Portal Santander InnerSource](../../../assets/img/santander_portal.png "Portal Santander InnerSource") + +* **Airbus** implantou o [portal SAP](https://github.com/SAP/project-portal-for-innersource) con pequenas modificacións para que coincida coa identidade gráfica de Airbus. Ademais, o/a [indexador/a de Python](https://github.com/zkoppert/innersource-crawler) foi parcheado para funcionar con exemplos de GitHub Enterprise. + +* **Mercado Libre** emprega o [portal SAP](https://github.com/SAP/project-portal-for-innersource) para descubrir os proxectos InnerSource que existen na organización. + +## Referencias + +* Probouse que o modelo do portal InnerSource funciona moi ben co modelo InnerSource de [*Gig marketplace*](./gig-marketplace.md) neste contexto. + +## Estado + +* Estruturado + +## Autoría + +* Stephen McCall + +## Recoñecementos + +* Shelly Nizri +* Melinda Malmgren +* Michael Graf +* Jesús Alonso Gutierrez + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/issue-tracker.md b/translation/gl/patterns/issue-tracker.md new file mode 100644 index 000000000..f605d6b23 --- /dev/null +++ b/translation/gl/patterns/issue-tracker.md @@ -0,0 +1,57 @@ +## Title + +Casos de uso cun sistema de seguimento de incidencias + +## Patlet + +O *host team* de InnerSource non logra ter transparencia nos plans nin no progreso, e tampouco no contexto para os cambios. Isto resólvese aumentando os casos de uso co sistema de seguimento de incidencias do proxecto para que tamén favoreza o intercambio de ideas, o debate sobre estas e o deseño de funcionalidades. + +## Problema + +Un equipo desenvolve un compoñente do que dependen moitos outros equipos da organización. Usa un sistema de seguimento de incidencias estándar para rastrexar *bugs* e *feature requests*. Non obstante, o contexto en cada entrada é moi limitado. Como resultado, os/as posibles contribuidores/as non teñen forma de saber a que cambio se refire exactamente cada unha das incidencias. + +## Contexto + +Está configurada a ferramenta InnerSource para proxectos. Aínda que o sistema de seguimento de incidencias do proxecto emprégase principalmente para compartir o progreso. Nos proxectos InnerSource hai moitos máis casos de uso nos que se pode usar un sistema de seguimento de incidencias que facilitan a comunicación remota e asíncrona. + +## Aspectos que mellorar + +- Os/As contribuidores/as precisarían saber se a funcionalidade que están a botar en falta está xa na folla de ruta. Falta moito contexto nas incidencias, aínda que é imposible decidir se os problemas existentes coinciden coas necesidades do equipo contribuidor. +- Como resultado, ábrense moitas incidencias duplicadas das que ten que dar conta o *host team*. +- Como o contexto das incidencias abertas é tan limitado, os/as contribuidores/as non poden axudar ao *host team* introducindo algunha das incidencias máis sinxelas que xa están abertas. Como resultado, queda moito traballo nas mans do *host team*. +- Co foco orientado principalmente na comunicación verbal, é imposible discernir despois dun par de meses ou anos por que se escolleu engadir unha determinada funcionalidade e non outra. Como resultado, as refactorizacións, en particular a simplificación do compoñente, convértense nun exercicio de arqueoloxía do proxecto, así como de selección memorística, co fin de recordar o que se acordou. + +## Solución + +Adopte a filosofía «o escrito prevalece sobre a palabra», non só para o desenvolvemento de software puro, senón tamén durante a fase de planificación de novas funcionalidades: + +- Para erros, funcionalidades planificadas e ideas de funcionalidades, cómpre crear incidencias separadas. En cada unha delas inclúa a maior cantidade de información posible para que os/as potenciais contribuidores/as externos/as poidan comprender o contexto. Idealmente, e en concreto para os cambios máis doados, inclúa información suficiente para que os/as colaboradores/as externos/as poidan prestar soporte ao *host team* cando introduzan a funcionalidade en cuestión. +- Empregue o sistema de seguimento de incidencias como canle potencial para facer preguntas. Isto é especialmente útil cando se carece doutras fontes de comunicación para resolver as preguntas dos/as usuarios/as. +- Faga uso de etiquetas e categorías para distinguir cuestións utilizadas para diferentes fins. +- Para comezar unha sesión de intercambio de ideas de forma asíncrona, abra unha incidencia para a recollida de ideas. Cando a discusión comece a calmarse, resuma os puntos identificados neste número nun documento separado. Publíqueo para a súa revisión como unha *pull request* para profundizar en puntos individuais que aínda precisan certa aclaración. O documento resultante pódese utilizar para publicar os resultados noutras canles apropiadas, así como para futuras referencias. +- A maioría das introducións do sistema de seguimento de incidencias permiten obter prototipos das mesmas. Faga uso destes, non só para recoller a información que se necesita habitualmente para os informes de erros, senón tamén para incluír suxestións sobre que tipo de información é necesaria para os outros tipos de uso. + +## Contexto resultante + +- Facer un maior uso do sistema de seguimento de incidencias do proxecto para a comunicación permite que os/as contribuidores/as externos/as se deixen guiar e tomen mellores decisións no concernente ás contribucións. +- Un enfoque na comunicación escrita estruturada permite que os membros do equipo de acollida participen de xeito remoto. +- Comunicarse de forma consistente por escrito significa que a documentación pasiva sobre as decisións do proxecto acumúlase como un subproduto en lugar de necesitar atención adicional. +- O uso constante das canles de comunicación públicas fai que cada vez máis persoas poidan seguir a discusión. Isto supón máis xente informada con capacidade para dar resposta ás preguntas, falar de incidencias abertas ou sinalar defectos nas funcionalidades planificadas que, doutro xeito, só se atoparían moito máis tarde. +- Trasladar as discusións a un medio de debate público crea unha oportunidade para que os/as posibles contribuidores/as futuros/as lean, sigan, se sintan cómodos/as e coñezan as vías do proxecto moito antes de formar parte del. + +## Exemplos coñecidos + +* Europace AG – Vexa [Issue Use Cases](https://tech.europace.de/post/using-issues-for-asking-questions-and-tracking-work/) [incidencias de casos de uso] + +## Autoría + +* Isabel Drost-Fromm + +## Estado + +* Estruturado + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/maturity-model.md b/translation/gl/patterns/maturity-model.md new file mode 100644 index 000000000..420cc3423 --- /dev/null +++ b/translation/gl/patterns/maturity-model.md @@ -0,0 +1,220 @@ +## Title + +Modelo de madurez + +## Patlet + +Os equipos comezaron a adoptar InnerSource e a práctica estase estendendo a varios departamentos. Con todo, a comprensión do que constitúe un proxecto InnerSource varía. A solución consiste en proporcionar un modelo de madurez que permita aos equipos realizar unha autoavaliación e descubrir modelos e prácticas que aínda non coñecían. + +## Problema + +Cando a adopción de InnerSource nunha empresa comeza a incrementarse, a mentoría individual de cada proxecto por un/unha experto/a en InnerSource faise inviable. Ademais, cada vez máis persoas están a adquirir, polo menos, unha comprensión básica do que significa traballar nun proxecto InnerSource. Abarcan tódolos proxectos InnerSource aínda que diverxa a profundidade de comprensión do concepto. Os equipos poden non coñecer modelos probados que lles axuden a pasar ao seguinte nivel e a resolver as incidencias e puntos problemáticos cos que estean a tratar. + +## Contexto + +Varios equipos comezaron a adoptar prácticas InnerSource. O nivel exacto de comprensión da práctica diverxe entre os equipos. Os problemas exactos cos que se atopan os equipos diverxen segundo o contexto e o ambiente de traballo de cada equipo. Como resultado, a definición de cales son as mellores prácticas de importancia nun proxecto InnerSource varía dependendo de cada equipo. + +## Aspectos que mellorar + +Os equipos que comparten aprendizaxe en InnerSource teñen malentendidos, pois non son conscientes do seu respectivo nivel de adopción de InnerSource. + +Os equipos cren que «todo consiste en migrar a unha [forxa](https://en.wikipedia.org/wiki/Forge_%28software%29) de desenvolvemento de software compartido» (GitLab, GitHub ou Bitbucket son exemplos coñecidos deste tipo de forxas). + +Os equipos non coñecen as mellores prácticas que lles axuden a resolver as incidencias coas que se atopan na súa actividade diaria. + +## Solución + +Pedir aos equipos que se autoavalíen en base ao modelo de madurez proposto. + +### Transparencia + +**Plans e produtos** + +O proxecto InnerSource benefíciase de que a planificación sexa transparente en toda a organización ao permitir que as partes interesadas comprendan mellor as decisións e inflúan nelas de xeito que poidan ser seguidas por outros/as. + +* PP-0: Os individuos e os equipos non divulgan regularmente os seus plans ou produtos a múltiples partes interesadas. Non existen accións formais na organización. +* PP-1: Os individuos e equipos dan visibilidade aos seus plans ou produtos a múltiples partes interesadas antes de comezar. Folla de ruta compartida. +* PP-2: Xa hai follas de ruta compartidas con directrices claras e regras de contribución nas que os/as interesados/as poden aportar retroalimentación. Non obstante, isto non está estandarizado en toda a organización e non tódolos proxectos proporcionan esta información. +* PP-3: As follas de ruta compártense por defecto e hai un proceso estándar e unha forma homoxénea de facelo en toda a organización a nivel de cada proxecto InnerSource. Esta contén regras claras para contribuír e influír na folla de ruta. + +**Proceso de desenvolvemento e ferramentas** + +Os proxectos InnerSource prosperan cando os/as contribuidores/as se volven activos/as e participativos/as. Como resultado, facilitar as contribucións debería equilibrarse con obxectivos puramente técnicos. + +* DP-0: Cada equipo segue o seu propio proceso de desenvolvemento e ferramentas. Non están definidos para compartir coñecementos e dispositivos fóra do equipo de desenvolvemento. Equipos de desenvolvemento en silos. +* DP-1: Os equipos de desenvolvemento usan repositorios de código compartido internamente. Algúns equipos desenvolven o seu propio proceso de CI, utilizando ferramentas de CI non corporativas ou estándar. Non hai un proceso de revisión de código definido, aínda que algúns equipos de proxectos fano internamente. +* DP-2: A organización patrocina e promove un repositorio compartido para o coñecemento colectivo. Algúns equipos desenvolven o seu propio proceso de CI, usando ferramentas de CI corporativas. Hai ambientes CI, así como un proceso de revisión do código definido que se emprega nalgúns proxectos. Ás veces, a revisión do código é realizada por membros externos do equipo. +* DP-3: A meirande parte dos equipos desenvolven o seu propio proceso de CI, utilizando ferramentas de CI corporativas. Existen ambientes CI, así como un proceso de revisión do código definido e utilizado. A revisión do código realízana os membros do equipo interno e externo. + +**Decisións** + +Para motivar aos/ás compañeiros/as a contribuír ao traballo fóra do seu *core team*, necesítase visibilidade sobre o proceso de toma de decisións do proxecto anfitrión, pero tamén precisan sentir que as súas voces están sendo escoitadas e valoradas. + +* DC-0: Os/As encargados/as de tomar decisións adoitan reter de forma intencionada ou accidental datos e recursos relacionados coas decisións do proxecto. +* DC-1: Os materiais que forman parte das prácticas de toma de decisións están dispoñibles para a súa revisión despois de que se finalicen as decisións. +* DC-2: A xente sente que está ao día e que está axudando a darlle forma ás decisións máis importantes (pero non todas) a medida que se van desenvolvendo. Os materiais que forman parte das prácticas de toma de decisións están dispoñibles nos fitos do proxecto definidos. +* DC-3: As persoas senten que forman parte dun proceso común e estándar para a toma de decisións colectivas que a organización avala. Os materiais que forman parte das prácticas de toma de decisións están continuamente accesibles durante os procesos de traballo. + +**Recursos de utilidade** + +Para atraer contribuidores/as, o material útil de soporte debe ser facilmente accesible. + +* RS-0: Individuos e equipos non contribúen nin recorren a un repositorio de coñecemento compartido. +* RS-1: Individuos e equipos liberan materiais do proxecto para a súa revisión interna, despois de rematar o seu traballo. Individuos e equipos comparten recursos, pero en sistemas ou repositorios desconectados, fragmentados ou individualizados/en silos. Individuos e equipos comparten recursos, pero non existe unha comprensión común ou compartida dos criterios utilizados para determinar se a información é sensible ou non. +* RS-2: Individuos e equipos fan que os materiais relacionados co proxecto sexan accesibles a algúns membros dos equipos do proxecto segundo formatos e/ou protocolos compartidos claramente definidos. Individuos e equipos manteñen datos e recursos confidenciais e proporcionan detalles, contexto e alcance limitados. +* RS-3: Individuos e equipos fan que os materiais relacionados co proxecto sexan amplamente accesibles para a organización e, posiblemente, tamén fóra dela, segundo formatos e/ou protocolos claramente definidos e compartidos. Os individuos e equipos que deben reter datos e recursos confidenciais teñen claro o que non están a compartir, e outros entenden por que eses materiais non están dispoñibles para eles/as. + +## Historia + +Cando se traballe en equipos anfitrións, os erros serán visibles de xeito automático. Para manter os niveis de contribución elevados, a cultura corporativa debe celebrar o fracaso como unha oportunidade de crecemento e aprendizaxe. + +* ST-0: Individuos e equipos non comparten éxitos ou fracasos para que outros aprendan. +* ST-1: Individuos e equipos están cómodos compartindo historias sobre éxitos, pero non sobre fracasos. +* ST-2: Individuos e equipos están cómodos compartindo historias de éxitos e fracasos durante retrospectivas e revisións. +* ST-3: Individuos e equipos están cómodos compartindo historias de éxitos e fracasos e aprenden dos fracasos segundo protocolos formais. + +### Colaboración + +**Canles de retroalimentación** + +Para que se reduzan os silos, os/as compañeiros/as deben sentirse cómodos/as compartindo retroalimentación mutua de maneira aberta. Unha forma sinxela de favorecer isto é utilizar os mesmos principios de comunicación para tódalas xerarquías. + +O ideal é ter unhas canles de comunicación adecuadas que sexan coñecidas por calquera persoa da organización, e centradas en diferentes obxectivos (anuncios, soporte ao/á usuario/a, canles de desenvolvemento, infradiscusións etc.). Algunhas das mellores prácticas que se poden establecer a medida que maduren os seus proxectos InnerSource son: Adopción de directrices de netiqueta, abrir un conxunto probado de canles estándar (que se manteñan arquivados, sexan accesibles ao público e permitan facer procuras) para cada novo proxecto InnerSource. + +* CF-0: Non hai procesos nin canles establecidos. Algúns membros da organización comparten materiais a través de canles ou discusións privadas. +* CF-1: A organización está en proceso de establecer directrices internas e canles para fomentar diversos puntos de vista sobre as decisións empresariais/departamentais, para que calquera persoa pertencente á organización poida utilizalas. Algúns membros da organización comparten materiais para a toma de decisións de forma informal utilizando plataformas non oficiais. Os/As líderes manteñen, polo menos, unha canle clara e directa para que os membros da organización compartan opinións de forma construtiva sobre algúns asuntos relevantes para o seu traballo. +* CF-2: A organización estableceu pautas e canles internas e proporciona recursos específicos (programas de formación, acceso a contidos etc.) para fomentar e solicitar puntos de vista diversos sobre o equipo ou as decisións. +* CF-3: Os membros da organización comparten materiais para a toma de decisións en plataformas oficialmente autorizadas. Os membros da organización comparten materiais abertamente a través de múltiples canles e métodos para obter retroalimentación. Os/As líderes tamén usan esas mesmas canles, animan abertamente a outros/as a que os utilicen e manteñan rexistros de comentarios públicos ou da retroalimentación recibida polo equipo e/ou das accións que tomaron para abordala. + +**Liderado** + +Os proxectos de InnerSource animan aos/ás empregados/as a contribuír a proxectos fóra da influencia directa do/a seu/súa superior directo/a. Isto precisa dunha cultura de confianza. + +* LS-0: Cultura de mando e control dentro dunha organización altamente xerárquica. +* LS-1: Algúns/Algunhas líderes están abertos/as a recibir valoracións e crear un ambiente no que a xente se sinta segura proporcionándoas. +* LS-2: A meirande parte dos/as líderes da organización están abertos/as a recibir retroalimentación e crear un ambiente no que a xente se sinta segura proporcionándoa. Pasividade dos/as líderes ao entender que tódolos membros se senten con poder e habilitados para compartir. A organización anima aos/ás líderes a buscar activamente voces non presentes no diálogo para a súa inclusión. +* LS-3: Os membros séntense con poder e habilitados para compartir opinións de forma construtiva sobre calquera asunto relevante para o seu traballo ou sobre o que lles apaixona. + +**Estrutura organizativa e funcional** + +Cando InnerSource abandona o nivel de codificación pura e entra no nivel da comunidade e do grupo de traballo, hai potencial para reducir os silos aínda que non sexa posible a colaboración directa no código. + +* OF-0: Os grupos de traballo tenden a ser estáticos en termos de pertenza e conxuntos de habilidades. +* OF-1: Existen equipos multifuncionais, pero os roles do equipo adoitan estar pouco claros e as estruturas de goberno son vagas. +* OF-2: Os equipos multifuncionais son comúns e os roles e obxectivos do equipo publícanse abertamente. +* OF-3: Os equipos transversais son comúns e dan a coñecer tódalas súas actividades á organización; á súa vez, a organización promove as mellores prácticas para traballar xuntos/as. + +**Contribución** + +No deseño de modelos de contribucións, o obxectivo é ter en conta a colaboración na procura da redución dos silos. + +* CB-0: Totalmente illado, non hai practicamente colaboración fóra dos equipos; salvo nos casos de equipos multifuncionais. +* CB-1: Os membros da organización e os equipos colaboran pero, con frecuencia, atópano «demasiado difícil». Os equipos apenas revisan os resultados das súas colaboracións. +* CB-2: Os membros da organización e dos equipos buscan activamente oportunidades de colaboración. Os equipos discuten, revisan e debaten habitualmente os resultados dos seus esforzos de colaboración e, de xeito predeterminado, encárganse de que os seus resultados estean dispoñibles. +* CB-3: Os membros da organización colaboran tanto interna como externamente, de forma que beneficie a tódolos/as implicados/as. Os equipos discuten, revisan e debaten habitualmente os resultados dos seus esforzos de colaboración, comparten as súas aprendizaxes fóra da organización e encárganse de que os seus resultados estean dispoñibles de maneira externa por defecto. + +### Comunidade + +**Políticas para compartir** + +Ter unha base de referencia de valores compartidos fai que sexa máis fácil traballar transcendendo os límites do equipo. Cruzar os límites faise máis fácil se un conxunto limitado de regras e directrices base se aplican en todas partes e se poden referenciar con facilidade. + +* SP-0: Non se comparte cultura nin políticas escritas. +* SP-1: Algúns membros da organización únense para definir valores e principios, pero non existe un claro apoio nestes casos. +* SP-2: Os membros da organización documentan colectivamente visións comúns e acordos, como declaracións de misión e códigos de conduta; e son de fácil acceso se precisan consultalos a miúdo. Os materiais de incorporación e os rituais de orientación proporcionan o contexto adecuado para axudar aos novos membros a comprender como se beneficiará a organización das súas contribucións. +* SP-3: Os valores e principios compartidos conforman a toma de decisións, a resolución de conflitos e os procesos de avaliación entre os membros da organización, que fan referencia a estes valores e principios de forma consistente tanto en formato oral como escrito. + +**Sentirse parte da organización** + +Unha das posibles razóns para introducir InnerSource nas organizacións pode ser favorecer un maior grao de compromiso. Este punto fai un seguimento de como está a cambiar a implicación dos/as traballadores/as ao adoptar InnerSource. + +* PA-0: Baixo grao de compromiso, sen colaboración a xente non se sente cómoda compartindo cos/coas demais. +* PA-1: Os membros da organización séntense cómodos compartindo as súas opinións sen medo a represalias, pero só en ámbitos coñecidos. A xente entende que as mellores ideas gañan e as responsabilidades de liderado recaen en persoas cun historial de contribución e compromiso. +* PA-2: Os membros da organización séntense cómodos compartindo os seus pensamentos e opinións sen medo a represalias. Os/As líderes demostran dedicación aos valores compartidos da organización. +* PA-3: A empresa é proactiva á hora de facerlles saber aos membros que se beneficia das súas contribucións; como tal, os membros amosan ter unha conciencia compartida e unha execución apoderada, e senten un sentido de responsabilidade coa comunidade. Os/As líderes entenden que crecen axudando a outros/as a crecer e son mentores/as dos membros máis novos da organización. + +### Gobernación + +**Recompensas** + +Para impulsar a adopción, pódense usar motivadores extrínsecos na procura do incremento da colaboración entre equipos. + +* RW-0: Sen recompensas. +* RW-1: Anímase aos/ás líderes a recompensar colaboracións excepcionais, pero non hai políticas nin procesos establecidos. +* RW-2: Establécense procesos estándar para recompensar colaboracións fóra dos equipos de desenvolvedores/as. Os/As líderes dos equipos ou xuntas deciden quen ten que ser recompensado/a. +* RW-3: As recompensas non só son propostas pola organización, senón que as comunidades poden definir as súas recompensas máis valiosas. A comunidade é a responsable de decidir quen ten que ser recompensado/a. + +**Políticas de seguimento** + +Os proxectos InnerSource necesitan un medio para a autoavaliación. As métricas poden ser unha maneira de facilitar esta avaliación. Ademais, en organizacións cun nivel de adopción de InnerSource maduro, esperamos que se faga un seguimento da adopción do método en función de métricas claras e acordadas. + +* MP-0: Non existen políticas de seguimento a ningún nivel da organización. +* MP-1: As métricas son importantes para certos equipos e comezan a empregalas de forma illada. +* MP-2: Existe unha estratexia a nivel organizativo con respecto ás métricas que axudan a validar políticas específicas en toda a organización. Esta política de seguimento existe a nivel dalgúns proxectos InnerSource. +* MP-3: Hai pautas, recomendacións e adestramentos claros sobre o uso de métricas cunha certa infraestrutura que proporcionou a organización. Isto funciona en ambos niveis: programa InnerSource para comprender a adopción xeral de InnerSource dentro da organización e a nivel dos proxectos InnerSource. + +**Soporte e mantemento** + +O desenvolvemento de funcionalidades non só debe ser propiedade dos equipos de InnerSource: o soporte e o mantemento tamén forman parte das tarefas fundamentais dos equipos. + +* SM-0: Soporte ofrecido polo equipo de desenvolvemento principal ou o equipo de soporte. Un contrato comercial garante o soporte. Non hai coñecemento do produto fóra do equipo. +* SM-1: Existen normas e regulamentos para formalizar o soporte ao produto, impartido por un equipo de soporte especializado. +* SM-2: O soporte ás contribucións de InnerSource formalízase a través de modelos de InnerSource como [Garantía de 30 días](./30-day-warranty.md) ou [Servizo vs. Libraría](./service-vs-library.md). +* SM-3: Existen normas e regulamentos para formalizar o soporte do produto por unha comunidade madura. + +**Cultura** + +Hai varios niveis que avanzan cara a unha cultura colaborativa. + +* CL-0: Silos: os equipos traballan independentemente, pero tamén de forma illada. +* CL-1: Reactiva: Os equipos traballan de forma independente, pero saben como reaccionar ante fallos nas dependencias. +* CL-2: Contributiva: Os equipos axudan activamente coas súas contribucións a mellorar as súas dependencias. +* CL-3: Activista: Os equipos buscan axuda, orientan e contratan novos/as colaboradores/as de forma activa. + +**Roles InnerSource** + +InnerSource inclúe roles explícitos. Aínda que nas fases iniciais algúns modelos pódense empregar sen adoptar eses roles, a comunicación dentro de proxectos será máis doada ao empregar explicitamente títulos de roles . + +* RO-0: Non hai roles específicos que axuden á adopción de InnerSource. Só están presentes os roles de desenvolvemento comúns: desenvolvedor/a, analista, *tester* etc. +* RO-1: Ás veces algúns individuos e equipos contribúen a outros proxectos. Trátase de contribucións técnicas, nas que se ve o rol de usuario/a-colaborador/a. Nalgúns equipos, pódese identificar polo menos un membro como referencia técnica e que explica o proceso de desenvolvemento a outros membros do equipo de desenvolvemento. Podería ser un/unha candidato/a para cubrir o papel de *trusted committer*. +* RO-2: O rol de InnerSource *officer* encárgase da gobernación e do soporte, así como dos procesos etc. Identifica as necesidades educativas e garante que estas se lles proporcionen á organización. Lidera e orienta á organización no compromiso en proxectos de InnerSource. É o primeiro paso formal no camiño, definindo a visión e a folla de ruta de InnerSource. A organización definiu un papel de *trusted committer* como un punto de contacto/referencia non só para os membros do equipo de desenvolvemento, senón tamén para os/as contribuidores/as externos/as. Hai un proceso estándar que describe como contribuír á comunidade, no que está presente o rol de contribuidor/a. O rol de *data scientist* encárgase de xestionar os rastros de actividade que deixa a iniciativa InnerSource, necesarios para medir a súa evolución. O papel de *trusted committer* evolucionará a un perfil máis técnico, e un/unha coordinador/a da comunidade será o/a encargado/a de «dinamizala», sendo a súa principal responsabilidade atraer e reter novos/as desenvolvedores/as-usuarios/as (contribuidores/as-membros da comunidade). +* RO-3: Os/As expertos/as en InnerSource están a moverse dentro da organización para que outros/as coñezan o traballo actual, para que serve InnerSource e como poñelo en marcha; e axudan aos/ás demais a comprender e formar parte da iniciativa. Aparecen tamén colaboradores/as non técnicos/as. + +## Contexto resultante + +Tódolos equipos coñecen as mellores prácticas dispoñibles. + +Os equipos comprenden o seu nivel de adopción de InnerSource. + +Antes de adoptar InnerSource como modelo de traballo, os equipos son conscientes das prácticas que se esperan deles, tanto a curto como a longo prazo. + +## Exemplos coñecidos + +* Entelgy +* Zylk +* Bitergia + +## Autoría + +* Daniel Izquierdo Cortazar +* Isabel Drost-Fromm +* Jorge +* Nerea + +## Recoñecementos + +* Alexander Andrade (especial agradecemento polas correccións ortográficas da versión orixinal). + +## Título alternativo + +Modelo de madurez: Información sobre as mellores prácticas de InnerSource + +## Estado + +* Estruturado +* Elaborado en setembro de 2019 + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/praise-participants.md b/translation/gl/patterns/praise-participants.md new file mode 100644 index 000000000..e4fa3046c --- /dev/null +++ b/translation/gl/patterns/praise-participants.md @@ -0,0 +1,72 @@ +## Title + +Agradecemento aos/ás participantes + +## Patlet + +Tras unha contribución a un proxecto InnerSource, é importante agradecer ao/á colaborador/a polo seu tempo e esforzo. Este modelo brinda unha orientación que non só recoñece dun xeito eficaz a súa contribución, senón que tamén xera un maior compromiso deste/a e doutros/as contribuidores/as. + +## Problema + +Como podemos expresar axeitadamente a nosa gratitude a un/unha contribuidor/a de InnerSource pola súa contribución a un proxecto? Pode ser doado esquecerse de facelo ou non coñecer as palabras ou o medio a empregar para conseguir un efecto e sinceridade axeitados. Tanto os eloxios como os agradecementos son formas sinxelas e económicas de manter aos/ás colaboradores/as e aos/ás seus/súas xestores/as motivados/as e entusiasmados/as por continuar. Un modelo nesta área fai que sexa fácil de facer e garante que a mensaxe se transmita con claridade e sinceridade. + +## Contexto + +* É o/a [*trusted committer*](./trusted-committer.md) ou mantedor/a dun proxecto InnerSource. +* Valora a comunidade de contribuidores/as e quere mantela e seguir a medrar. + +## Aspectos que mellorar + +* Está moi ocupado/a e adoita esquecerse dos toques persoais como os eloxios e agradecementos. +* Se cadra non se sinte cómodo/a en situacións sociais ou non é bo/boa coas palabras. +* O recoñecemento entre iguais é moi importante para a satisfacción laboral e o desenvolvemento profesional. + +## Solucións + +A todos/as nos gusta ser recoñecidos/as polos/as demais. No ámbito profesional, un maior recoñecemento supón tamén unha vía para aumentar a nosa influencia e crecemento profesional. Cada vez que alguén faga un aporte ao teu proxecto InnerSource, recoñéceo/a cun sincero e cumprido «grazas». + +Para as contribucións non triviais (tódalas contribucións ao código e as contribucións significativas de tempo), podes dar as grazas a través dos seguintes mecanismos: + +(1) Chama á persoa polo seu nome en calquera das canles de mensaxería instantánea nas que organices a actividade do seu proxecto (por exemplo, Slack). Que todos/as saiban o que fixo a través dun agradecemento público. + +Exemplo: + +> Todo o mundo @aquí pode darlle a noraboa a @andrew.clegg por actualizar o *rcs-viewer* á última versión do *hebo-client* (https://github.com/rcs/rcs-viewer/pull/81). Grazas por axudar a manter a libraría actualizada, Andy! + +(2) Envíalles un correo electrónico a eles/as e ao/á seu/súa xestor/a (cc'd) de xeito privado agradecéndolles a contribución. Nos casos de aportacións ao código, moitas veces pódese simplemente reenviar o correo co que se notifica a nova combinación do código. + +Exemplo: + +> Ola, Andy, quero agradecerche de novo que fixeras esta actualización. Tal vez levase pouco tempo, pero son as accións individuais como esta as que fan que o proxecto RCS funcione para todos/as nós. Grazas por resolver o teu propio problema dun xeito que tamén fai que o rcs-viewer sexa mellor para todo o equipo. + +## Contexto resultante + +Comentarios como este deixan ao/á contribuidor/a cunha sensación fantástica e listo/a para volver por máis. A combinación de **ambas as dúas** formas de agradecemento proporciónalles recoñecemento diante dos/as seus/súas compañeiros/as (maior alcance) e diante do/a seu/súa superior/a directo/a (maior calado). Isto provoca un sutil efecto chamada para que os/as seus/súas compañeiros/as no chat consideren contribuír eles/as mesmos/as e para que o/a seu/súa superior/a procure alentar aos/ás outros/as subordinados/as directos/as a facer o mesmo. Ademais, o coñecemento do proxecto de InnerSource esténdese ao/á xestor/a, que quizais non coñecía previamente o uso e a implicación do equipo con el/ela. + +Como advertencia: é necesario mantelo crible. Asegúrese de que as súas palabras deriven do agradecemento sincero que sentes pola aportación que fixeron. Manteña o nivel e a énfase dos agradecementos en relación ao seu nivel de implicación. Esaxerar resultará mecánico e pouco sincero e será unha derrota no seu propósito de chegar aos/ás traballadores/as. + +## Modelos relacionados + +* *Just Say Thanks* (do libro [*Fearless Change*](https://fearlesschangepatterns.com/)) + +## Exemplos coñecidos + +* Nike (múltiples proxectos) + +## Estado + +* Estruturado + +## Autoría + +* Russ Rutledge + +## Recoñecementos + +* [Todd Lisonbee](https://github.com/tlisonbee) polos ánimos á hora de «mantelo real». +* [Isabel Drost-Fromm](https://github.com/MaineC) por [esta explicación extra](https://youtu.be/h3MPewsk5PU?t=357) do que é un agradecemento «cualificado». + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/repository-activity-score.md b/translation/gl/patterns/repository-activity-score.md new file mode 100644 index 000000000..97775291f --- /dev/null +++ b/translation/gl/patterns/repository-activity-score.md @@ -0,0 +1,137 @@ +## Title + +Cualificación da actividade do repositorio + +## Patlet + +Os/As potenciais contribuidores/as queren atopar proxectos InnerSource activos que precisen da súa participación. Ao calcular a cualificación da actividade do repositorio para cada proxecto, pódese crear unha listaxe clasificada de proxectos (por exemplo, no [portal InnerSource](./innersource-portal.md)) para que os/as posibles contribuidores/as poidan determinar dun xeito máis doado en que proxecto desexan colaborar. + +## Problema + +En **que orde** se presentarán os proxectos InnerSource? Os KPI de clasificación típicos como as estrelas de GitHub, o número de *forks*, o número de *commits*, as liñas de código e a última actualización non son suficientes para indicar de forma concisa a actividade dun proxecto. + +Os proxectos activos con moito soporte, pero tamén os proxectos bastante novos e entusiastas que necesitan novos/as colaboradores/as, deberían clasificarse nun rango superior ao dos proxectos madurados con pouca actividade ou en modo de mantemento. + +Precísase unha nova métrica derivada de varios KPI para definir unha cualificación fiable e versátil para o nivel de actividade dun proxecto. Pódese utilizar para ordenar proxectos segundo o seu nivel de actividade. + +## Historia + +Cando InnerSource se practica durante moito tempo ou se escala máis aló dun determinado número de proxectos (digamos 50 para dar un limiar significativo), é difícil atopar os proxectos InnerSource máis populares e activos actualmente. Os proxectos que existen desde hai moito tempo son coñecidos, pero poden non estar xa moi activos. Por outra banda, proxectos bastante recentes aínda non teñen unha reputación nin unha comunidade activa. + +Unha listaxe de proxectos InnerSource non debe considerarse un recurso estático, senón un lugar emocionante para descubrir e explorar proxectos novos e activos, do mesmo xeito que unha páxina de noticias que enumera primeiro os temas máis interesantes do día. Así, resulta beneficioso cando a orde dos proxectos se actualiza regularmente e cambia segundo a popularidade e a actividade do proxecto. + +Estas consideracións levaron a un primeiro prototipo para calcular unha cualificación de actividade do repositorio, que funcionou sorprendentemente ben e determinou unha orde de proxectos en constante cambio segundo a súa actividade. + +## Contexto + +Descubrir proxectos InnerSource pódese facilitar co [portal InnerSource](./innersource-portal.md) e o modelo [*Gig marketplace*](./gig-marketplace.md), ou promovendo proxectos noutras canles e plataformas de comunicación. A cualificación da actividade define unha orde predeterminada na que se presentan os proxectos á comunidade. + +## Aspectos que mellorar + +Os KPI automatizados que se poden obter consultando a API de GitHub son só parte da verdade. Que pasa coa calidade do código, a dispoñibilidade dunha boa documentación ou dunha comunidade activa e disposta a axudar que faga do proxecto un lugar divertido para contribuír? + +Tales KPI «brandos» terían que engadirse manual ou semiautomaticamente ao cálculo e á cualificación resultante. Se existen ferramentas que proporcionan máis contexto para o repositorio, como un informe de cobertura de código, pódense introducir facilmente. + +## Exemplo ilustrativo + +![Ecosistema para a cualificación da actividade do repositorio](../../../assets/img/gl/repository_activity_score.png) + +Un enfoque centralizado para calcular e aplicar a cualificación da actividade do repositorio. Consulte [Contexto resultante](#contexto-resultante) para máis información. + +## Solucións + +A cualificación da actividade do repositorio é un valor numérico que representa a actividade (GitHub) dun proxecto InnerSource. Derívase automaticamente de estatísticas do repositorio como as estrelas, as visitas e os *forks* de GitHub e pódense enriquecer con KPI doutras ferramentas ou avaliacións manuais. + +Ademais, considera parámetros de actividade como a última actualización e a data de creación do repositorio para darlle un impulso aos proxectos novos con moita actividade. Os proxectos con pautas de contribución, estatísticas de participación activa e incidencias (de acumulación xeral) tamén reciben unha clasificación máis alta. + +Todo isto pódese obter e calcular de xeito automático usando o conxunto de resultados da [API de busca de GitHub](https://docs.github.com/en/rest/search#search-repositories) e da [API de estadísticas de GitHub](https://docs.github.com/en/rest/metrics/statistics). Tamén se poden integrar outros sistemas de versión de código como BitBucket, Gitlab e Gerrit se hai unha API similar dispoñible. + +O código seguinte asume que o `repositorio` contén unha entidade obtida da API de `busca` GitHub e que o obxecto de `participación` contén unha entidade da API de `estatísticas/participación` de GitHub. + +Se é necesario, pódense facer axustes manuais segundo os KPI brandos (vexa [Aspectos que mellorar](#aspectos-que-mellorar)). + +``` javascript +// calculate a virtual InnerSource score from stars, watches, commits, and issues +function calculateScore(repo) { + // initial score is 50 to give active repos with low GitHub KPIs (forks, watchers, stars) a better starting point + let iScore = 50; + // weighting: forks and watches count most, then stars, add some little score for open issues, too + iScore += repo.forks_count * 5; + iScore += (repo.subscribers_count ? repo.subscribers_count : 0); + iScore += repo.stargazers_count / 3; + iScore += repo.open_issues_count / 5; + + // updated in last 3 months: adds a bonus multiplier between 0..1 to overall score (1 = updated today, 0 = updated more than 100 days ago) + let iDaysSinceLastUpdate = (new Date().getTime() - new Date(repo.updated_at).getTime()) / 1000 / 86400; + iScore = iScore * ((1 + (100 - Math.min(iDaysSinceLastUpdate, 100))) / 100); + + // evaluate participation stats for the previous 3 months + repo._InnerSourceMetadata = repo._InnerSourceMetadata || {}; + if (repo._InnerSourceMetadata.participation) { + // average commits: adds a bonus multiplier between 0..1 to overall score (1 = >10 commits per week, 0 = less than 3 commits per week) + let iAverageCommitsPerWeek = repo._InnerSourceMetadata.participation.slice(-13).reduce((a, b) => a + b) / 13; + iScore = iScore * ((1 + (Math.min(Math.max(iAverageCommitsPerWeek - 3, 0), 7))) / 7); + } + + // boost calculation: + // all repositories updated in the previous year will receive a boost of maximum 1000 declining by days since last update + let iBoost = (1000 - Math.min(iDaysSinceLastUpdate, 365) * 2.74); + // gradually scale down boost according to repository creation date to mix with "real" engagement stats + let iDaysSinceCreation = (new Date().getTime() - new Date(repo.created_at).getTime()) / 1000 / 86400; + iBoost *= (365 - Math.min(iDaysSinceCreation, 365)) / 365; + // add boost to score + iScore += iBoost; + // give projects with a meaningful description a static boost of 50 + iScore += (repo.description?.length > 30 || repo._InnerSourceMetadata.motivation?.length > 30 ? 50 : 0); + // give projects with contribution guidelines (CONTRIBUTING.md) file a static boost of 100 + iScore += (repo._InnerSourceMetadata.guidelines ? 100 : 0); + // build in a logarithmic scale for very active projects (open ended but stabilizing around 5000) + if (iScore > 3000) { + iScore = 3000 + Math.log(iScore) * 100; + } + // final score is a rounded value starting from 0 (subtract the initial value) + iScore = Math.round(iScore - 50); + // add score to metadata on the fly + repo._InnerSourceMetadata.score = iScore; + + return iScore; +} +``` + +## Contexto resultante + +Os/As colaboradores/as son libres de dedicar unha parte do seu tempo ao proxecto InnerSource. De tódolos xeitos, poden optar por contribuír a un proxecto do que dependen para o traballo no seu equipo habitual. Non obstante, tamén poden escoller colaborar en algo completamente diferente, en función dos seus intereses e obxectivos de desenvolvemento persoal. + +Os proxectos pódense clasificar e presentar segundo a cualificación da actividade do repositorio, para dar unha orde significativa nun portal que presente proxectos aos/ás posibles novos/as colaboradores/as. A cualificación pódese calcular sobre a marcha ou nun traballo de fondo que avalíe tódolos proxectos de forma regular e almacene unha listaxe de resultados. + +Un/Unha indexador/a que busca regularmente tódolos repositorios InnerSource (por exemplo, etiquetado cun determinado [tema](https://github.com/topics) en GitHub) tamén pode ser un complemento útil. Ofrece unha listaxe clasificada de proxectos que se poden usar como entrada para ferramentas como o [portal InnerSource](./innersource-portal.md), un motor de busca ou un *bot* de *chat* interactivo. + +## Fundamento + +A cualificación da actividade do repositorio é un cálculo sinxelo baseado na API de GitHub. Pódese automatizar completamente e adaptar aos novos requisitos de forma sinxela. + +## Exemplos coñecidos + +* Empregado no portal de proxectos InnerSource de SAP para definir a orde predeterminada dos proxectos InnerSource. Creouse por primeira vez en xullo de 2020 e, desde entón, foi axustado e actualizado con frecuencia. Cando se propuxo a InnerSource Commons en xullo de 2020, xurdiu este modelo. Vexa tamén [Michael Graf & Harish B (SAP) at ISC.S11 - The Unexpected Path of Applying InnerSource Patterns](https://www.youtube.com/watch?v=6r9QOw9dcQo&list=PLCH-i0B0otNQZQt_QzGR9Il_kE4C6cQRy&index=6) [A senda inesperada na aplicación de modelos InnerSource]. + +## Estado + +* Estruturado + +## Autoría + +* [Michael Graf (SAP)](mailto:mi.graf@sap.com) + +## Recoñecementos + +Grazas á comunidade InnerSource Commons polos consellos rápidos como un lóstrego e moitas aportacións útiles para alimentar este modelo. Especialmente: + +* Johannes Tigges +* Sebastian Spier +* Maximilian Capraro +* Tim Yao + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/review-committee.md b/translation/gl/patterns/review-committee.md new file mode 100644 index 000000000..993978f6e --- /dev/null +++ b/translation/gl/patterns/review-committee.md @@ -0,0 +1,62 @@ +## Title + +Comité de revisión + +## Patlet + +O modelo de traballo InnerSource é un afastamento radical dos enfoques máis tradicionais, tanto para os/as desenvolvedores/as como para os/as seus/súas superiores/as. Ao establecer un comité de revisión como interface entre a iniciativa InnerSource e tódolos altos cargos das áreas empresariais que participan nela, é máis probable que estes últimos se familiaricen coa iniciativa e a apoien; xa que lles brinda un certo nivel de supervisión e control, sen fomentar a microxestión. + +## Problema + +Os altos cargos percibirán o modelo de traballo de InnerSource como un afastamento radical dos modelos de traballo aos que están afeitos e cos que teñen experiencia. Como consecuencia, é probable que rexeiten ou microxestionen a iniciativa InnerSource para tratar de minimizar o risco percibido deste cambio. En ambos os dous casos, os beneficios de InnerSource non se poderían alcanzar. E, como resultado, InnerSource sería logo desacreditado. + +## Contexto + +A empresa A quere presentar a súa primeira iniciativa InnerSource. A meirande parte dos cargos superiores da empresa A non están familiarizados co modelo de traballo de software libre e, en cambio, están afeitos á xestión de estilos de control xerárquico e descendente. + +## Aspectos que mellorar + +- Canto máis control perciba un/unha directivo/a sobre o traballo na iniciativa InnerSource, máis probable é que apoie a iniciativa sen contar con experiencia previa. +- Canta menos experiencia teña un/unha xestor/a co modelo de traballo de software libre, máis probable é que queira controlar o risco da iniciativa. +- Canto máis draconiana e microxestionada sexa a dirección das iniciativas InnerSource, menos probable é que se adopte o modelo de traballo de software libre na medida necesaria. E, como resultado, os beneficios de InnerSource non se poderán acadar. + +## Solución + +- Establecer un comité de revisión composto por altos/as directivos/as de tódalas áreas empresariais que participan na iniciativa InnerSource. +- Os membros do Comité de revisión teñen a autoridade de decidir grupalmente, e en xeral, que proxectos InnerSource recibirán asistencia; así como cales en particular contarán con financiamento. +- Os/As candidatos/as poden ser elixidos/as con anterioridade polos membros do Comité de revisión para presentar a súa proposta de proxecto InnerSource, para a súa consideración durante as reunións do devandito Comité. +- Os/As líderes dos proxectos InnerSource, financiados actualmente polo Comité de revisión, están obrigados/as a informar sobre o estado do seu proxecto durante cada xuntanza do comité. +- Os membros do Comité de revisión están obrigados a proporcionar retroalimentación tanto ás novas persoas candidatas/solicitantes como aos/ás líderes actuais do proxecto durante as reunións do comité. +- Cada proxecto de InnerSource debe ter a oportunidade de reaccionar ás valoracións recibidas nunha sesión do Comité de revisión, no espazo de tempo que reste ata a sesión seguinte, para evitar o peche prematuro do proxecto. +- Un/Unha líder de proxecto InnerSource tamén pode presentar unha moción de cese por iniciativa propia no Comité de revisión. A continuación, o Comité de revisión ten que decidir se ás áreas empresariais que empregan o software se lles debe dar tempo ou non para poñer en marcha medidas para garantir que o desenvolvemento e/ou o mantemento da base de código continúe ata que se atope unha solución alternativa ao desenvolvemento por parte da comunidade InnerSource. (Se é relevante para o negocio ou é unha misión crítica). +- O Comité de revisión debería reunirse regularmente. Xa se probou que unha cadencia de dúas reunións ao ano resulta exitosa. + +![Bosquexo do Comité de revisión](../../../assets/img/gl/review-committee-sketch.png) + +## Contexto resultante + +- Os/As directivos/as empregan con InnerSource unha ferramenta coa que se senten cómodos/as, co fin de obter a cantidade necesaria de información e control sobre o funcionamento interno da iniciativa. Esta familiaridade fará que teñan máis probabilidades de asinar a iniciativa InnerSource e poder conceder o grao de liberdade necesario para os proxectos de InnerSource. +- Os/As desenvolvedores/as aínda poden autoorganizarse ata certo punto. Non hai lugar para a microxestión, xa que o Comité de revisión non se convoca con demasiada frecuencia. + +## Exemplos coñecidos + +- BIOS en Robert Bosch GmbH + +## Estado + +- Estruturado +- Finalizado e revisado na data: 31/8/17 + +## Autoría + +- Georg Grütter, Robert Bosch GmbH +- Diogo Fregonese, Robert Bosch GmbH + +## Título alternativo + +*Cheese Interface* + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/service-vs-library.md b/translation/gl/patterns/service-vs-library.md new file mode 100644 index 000000000..a9d27ad05 --- /dev/null +++ b/translation/gl/patterns/service-vs-library.md @@ -0,0 +1,79 @@ +## Title + +Servizo vs. libraría + +## Patlet + +Os equipos DevOps poden ser reticentes a traballar máis alá dos límites do equipo, en bases de código comúns; posto que non está definido quen sería a persoa responsable de responder ante unha situación de inactividade do servizo. Con frecuencia, a solución pode ser implantar o mesmo servizo en contextos independentes con cadeas de escalada separadas, en caso de caída do servizo ou de factorización dunha gran cantidade de código compartido nunha libraría na que se poidan facer colaboracións. + +## Problema + +Cando os equipos traballan nun marco DevOps, as persoas desenvolvedoras son responsables da posta en marcha de funcionalidades de principio a fin: desde o trato co/coa cliente/a, ata a execución das devanditas funcionalidades, o mantemento e o soporte. Isto supón un desafío cando se traballa máis alá dos límites do equipo: as cadeas de escalada poden non ser as mesmas para os erros que se poden producir en calquera dos equipos. A dependencia do código fonte e a súa execución fai que os equipos se pregunten quen será a persoa responsable de proporcionar asistencia no caso de que se detecten erros. Como consecuencia, os equipos son reticentes a unir forzas incluso cando existe un solapamento significativo dos requisitos. + +## Contexto + +- Os equipos traballan nun marco de microservizos. +- Están organizados/as en equipos DevOps totalmente funcionais: cada equipo é responsable das súas contribucións de principio a fin, entre as que se inclúen o mantemento, a asistencia e a atención ao/á cliente/a. +- Un equipo ten a tarefa de proporcionar un servizo aos/ás seus/súas clientes/as finais, bastante similar a un servizo existente creado por outro equipo. + +## Aspectos que mellorar + +- As rutas de escalada da empresa poden ser diferentes para cada un dos equipos. +- É posible que os membros de cada equipo non estean dispostos a responder ao servizo de asistencia no caso de que se detecten erros que non afectan aos/ás seus/súas propios/as clientes/as. +- Os niveis de gravidade para os mesmos tipos de erros poden ser dispares para cada equipo por mor dos distintos estándares SLA (polas súas siglas en inglés, Acordo do nivel de servizo) que delimitan a relación equipo-cliente/a. +- Os equipos poden ter diferentes restricións de seguridade e barreiras lexislativas que rexen os seus campos de actuación. + +## Solucións + +Separar a responsabilidade do código fonte da súa implantación: ambos equipos traballan para identificar de maneira exacta onde hai solapamentos e sinerxías. + +Só o código fonte compartido se mantén como parte do proxecto InnerSource con responsabilidade compartida. O código fonte compartido debe ser coherente, posto que inclúe todo o código de proba (como as probas de integración, se están dispoñibles) e a maior parte posible do fluxo de traballo da CI para facilitar a validación da contribución. + +Desvinculara configuración e posta en marcha do fluxo de traballo da lóxica empresarial real. Estableza unha segunda implantación do servizo para o segundo equipo. + +Trate a base común como unha libraría que empreguen ambos equipos coa propiedade do código compartido. + +A implantación das configuracións pódese incluír como proxectos independentes na súa carteira InnerSource co obxectivo de permitir que os equipos debatan/colaboren ou que un novo equipo as copie. + +## Contexto resultante + +Os equipos están dispostos a colaborar, o que os beneficia á hora de compartir o traballo de poñer en marcha a lóxica empresarial. + +Un servizo que orixinalmente se creou para funcionar nun marco de traballo específico, convértese nunha solución máis xeralizada baseada nunha necesidade comercial específica. + +Ambos equipos chegan a familiarizarse coas súas respectivas políticas de escalada e coa implantación da configuración, a cal podería identificar melloras na súa propia configuración. + +A probabilidade de que se precisen cambios e se realicen no código fonte compartido aumenta, o que xera oportunidades máis frecuentes para perfeccionar, mellorar e optimizar a execución. + +Finalmente, foméntase a estandarización gradual das operacións no paquete de lanzamento, na telemetría, nos puntos finais de estado/preparación etc., a medida que os equipos se dan conta de que poden manter a configuración de maneira máis eficiente no código compartido, se estes chegan a un acordo sobre as convencións estándar. + +## Ver máis + +Este modelo está relacionado co de [garantía de 30 días](./30-day-warranty.md), o cal adopta un enfoque diferente para resolver os aspectos que mellorar descritos anteriormente. + +## Exemplos coñecidos + +- Europace AG +- Flutter Entertainment: A[aplicación Flutter InnerSource](https://innersource.flutter.com/docs/)ten un repositorio de «servizo» de código compartido para as contribucións entre equipos e o fluxo de traballo da CI co fin de crear e publicar un dispositivo de lanzamento compartido. Cada equipo ten un repositorio de «configuración de uso» que define a súa propia implantación. Isto débese a requisitos normativos cambiantes que impulsaron diferentes requisitos normativos, prácticas de xestión de servizos e incidencias e conxuntos de habilidades de infraestrutura en diferentes áreas de negocio. + +## Estado + +- Estruturado + +## Autoría + +- Isabel Drost-Fromm +- Rob Tuley + +## Recoñecementos + +Grazas Tobias Gesellchen pola revisión interna de Europace AG. + +## Título alternativo + +Servizo vs. libraría: É InnerSource, non execución interna. + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/start-as-experiment.md b/translation/gl/patterns/start-as-experiment.md new file mode 100644 index 000000000..5a69accf0 --- /dev/null +++ b/translation/gl/patterns/start-as-experiment.md @@ -0,0 +1,79 @@ +## Title + +Comece como un experimento + +## Patlet + +Comece a súa iniciativa InnerSource como un experimento de tempo limitado para facilitar que o persoal directivo, que non estea familiarizado con InnerSource, secunde e apoie a iniciativa. + +## Problema + +A empresa considera adoptar unha iniciativa InnerSource pero non se pon en marcha porque a dirección non está segura do seu resultado e, polo tanto, non está disposta a comprometerse cunha inversión. + +## Contexto + +A empresa está a considerar a aplicación de InnerSource para aumentar a eficiencia da colaboración nos proxectos de software. Porén, a maioría do persoal directivo non está familiarizado co modelo de traballo do Sistema de software libre e, en cambio, están acostumados a unha xestión xerárquica de arriba cara abaixo. A iniciativa InnerSource é moi popular entre os/as desenvolvedores/as de software da empresa, sobre todo porque moitos/as deles/as xa a están a empregar ou porque están a desenvolver de maneira activa o software libre. + +## Aspectos que mellorar + +- A dirección procurará verificar as afirmacións arredor das melloras na colaboración mediante InnerSource antes de realizar unha inversión a longo prazo. Isto, xeralmente, implica medir as melloras. +- No caso de que sexa probable que a iniciativa InnerSource teña unha grande aceptación entre os/as desenvolvedores/as e que moitos proxectos dependan dela, a decisión de eliminala tería mala acollida e, polo tanto, sería unha decisión difícil de tomar. A percepción de perda de control resultante podería disuadir a algún/algunha directivo/a de tan sequera comezar a implantar InnerSource. +- A implantación de modelos de traballo ao estilo InnerSource adoitan supor un cambio radical con respecto aos modelos de traballo que se empregaban anteriormente. Polo tanto, é probable que os procesos obrigatorios existentes xa non sexan aplicables e que os procesos de goberno tampouco sexan apropiados. O resultado podería ser que a empresa teña que operar cun regulamento que se atope en terra de ninguén desde o punto de vista xurídico. Como, por exemplo, no caso das regulacións relacionadas co control de taxas e exportacións en grandes corporacións con múltiples entidades xurídicas en múltiples países. + +## Solución + +Declare a iniciativa InnerSource como un experimento cun tempo limitado. Defina e comunique os criterios para que os proxectos se sumen ao experimento InnerSource. Seleccione aqueles criterios que maximicen as posibilidades de construír unha comunidade saudable. Resulta positivo seleccionar unha serie deles cando os coñecementos xerados a partir destes criterios, no contexto do experimento, se poden aplicar intuitivamente a contextos que involucren a outros posibles proxectos InnerSource. + +Exemplos de tales criterios son: + +- Axeitada distribución xeográfica dos/as desenvolvedores/as. +- Axeitada mestura de departamentos nos que se atopan os/as desenvolvedores/as. +- Apertura da comunicación na comunidade. +- Traxectoria profesional baseada nos méritos acadados nesa comunidade. +- Toma de decisións democrática na comunidade. + +Considere a posibilidade de designar o final do experimento como o punto a partir do cal facer un cambio ou pausa para a reavaliación. Considere tamén establecer un [Comité de revisión](./review-committee.md) para aumentar as probabilidades de que a dirección se implique a través da participación. Dependendo da cultura da empresa, podería ser útil acompañar o experimento con métricas axeitadas como en [Primeiros pasos coas métricas](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/patterns/1-initial/introducing-metrics-in-innersource.md). Se os proxectos no experimento non brindan un impacto directo nos ingresos da empresa, considere presentarllos a unha [avaliación entre equipos](./crossteam-project-valuation.md) e para resaltar as súas contribucións de valor. + +## Contexto resultante + +O persoal directivo pode pór en marcha InnerSource polas seguintes razóns: + +- A configuración de carácter experimental alivia a necesidade de que o persoal directivo escudriñe os números do programa InnerSource do mesmo xeito que o farían cos proxectos habituais. +- Enténdese e acéptase a posibilidade de que o experimento fracase. Por outra banda, o risco persoal para os/as directivos/as de apoio minimízase. +- Incluso no caso de fracasar, a configuración garante que a empresa aprenderá do experimento. +- En caso de éxito, os datos recollidos durante o experimento permitirán que o persoal directivo se comprometa a longo prazo con InnerSource. + +As persoas participantes no experimento InnerSource son agora conscientes de que teñen que demostrarlle ao persoal directivo que InnerSource produce os beneficios prometidos. Polo tanto, será útil centrar o traballo naquelas actividades que aporten un valor máis demostrable, aumentando así as posibilidades de éxito. + +Finalmente, comezar cunha práctica a modo experimento, fai que sexa moito máis fácil eludir as normativas e os impedimentos tales como as políticas de ferramentas e os procesos, que poderían diminuír as posibilidades de éxito. + +## Modelos relacionados + +- «Trial Run» (do libro [*Fearless Change*](https://fearlesschangepatterns.com/)) + +## Exemplos coñecidos + +- Robert Bosch GmbH (desenvolvemento de software distribuído globalmente) + +## Estado + +- Estruturado + +## Autoría + +- Georg Grütter (Robert Bosch GmbH) + +## Recoñecementos + +- Jason Zink (Robert Bosch GmbH) +- Diogo Fregonese (Robert Bosch GmbH) +- Robert Hansel (Robert Bosch GmbH) +- Hans Malte Kern (Robert Bosch GmbH) +- Russ Rutledge (Nike) +- Tim Yao (Nokia) +- Clint Caín (Optum) + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/transparent-cross-team-decision-making-using-rfcs.md b/translation/gl/patterns/transparent-cross-team-decision-making-using-rfcs.md new file mode 100644 index 000000000..c9cea0d6f --- /dev/null +++ b/translation/gl/patterns/transparent-cross-team-decision-making-using-rfcs.md @@ -0,0 +1,119 @@ +## Title + +Toma de decisións transparente entre equipos mediante RFC + +## Patlet + +Os proxectos InnerSource que desexan lograr un alto índice de participación e tomar as mellores decisións posibles para tódalas persoas involucradas, necesitan atopar formas de crear sistemas participativos durante todo o ciclo de vida do software. A publicación de documentos internos con peticións de comentarios (RFC) permite manter debates desde o comezo do proceso de deseño. Tamén aumenta as posibilidades de idear solucións cun alto grao de compromiso por parte de tódalas partes implicadas. + +## Problema + +Para que un proxecto InnerSource goce de boa saúde, precisa dunha cantidade substancial de contribuidores/as. Estes contribuidores/as (ou equipos) poden ter diferentes requisitos para o proxecto en cuestión. Por exemplo, é posible que desexen engadir funcionalidades ao proxecto que, ou ben non sexan compatibles entre si ou ben causen unha inflamación insán da arquitectura. + +Descubrir este tipo de desacordos ou malentendidos nunha fase avanzada do proceso, por exemplo, unha vez que o software xa está construído, pode resultar moi custoso. Estes desacordos poden provocar frustracións en tódalas partes, e incluso poden ser prexudiciais para a saúde da cultura de colaboración no proxecto. Unha situación común na que xorde tal desacordo é na *pull request*, a cal se atopa aberta durante moito tempo porque o/a autor/a da solicitude de cambio e as persoas encargadas do mantemento do proxecto non están de acordo en que o cambio proposto deba levarse a cabo. + +No caso dun proxecto InnerSource, esta situación ocorre con maior frecuencia cando varios equipos da empresa se encargan do mantemento do proxecto, é dicir, cando se trata dunha propiedade compartida. + +## Historia + +Un proxecto ou unha aplicación composta por múltiples proxectos mantense grazas a varios equipos diferentes, e cada un deles posúe diferentes áreas do proxecto ou da aplicación. Estes equipos fan contribucións InnerSource ás áreas dos demais, pero os cambios transversais de maior envergadura só os impulsan os/as líderes técnicos/as dos equipos que colaboran entre si, do contrario non se levan a cabo. Isto ten como resultado que a maioría dos/as enxeñeiros/as sexan incapaces de efectuar cambios transversais a grande escala, o que reduce a innovación e as oportunidades de colaboración. + +Ao executar un proceso e un prototipo para as RFC, os equipos e as persoas teñen a capacidade de propor cambios transversais importantes a través dun proceso de toma de decisións transparente, con consultas entre equipos levadas a cabo de xeito asíncrono. O resultado é unha maior innovación, unha colaboración máis intensa e unha maior difusión do coñecemento. Isto depende da aceptación de tódalas disciplinas en todos os niveis e da creación dunha contorna de seguridade psicolóxica para que as persoas poidan propor e debater ideas abertamente. + +Como en todo proceso, isto debe mellorarse de maneira continua. É posible que sexa necesario realizar cambios no prototipo ou no proceso de RFC para garantir que sexa inclusivo, colaborativo e eficaz. + +## Contexto + +- Propiedade compartida por moitos equipos dun proxecto de InnerSource. +- As decisións xerais sobre o deseño non poden tomarse sempre desde un organismo central (por exemplo, un grupo de arquitectos/as), xa que non dispoñen do tempo nin amplos coñecementos técnicos para tomar decisións acertadas en calquera situación que se presente. +- Distintos tipos de usuarios/as teñen unha opinión respecto á dirección que está a tomar un determinado proxecto. Con «usuarios/as» referímonos a: desenvolvedores/as, *product owners*, *product managers* etc. +- As decisións deben tomarse de maneira asíncrona, polo menos nalgúns casos, xa que non é factible convocar reunións síncronas con tódalas persoas participantes de maneira frecuente. +- Procúrase documentar as decisións tomadas, é dicir, asegurarse de que se toman por escrito, no canto de só verbalmente. + +## Aspectos que mellorar + +- A maioría das veces, as partes involucradas queren tomar unha decisión con bastante rapidez (por exemplo, o tempo de deseño inicial é bastante limitado). +- Escribir cousas (sen levalas á práctica previamente) adoita ser unha nova habilidade para moitas das persoas implicadas. + +## Exemplo ilustrativo + +![Proceso RFC empregado no proxecto BaseUI (exemplo de software libre)](../../../assets/img/rfc-process-uber-baseui.png) + +## Solucións + +Eliximos un proceso similar a RFC para aumentar a transparencia do noso proceso de toma de decisións entre equipos (vexa tamén [RFC](https://en.wikipedia.org/wiki/Request_for_Comments)). + +Os elementos importantes para resolver este caso son: + +- Unha descrición que informe do momento no que publicar un RFC (e cando non hai que facelo). +- Un prototipo para documentos RFC: + - Debe facer que o autor de RFC considere a súa proposta desde múltiples ángulos. + - Debe apuntar tanto unha descrición xeral accesible de alto nivel como unha explicación detallada en profundidade. +- Un proceso comprensible e ben coñecido arredor dos RFC, por exemplo: + - Como publicar RFC e compartilo con tódalas partes interesadas (por exemplo, en Slack ou pola listaxe de correo). + - Como recoller comentarios para RFC. + - Como traballar a retroalimentación. + - Como trasladar o RFC cara unha conclusión ou decisión (por exemplo, no caso de designar ás persoas responsables de mantemento pertinentes para que a proben). + - Elección das ferramentas apropiadas (por exemplo, é posible que os/as non enxeñeiros/as non teñan acceso ás ferramentas de control de código fonte). +- Un compromiso que repetir no proceso e prototipo RFC. + +### Exemplos/Prototipos + +- [Rust](https://github.com/rust-lang/rfcs) é un bo exemplo de prototipo e proceso RFC dun software libre, e foi a base de moitos outros procesos RFC. +- [Prototipo RFC xeralizado en BBC iPlayer & Sounds](https://github.com/InnerSourceCommons/InnerSourcePatterns/blob/main/patterns/2-structured/templates/rfc.md), orixinalmente baseado no prototipo de [Rust](https://github.com/rust-lang/rfcs). + +## Contexto resultante + +A posta en práctica dun proceso similar a RFC demostrou ser valiosa, xa que fai que o proceso de toma de decisións entre equipos sexa máis transparente para todos/as, o que permite que tódalas voces sexan escoitadas. + +Efectos positivos observables: + +- **Democratización do proceso de toma de decisións** que afectan a moitos equipos (o que tamén libera aos/ás líderes de equipo desa carga). +- **Un método de comunicación asíncrono e aberto** que funciona ben con múltiples equipos en zonas xeográficas. +- **Apodera a individuos e equipos** para efectuar cambios a grande escala. +- **Rexistro de decisións tomadas** para que as persoas poidan consultalas en contexto. +- **Aumenta o impacto dos/as enxeñeiros/as experimentados/as**, xa que poden dar solucións de forma asíncrona e en remoto, en lugar de ter que estar presentes nunha reunión. +- **Aliñación terminolóxica**, por exemplo, detallando a nosa terminoloxía de diagnose como: «Que é unha proba de sistema?». +- **Aliñación de procesos**, por exemplo, detallando o proceso de soporte fóra de horario laboral. +- **Maior claridade de pensamento**, xa que escribir un RFC fai que a persoa autora se desafíe a si mesma máis que de costume. + +O enfoque RFC tamén ten o risco de: + +- Non funcionar sempre; por exemplo, algunhas persoas poderían argumentar en contra dunha decisión que xa se tomou a través dun RFC. Porén, que o proceso de toma de decisións sexa por escrito segue sendo beneficioso nestes escenarios, xa que pode indicarlles ás persoas cando e por que se tomou unha determinada decisión. +- Redactar propostas de deseño (arquitectura, protocolos etc.) por adiantado ten un elemento de desenvolvemento en fervenza que non se axusta ao enfoque de desenvolvemento iterativo que prefiren moitos equipos. Lembre: «Software de traballo sobre documentación completa» ([Agile Manifesto](https://agilemanifesto.org/)). O proceso RFC debe ser o máis lixeiro posible. +- Un RFC pode volverse grande e demasiado difícil de manexar. Isto adoita amosarse en forma de longos fíos de comentarios e discusións que o rodean. Nesas situacións, podemos decidir complementar o RFC con comunicación síncrona, elaborando un grupo de traballo e pautando reunións presenciais. Aínda así conséguese aforrar tempo, posto que as persoas poden ler o RFC antes da xuntanza no canto de compartir toda a información só durante a xuntanza. + +## Fundamento + +Os RFC demostraron a súa valía no mundo do software libre durante moitos anos. Un exemplo disto é o da Internet no seu conxunto, no cal os RFC foron fundamentais no desenvolvemento de estándares (por exemplo, consulte [30 anos de RFC](https://www.rfc-editor.org/rfc/rfc2555.txt)), como para outros proxectos de software libre que adaptaron este método co obxectivo de promover a toma de decisións transparente na súa comunidade (por exemplo, [RUST](https://github.com/rust-lang/rfcs) e [ZeroMQ](https://rfc.zeromq.org)). + +No contexto InnerSource, outras empresas tamén compartiron xa as súas experiencias con enfoques similares a RFC, como é o caso de [Uber](https://blog.pragmaticengineer.com/scaling-engineering-teams-via-writing-things-down-rfcs/) e [Europace](https://github.com/open-organization/open-org-distributed-work-guide/blob/master/drostfromm-remote-first-through-openess.md#setting-cross-team-standards-and-best-practices-in-the-open). + +Por outra banda, en canto á toma de decisións fóra das puras decisións de deseño de software, os exemplos de transparencia poden ser efectivos, por exemplo, cando se traballa de cara a unha Organización Aberta. Para ver un exemplo, consulte [Red Hat’s Open Decision Framework](https://www.redhat.com/en/about/press-releases/red-hat-releases-open-decision-framework-spur-transparent-and-inclusive-leadership) (feito público o 7 de xuño de 2016). + +## Exemplos coñecidos + +- **BBC iPlayer & Sounds**: Tal como se presentou no cume de outono de 2020 de ISC, [*Using Internal RFCs to Enhance Collaboration*](https://www.youtube.com/watch?v=U6zlghE0HcE) [O uso de RFC para promover a colaboración]. +- **Europace:** Como se describe en Open Organization: [*Setting cross-team standards and best practices in the open*](https://github.com/open-organization/open-org-distributed-work-guide/blob/master/drostfromm-remote-first-through-openess.md#setting-cross-team-standards-and-best-practices-in-the-open) [Establecemento de estándares entre equipos e mellores prácticas no marco de decisións aberto]. +- **Uber:** Segundo esta publicación de blog de Gergely Orosz: [*Scaling Engineering Teams via RFCs: Writing Things Down*](https://blog.pragmaticengineer.com/scaling-engineering-teams-via-writing-things-down-rfcs/) [A escalada dos equipos de enxeñaría mediante RFC]. +- **Google Design Docs:** Como se describe na publicación de blog de Malte Ubl: [Design Docs at Google](https://www.industrialempathy.com/posts/design-docs-at-google/)[](https://www.industrialempathy.com/posts/design-docs-at-google/). +- **DAZN** (10/2021): Un dos xeitos mediante os que DAZN leva a cabo a toma decisións técnicas é a través de RFC. Os RFC empréganse para decisións que se aplican exclusivamente a procesos de enxeñaría! Os RFC atópanse nun repositorio de GitHub, os estándares técnicos adóptanse gradualmente dentro das súas ferramentas e polos/as seus/súas enxeñeiros/as. Así, calquera enxeñeiro/a pode propor un RFC e o resto dos/as enxeñeiros/as poden votar por este RFC. Se os votos a favor superan aos votos en contra, adóptase o RFC. Vale a pena sinalar que o proceso de votación de RFC aínda non foi probado por ningunha decisión contenciosa. Tal e como se describe nesta publicación de blog de Lou Bichard: [*Building A DX Team: Lessons Learned*](https://medium.com/dazn-tech/building-a-dx-team-lessons-learned-4a66446088bc) [A construción dun equipo A DX: Leccións aprendidas]. + +## Estado + +- Estruturado + +## Autoría + +- Tom Sadler +- Sebastian Spier + +## Títulos alternativos + +- [*Design Docs*](https://www.industrialempathy.com/posts/design-docs-at-google/) +- Architecture Decision Record (ADR, en inglés, Rexistro das decisións sobre a arquitectura): Non necesariamente un título alternativo, xa que ás veces pódense usar de maneira moi diferente, por exemplo, o uso de RFC para buscar aportes e xerar consenso, o uso de ADR para rexistrar decisións e facer execucións en detalle. + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/patterns/trusted-committer.md b/translation/gl/patterns/trusted-committer.md new file mode 100644 index 000000000..61aea9b64 --- /dev/null +++ b/translation/gl/patterns/trusted-committer.md @@ -0,0 +1,128 @@ +## Title + +*Trusted commiter* + +## Patlet + +Moitos proxectos InnerSource recibirán valoracións constantemente ou requirirán a posta en marcha de novas funcionalidades e a corrección de erros por parte dos/as contribuidores/as. +Nestas situacións, as persoas encargadas do mantemento do proxecto buscan formas de recoñecer e recompensar o traballo do/a contribuidor/a máis alá das contribucións individuais. + +## Problema + +- As persoas encargadas do mantemento de proxectos queren atopar xeitos de incrementar a súa capacidade para brindar apoio a un proxecto. +- As persoas encargadas do mantemento de proxectos queren atopar xeitos de prolongar o valor que aportou o proxecto. +- As persoas encargadas do mantemento de proxectos queren recompensar visiblemente aos/ás contribuidores/as frecuentes e capacitalos/as para que melloren o valor das contribucións. +- Falla de mecanismos e linguaxe para recoñecer as contribucións que levaban a cabo os equipos dunha organización. + +## Contexto + +- Vostede é a persoa encargada do mantemento dunha libraría, un servizo ou un recurso compartido entre equipos. +- Recibe contribucións regularmente. +- Recibe peticións de funcionalidades regularmente. +- Recibe solicitudes periódicas de corrección de erros. +- Hai contribuidores/as con motivación propia que buscan desenvolver as súas competencias a través de proxectos InnerSource. + +## Aspectos que mellorar + +- Durante o ciclo de vida dun proxecto, o enfoque dos/as mantedores/as pode mudar co fin de adaptarse ás prioridades comerciais cambiantes. +- Os/As contribuidores/as buscan un recoñecemento visible das súas contribucións, que amose valor. +- Manter un proxecto de complexidade razoable resulta complexo para un equipo pequeno. +- Desenvolver funcionalidades de proxecto a escala é esixente para un equipo pequeno. + +## Solución + +### Definir o rol do/a *trusted committer* nun proxecto + +O labor do/a *trusted committer* depende de cada proxecto e do seu persoal encargado de mantemento. Asegúrese de documentar no proxecto o alcance da función do seu/súa *trusted committer*. A documentación específica establece o que cabe esperar dos novos membros da comunidade e establece o papel dos/as futuros/as candidatos/as. + +A continuación, enuméranse algunhas pautas para identificar un/unha posible *trusted committer*: + +- Un/Unha participante activo/a nas canles da comunidade (Slack, triaxe de problemas en JIRA etc.) convértese nun/nunha *trusted committer* formalizando, así, o seu papel de apoio á comunidade. +- Alguén que envía código, documentación ou outros cambios no repositorio. Comece por incluír a esta persoa nas *pull requests*. Se participa de xeito activo nas *pull requests*, considere achegarse a esa ou a esas persoas para propoñerlle unha maior colaboración no proxecto. + +### Formalizar aos/ás *trusted committers* + +O primeiro paso é achegarse ás persoas candidatas para que se convertan en *trusted committer*. O persoal encargado do mantemento debe educar ás persoas candidatas sobre o papel do/a *trusted committer*. Non se espera que as persoas candidatas acepten o rol de *trusted committer*. Cada candidato/a debe avaliar se ten o ancho de banda necesario para asumir as responsabilidades. + +Cando un/unha candidato/a acepta o rol, correspóndelle ao persoal encargado de mantemento do proxecto recoñecer publicamente o paso de usuario/a a *trusted committer*. Tamén é unha boa idea engadir o seu nome a unha sección de *trusted committers* no README do seu proxecto. Como por exemplo: + +```markdown +# project-name + +... your project's readme ... + +## Project Leaders + +### Maintainers + + - Your team + +### [Trusted Committers] + + - The name of the new trusted committer + +[Trusted Committers]: https://example.com/link/to/your/trusted/committer/documentation.md +``` + +### Mantemento de relacións entre *trusted committers* + +Unha vez que formalice a incorporación dun/dunha novo/a *trusted committer*, é unha boa idea mantelo/a informado/a mentres continúa iterando no seu proxecto. Manter informados/as aos/ás *trusted committers* pode ser tan sinxelo como convidalos/as á súa canle de proxecto ou incluílos/as nas súas sesións de planificación. Deste xeito, se os/as *trusted committers* teñen máis oportunidades de participación, poderán ter acceso ao persoal encargado do mantemento, se así o desexan. + +Ademais de manter informados/as aos/ás *trusted committers*, resulta positivo pórse en contacto de maneira periódica. Unha cadencia suxerida é comezar cada semana antes de progresar gradualmente a cada poucas semanas. O propósito destes contactos é asegurarse de que o/a *trusted committer* se sinte apoiado no seu novo papel. Ao igual que nas reunións 1:1 co/coa seu/súa xerente, se hai algún problema, escoite e empatice para tratar de comprender que está a impedir que o/a *trusted committer* teña éxito. [Agradézalle sempre a este o seu esforzo continuo](./praise-participants.md) por facer que o proxecto sexa exitoso e estableza, así, unha nova data para volver a contactar. + +### Cese dun/dunha *trusted committer* + +Hai momentos nos que pode ser necesario prescindir dun/dunha *trusted committer*. Estas circunstancias acontecen cando o/a *trusted committer*: + +- Xa non está disposto/a a participar. +- Xa non pode cumprir coas súas funcións. +- Xa non é empregado/a da empresa. + +Ambas partes deben acordar un plan para eliminar o acceso aos recursos do proxecto, tales medidas inclúen a transición da súa entrada na sección de ***trusted committer*** dun proxecto a unha listaxe de contribuidores/as anteriores. + +Despois de eliminar o acceso, [agradeza ao/á *trusted committer* a súa participación de maneira pública](./praise-participants.md). O recoñecemento público asegura unha comunicación clara no proceso de transición e continuidade da comunidade. + +## Contexto resultante + +### Para os/as contribuidores/as + +Acadar o *status* de *trusted committer* nun proxecto demostra iniciativa á hora de contribuír a un proxecto comunitario. O recoñecemento destes esforzos pódese utilizar durante as revisións anuais cos/coas xerentes. + +### Para os/as mantedores/as + +A medida que un proxecto madura, as persoas encargadas do mantemento poden familiarizarse menos cos aspectos chave dun proxecto. Os/As *trusted committers* enchen estes ocos baleiros, asegurando que tódolos aspectos do proxecto sexan atendidos mellor co tempo. + +Contar cun conxunto robusto de *trusted committers* asegura que, se o persoal encargado do mantemento do proxecto segue adiante, sempre existirá un plan para a administración responsable. + +## Exemplos coñecidos + +Esta iniciativa foi levada a cabo con éxito en: + +- Nike +- Paypal +- Mercado Libre: Engadindo unha sección no arquivo `CONTRIBUTING.md` para informar de quen son os/as *trusted committers*. +- Robert Bosch GmbH: Non se designou co nome de «*trusted committer*», pero si se implantou este rol ao comezo da implantación de InnerSource. Os/As *trusted committers* recibiron financiación para o 100 % do seu tempo laboral co obxectivo de que puidesen centrarse neste papel. + +![Sección dos/as *trusted committers* en CONTRIBUTING.md de Mercado Libre](../../../assets/img/mercadolibre-trusted-committers.png) + +## Estado + +- Estruturado. +- Publicado internamente en Nike; redactado a través dunha *pull request* en xuño de 2018. + +## Autoría + +- [Fernando Freire](https://github.com/dogonthehorizon) + +## Recoñecementos + +- [Rusell Rutledge](https://github.com/rrrutledge) +- [Loren Sanz](https://github.com/mrsanz) +- [Noah Cawley](https://github.com/utanapishtim) +- [Jeremy Hicks](https://github.com/greatestusername) +- [Doron Katz](https://github.com/doronkatz) + +## Tradución + +- Leticia Gómez Cadahía +- María Lucía González Castro diff --git a/translation/gl/templates/CONTRIBUTING-template.md b/translation/gl/templates/CONTRIBUTING-template.md new file mode 100644 index 000000000..50b1daaab --- /dev/null +++ b/translation/gl/templates/CONTRIBUTING-template.md @@ -0,0 +1,37 @@ +# Prototipo CONTRIBUTING + +## Tipos de contribucións + +Nesta sección proporcione información sobre o tipo de contribucións que está a procurar o seu proxecto. Por exemplo, poden ser informes de erros, axuda para responder preguntas dos/as usuarios/as, melloras da documentación, corrixir erros e a posta en marcha de funcionalidades. + +## Informes de erros + +Engada información sobre como enviar informes de erros neste apartado. Isto debe incluír suxestións sobre o tipo de información que precisará o proxecto para reproducir e solucionar problemas. Tamén pode incluír información sobre os erros de configuración máis comúns que parecen *bugs*. + +Ademais, deberá incluír información sobre o que os/as contribuidores/as poden esperar en termos do tempo que transcorre dende a primeira resposta e o proceso posterior. + +## Peticións de funcionalidades + +Engada información sobre como enviar *feature requests*. Do mesmo xeito, tamén debería incluír neste apartado a información sobre o que cabe esperar por parte dos/as contribuidores/as, en termos do tempo da primeira resposta e do proceso posterior. + +## Contribucións de documentación + +Inclúa información sobre as mellores prácticas de documentación que segue o seu proxecto, así como instrucións sobre como crear a documentación, a execución de verificacións e o envío de cambios realizados no proxecto. + +## Contribucións de código fonte + +Esta sección debería conter información sobre: + +- Como acceder ao código fonte do proxecto. +- Disposición xeral do proxecto. +- Calquera requisito para o medio de desenvolvemento. +- Directrices de formato de código. +- Como executar o conxunto de probas. + +## Como chegar a ser *trusted committer* + +Esta sección debe facer explícito o proceso para converterse nun/nunha *trusted committer* se esa ruta está aberta aos/ás contribuidores/as. + +## Como nomear ao/á *trusted committer* + +Esta sección serve a modo de recordatorio para os/as *trusted committers* existentes e como explicación para os/as novos/as. Nela detállase como engadir a outras persoas ao *host team*. Deste xeito, o ideal é que esta información sexa idéntica para tódolos proxectos da organización, de modo que a información máis relevante se poida vincular desde aquí. diff --git a/translation/gl/templates/README-template.md b/translation/gl/templates/README-template.md new file mode 100644 index 000000000..2bc1da0d6 --- /dev/null +++ b/translation/gl/templates/README-template.md @@ -0,0 +1,50 @@ +# Prototipo README + +## Misión + +Esta sección debe conter unha descrición breve (de entre tres e cinco liñas) na que se describe a misión do seu proxecto. O obxectivo é indicar en que planea traballar e axudar aos/ás contribuidores/as externos/as a comprender que tipos de funcionalidades serán benvidas neste proxecto. + +Véxase tamén o capítulo de definición da [misión](https://producingoss.com/en/producingoss.html#mission-statement) en produción de software libre. + +## Comezo + +Esta sección debe conter documentación breve escrita para os/as novos/as usuarios/as, sobre como comezar a usar o proxecto. Pódese vincular documentación máis detallada desde aquí. + +## Máis información + +Esta sección pode enumerar calquera ou cada un dos seguintes aspectos: + +- Unha listaxe de funcionalidades, casos de uso que aborda o software. +- Información sobre os principios de deseño que se utilizan para resolver as contradicións. +- Ligazóns á documentación adicional a nivel de usuario/a. +- Respostas a preguntas frecuentes (FAQ), preferiblemente nun formato que permita vincular preguntas específicas máis as súas respostas para facilitar a súa consulta. + +## Axuda + +Esta sección debe conter unha breve documentación sobre a maneira de obter axuda para o proxecto como persoa usuario/a. Isto podería ser tan simple como dirixir ás persoas aos/ás usuarios/as ao sistema de seguimento de incidencias se así é como lle gustaría responder ás preguntas relativas ao proxecto. Tamén podería indicar unha canle de chat arquivada na que se poidan realizar buscas, algunha listaxe de correo arquivada na que se poidan realizar buscas ou algún foro de usuarios/as en liña. + +## Familiarización + +Esta sección debe incluír información breve sobre como entrar en contacto co proxecto; polo xeral, este apartado contén as ligazóns ás canles de comunicación arquivadas e de busca. + +## Quen somos + +Este é un bo lugar para dar crédito aos/ás *trusted committers* do proxecto. + +Tamén é a sección na que incluír información sobre o que significa ser un/unha *trusted committer* no proxecto, aínda que o ideal é que tódolos proxectos dunha organización empreguen a mesma definición, á cal pode acceder só mediante unha ligazón neste apartado. A razón de poñer aquí a ligazón é que, deste xeito, os/as compañeiros/as que teñen pouca ou ningunha experiencia traballando ou contribuíndo en proxectos InnerSource contan cunha canle directa á información dos proxectos tecnolóxicos da empresa que precisan para o seu traballo diario. + +## Contribucións + +Nesta sección debe documentar (ou incluír unha ligazón á documentación) aqueles aspectos que calquera novo/a contribuidor/a precisa saber para comezar. Polo xeral, non se cubrirán tódolos temas seguintes. Céntrese naquilo que difire no seu proxecto respecto da configuración estándar, así como naquilo que lles resultou difícil de entender aos/ás contribuidores/as anteriores. + +- Atopar o código fonte. +- Atopar unha listaxe de incidencias coas que o seu proxecto precisa axuda que pode ser técnica ou non. Polo xeral, os/as contribuidores/as poden acceder a través dun sistema de seguimento de incidencias. +- Ligazóns á documentación adicional, por exemplo, sobre a arquitectura do proxecto, convencións xerais de codificación, convencións de proba... +- Para contribucións técnicas: Facer cambios, construír o proxecto e probar os cambios. +- Enviar os cambios ao proxecto. + +Tamén incluirá información sobre como é o proceso preferente para os cambios no proxecto: Os/As contribuidores/as deberían primeiro abrir unha incidencia e enviar unha proposta, ou son benvidos/as a enviar os cambios directamente? Que é importante para vostede á hora de revisar as contribucións? + +Ademais, debe describir os valores de deseño que desexa seguir no proxecto. Facelos explícitos adoita axudar a resolver as contradicións con maior rapidez e facilidade. Ademais, axuda a facer transparentes os cambios en supostos que, doutro xeito, estarían implícitos. + +Co tempo notará que esta sección crece substancialmente. Nese caso, pense en trasladar a información a arquivos separados, por exemplo, a `CONTRIBUTING.md` e `TESTING.md`. diff --git a/translation/gl/templates/pattern-template.md b/translation/gl/templates/pattern-template.md new file mode 100644 index 000000000..80459d9ea --- /dev/null +++ b/translation/gl/templates/pattern-template.md @@ -0,0 +1,70 @@ +# Apéndice + +## Prototipo de modelo + +### Título + +Engadir un título curto + +### Descrición do caso + +Descrición concisa de entre unha ou dúas liñas na que se expón o problema e a solución. Os/As lectores/as poden revisar de maneira rápida ducias destas descricións de casos e navegar pola libraría de modelos. + +### Problema + +Cal é o problema? Neste apartado definirase o problema de maneira concisa; breve descrición, xeralmente non máis dun par de liñas, que explique cales son os problemas e os desafíos. Teña coidado con non mesturar a información que se atopa nas seccións seguintes. + +### Historia (opcional) + +Ás veces hai un caso particular que permite comprender mellor o modelo. + +### Contexto + +Onde está o problema? Cales son as circunstancias previas? É importante describir cales son os aspectos **inalterables** antes de que a solución se poña en marcha. O contido que aquí se describe, a miúdo, está vencellado á aplicación do modelo para outros/as usuarios/as que se pregunten: «É esta unha a situación semellante á miña?». + +### Aspectos que mellorar + +Que dificulta o problema? Cales son os sacrificios? Neste apartado, abórdanse as limitacións que **poden cambiar** a un certo custo. A solución podería mudar un ou máis destes impedimentos co obxectivo de resolver o problema, o cal tamén afecta ao contexto. + +### Exemplo ilustrativo (opcional) + +Ilustración visual. + +### Solucións + +Resolucións verificadas e posibles solucións ao problema. + +### Contexto resultante + +Cal é a situación resultante unha vez que se resolve o problema? O contexto orixinal cambia de xeito indirecto unha vez aplicada a solución. A miúdo, esta sección pode incluír a discusión dos posibles modelos/problemas presentados a continuación. O contido deste apartado pode ser breve, pois é posible que a solución non presente novos problemas nin modifique moito o contexto. + +### Fundamento (opcional) + +Nesta sección explícase o motivo polo cal unha solución concreta é a axeitada; empréganse outras palabras para explicar a razón pola que esa solución equilibra eses aspectos que se precisan mellorar co contexto, co fin de resolver o problema. Esta sección poderíase ampliar segundo outros posibles escenarios ou teorías. + +### Exemplos coñecidos (opcional) + +Onde se aplicou o modelo antes? Esta sección axuda a reforzar a idea de que se trata dun modelo REAL e que coincide co contexto. + +Pode facer referencia a: + +- Un negocio en concreto. +- Casos anónimos, por exemplo: «Tres empresas demostraron que esta é unha boa solución» ou «a grande organización de servizos financeiros...». + +### Estado (opcional ata a integración) + +O estado xeral do modelo almacénase no sistema de etiquetado de GitHub; consulte aquí calquera *pull request*. Teña en conta que o sistema de etiquetado de GitHub faise menos visible unha vez que o modelo se remata e se integra, polo que é útil contar con información neste eido. + +Tamén pode almacenar outra información de interese neste apartado, como un historial de revisión, por exemplo: «Tres de nós revisamos isto o 5/2/17 e precísase dos coñecementos especializados de John antes de que se poida continuar». + +### Autoría (opcional) + +En moitos casos, vostede mesmo/a pode formar parte da autoría. Se é necesario, procure a alguén en InnerSource Commons para que sexa o/a autor/a nominal (tal e como se explicou anteriormente). Tamén podería manter o anonimato no caso de que non queira asumir a autoría (algo común cando se emprega un *donut* para procurar unha solución). + +### Recoñecementos (opcional) + +Inclúa a aquelas persoas que axudaron a desenvolver este modelo; tanto para a atribución como para un posible seguimento futuro. Aínda que é opcional, a maioría dos modelos deben citar ás persoas que contribuíron na súa creación. + +### Título alternativo (opcional) + +No caso de que o modelo tamén se coñeza cun nome distinto ao que amosa o **Título**, enumere eses títulos alternativos aquí. Por exemplo, nos casos nos que o modelo leve o nome do problema que está a resolver, un alias útil podería ser aquel que describa a solución que se vai aplicar. diff --git a/translation/ja/patterns/base-documentation.md b/translation/ja/patterns/base-documentation.md index b7634e15c..95e9f3412 100644 --- a/translation/ja/patterns/base-documentation.md +++ b/translation/ja/patterns/base-documentation.md @@ -56,7 +56,7 @@ * プロジェクトにあなたの修正をサブミットする方法 * 修正が行われた場合、変更が取り込まれるまでに必要な所要時間に関する情報 -![Brief picture of README.md and CONTRIBUTING.md content](../../../patterns/2-structured/project-setup/assets/base\_docs\_drawing.png) +![Brief picture of README.md and CONTRIBUTING.md content](../../../assets/img/standard-base-documentation/base_docs_drawing.png) 様々なオープンソースプロジェクトにおいて、 `README.md` の書き方や、 `CONTRIBUTING.md` ファイルにどのような情報を含めるべきかについての良い例がたくさんあります。[How to write a readme that rocks](https://m.dotdev.co/how-to-write-a-readme-that-rocks-bc29f279611a), [Open Source Guide from GitHub](https://opensource.guide/) や書籍 [Producing Open Source](https://producingoss.com/en/producingoss.html)などのページには、どのような情報を提供すべきなのかについての貴重な情報が掲載されています。Producing Open Source には、良い README を書くための章はありませんが、[Getting Started chapter](https://producingoss.com/en/producingoss.html#starting-from-what-you-have) には、ホストチームのメンバー、ユーザー、コントリビューターが必要とするもののかなり広範なリストがあります。インナーソースのプロジェクトは、おそらく最初からこれらの側面のすべてをカバーする必要はありませんが、リスト自体は README.md がカバーできるものを想起するために有効です。 このパターンには、すぐに始められるように、2つの非常に基本的なテンプレートが付属しています。[README-template.md](../templates/README-template.md) と [CONTRIBUTING-template.md](../templates/CONTRIBUTING-template.md) をご参照ください diff --git a/translation/pt-br/patterns/30-day-warranty.md b/translation/pt-br/patterns/30-day-warranty.md index 847fe0333..2702ca171 100644 --- a/translation/pt-br/patterns/30-day-warranty.md +++ b/translation/pt-br/patterns/30-day-warranty.md @@ -72,5 +72,5 @@ Além disso, ajuda a fornecer diretrizes claras de [contribuição](./base-docum ## Histórico de Tradução -- **2022-04-13** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-04-13** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-04-13** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-04-13** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/base-documentation.md b/translation/pt-br/patterns/base-documentation.md index 01b3a35d2..1e6c69fac 100644 --- a/translation/pt-br/patterns/base-documentation.md +++ b/translation/pt-br/patterns/base-documentation.md @@ -98,5 +98,5 @@ Fornecer documentação básica padrão através de um README ## Histórico de Tradução -- **2022-04-14** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-04-14** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-04-14** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-04-14** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/common-requirements.md b/translation/pt-br/patterns/common-requirements.md index ddd986bcd..adac97bf5 100644 --- a/translation/pt-br/patterns/common-requirements.md +++ b/translation/pt-br/patterns/common-requirements.md @@ -74,5 +74,5 @@ Robert Hanmer ## Histórico de Tradução -- **2022-04-20** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-04-20** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-04-20** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-04-20** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/communication-tooling.md b/translation/pt-br/patterns/communication-tooling.md index 0bfeac5f7..0a8ad4f3a 100644 --- a/translation/pt-br/patterns/communication-tooling.md +++ b/translation/pt-br/patterns/communication-tooling.md @@ -80,5 +80,5 @@ Sebastian Spier (for the visual) ## Histórico de Tradução -- **2022-04-20** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-04-20** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-04-20** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-04-20** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/contracted-contributor.md b/translation/pt-br/patterns/contracted-contributor.md index 920ae171f..8354311c0 100644 --- a/translation/pt-br/patterns/contracted-contributor.md +++ b/translation/pt-br/patterns/contracted-contributor.md @@ -88,5 +88,5 @@ Um contrato formal também é benéfico para os contribuidores e comunidades: ## Histórico de Tradução -- **2022-04-20** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-04-20** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-04-20** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-04-20** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/core-team.md b/translation/pt-br/patterns/core-team.md index 335fe8320..c1e8d710f 100644 --- a/translation/pt-br/patterns/core-team.md +++ b/translation/pt-br/patterns/core-team.md @@ -111,5 +111,5 @@ Structured ## Histórico de Tradução -- **2022-04-21** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-04-21** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-04-21** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-04-21** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/crossteam-project-valuation.md b/translation/pt-br/patterns/crossteam-project-valuation.md index 13c2a9cf8..183b68e3f 100644 --- a/translation/pt-br/patterns/crossteam-project-valuation.md +++ b/translation/pt-br/patterns/crossteam-project-valuation.md @@ -102,5 +102,5 @@ Na prática, desde que essas valorações estejam dentro de uma ordem de grandez ## Histórico de Tradução -- **2022-04-27** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-04-27** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-04-27** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-04-27** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/dedicated-community-leader.md b/translation/pt-br/patterns/dedicated-community-leader.md index a6ab2862a..04c48dd89 100644 --- a/translation/pt-br/patterns/dedicated-community-leader.md +++ b/translation/pt-br/patterns/dedicated-community-leader.md @@ -89,5 +89,5 @@ Gerente de Comunidade Dedicado ## Histórico de Tradução -- **2022-04-21** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-04-21** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-04-21** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-04-21** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/document-your-guiding-principles.md b/translation/pt-br/patterns/document-your-guiding-principles.md index 9d824db10..e7241970b 100644 --- a/translation/pt-br/patterns/document-your-guiding-principles.md +++ b/translation/pt-br/patterns/document-your-guiding-principles.md @@ -211,5 +211,5 @@ Explicit InnerSource Principles ## Histórico de Tradução -- **2022-04-29** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-04-29** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-04-29** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-04-29** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/extensions-for-sustainable-growth.md b/translation/pt-br/patterns/extensions-for-sustainable-growth.md new file mode 100644 index 000000000..6aa54025f --- /dev/null +++ b/translation/pt-br/patterns/extensions-for-sustainable-growth.md @@ -0,0 +1,117 @@ +## Title + +Extensões para Crescimento Sustentável + +## Patlet + +Um projeto InnerSource está recebendo um grande número de contribuições, tornando a manutenção difícil. Ao oferecer um mecanismo de extensão fora do projeto principal, os mantenedores possibilitam a expansão das capacidades do projeto com custos mínimos e sobrecarga de manutenção. + +## Problema + +À medida que o número de contribuições para um repositório InnerSource maduro aumenta rapidamente, isso gera mais carga nas revisões de código e na manutenção. Isso resulta em um grande acúmulo de revisões de código ou na rejeição prematura de novas contribuições de recursos. + +Como a equipe anfitriã pode permitir um lançamento mais rápido de novos recursos, incentivando a inovação e a experimentação, ao mesmo tempo em que mantém o repositório bem mantido? + +## História + +Há um projeto estratégico que tem como objetivo coletar as melhores inovações dentro de um espaço de domínio em uma pilha comum, permitindo a reutilização de uma infraestrutura comum e proporcionando uma experiência do usuário padronizada. Através do InnerSource, várias equipes na organização que trabalham dentro do espaço de domínio têm a oportunidade de colaborar e contribuir com suas inovações para o código base comum. + +No entanto, um grande número de contribuições em paralelo de vários desenvolvedores está tornando a manutenção do código base difícil. Isso está adicionando uma grande carga para os mantenedores do projeto, que assumem a responsabilidade pelas normas de qualidade do código e capacitam a comunidade através de várias formas de comunicação. + +Os mantenedores do projeto estão em risco de esgotamento devido a: + +- Um backlog interminável de solicitações de pull de colaboradores que precisam ser revisadas. +- Insatisfação no trabalho: A maioria do tempo dos mantenedores é gasta no suporte à comunidade, o que não deixa espaço para inovação. +- Percepção de falta de realização: Nem todos os recursos contribuídos têm demanda de usuários adequada e resultam em adoção subsequente. +- Liberações demoradas: Mais recursos no código base resultam em testes de longa duração. +- Aumento das atividades de manutenção: Mais bugs são relatados à medida que novas capacidades são adicionadas. + +Muito tempo é gasto amadurecendo cada nova contribuição de recurso, antes mesmo que os potenciais usuários tenham a oportunidade de explorar o recurso para seus casos de uso. Se acontecer que o novo recurso não atende ao caso de uso, então todo o tempo gasto para atingir os padrões desejados de qualidade do código é desperdiçado. + +## Contexto + +- Um código-fonte InnerSource estratégico está crescendo rapidamente com novas contribuições de recursos de vários funcionários. +- A proporção de revisores para contribuições resulta em um crescente backlog de solicitações de pull. Isso está atrasando o lançamento de novos recursos para a comunidade. +- A qualidade do código está degradando e a experiência do usuário está sendo impactada negativamente. +- Os mantenedores do código estão sobrecarregados e não conseguem acompanhar o influxo de contribuições e o aumento do suporte à comunidade. +- Alguns dos recursos contribuídos não estão sendo adotados pelos usuários e podem até se tornar completamente inativos. No entanto, mesmo que não sejam usados, esses recursos ainda adicionam à sobrecarga de manutenção. +- A organização está investindo pesadamente na consolidação das novas contribuições de recursos para manter os padrões de qualidade antes que as ideias sejam exploradas pela comunidade. +- O padrão se aplica a ambos os cenários: + - Os mantenedores se veem rejeitando novas ideias de recursos para limitar o escopo do projeto. Isso está prejudicando a inovação na comunidade e restringindo ainda mais a expansão. + - Para reduzir o backlog, novos recursos estão sendo lançados sem documentação completa, consolidação ou teste detalhado, o que cria uma experiência de usuário ruim. Isso também aumenta o tamanho do código, adicionando um grande grafo de dependências e tornando a manutenção difícil. + +## Forças + +- Os mantenedores e proprietários do produto desejam permitir a expansão, incentivar a inovação e a experimentação sem serem excessivamente restritivos em relação às contribuições, ao mesmo tempo em que mantêm boas práticas de código e padrões de qualidade para a experiência do usuário. +- Uma grande quantidade de tempo é dedicada à consolidação e testes rigorosos de recursos para atender aos padrões do produto, mas os proprietários do produto podem querer permitir o lançamento mais rápido de novas inovações para que os produtos em adoção as explorem antes de investir tempo na consolidação das capacidades. +- Os mantenedores desejam incentivar a comunidade a compartilhar inovações que combinem as capacidades do produto com outros casos de uso, sem adicionar mais dependências ao repositório principal. + +## Solução + +Permitir [extensões/plugins](https://en.wikipedia.org/wiki/Extensibility) em código-fonte InnerSource em grande escala pode aliviar a carga de manutenção dos mantenedores do repositório e permitir um lançamento mais rápido de novos recursos para que produtos em adoção possam explorar. Isso transfere a manutenção das capacidades para os proprietários de extensões e permite que o repositório principal suporte capacidades que foram adotadas de forma mais ampla e são mais estratégicas. + +As extensões fornecem um filtro para novas capacidades que podem eventualmente ser movidas para o núcleo do projeto. As extensões também atuam como um ambiente de incubação e consolidação da comunidade, permitindo que grande parte da consolidação aconteça organicamente, em vez de em um processo de revisão custoso. + +Para que o modelo de extensões seja bem-sucedido, há algumas considerações arquiteturais a serem mantidas em mente: + +1. **Fácil de criar:** Para obter a participação da comunidade, as extensões precisam ser fáceis de criar. + - Crie um modelo de repositório que as extensões devem usar como ponto de partida. Isso permite que as extensões adicionem seus novos recursos em novos repositórios, separados do projeto principal. O modelo deve fornecer a mesma estrutura modular que o repositório principal e incluir o framework para empacotar e lançar as extensões. + - Certifique-se de que, à medida que o repositório principal muda, os modelos sejam conservados. Os mantenedores do repositório principal são responsáveis por atualizar os modelos para garantir que sejam compatíveis com o projeto principal. Seguir boas práticas de versionamento, como [semver](https://semver.org/), torna isso mais fácil de seguir. + - É recomendável ainda que os mantenedores do repositório principal forneçam orientações sobre como atualizar extensões com base em versões mais antigas do modelo à medida que novas versões são lançadas. + - Adicione exemplo(s) de extensão desenvolvida(s) a partir do modelo, que os desenvolvedores do projeto podem usar como referência para entender como escrever uma extensão bem estruturada. + - Flexibilize os requisitos para que os contribuidores criem extensões, permitindo a liberação mais rápida ou experimentação ao contornar revisões. +2. **Acoplamento flexível:** Ter componentes modulares que contenham funcionalidades pode permitir um acoplamento flexível, onde as alterações nas extensões não afetam a qualidade do código principal ou de outras extensões. +3. **Gerenciamento de dependências:** Cada extensão deve ser cuidadosa ao fixar a faixa de versão do repositório principal com o qual ela é construída (da mesma forma que faria com qualquer outra dependência) e deve ser cuidadosa em seu uso de outras dependências que possam sobrescrever dependências do repositório principal, de forma que as versões escolhidas para essas dependências sejam compatíveis com as versões selecionadas do repositório principal. Quaisquer conflitos com o repositório principal serão detectados no framework de teste da extensão. +4. **Estratégia de testes:** Como testar extensões individualmente e em combinação? + - **Testando extensões individualmente:** O modelo de extensões fornecerá um framework de teste a ser usado pelos desenvolvedores de extensões para testar a capacidade adicionada. Isso pode incluir um framework para testes de unidade, testes de desempenho em tempo de execução e testes de qualidade. + - **Testando extensões em combinação com o repositório principal:** Os desenvolvedores de extensões têm um método bem estruturado para testar suas extensões em relação a versões específicas do repositório principal sem envolvimento dos mantenedores do repositório principal. + - **Testando extensões em combinação com outras extensões:** Fornecer um framework de teste para esse cenário pode ser excessivo, especialmente se houver um grande número de extensões que ainda estão sendo exploradas pelos usuários e é improvável que todas sejam usadas em combinação. Se um usuário encontrar conflitos ao usar extensões em combinação (o que deve ser improvável com um acoplamento suficientemente flexível), o usuário pode levantar um problema com os proprietários da extensão correspondente, que resolverão a situação. Conforme uma extensão atinge fases posteriores do ciclo de vida e é mesclada no repositório principal, ela será testada em combinação com o restante da biblioteca e quaisquer conflitos de dependência terão que ser resolvidos na época. +5. **Descoberta e Usabilidade:** + - Torne as extensões facilmente descobríveis com uma página de publicação mostrando as extensões que os usuários criaram e desejam compartilhar para uso de produtos. + - Permita o registro de extensões no projeto principal para que os usuários possam aproveitar as extensões junto com o projeto original, mantendo a mesma experiência do usuário. +6. **Ciclo de vida das extensões e manutenção:** Estabeleça o ciclo de vida das extensões, desde a criação até a migração para o código principal, juntamente com diretrizes claras de propriedade. + - Os criadores das extensões continuam a manter a extensão, fornecendo suporte e correção de defeitos. Qualquer extensão não mantida será retirada da página de publicação. + - Crie critérios para quando uma extensão pode ser migrada para o repositório principal, como a adoção da extensão por produtos internos e a demanda por recursos. + - O processo de migração da extensão para o repositório principal seguirá diretrizes mais rigorosas de revisão de código estabelecidas pelos mantenedores da biblioteca. + +![Arquitetura de software com extensões](../../../assets/img/extensions-for-sustainable-growth/extensions-for-sustainable-growth.png) + +Seguir esses princípios garante que: + +- Os desenvolvedores podem adicionar novos recursos ao ecossistema de um projeto sem precisar escrever grandes quantidades de código [boilerplate](https://en.wikipedia.org/wiki/Boilerplate_code). +- As extensões são facilmente descobertas de maneira repetitiva por todos os usuários do projeto principal; apenas porque o código não está no repositório principal não significa que ele não seja valioso. +- A carga dos mantenedores é reduzida até que uma extensão tenha demonstrado que preenche uma lacuna importante no projeto principal. +- O código comum do projeto principal (por exemplo, classes base e funções de utilidade) pode ser um ponto de partida para novos desenvolvimentos que ampliam o domínio do projeto. Isso evita a necessidade de portar o trabalho inovador após o fato, reduzindo assim a carga geral de desenvolver recursos inovadores para o projeto. +- Os desenvolvedores têm mais probabilidade de contribuir e se envolver na manutenção e na construção de comunidades para sua base de código, o que também é benéfico para a saúde do ecossistema geral do projeto. + +## Contexto Resultante + +- O projeto é capaz de dimensionar com a adição de novos recursos, sem adicionar sobrecarga de manutenção ao repositório do projeto principal. +- Lançamento mais rápido de novos recursos para a comunidade explorar, incentivando a inovação e experimentação. +- Redução do custoso processo de revisão de código e consolidação de recursos até que o recurso seja capaz de provar sua utilidade. Isso tem benefícios de economia de custos para a organização. +- Um problema pós-introdução que pode surgir - o que acontece se uma extensão não conseguir completar o ciclo de vida inteiro? + - Se uma extensão não for adotada ao longo do tempo e não conseguir criar uma comunidade para apoiar sua manutenção, caberá ao proprietário da extensão continuar a mantê-la pelo tempo que desejarem. Se uma extensão não for mantida, será retirada da publicação. + - Se um desenvolvedor de extensão não puder mais manter seu projeto e outros desenvolvedores na comunidade desejarem continuar a oferecer suporte, eles podem manter a extensão no futuro. + +## Instâncias Conhecidas + +* **IBM Corporation** adotou essa solução para dimensionar [bibliotecas de IA InnerSource](https://youtu.be/Lz-tIc2cyRM). Usando extensões, os desenvolvedores podem ampliar as bibliotecas de IA com mais algoritmos e compartilhar suas inovações com a comunidade interna da empresa. As bibliotecas principais contêm apenas algoritmos estratégicos que foram adotados e validados, tornando mais fácil mantê-las à medida que ampliamos as contribuições. + +## Alias + +Extensões para Gerenciar Contribuições em Escala + +## Estado + +Structured + +## Autores + +- Sukriti Sharma, IBM +- Alexander Brooks, IBM +- Gabe Goodhart, IBM + +## Histórico de Tradução + +- **2023-10-26** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-10-26** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/gig-marketplace.md b/translation/pt-br/patterns/gig-marketplace.md index 03588a33a..3802ce61c 100644 --- a/translation/pt-br/patterns/gig-marketplace.md +++ b/translation/pt-br/patterns/gig-marketplace.md @@ -74,5 +74,5 @@ Quando usado em combinação com o padrão do Portal InnerSource, o Gig Marketpl ## Histórico de Tradução -- **2022-04-29** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-04-29** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-04-29** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-04-29** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/group-support.md b/translation/pt-br/patterns/group-support.md new file mode 100644 index 000000000..77b61b4d1 --- /dev/null +++ b/translation/pt-br/patterns/group-support.md @@ -0,0 +1,91 @@ +## Title + +Suporte em Grupo + +## Patlet + +O que acontece se uma equipe ou indivíduo não suporta mais um projeto InnerSource? +Mantenha o projeto vivo formando um grupo de indivíduos interessados. + +## Problema + +* Um projeto InnerSource popular está órfão. +* Não há um destino óbvio para ele. + +## História + +Uma biblioteca de widgets de interface do usuário é usada por mais de 50 projetos em toda a empresa. +O financiamento da equipe que é proprietária da biblioteca se esgota e a equipe se dissipa. +No início, ninguém percebe, mas depois de um tempo, sempre que alguém pergunta "quem é o responsável", não há uma resposta. +O que acontecerá em seguida? +As novas equipes evitarão usá-lo? +O projeto estagnará e permanecerá até que seus usuários eventualmente sejam forçados a migrar para outra solução? +Que pena se isso acontecer a um projeto perfeitamente bom e útil! + +## Contexto + +* Projeto InnerSource popular. +* Consumido como uma dependência de tempo de compilação (por exemplo, módulo de código). +* Ninguém está oferecendo suporte ativamente. +* A empresa não pode alocar uma equipe para oferecer suporte. + +## Forças + +* Ninguém é designado por seu trabalho diário para trabalhar nele. +* Todos estão ocupados. +* Alto custo para migrar do projeto. + +## Solução + +Chamar voluntários interessados de qualquer parte da empresa para formar um grupo de [Trusted Committer][]s para oferecer suporte ao projeto. +Você pode precisar entrar em contato com indivíduos específicos com base no histórico de commits ou uso. +É importante que haja pessoas suficientes para que a carga sobre cada uma seja razoavelmente pequena. + +Ao formar este grupo, ele deve identificar ou criar [Standard Base Documentation][] e [Communication Tooling][]. + +O grupo deve fazer o melhor para gerenciar esses aspectos do projeto: + +* **Manutenção**. Se o projeto estiver completamente quebrado para o caso de uso padrão, então conserte-o. +Mantenha o projeto atualizado à medida que as dependências e estruturas que ele usa continuam a evoluir. +* **Integração**. Se alguém tiver uma pergunta sobre como usar o projeto, certifique-se de que eles obtenham uma resposta razoável. +* **Atualizações**. Se alguém desejar adicionar um novo recurso ao projeto, forneça o suporte de design e técnico necessário para que eles o construam, de modo que funcione para eles e seja uma boa adição ao projeto. +Revise as solicitações de pull que chegam de forma oportuna. + +Uma vez que este grupo é composto por voluntários, é importante comunicar que o suporte é "melhor esforço" apenas. +Portanto, este modelo de suporte não é adequado para projetos críticos em tempo de execução, como APIs em produção. +Ele é mais adequado para projetos que são consumidos no momento de compilação, como bibliotecas/pacotes/módulos. +Não se espera que o grupo implemente qualquer nova funcionalidade para outros. + +## Contexto Resultante + +* Existe algum suporte frágil para o projeto InnerSource. +* A longo prazo, é provável que o suporte do grupo se dissolva novamente em algum momento. Se o projeto continuar a longo prazo, aproveite este período de suporte estável do grupo para encontrar uma maneira duradoura de suportá-lo (por exemplo, [Core Team][]). + +## Justificativa + +As pessoas geralmente querem ajudar. +Se houver uma abordagem pessoal para que alguém se junte como um [Trusted Committer][], geralmente haverá várias pessoas que dirão "sim". +Sentir-se parte de um grupo e ser atribuído a alguma estrutura e responsabilidade geralmente motiva as pessoas a fazer o seu melhor, o que muitas vezes acaba sendo suficiente. + +## Instâncias Conhecidas + +* WellSky + +## Estado + +Structured + +## Autores + +[Russell R. Rutledge][] + +[Russell R. Rutledge]: https://github.com/rrrutledge +[Standard Base Documentation]: ./base-documentation.md +[Communication Tooling]: ./communication-tooling.md +[Trusted Committer]: ./trusted-committer.md +[Core Team]: ./core-team.md + +## Histórico de Tradução + +- **2023-10-26** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-10-26** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/innersource-license.md b/translation/pt-br/patterns/innersource-license.md index bf1dd0813..e8c3957ea 100644 --- a/translation/pt-br/patterns/innersource-license.md +++ b/translation/pt-br/patterns/innersource-license.md @@ -92,5 +92,5 @@ Vale mencionar que até agora, o software compartilhado sob essa licença InnerS ## Histórico de Tradução -- **2022-05-04** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-05-04** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-05-04** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-05-04** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/innersource-portal.md b/translation/pt-br/patterns/innersource-portal.md index 1bd7953d5..6d6aac50d 100644 --- a/translation/pt-br/patterns/innersource-portal.md +++ b/translation/pt-br/patterns/innersource-portal.md @@ -100,5 +100,5 @@ Uma [implementação de referência](https://github.com/SAP/project-portal-for-i ## Histórico de Tradução -- **2022-06-13** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-06-13** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-06-13** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-06-13** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/issue-tracker.md b/translation/pt-br/patterns/issue-tracker.md index 10995dee0..061ae0282 100644 --- a/translation/pt-br/patterns/issue-tracker.md +++ b/translation/pt-br/patterns/issue-tracker.md @@ -53,5 +53,5 @@ Structured ## Histórico de Tradução -- **2022-06-13** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-06-13** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-06-13** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-06-13** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/maturity-model.md b/translation/pt-br/patterns/maturity-model.md index e0e43852a..c127414d6 100644 --- a/translation/pt-br/patterns/maturity-model.md +++ b/translation/pt-br/patterns/maturity-model.md @@ -216,5 +216,5 @@ Modelo de Maturidade: Conheça as Melhores Práticas do InnerSource ## Histórico de Tradução -- **2022-08-19** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-08-19** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-08-19** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-08-19** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/praise-participants.md b/translation/pt-br/patterns/praise-participants.md index 01081a1bf..461c32896 100644 --- a/translation/pt-br/patterns/praise-participants.md +++ b/translation/pt-br/patterns/praise-participants.md @@ -90,5 +90,5 @@ Exagerar pode parecer insincero e mecânico, derrotando o propósito de se comun ## Histórico de Tradução -- **2022-08-20** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-08-20** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-08-20** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-08-20** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/release-process.md b/translation/pt-br/patterns/release-process.md new file mode 100644 index 000000000..a1b2bc352 --- /dev/null +++ b/translation/pt-br/patterns/release-process.md @@ -0,0 +1,74 @@ +## Title + +Processo de Liberação Padrão + +## Patlet + +As equipes podem hesitar em adotar um projeto InnerSource se não tiverem certeza de sua maturidade. Para abordar isso, notas de lançamento consistentes e artefatos publicados são cruciais. Essas práticas demonstram um compromisso sólido com o projeto, transmitindo confiança e garantindo aos usuários o comprometimento contínuo com software sustentável e bem gerenciado. + +## Problema + +Quando uma equipe está decidindo se deve usar um projeto InnerSource, uma de suas considerações é se podem contar com o projeto fornecido por um período prolongado. Mudar as ferramentas/projetos que estão usando tem um custo, portanto, eles só desejam fazer esses investimentos quando for necessário e houver benefícios tangíveis. + +É prática comum em projetos de Código Aberto ter lançamentos versionados, com notas que documentam mudanças que quebram a compatibilidade e novos recursos, juntamente com uma binário publicado ou um link para uma imagem Docker. Essa prática pode não ser tão transparente ou bem documentada/visível para projetos InnerSource, módulos, etc. + +Projetos InnerSource que não possuem um artefato publicado ou um processo de lançamento reduzem a confiança. As equipes não saberão quando esperar o próximo lançamento, quando mudanças que quebram a compatibilidade forem introduzidas, etc. + +## Contexto + +Grandes organizações produzem muitos softwares internos, grande parte dos quais poderia ser reutilizada por equipes em toda a empresa. Ferramentas operacionais, bibliotecas de software e módulos de infraestrutura como código (IaC) são exemplos comuns desse tipo de software. No entanto, a maioria das grandes organizações não publica softwares internos para serem consumidos por outras equipes na empresa. Isso pode ocorrer porque estão ocupados demais para fornecer documentação ou não percebem o valor dos projetos para os outros. + +Deveria estar disponível um repositório de código-fonte interno ou público onde o código-fonte é armazenado, mas as equipes não têm um processo para tornar o software consumível por outras equipes. + +À medida que uma organização cresce e mais software interno é escrito, o valor desse padrão aumenta. + +## Forças + +### Difícil para organizações que não têm um sistema CI/CD centralizado + +Para organizações que não fornecem aos engenheiros um sistema CI/CD centralizado, automatizar o processo de compilação e lançamento pode ser desafiador. A equipe pode precisar implementar sua própria ferramenta (Jenkins, Drone, etc). Sem um sistema CI/CD, as compilações e notas de lançamento ainda podem ser produzidas, no entanto, isso pode exigir uma compilação local do software e o upload manual para a ferramenta que hospeda os artefatos de compilação. + +### Carga adicional de publicar notas de lançamento + +Além de compilar o código-fonte, escrever notas de lançamento pode ser tedioso sem a capacidade de gerar automaticamente uma lista de commits do Git. Isso ficaria a cargo de alguém fazer manualmente, além de escrever detalhes em um nível mais alto sobre o lançamento. + +### Dificuldade aumentada sem um local para hospedar artefatos + +Se uma empresa não fornece um local centralizado para armazenar artefatos de compilação (jars, módulos npm, etc.) e imagens Docker, os engenheiros podem ser deixados por conta própria para decidir onde é apropriado armazenar o software versionado. Ferramentas como o GitHub oferecem isso, no entanto, se uma empresa não estiver usando uma dessas ferramentas populares, isso pode representar uma dificuldade. + +## Solução + +Fornecendo **notas de lançamento** claras e um artefato publicado, você aumenta a confiança das pessoas de que está publicando um produto de qualidade no qual podem confiar. + +Os seguintes são elementos-chave para alcançar isso: + +- Um pipeline de CI/CD está localizado dentro do seu repositório que [automatiza o processo de lançamento](https://opensource.guide/best-practices/#use-tools-to-automate-basic-maintenance-tasks) +- Os artefatos de compilação são gerados pelo sistema de CI/CD (binário, imagem Docker, jar, etc) +- Os lançamentos são claramente rotulados e marcados com [versionamento semântico](https://github.com/semantic-release/semantic-release) +- Os lançamentos incluem notas sobre Novos Recursos, Correções de Bugs e quaisquer "Mudanças que Quebram" + +Um bom exemplo de notas de lançamento de qualidade pode ser encontrado [aqui](https://github.com/jaegertracing/jaeger/releases). + +## Contexto Resultante + +As equipes que encontrarem o seu projeto verão notas de lançamento publicadas e ganharão confiança em sua ferramenta. Artefatos publicados também facilitam e aceleram a adoção do seu produto. Ter processos bem definidos e visíveis, como esses, também ajuda na colaboração entre equipes e com novos contribuidores. As pessoas podem ter confiança de que suas contribuições serão disponibilizadas e distribuídas em um tempo razoável, com um caminho de uso claro. + +As notas de lançamento também são uma ótima oportunidade para [elogiar os participantes](praise-participants.md)! Como sabemos, [a documentação é extremamente importante](base-documentation.md) para novas pessoas que desejam se envolver com o seu projeto. Elogiar colegas de outras equipes por suas contribuições, incluindo documentação e notas de lançamento, é uma ótima maneira de fomentar a comunidade e expandir sua base de usuários. + +## Instâncias Conhecidas + +- Comcast (vários projetos) +- GitHub (vários projetos) + +## Autores + +David Grizzanti + +## Estado + +Structured + +## Histórico de Tradução + +- **2023-10-26** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-10-26** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/repository-activity-score.md b/translation/pt-br/patterns/repository-activity-score.md index d29766a68..9e55ab1df 100644 --- a/translation/pt-br/patterns/repository-activity-score.md +++ b/translation/pt-br/patterns/repository-activity-score.md @@ -135,5 +135,5 @@ Um agradecimento à comunidade InnerSource Commons por fornecer conselhos extrem ## Histórico de Tradução -- **2022-08-20** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-08-20** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-08-20** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-08-20** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/review-committee.md b/translation/pt-br/patterns/review-committee.md index f83401e88..43e091317 100644 --- a/translation/pt-br/patterns/review-committee.md +++ b/translation/pt-br/patterns/review-committee.md @@ -58,5 +58,5 @@ Cheese Interface ## Histórico de Tradução -- **2022-08-20** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-08-20** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-08-20** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-08-20** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/service-vs-library.md b/translation/pt-br/patterns/service-vs-library.md index e180500fd..66ad640d8 100644 --- a/translation/pt-br/patterns/service-vs-library.md +++ b/translation/pt-br/patterns/service-vs-library.md @@ -78,5 +78,5 @@ Serviço vs. Biblioteca: É Inner Source, Não implantação interna ## Histórico de Tradução -- **2022-08-20** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-08-20** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-08-20** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-08-20** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/start-as-experiment.md b/translation/pt-br/patterns/start-as-experiment.md index b0eacd5e0..68c4a86a9 100644 --- a/translation/pt-br/patterns/start-as-experiment.md +++ b/translation/pt-br/patterns/start-as-experiment.md @@ -75,5 +75,5 @@ Finalmente, começar como um experimento torna muito mais fácil evitar regulame ## Histórico de Tradução -- **2022-08-20** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-08-20** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-08-20** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-08-20** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/transparent-cross-team-decision-making-using-rfcs.md b/translation/pt-br/patterns/transparent-cross-team-decision-making-using-rfcs.md index 0713d0606..11509e600 100644 --- a/translation/pt-br/patterns/transparent-cross-team-decision-making-using-rfcs.md +++ b/translation/pt-br/patterns/transparent-cross-team-decision-making-using-rfcs.md @@ -126,5 +126,5 @@ Structured ## Histórico de Tradução -- **2022-08-20** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-08-20** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-08-20** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-08-20** - Tradução [Humberto Zilio](https://github.com/zilio) diff --git a/translation/pt-br/patterns/trusted-committer.md b/translation/pt-br/patterns/trusted-committer.md index 1a246d467..8793b0f6e 100644 --- a/translation/pt-br/patterns/trusted-committer.md +++ b/translation/pt-br/patterns/trusted-committer.md @@ -144,5 +144,5 @@ Isso foi experimentado e comprovado como bem-sucedido em: ## Histórico de Tradução -- **2022-08-20** - Tradução [Eneri Junior](https://github.com/jrcosta) -- **2022-08-20** - Tradução [Humberto Zilio](https://github.com/zilio) +- **2023-08-20** - Tradução [Eneri Junior](https://github.com/jrcosta) +- **2023-08-20** - Tradução [Humberto Zilio](https://github.com/zilio)