feat: template repo

Luke Karrys committed Dec 16, 2022 at 15:26 UTC e17dee4c53d05904905b15f38cbf4dc400791cab
93 files changed +3781 -1952
.eslintrc.js new
+21
@@ -0,0 +1,21 @@
1 +/* This file is automatically added by @npmcli/template-oss. Do not edit. */
2 +
3 +'use strict'
4 +
5 +const { readdirSync: readdir } = require('fs')
6 +
7 +const localConfigs = readdir(__dirname)
8 + .filter((file) => file.startsWith('.eslintrc.local.'))
9 + .map((file) => `./${file}`)
10 +
11 +module.exports = {
12 + root: true,
13 + ignorePatterns: [
14 + 'cli/**',
15 + 'theme/**',
16 + ],
17 + extends: [
18 + '@npmcli',
19 + ...localConfigs,
20 + ],
21 +}
.eslintrc.local.js new
+22
@@ -0,0 +1,22 @@
1 +module.exports = {
2 + overrides: [{
3 + files: ['src/**'],
4 + parserOptions: {
5 + ecmaFeatures: {
6 + jsx: true,
7 + },
8 + sourceType: 'module',
9 + },
10 + env: {
11 + commonjs: true,
12 + es2022: true,
13 + browser: true,
14 + node: false,
15 + },
16 + rules: {
17 + 'max-len': 'off',
18 + 'import/no-extraneous-dependencies': 'off',
19 + 'no-unused-vars': 'off',
20 + },
21 + }],
22 +}
.github/CODEOWNERS
+18 -8
@@ -1,8 +1,18 @@
1 -# Assign Product Management to all open PRs
2 -* @MylesBorins @monishcm
3 -
4 -# Assign cli team to cli related PRs
5 -# In general these should be closed and pointed towards the CLI
6 -# repo... we should automate this
7 -/cli @npm/cli-team
8 -/content/cli @npm/cli-team
1 +# This file is automatically added by @npmcli/template-oss. Do not edit.
2 +
3 +* @npm/cli-team
4 +
5 +# Documentation content
6 +/content/ @MylesBorins @monishcm
7 +/src/ @MylesBorins @monishcm
8 +/static/ @MylesBorins @monishcm
9 +/.reuse/ @MylesBorins @monishcm
10 +/CONTENT-MODEL.md @MylesBorins @monishcm
11 +
12 +# Licensing
13 +/LICENSES/ @MylesBorins @monishcm
14 +/LICENSE @MylesBorins @monishcm
15 +/LICENSE-CODE @MylesBorins @monishcm
16 +
17 +# CLI content
18 +/content/cli/ @npm/cli-team
\ No newline at end of file
.github/ISSUE_TEMPLATE/config.yml new
+3
@@ -0,0 +1,3 @@
1 +# This file is automatically added by @npmcli/template-oss. Do not edit.
2 +
3 +blank_issues_enabled: true
.github/dependabot.yml
+24
@@ -3,6 +3,18 @@
3 version: 2
4
5 updates:
6 + - package-ecosystem: npm
7 + directory: /
8 + schedule:
9 + interval: daily
10 + allow:
11 + - dependency-type: direct
12 + versioning-strategy: increase-if-necessary
13 + commit-message:
14 + prefix: deps
15 + prefix-development: chore
16 + labels:
17 + - "Dependencies"
18 - package-ecosystem: npm
19 directory: cli/
20 schedule:
@@ -15,3 +27,15 @@ updates:
27 prefix-development: chore
28 labels:
29 - "Dependencies"
30 + - package-ecosystem: npm
31 + directory: theme/
32 + schedule:
33 + interval: daily
34 + allow:
35 + - dependency-type: direct
36 + versioning-strategy: increase-if-necessary
37 + commit-message:
38 + prefix: deps
39 + prefix-development: chore
40 + labels:
41 + - "Dependencies"
.github/workflows/audit.yml new
+40
@@ -0,0 +1,40 @@
1 +# This file is automatically added by @npmcli/template-oss. Do not edit.
2 +
3 +name: Audit
4 +
5 +on:
6 + workflow_dispatch:
7 + schedule:
8 + # "At 08:00 UTC (01:00 PT) on Monday" https://crontab.guru/#0_8_*_*_1
9 + - cron: "0 8 * * 1"
10 +
11 +jobs:
12 + audit:
13 + name: Audit Dependencies
14 + if: github.repository_owner == 'npm'
15 + runs-on: ubuntu-latest
16 + defaults:
17 + run:
18 + shell: bash
19 + steps:
20 + - name: Checkout
21 + uses: actions/checkout@v3
22 + - name: Setup Git User
23 + run: |
24 + git config --global user.email "npm-cli+bot@github.com"
25 + git config --global user.name "npm CLI robot"
26 + - name: Setup Node
27 + uses: actions/setup-node@v3
28 + with:
29 + node-version: 18.x
30 + cache: npm
31 + - name: Install npm@latest
32 + run: npm i --prefer-online --no-fund --no-audit -g npm@latest
33 + - name: npm Version
34 + run: npm -v
35 + - name: Install Dependencies
36 + run: npm i --no-audit --no-fund --package-lock
37 + - name: Run Production Audit
38 + run: npm audit --omit=dev
39 + - name: Run Full Audit
40 + run: npm audit --audit-level=none
.github/workflows/ci-cli.yml
+4 -5
@@ -36,12 +36,13 @@ jobs:
36 uses: actions/setup-node@v3
37 with:
38 node-version: 18.x
39 + cache: npm
40 - name: Install npm@latest
41 run: npm i --prefer-online --no-fund --no-audit -g npm@latest
42 - name: npm Version
43 run: npm -v
44 - name: Install Dependencies
44 - run: npm i --ignore-scripts --no-audit --no-fund
45 + run: npm i --no-audit --no-fund
46 - name: Lint
47 run: npm run lint --ignore-scripts -w cli
48 - name: Post Lint
@@ -57,9 +58,6 @@ jobs:
58 - name: Linux
59 os: ubuntu-latest
60 shell: bash
60 - - name: Windows
61 - os: windows-latest
62 - shell: cmd
61 node-version:
62 - 18.x
63 runs-on: ${{ matrix.platform.os }}
@@ -77,6 +75,7 @@ jobs:
75 uses: actions/setup-node@v3
76 with:
77 node-version: ${{ matrix.node-version }}
78 + cache: npm
79 - name: Update Windows npm
80 # node 12 and 14 ship with npm@6, which is known to fail when updating itself in windows
81 if: matrix.platform.os == 'windows-latest' && (startsWith(matrix.node-version, '12.') || startsWith(matrix.node-version, '14.'))
@@ -96,7 +95,7 @@ jobs:
95 - name: npm Version
96 run: npm -v
97 - name: Install Dependencies
99 - run: npm i --ignore-scripts --no-audit --no-fund
98 + run: npm i --no-audit --no-fund
99 - name: Add Problem Matcher
100 run: echo "::add-matcher::.github/matchers/tap.json"
101 - name: Test
.github/workflows/ci-theme.yml new
+102
@@ -0,0 +1,102 @@
1 +# This file is automatically added by @npmcli/template-oss. Do not edit.
2 +
3 +name: CI - theme
4 +
5 +on:
6 + workflow_dispatch:
7 + pull_request:
8 + paths:
9 + - theme/**
10 + push:
11 + branches:
12 + - main
13 + - latest
14 + paths:
15 + - theme/**
16 + schedule:
17 + # "At 09:00 UTC (02:00 PT) on Monday" https://crontab.guru/#0_9_*_*_1
18 + - cron: "0 9 * * 1"
19 +
20 +jobs:
21 + lint:
22 + name: Lint
23 + if: github.repository_owner == 'npm'
24 + runs-on: ubuntu-latest
25 + defaults:
26 + run:
27 + shell: bash
28 + steps:
29 + - name: Checkout
30 + uses: actions/checkout@v3
31 + - name: Setup Git User
32 + run: |
33 + git config --global user.email "npm-cli+bot@github.com"
34 + git config --global user.name "npm CLI robot"
35 + - name: Setup Node
36 + uses: actions/setup-node@v3
37 + with:
38 + node-version: 18.x
39 + cache: npm
40 + - name: Install npm@latest
41 + run: npm i --prefer-online --no-fund --no-audit -g npm@latest
42 + - name: npm Version
43 + run: npm -v
44 + - name: Install Dependencies
45 + run: npm i --no-audit --no-fund
46 + - name: Lint
47 + run: npm run lint --ignore-scripts -w theme
48 + - name: Post Lint
49 + run: npm run postlint --ignore-scripts -w theme
50 +
51 + test:
52 + name: Test - ${{ matrix.platform.name }} - ${{ matrix.node-version }}
53 + if: github.repository_owner == 'npm'
54 + strategy:
55 + fail-fast: false
56 + matrix:
57 + platform:
58 + - name: Linux
59 + os: ubuntu-latest
60 + shell: bash
61 + node-version:
62 + - 18.x
63 + runs-on: ${{ matrix.platform.os }}
64 + defaults:
65 + run:
66 + shell: ${{ matrix.platform.shell }}
67 + steps:
68 + - name: Checkout
69 + uses: actions/checkout@v3
70 + - name: Setup Git User
71 + run: |
72 + git config --global user.email "npm-cli+bot@github.com"
73 + git config --global user.name "npm CLI robot"
74 + - name: Setup Node
75 + uses: actions/setup-node@v3
76 + with:
77 + node-version: ${{ matrix.node-version }}
78 + cache: npm
79 + - name: Update Windows npm
80 + # node 12 and 14 ship with npm@6, which is known to fail when updating itself in windows
81 + if: matrix.platform.os == 'windows-latest' && (startsWith(matrix.node-version, '12.') || startsWith(matrix.node-version, '14.'))
82 + run: |
83 + curl -sO https://registry.npmjs.org/npm/-/npm-7.5.4.tgz
84 + tar xf npm-7.5.4.tgz
85 + cd package
86 + node lib/npm.js install --no-fund --no-audit -g ..\npm-7.5.4.tgz
87 + cd ..
88 + rmdir /s /q package
89 + - name: Install npm@7
90 + if: startsWith(matrix.node-version, '10.')
91 + run: npm i --prefer-online --no-fund --no-audit -g npm@7
92 + - name: Install npm@latest
93 + if: ${{ !startsWith(matrix.node-version, '10.') }}
94 + run: npm i --prefer-online --no-fund --no-audit -g npm@latest
95 + - name: npm Version
96 + run: npm -v
97 + - name: Install Dependencies
98 + run: npm i --no-audit --no-fund
99 + - name: Add Problem Matcher
100 + run: echo "::add-matcher::.github/matchers/tap.json"
101 + - name: Test
102 + run: npm test --ignore-scripts -w theme
.github/workflows/ci.yml new
+112
@@ -0,0 +1,112 @@
1 +# This file is automatically added by @npmcli/template-oss. Do not edit.
2 +
3 +name: CI
4 +
5 +on:
6 + workflow_dispatch:
7 + pull_request:
8 + paths-ignore:
9 + - cli/**
10 + - theme/**
11 + push:
12 + branches:
13 + - main
14 + - latest
15 + paths-ignore:
16 + - cli/**
17 + - theme/**
18 + schedule:
19 + # "At 09:00 UTC (02:00 PT) on Monday" https://crontab.guru/#0_9_*_*_1
20 + - cron: "0 9 * * 1"
21 +
22 +jobs:
23 + lint:
24 + name: Lint
25 + if: github.repository_owner == 'npm'
26 + runs-on: ubuntu-latest
27 + defaults:
28 + run:
29 + shell: bash
30 + steps:
31 + - name: Checkout
32 + uses: actions/checkout@v3
33 + - name: Setup Git User
34 + run: |
35 + git config --global user.email "npm-cli+bot@github.com"
36 + git config --global user.name "npm CLI robot"
37 + - name: Setup Node
38 + uses: actions/setup-node@v3
39 + with:
40 + node-version: 18.x
41 + cache: npm
42 + - name: Install npm@latest
43 + run: npm i --prefer-online --no-fund --no-audit -g npm@latest
44 + - name: npm Version
45 + run: npm -v
46 + - name: Install Dependencies
47 + run: npm i --no-audit --no-fund
48 + - name: Lint
49 + run: npm run lint --ignore-scripts
50 + - name: Post Lint
51 + run: npm run postlint --ignore-scripts
52 +
53 + test:
54 + name: Test - ${{ matrix.platform.name }} - ${{ matrix.node-version }}
55 + if: github.repository_owner == 'npm'
56 + strategy:
57 + fail-fast: false
58 + matrix:
59 + platform:
60 + - name: Linux
61 + os: ubuntu-latest
62 + shell: bash
63 + node-version:
64 + - 18.x
65 + runs-on: ${{ matrix.platform.os }}
66 + defaults:
67 + run:
68 + shell: ${{ matrix.platform.shell }}
69 + steps:
70 + - name: Checkout
71 + uses: actions/checkout@v3
72 + - name: Setup Git User
73 + run: |
74 + git config --global user.email "npm-cli+bot@github.com"
75 + git config --global user.name "npm CLI robot"
76 + - name: Setup Node
77 + uses: actions/setup-node@v3
78 + with:
79 + node-version: ${{ matrix.node-version }}
80 + cache: npm
81 + - name: Update Windows npm
82 + # node 12 and 14 ship with npm@6, which is known to fail when updating itself in windows
83 + if: matrix.platform.os == 'windows-latest' && (startsWith(matrix.node-version, '12.') || startsWith(matrix.node-version, '14.'))
84 + run: |
85 + curl -sO https://registry.npmjs.org/npm/-/npm-7.5.4.tgz
86 + tar xf npm-7.5.4.tgz
87 + cd package
88 + node lib/npm.js install --no-fund --no-audit -g ..\npm-7.5.4.tgz
89 + cd ..
90 + rmdir /s /q package
91 + - name: Install npm@7
92 + if: startsWith(matrix.node-version, '10.')
93 + run: npm i --prefer-online --no-fund --no-audit -g npm@7
94 + - name: Install npm@latest
95 + if: ${{ !startsWith(matrix.node-version, '10.') }}
96 + run: npm i --prefer-online --no-fund --no-audit -g npm@latest
97 + - name: npm Version
98 + run: npm -v
99 + - name: Install Dependencies
100 + run: npm i --no-audit --no-fund
101 + - name: Add Problem Matcher
102 + run: echo "::add-matcher::.github/matchers/tap.json"
103 + - name: Test
104 + run: npm test --ignore-scripts
105 +
106 + licenses:
107 + name: REUSE Compliance Check
108 + runs-on: ubuntu-latest
109 + steps:
110 + - uses: actions/checkout@v3
111 + - name: REUSE Compliance Check
112 + uses: fsfe/reuse-action@v1
.github/workflows/codeql-analysis.yml new
+38
@@ -0,0 +1,38 @@
1 +# This file is automatically added by @npmcli/template-oss. Do not edit.
2 +
3 +name: CodeQL
4 +
5 +on:
6 + push:
7 + branches:
8 + - main
9 + - latest
10 + pull_request:
11 + branches:
12 + - main
13 + - latest
14 + schedule:
15 + # "At 10:00 UTC (03:00 PT) on Monday" https://crontab.guru/#0_10_*_*_1
16 + - cron: "0 10 * * 1"
17 +
18 +jobs:
19 + analyze:
20 + name: Analyze
21 + runs-on: ubuntu-latest
22 + permissions:
23 + actions: read
24 + contents: read
25 + security-events: write
26 + steps:
27 + - name: Checkout
28 + uses: actions/checkout@v3
29 + - name: Setup Git User
30 + run: |
31 + git config --global user.email "npm-cli+bot@github.com"
32 + git config --global user.name "npm CLI robot"
33 + - name: Initialize CodeQL
34 + uses: github/codeql-action/init@v2
35 + with:
36 + languages: javascript
37 + - name: Perform CodeQL Analysis
38 + uses: github/codeql-action/analyze@v2
.github/workflows/license-compliance.yml deleted
-11
@@ -1,11 +0,0 @@
1 -name: REUSE Compliance Check
2 -
3 -on: pull_request
4 -
5 -jobs:
6 - test:
7 - runs-on: ubuntu-latest
8 - steps:
9 - - uses: actions/checkout@v2
10 - - name: REUSE Compliance Check
11 - uses: fsfe/reuse-action@v1
.github/workflows/post-dependabot.yml
+2 -1
@@ -28,12 +28,13 @@ jobs:
28 uses: actions/setup-node@v3
29 with:
30 node-version: 18.x
31 + cache: npm
32 - name: Install npm@latest
33 run: npm i --prefer-online --no-fund --no-audit -g npm@latest
34 - name: npm Version
35 run: npm -v
36 - name: Install Dependencies
36 - run: npm i --ignore-scripts --no-audit --no-fund
37 + run: npm i --no-audit --no-fund
38 - name: Fetch Dependabot Metadata
39 id: metadata
40 uses: dependabot/fetch-metadata@v1
.github/workflows/publish.yml
+16 -4
@@ -1,3 +1,5 @@
1 +# This file is automatically added by @npmcli/template-oss. Do not edit.
2 +
3 name: Publish
4
5 on:
@@ -8,12 +10,18 @@ on:
10 workflow_dispatch:
11 workflow_call:
12
13 +
14 jobs:
15 build-and-upload:
16 permissions:
17 contents: read
18 pages: read
19 + name: Build and Upload
20 + if: github.repository_owner == 'npm'
21 runs-on: ubuntu-latest
22 + defaults:
23 + run:
24 + shell: bash
25 steps:
26 - name: Checkout PR
27 if: ${{ github.event_name == 'pull_request_target' }}
@@ -28,13 +36,17 @@ jobs:
36 ref: main
37 - name: Setup Pages
38 uses: actions/configure-pages@v1
31 - - name: Use Node.js
39 + - name: Setup Node
40 uses: actions/setup-node@v3
41 with:
34 - node-version: 16.x
42 + node-version: 18.x
43 cache: npm
36 - - name: Install npm packages
37 - run: npm ci
44 + - name: Install npm@latest
45 + run: npm i --prefer-online --no-fund --no-audit -g npm@latest
46 + - name: npm Version
47 + run: npm -v
48 + - name: Install Dependencies
49 + run: npm i --no-audit --no-fund
50 - name: Build documentation
51 run: npm run build
52 env:
.github/workflows/update-cli.yml
+2 -1
@@ -28,12 +28,13 @@ jobs:
28 uses: actions/setup-node@v3
29 with:
30 node-version: 18.x
31 + cache: npm
32 - name: Install npm@latest
33 run: npm i --prefer-online --no-fund --no-audit -g npm@latest
34 - name: npm Version
35 run: npm -v
36 - name: Install Dependencies
36 - run: npm i --ignore-scripts --no-audit --no-fund
37 + run: npm i --no-audit --no-fund
38 - name: Build documentation
39 run: npm run build -w cli
40 env:
.gitignore
+37 -92
@@ -1,92 +1,37 @@
1 -# Logs
2 -logs
3 -*.log
4 -npm-debug.log*
5 -yarn-debug.log*
6 -yarn-error.log*
7 -lerna-debug.log*
8 -
9 -# Diagnostic reports (https://nodejs.org/api/report.html)
10 -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 -
12 -# Runtime data
13 -pids
14 -*.pid
15 -*.seed
16 -*.pid.lock
17 -
18 -# Directory for instrumented libs generated by jscoverage/JSCover
19 -lib-cov
20 -
21 -# Coverage directory used by tools like istanbul
22 -coverage
23 -*.lcov
24 -
25 -# nyc test coverage
26 -.nyc_output
27 -
28 -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29 -.grunt
30 -
31 -# Bower dependency directory (https://bower.io/)
32 -bower_components
33 -
34 -# node-waf configuration
35 -.lock-wscript
36 -
37 -# Compiled binary addons (https://nodejs.org/api/addons.html)
38 -build/Release
39 -
40 -# Dependency directories
41 -node_modules/
42 -jspm_packages/
43 -
44 -# TypeScript v1 declaration files
45 -typings/
46 -
47 -# TypeScript cache
48 -*.tsbuildinfo
49 -
50 -# Optional npm cache directory
51 -.npm
52 -
53 -# Optional eslint cache
54 -.eslintcache
55 -
56 -# Optional REPL history
57 -.node_repl_history
58 -
59 -# Output of 'npm pack'
60 -*.tgz
61 -
62 -# Yarn Integrity file
63 -.yarn-integrity
64 -
65 -# dotenv environment variables file
66 -.env
67 -.env.test
68 -
69 -# parcel-bundler cache (https://parceljs.org/)
70 -.cache
71 -
72 -# next.js build output
73 -.next
74 -
75 -# nuxt.js build output
76 -.nuxt
77 -
78 -# vuepress build output
79 -.vuepress/dist
80 -
81 -# Serverless directories
82 -.serverless/
83 -
84 -# FuseBox cache
85 -.fusebox/
86 -
87 -# DynamoDB Local files
88 -.dynamodb/
89 -
90 -# Gatsby
91 -public/
92 -.DS_Store
1 +# This file is automatically added by @npmcli/template-oss. Do not edit.
2 +
3 +# ignore everything in the root
4 +/*
5 +
6 +# keep these
7 +!**/.gitignore
8 +!/.commitlintrc.js
9 +!/.eslintrc.js
10 +!/.eslintrc.local.*
11 +!/.github/
12 +!/.gitignore
13 +!/.npmrc
14 +!/.release-please-manifest.json
15 +!/.reuse/
16 +!/*.md
17 +!/bin/
18 +!/CHANGELOG*
19 +!/CODE_OF_CONDUCT.md
20 +!/content/
21 +!/docs/
22 +!/gatsby-*.js
23 +!/lib/
24 +!/LICENSE*
25 +!/map.js
26 +!/package-lock.json
27 +!/package.json
28 +!/README*
29 +!/release-please-config.json
30 +!/scripts/
31 +!/SECURITY.md
32 +!/src/
33 +!/static/
34 +!/tap-snapshots/
35 +!/test/
36 +!/cli/
37 +!/theme/
.npmrc new
+3
@@ -0,0 +1,3 @@
1 +; This file is automatically added by @npmcli/template-oss. Do not edit.
2 +
3 +package-lock=true
.reuse/dep5
+1 -1
@@ -7,6 +7,6 @@ Files: content/* static/*
7 Copyright: 2020 GitHub
8 License: CC-BY-4.0
9
10 -Files: cli/* theme/* src/* .github/* *.md *.js *.json .gitignore
10 +Files: scripts/* cli/* theme/* src/* .github/* *.md *.js *.json .npmrc .gitignore
11 Copyright: 2020 GitHub
12 License: MIT
SECURITY.md
+13 -2
@@ -1,3 +1,14 @@
1 -If you discover a security issue in this repo, please submit it through the [GitHub Security Bug Bounty](https://hackerone.com/github)
1 +<!-- This file is automatically added by @npmcli/template-oss. Do not edit. -->
2 +
3 +GitHub takes the security of our software products and services seriously, including the open source code repositories managed through our GitHub organizations, such as [GitHub](https://github.com/GitHub).
4 +
5 +If you believe you have found a security vulnerability in this GitHub-owned open source repository, you can report it to us in one of two ways.
6 +
7 +If the vulnerability you have found is *not* [in scope for the GitHub Bug Bounty Program](https://bounty.github.com/#scope) or if you do not wish to be considered for a bounty reward, please report the issue to us directly using [private vulnerability reporting](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability).
8 +
9 +If the vulnerability you have found is [in scope for the GitHub Bug Bounty Program](https://bounty.github.com/#scope) and you would like for your finding to be considered for a bounty reward, please submit the vulnerability to us through [HackerOne](https://hackerone.com/github) in order to be eligible to receive a bounty award.
10 +
11 +**Please do not report security vulnerabilities through public GitHub issues, discussions, or pull requests.**
12 +
13 +Thanks for helping make GitHub safe for everyone.
14
3 -Thanks for helping make the npm Documentation safe for everyone.
cli/package.json
+2 -8
@@ -1,6 +1,5 @@
1 {
2 "name": "cli",
3 - "version": "0.1.0",
3 "private": true,
4 "repository": {
5 "url": "https://github.com/npm/documentation.git",
@@ -43,13 +42,8 @@
42 },
43 "templateOSS": {
44 "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
46 - "version": "4.10.0",
47 - "content": "./scripts/template-oss",
48 - "macCI": false,
49 - "ciVersions": "latest",
50 - "allowPaths": [
51 - "/releases.json"
52 - ]
45 + "version": "4.11.0",
46 + "content": "./scripts/template-oss"
47 },
48 "tap": {
49 "nyc-arg": [
cli/scripts/template-oss/_step-deps.yml new
+2
@@ -0,0 +1,2 @@
1 +- name: Install Dependencies
2 + run: {{ rootNpmPath }} i --no-audit --no-fund {{~#if jobDepFlags}} {{ jobDepFlags }}{{/if}}
cli/scripts/template-oss/index.js
+4
@@ -1,7 +1,11 @@
1 module.exports = {
2 + ...require('../../../scripts/template-oss'),
3 workspaceRepo: {
4 add: {
5 '.github/workflows/update-cli.yml': 'update-cli.yml',
6 },
7 },
8 + allowPaths: [
9 + '/releases.json',
10 + ],
11 }
gatsby-config.js
+3 -2
@@ -1,10 +1,11 @@
1 module.exports = {
2 - trailingSlash: "never",
2 + trailingSlash: 'never',
3 siteMetadata: {
4 title: 'npm Docs',
5 shortName: 'npm',
6 description: 'Documentation for the npm registry, website, and command-line interface',
7 lang: 'en',
8 + // eslint-disable-next-line max-len
9 imageUrl: 'https://user-images.githubusercontent.com/29712634/81721690-e2fb5d80-9445-11ea-8602-4b2294c964f3.png',
10 },
11 plugins: [
@@ -21,6 +22,6 @@ module.exports = {
22 },
23 },
24 },
24 - 'gatsby-plugin-meta-redirect'
25 + 'gatsby-plugin-meta-redirect',
26 ],
27 }
gatsby-node.js
+8 -8
@@ -1,25 +1,25 @@
1 -exports.onCreateNode = ({node, actions, getNode}) => {
2 - const {createNodeField} = actions;
1 +exports.onCreateNode = ({ node, actions, getNode }) => {
2 + const { createNodeField } = actions
3
4 - if (node.internal.type === "Mdx") {
5 - const file = getNode(node.parent);
4 + if (node.internal.type === 'Mdx') {
5 + const file = getNode(node.parent)
6
7 // cli paths are unchanged
8 if (file.relativeDirectory.startsWith('cli/')) {
9 - return;
9 + return
10 }
11
12 // directory index paths and policy are unchanged
13 if (file.name === 'index' ||
14 - file.relativeDirectory.match('^policies(\/.*)?$')) {
15 - return;
14 + file.relativeDirectory.match(/^policies(\/.*)?$/)) {
15 + return
16 }
17
18 // otherwise, omit the directory path and use the filename as the slug
19 createNodeField({
20 name: 'slug',
21 node,
22 - value: file.name
22 + value: file.name,
23 })
24 }
25 }
package-lock.json
+2035 -819
@@ -1,12 +1,12 @@
1 {
2 "name": "npm-documentation",
3 - "version": "0.1.0",
3 + "version": "1.0.0",
4 "lockfileVersion": 2,
5 "requires": true,
6 "packages": {
7 "": {
8 "name": "npm-documentation",
9 - "version": "0.1.0",
9 + "version": "1.0.0",
10 "workspaces": [
11 "cli/",
12 "theme/"
@@ -17,10 +17,17 @@
17 "react": "^17.0.2",
18 "react-dom": "^17.0.2",
19 "theme": "*"
20 + },
21 + "devDependencies": {
22 + "@npmcli/eslint-config": "^4.0.0",
23 + "@npmcli/template-oss": "4.11.0",
24 + "tap": "^16.3.0"
25 + },
26 + "engines": {
27 + "node": ">=18.0.0"
28 }
29 },
30 "cli": {
23 - "version": "0.1.0",
31 "dependencies": {
32 "@octokit/rest": "^19.0.5",
33 "front-matter": "^4.0.2",
@@ -41,252 +48,6 @@
48 "node": ">=18.0.0"
49 }
50 },
44 - "cli/node_modules/@npmcli/eslint-config": {
45 - "version": "4.0.1",
46 - "resolved": "https://registry.npmjs.org/@npmcli/eslint-config/-/eslint-config-4.0.1.tgz",
47 - "integrity": "sha512-bHsOOLO2UiMb8G4Q968VJjlO4QWXf3SivgN/rQKsbzcS37S7aFWwPph3PwBaTF6O0OlUvjLiM1mzXlz/1jGV9Q==",
48 - "dev": true,
49 - "dependencies": {
50 - "which": "^3.0.0"
51 - },
52 - "bin": {
53 - "lint": "bin/index.js"
54 - },
55 - "engines": {
56 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
57 - },
58 - "peerDependencies": {
59 - "eslint": "^8.13.0",
60 - "eslint-plugin-import": "^2.26.0",
61 - "eslint-plugin-node": "^11.1.0",
62 - "eslint-plugin-promise": "^6.0.0"
63 - }
64 - },
65 - "cli/node_modules/@npmcli/template-oss": {
66 - "version": "4.11.0",
67 - "resolved": "https://registry.npmjs.org/@npmcli/template-oss/-/template-oss-4.11.0.tgz",
68 - "integrity": "sha512-nvZqRxT9AFf56Fj07v1yG9AQVOTNn82ysMVI67IzpktunKFHmZ5Tp8P/al5pPik/nYQ4AieEyh7XC2dMro4moA==",
69 - "dev": true,
70 - "hasInstallScript": true,
71 - "dependencies": {
72 - "@actions/core": "^1.9.1",
73 - "@commitlint/cli": "^17.1.1",
74 - "@commitlint/config-conventional": "^17.1.0",
75 - "@isaacs/string-locale-compare": "^1.1.0",
76 - "@npmcli/arborist": "^6.0.0",
77 - "@npmcli/git": "^4.0.0",
78 - "@npmcli/map-workspaces": "^3.0.0",
79 - "@npmcli/package-json": "^3.0.0",
80 - "@octokit/rest": "^19.0.4",
81 - "diff": "^5.0.0",
82 - "glob": "^8.0.1",
83 - "handlebars": "^4.7.7",
84 - "hosted-git-info": "^6.0.0",
85 - "ini": "^3.0.1",
86 - "json-parse-even-better-errors": "^3.0.0",
87 - "just-deep-map-values": "^1.1.1",
88 - "just-diff": "^5.0.1",
89 - "lodash": "^4.17.21",
90 - "npm-package-arg": "^10.0.0",
91 - "proc-log": "^3.0.0",
92 - "release-please": "npm:@npmcli/release-please@^14.2.6",
93 - "semver": "^7.3.5",
94 - "yaml": "^2.1.1"
95 - },
96 - "bin": {
97 - "template-oss-apply": "bin/apply.js",
98 - "template-oss-check": "bin/check.js",
99 - "template-oss-release-manager": "bin/release-manager.js",
100 - "template-oss-release-please": "bin/release-please.js"
101 - },
102 - "engines": {
103 - "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
104 - }
105 - },
106 - "cli/node_modules/brace-expansion": {
107 - "version": "1.1.11",
108 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
109 - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
110 - "dev": true,
111 - "peer": true,
112 - "dependencies": {
113 - "balanced-match": "^1.0.0",
114 - "concat-map": "0.0.1"
115 - }
116 - },
117 - "cli/node_modules/debug": {
118 - "version": "4.3.4",
119 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
120 - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
121 - "dev": true,
122 - "peer": true,
123 - "dependencies": {
124 - "ms": "2.1.2"
125 - },
126 - "engines": {
127 - "node": ">=6.0"
128 - },
129 - "peerDependenciesMeta": {
130 - "supports-color": {
131 - "optional": true
132 - }
133 - }
134 - },
135 - "cli/node_modules/eslint": {
136 - "version": "8.27.0",
137 - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz",
138 - "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==",
139 - "dev": true,
140 - "peer": true,
141 - "dependencies": {
142 - "@eslint/eslintrc": "^1.3.3",
143 - "@humanwhocodes/config-array": "^0.11.6",
144 - "@humanwhocodes/module-importer": "^1.0.1",
145 - "@nodelib/fs.walk": "^1.2.8",
146 - "ajv": "^6.10.0",
147 - "chalk": "^4.0.0",
148 - "cross-spawn": "^7.0.2",
149 - "debug": "^4.3.2",
150 - "doctrine": "^3.0.0",
151 - "escape-string-regexp": "^4.0.0",
152 - "eslint-scope": "^7.1.1",
153 - "eslint-utils": "^3.0.0",
154 - "eslint-visitor-keys": "^3.3.0",
155 - "espree": "^9.4.0",
156 - "esquery": "^1.4.0",
157 - "esutils": "^2.0.2",
158 - "fast-deep-equal": "^3.1.3",
159 - "file-entry-cache": "^6.0.1",
160 - "find-up": "^5.0.0",
161 - "glob-parent": "^6.0.2",
162 - "globals": "^13.15.0",
163 - "grapheme-splitter": "^1.0.4",
164 - "ignore": "^5.2.0",
165 - "import-fresh": "^3.0.0",
166 - "imurmurhash": "^0.1.4",
167 - "is-glob": "^4.0.0",
168 - "is-path-inside": "^3.0.3",
169 - "js-sdsl": "^4.1.4",
170 - "js-yaml": "^4.1.0",
171 - "json-stable-stringify-without-jsonify": "^1.0.1",
172 - "levn": "^0.4.1",
173 - "lodash.merge": "^4.6.2",
174 - "minimatch": "^3.1.2",
175 - "natural-compare": "^1.4.0",
176 - "optionator": "^0.9.1",
177 - "regexpp": "^3.2.0",
178 - "strip-ansi": "^6.0.1",
179 - "strip-json-comments": "^3.1.0",
180 - "text-table": "^0.2.0"
181 - },
182 - "bin": {
183 - "eslint": "bin/eslint.js"
184 - },
185 - "engines": {
186 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
187 - },
188 - "funding": {
189 - "url": "https://opencollective.com/eslint"
190 - }
191 - },
192 - "cli/node_modules/eslint-scope": {
193 - "version": "7.1.1",
194 - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
195 - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
196 - "dev": true,
197 - "peer": true,
198 - "dependencies": {
199 - "esrecurse": "^4.3.0",
200 - "estraverse": "^5.2.0"
201 - },
202 - "engines": {
203 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
204 - }
205 - },
206 - "cli/node_modules/eslint-visitor-keys": {
207 - "version": "3.3.0",
208 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
209 - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
210 - "dev": true,
211 - "peer": true,
212 - "engines": {
213 - "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
214 - }
215 - },
216 - "cli/node_modules/eslint/node_modules/minimatch": {
217 - "version": "3.1.2",
218 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
219 - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
220 - "dev": true,
221 - "peer": true,
222 - "dependencies": {
223 - "brace-expansion": "^1.1.7"
224 - },
225 - "engines": {
226 - "node": "*"
227 - }
228 - },
229 - "cli/node_modules/glob": {
230 - "version": "8.0.3",
231 - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz",
232 - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==",
233 - "dev": true,
234 - "dependencies": {
235 - "fs.realpath": "^1.0.0",
236 - "inflight": "^1.0.4",
237 - "inherits": "2",
238 - "minimatch": "^5.0.1",
239 - "once": "^1.3.0"
240 - },
241 - "engines": {
242 - "node": ">=12"
243 - },
244 - "funding": {
245 - "url": "https://github.com/sponsors/isaacs"
246 - }
247 - },
248 - "cli/node_modules/glob-parent": {
249 - "version": "6.0.2",
250 - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
251 - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
252 - "dev": true,
253 - "peer": true,
254 - "dependencies": {
255 - "is-glob": "^4.0.3"
256 - },
257 - "engines": {
258 - "node": ">=10.13.0"
259 - }
260 - },
261 - "cli/node_modules/globals": {
262 - "version": "13.17.0",
263 - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
264 - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
265 - "dev": true,
266 - "peer": true,
267 - "dependencies": {
268 - "type-fest": "^0.20.2"
269 - },
270 - "engines": {
271 - "node": ">=8"
272 - },
273 - "funding": {
274 - "url": "https://github.com/sponsors/sindresorhus"
275 - }
276 - },
277 - "cli/node_modules/js-yaml": {
278 - "version": "4.1.0",
279 - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
280 - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
281 - "dev": true,
282 - "peer": true,
283 - "dependencies": {
284 - "argparse": "^2.0.1"
285 - },
286 - "bin": {
287 - "js-yaml": "bin/js-yaml.js"
288 - }
289 - },
51 "cli/node_modules/minipass": {
52 "version": "4.0.0",
53 "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz",
@@ -2702,8 +2463,6 @@
2463 "version": "1.3.3",
2464 "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz",
2465 "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==",
2705 - "dev": true,
2706 - "peer": true,
2466 "dependencies": {
2467 "ajv": "^6.12.4",
2468 "debug": "^4.3.2",
@@ -2726,8 +2485,6 @@
2485 "version": "1.1.11",
2486 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
2487 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
2729 - "dev": true,
2730 - "peer": true,
2488 "dependencies": {
2489 "balanced-match": "^1.0.0",
2490 "concat-map": "0.0.1"
@@ -2737,8 +2494,6 @@
2494 "version": "4.3.4",
2495 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
2496 "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
2740 - "dev": true,
2741 - "peer": true,
2497 "dependencies": {
2498 "ms": "2.1.2"
2499 },
@@ -2752,11 +2507,9 @@
2507 }
2508 },
2509 "node_modules/@eslint/eslintrc/node_modules/globals": {
2755 - "version": "13.17.0",
2756 - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
2757 - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
2758 - "dev": true,
2759 - "peer": true,
2510 + "version": "13.19.0",
2511 + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
2512 + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
2513 "dependencies": {
2514 "type-fest": "^0.20.2"
2515 },
@@ -2771,8 +2524,6 @@
2524 "version": "4.1.0",
2525 "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
2526 "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
2774 - "dev": true,
2775 - "peer": true,
2527 "dependencies": {
2528 "argparse": "^2.0.1"
2529 },
@@ -2784,8 +2535,6 @@
2535 "version": "3.1.2",
2536 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2537 "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2787 - "dev": true,
2788 - "peer": true,
2538 "dependencies": {
2539 "brace-expansion": "^1.1.7"
2540 },
@@ -2845,6 +2594,12 @@
2594 "strip-ansi": "^6.0.0"
2595 }
2596 },
2597 + "node_modules/@github/browserslist-config": {
2598 + "version": "1.0.0",
2599 + "resolved": "https://registry.npmjs.org/@github/browserslist-config/-/browserslist-config-1.0.0.tgz",
2600 + "integrity": "sha512-gIhjdJp/c2beaIWWIlsXdqXVRUz3r2BxBCpfz/F3JXHvSAQ1paMYjLH+maEATtENg+k5eLV7gA+9yPp762ieuw==",
2601 + "dev": true
2602 + },
2603 "node_modules/@github/combobox-nav": {
2604 "version": "2.1.5",
2605 "resolved": "https://registry.npmjs.org/@github/combobox-nav/-/combobox-nav-2.1.5.tgz",
@@ -3212,11 +2967,9 @@
2967 }
2968 },
2969 "node_modules/@humanwhocodes/config-array": {
3215 - "version": "0.11.7",
3216 - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz",
3217 - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==",
3218 - "dev": true,
3219 - "peer": true,
2970 + "version": "0.11.8",
2971 + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
2972 + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
2973 "dependencies": {
2974 "@humanwhocodes/object-schema": "^1.2.1",
2975 "debug": "^4.1.1",
@@ -3230,8 +2983,6 @@
2983 "version": "1.1.11",
2984 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
2985 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
3233 - "dev": true,
3234 - "peer": true,
2986 "dependencies": {
2987 "balanced-match": "^1.0.0",
2988 "concat-map": "0.0.1"
@@ -3241,8 +2992,6 @@
2992 "version": "4.3.4",
2993 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
2994 "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
3244 - "dev": true,
3245 - "peer": true,
2995 "dependencies": {
2996 "ms": "2.1.2"
2997 },
@@ -3259,8 +3008,6 @@
3008 "version": "3.1.2",
3009 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
3010 "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
3262 - "dev": true,
3263 - "peer": true,
3011 "dependencies": {
3012 "brace-expansion": "^1.1.7"
3013 },
@@ -3272,8 +3019,6 @@
3019 "version": "1.0.1",
3020 "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
3021 "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
3275 - "dev": true,
3276 - "peer": true,
3022 "engines": {
3023 "node": ">=12.22"
3024 },
@@ -4793,6 +4538,27 @@
4538 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
4539 }
4540 },
4541 + "node_modules/@npmcli/eslint-config": {
4542 + "version": "4.0.1",
4543 + "resolved": "https://registry.npmjs.org/@npmcli/eslint-config/-/eslint-config-4.0.1.tgz",
4544 + "integrity": "sha512-bHsOOLO2UiMb8G4Q968VJjlO4QWXf3SivgN/rQKsbzcS37S7aFWwPph3PwBaTF6O0OlUvjLiM1mzXlz/1jGV9Q==",
4545 + "dev": true,
4546 + "dependencies": {
4547 + "which": "^3.0.0"
4548 + },
4549 + "bin": {
4550 + "lint": "bin/index.js"
4551 + },
4552 + "engines": {
4553 + "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
4554 + },
4555 + "peerDependencies": {
4556 + "eslint": "^8.13.0",
4557 + "eslint-plugin-import": "^2.26.0",
4558 + "eslint-plugin-node": "^11.1.0",
4559 + "eslint-plugin-promise": "^6.0.0"
4560 + }
4561 + },
4562 "node_modules/@npmcli/fs": {
4563 "version": "3.1.0",
4564 "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz",
@@ -4986,6 +4752,75 @@
4752 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
4753 }
4754 },
4755 + "node_modules/@npmcli/template-oss": {
4756 + "version": "4.11.0",
4757 + "resolved": "https://registry.npmjs.org/@npmcli/template-oss/-/template-oss-4.11.0.tgz",
4758 + "integrity": "sha512-nvZqRxT9AFf56Fj07v1yG9AQVOTNn82ysMVI67IzpktunKFHmZ5Tp8P/al5pPik/nYQ4AieEyh7XC2dMro4moA==",
4759 + "dev": true,
4760 + "hasInstallScript": true,
4761 + "dependencies": {
4762 + "@actions/core": "^1.9.1",
4763 + "@commitlint/cli": "^17.1.1",
4764 + "@commitlint/config-conventional": "^17.1.0",
4765 + "@isaacs/string-locale-compare": "^1.1.0",
4766 + "@npmcli/arborist": "^6.0.0",
4767 + "@npmcli/git": "^4.0.0",
4768 + "@npmcli/map-workspaces": "^3.0.0",
4769 + "@npmcli/package-json": "^3.0.0",
4770 + "@octokit/rest": "^19.0.4",
4771 + "diff": "^5.0.0",
4772 + "glob": "^8.0.1",
4773 + "handlebars": "^4.7.7",
4774 + "hosted-git-info": "^6.0.0",
4775 + "ini": "^3.0.1",
4776 + "json-parse-even-better-errors": "^3.0.0",
4777 + "just-deep-map-values": "^1.1.1",
4778 + "just-diff": "^5.0.1",
4779 + "lodash": "^4.17.21",
4780 + "npm-package-arg": "^10.0.0",
4781 + "proc-log": "^3.0.0",
4782 + "release-please": "npm:@npmcli/release-please@^14.2.6",
4783 + "semver": "^7.3.5",
4784 + "yaml": "^2.1.1"
4785 + },
4786 + "bin": {
4787 + "template-oss-apply": "bin/apply.js",
4788 + "template-oss-check": "bin/check.js",
4789 + "template-oss-release-manager": "bin/release-manager.js",
4790 + "template-oss-release-please": "bin/release-please.js"
4791 + },
4792 + "engines": {
4793 + "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
4794 + }
4795 + },
4796 + "node_modules/@npmcli/template-oss/node_modules/glob": {
4797 + "version": "8.0.3",
4798 + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz",
4799 + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==",
4800 + "dev": true,
4801 + "dependencies": {
4802 + "fs.realpath": "^1.0.0",
4803 + "inflight": "^1.0.4",
4804 + "inherits": "2",
4805 + "minimatch": "^5.0.1",
4806 + "once": "^1.3.0"
4807 + },
4808 + "engines": {
4809 + "node": ">=12"
4810 + },
4811 + "funding": {
4812 + "url": "https://github.com/sponsors/isaacs"
4813 + }
4814 + },
4815 + "node_modules/@npmcli/template-oss/node_modules/yaml": {
4816 + "version": "2.1.3",
4817 + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz",
4818 + "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==",
4819 + "dev": true,
4820 + "engines": {
4821 + "node": ">= 14"
4822 + }
4823 + },
4824 "node_modules/@octokit/auth-token": {
4825 "version": "3.0.2",
4826 "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz",
@@ -6862,6 +6697,12 @@
6697 "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
6698 "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
6699 },
6700 + "node_modules/@types/semver": {
6701 + "version": "7.3.13",
6702 + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz",
6703 + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==",
6704 + "dev": true
6705 + },
6706 "node_modules/@types/sharp": {
6707 "version": "0.30.5",
6708 "resolved": "https://registry.npmjs.org/@types/sharp/-/sharp-0.30.5.tgz",
@@ -7070,29 +6911,31 @@
6911 "integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw=="
6912 },
6913 "node_modules/@typescript-eslint/eslint-plugin": {
7073 - "version": "4.33.0",
7074 - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz",
7075 - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==",
6914 + "version": "5.46.1",
6915 + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.46.1.tgz",
6916 + "integrity": "sha512-YpzNv3aayRBwjs4J3oz65eVLXc9xx0PDbIRisHj+dYhvBn02MjYOD96P8YGiWEIFBrojaUjxvkaUpakD82phsA==",
6917 + "dev": true,
6918 "dependencies": {
7077 - "@typescript-eslint/experimental-utils": "4.33.0",
7078 - "@typescript-eslint/scope-manager": "4.33.0",
7079 - "debug": "^4.3.1",
7080 - "functional-red-black-tree": "^1.0.1",
7081 - "ignore": "^5.1.8",
7082 - "regexpp": "^3.1.0",
7083 - "semver": "^7.3.5",
6919 + "@typescript-eslint/scope-manager": "5.46.1",
6920 + "@typescript-eslint/type-utils": "5.46.1",
6921 + "@typescript-eslint/utils": "5.46.1",
6922 + "debug": "^4.3.4",
6923 + "ignore": "^5.2.0",
6924 + "natural-compare-lite": "^1.4.0",
6925 + "regexpp": "^3.2.0",
6926 + "semver": "^7.3.7",
6927 "tsutils": "^3.21.0"
6928 },
6929 "engines": {
7087 - "node": "^10.12.0 || >=12.0.0"
6930 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
6931 },
6932 "funding": {
6933 "type": "opencollective",
6934 "url": "https://opencollective.com/typescript-eslint"
6935 },
6936 "peerDependencies": {
7094 - "@typescript-eslint/parser": "^4.0.0",
7095 - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
6937 + "@typescript-eslint/parser": "^5.0.0",
6938 + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
6939 },
6940 "peerDependenciesMeta": {
6941 "typescript": {
@@ -7100,10 +6943,58 @@
6943 }
6944 }
6945 },
6946 + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
6947 + "version": "5.46.1",
6948 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz",
6949 + "integrity": "sha512-iOChVivo4jpwUdrJZyXSMrEIM/PvsbbDOX1y3UCKjSgWn+W89skxWaYXACQfxmIGhPVpRWK/VWPYc+bad6smIA==",
6950 + "dev": true,
6951 + "dependencies": {
6952 + "@typescript-eslint/types": "5.46.1",
6953 + "@typescript-eslint/visitor-keys": "5.46.1"
6954 + },
6955 + "engines": {
6956 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
6957 + },
6958 + "funding": {
6959 + "type": "opencollective",
6960 + "url": "https://opencollective.com/typescript-eslint"
6961 + }
6962 + },
6963 + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
6964 + "version": "5.46.1",
6965 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz",
6966 + "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==",
6967 + "dev": true,
6968 + "engines": {
6969 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
6970 + },
6971 + "funding": {
6972 + "type": "opencollective",
6973 + "url": "https://opencollective.com/typescript-eslint"
6974 + }
6975 + },
6976 + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
6977 + "version": "5.46.1",
6978 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz",
6979 + "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==",
6980 + "dev": true,
6981 + "dependencies": {
6982 + "@typescript-eslint/types": "5.46.1",
6983 + "eslint-visitor-keys": "^3.3.0"
6984 + },
6985 + "engines": {
6986 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
6987 + },
6988 + "funding": {
6989 + "type": "opencollective",
6990 + "url": "https://opencollective.com/typescript-eslint"
6991 + }
6992 + },
6993 "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": {
6994 "version": "4.3.4",
6995 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
6996 "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
6997 + "dev": true,
6998 "dependencies": {
6999 "ms": "2.1.2"
7000 },
@@ -7116,6 +7007,15 @@
7007 }
7008 }
7009 },
7010 + "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-visitor-keys": {
7011 + "version": "3.3.0",
7012 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
7013 + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
7014 + "dev": true,
7015 + "engines": {
7016 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7017 + }
7018 + },
7019 "node_modules/@typescript-eslint/experimental-utils": {
7020 "version": "4.33.0",
7021 "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz",
@@ -7140,24 +7040,25 @@
7040 }
7041 },
7042 "node_modules/@typescript-eslint/parser": {
7143 - "version": "4.33.0",
7144 - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz",
7145 - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==",
7043 + "version": "5.46.1",
7044 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.46.1.tgz",
7045 + "integrity": "sha512-RelQ5cGypPh4ySAtfIMBzBGyrNerQcmfA1oJvPj5f+H4jI59rl9xxpn4bonC0tQvUKOEN7eGBFWxFLK3Xepneg==",
7046 + "dev": true,
7047 "dependencies": {
7147 - "@typescript-eslint/scope-manager": "4.33.0",
7148 - "@typescript-eslint/types": "4.33.0",
7149 - "@typescript-eslint/typescript-estree": "4.33.0",
7150 - "debug": "^4.3.1"
7048 + "@typescript-eslint/scope-manager": "5.46.1",
7049 + "@typescript-eslint/types": "5.46.1",
7050 + "@typescript-eslint/typescript-estree": "5.46.1",
7051 + "debug": "^4.3.4"
7052 },
7053 "engines": {
7153 - "node": "^10.12.0 || >=12.0.0"
7054 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7055 },
7056 "funding": {
7057 "type": "opencollective",
7058 "url": "https://opencollective.com/typescript-eslint"
7059 },
7060 "peerDependencies": {
7160 - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
7061 + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
7062 },
7063 "peerDependenciesMeta": {
7064 "typescript": {
@@ -7165,10 +7066,85 @@
7066 }
7067 }
7068 },
7069 + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
7070 + "version": "5.46.1",
7071 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz",
7072 + "integrity": "sha512-iOChVivo4jpwUdrJZyXSMrEIM/PvsbbDOX1y3UCKjSgWn+W89skxWaYXACQfxmIGhPVpRWK/VWPYc+bad6smIA==",
7073 + "dev": true,
7074 + "dependencies": {
7075 + "@typescript-eslint/types": "5.46.1",
7076 + "@typescript-eslint/visitor-keys": "5.46.1"
7077 + },
7078 + "engines": {
7079 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7080 + },
7081 + "funding": {
7082 + "type": "opencollective",
7083 + "url": "https://opencollective.com/typescript-eslint"
7084 + }
7085 + },
7086 + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
7087 + "version": "5.46.1",
7088 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz",
7089 + "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==",
7090 + "dev": true,
7091 + "engines": {
7092 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7093 + },
7094 + "funding": {
7095 + "type": "opencollective",
7096 + "url": "https://opencollective.com/typescript-eslint"
7097 + }
7098 + },
7099 + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
7100 + "version": "5.46.1",
7101 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz",
7102 + "integrity": "sha512-j9W4t67QiNp90kh5Nbr1w92wzt+toiIsaVPnEblB2Ih2U9fqBTyqV9T3pYWZBRt6QoMh/zVWP59EpuCjc4VRBg==",
7103 + "dev": true,
7104 + "dependencies": {
7105 + "@typescript-eslint/types": "5.46.1",
7106 + "@typescript-eslint/visitor-keys": "5.46.1",
7107 + "debug": "^4.3.4",
7108 + "globby": "^11.1.0",
7109 + "is-glob": "^4.0.3",
7110 + "semver": "^7.3.7",
7111 + "tsutils": "^3.21.0"
7112 + },
7113 + "engines": {
7114 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7115 + },
7116 + "funding": {
7117 + "type": "opencollective",
7118 + "url": "https://opencollective.com/typescript-eslint"
7119 + },
7120 + "peerDependenciesMeta": {
7121 + "typescript": {
7122 + "optional": true
7123 + }
7124 + }
7125 + },
7126 + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
7127 + "version": "5.46.1",
7128 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz",
7129 + "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==",
7130 + "dev": true,
7131 + "dependencies": {
7132 + "@typescript-eslint/types": "5.46.1",
7133 + "eslint-visitor-keys": "^3.3.0"
7134 + },
7135 + "engines": {
7136 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7137 + },
7138 + "funding": {
7139 + "type": "opencollective",
7140 + "url": "https://opencollective.com/typescript-eslint"
7141 + }
7142 + },
7143 "node_modules/@typescript-eslint/parser/node_modules/debug": {
7144 "version": "4.3.4",
7145 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
7146 "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
7147 + "dev": true,
7148 "dependencies": {
7149 "ms": "2.1.2"
7150 },
@@ -7181,6 +7157,15 @@
7157 }
7158 }
7159 },
7160 + "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": {
7161 + "version": "3.3.0",
7162 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
7163 + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
7164 + "dev": true,
7165 + "engines": {
7166 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7167 + }
7168 + },
7169 "node_modules/@typescript-eslint/scope-manager": {
7170 "version": "4.33.0",
7171 "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz",
@@ -7197,6 +7182,116 @@
7182 "url": "https://opencollective.com/typescript-eslint"
7183 }
7184 },
7185 + "node_modules/@typescript-eslint/type-utils": {
7186 + "version": "5.46.1",
7187 + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.46.1.tgz",
7188 + "integrity": "sha512-V/zMyfI+jDmL1ADxfDxjZ0EMbtiVqj8LUGPAGyBkXXStWmCUErMpW873zEHsyguWCuq2iN4BrlWUkmuVj84yng==",
7189 + "dev": true,
7190 + "dependencies": {
7191 + "@typescript-eslint/typescript-estree": "5.46.1",
7192 + "@typescript-eslint/utils": "5.46.1",
7193 + "debug": "^4.3.4",
7194 + "tsutils": "^3.21.0"
7195 + },
7196 + "engines": {
7197 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7198 + },
7199 + "funding": {
7200 + "type": "opencollective",
7201 + "url": "https://opencollective.com/typescript-eslint"
7202 + },
7203 + "peerDependencies": {
7204 + "eslint": "*"
7205 + },
7206 + "peerDependenciesMeta": {
7207 + "typescript": {
7208 + "optional": true
7209 + }
7210 + }
7211 + },
7212 + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
7213 + "version": "5.46.1",
7214 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz",
7215 + "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==",
7216 + "dev": true,
7217 + "engines": {
7218 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7219 + },
7220 + "funding": {
7221 + "type": "opencollective",
7222 + "url": "https://opencollective.com/typescript-eslint"
7223 + }
7224 + },
7225 + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
7226 + "version": "5.46.1",
7227 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz",
7228 + "integrity": "sha512-j9W4t67QiNp90kh5Nbr1w92wzt+toiIsaVPnEblB2Ih2U9fqBTyqV9T3pYWZBRt6QoMh/zVWP59EpuCjc4VRBg==",
7229 + "dev": true,
7230 + "dependencies": {
7231 + "@typescript-eslint/types": "5.46.1",
7232 + "@typescript-eslint/visitor-keys": "5.46.1",
7233 + "debug": "^4.3.4",
7234 + "globby": "^11.1.0",
7235 + "is-glob": "^4.0.3",
7236 + "semver": "^7.3.7",
7237 + "tsutils": "^3.21.0"
7238 + },
7239 + "engines": {
7240 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7241 + },
7242 + "funding": {
7243 + "type": "opencollective",
7244 + "url": "https://opencollective.com/typescript-eslint"
7245 + },
7246 + "peerDependenciesMeta": {
7247 + "typescript": {
7248 + "optional": true
7249 + }
7250 + }
7251 + },
7252 + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
7253 + "version": "5.46.1",
7254 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz",
7255 + "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==",
7256 + "dev": true,
7257 + "dependencies": {
7258 + "@typescript-eslint/types": "5.46.1",
7259 + "eslint-visitor-keys": "^3.3.0"
7260 + },
7261 + "engines": {
7262 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7263 + },
7264 + "funding": {
7265 + "type": "opencollective",
7266 + "url": "https://opencollective.com/typescript-eslint"
7267 + }
7268 + },
7269 + "node_modules/@typescript-eslint/type-utils/node_modules/debug": {
7270 + "version": "4.3.4",
7271 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
7272 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
7273 + "dev": true,
7274 + "dependencies": {
7275 + "ms": "2.1.2"
7276 + },
7277 + "engines": {
7278 + "node": ">=6.0"
7279 + },
7280 + "peerDependenciesMeta": {
7281 + "supports-color": {
7282 + "optional": true
7283 + }
7284 + }
7285 + },
7286 + "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": {
7287 + "version": "3.3.0",
7288 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
7289 + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
7290 + "dev": true,
7291 + "engines": {
7292 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7293 + }
7294 + },
7295 "node_modules/@typescript-eslint/types": {
7296 "version": "4.33.0",
7297 "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz",
@@ -7251,6 +7346,132 @@
7346 }
7347 }
7348 },
7349 + "node_modules/@typescript-eslint/utils": {
7350 + "version": "5.46.1",
7351 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.46.1.tgz",
7352 + "integrity": "sha512-RBdBAGv3oEpFojaCYT4Ghn4775pdjvwfDOfQ2P6qzNVgQOVrnSPe5/Pb88kv7xzYQjoio0eKHKB9GJ16ieSxvA==",
7353 + "dev": true,
7354 + "dependencies": {
7355 + "@types/json-schema": "^7.0.9",
7356 + "@types/semver": "^7.3.12",
7357 + "@typescript-eslint/scope-manager": "5.46.1",
7358 + "@typescript-eslint/types": "5.46.1",
7359 + "@typescript-eslint/typescript-estree": "5.46.1",
7360 + "eslint-scope": "^5.1.1",
7361 + "eslint-utils": "^3.0.0",
7362 + "semver": "^7.3.7"
7363 + },
7364 + "engines": {
7365 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7366 + },
7367 + "funding": {
7368 + "type": "opencollective",
7369 + "url": "https://opencollective.com/typescript-eslint"
7370 + },
7371 + "peerDependencies": {
7372 + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
7373 + }
7374 + },
7375 + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
7376 + "version": "5.46.1",
7377 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz",
7378 + "integrity": "sha512-iOChVivo4jpwUdrJZyXSMrEIM/PvsbbDOX1y3UCKjSgWn+W89skxWaYXACQfxmIGhPVpRWK/VWPYc+bad6smIA==",
7379 + "dev": true,
7380 + "dependencies": {
7381 + "@typescript-eslint/types": "5.46.1",
7382 + "@typescript-eslint/visitor-keys": "5.46.1"
7383 + },
7384 + "engines": {
7385 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7386 + },
7387 + "funding": {
7388 + "type": "opencollective",
7389 + "url": "https://opencollective.com/typescript-eslint"
7390 + }
7391 + },
7392 + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
7393 + "version": "5.46.1",
7394 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz",
7395 + "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==",
7396 + "dev": true,
7397 + "engines": {
7398 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7399 + },
7400 + "funding": {
7401 + "type": "opencollective",
7402 + "url": "https://opencollective.com/typescript-eslint"
7403 + }
7404 + },
7405 + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
7406 + "version": "5.46.1",
7407 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz",
7408 + "integrity": "sha512-j9W4t67QiNp90kh5Nbr1w92wzt+toiIsaVPnEblB2Ih2U9fqBTyqV9T3pYWZBRt6QoMh/zVWP59EpuCjc4VRBg==",
7409 + "dev": true,
7410 + "dependencies": {
7411 + "@typescript-eslint/types": "5.46.1",
7412 + "@typescript-eslint/visitor-keys": "5.46.1",
7413 + "debug": "^4.3.4",
7414 + "globby": "^11.1.0",
7415 + "is-glob": "^4.0.3",
7416 + "semver": "^7.3.7",
7417 + "tsutils": "^3.21.0"
7418 + },
7419 + "engines": {
7420 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7421 + },
7422 + "funding": {
7423 + "type": "opencollective",
7424 + "url": "https://opencollective.com/typescript-eslint"
7425 + },
7426 + "peerDependenciesMeta": {
7427 + "typescript": {
7428 + "optional": true
7429 + }
7430 + }
7431 + },
7432 + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
7433 + "version": "5.46.1",
7434 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz",
7435 + "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==",
7436 + "dev": true,
7437 + "dependencies": {
7438 + "@typescript-eslint/types": "5.46.1",
7439 + "eslint-visitor-keys": "^3.3.0"
7440 + },
7441 + "engines": {
7442 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7443 + },
7444 + "funding": {
7445 + "type": "opencollective",
7446 + "url": "https://opencollective.com/typescript-eslint"
7447 + }
7448 + },
7449 + "node_modules/@typescript-eslint/utils/node_modules/debug": {
7450 + "version": "4.3.4",
7451 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
7452 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
7453 + "dev": true,
7454 + "dependencies": {
7455 + "ms": "2.1.2"
7456 + },
7457 + "engines": {
7458 + "node": ">=6.0"
7459 + },
7460 + "peerDependenciesMeta": {
7461 + "supports-color": {
7462 + "optional": true
7463 + }
7464 + }
7465 + },
7466 + "node_modules/@typescript-eslint/utils/node_modules/eslint-visitor-keys": {
7467 + "version": "3.3.0",
7468 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
7469 + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
7470 + "dev": true,
7471 + "engines": {
7472 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
7473 + }
7474 + },
7475 "node_modules/@typescript-eslint/visitor-keys": {
7476 "version": "4.33.0",
7477 "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz",
@@ -7836,8 +8057,7 @@
8057 "node_modules/argparse": {
8058 "version": "2.0.1",
8059 "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
7839 - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
7840 - "dev": true
8060 + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
8061 },
8062 "node_modules/aria-hidden": {
8063 "version": "1.2.2",
@@ -11862,91 +12082,70 @@
12082 }
12083 },
12084 "node_modules/eslint": {
11865 - "version": "7.32.0",
11866 - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
11867 - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
12085 + "version": "8.29.0",
12086 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz",
12087 + "integrity": "sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==",
12088 "dependencies": {
11869 - "@babel/code-frame": "7.12.11",
11870 - "@eslint/eslintrc": "^0.4.3",
11871 - "@humanwhocodes/config-array": "^0.5.0",
12089 + "@eslint/eslintrc": "^1.3.3",
12090 + "@humanwhocodes/config-array": "^0.11.6",
12091 + "@humanwhocodes/module-importer": "^1.0.1",
12092 + "@nodelib/fs.walk": "^1.2.8",
12093 "ajv": "^6.10.0",
12094 "chalk": "^4.0.0",
12095 "cross-spawn": "^7.0.2",
11875 - "debug": "^4.0.1",
12096 + "debug": "^4.3.2",
12097 "doctrine": "^3.0.0",
11877 - "enquirer": "^2.3.5",
12098 "escape-string-regexp": "^4.0.0",
11879 - "eslint-scope": "^5.1.1",
11880 - "eslint-utils": "^2.1.0",
11881 - "eslint-visitor-keys": "^2.0.0",
11882 - "espree": "^7.3.1",
12099 + "eslint-scope": "^7.1.1",
12100 + "eslint-utils": "^3.0.0",
12101 + "eslint-visitor-keys": "^3.3.0",
12102 + "espree": "^9.4.0",
12103 "esquery": "^1.4.0",
12104 "esutils": "^2.0.2",
12105 "fast-deep-equal": "^3.1.3",
12106 "file-entry-cache": "^6.0.1",
11887 - "functional-red-black-tree": "^1.0.1",
11888 - "glob-parent": "^5.1.2",
11889 - "globals": "^13.6.0",
11890 - "ignore": "^4.0.6",
12107 + "find-up": "^5.0.0",
12108 + "glob-parent": "^6.0.2",
12109 + "globals": "^13.15.0",
12110 + "grapheme-splitter": "^1.0.4",
12111 + "ignore": "^5.2.0",
12112 "import-fresh": "^3.0.0",
12113 "imurmurhash": "^0.1.4",
12114 "is-glob": "^4.0.0",
11894 - "js-yaml": "^3.13.1",
12115 + "is-path-inside": "^3.0.3",
12116 + "js-sdsl": "^4.1.4",
12117 + "js-yaml": "^4.1.0",
12118 "json-stable-stringify-without-jsonify": "^1.0.1",
12119 "levn": "^0.4.1",
12120 "lodash.merge": "^4.6.2",
11898 - "minimatch": "^3.0.4",
12121 + "minimatch": "^3.1.2",
12122 "natural-compare": "^1.4.0",
12123 "optionator": "^0.9.1",
11901 - "progress": "^2.0.0",
11902 - "regexpp": "^3.1.0",
11903 - "semver": "^7.2.1",
11904 - "strip-ansi": "^6.0.0",
12124 + "regexpp": "^3.2.0",
12125 + "strip-ansi": "^6.0.1",
12126 "strip-json-comments": "^3.1.0",
11906 - "table": "^6.0.9",
11907 - "text-table": "^0.2.0",
11908 - "v8-compile-cache": "^2.0.3"
12127 + "text-table": "^0.2.0"
12128 },
12129 "bin": {
12130 "eslint": "bin/eslint.js"
12131 },
12132 "engines": {
11914 - "node": "^10.12.0 || >=12.0.0"
12133 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
12134 },
12135 "funding": {
12136 "url": "https://opencollective.com/eslint"
12137 }
12138 },
11920 - "node_modules/eslint-config-react-app": {
11921 - "version": "6.0.0",
11922 - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz",
11923 - "integrity": "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==",
11924 - "dependencies": {
11925 - "confusing-browser-globals": "^1.0.10"
11926 - },
11927 - "engines": {
11928 - "node": "^10.12.0 || >=12.0.0"
12139 + "node_modules/eslint-config-prettier": {
12140 + "version": "8.5.0",
12141 + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
12142 + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
12143 + "dev": true,
12144 + "bin": {
12145 + "eslint-config-prettier": "bin/cli.js"
12146 },
12147 "peerDependencies": {
11931 - "@typescript-eslint/eslint-plugin": "^4.0.0",
11932 - "@typescript-eslint/parser": "^4.0.0",
11933 - "babel-eslint": "^10.0.0",
11934 - "eslint": "^7.5.0",
11935 - "eslint-plugin-flowtype": "^5.2.0",
11936 - "eslint-plugin-import": "^2.22.0",
11937 - "eslint-plugin-jest": "^24.0.0",
11938 - "eslint-plugin-jsx-a11y": "^6.3.1",
11939 - "eslint-plugin-react": "^7.20.3",
11940 - "eslint-plugin-react-hooks": "^4.0.8",
11941 - "eslint-plugin-testing-library": "^3.9.0"
11942 - },
11943 - "peerDependenciesMeta": {
11944 - "eslint-plugin-jest": {
11945 - "optional": true
11946 - },
11947 - "eslint-plugin-testing-library": {
11948 - "optional": true
11949 - }
12148 + "eslint": ">=7.0.0"
12149 }
12150 },
12151 "node_modules/eslint-import-resolver-node": {
@@ -12020,19 +12219,98 @@
12219 "node": ">=4"
12220 }
12221 },
12023 - "node_modules/eslint-plugin-flowtype": {
12024 - "version": "5.10.0",
12025 - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz",
12026 - "integrity": "sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==",
12222 + "node_modules/eslint-plugin-escompat": {
12223 + "version": "3.3.4",
12224 + "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.3.4.tgz",
12225 + "integrity": "sha512-d/k6JwRzGRY6uZ426l6Ut6Eb2S/pi/079Ykj2GdWSzwm6WJHkdm28tECUWfLtpFA5ObApjPw6wR9bgY+uWAhag==",
12226 + "dev": true,
12227 "dependencies": {
12028 - "lodash": "^4.17.15",
12029 - "string-natural-compare": "^3.0.1"
12228 + "browserslist": "^4.21.0"
12229 + },
12230 + "peerDependencies": {
12231 + "eslint": ">=5.14.1"
12232 + }
12233 + },
12234 + "node_modules/eslint-plugin-eslint-comments": {
12235 + "version": "3.2.0",
12236 + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz",
12237 + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==",
12238 + "dev": true,
12239 + "dependencies": {
12240 + "escape-string-regexp": "^1.0.5",
12241 + "ignore": "^5.0.5"
12242 },
12243 "engines": {
12032 - "node": "^10.12.0 || >=12.0.0"
12244 + "node": ">=6.5.0"
12245 + },
12246 + "funding": {
12247 + "url": "https://github.com/sponsors/mysticatea"
12248 },
12249 "peerDependencies": {
12035 - "eslint": "^7.1.0"
12250 + "eslint": ">=4.19.1"
12251 + }
12252 + },
12253 + "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": {
12254 + "version": "1.0.5",
12255 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
12256 + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
12257 + "dev": true,
12258 + "engines": {
12259 + "node": ">=0.8.0"
12260 + }
12261 + },
12262 + "node_modules/eslint-plugin-filenames": {
12263 + "version": "1.3.2",
12264 + "resolved": "https://registry.npmjs.org/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz",
12265 + "integrity": "sha512-tqxJTiEM5a0JmRCUYQmxw23vtTxrb2+a3Q2mMOPhFxvt7ZQQJmdiuMby9B/vUAuVMghyP7oET+nIf6EO6CBd/w==",
12266 + "dev": true,
12267 + "dependencies": {
12268 + "lodash.camelcase": "4.3.0",
12269 + "lodash.kebabcase": "4.1.1",
12270 + "lodash.snakecase": "4.1.1",
12271 + "lodash.upperfirst": "4.3.1"
12272 + },
12273 + "peerDependencies": {
12274 + "eslint": "*"
12275 + }
12276 + },
12277 + "node_modules/eslint-plugin-github": {
12278 + "version": "4.6.0",
12279 + "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-4.6.0.tgz",
12280 + "integrity": "sha512-6VMH3wLUPEnV/0VuV3f0F74LF93N522Ht9KBYWDuPWKhr1NBzCqySIbQsxjPINIynoLtsErSc/YgICrocCc2zw==",
12281 + "dev": true,
12282 + "dependencies": {
12283 + "@github/browserslist-config": "^1.0.0",
12284 + "@typescript-eslint/eslint-plugin": "^5.1.0",
12285 + "@typescript-eslint/parser": "^5.1.0",
12286 + "eslint-config-prettier": ">=8.0.0",
12287 + "eslint-plugin-escompat": "^3.3.3",
12288 + "eslint-plugin-eslint-comments": "^3.2.0",
12289 + "eslint-plugin-filenames": "^1.3.2",
12290 + "eslint-plugin-i18n-text": "^1.0.1",
12291 + "eslint-plugin-import": "^2.25.2",
12292 + "eslint-plugin-jsx-a11y": "^6.6.0",
12293 + "eslint-plugin-no-only-tests": "^3.0.0",
12294 + "eslint-plugin-prettier": "^4.0.0",
12295 + "eslint-rule-documentation": ">=1.0.0",
12296 + "jsx-ast-utils": "^3.3.2",
12297 + "prettier": "^2.2.1",
12298 + "svg-element-attributes": "^1.3.1"
12299 + },
12300 + "bin": {
12301 + "eslint-ignore-errors": "bin/eslint-ignore-errors.js"
12302 + },
12303 + "peerDependencies": {
12304 + "eslint": "^8.0.1"
12305 + }
12306 + },
12307 + "node_modules/eslint-plugin-i18n-text": {
12308 + "version": "1.0.1",
12309 + "resolved": "https://registry.npmjs.org/eslint-plugin-i18n-text/-/eslint-plugin-i18n-text-1.0.1.tgz",
12310 + "integrity": "sha512-3G3UetST6rdqhqW9SfcfzNYMpQXS7wNkJvp6dsXnjzGiku6Iu5hl3B0kmk6lIcFPwYjhQIY+tXVRtK9TlGT7RA==",
12311 + "dev": true,
12312 + "peerDependencies": {
12313 + "eslint": ">=5.0.0"
12314 }
12315 },
12316 "node_modules/eslint-plugin-import": {
@@ -12171,6 +12449,15 @@
12449 "semver": "bin/semver.js"
12450 }
12451 },
12452 + "node_modules/eslint-plugin-no-only-tests": {
12453 + "version": "3.1.0",
12454 + "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.1.0.tgz",
12455 + "integrity": "sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==",
12456 + "dev": true,
12457 + "engines": {
12458 + "node": ">=5.0.0"
12459 + }
12460 + },
12461 "node_modules/eslint-plugin-node": {
12462 "version": "11.1.0",
12463 "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
@@ -12252,6 +12539,27 @@
12539 "semver": "bin/semver.js"
12540 }
12541 },
12542 + "node_modules/eslint-plugin-prettier": {
12543 + "version": "4.2.1",
12544 + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz",
12545 + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==",
12546 + "dev": true,
12547 + "dependencies": {
12548 + "prettier-linter-helpers": "^1.0.0"
12549 + },
12550 + "engines": {
12551 + "node": ">=12.0.0"
12552 + },
12553 + "peerDependencies": {
12554 + "eslint": ">=7.28.0",
12555 + "prettier": ">=2.0.0"
12556 + },
12557 + "peerDependenciesMeta": {
12558 + "eslint-config-prettier": {
12559 + "optional": true
12560 + }
12561 + }
12562 + },
12563 "node_modules/eslint-plugin-promise": {
12564 "version": "6.1.1",
12565 "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz",
@@ -12358,6 +12666,15 @@
12666 "semver": "bin/semver.js"
12667 }
12668 },
12669 + "node_modules/eslint-rule-documentation": {
12670 + "version": "1.0.23",
12671 + "resolved": "https://registry.npmjs.org/eslint-rule-documentation/-/eslint-rule-documentation-1.0.23.tgz",
12672 + "integrity": "sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw==",
12673 + "dev": true,
12674 + "engines": {
12675 + "node": ">=4.0.0"
12676 + }
12677 + },
12678 "node_modules/eslint-scope": {
12679 "version": "5.1.1",
12680 "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -12378,6 +12695,12 @@
12695 "node": ">=4.0"
12696 }
12697 },
12698 + "node_modules/eslint-traverse": {
12699 + "version": "1.0.0",
12700 + "resolved": "https://registry.npmjs.org/eslint-traverse/-/eslint-traverse-1.0.0.tgz",
12701 + "integrity": "sha512-bSp37rQs93LF8rZ409EI369DGCI4tELbFVmFNxI6QbuveS7VRxYVyUhwDafKN/enMyUh88HQQ7ZoGUHtPuGdcw==",
12702 + "dev": true
12703 + },
12704 "node_modules/eslint-utils": {
12705 "version": "3.0.0",
12706 "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
@@ -12454,57 +12777,6 @@
12777 "url": "https://github.com/chalk/supports-color?sponsor=1"
12778 }
12779 },
12457 - "node_modules/eslint/node_modules/@babel/code-frame": {
12458 - "version": "7.12.11",
12459 - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
12460 - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
12461 - "dependencies": {
12462 - "@babel/highlight": "^7.10.4"
12463 - }
12464 - },
12465 - "node_modules/eslint/node_modules/@eslint/eslintrc": {
12466 - "version": "0.4.3",
12467 - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
12468 - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
12469 - "dependencies": {
12470 - "ajv": "^6.12.4",
12471 - "debug": "^4.1.1",
12472 - "espree": "^7.3.0",
12473 - "globals": "^13.9.0",
12474 - "ignore": "^4.0.6",
12475 - "import-fresh": "^3.2.1",
12476 - "js-yaml": "^3.13.1",
12477 - "minimatch": "^3.0.4",
12478 - "strip-json-comments": "^3.1.1"
12479 - },
12480 - "engines": {
12481 - "node": "^10.12.0 || >=12.0.0"
12482 - }
12483 - },
12484 - "node_modules/eslint/node_modules/@humanwhocodes/config-array": {
12485 - "version": "0.5.0",
12486 - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
12487 - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
12488 - "dependencies": {
12489 - "@humanwhocodes/object-schema": "^1.2.0",
12490 - "debug": "^4.1.1",
12491 - "minimatch": "^3.0.4"
12492 - },
12493 - "engines": {
12494 - "node": ">=10.10.0"
12495 - }
12496 - },
12497 - "node_modules/eslint/node_modules/acorn": {
12498 - "version": "7.4.1",
12499 - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
12500 - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
12501 - "bin": {
12502 - "acorn": "bin/acorn"
12503 - },
12504 - "engines": {
12505 - "node": ">=0.4.0"
12506 - }
12507 - },
12780 "node_modules/eslint/node_modules/brace-expansion": {
12781 "version": "1.1.11",
12782 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -12530,53 +12802,41 @@
12802 }
12803 }
12804 },
12533 - "node_modules/eslint/node_modules/eslint-utils": {
12534 - "version": "2.1.0",
12535 - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
12536 - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
12805 + "node_modules/eslint/node_modules/eslint-scope": {
12806 + "version": "7.1.1",
12807 + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
12808 + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
12809 "dependencies": {
12538 - "eslint-visitor-keys": "^1.1.0"
12810 + "esrecurse": "^4.3.0",
12811 + "estraverse": "^5.2.0"
12812 },
12813 "engines": {
12541 - "node": ">=6"
12542 - },
12543 - "funding": {
12544 - "url": "https://github.com/sponsors/mysticatea"
12814 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
12815 }
12816 },
12547 - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
12548 - "version": "1.3.0",
12549 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
12550 - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
12817 + "node_modules/eslint/node_modules/eslint-visitor-keys": {
12818 + "version": "3.3.0",
12819 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
12820 + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
12821 "engines": {
12552 - "node": ">=4"
12822 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
12823 }
12824 },
12555 - "node_modules/eslint/node_modules/espree": {
12556 - "version": "7.3.1",
12557 - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
12558 - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
12825 + "node_modules/eslint/node_modules/glob-parent": {
12826 + "version": "6.0.2",
12827 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
12828 + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
12829 "dependencies": {
12560 - "acorn": "^7.4.0",
12561 - "acorn-jsx": "^5.3.1",
12562 - "eslint-visitor-keys": "^1.3.0"
12830 + "is-glob": "^4.0.3"
12831 },
12832 "engines": {
12565 - "node": "^10.12.0 || >=12.0.0"
12566 - }
12567 - },
12568 - "node_modules/eslint/node_modules/espree/node_modules/eslint-visitor-keys": {
12569 - "version": "1.3.0",
12570 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
12571 - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
12572 - "engines": {
12573 - "node": ">=4"
12833 + "node": ">=10.13.0"
12834 }
12835 },
12836 "node_modules/eslint/node_modules/globals": {
12577 - "version": "13.17.0",
12578 - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
12579 - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
12837 + "version": "13.19.0",
12838 + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
12839 + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
12840 "dependencies": {
12841 "type-fest": "^0.20.2"
12842 },
@@ -12587,12 +12847,15 @@
12847 "url": "https://github.com/sponsors/sindresorhus"
12848 }
12849 },
12590 - "node_modules/eslint/node_modules/ignore": {
12591 - "version": "4.0.6",
12592 - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
12593 - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
12594 - "engines": {
12595 - "node": ">= 4"
12850 + "node_modules/eslint/node_modules/js-yaml": {
12851 + "version": "4.1.0",
12852 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
12853 + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
12854 + "dependencies": {
12855 + "argparse": "^2.0.1"
12856 + },
12857 + "bin": {
12858 + "js-yaml": "bin/js-yaml.js"
12859 }
12860 },
12861 "node_modules/eslint/node_modules/minimatch": {
@@ -12610,8 +12873,6 @@
12873 "version": "9.4.1",
12874 "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
12875 "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
12613 - "dev": true,
12614 - "peer": true,
12876 "dependencies": {
12877 "acorn": "^8.8.0",
12878 "acorn-jsx": "^5.3.2",
@@ -12628,8 +12889,6 @@
12889 "version": "3.3.0",
12890 "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
12891 "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
12631 - "dev": true,
12632 - "peer": true,
12892 "engines": {
12893 "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
12894 }
@@ -12990,6 +13249,12 @@
13249 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
13250 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
13251 },
13252 + "node_modules/fast-diff": {
13253 + "version": "1.2.0",
13254 + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
13255 + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
13256 + "dev": true
13257 + },
13258 "node_modules/fast-glob": {
13259 "version": "3.2.12",
13260 "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
@@ -14690,6 +14955,390 @@
14955 "node": ">=14.15.0"
14956 }
14957 },
14958 + "node_modules/gatsby/node_modules/@eslint/eslintrc": {
14959 + "version": "0.4.3",
14960 + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
14961 + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
14962 + "dependencies": {
14963 + "ajv": "^6.12.4",
14964 + "debug": "^4.1.1",
14965 + "espree": "^7.3.0",
14966 + "globals": "^13.9.0",
14967 + "ignore": "^4.0.6",
14968 + "import-fresh": "^3.2.1",
14969 + "js-yaml": "^3.13.1",
14970 + "minimatch": "^3.0.4",
14971 + "strip-json-comments": "^3.1.1"
14972 + },
14973 + "engines": {
14974 + "node": "^10.12.0 || >=12.0.0"
14975 + }
14976 + },
14977 + "node_modules/gatsby/node_modules/@eslint/eslintrc/node_modules/debug": {
14978 + "version": "4.3.4",
14979 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
14980 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
14981 + "dependencies": {
14982 + "ms": "2.1.2"
14983 + },
14984 + "engines": {
14985 + "node": ">=6.0"
14986 + },
14987 + "peerDependenciesMeta": {
14988 + "supports-color": {
14989 + "optional": true
14990 + }
14991 + }
14992 + },
14993 + "node_modules/gatsby/node_modules/@eslint/eslintrc/node_modules/ignore": {
14994 + "version": "4.0.6",
14995 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
14996 + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
14997 + "engines": {
14998 + "node": ">= 4"
14999 + }
15000 + },
15001 + "node_modules/gatsby/node_modules/@humanwhocodes/config-array": {
15002 + "version": "0.5.0",
15003 + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
15004 + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
15005 + "dependencies": {
15006 + "@humanwhocodes/object-schema": "^1.2.0",
15007 + "debug": "^4.1.1",
15008 + "minimatch": "^3.0.4"
15009 + },
15010 + "engines": {
15011 + "node": ">=10.10.0"
15012 + }
15013 + },
15014 + "node_modules/gatsby/node_modules/@humanwhocodes/config-array/node_modules/debug": {
15015 + "version": "4.3.4",
15016 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
15017 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
15018 + "dependencies": {
15019 + "ms": "2.1.2"
15020 + },
15021 + "engines": {
15022 + "node": ">=6.0"
15023 + },
15024 + "peerDependenciesMeta": {
15025 + "supports-color": {
15026 + "optional": true
15027 + }
15028 + }
15029 + },
15030 + "node_modules/gatsby/node_modules/@typescript-eslint/eslint-plugin": {
15031 + "version": "4.33.0",
15032 + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz",
15033 + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==",
15034 + "dependencies": {
15035 + "@typescript-eslint/experimental-utils": "4.33.0",
15036 + "@typescript-eslint/scope-manager": "4.33.0",
15037 + "debug": "^4.3.1",
15038 + "functional-red-black-tree": "^1.0.1",
15039 + "ignore": "^5.1.8",
15040 + "regexpp": "^3.1.0",
15041 + "semver": "^7.3.5",
15042 + "tsutils": "^3.21.0"
15043 + },
15044 + "engines": {
15045 + "node": "^10.12.0 || >=12.0.0"
15046 + },
15047 + "funding": {
15048 + "type": "opencollective",
15049 + "url": "https://opencollective.com/typescript-eslint"
15050 + },
15051 + "peerDependencies": {
15052 + "@typescript-eslint/parser": "^4.0.0",
15053 + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
15054 + },
15055 + "peerDependenciesMeta": {
15056 + "typescript": {
15057 + "optional": true
15058 + }
15059 + }
15060 + },
15061 + "node_modules/gatsby/node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": {
15062 + "version": "4.3.4",
15063 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
15064 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
15065 + "dependencies": {
15066 + "ms": "2.1.2"
15067 + },
15068 + "engines": {
15069 + "node": ">=6.0"
15070 + },
15071 + "peerDependenciesMeta": {
15072 + "supports-color": {
15073 + "optional": true
15074 + }
15075 + }
15076 + },
15077 + "node_modules/gatsby/node_modules/@typescript-eslint/parser": {
15078 + "version": "4.33.0",
15079 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz",
15080 + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==",
15081 + "dependencies": {
15082 + "@typescript-eslint/scope-manager": "4.33.0",
15083 + "@typescript-eslint/types": "4.33.0",
15084 + "@typescript-eslint/typescript-estree": "4.33.0",
15085 + "debug": "^4.3.1"
15086 + },
15087 + "engines": {
15088 + "node": "^10.12.0 || >=12.0.0"
15089 + },
15090 + "funding": {
15091 + "type": "opencollective",
15092 + "url": "https://opencollective.com/typescript-eslint"
15093 + },
15094 + "peerDependencies": {
15095 + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
15096 + },
15097 + "peerDependenciesMeta": {
15098 + "typescript": {
15099 + "optional": true
15100 + }
15101 + }
15102 + },
15103 + "node_modules/gatsby/node_modules/@typescript-eslint/parser/node_modules/debug": {
15104 + "version": "4.3.4",
15105 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
15106 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
15107 + "dependencies": {
15108 + "ms": "2.1.2"
15109 + },
15110 + "engines": {
15111 + "node": ">=6.0"
15112 + },
15113 + "peerDependenciesMeta": {
15114 + "supports-color": {
15115 + "optional": true
15116 + }
15117 + }
15118 + },
15119 + "node_modules/gatsby/node_modules/acorn": {
15120 + "version": "7.4.1",
15121 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
15122 + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
15123 + "bin": {
15124 + "acorn": "bin/acorn"
15125 + },
15126 + "engines": {
15127 + "node": ">=0.4.0"
15128 + }
15129 + },
15130 + "node_modules/gatsby/node_modules/brace-expansion": {
15131 + "version": "1.1.11",
15132 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
15133 + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
15134 + "dependencies": {
15135 + "balanced-match": "^1.0.0",
15136 + "concat-map": "0.0.1"
15137 + }
15138 + },
15139 + "node_modules/gatsby/node_modules/eslint": {
15140 + "version": "7.32.0",
15141 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
15142 + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
15143 + "dependencies": {
15144 + "@babel/code-frame": "7.12.11",
15145 + "@eslint/eslintrc": "^0.4.3",
15146 + "@humanwhocodes/config-array": "^0.5.0",
15147 + "ajv": "^6.10.0",
15148 + "chalk": "^4.0.0",
15149 + "cross-spawn": "^7.0.2",
15150 + "debug": "^4.0.1",
15151 + "doctrine": "^3.0.0",
15152 + "enquirer": "^2.3.5",
15153 + "escape-string-regexp": "^4.0.0",
15154 + "eslint-scope": "^5.1.1",
15155 + "eslint-utils": "^2.1.0",
15156 + "eslint-visitor-keys": "^2.0.0",
15157 + "espree": "^7.3.1",
15158 + "esquery": "^1.4.0",
15159 + "esutils": "^2.0.2",
15160 + "fast-deep-equal": "^3.1.3",
15161 + "file-entry-cache": "^6.0.1",
15162 + "functional-red-black-tree": "^1.0.1",
15163 + "glob-parent": "^5.1.2",
15164 + "globals": "^13.6.0",
15165 + "ignore": "^4.0.6",
15166 + "import-fresh": "^3.0.0",
15167 + "imurmurhash": "^0.1.4",
15168 + "is-glob": "^4.0.0",
15169 + "js-yaml": "^3.13.1",
15170 + "json-stable-stringify-without-jsonify": "^1.0.1",
15171 + "levn": "^0.4.1",
15172 + "lodash.merge": "^4.6.2",
15173 + "minimatch": "^3.0.4",
15174 + "natural-compare": "^1.4.0",
15175 + "optionator": "^0.9.1",
15176 + "progress": "^2.0.0",
15177 + "regexpp": "^3.1.0",
15178 + "semver": "^7.2.1",
15179 + "strip-ansi": "^6.0.0",
15180 + "strip-json-comments": "^3.1.0",
15181 + "table": "^6.0.9",
15182 + "text-table": "^0.2.0",
15183 + "v8-compile-cache": "^2.0.3"
15184 + },
15185 + "bin": {
15186 + "eslint": "bin/eslint.js"
15187 + },
15188 + "engines": {
15189 + "node": "^10.12.0 || >=12.0.0"
15190 + },
15191 + "funding": {
15192 + "url": "https://opencollective.com/eslint"
15193 + }
15194 + },
15195 + "node_modules/gatsby/node_modules/eslint-config-react-app": {
15196 + "version": "6.0.0",
15197 + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz",
15198 + "integrity": "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==",
15199 + "dependencies": {
15200 + "confusing-browser-globals": "^1.0.10"
15201 + },
15202 + "engines": {
15203 + "node": "^10.12.0 || >=12.0.0"
15204 + },
15205 + "peerDependencies": {
15206 + "@typescript-eslint/eslint-plugin": "^4.0.0",
15207 + "@typescript-eslint/parser": "^4.0.0",
15208 + "babel-eslint": "^10.0.0",
15209 + "eslint": "^7.5.0",
15210 + "eslint-plugin-flowtype": "^5.2.0",
15211 + "eslint-plugin-import": "^2.22.0",
15212 + "eslint-plugin-jest": "^24.0.0",
15213 + "eslint-plugin-jsx-a11y": "^6.3.1",
15214 + "eslint-plugin-react": "^7.20.3",
15215 + "eslint-plugin-react-hooks": "^4.0.8",
15216 + "eslint-plugin-testing-library": "^3.9.0"
15217 + },
15218 + "peerDependenciesMeta": {
15219 + "eslint-plugin-jest": {
15220 + "optional": true
15221 + },
15222 + "eslint-plugin-testing-library": {
15223 + "optional": true
15224 + }
15225 + }
15226 + },
15227 + "node_modules/gatsby/node_modules/eslint-plugin-flowtype": {
15228 + "version": "5.10.0",
15229 + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz",
15230 + "integrity": "sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==",
15231 + "dependencies": {
15232 + "lodash": "^4.17.15",
15233 + "string-natural-compare": "^3.0.1"
15234 + },
15235 + "engines": {
15236 + "node": "^10.12.0 || >=12.0.0"
15237 + },
15238 + "peerDependencies": {
15239 + "eslint": "^7.1.0"
15240 + }
15241 + },
15242 + "node_modules/gatsby/node_modules/eslint-utils": {
15243 + "version": "2.1.0",
15244 + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
15245 + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
15246 + "dependencies": {
15247 + "eslint-visitor-keys": "^1.1.0"
15248 + },
15249 + "engines": {
15250 + "node": ">=6"
15251 + },
15252 + "funding": {
15253 + "url": "https://github.com/sponsors/mysticatea"
15254 + }
15255 + },
15256 + "node_modules/gatsby/node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
15257 + "version": "1.3.0",
15258 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
15259 + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
15260 + "engines": {
15261 + "node": ">=4"
15262 + }
15263 + },
15264 + "node_modules/gatsby/node_modules/eslint/node_modules/@babel/code-frame": {
15265 + "version": "7.12.11",
15266 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
15267 + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
15268 + "dependencies": {
15269 + "@babel/highlight": "^7.10.4"
15270 + }
15271 + },
15272 + "node_modules/gatsby/node_modules/eslint/node_modules/debug": {
15273 + "version": "4.3.4",
15274 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
15275 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
15276 + "dependencies": {
15277 + "ms": "2.1.2"
15278 + },
15279 + "engines": {
15280 + "node": ">=6.0"
15281 + },
15282 + "peerDependenciesMeta": {
15283 + "supports-color": {
15284 + "optional": true
15285 + }
15286 + }
15287 + },
15288 + "node_modules/gatsby/node_modules/eslint/node_modules/ignore": {
15289 + "version": "4.0.6",
15290 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
15291 + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
15292 + "engines": {
15293 + "node": ">= 4"
15294 + }
15295 + },
15296 + "node_modules/gatsby/node_modules/espree": {
15297 + "version": "7.3.1",
15298 + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
15299 + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
15300 + "dependencies": {
15301 + "acorn": "^7.4.0",
15302 + "acorn-jsx": "^5.3.1",
15303 + "eslint-visitor-keys": "^1.3.0"
15304 + },
15305 + "engines": {
15306 + "node": "^10.12.0 || >=12.0.0"
15307 + }
15308 + },
15309 + "node_modules/gatsby/node_modules/espree/node_modules/eslint-visitor-keys": {
15310 + "version": "1.3.0",
15311 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
15312 + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
15313 + "engines": {
15314 + "node": ">=4"
15315 + }
15316 + },
15317 + "node_modules/gatsby/node_modules/globals": {
15318 + "version": "13.19.0",
15319 + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
15320 + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
15321 + "dependencies": {
15322 + "type-fest": "^0.20.2"
15323 + },
15324 + "engines": {
15325 + "node": ">=8"
15326 + },
15327 + "funding": {
15328 + "url": "https://github.com/sponsors/sindresorhus"
15329 + }
15330 + },
15331 + "node_modules/gatsby/node_modules/minimatch": {
15332 + "version": "3.1.2",
15333 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
15334 + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
15335 + "dependencies": {
15336 + "brace-expansion": "^1.1.7"
15337 + },
15338 + "engines": {
15339 + "node": "*"
15340 + }
15341 + },
15342 "node_modules/gauge": {
15343 "version": "5.0.0",
15344 "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.0.tgz",
@@ -15094,9 +15743,7 @@
15743 "node_modules/grapheme-splitter": {
15744 "version": "1.0.4",
15745 "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
15097 - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
15098 - "dev": true,
15099 - "peer": true
15746 + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ=="
15747 },
15748 "node_modules/graphql": {
15749 "version": "15.8.0",
@@ -17733,11 +18380,13 @@
18380 }
18381 },
18382 "node_modules/js-sdsl": {
17736 - "version": "4.1.5",
17737 - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz",
17738 - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==",
17739 - "dev": true,
17740 - "peer": true
18383 + "version": "4.2.0",
18384 + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz",
18385 + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==",
18386 + "funding": {
18387 + "type": "opencollective",
18388 + "url": "https://opencollective.com/js-sdsl"
18389 + }
18390 },
18391 "node_modules/js-tokens": {
18392 "version": "4.0.0",
@@ -18237,6 +18886,12 @@
18886 "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
18887 "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA=="
18888 },
18889 + "node_modules/lodash.camelcase": {
18890 + "version": "4.3.0",
18891 + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
18892 + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
18893 + "dev": true
18894 + },
18895 "node_modules/lodash.clonedeep": {
18896 "version": "4.5.0",
18897 "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
@@ -18288,6 +18943,12 @@
18943 "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==",
18944 "dev": true
18945 },
18946 + "node_modules/lodash.kebabcase": {
18947 + "version": "4.1.1",
18948 + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
18949 + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==",
18950 + "dev": true
18951 + },
18952 "node_modules/lodash.map": {
18953 "version": "4.6.0",
18954 "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
@@ -18323,6 +18984,12 @@
18984 "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
18985 "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ=="
18986 },
18987 + "node_modules/lodash.snakecase": {
18988 + "version": "4.1.1",
18989 + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
18990 + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
18991 + "dev": true
18992 + },
18993 "node_modules/lodash.some": {
18994 "version": "4.6.0",
18995 "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
@@ -18343,6 +19010,12 @@
19010 "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz",
19011 "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww=="
19012 },
19013 + "node_modules/lodash.upperfirst": {
19014 + "version": "4.3.1",
19015 + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz",
19016 + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==",
19017 + "dev": true
19018 + },
19019 "node_modules/longest-streak": {
19020 "version": "2.0.4",
19021 "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
@@ -19423,6 +20096,12 @@
20096 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
20097 "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
20098 },
20099 + "node_modules/natural-compare-lite": {
20100 + "version": "1.4.0",
20101 + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
20102 + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
20103 + "dev": true
20104 + },
20105 "node_modules/negotiator": {
20106 "version": "0.6.3",
20107 "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
@@ -21792,6 +22471,33 @@
22471 "node": ">=4"
22472 }
22473 },
22474 + "node_modules/prettier": {
22475 + "version": "2.8.1",
22476 + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz",
22477 + "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==",
22478 + "dev": true,
22479 + "bin": {
22480 + "prettier": "bin-prettier.js"
22481 + },
22482 + "engines": {
22483 + "node": ">=10.13.0"
22484 + },
22485 + "funding": {
22486 + "url": "https://github.com/prettier/prettier?sponsor=1"
22487 + }
22488 + },
22489 + "node_modules/prettier-linter-helpers": {
22490 + "version": "1.0.0",
22491 + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
22492 + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
22493 + "dev": true,
22494 + "dependencies": {
22495 + "fast-diff": "^1.1.2"
22496 + },
22497 + "engines": {
22498 + "node": ">=6.0.0"
22499 + }
22500 + },
22501 "node_modules/pretty-bytes": {
22502 "version": "5.6.0",
22503 "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
@@ -25268,6 +25974,16 @@
25974 "url": "https://github.com/sponsors/ljharb"
25975 }
25976 },
25977 + "node_modules/svg-element-attributes": {
25978 + "version": "1.3.1",
25979 + "resolved": "https://registry.npmjs.org/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz",
25980 + "integrity": "sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA==",
25981 + "dev": true,
25982 + "funding": {
25983 + "type": "github",
25984 + "url": "https://github.com/sponsors/wooorm"
25985 + }
25986 + },
25987 "node_modules/svgo": {
25988 "version": "2.8.0",
25989 "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz",
@@ -29704,7 +30420,7 @@
30420 }
30421 },
30422 "theme": {
29707 - "version": "1.9.0",
30423 + "version": "1.0.0",
30424 "license": "MIT",
30425 "dependencies": {
30426 "@github/combobox-nav": "^2.1.5",
@@ -29753,17 +30469,59 @@
30469 "styled-system": "^5.0.18"
30470 },
30471 "devDependencies": {
30472 + "@npmcli/template-oss": "4.11.0",
30473 "@testing-library/jest-dom": "^5.16.5",
30474 "babel-jest": "^29.1.2",
30475 + "eslint": "^8.21.0",
30476 + "eslint-plugin-jsx-a11y": "^6.6.1",
30477 + "eslint-plugin-primer-react": "1.0.0",
30478 + "eslint-plugin-react": "^7.30.1",
30479 "jest": "^29.1.2",
30480 "jest-environment-jsdom": "^29.1.2"
30481 },
30482 + "engines": {
30483 + "node": ">=18.0.0"
30484 + },
30485 "peerDependencies": {
30486 "gatsby": "^4.19.0",
30487 "react": "^17.0.2",
30488 "react-dom": "^17.0.2"
30489 }
30490 },
30491 + "theme/node_modules/@primer/primitives": {
30492 + "version": "7.10.0",
30493 + "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.10.0.tgz",
30494 + "integrity": "sha512-DdLHq21e93R9qDHyRuRpytBLY0Up9IwNWMOUgPNW6lRSng4N4+IdUlLS3Ekbasmxfs8Z8vKS8aezeYovQ5qsxQ==",
30495 + "dev": true,
30496 + "peer": true
30497 + },
30498 + "theme/node_modules/@styled-system/props": {
30499 + "version": "5.1.5",
30500 + "resolved": "https://registry.npmjs.org/@styled-system/props/-/props-5.1.5.tgz",
30501 + "integrity": "sha512-FXhbzq2KueZpGaHxaDm8dowIEWqIMcgsKs6tBl6Y6S0njG9vC8dBMI6WSLDnzMoSqIX3nSKHmOmpzpoihdDewg==",
30502 + "dev": true,
30503 + "dependencies": {
30504 + "styled-system": "^5.1.5"
30505 + }
30506 + },
30507 + "theme/node_modules/eslint-plugin-primer-react": {
30508 + "version": "1.0.0",
30509 + "resolved": "https://registry.npmjs.org/eslint-plugin-primer-react/-/eslint-plugin-primer-react-1.0.0.tgz",
30510 + "integrity": "sha512-p4O51YjKi8PWURaGm757ak5sqDeHmfPUdo7nlOOo7gXdTCpWspgGC51lqDVbJacjBq4iNMtCGvh/Ubm6BSPqyA==",
30511 + "dev": true,
30512 + "dependencies": {
30513 + "@styled-system/props": "^5.1.5",
30514 + "eslint-plugin-github": "^4.3.7",
30515 + "eslint-plugin-jsx-a11y": "^6.6.1",
30516 + "eslint-traverse": "^1.0.0",
30517 + "lodash": "^4.17.21",
30518 + "styled-system": "^5.1.5"
30519 + },
30520 + "peerDependencies": {
30521 + "@primer/primitives": ">=4.6.2",
30522 + "eslint": "^8.0.1"
30523 + }
30524 + },
30525 "theme/node_modules/find-up": {
30526 "version": "4.1.0",
30527 "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
@@ -31506,8 +32264,6 @@
32264 "version": "1.3.3",
32265 "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz",
32266 "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==",
31509 - "dev": true,
31510 - "peer": true,
32267 "requires": {
32268 "ajv": "^6.12.4",
32269 "debug": "^4.3.2",
@@ -31524,8 +32280,6 @@
32280 "version": "1.1.11",
32281 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
32282 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
31527 - "dev": true,
31528 - "peer": true,
32283 "requires": {
32284 "balanced-match": "^1.0.0",
32285 "concat-map": "0.0.1"
@@ -31535,18 +32289,14 @@
32289 "version": "4.3.4",
32290 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
32291 "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
31538 - "dev": true,
31539 - "peer": true,
32292 "requires": {
32293 "ms": "2.1.2"
32294 }
32295 },
32296 "globals": {
31545 - "version": "13.17.0",
31546 - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
31547 - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
31548 - "dev": true,
31549 - "peer": true,
32297 + "version": "13.19.0",
32298 + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
32299 + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
32300 "requires": {
32301 "type-fest": "^0.20.2"
32302 }
@@ -31555,8 +32305,6 @@
32305 "version": "4.1.0",
32306 "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
32307 "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
31558 - "dev": true,
31559 - "peer": true,
32308 "requires": {
32309 "argparse": "^2.0.1"
32310 }
@@ -31565,8 +32313,6 @@
32313 "version": "3.1.2",
32314 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
32315 "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
31568 - "dev": true,
31569 - "peer": true,
32316 "requires": {
32317 "brace-expansion": "^1.1.7"
32318 }
@@ -31617,6 +32363,12 @@
32363 "strip-ansi": "^6.0.0"
32364 }
32365 },
32366 + "@github/browserslist-config": {
32367 + "version": "1.0.0",
32368 + "resolved": "https://registry.npmjs.org/@github/browserslist-config/-/browserslist-config-1.0.0.tgz",
32369 + "integrity": "sha512-gIhjdJp/c2beaIWWIlsXdqXVRUz3r2BxBCpfz/F3JXHvSAQ1paMYjLH+maEATtENg+k5eLV7gA+9yPp762ieuw==",
32370 + "dev": true
32371 + },
32372 "@github/combobox-nav": {
32373 "version": "2.1.5",
32374 "resolved": "https://registry.npmjs.org/@github/combobox-nav/-/combobox-nav-2.1.5.tgz",
@@ -31929,11 +32681,9 @@
32681 }
32682 },
32683 "@humanwhocodes/config-array": {
31932 - "version": "0.11.7",
31933 - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz",
31934 - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==",
31935 - "dev": true,
31936 - "peer": true,
32684 + "version": "0.11.8",
32685 + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
32686 + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
32687 "requires": {
32688 "@humanwhocodes/object-schema": "^1.2.1",
32689 "debug": "^4.1.1",
@@ -31944,8 +32694,6 @@
32694 "version": "1.1.11",
32695 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
32696 "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
31947 - "dev": true,
31948 - "peer": true,
32697 "requires": {
32698 "balanced-match": "^1.0.0",
32699 "concat-map": "0.0.1"
@@ -31955,8 +32703,6 @@
32703 "version": "4.3.4",
32704 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
32705 "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
31958 - "dev": true,
31959 - "peer": true,
32706 "requires": {
32707 "ms": "2.1.2"
32708 }
@@ -31965,8 +32711,6 @@
32711 "version": "3.1.2",
32712 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
32713 "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
31968 - "dev": true,
31969 - "peer": true,
32714 "requires": {
32715 "brace-expansion": "^1.1.7"
32716 }
@@ -31976,9 +32720,7 @@
32720 "@humanwhocodes/module-importer": {
32721 "version": "1.0.1",
32722 "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
31979 - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
31980 - "dev": true,
31981 - "peer": true
32723 + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="
32724 },
32725 "@humanwhocodes/object-schema": {
32726 "version": "1.2.1",
@@ -33177,6 +33919,15 @@
33919 "walk-up-path": "^1.0.0"
33920 }
33921 },
33922 + "@npmcli/eslint-config": {
33923 + "version": "4.0.1",
33924 + "resolved": "https://registry.npmjs.org/@npmcli/eslint-config/-/eslint-config-4.0.1.tgz",
33925 + "integrity": "sha512-bHsOOLO2UiMb8G4Q968VJjlO4QWXf3SivgN/rQKsbzcS37S7aFWwPph3PwBaTF6O0OlUvjLiM1mzXlz/1jGV9Q==",
33926 + "dev": true,
33927 + "requires": {
33928 + "which": "^3.0.0"
33929 + }
33930 + },
33931 "@npmcli/fs": {
33932 "version": "3.1.0",
33933 "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz",
@@ -33324,6 +34075,58 @@
34075 "which": "^3.0.0"
34076 }
34077 },
34078 + "@npmcli/template-oss": {
34079 + "version": "4.11.0",
34080 + "resolved": "https://registry.npmjs.org/@npmcli/template-oss/-/template-oss-4.11.0.tgz",
34081 + "integrity": "sha512-nvZqRxT9AFf56Fj07v1yG9AQVOTNn82ysMVI67IzpktunKFHmZ5Tp8P/al5pPik/nYQ4AieEyh7XC2dMro4moA==",
34082 + "dev": true,
34083 + "requires": {
34084 + "@actions/core": "^1.9.1",
34085 + "@commitlint/cli": "^17.1.1",
34086 + "@commitlint/config-conventional": "^17.1.0",
34087 + "@isaacs/string-locale-compare": "^1.1.0",
34088 + "@npmcli/arborist": "^6.0.0",
34089 + "@npmcli/git": "^4.0.0",
34090 + "@npmcli/map-workspaces": "^3.0.0",
34091 + "@npmcli/package-json": "^3.0.0",
34092 + "@octokit/rest": "^19.0.4",
34093 + "diff": "^5.0.0",
34094 + "glob": "^8.0.1",
34095 + "handlebars": "^4.7.7",
34096 + "hosted-git-info": "^6.0.0",
34097 + "ini": "^3.0.1",
34098 + "json-parse-even-better-errors": "^3.0.0",
34099 + "just-deep-map-values": "^1.1.1",
34100 + "just-diff": "^5.0.1",
34101 + "lodash": "^4.17.21",
34102 + "npm-package-arg": "^10.0.0",
34103 + "proc-log": "^3.0.0",
34104 + "release-please": "npm:@npmcli/release-please@^14.2.6",
34105 + "semver": "^7.3.5",
34106 + "yaml": "^2.1.1"
34107 + },
34108 + "dependencies": {
34109 + "glob": {
34110 + "version": "8.0.3",
34111 + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz",
34112 + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==",
34113 + "dev": true,
34114 + "requires": {
34115 + "fs.realpath": "^1.0.0",
34116 + "inflight": "^1.0.4",
34117 + "inherits": "2",
34118 + "minimatch": "^5.0.1",
34119 + "once": "^1.3.0"
34120 + }
34121 + },
34122 + "yaml": {
34123 + "version": "2.1.3",
34124 + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz",
34125 + "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==",
34126 + "dev": true
34127 + }
34128 + }
34129 + },
34130 "@octokit/auth-token": {
34131 "version": "3.0.2",
34132 "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz",
@@ -34769,6 +35572,12 @@
35572 "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
35573 "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
35574 },
35575 + "@types/semver": {
35576 + "version": "7.3.13",
35577 + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz",
35578 + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==",
35579 + "dev": true
35580 + },
35581 "@types/sharp": {
35582 "version": "0.30.5",
35583 "resolved": "https://registry.npmjs.org/@types/sharp/-/sharp-0.30.5.tgz",
@@ -34966,27 +35775,62 @@
35775 "integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw=="
35776 },
35777 "@typescript-eslint/eslint-plugin": {
34969 - "version": "4.33.0",
34970 - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz",
34971 - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==",
35778 + "version": "5.46.1",
35779 + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.46.1.tgz",
35780 + "integrity": "sha512-YpzNv3aayRBwjs4J3oz65eVLXc9xx0PDbIRisHj+dYhvBn02MjYOD96P8YGiWEIFBrojaUjxvkaUpakD82phsA==",
35781 + "dev": true,
35782 "requires": {
34973 - "@typescript-eslint/experimental-utils": "4.33.0",
34974 - "@typescript-eslint/scope-manager": "4.33.0",
34975 - "debug": "^4.3.1",
34976 - "functional-red-black-tree": "^1.0.1",
34977 - "ignore": "^5.1.8",
34978 - "regexpp": "^3.1.0",
34979 - "semver": "^7.3.5",
35783 + "@typescript-eslint/scope-manager": "5.46.1",
35784 + "@typescript-eslint/type-utils": "5.46.1",
35785 + "@typescript-eslint/utils": "5.46.1",
35786 + "debug": "^4.3.4",
35787 + "ignore": "^5.2.0",
35788 + "natural-compare-lite": "^1.4.0",
35789 + "regexpp": "^3.2.0",
35790 + "semver": "^7.3.7",
35791 "tsutils": "^3.21.0"
35792 },
35793 "dependencies": {
35794 + "@typescript-eslint/scope-manager": {
35795 + "version": "5.46.1",
35796 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz",
35797 + "integrity": "sha512-iOChVivo4jpwUdrJZyXSMrEIM/PvsbbDOX1y3UCKjSgWn+W89skxWaYXACQfxmIGhPVpRWK/VWPYc+bad6smIA==",
35798 + "dev": true,
35799 + "requires": {
35800 + "@typescript-eslint/types": "5.46.1",
35801 + "@typescript-eslint/visitor-keys": "5.46.1"
35802 + }
35803 + },
35804 + "@typescript-eslint/types": {
35805 + "version": "5.46.1",
35806 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz",
35807 + "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==",
35808 + "dev": true
35809 + },
35810 + "@typescript-eslint/visitor-keys": {
35811 + "version": "5.46.1",
35812 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz",
35813 + "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==",
35814 + "dev": true,
35815 + "requires": {
35816 + "@typescript-eslint/types": "5.46.1",
35817 + "eslint-visitor-keys": "^3.3.0"
35818 + }
35819 + },
35820 "debug": {
35821 "version": "4.3.4",
35822 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
35823 "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
35824 + "dev": true,
35825 "requires": {
35826 "ms": "2.1.2"
35827 }
35828 + },
35829 + "eslint-visitor-keys": {
35830 + "version": "3.3.0",
35831 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
35832 + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
35833 + "dev": true
35834 }
35835 }
35836 },
@@ -35004,23 +35848,72 @@
35848 }
35849 },
35850 "@typescript-eslint/parser": {
35007 - "version": "4.33.0",
35008 - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz",
35009 - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==",
35851 + "version": "5.46.1",
35852 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.46.1.tgz",
35853 + "integrity": "sha512-RelQ5cGypPh4ySAtfIMBzBGyrNerQcmfA1oJvPj5f+H4jI59rl9xxpn4bonC0tQvUKOEN7eGBFWxFLK3Xepneg==",
35854 + "dev": true,
35855 "requires": {
35011 - "@typescript-eslint/scope-manager": "4.33.0",
35012 - "@typescript-eslint/types": "4.33.0",
35013 - "@typescript-eslint/typescript-estree": "4.33.0",
35014 - "debug": "^4.3.1"
35856 + "@typescript-eslint/scope-manager": "5.46.1",
35857 + "@typescript-eslint/types": "5.46.1",
35858 + "@typescript-eslint/typescript-estree": "5.46.1",
35859 + "debug": "^4.3.4"
35860 },
35861 "dependencies": {
35862 + "@typescript-eslint/scope-manager": {
35863 + "version": "5.46.1",
35864 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz",
35865 + "integrity": "sha512-iOChVivo4jpwUdrJZyXSMrEIM/PvsbbDOX1y3UCKjSgWn+W89skxWaYXACQfxmIGhPVpRWK/VWPYc+bad6smIA==",
35866 + "dev": true,
35867 + "requires": {
35868 + "@typescript-eslint/types": "5.46.1",
35869 + "@typescript-eslint/visitor-keys": "5.46.1"
35870 + }
35871 + },
35872 + "@typescript-eslint/types": {
35873 + "version": "5.46.1",
35874 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz",
35875 + "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==",
35876 + "dev": true
35877 + },
35878 + "@typescript-eslint/typescript-estree": {
35879 + "version": "5.46.1",
35880 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz",
35881 + "integrity": "sha512-j9W4t67QiNp90kh5Nbr1w92wzt+toiIsaVPnEblB2Ih2U9fqBTyqV9T3pYWZBRt6QoMh/zVWP59EpuCjc4VRBg==",
35882 + "dev": true,
35883 + "requires": {
35884 + "@typescript-eslint/types": "5.46.1",
35885 + "@typescript-eslint/visitor-keys": "5.46.1",
35886 + "debug": "^4.3.4",
35887 + "globby": "^11.1.0",
35888 + "is-glob": "^4.0.3",
35889 + "semver": "^7.3.7",
35890 + "tsutils": "^3.21.0"
35891 + }
35892 + },
35893 + "@typescript-eslint/visitor-keys": {
35894 + "version": "5.46.1",
35895 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz",
35896 + "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==",
35897 + "dev": true,
35898 + "requires": {
35899 + "@typescript-eslint/types": "5.46.1",
35900 + "eslint-visitor-keys": "^3.3.0"
35901 + }
35902 + },
35903 "debug": {
35904 "version": "4.3.4",
35905 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
35906 "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
35907 + "dev": true,
35908 "requires": {
35909 "ms": "2.1.2"
35910 }
35911 + },
35912 + "eslint-visitor-keys": {
35913 + "version": "3.3.0",
35914 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
35915 + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
35916 + "dev": true
35917 }
35918 }
35919 },
@@ -35033,6 +35926,66 @@
35926 "@typescript-eslint/visitor-keys": "4.33.0"
35927 }
35928 },
35929 + "@typescript-eslint/type-utils": {
35930 + "version": "5.46.1",
35931 + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.46.1.tgz",
35932 + "integrity": "sha512-V/zMyfI+jDmL1ADxfDxjZ0EMbtiVqj8LUGPAGyBkXXStWmCUErMpW873zEHsyguWCuq2iN4BrlWUkmuVj84yng==",
35933 + "dev": true,
35934 + "requires": {
35935 + "@typescript-eslint/typescript-estree": "5.46.1",
35936 + "@typescript-eslint/utils": "5.46.1",
35937 + "debug": "^4.3.4",
35938 + "tsutils": "^3.21.0"
35939 + },
35940 + "dependencies": {
35941 + "@typescript-eslint/types": {
35942 + "version": "5.46.1",
35943 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz",
35944 + "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==",
35945 + "dev": true
35946 + },
35947 + "@typescript-eslint/typescript-estree": {
35948 + "version": "5.46.1",
35949 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz",
35950 + "integrity": "sha512-j9W4t67QiNp90kh5Nbr1w92wzt+toiIsaVPnEblB2Ih2U9fqBTyqV9T3pYWZBRt6QoMh/zVWP59EpuCjc4VRBg==",
35951 + "dev": true,
35952 + "requires": {
35953 + "@typescript-eslint/types": "5.46.1",
35954 + "@typescript-eslint/visitor-keys": "5.46.1",
35955 + "debug": "^4.3.4",
35956 + "globby": "^11.1.0",
35957 + "is-glob": "^4.0.3",
35958 + "semver": "^7.3.7",
35959 + "tsutils": "^3.21.0"
35960 + }
35961 + },
35962 + "@typescript-eslint/visitor-keys": {
35963 + "version": "5.46.1",
35964 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz",
35965 + "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==",
35966 + "dev": true,
35967 + "requires": {
35968 + "@typescript-eslint/types": "5.46.1",
35969 + "eslint-visitor-keys": "^3.3.0"
35970 + }
35971 + },
35972 + "debug": {
35973 + "version": "4.3.4",
35974 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
35975 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
35976 + "dev": true,
35977 + "requires": {
35978 + "ms": "2.1.2"
35979 + }
35980 + },
35981 + "eslint-visitor-keys": {
35982 + "version": "3.3.0",
35983 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
35984 + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
35985 + "dev": true
35986 + }
35987 + }
35988 + },
35989 "@typescript-eslint/types": {
35990 "version": "4.33.0",
35991 "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz",
@@ -35062,6 +36015,80 @@
36015 }
36016 }
36017 },
36018 + "@typescript-eslint/utils": {
36019 + "version": "5.46.1",
36020 + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.46.1.tgz",
36021 + "integrity": "sha512-RBdBAGv3oEpFojaCYT4Ghn4775pdjvwfDOfQ2P6qzNVgQOVrnSPe5/Pb88kv7xzYQjoio0eKHKB9GJ16ieSxvA==",
36022 + "dev": true,
36023 + "requires": {
36024 + "@types/json-schema": "^7.0.9",
36025 + "@types/semver": "^7.3.12",
36026 + "@typescript-eslint/scope-manager": "5.46.1",
36027 + "@typescript-eslint/types": "5.46.1",
36028 + "@typescript-eslint/typescript-estree": "5.46.1",
36029 + "eslint-scope": "^5.1.1",
36030 + "eslint-utils": "^3.0.0",
36031 + "semver": "^7.3.7"
36032 + },
36033 + "dependencies": {
36034 + "@typescript-eslint/scope-manager": {
36035 + "version": "5.46.1",
36036 + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz",
36037 + "integrity": "sha512-iOChVivo4jpwUdrJZyXSMrEIM/PvsbbDOX1y3UCKjSgWn+W89skxWaYXACQfxmIGhPVpRWK/VWPYc+bad6smIA==",
36038 + "dev": true,
36039 + "requires": {
36040 + "@typescript-eslint/types": "5.46.1",
36041 + "@typescript-eslint/visitor-keys": "5.46.1"
36042 + }
36043 + },
36044 + "@typescript-eslint/types": {
36045 + "version": "5.46.1",
36046 + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz",
36047 + "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==",
36048 + "dev": true
36049 + },
36050 + "@typescript-eslint/typescript-estree": {
36051 + "version": "5.46.1",
36052 + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz",
36053 + "integrity": "sha512-j9W4t67QiNp90kh5Nbr1w92wzt+toiIsaVPnEblB2Ih2U9fqBTyqV9T3pYWZBRt6QoMh/zVWP59EpuCjc4VRBg==",
36054 + "dev": true,
36055 + "requires": {
36056 + "@typescript-eslint/types": "5.46.1",
36057 + "@typescript-eslint/visitor-keys": "5.46.1",
36058 + "debug": "^4.3.4",
36059 + "globby": "^11.1.0",
36060 + "is-glob": "^4.0.3",
36061 + "semver": "^7.3.7",
36062 + "tsutils": "^3.21.0"
36063 + }
36064 + },
36065 + "@typescript-eslint/visitor-keys": {
36066 + "version": "5.46.1",
36067 + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz",
36068 + "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==",
36069 + "dev": true,
36070 + "requires": {
36071 + "@typescript-eslint/types": "5.46.1",
36072 + "eslint-visitor-keys": "^3.3.0"
36073 + }
36074 + },
36075 + "debug": {
36076 + "version": "4.3.4",
36077 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
36078 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
36079 + "dev": true,
36080 + "requires": {
36081 + "ms": "2.1.2"
36082 + }
36083 + },
36084 + "eslint-visitor-keys": {
36085 + "version": "3.3.0",
36086 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
36087 + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
36088 + "dev": true
36089 + }
36090 + }
36091 + },
36092 "@typescript-eslint/visitor-keys": {
36093 "version": "4.33.0",
36094 "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz",
@@ -35513,8 +36540,7 @@
36540 "argparse": {
36541 "version": "2.0.1",
36542 "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
35516 - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
35517 - "dev": true
36543 + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
36544 },
36545 "aria-hidden": {
36546 "version": "1.2.2",
@@ -36845,188 +37871,6 @@
37871 "yaml": "^2.1.3"
37872 },
37873 "dependencies": {
36848 - "@npmcli/eslint-config": {
36849 - "version": "4.0.1",
36850 - "resolved": "https://registry.npmjs.org/@npmcli/eslint-config/-/eslint-config-4.0.1.tgz",
36851 - "integrity": "sha512-bHsOOLO2UiMb8G4Q968VJjlO4QWXf3SivgN/rQKsbzcS37S7aFWwPph3PwBaTF6O0OlUvjLiM1mzXlz/1jGV9Q==",
36852 - "dev": true,
36853 - "requires": {
36854 - "which": "^3.0.0"
36855 - }
36856 - },
36857 - "@npmcli/template-oss": {
36858 - "version": "4.11.0",
36859 - "resolved": "https://registry.npmjs.org/@npmcli/template-oss/-/template-oss-4.11.0.tgz",
36860 - "integrity": "sha512-nvZqRxT9AFf56Fj07v1yG9AQVOTNn82ysMVI67IzpktunKFHmZ5Tp8P/al5pPik/nYQ4AieEyh7XC2dMro4moA==",
36861 - "dev": true,
36862 - "requires": {
36863 - "@actions/core": "^1.9.1",
36864 - "@commitlint/cli": "^17.1.1",
36865 - "@commitlint/config-conventional": "^17.1.0",
36866 - "@isaacs/string-locale-compare": "^1.1.0",
36867 - "@npmcli/arborist": "^6.0.0",
36868 - "@npmcli/git": "^4.0.0",
36869 - "@npmcli/map-workspaces": "^3.0.0",
36870 - "@npmcli/package-json": "^3.0.0",
36871 - "@octokit/rest": "^19.0.4",
36872 - "diff": "^5.0.0",
36873 - "glob": "^8.0.1",
36874 - "handlebars": "^4.7.7",
36875 - "hosted-git-info": "^6.0.0",
36876 - "ini": "^3.0.1",
36877 - "json-parse-even-better-errors": "^3.0.0",
36878 - "just-deep-map-values": "^1.1.1",
36879 - "just-diff": "^5.0.1",
36880 - "lodash": "^4.17.21",
36881 - "npm-package-arg": "^10.0.0",
36882 - "proc-log": "^3.0.0",
36883 - "release-please": "npm:@npmcli/release-please@^14.2.6",
36884 - "semver": "^7.3.5",
36885 - "yaml": "^2.1.1"
36886 - }
36887 - },
36888 - "brace-expansion": {
36889 - "version": "1.1.11",
36890 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
36891 - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
36892 - "dev": true,
36893 - "peer": true,
36894 - "requires": {
36895 - "balanced-match": "^1.0.0",
36896 - "concat-map": "0.0.1"
36897 - }
36898 - },
36899 - "debug": {
36900 - "version": "4.3.4",
36901 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
36902 - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
36903 - "dev": true,
36904 - "peer": true,
36905 - "requires": {
36906 - "ms": "2.1.2"
36907 - }
36908 - },
36909 - "eslint": {
36910 - "version": "8.27.0",
36911 - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.27.0.tgz",
36912 - "integrity": "sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==",
36913 - "dev": true,
36914 - "peer": true,
36915 - "requires": {
36916 - "@eslint/eslintrc": "^1.3.3",
36917 - "@humanwhocodes/config-array": "^0.11.6",
36918 - "@humanwhocodes/module-importer": "^1.0.1",
36919 - "@nodelib/fs.walk": "^1.2.8",
36920 - "ajv": "^6.10.0",
36921 - "chalk": "^4.0.0",
36922 - "cross-spawn": "^7.0.2",
36923 - "debug": "^4.3.2",
36924 - "doctrine": "^3.0.0",
36925 - "escape-string-regexp": "^4.0.0",
36926 - "eslint-scope": "^7.1.1",
36927 - "eslint-utils": "^3.0.0",
36928 - "eslint-visitor-keys": "^3.3.0",
36929 - "espree": "^9.4.0",
36930 - "esquery": "^1.4.0",
36931 - "esutils": "^2.0.2",
36932 - "fast-deep-equal": "^3.1.3",
36933 - "file-entry-cache": "^6.0.1",
36934 - "find-up": "^5.0.0",
36935 - "glob-parent": "^6.0.2",
36936 - "globals": "^13.15.0",
36937 - "grapheme-splitter": "^1.0.4",
36938 - "ignore": "^5.2.0",
36939 - "import-fresh": "^3.0.0",
36940 - "imurmurhash": "^0.1.4",
36941 - "is-glob": "^4.0.0",
36942 - "is-path-inside": "^3.0.3",
36943 - "js-sdsl": "^4.1.4",
36944 - "js-yaml": "^4.1.0",
36945 - "json-stable-stringify-without-jsonify": "^1.0.1",
36946 - "levn": "^0.4.1",
36947 - "lodash.merge": "^4.6.2",
36948 - "minimatch": "^3.1.2",
36949 - "natural-compare": "^1.4.0",
36950 - "optionator": "^0.9.1",
36951 - "regexpp": "^3.2.0",
36952 - "strip-ansi": "^6.0.1",
36953 - "strip-json-comments": "^3.1.0",
36954 - "text-table": "^0.2.0"
36955 - },
36956 - "dependencies": {
36957 - "minimatch": {
36958 - "version": "3.1.2",
36959 - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
36960 - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
36961 - "dev": true,
36962 - "peer": true,
36963 - "requires": {
36964 - "brace-expansion": "^1.1.7"
36965 - }
36966 - }
36967 - }
36968 - },
36969 - "eslint-scope": {
36970 - "version": "7.1.1",
36971 - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
36972 - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
36973 - "dev": true,
36974 - "peer": true,
36975 - "requires": {
36976 - "esrecurse": "^4.3.0",
36977 - "estraverse": "^5.2.0"
36978 - }
36979 - },
36980 - "eslint-visitor-keys": {
36981 - "version": "3.3.0",
36982 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
36983 - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
36984 - "dev": true,
36985 - "peer": true
36986 - },
36987 - "glob": {
36988 - "version": "8.0.3",
36989 - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz",
36990 - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==",
36991 - "dev": true,
36992 - "requires": {
36993 - "fs.realpath": "^1.0.0",
36994 - "inflight": "^1.0.4",
36995 - "inherits": "2",
36996 - "minimatch": "^5.0.1",
36997 - "once": "^1.3.0"
36998 - }
36999 - },
37000 - "glob-parent": {
37001 - "version": "6.0.2",
37002 - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
37003 - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
37004 - "dev": true,
37005 - "peer": true,
37006 - "requires": {
37007 - "is-glob": "^4.0.3"
37008 - }
37009 - },
37010 - "globals": {
37011 - "version": "13.17.0",
37012 - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
37013 - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
37014 - "dev": true,
37015 - "peer": true,
37016 - "requires": {
37017 - "type-fest": "^0.20.2"
37018 - }
37019 - },
37020 - "js-yaml": {
37021 - "version": "4.1.0",
37022 - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
37023 - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
37024 - "dev": true,
37025 - "peer": true,
37026 - "requires": {
37027 - "argparse": "^2.0.1"
37028 - }
37029 - },
37874 "minipass": {
37875 "version": "4.0.0",
37876 "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz",
@@ -38800,91 +39644,51 @@
39644 }
39645 },
39646 "eslint": {
38803 - "version": "7.32.0",
38804 - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
38805 - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
39647 + "version": "8.29.0",
39648 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz",
39649 + "integrity": "sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==",
39650 "requires": {
38807 - "@babel/code-frame": "7.12.11",
38808 - "@eslint/eslintrc": "^0.4.3",
38809 - "@humanwhocodes/config-array": "^0.5.0",
39651 + "@eslint/eslintrc": "^1.3.3",
39652 + "@humanwhocodes/config-array": "^0.11.6",
39653 + "@humanwhocodes/module-importer": "^1.0.1",
39654 + "@nodelib/fs.walk": "^1.2.8",
39655 "ajv": "^6.10.0",
39656 "chalk": "^4.0.0",
39657 "cross-spawn": "^7.0.2",
38813 - "debug": "^4.0.1",
39658 + "debug": "^4.3.2",
39659 "doctrine": "^3.0.0",
38815 - "enquirer": "^2.3.5",
39660 "escape-string-regexp": "^4.0.0",
38817 - "eslint-scope": "^5.1.1",
38818 - "eslint-utils": "^2.1.0",
38819 - "eslint-visitor-keys": "^2.0.0",
38820 - "espree": "^7.3.1",
39661 + "eslint-scope": "^7.1.1",
39662 + "eslint-utils": "^3.0.0",
39663 + "eslint-visitor-keys": "^3.3.0",
39664 + "espree": "^9.4.0",
39665 "esquery": "^1.4.0",
39666 "esutils": "^2.0.2",
39667 "fast-deep-equal": "^3.1.3",
39668 "file-entry-cache": "^6.0.1",
38825 - "functional-red-black-tree": "^1.0.1",
38826 - "glob-parent": "^5.1.2",
38827 - "globals": "^13.6.0",
38828 - "ignore": "^4.0.6",
39669 + "find-up": "^5.0.0",
39670 + "glob-parent": "^6.0.2",
39671 + "globals": "^13.15.0",
39672 + "grapheme-splitter": "^1.0.4",
39673 + "ignore": "^5.2.0",
39674 "import-fresh": "^3.0.0",
39675 "imurmurhash": "^0.1.4",
39676 "is-glob": "^4.0.0",
38832 - "js-yaml": "^3.13.1",
39677 + "is-path-inside": "^3.0.3",
39678 + "js-sdsl": "^4.1.4",
39679 + "js-yaml": "^4.1.0",
39680 "json-stable-stringify-without-jsonify": "^1.0.1",
39681 "levn": "^0.4.1",
39682 "lodash.merge": "^4.6.2",
38836 - "minimatch": "^3.0.4",
39683 + "minimatch": "^3.1.2",
39684 "natural-compare": "^1.4.0",
39685 "optionator": "^0.9.1",
38839 - "progress": "^2.0.0",
38840 - "regexpp": "^3.1.0",
38841 - "semver": "^7.2.1",
38842 - "strip-ansi": "^6.0.0",
39686 + "regexpp": "^3.2.0",
39687 + "strip-ansi": "^6.0.1",
39688 "strip-json-comments": "^3.1.0",
38844 - "table": "^6.0.9",
38845 - "text-table": "^0.2.0",
38846 - "v8-compile-cache": "^2.0.3"
39689 + "text-table": "^0.2.0"
39690 },
39691 "dependencies": {
38849 - "@babel/code-frame": {
38850 - "version": "7.12.11",
38851 - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
38852 - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
38853 - "requires": {
38854 - "@babel/highlight": "^7.10.4"
38855 - }
38856 - },
38857 - "@eslint/eslintrc": {
38858 - "version": "0.4.3",
38859 - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
38860 - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
38861 - "requires": {
38862 - "ajv": "^6.12.4",
38863 - "debug": "^4.1.1",
38864 - "espree": "^7.3.0",
38865 - "globals": "^13.9.0",
38866 - "ignore": "^4.0.6",
38867 - "import-fresh": "^3.2.1",
38868 - "js-yaml": "^3.13.1",
38869 - "minimatch": "^3.0.4",
38870 - "strip-json-comments": "^3.1.1"
38871 - }
38872 - },
38873 - "@humanwhocodes/config-array": {
38874 - "version": "0.5.0",
38875 - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
38876 - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
38877 - "requires": {
38878 - "@humanwhocodes/object-schema": "^1.2.0",
38879 - "debug": "^4.1.1",
38880 - "minimatch": "^3.0.4"
38881 - }
38882 - },
38883 - "acorn": {
38884 - "version": "7.4.1",
38885 - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
38886 - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
38887 - },
39692 "brace-expansion": {
39693 "version": "1.1.11",
39694 "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -38902,50 +39706,43 @@
39706 "ms": "2.1.2"
39707 }
39708 },
38905 - "eslint-utils": {
38906 - "version": "2.1.0",
38907 - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
38908 - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
39709 + "eslint-scope": {
39710 + "version": "7.1.1",
39711 + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
39712 + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
39713 "requires": {
38910 - "eslint-visitor-keys": "^1.1.0"
38911 - },
38912 - "dependencies": {
38913 - "eslint-visitor-keys": {
38914 - "version": "1.3.0",
38915 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
38916 - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
38917 - }
39714 + "esrecurse": "^4.3.0",
39715 + "estraverse": "^5.2.0"
39716 }
39717 },
38920 - "espree": {
38921 - "version": "7.3.1",
38922 - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
38923 - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
39718 + "eslint-visitor-keys": {
39719 + "version": "3.3.0",
39720 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
39721 + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA=="
39722 + },
39723 + "glob-parent": {
39724 + "version": "6.0.2",
39725 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
39726 + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
39727 "requires": {
38925 - "acorn": "^7.4.0",
38926 - "acorn-jsx": "^5.3.1",
38927 - "eslint-visitor-keys": "^1.3.0"
38928 - },
38929 - "dependencies": {
38930 - "eslint-visitor-keys": {
38931 - "version": "1.3.0",
38932 - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
38933 - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
38934 - }
39728 + "is-glob": "^4.0.3"
39729 }
39730 },
39731 "globals": {
38938 - "version": "13.17.0",
38939 - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
38940 - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
39732 + "version": "13.19.0",
39733 + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
39734 + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
39735 "requires": {
39736 "type-fest": "^0.20.2"
39737 }
39738 },
38945 - "ignore": {
38946 - "version": "4.0.6",
38947 - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
38948 - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
39739 + "js-yaml": {
39740 + "version": "4.1.0",
39741 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
39742 + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
39743 + "requires": {
39744 + "argparse": "^2.0.1"
39745 + }
39746 },
39747 "minimatch": {
39748 "version": "3.1.2",
@@ -38957,13 +39754,12 @@
39754 }
39755 }
39756 },
38960 - "eslint-config-react-app": {
38961 - "version": "6.0.0",
38962 - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz",
38963 - "integrity": "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==",
38964 - "requires": {
38965 - "confusing-browser-globals": "^1.0.10"
38966 - }
39757 + "eslint-config-prettier": {
39758 + "version": "8.5.0",
39759 + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
39760 + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
39761 + "dev": true,
39762 + "requires": {}
39763 },
39764 "eslint-import-resolver-node": {
39765 "version": "0.3.6",
@@ -39012,15 +39808,76 @@
39808 }
39809 }
39810 },
39015 - "eslint-plugin-flowtype": {
39016 - "version": "5.10.0",
39017 - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz",
39018 - "integrity": "sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==",
39811 + "eslint-plugin-escompat": {
39812 + "version": "3.3.4",
39813 + "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.3.4.tgz",
39814 + "integrity": "sha512-d/k6JwRzGRY6uZ426l6Ut6Eb2S/pi/079Ykj2GdWSzwm6WJHkdm28tECUWfLtpFA5ObApjPw6wR9bgY+uWAhag==",
39815 + "dev": true,
39816 "requires": {
39020 - "lodash": "^4.17.15",
39021 - "string-natural-compare": "^3.0.1"
39817 + "browserslist": "^4.21.0"
39818 + }
39819 + },
39820 + "eslint-plugin-eslint-comments": {
39821 + "version": "3.2.0",
39822 + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz",
39823 + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==",
39824 + "dev": true,
39825 + "requires": {
39826 + "escape-string-regexp": "^1.0.5",
39827 + "ignore": "^5.0.5"
39828 + },
39829 + "dependencies": {
39830 + "escape-string-regexp": {
39831 + "version": "1.0.5",
39832 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
39833 + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
39834 + "dev": true
39835 + }
39836 }
39837 },
39838 + "eslint-plugin-filenames": {
39839 + "version": "1.3.2",
39840 + "resolved": "https://registry.npmjs.org/eslint-plugin-filenames/-/eslint-plugin-filenames-1.3.2.tgz",
39841 + "integrity": "sha512-tqxJTiEM5a0JmRCUYQmxw23vtTxrb2+a3Q2mMOPhFxvt7ZQQJmdiuMby9B/vUAuVMghyP7oET+nIf6EO6CBd/w==",
39842 + "dev": true,
39843 + "requires": {
39844 + "lodash.camelcase": "4.3.0",
39845 + "lodash.kebabcase": "4.1.1",
39846 + "lodash.snakecase": "4.1.1",
39847 + "lodash.upperfirst": "4.3.1"
39848 + }
39849 + },
39850 + "eslint-plugin-github": {
39851 + "version": "4.6.0",
39852 + "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-4.6.0.tgz",
39853 + "integrity": "sha512-6VMH3wLUPEnV/0VuV3f0F74LF93N522Ht9KBYWDuPWKhr1NBzCqySIbQsxjPINIynoLtsErSc/YgICrocCc2zw==",
39854 + "dev": true,
39855 + "requires": {
39856 + "@github/browserslist-config": "^1.0.0",
39857 + "@typescript-eslint/eslint-plugin": "^5.1.0",
39858 + "@typescript-eslint/parser": "^5.1.0",
39859 + "eslint-config-prettier": ">=8.0.0",
39860 + "eslint-plugin-escompat": "^3.3.3",
39861 + "eslint-plugin-eslint-comments": "^3.2.0",
39862 + "eslint-plugin-filenames": "^1.3.2",
39863 + "eslint-plugin-i18n-text": "^1.0.1",
39864 + "eslint-plugin-import": "^2.25.2",
39865 + "eslint-plugin-jsx-a11y": "^6.6.0",
39866 + "eslint-plugin-no-only-tests": "^3.0.0",
39867 + "eslint-plugin-prettier": "^4.0.0",
39868 + "eslint-rule-documentation": ">=1.0.0",
39869 + "jsx-ast-utils": "^3.3.2",
39870 + "prettier": "^2.2.1",
39871 + "svg-element-attributes": "^1.3.1"
39872 + }
39873 + },
39874 + "eslint-plugin-i18n-text": {
39875 + "version": "1.0.1",
39876 + "resolved": "https://registry.npmjs.org/eslint-plugin-i18n-text/-/eslint-plugin-i18n-text-1.0.1.tgz",
39877 + "integrity": "sha512-3G3UetST6rdqhqW9SfcfzNYMpQXS7wNkJvp6dsXnjzGiku6Iu5hl3B0kmk6lIcFPwYjhQIY+tXVRtK9TlGT7RA==",
39878 + "dev": true,
39879 + "requires": {}
39880 + },
39881 "eslint-plugin-import": {
39882 "version": "2.26.0",
39883 "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
@@ -39134,6 +39991,12 @@
39991 }
39992 }
39993 },
39994 + "eslint-plugin-no-only-tests": {
39995 + "version": "3.1.0",
39996 + "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.1.0.tgz",
39997 + "integrity": "sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==",
39998 + "dev": true
39999 + },
40000 "eslint-plugin-node": {
40001 "version": "11.1.0",
40002 "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
@@ -39196,6 +40059,15 @@
40059 }
40060 }
40061 },
40062 + "eslint-plugin-prettier": {
40063 + "version": "4.2.1",
40064 + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz",
40065 + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==",
40066 + "dev": true,
40067 + "requires": {
40068 + "prettier-linter-helpers": "^1.0.0"
40069 + }
40070 + },
40071 "eslint-plugin-promise": {
40072 "version": "6.1.1",
40073 "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz",
@@ -39273,6 +40145,12 @@
40145 "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
40146 "requires": {}
40147 },
40148 + "eslint-rule-documentation": {
40149 + "version": "1.0.23",
40150 + "resolved": "https://registry.npmjs.org/eslint-rule-documentation/-/eslint-rule-documentation-1.0.23.tgz",
40151 + "integrity": "sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw==",
40152 + "dev": true
40153 + },
40154 "eslint-scope": {
40155 "version": "5.1.1",
40156 "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -39289,6 +40167,12 @@
40167 }
40168 }
40169 },
40170 + "eslint-traverse": {
40171 + "version": "1.0.0",
40172 + "resolved": "https://registry.npmjs.org/eslint-traverse/-/eslint-traverse-1.0.0.tgz",
40173 + "integrity": "sha512-bSp37rQs93LF8rZ409EI369DGCI4tELbFVmFNxI6QbuveS7VRxYVyUhwDafKN/enMyUh88HQQ7ZoGUHtPuGdcw==",
40174 + "dev": true
40175 + },
40176 "eslint-utils": {
40177 "version": "3.0.0",
40178 "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
@@ -39339,8 +40223,6 @@
40223 "version": "9.4.1",
40224 "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
40225 "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
39342 - "dev": true,
39343 - "peer": true,
40226 "requires": {
40227 "acorn": "^8.8.0",
40228 "acorn-jsx": "^5.3.2",
@@ -39350,9 +40232,7 @@
40232 "eslint-visitor-keys": {
40233 "version": "3.3.0",
40234 "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
39353 - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
39354 - "dev": true,
39355 - "peer": true
40235 + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA=="
40236 }
40237 }
40238 },
@@ -39638,6 +40518,12 @@
40518 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
40519 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
40520 },
40521 + "fast-diff": {
40522 + "version": "1.2.0",
40523 + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
40524 + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
40525 + "dev": true
40526 + },
40527 "fast-glob": {
40528 "version": "3.2.12",
40529 "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
@@ -40278,6 +41164,254 @@
41164 "webpack-virtual-modules": "^0.3.2",
41165 "xstate": "4.32.1",
41166 "yaml-loader": "^0.6.0"
41167 + },
41168 + "dependencies": {
41169 + "@eslint/eslintrc": {
41170 + "version": "0.4.3",
41171 + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
41172 + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
41173 + "requires": {
41174 + "ajv": "^6.12.4",
41175 + "debug": "^4.1.1",
41176 + "espree": "^7.3.0",
41177 + "globals": "^13.9.0",
41178 + "ignore": "^4.0.6",
41179 + "import-fresh": "^3.2.1",
41180 + "js-yaml": "^3.13.1",
41181 + "minimatch": "^3.0.4",
41182 + "strip-json-comments": "^3.1.1"
41183 + },
41184 + "dependencies": {
41185 + "debug": {
41186 + "version": "4.3.4",
41187 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
41188 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
41189 + "requires": {
41190 + "ms": "2.1.2"
41191 + }
41192 + },
41193 + "ignore": {
41194 + "version": "4.0.6",
41195 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
41196 + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
41197 + }
41198 + }
41199 + },
41200 + "@humanwhocodes/config-array": {
41201 + "version": "0.5.0",
41202 + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
41203 + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
41204 + "requires": {
41205 + "@humanwhocodes/object-schema": "^1.2.0",
41206 + "debug": "^4.1.1",
41207 + "minimatch": "^3.0.4"
41208 + },
41209 + "dependencies": {
41210 + "debug": {
41211 + "version": "4.3.4",
41212 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
41213 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
41214 + "requires": {
41215 + "ms": "2.1.2"
41216 + }
41217 + }
41218 + }
41219 + },
41220 + "@typescript-eslint/eslint-plugin": {
41221 + "version": "4.33.0",
41222 + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz",
41223 + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==",
41224 + "requires": {
41225 + "@typescript-eslint/experimental-utils": "4.33.0",
41226 + "@typescript-eslint/scope-manager": "4.33.0",
41227 + "debug": "^4.3.1",
41228 + "functional-red-black-tree": "^1.0.1",
41229 + "ignore": "^5.1.8",
41230 + "regexpp": "^3.1.0",
41231 + "semver": "^7.3.5",
41232 + "tsutils": "^3.21.0"
41233 + },
41234 + "dependencies": {
41235 + "debug": {
41236 + "version": "4.3.4",
41237 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
41238 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
41239 + "requires": {
41240 + "ms": "2.1.2"
41241 + }
41242 + }
41243 + }
41244 + },
41245 + "@typescript-eslint/parser": {
41246 + "version": "4.33.0",
41247 + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz",
41248 + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==",
41249 + "requires": {
41250 + "@typescript-eslint/scope-manager": "4.33.0",
41251 + "@typescript-eslint/types": "4.33.0",
41252 + "@typescript-eslint/typescript-estree": "4.33.0",
41253 + "debug": "^4.3.1"
41254 + },
41255 + "dependencies": {
41256 + "debug": {
41257 + "version": "4.3.4",
41258 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
41259 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
41260 + "requires": {
41261 + "ms": "2.1.2"
41262 + }
41263 + }
41264 + }
41265 + },
41266 + "acorn": {
41267 + "version": "7.4.1",
41268 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
41269 + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
41270 + },
41271 + "brace-expansion": {
41272 + "version": "1.1.11",
41273 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
41274 + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
41275 + "requires": {
41276 + "balanced-match": "^1.0.0",
41277 + "concat-map": "0.0.1"
41278 + }
41279 + },
41280 + "eslint": {
41281 + "version": "7.32.0",
41282 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
41283 + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
41284 + "requires": {
41285 + "@babel/code-frame": "7.12.11",
41286 + "@eslint/eslintrc": "^0.4.3",
41287 + "@humanwhocodes/config-array": "^0.5.0",
41288 + "ajv": "^6.10.0",
41289 + "chalk": "^4.0.0",
41290 + "cross-spawn": "^7.0.2",
41291 + "debug": "^4.0.1",
41292 + "doctrine": "^3.0.0",
41293 + "enquirer": "^2.3.5",
41294 + "escape-string-regexp": "^4.0.0",
41295 + "eslint-scope": "^5.1.1",
41296 + "eslint-utils": "^2.1.0",
41297 + "eslint-visitor-keys": "^2.0.0",
41298 + "espree": "^7.3.1",
41299 + "esquery": "^1.4.0",
41300 + "esutils": "^2.0.2",
41301 + "fast-deep-equal": "^3.1.3",
41302 + "file-entry-cache": "^6.0.1",
41303 + "functional-red-black-tree": "^1.0.1",
41304 + "glob-parent": "^5.1.2",
41305 + "globals": "^13.6.0",
41306 + "ignore": "^4.0.6",
41307 + "import-fresh": "^3.0.0",
41308 + "imurmurhash": "^0.1.4",
41309 + "is-glob": "^4.0.0",
41310 + "js-yaml": "^3.13.1",
41311 + "json-stable-stringify-without-jsonify": "^1.0.1",
41312 + "levn": "^0.4.1",
41313 + "lodash.merge": "^4.6.2",
41314 + "minimatch": "^3.0.4",
41315 + "natural-compare": "^1.4.0",
41316 + "optionator": "^0.9.1",
41317 + "progress": "^2.0.0",
41318 + "regexpp": "^3.1.0",
41319 + "semver": "^7.2.1",
41320 + "strip-ansi": "^6.0.0",
41321 + "strip-json-comments": "^3.1.0",
41322 + "table": "^6.0.9",
41323 + "text-table": "^0.2.0",
41324 + "v8-compile-cache": "^2.0.3"
41325 + },
41326 + "dependencies": {
41327 + "@babel/code-frame": {
41328 + "version": "7.12.11",
41329 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
41330 + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
41331 + "requires": {
41332 + "@babel/highlight": "^7.10.4"
41333 + }
41334 + },
41335 + "debug": {
41336 + "version": "4.3.4",
41337 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
41338 + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
41339 + "requires": {
41340 + "ms": "2.1.2"
41341 + }
41342 + },
41343 + "ignore": {
41344 + "version": "4.0.6",
41345 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
41346 + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
41347 + }
41348 + }
41349 + },
41350 + "eslint-config-react-app": {
41351 + "version": "6.0.0",
41352 + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-6.0.0.tgz",
41353 + "integrity": "sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==",
41354 + "requires": {
41355 + "confusing-browser-globals": "^1.0.10"
41356 + }
41357 + },
41358 + "eslint-plugin-flowtype": {
41359 + "version": "5.10.0",
41360 + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-5.10.0.tgz",
41361 + "integrity": "sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==",
41362 + "requires": {
41363 + "lodash": "^4.17.15",
41364 + "string-natural-compare": "^3.0.1"
41365 + }
41366 + },
41367 + "eslint-utils": {
41368 + "version": "2.1.0",
41369 + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
41370 + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
41371 + "requires": {
41372 + "eslint-visitor-keys": "^1.1.0"
41373 + },
41374 + "dependencies": {
41375 + "eslint-visitor-keys": {
41376 + "version": "1.3.0",
41377 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
41378 + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
41379 + }
41380 + }
41381 + },
41382 + "espree": {
41383 + "version": "7.3.1",
41384 + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
41385 + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
41386 + "requires": {
41387 + "acorn": "^7.4.0",
41388 + "acorn-jsx": "^5.3.1",
41389 + "eslint-visitor-keys": "^1.3.0"
41390 + },
41391 + "dependencies": {
41392 + "eslint-visitor-keys": {
41393 + "version": "1.3.0",
41394 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
41395 + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
41396 + }
41397 + }
41398 + },
41399 + "globals": {
41400 + "version": "13.19.0",
41401 + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
41402 + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
41403 + "requires": {
41404 + "type-fest": "^0.20.2"
41405 + }
41406 + },
41407 + "minimatch": {
41408 + "version": "3.1.2",
41409 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
41410 + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
41411 + "requires": {
41412 + "brace-expansion": "^1.1.7"
41413 + }
41414 + }
41415 }
41416 },
41417 "gatsby-cli": {
@@ -41290,9 +42424,7 @@
42424 "grapheme-splitter": {
42425 "version": "1.0.4",
42426 "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
41293 - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
41294 - "dev": true,
41295 - "peer": true
42427 + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ=="
42428 },
42429 "graphql": {
42430 "version": "15.8.0",
@@ -43201,11 +44333,9 @@
44333 }
44334 },
44335 "js-sdsl": {
43204 - "version": "4.1.5",
43205 - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz",
43206 - "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==",
43207 - "dev": true,
43208 - "peer": true
44336 + "version": "4.2.0",
44337 + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz",
44338 + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ=="
44339 },
44340 "js-tokens": {
44341 "version": "4.0.0",
@@ -43601,6 +44731,12 @@
44731 "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz",
44732 "integrity": "sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA=="
44733 },
44734 + "lodash.camelcase": {
44735 + "version": "4.3.0",
44736 + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
44737 + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
44738 + "dev": true
44739 + },
44740 "lodash.clonedeep": {
44741 "version": "4.5.0",
44742 "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
@@ -43652,6 +44788,12 @@
44788 "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==",
44789 "dev": true
44790 },
44791 + "lodash.kebabcase": {
44792 + "version": "4.1.1",
44793 + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
44794 + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==",
44795 + "dev": true
44796 + },
44797 "lodash.map": {
44798 "version": "4.6.0",
44799 "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz",
@@ -43687,6 +44829,12 @@
44829 "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz",
44830 "integrity": "sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ=="
44831 },
44832 + "lodash.snakecase": {
44833 + "version": "4.1.1",
44834 + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
44835 + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
44836 + "dev": true
44837 + },
44838 "lodash.some": {
44839 "version": "4.6.0",
44840 "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
@@ -43707,6 +44855,12 @@
44855 "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz",
44856 "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww=="
44857 },
44858 + "lodash.upperfirst": {
44859 + "version": "4.3.1",
44860 + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz",
44861 + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==",
44862 + "dev": true
44863 + },
44864 "longest-streak": {
44865 "version": "2.0.4",
44866 "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
@@ -44546,6 +45700,12 @@
45700 "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
45701 "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
45702 },
45703 + "natural-compare-lite": {
45704 + "version": "1.4.0",
45705 + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
45706 + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
45707 + "dev": true
45708 + },
45709 "negotiator": {
45710 "version": "0.6.3",
45711 "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
@@ -46242,6 +47402,21 @@
47402 "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
47403 "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA=="
47404 },
47405 + "prettier": {
47406 + "version": "2.8.1",
47407 + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.1.tgz",
47408 + "integrity": "sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==",
47409 + "dev": true
47410 + },
47411 + "prettier-linter-helpers": {
47412 + "version": "1.0.0",
47413 + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
47414 + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
47415 + "dev": true,
47416 + "requires": {
47417 + "fast-diff": "^1.1.2"
47418 + }
47419 + },
47420 "pretty-bytes": {
47421 "version": "5.6.0",
47422 "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
@@ -48916,6 +50091,12 @@
50091 "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
50092 "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
50093 },
50094 + "svg-element-attributes": {
50095 + "version": "1.3.1",
50096 + "resolved": "https://registry.npmjs.org/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz",
50097 + "integrity": "sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA==",
50098 + "dev": true
50099 + },
50100 "svgo": {
50101 "version": "2.8.0",
50102 "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz",
@@ -50526,6 +51707,7 @@
51707 "@github/combobox-nav": "^2.1.5",
51708 "@mdx-js/mdx": "^1.0.21",
51709 "@mdx-js/react": "^1.0.21",
51710 + "@npmcli/template-oss": "4.11.0",
51711 "@primer/components": "^23.0.0",
51712 "@primer/octicons-react": "^17.3.0",
51713 "@primer/react": "^35.14.0",
@@ -50539,6 +51721,10 @@
51721 "date-fns": "^2.0.1",
51722 "details-element-polyfill": "^2.4.0",
51723 "downshift": "^3.2.10",
51724 + "eslint": "^8.21.0",
51725 + "eslint-plugin-jsx-a11y": "^6.6.1",
51726 + "eslint-plugin-primer-react": "1.0.0",
51727 + "eslint-plugin-react": "^7.30.1",
51728 "find-up": "^4.1.0",
51729 "framer-motion": "^3.0.0",
51730 "fuse.js": "^3.4.5",
@@ -50573,6 +51759,36 @@
51759 "styled-system": "^5.0.18"
51760 },
51761 "dependencies": {
51762 + "@primer/primitives": {
51763 + "version": "7.10.0",
51764 + "resolved": "https://registry.npmjs.org/@primer/primitives/-/primitives-7.10.0.tgz",
51765 + "integrity": "sha512-DdLHq21e93R9qDHyRuRpytBLY0Up9IwNWMOUgPNW6lRSng4N4+IdUlLS3Ekbasmxfs8Z8vKS8aezeYovQ5qsxQ==",
51766 + "dev": true,
51767 + "peer": true
51768 + },
51769 + "@styled-system/props": {
51770 + "version": "5.1.5",
51771 + "resolved": "https://registry.npmjs.org/@styled-system/props/-/props-5.1.5.tgz",
51772 + "integrity": "sha512-FXhbzq2KueZpGaHxaDm8dowIEWqIMcgsKs6tBl6Y6S0njG9vC8dBMI6WSLDnzMoSqIX3nSKHmOmpzpoihdDewg==",
51773 + "dev": true,
51774 + "requires": {
51775 + "styled-system": "^5.1.5"
51776 + }
51777 + },
51778 + "eslint-plugin-primer-react": {
51779 + "version": "1.0.0",
51780 + "resolved": "https://registry.npmjs.org/eslint-plugin-primer-react/-/eslint-plugin-primer-react-1.0.0.tgz",
51781 + "integrity": "sha512-p4O51YjKi8PWURaGm757ak5sqDeHmfPUdo7nlOOo7gXdTCpWspgGC51lqDVbJacjBq4iNMtCGvh/Ubm6BSPqyA==",
51782 + "dev": true,
51783 + "requires": {
51784 + "@styled-system/props": "^5.1.5",
51785 + "eslint-plugin-github": "^4.3.7",
51786 + "eslint-plugin-jsx-a11y": "^6.6.1",
51787 + "eslint-traverse": "^1.0.0",
51788 + "lodash": "^4.17.21",
51789 + "styled-system": "^5.1.5"
51790 + }
51791 + },
51792 "find-up": {
51793 "version": "4.1.0",
51794 "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
package.json
+49 -12
@@ -1,12 +1,24 @@
1 {
2 "name": "npm-documentation",
3 - "repository": "npm/documentation",
4 - "version": "0.1.0",
3 + "version": "1.0.0",
4 + "repository": {
5 + "type": "git",
6 + "url": "https://github.com/npm/documentation.git"
7 + },
8 "private": true,
9 "scripts": {
10 "develop": "gatsby develop",
11 "build": "NODE_OPTIONS=--max-old-space-size=5376 gatsby build",
9 - "serve": "gatsby serve"
12 + "serve": "gatsby serve",
13 + "lint": "eslint \"**/*.js\"",
14 + "postlint": "template-oss-check",
15 + "template-oss-apply": "template-oss-apply --force",
16 + "lintfix": "npm run lint -- --fix",
17 + "snap": "tap",
18 + "test": "tap",
19 + "posttest": "npm run lint",
20 + "test-all": "npm run test -ws -iwr --if-present",
21 + "lint-all": "npm run lint -ws -iwr --if-present"
22 },
23 "workspaces": [
24 "cli/",
@@ -15,19 +27,44 @@
27 "dependencies": {
28 "gatsby": "^4.24.4",
29 "gatsby-plugin-meta-redirect": "^1.1.1",
18 - "theme": "*",
30 "react": "^17.0.2",
20 - "react-dom": "^17.0.2"
31 + "react-dom": "^17.0.2",
32 + "theme": "*"
33 },
34 "overrides": {
35 "react": "$react"
36 },
37 + "devDependencies": {
38 + "@npmcli/eslint-config": "^4.0.0",
39 + "@npmcli/template-oss": "4.11.0",
40 + "tap": "^16.3.0"
41 + },
42 + "author": "GitHub Inc.",
43 + "files": [
44 + "bin/",
45 + "lib/"
46 + ],
47 + "engines": {
48 + "node": ">=18.0.0"
49 + },
50 "templateOSS": {
26 - "rootRepo": false,
27 - "rootModule": false,
28 - "workspaces": [
29 - "cli"
30 - ],
31 - "version": "4.10.0"
32 - }
51 + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
52 + "version": "4.11.0",
53 + "content": "./scripts/template-oss"
54 + },
55 + "tap": {
56 + "test-ignore": "^(cli|theme)/",
57 + "nyc-arg": [
58 + "--exclude",
59 + "cli/**",
60 + "--exclude",
61 + "theme/**",
62 + "--exclude",
63 + "tap-snapshots/**"
64 + ]
65 + },
66 + "eslintIgnore": [
67 + ".cache/",
68 + "public/"
69 + ]
70 }
scripts/template-oss/CODEOWNERS new
+16
@@ -0,0 +1,16 @@
1 +{{> CODEOWNERS}}
2 +
3 +# Documentation content
4 +/content/ @MylesBorins @monishcm
5 +/src/ @MylesBorins @monishcm
6 +/static/ @MylesBorins @monishcm
7 +/.reuse/ @MylesBorins @monishcm
8 +/CONTENT-MODEL.md @MylesBorins @monishcm
9 +
10 +# Licensing
11 +/LICENSES/ @MylesBorins @monishcm
12 +/LICENSE @MylesBorins @monishcm
13 +/LICENSE-CODE @MylesBorins @monishcm
14 +
15 +# CLI content
16 +/content/cli/ @npm/cli-team
\ No newline at end of file
scripts/template-oss/_step-deps.yml new
+2
@@ -0,0 +1,2 @@
1 +- name: Install Dependencies
2 + run: {{ rootNpmPath }} i --no-audit --no-fund {{~#if jobDepFlags}} {{ jobDepFlags }}{{/if}}
scripts/template-oss/ci.yml new
+9
@@ -0,0 +1,9 @@
1 +{{> ci }}
2 +
3 + licenses:
4 + name: REUSE Compliance Check
5 + runs-on: ubuntu-latest
6 + steps:
7 + - uses: actions/checkout@v3
8 + - name: REUSE Compliance Check
9 + uses: fsfe/reuse-action@v1
scripts/template-oss/index.js new
+29
@@ -0,0 +1,29 @@
1 +module.exports = {
2 + rootRepo: {
3 + add: {
4 + '.github/workflows/ci.yml': 'ci.yml',
5 + '.github/workflows/publish.yml': 'publish.yml',
6 + '.github/CODEOWNERS': 'CODEOWNERS',
7 + '.github/ISSUE_TEMPLATE/bug.yml': false,
8 + '.commitlintrc.js': false,
9 + },
10 + },
11 + rootModule: {
12 + add: {
13 + 'CODE_OF_CONDUCT.md': false,
14 + },
15 + },
16 + ciVersions: 'latest',
17 + macCI: false,
18 + windowsCI: false,
19 + lockfile: true,
20 + allowPaths: [
21 + '/.reuse/',
22 + '/src/',
23 + '/static/',
24 + '/content/',
25 + '/LICENSE*',
26 + '/*.md',
27 + '/gatsby-*.js',
28 + ],
29 +}
scripts/template-oss/publish.yml new
+55
@@ -0,0 +1,55 @@
1 +name: Publish
2 +
3 +on:
4 + push:
5 + branches:
6 + - {{ defaultBranch }}
7 + pull_request_target:
8 + workflow_dispatch:
9 + workflow_call:
10 +
11 +jobs:
12 + build-and-upload:
13 + permissions:
14 + contents: read
15 + pages: read
16 + {{> job jobName="Build and Upload" jobSkipSetup=true }}
17 + - name: Checkout PR
18 + if: $\{{ github.event_name == 'pull_request_target' }}
19 + uses: actions/checkout@v3
20 + with:
21 + ref: $\{{ github.event.pull_request.head.ref }}
22 + repository: $\{{ github.event.pull_request.head.repo.full_name }}
23 + - name: Checkout
24 + if: $\{{ github.event_name != 'pull_request_target' }}
25 + uses: actions/checkout@v3
26 + with:
27 + ref: {{ defaultBranch }}
28 + - name: Setup Pages
29 + uses: actions/configure-pages@v1
30 + {{> stepNode }}
31 + {{> stepDeps }}
32 + - name: Build documentation
33 + run: npm run build
34 + env:
35 + GITHUB_TOKEN: $\{{ secrets.GITHUB_TOKEN }}
36 + - name: Upload artifact
37 + uses: actions/upload-pages-artifact@v1
38 + with:
39 + path: './public'
40 +
41 + deploy:
42 + permissions:
43 + pages: write
44 + id-token: write
45 + environment:
46 + name: github-pages
47 + url: $\{{ steps.deployment.outputs.page_url }}
48 + runs-on: ubuntu-latest
49 + needs: build-and-upload
50 + steps:
51 + - name: Deploy to GitHub Pages
52 + id: deployment
53 + uses: actions/deploy-pages@v1
54 + with:
55 + preview: $\{{ github.event_name == 'pull_request_target' }}
src/shared.js
+205 -205
@@ -1,216 +1,216 @@
1 -import React from 'react';
2 -import {Link} from '@primer/components';
3 -import {Note, Screenshot} from 'theme';
1 +import React from 'react'
2 +import { Link } from '@primer/components'
3 +import { Note, Screenshot } from 'theme'
4
5 const shared = {
6 - /* User login */
7 - 'user-login': {
8 - 'text': (<>On the npm "<Link href="https://www.npmjs.com/login">Sign In</Link>" page, enter your account details and click <strong>Sign In</strong>.</>),
9 - 'image': (<Screenshot src="/shared/user-login.png" alt="Screenshot of npm login dialog" />)
10 - },
11 - 'contact-support': {
12 - 'text': (<Link href="https://www.npmjs.com/support">contact npm Support</Link>),
13 - },
14 - 'contact-enterprise-support': {
15 - 'text': (<Link href="mailto:enterprise@npmjs.com">contact Enterprise Support</Link>),
16 - },
17 - 'profile-settings': {
18 - 'text': (<>In the upper right corner of the page, click your profile picture, then click <strong>Profile Settings</strong>.</>),
19 - 'image': (<Screenshot src="/shared/profile-settings.png" alt="Screenshot of profile settings selection in user menu" />)
20 - },
21 - 'account-settings': {
22 - 'text': (<>In the upper right corner of the page, click your profile picture, then click <strong>Account</strong>.</>),
23 - 'image': (<Screenshot src="/shared/account-settings.png" alt="Screenshot of account settings selection in user menu" />)
24 - },
25 - 'start-account-recovery': {
26 - 'text': (<>On the "Request an Account Recovery" page, click <strong>Start Account Recovery</strong>.</>),
27 - 'image': (<Screenshot src="/getting-started/setting-up-your-npm-user-account/request-account-recovery.png" alt="Screenshot showing account recovery page" />)
28 - },
29 - 'use-recovery-code': {
30 - 'text': (<>On the "Two-Factor Authentication" page, click <strong>Use a recovery code or request a reset</strong>.</>),
31 - 'image': (<Screenshot src="/getting-started/setting-up-your-npm-user-account/recovery-code-link.png" alt="Screenshot showing Security Key prompt with a link to navigate to the recovery code input screen" />)
32 - },
33 - 'support-ticket-form': {
34 - 'text': (<>In the "Open a Support Ticket" form, enter the following information:</>),
35 - },
36 - 'enter-email-address': {
37 - 'text': (<>In the <strong>Email</strong> field, enter an email address where our support team can contact you.</>),
38 - },
39 - 'support-ticket-other': {
40 - 'text': (<>If you need help with anything else, in the <strong>How can we help?</strong> section, select <strong>Other</strong> and enter more information in the <strong>Additional Details</strong> field.</>),
41 - },
42 - 'connect-to-accounts': {
43 - 'text': (<>
44 - <ul>
45 - <li>If you have previously linked a GitHub account to your npm account, select <strong>Connect to GitHub</strong>. This will help our support team verify your account.</li>
46 - <li>If you have previously linked a Twitter account to your npm account, select <strong>Connect to Twitter</strong>. This will help our support team verify your account.</li>
47 - </ul>
48 - </>
49 - ),
50 - },
51 - 'submit-support-ticket': {
52 - 'text': (<>At the bottom of the form, click <strong>Submit Support Ticket</strong>.</>),
53 - },
6 + /* User login */
7 + 'user-login': {
8 + text: (<>On the npm "<Link href="https://www.npmjs.com/login">Sign In</Link>" page, enter your account details and click <strong>Sign In</strong>.</>),
9 + image: (<Screenshot src="/shared/user-login.png" alt="Screenshot of npm login dialog" />),
10 + },
11 + 'contact-support': {
12 + text: (<Link href="https://www.npmjs.com/support">contact npm Support</Link>),
13 + },
14 + 'contact-enterprise-support': {
15 + text: (<Link href="mailto:enterprise@npmjs.com">contact Enterprise Support</Link>),
16 + },
17 + 'profile-settings': {
18 + text: (<>In the upper right corner of the page, click your profile picture, then click <strong>Profile Settings</strong>.</>),
19 + image: (<Screenshot src="/shared/profile-settings.png" alt="Screenshot of profile settings selection in user menu" />),
20 + },
21 + 'account-settings': {
22 + text: (<>In the upper right corner of the page, click your profile picture, then click <strong>Account</strong>.</>),
23 + image: (<Screenshot src="/shared/account-settings.png" alt="Screenshot of account settings selection in user menu" />),
24 + },
25 + 'start-account-recovery': {
26 + text: (<>On the "Request an Account Recovery" page, click <strong>Start Account Recovery</strong>.</>),
27 + image: (<Screenshot src="/getting-started/setting-up-your-npm-user-account/request-account-recovery.png" alt="Screenshot showing account recovery page" />),
28 + },
29 + 'use-recovery-code': {
30 + text: (<>On the "Two-Factor Authentication" page, click <strong>Use a recovery code or request a reset</strong>.</>),
31 + image: (<Screenshot src="/getting-started/setting-up-your-npm-user-account/recovery-code-link.png" alt="Screenshot showing Security Key prompt with a link to navigate to the recovery code input screen" />),
32 + },
33 + 'support-ticket-form': {
34 + text: (<>In the "Open a Support Ticket" form, enter the following information:</>),
35 + },
36 + 'enter-email-address': {
37 + text: (<>In the <strong>Email</strong> field, enter an email address where our support team can contact you.</>),
38 + },
39 + 'support-ticket-other': {
40 + text: (<>If you need help with anything else, in the <strong>How can we help?</strong> section, select <strong>Other</strong> and enter more information in the <strong>Additional Details</strong> field.</>),
41 + },
42 + 'connect-to-accounts': {
43 + text: (<>
44 + <ul>
45 + <li>If you have previously linked a GitHub account to your npm account, select <strong>Connect to GitHub</strong>. This will help our support team verify your account.</li>
46 + <li>If you have previously linked a Twitter account to your npm account, select <strong>Connect to Twitter</strong>. This will help our support team verify your account.</li>
47 + </ul>
48 + </>
49 + ),
50 + },
51 + 'submit-support-ticket': {
52 + text: (<>At the bottom of the form, click <strong>Submit Support Ticket</strong>.</>),
53 + },
54
55 - /* Billing */
56 - 'billing-creditcard-form': {
57 - 'text': (<>
55 + /* Billing */
56 + 'billing-creditcard-form': {
57 + text: (<>
58 In the credit card information dialog box, enter your credit card information:
59
60 - <ul>
61 - <li>Card number</li>
62 - <li>MM / YY: the month and year of the card expiration date</li>
63 - <li>CVC: the three-digit code on the credit card</li>
64 - </ul>
65 - </>
66 - ),
67 - 'image': (<Screenshot src="/shared/billing-creditcard-form.png" alt="Screenshot of the credit card form" />),
68 - },
69 - 'billing-downgrade-selection': {
70 - 'text': (<>Under "change plan", click <strong>Downgrade Plan</strong>.</>),
71 - 'image': (<Screenshot src="/shared/billing-downgrade-selection.png" alt="Screenshot of the downgrade plan button" />),
72 - },
73 - 'billing-downgrade-confirm': {
74 - 'text': (<>Under "Are you sure?", click <strong>Downgrade to a free account</strong>.</>),
75 - 'image': (<Screenshot src="/shared/billing-downgrade-confirm.png" alt="Screenshot of the downgrade plan confirmation" />),
76 - },
77 - 'billing-download': {
78 - 'text': (<>To download a single receipt, find the row of the receipt you want to download, then click the PDF icon on the right side of the row.</>),
79 - 'image': (<Screenshot src="/shared/billing-download-icon.png" alt="Screenshot of the download receipt icon" />),
80 - },
81 - 'billing-download-checked': {
82 - 'text': (<>To download multiple receipts, first select the receipts that you wish to download by selecting the box next to the date. To select all receipts, select the checkbox next to the "Date" header. Then click <strong>Download Checked</strong>.</>),
83 - 'image': (<Screenshot src="/shared/billing-download-checked.png" alt="Screenshot of the download checked option" />),
84 - },
85 - 'billing-email': {
86 - 'text': (<>To email a single receipt, find the row of the receipt you want to download, then, on the right side of the row, click the email icon.</>),
87 - 'image': (<Screenshot src="/shared/billing-email-icon.png" alt="Screenshot of the email receipt icon" />),
88 - },
89 - 'billing-email-checked': {
90 - 'text': (<>To email multiple receipts, first select the receipts that you wish to download by selecting the box next to the date. To select all receipts, select the checkbox next to the "Date" header. Then click <strong>Email Checked</strong>.</>),
91 - 'image': (<Screenshot src="/shared/billing-email-checked.png" alt="Screenshot of the email checked receipt icon" />),
92 - },
93 - 'billing-email-receipt': {
94 - 'text': (<>In the Email Receipt dialog box, fill in the "From", "To", and "Message" fields.</>),
95 - 'image': (<Screenshot src="/shared/billing-email-receipt.png" alt="Screenshot of the email receipt dialog" />),
96 - },
97 - 'billing-extra-info': {
98 - 'text': (<>To add a business name, VAT number, address of record, or other information to your receipts, in the "Extra Billing Information" text box, type the information.</>),
99 - 'image': (<Screenshot src="/shared/billing-extra-info.png" alt="Screenshot of the extra billing info dialog" />),
100 - },
101 - 'billing-extra-receipt-email': {
102 - 'text': (<>To update the email address used for receipts, beside "Send my receipts", select the checkbox and type the email address that should receive billing receipts.</>),
103 - 'image': (<Screenshot src="/shared/billing-extra-receipt-email.png" alt="Screenshot of billing receipt email settings" />)
104 - },
105 - 'billing-extra-save': {
106 - 'text': (<>Click <strong>Save</strong>.</>),
107 - 'image': (<Screenshot src="/shared/billing-extra-save.png" alt="Screenshot of billing extra info save button" />),
108 - },
109 - 'billing-form': {
110 - 'text': (<>
60 + <ul>
61 + <li>Card number</li>
62 + <li>MM / YY: the month and year of the card expiration date</li>
63 + <li>CVC: the three-digit code on the credit card</li>
64 + </ul>
65 + </>
66 + ),
67 + image: (<Screenshot src="/shared/billing-creditcard-form.png" alt="Screenshot of the credit card form" />),
68 + },
69 + 'billing-downgrade-selection': {
70 + text: (<>Under "change plan", click <strong>Downgrade Plan</strong>.</>),
71 + image: (<Screenshot src="/shared/billing-downgrade-selection.png" alt="Screenshot of the downgrade plan button" />),
72 + },
73 + 'billing-downgrade-confirm': {
74 + text: (<>Under "Are you sure?", click <strong>Downgrade to a free account</strong>.</>),
75 + image: (<Screenshot src="/shared/billing-downgrade-confirm.png" alt="Screenshot of the downgrade plan confirmation" />),
76 + },
77 + 'billing-download': {
78 + text: (<>To download a single receipt, find the row of the receipt you want to download, then click the PDF icon on the right side of the row.</>),
79 + image: (<Screenshot src="/shared/billing-download-icon.png" alt="Screenshot of the download receipt icon" />),
80 + },
81 + 'billing-download-checked': {
82 + text: (<>To download multiple receipts, first select the receipts that you wish to download by selecting the box next to the date. To select all receipts, select the checkbox next to the "Date" header. Then click <strong>Download Checked</strong>.</>),
83 + image: (<Screenshot src="/shared/billing-download-checked.png" alt="Screenshot of the download checked option" />),
84 + },
85 + 'billing-email': {
86 + text: (<>To email a single receipt, find the row of the receipt you want to download, then, on the right side of the row, click the email icon.</>),
87 + image: (<Screenshot src="/shared/billing-email-icon.png" alt="Screenshot of the email receipt icon" />),
88 + },
89 + 'billing-email-checked': {
90 + text: (<>To email multiple receipts, first select the receipts that you wish to download by selecting the box next to the date. To select all receipts, select the checkbox next to the "Date" header. Then click <strong>Email Checked</strong>.</>),
91 + image: (<Screenshot src="/shared/billing-email-checked.png" alt="Screenshot of the email checked receipt icon" />),
92 + },
93 + 'billing-email-receipt': {
94 + text: (<>In the Email Receipt dialog box, fill in the "From", "To", and "Message" fields.</>),
95 + image: (<Screenshot src="/shared/billing-email-receipt.png" alt="Screenshot of the email receipt dialog" />),
96 + },
97 + 'billing-extra-info': {
98 + text: (<>To add a business name, VAT number, address of record, or other information to your receipts, in the "Extra Billing Information" text box, type the information.</>),
99 + image: (<Screenshot src="/shared/billing-extra-info.png" alt="Screenshot of the extra billing info dialog" />),
100 + },
101 + 'billing-extra-receipt-email': {
102 + text: (<>To update the email address used for receipts, beside "Send my receipts", select the checkbox and type the email address that should receive billing receipts.</>),
103 + image: (<Screenshot src="/shared/billing-extra-receipt-email.png" alt="Screenshot of billing receipt email settings" />),
104 + },
105 + 'billing-extra-save': {
106 + text: (<>Click <strong>Save</strong>.</>),
107 + image: (<Screenshot src="/shared/billing-extra-save.png" alt="Screenshot of billing extra info save button" />),
108 + },
109 + 'billing-form': {
110 + text: (<>
111 In the billing information dialog box, enter your billing information:
112
113 - <ul>
114 - <li>Email: the email address used for the billing contact</li>
115 - <li>Name: the name on the credit card used to pay</li>
116 - <li>Street, City, ZIP Code, Country: the billing address associated with the credit card</li>
117 - </ul>
118 - </>
119 - ),
120 - 'image': (<Screenshot src="/shared/billing-form.png" alt="Screenshot of billing form" />),
121 - },
122 - 'billing-history': {
123 - 'text': (<>On the Billing Information page, under "monthly bill", select <strong>View Billing History</strong>.</>),
124 - 'image': (<Screenshot src="/shared/billing-history.png" alt="Screenshot of billing history selection in user menu" />)
125 - },
126 - 'billing-info': {
127 - 'text': (<>In the upper right corner of the page, click your profile picture, then select <strong>Billing Info</strong>.</>),
128 - 'image': (<Screenshot src="/shared/billing-info.png" alt="Screenshot of billing info selection in user menu" />)
129 - },
130 - 'billing-receipt-settings': {
131 - 'text': (<>At the bottom of the Billing History dialog box, click "Receipt Settings".</>),
132 - 'image': (<Screenshot src="/shared/billing-receipt-settings.png" alt="Screenshot of billing receipt settings" />)
133 - },
134 - 'billing-update-card': {
135 - 'text': (<>Click <strong>Update Card</strong>.</>),
136 - 'image': (<Screenshot src="/shared/billing-update-card.png" alt="Screenshot of update credit card confirmation button" />),
137 - },
138 - 'billing-view': {
139 - 'text': (<>To view a single receipt, find the row of the receipt you want to view, then, on the right side of the row, click the view icon.</>),
140 - 'image': (<Screenshot src="/shared/billing-view-icon.png" alt="Screenshot of the view receipt icon" />),
141 - },
142 - 'grace-period': {
143 - 'text': 'nine days',
144 - },
145 - 'payment-info-button': {
146 - 'text': (<>Click <strong>Payment Info</strong>.</>),
147 - 'image': (<Screenshot src="/shared/payment-info-button.png" alt="Screenshot of payment information button" />),
148 - },
149 - 'payment-remember-me': {
150 - 'text': (<>To save your credit card information for other payments on npm, select "Remember me".</>),
151 - 'image': (<Screenshot src="/shared/payment-remember-me.png" alt="Screenshot of payment remember me button" />),
152 - },
153 - 'payment-info': {
154 - 'text': (<>Under "monthly bill", click <strong>Edit Payment Info</strong>.</>),
155 - 'image': (<Screenshot src="/shared/payment-info.png" alt="Screenshot of edit payment info link" />),
156 - },
157 - 'billing-price-teams': {
158 - 'text': (<>$7 per member per month</>),
159 - },
160 - 'billing-organization-plans': {
161 - 'image': (<Screenshot src="/shared/billing-plan-selection.png" alt="Screenshot showing the billing plan selection dialog" />),
162 - },
113 + <ul>
114 + <li>Email: the email address used for the billing contact</li>
115 + <li>Name: the name on the credit card used to pay</li>
116 + <li>Street, City, ZIP Code, Country: the billing address associated with the credit card</li>
117 + </ul>
118 + </>
119 + ),
120 + image: (<Screenshot src="/shared/billing-form.png" alt="Screenshot of billing form" />),
121 + },
122 + 'billing-history': {
123 + text: (<>On the Billing Information page, under "monthly bill", select <strong>View Billing History</strong>.</>),
124 + image: (<Screenshot src="/shared/billing-history.png" alt="Screenshot of billing history selection in user menu" />),
125 + },
126 + 'billing-info': {
127 + text: (<>In the upper right corner of the page, click your profile picture, then select <strong>Billing Info</strong>.</>),
128 + image: (<Screenshot src="/shared/billing-info.png" alt="Screenshot of billing info selection in user menu" />),
129 + },
130 + 'billing-receipt-settings': {
131 + text: (<>At the bottom of the Billing History dialog box, click "Receipt Settings".</>),
132 + image: (<Screenshot src="/shared/billing-receipt-settings.png" alt="Screenshot of billing receipt settings" />),
133 + },
134 + 'billing-update-card': {
135 + text: (<>Click <strong>Update Card</strong>.</>),
136 + image: (<Screenshot src="/shared/billing-update-card.png" alt="Screenshot of update credit card confirmation button" />),
137 + },
138 + 'billing-view': {
139 + text: (<>To view a single receipt, find the row of the receipt you want to view, then, on the right side of the row, click the view icon.</>),
140 + image: (<Screenshot src="/shared/billing-view-icon.png" alt="Screenshot of the view receipt icon" />),
141 + },
142 + 'grace-period': {
143 + text: 'nine days',
144 + },
145 + 'payment-info-button': {
146 + text: (<>Click <strong>Payment Info</strong>.</>),
147 + image: (<Screenshot src="/shared/payment-info-button.png" alt="Screenshot of payment information button" />),
148 + },
149 + 'payment-remember-me': {
150 + text: (<>To save your credit card information for other payments on npm, select "Remember me".</>),
151 + image: (<Screenshot src="/shared/payment-remember-me.png" alt="Screenshot of payment remember me button" />),
152 + },
153 + 'payment-info': {
154 + text: (<>Under "monthly bill", click <strong>Edit Payment Info</strong>.</>),
155 + image: (<Screenshot src="/shared/payment-info.png" alt="Screenshot of edit payment info link" />),
156 + },
157 + 'billing-price-teams': {
158 + text: (<>$7 per member per month</>),
159 + },
160 + 'billing-organization-plans': {
161 + image: (<Screenshot src="/shared/billing-plan-selection.png" alt="Screenshot showing the billing plan selection dialog" />),
162 + },
163
164 - /* Package management */
165 - 'organization-package-public': {
166 - 'image': (<Screenshot src="/shared/organization-package-public.png" alt="Screenshot of a public npm Teams package" />),
167 - },
168 - 'organization-package-private': {
169 - 'image': (<Screenshot src="/shared/organization-package-private.png" alt="Screenshot of a private npm Teams package" />),
170 - },
164 + /* Package management */
165 + 'organization-package-public': {
166 + image: (<Screenshot src="/shared/organization-package-public.png" alt="Screenshot of a public npm Teams package" />),
167 + },
168 + 'organization-package-private': {
169 + image: (<Screenshot src="/shared/organization-package-private.png" alt="Screenshot of a private npm Teams package" />),
170 + },
171
172 - /* Organizations */
173 - 'organization-create': {
174 - 'text': (<>In the upper right corner of the page, click your profile picture, then click <strong>Add an Organization</strong>.</>),
175 - 'image': (<Screenshot src="/shared/organization-create.png" alt="Screenshot of the add an organization dropdown menu" />),
176 - },
177 - 'organization-selection': {
178 - 'text': (<>In the left sidebar, click the name of your organization.</>),
179 - 'image': (<Screenshot src="/shared/organization-selection.png" alt="Screenshot of a selected organization" />),
180 - },
181 - 'organization-billing-tab': {
182 - 'text': (<>On the organization settings page, click <strong>Billing</strong>.</>),
183 - 'image': (<Screenshot src="/shared/organization-billing-tab.png" alt="Screenshot of the organization billing tab" />),
184 - },
185 - 'organization-members-tab': {
186 - 'text': (<>On the organization settings page, click <strong>Members</strong>.</>),
187 - 'image': (<Screenshot src="/shared/organization-members-tab.png" alt="Screenshot of the organization members tab" />),
188 - },
189 - 'organization-teams-tab': {
190 - 'text': (<>On the organization settings page, click <strong>Teams</strong>.</>),
191 - 'image': (<Screenshot src="/shared/organization-teams-tab.png" alt="Screenshot of the organization teams tab" />),
192 - },
172 + /* Organizations */
173 + 'organization-create': {
174 + text: (<>In the upper right corner of the page, click your profile picture, then click <strong>Add an Organization</strong>.</>),
175 + image: (<Screenshot src="/shared/organization-create.png" alt="Screenshot of the add an organization dropdown menu" />),
176 + },
177 + 'organization-selection': {
178 + text: (<>In the left sidebar, click the name of your organization.</>),
179 + image: (<Screenshot src="/shared/organization-selection.png" alt="Screenshot of a selected organization" />),
180 + },
181 + 'organization-billing-tab': {
182 + text: (<>On the organization settings page, click <strong>Billing</strong>.</>),
183 + image: (<Screenshot src="/shared/organization-billing-tab.png" alt="Screenshot of the organization billing tab" />),
184 + },
185 + 'organization-members-tab': {
186 + text: (<>On the organization settings page, click <strong>Members</strong>.</>),
187 + image: (<Screenshot src="/shared/organization-members-tab.png" alt="Screenshot of the organization members tab" />),
188 + },
189 + 'organization-teams-tab': {
190 + text: (<>On the organization settings page, click <strong>Teams</strong>.</>),
191 + image: (<Screenshot src="/shared/organization-teams-tab.png" alt="Screenshot of the organization teams tab" />),
192 + },
193
194 - /* Enterprise */
195 - 'enterprise-admin-panel': {
196 - 'text': (<>In the upper right corner of the page, click your profile picture, then click <strong>Site Administration</strong>.</>),
197 - 'image': (<Screenshot src="/shared/enterprise-admin-panel.png" alt="Screenshot of the admin panel" />),
198 - },
199 - 'enterprise-admin-panel-settings': {
200 - 'image': (<Screenshot src="/shared/enterprise-admin-panel-settings.png" alt="Screenshot of the admin panel settings button" />),
201 - },
202 - 'enterprise-choose-security-policy': {
203 - 'image': (<Screenshot src="/shared/enterprise-choose-security-policy.png" alt="Screenshot of the choose security policy" />),
204 - },
205 - 'enterprise-custom-blocking-message': {
206 - 'image': (<Screenshot src="/shared/enterprise-custom-blocking-message.png" alt="Screenshot of the custom blocking message option" />),
207 - },
208 - 'enterprise-instance-login': {
209 - 'text': (<>Log in to your Enterprise instance.</>),
210 - },
211 - 'enterprise-migration-requirements': {
212 - 'text': (<Note><><strong>Note:</strong> Using <code><a href="https://www.npmjs.com/package/pneumatic-tubes">pneumatic-tubes</a></code> for migration requires <ul><li>Node 8+</li><li>npm 5+ (to install or upgrade, run <code>npm install npm@latest -g</code>)</li></ul></></Note>),
213 - },
214 -};
194 + /* Enterprise */
195 + 'enterprise-admin-panel': {
196 + text: (<>In the upper right corner of the page, click your profile picture, then click <strong>Site Administration</strong>.</>),
197 + image: (<Screenshot src="/shared/enterprise-admin-panel.png" alt="Screenshot of the admin panel" />),
198 + },
199 + 'enterprise-admin-panel-settings': {
200 + image: (<Screenshot src="/shared/enterprise-admin-panel-settings.png" alt="Screenshot of the admin panel settings button" />),
201 + },
202 + 'enterprise-choose-security-policy': {
203 + image: (<Screenshot src="/shared/enterprise-choose-security-policy.png" alt="Screenshot of the choose security policy" />),
204 + },
205 + 'enterprise-custom-blocking-message': {
206 + image: (<Screenshot src="/shared/enterprise-custom-blocking-message.png" alt="Screenshot of the custom blocking message option" />),
207 + },
208 + 'enterprise-instance-login': {
209 + text: (<>Log in to your Enterprise instance.</>),
210 + },
211 + 'enterprise-migration-requirements': {
212 + text: (<Note><><strong>Note:</strong> Using <code><a href="https://www.npmjs.com/package/pneumatic-tubes">pneumatic-tubes</a></code> for migration requires <ul><li>Node 8+</li><li>npm 5+ (to install or upgrade, run <code>npm install npm@latest -g</code>)</li></ul></></Note>),
213 + },
214 +}
215
216 -export default shared;
216 +export default shared
test/index.js new
+3
@@ -0,0 +1,3 @@
1 +const t = require('tap')
2 +
3 +t.ok(true)
theme/.eslintrc.js new
+43
@@ -0,0 +1,43 @@
1 +module.exports = {
2 + root: true,
3 + parserOptions: {
4 + ecmaFeatures: {
5 + jsx: true,
6 + },
7 + },
8 + env: {
9 + commonjs: true,
10 + es2022: true,
11 + browser: true,
12 + },
13 + extends: [
14 + '@npmcli',
15 + 'eslint:recommended',
16 + 'plugin:react/recommended',
17 + 'plugin:jsx-a11y/recommended',
18 + 'plugin:primer-react/recommended',
19 + ],
20 + settings: {
21 + react: {
22 + version: 'detect',
23 + },
24 + },
25 + rules: {
26 + 'max-len': 'off',
27 + 'react/prop-types': 'off',
28 + 'react/display-name': 'off',
29 + 'eslint-comments/no-use': 'off',
30 + 'no-shadow': 'off',
31 + 'primer-react/no-system-props': ['warn', { includeUtilityComponents: true }],
32 + },
33 + overrides: [
34 + {
35 + files: ['gatsby-node.js', 'gatsby-config.js'],
36 + env: { node: true, browser: false },
37 + },
38 + {
39 + files: ['test/*', './src/**/__tests__/*'],
40 + env: { jest: true },
41 + },
42 + ],
43 +}
theme/.gitignore new
+25
@@ -0,0 +1,25 @@
1 +# This file is automatically added by @npmcli/template-oss. Do not edit.
2 +
3 +# ignore everything in the root
4 +/*
5 +
6 +# keep these
7 +!**/.gitignore
8 +!/.eslintrc.js
9 +!/.eslintrc.local.*
10 +!/.gitignore
11 +!/bin/
12 +!/CHANGELOG*
13 +!/docs/
14 +!/gatsby-*.js
15 +!/index.js
16 +!/jest*.js
17 +!/lib/
18 +!/LICENSE*
19 +!/map.js
20 +!/package.json
21 +!/README*
22 +!/scripts/
23 +!/src
24 +!/tap-snapshots/
25 +!/test/
theme/gatsby-browser.js
+2 -2
@@ -1,2 +1,2 @@
1 -export {default as wrapPageElement} from './src/components/wrap-page-element'
2 -export {default as wrapRootElement} from './src/components/wrap-root-element'
1 +export { default as wrapPageElement } from './src/components/wrap-page-element'
2 +export { default as wrapRootElement } from './src/components/wrap-root-element'
theme/gatsby-node.js
+44 -45
@@ -6,7 +6,7 @@ const uniqBy = require('lodash.uniqby')
6
7 const CONTRIBUTOR_CACHE = new Map()
8
9 -exports.createSchemaCustomization = ({actions: {createTypes}}) => {
9 +exports.createSchemaCustomization = ({ actions: { createTypes } }) => {
10 createTypes(`
11 type Mdx implements Node {
12 frontmatter: MdxFrontmatter
@@ -23,13 +23,13 @@ exports.createSchemaCustomization = ({actions: {createTypes}}) => {
23 type MdxFields {
24 slug: String
25 }
26 - `);
26 + `)
27 }
28
29 -exports.createPages = async ({graphql, actions}, themeOptions) => {
30 - const repo = themeOptions.repo ? themeOptions.repo : { url: getPkgRepo(readPkgUp.sync().package).browse() };
29 +exports.createPages = async ({ graphql, actions }, themeOptions) => {
30 + const repo = themeOptions.repo ? themeOptions.repo : { url: getPkgRepo(readPkgUp.sync().package).browse() }
31
32 - const {data} = await graphql(`
32 + const { data } = await graphql(`
33 {
34 allMdx {
35 nodes {
@@ -66,19 +66,19 @@ exports.createPages = async ({graphql, actions}, themeOptions) => {
66 // Turn every MDX file into a page.
67 return Promise.all(
68 data.allMdx.nodes.map(async node => {
69 - const pagePath = getPath(node);
69 + const pagePath = getPath(node)
70
71 const rootAbsolutePath = path.resolve(
72 process.cwd(),
73 - themeOptions.repoRootPath || '.',
73 + themeOptions.repoRootPath || '.'
74 )
75
76 const fileRelativePath = path.relative(
77 rootAbsolutePath,
78 - node.fileAbsolutePath,
78 + node.fileAbsolutePath
79 )
80
81 - const editUrl = getEditUrl(themeOptions, repo, fileRelativePath, node.frontmatter);
81 + const editUrl = getEditUrl(themeOptions, repo, fileRelativePath, node.frontmatter)
82
83 let contributors = []
84 if (themeOptions.showContributors !== false && (process.env.GITHUB_TOKEN || process.env.NOW_GITHUB_DEPLOYMENT)) {
@@ -103,7 +103,7 @@ exports.createPages = async ({graphql, actions}, themeOptions) => {
103 fromPath: from,
104 toPath: '/' + pagePath,
105 isPermanent: true,
106 - redirectInBrowser: true
106 + redirectInBrowser: true,
107 })
108
109 if (pagePath.startsWith('cli/') && !from.endsWith('index')) {
@@ -111,83 +111,82 @@ exports.createPages = async ({graphql, actions}, themeOptions) => {
111 fromPath: `${from}.html`,
112 toPath: '/' + pagePath,
113 isPermanent: true,
114 - redirectInBrowser: true
114 + redirectInBrowser: true,
115 })
116 }
117 })
118 }
119 - }),
119 + })
120 )
121 }
122
123 -function getPath(node) {
123 +function getPath (node) {
124 // sites can programmatically override slug, that takes priority
125 if (node.fields && node.fields.slug) {
126 - return node.fields.slug;
126 + return node.fields.slug
127 }
128
129 // then a slug specified in frontmatter
130 if (node.frontmatter && node.frontmatter.slug) {
131 - return node.frontmatter.slug;
131 + return node.frontmatter.slug
132 }
133
134 // finally, we'll just use the path on disk
135 return path.join(
136 node.parent.relativeDirectory,
137 - node.parent.name === 'index' ? '/' : node.parent.name,
137 + node.parent.name === 'index' ? '/' : node.parent.name
138 )
139 - .replace(/\\/g, '/'); // Windows paths to forward slashes
139 + .replace(/\\/g, '/') // Windows paths to forward slashes
140 }
141
142 -function getNameWithOwner(url) {
143 - if ((nwo = url.match(/^http(?:s)?:\/\/(?:www\.)?github\.com\/([^/]+\/[^/]+)(?:\/)?$/i))) {
144 - return nwo[1];
145 - }
142 +function getNameWithOwner (url) {
143 + const nwo = url.match(/^http(?:s)?:\/\/(?:www\.)?github\.com\/([^/]+\/[^/]+)(?:\/)?$/i)
144 +
145 + if (nwo) {
146 + return nwo[1]
147 + }
148
147 - return null;
149 + return null
150 }
151
150 -function getGitHubData(repo, overrideData, filePath) {
152 +function getGitHubData (repo, overrideData, filePath) {
153 const gh = {
154 nwo: getNameWithOwner(repo.url),
155 branch: 'master',
154 - };
156 + }
157
158 if (overrideData.github_repo) {
157 - gh.nwo = overrideData.github_repo;
159 + gh.nwo = overrideData.github_repo
160 }
161
162 if (overrideData.github_branch) {
161 - gh.branch = overrideData.github_branch;
162 - }
163 - else if (repo.defaultBranch) {
164 - gh.branch = repo.defaultBranch;
163 + gh.branch = overrideData.github_branch
164 + } else if (repo.defaultBranch) {
165 + gh.branch = repo.defaultBranch
166 }
167
168 if (overrideData.github_path) {
168 - gh.path = overrideData.github_path;
169 - }
170 - else if(repo.path) {
171 - gh.path = repo.path + '/' + filePath;
172 - }
173 - else {
174 - gh.path = filePath;
169 + gh.path = overrideData.github_path
170 + } else if (repo.path) {
171 + gh.path = repo.path + '/' + filePath
172 + } else {
173 + gh.path = filePath
174 }
175
177 - return gh;
176 + return gh
177 }
178
180 -function getEditUrl(themeOptions, repo, filePath, overrideData = { }) {
179 +function getEditUrl (themeOptions, repo, filePath, overrideData = { }) {
180 if (themeOptions.editOnGitHub === false || overrideData.edit_on_github === false) {
181 return null
182 }
183
185 - const gh = getGitHubData(repo, overrideData, filePath);
184 + const gh = getGitHubData(repo, overrideData, filePath)
185 return `https://github.com/${gh.nwo}/edit/${gh.branch}/${gh.path}`
186 }
187
189 -async function fetchContributors(repo, filePath, overrideData = { }, accessToken = "") {
190 - const gh = getGitHubData(repo, overrideData, filePath);
188 +async function fetchContributors (repo, filePath, overrideData = { }, accessToken = '') {
189 + const gh = getGitHubData(repo, overrideData, filePath)
190
191 const cached = CONTRIBUTOR_CACHE.get(gh)
192 if (cached) {
@@ -198,16 +197,16 @@ async function fetchContributors(repo, filePath, overrideData = { }, accessToken
197 const req = {
198 method: 'get',
199 baseURL: 'https://api.github.com/',
201 - url: `/repos/${gh.nwo}/commits?path=${gh.path}&sha=${gh.branch}&per_page=100`
200 + url: `/repos/${gh.nwo}/commits?path=${gh.path}&sha=${gh.branch}&per_page=100`,
201 }
202
203 if (accessToken && accessToken.length) {
204 req.headers = {
206 - 'Authorization': `token ${accessToken}`
205 + Authorization: `token ${accessToken}`,
206 }
207 }
208
210 - const {data} = await axios.request(req)
209 + const { data } = await axios.request(req)
210
211 const commits = data
212 .map(commit => ({
@@ -224,7 +223,7 @@ async function fetchContributors(repo, filePath, overrideData = { }, accessToken
223 return result
224 } catch (error) {
225 console.error(
227 - `[ERROR] Unable to fetch contributors for ${filePath}. ${error.message}`,
226 + `[ERROR] Unable to fetch contributors for ${filePath}. ${error.message}`
227 )
228 return []
229 }
theme/gatsby-ssr.js
+2 -2
@@ -1,2 +1,2 @@
1 -export {default as wrapPageElement} from './src/components/wrap-page-element'
2 -export {default as wrapRootElement} from './src/components/wrap-root-element'
1 +export { default as wrapPageElement } from './src/components/wrap-page-element'
2 +export { default as wrapRootElement } from './src/components/wrap-root-element'
theme/index.js
+15 -15
@@ -1,15 +1,15 @@
1 -export {default as Caption} from './src/components/caption'
2 -export {default as Container} from './src/components/container'
3 -export {default as Contributors} from './src/components/contributors'
4 -export {Do, DoDontContainer, Dont} from './src/components/do-dont'
5 -export {default as Frame} from './src/components/frame'
6 -export {default as Head} from './src/components/head'
7 -export {default as Header} from './src/components/header'
8 -export {default as Hero} from './src/components/hero'
9 -export {default as HeroLayout} from './src/components/hero-layout'
10 -export {default as Index} from './src/components/index'
11 -export {default as Note} from './src/components/note'
12 -export {default as Screenshot} from './src/components/screenshot'
13 -export {default as Sidebar} from './src/components/sidebar'
14 -export {default as SourceLink} from './src/components/source-link'
15 -export {default as StatusLabel} from './src/components/status-label'
1 +export { default as Caption } from './src/components/caption'
2 +export { default as Container } from './src/components/container'
3 +export { default as Contributors } from './src/components/contributors'
4 +export { Do, DoDontContainer, Dont } from './src/components/do-dont'
5 +export { default as Frame } from './src/components/frame'
6 +export { default as Head } from './src/components/head'
7 +export { default as Header } from './src/components/header'
8 +export { default as Hero } from './src/components/hero'
9 +export { default as HeroLayout } from './src/components/hero-layout'
10 +export { default as Index } from './src/components/index'
11 +export { default as Note } from './src/components/note'
12 +export { default as Screenshot } from './src/components/screenshot'
13 +export { default as Sidebar } from './src/components/sidebar'
14 +export { default as SourceLink } from './src/components/source-link'
15 +export { default as StatusLabel } from './src/components/status-label'
theme/jest-preprocess.js
+2 -2
@@ -1,5 +1,5 @@
1 const babelOptions = {
2 - presets: ["babel-preset-gatsby"],
2 + presets: ['babel-preset-gatsby'],
3 }
4
5 -module.exports = require("babel-jest").default.createTransformer(babelOptions)
5 +module.exports = require('babel-jest').default.createTransformer(babelOptions)
theme/jest-setup.js new
+1
@@ -0,0 +1 @@
1 +import '@testing-library/jest-dom/extend-expect'
theme/jest.config.js
+3 -4
@@ -1,8 +1,7 @@
1 module.exports = {
2 - testEnvironment: "jsdom",
3 - setupFilesAfterEnv: ['<rootDir>/setup-tests.js'],
2 + testEnvironment: 'jsdom',
3 + setupFilesAfterEnv: ['<rootDir>/jest-setup.js'],
4 transform: {
5 - "^.+\\.jsx?$": `<rootDir>/jest-preprocess.js`,
5 + '^.+\\.jsx?$': `<rootDir>/jest-preprocess.js`,
6 },
7 }
8 -
theme/package.json
+28 -8
@@ -1,23 +1,23 @@
1 {
2 "name": "theme",
3 + "version": "1.0.0",
4 "repository": {
5 "url": "https://github.com/npm/documentation.git",
6 "directory": "theme",
7 "type": "git"
8 },
9 "private": true,
9 - "version": "1.9.0",
10 "main": "index.js",
11 "license": "MIT",
12 "scripts": {
13 - "test": "jest"
13 + "test": "jest",
14 + "lint": "eslint \"**/*.js\"",
15 + "postlint": "template-oss-check",
16 + "template-oss-apply": "template-oss-apply --force",
17 + "lintfix": "npm run lint -- --fix",
18 + "snap": "tap",
19 + "posttest": "npm run lint"
20 },
15 - "files": [
16 - "src",
17 - "!src/**/__tests__/",
18 - "gatsby-*.js",
19 - "index.js"
20 - ],
21 "peerDependencies": {
22 "gatsby": "^4.19.0",
23 "react": "^17.0.2",
@@ -70,9 +70,29 @@
70 "styled-system": "^5.0.18"
71 },
72 "devDependencies": {
73 + "@npmcli/template-oss": "4.11.0",
74 "@testing-library/jest-dom": "^5.16.5",
75 "babel-jest": "^29.1.2",
76 + "eslint": "^8.21.0",
77 + "eslint-plugin-jsx-a11y": "^6.6.1",
78 + "eslint-plugin-primer-react": "1.0.0",
79 + "eslint-plugin-react": "^7.30.1",
80 "jest": "^29.1.2",
81 "jest-environment-jsdom": "^29.1.2"
82 + },
83 + "author": "GitHub Inc.",
84 + "engines": {
85 + "node": ">=18.0.0"
86 + },
87 + "templateOSS": {
88 + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
89 + "version": "4.11.0",
90 + "content": "./scripts/template-oss"
91 + },
92 + "tap": {
93 + "nyc-arg": [
94 + "--exclude",
95 + "tap-snapshots/**"
96 + ]
97 }
98 }
theme/scripts/template-oss/_step-deps.yml new
+2
@@ -0,0 +1,2 @@
1 +- name: Install Dependencies
2 + run: {{ rootNpmPath }} i --no-audit --no-fund {{~#if jobDepFlags}} {{ jobDepFlags }}{{/if}}
theme/scripts/template-oss/index.js new
+21
@@ -0,0 +1,21 @@
1 +module.exports = {
2 + ...require('../../../scripts/template-oss'),
3 + workspaceModule: {
4 + add: {
5 + 'package.json': 'pkg.json',
6 + '.eslintrc.js': false,
7 + },
8 + },
9 + allowPaths: [
10 + '/src',
11 + '/gatsby-*.js',
12 + '/jest*.js',
13 + '/index.js',
14 + ],
15 + requiredPackages: {
16 + devDependencies: [],
17 + },
18 + allowedPackages: [
19 + 'eslint',
20 + ],
21 +}
theme/scripts/template-oss/pkg.json new
+18
@@ -0,0 +1,18 @@
1 +{
2 + "scripts": {
3 + "lint": "eslint \"**/*.js\"",
4 + "postlint": "template-oss-check",
5 + "template-oss-apply": "template-oss-apply --force",
6 + "lintfix": "{{ localNpmPath }} run lint -- --fix",
7 + "test": "jest",
8 + "posttest": "{{ localNpmPath }} run lint"
9 + },
10 + "engines": {
11 + {{#if engines}}
12 + "node": {{{ json engines }}}
13 + {{/if}}
14 + },
15 + {{{ json __CONFIG_KEY__ }}}: {
16 + "version": {{{ json __VERSION__ }}}
17 + }
18 +}
\ No newline at end of file
theme/setup-tests.js deleted
-1
@@ -1 +0,0 @@
1 -import "@testing-library/jest-dom/extend-expect"
theme/src/aria-live.js
+48 -47
@@ -2,67 +2,68 @@
2 * This is an implementation of the
3 * aria-live guide:
4 * https://github.com/github/thehub/blob/main/docs/epd/engineering/dev-practicals/frontend/accessibility/readiness-routine/screenreaders/live-regions-and-screen-reader-announcements.md
5 - *
5 + *
6 * The code is heavily borrowed from https://github.com/github/github/blob/master/app/assets/modules/github/aria-live.ts
7 */
8
9 let container
10
11 if (typeof window !== 'undefined') {
12 - document.addEventListener("DOMContentLoaded", function(event) {
12 + document.addEventListener('DOMContentLoaded', function () {
13 createNoticeContainer()
14 - });
15 - }
16 -
17 - // Announce message update to screen reader.
18 -function announce(message) {
19 - if (!container || !container.isConnected) {
20 - /* This condition is for when the aria-live container no longer exists due to nav methods like turbo drive
14 + })
15 +}
16 +
17 +// Announce message update to screen reader.
18 +function announce (message) {
19 + if (!container || !container.isConnected) {
20 + /* This condition is for when the aria-live container no longer exists due to nav methods like turbo drive
21 which replace the body getting rid of the region. We add the container if it's missing. We then add a delay
22 to ensure aria-live can work correctly.
23 Note: This approach is not ideal and should be revisited.
24 See https://github.com/github/accessibility/issues/1900#issuecomment-1254369320
25 */
26 - createNoticeContainer()
27 - setTimeout(() => {
28 - setContainerContent(message)
29 - }, 200)
30 - } else {
31 - setContainerContent(message)
32 - }
33 - }
34 -
35 - // Set aria-live container to message.
36 -function setContainerContent(message) {
37 - if (!container) return
38 - if (container.textContent === message) {
39 - /* This is a hack due to the way the aria live API works.
26 + createNoticeContainer()
27 + setTimeout(() => {
28 + setContainerContent(message)
29 + }, 200)
30 + } else {
31 + setContainerContent(message)
32 + }
33 +}
34 +
35 +// Set aria-live container to message.
36 +function setContainerContent (message) {
37 + if (!container) {
38 + return
39 + }
40 + if (container.textContent === message) {
41 + /* This is a hack due to the way the aria live API works.
42 A screen reader will not read a live region again
43 if the text is the same. Adding a space character tells
44 the browser that the live region has updated,
45 which will cause it to read again, but with no audible difference. */
44 - container.textContent = `${message}\u00A0`
45 - } else {
46 - container.textContent = message
47 - }
48 - }
49 -
50 - // Get the global screen reader notice container.
51 -function createNoticeContainer() {
52 - container = document.createElement('div')
53 - container.setAttribute('aria-live', 'polite')
54 - container.style.position = 'absolute'
55 - container.style.width = '1px'
56 - container.style.height = '1px'
57 - container.style.padding = '0'
58 - container.style.overflow = 'hidden'
59 - container.style.clip = 'rect(0, 0, 0, 0)'
60 - container.style.wordWrap = 'normal'
61 - container.style.border = '0'
62 - document.body.append(container)
63 - }
64 -
46 + container.textContent = `${message}\u00A0`
47 + } else {
48 + container.textContent = message
49 + }
50 +}
51 +
52 +// Get the global screen reader notice container.
53 +function createNoticeContainer () {
54 + container = document.createElement('div')
55 + container.setAttribute('aria-live', 'polite')
56 + container.style.position = 'absolute'
57 + container.style.width = '1px'
58 + container.style.height = '1px'
59 + container.style.padding = '0'
60 + container.style.overflow = 'hidden'
61 + container.style.clip = 'rect(0, 0, 0, 0)'
62 + container.style.wordWrap = 'normal'
63 + container.style.border = '0'
64 + document.body.append(container)
65 +}
66 +
67 module.exports = {
66 - announce
67 - }
68 -
\ No newline at end of file
68 + announce,
69 +}
theme/src/components/__tests__/contributors.test.js
+8 -8
@@ -1,9 +1,9 @@
1 -import {render} from '@testing-library/react'
1 +import { render } from '@testing-library/react'
2 import React from 'react'
3 import Contributors from '../contributors'
4
5 test('renders contributors', () => {
6 - const {queryByText} = render(
6 + const { queryByText } = render(
7 <Contributors
8 contributors={[
9 {
@@ -21,7 +21,7 @@ test('renders contributors', () => {
21 },
22 },
23 ]}
24 - />,
24 + />
25 )
26
27 expect(queryByText(/2 contributors/)).toBeInTheDocument()
@@ -31,8 +31,8 @@ test('renders contributors', () => {
31 })
32
33 test('does not render "last edited by" if latest contributor does not have a latest commit', () => {
34 - const {queryByText} = render(
35 - <Contributors contributors={[{login: 'ashygee'}]} />,
34 + const { queryByText } = render(
35 + <Contributors contributors={[{ login: 'ashygee' }]} />
36 )
37
38 expect(queryByText(/1 contributor/)).toBeInTheDocument()
@@ -42,13 +42,13 @@ test('does not render "last edited by" if latest contributor does not have a lat
42 // The `Contributors` component is unlikely to be passed an empty array
43 // but it should be able to handle an empty array gracefully just in case.
44 test('handles no contributors', () => {
45 - const {queryByText} = render(<Contributors contributors={[]} />)
45 + const { queryByText } = render(<Contributors contributors={[]} />)
46
47 expect(queryByText(/0 contributors/)).toBeInTheDocument()
48 })
49
50 test('does not render duplicate contributors', () => {
51 - const {queryByText} = render(
51 + const { queryByText } = render(
52 <Contributors
53 contributors={[
54 {
@@ -66,7 +66,7 @@ test('does not render duplicate contributors', () => {
66 },
67 },
68 ]}
69 - />,
69 + />
70 )
71
72 expect(queryByText(/1 contributor/)).toBeInTheDocument()
theme/src/components/__tests__/page-footer.test.js
+8 -8
@@ -1,10 +1,10 @@
1 -import {render} from '@testing-library/react'
1 +import { render } from '@testing-library/react'
2 import React from 'react'
3 import PageFooter from '../page-footer'
4
5 test('renders correctly when editUrl and contributors are defined', () => {
6 - const {queryByText} = render(
7 - <PageFooter editUrl="#" contributors={[{login: 'broccolini'}]} />,
6 + const { queryByText } = render(
7 + <PageFooter editUrl="#" contributors={[{ login: 'broccolini' }]} />
8 )
9
10 expect(queryByText(/Edit this page on GitHub/)).toBeInTheDocument()
@@ -12,22 +12,22 @@ test('renders correctly when editUrl and contributors are defined', () => {
12 })
13
14 test('renders correctly when editUrl and contributors are undefined', () => {
15 - const {queryByText} = render(<PageFooter />)
15 + const { queryByText } = render(<PageFooter />)
16
17 expect(queryByText(/Edit this page on GitHub/)).toBeNull()
18 expect(queryByText(/contributor/)).toBeNull()
19 })
20
21 test('renders correctly when editUrl is defined but contributors is undefined', () => {
22 - const {queryByText} = render(<PageFooter editUrl="#" />)
22 + const { queryByText } = render(<PageFooter editUrl="#" />)
23
24 expect(queryByText(/Edit this page on GitHub/)).toBeInTheDocument()
25 expect(queryByText(/contributor/)).toBeNull()
26 })
27
28 test('renders correctly when contributors is defined but editUrl is undefined', () => {
29 - const {queryByText} = render(
30 - <PageFooter contributors={[{login: 'broccolini'}]} />,
29 + const { queryByText } = render(
30 + <PageFooter contributors={[{ login: 'broccolini' }]} />
31 )
32
33 expect(queryByText(/Edit this page on GitHub/)).toBeNull()
@@ -35,7 +35,7 @@ test('renders correctly when contributors is defined but editUrl is undefined',
35 })
36
37 test('does not render contributors if contributors is an empty array', () => {
38 - const {queryByText} = render(<PageFooter contributors={[]} />)
38 + const { queryByText } = render(<PageFooter contributors={[]} />)
39
40 expect(queryByText(/contributor/)).toBeNull()
41 })
theme/src/components/caption.js
+2 -2
@@ -1,7 +1,7 @@
1 -import {Text} from '@primer/components'
1 +import { Text } from '@primer/components'
2 import React from 'react'
3
4 -function Caption(props) {
4 +function Caption (props) {
5 return <Text as="p" mt={2} mb={3} fontSize={1} color="gray.5" {...props} />
6 }
7
theme/src/components/clipboard-copy.js
+7 -5
@@ -1,9 +1,9 @@
1 -import {Button, StyledOcticon, themeGet} from '@primer/components'
2 -import {CheckIcon, CopyIcon} from '@primer/octicons-react'
1 +import { Button, StyledOcticon, themeGet } from '@primer/components'
2 +import { CheckIcon, CopyIcon } from '@primer/octicons-react'
3 import styled from 'styled-components'
4 import copy from 'copy-to-clipboard'
5 import React from 'react'
6 -import {announce} from '../aria-live'
6 +import { announce } from '../aria-live'
7
8 const CopyToClipboard = styled(Button)`
9 &:focus {
@@ -11,12 +11,14 @@ const CopyToClipboard = styled(Button)`
11 }
12 `
13
14 -function ClipboardCopy({value}) {
14 +function ClipboardCopy ({ value }) {
15 const [copied, setCopied] = React.useState(false)
16
17 React.useEffect(() => {
18 const timeout = setTimeout(() => {
19 - if (copied) setCopied(false)
19 + if (copied) {
20 + setCopied(false)
21 + }
22 }, 1000)
23
24 return () => clearTimeout(timeout)
theme/src/components/code.js
+15 -14
@@ -1,17 +1,16 @@
1 -import {Absolute, BorderBox, Relative, Text} from '@primer/components'
2 -import Highlight, {defaultProps} from 'prism-react-renderer'
1 +import { Absolute, BorderBox, Relative, Text } from '@primer/components'
2 +import Highlight, { defaultProps } from 'prism-react-renderer'
3 import githubTheme from 'prism-react-renderer/themes/github'
4 -import React from 'react'
5 -import {useState, useEffect} from 'react'
4 +import React, { useState, useEffect } from 'react'
5 import ClipboardCopy from './clipboard-copy'
6 import LiveCode from './live-code'
7
9 -function Code({className, children, live, noinline}) {
10 - const [scrollHandleStyle, setScrollHandleStyle] = useState({position: 'absolute'})
8 +function Code ({ className, children, live, noinline }) {
9 + const [scrollHandleStyle, setScrollHandleStyle] = useState({ position: 'absolute' })
10 const language = className ? className.replace(/language-/, '') : ''
11 const code = children.trim()
12 const scrollHandleRef = React.createRef()
14 -
13 +
14 useEffect(() => {
15 resizeScrollHandle()
16 })
@@ -31,7 +30,7 @@ function Code({className, children, live, noinline}) {
30 language={language}
31 theme={githubTheme}
32 >
34 - {({className, style, tokens, getLineProps, getTokenProps}) => (
33 + {({ className, style, tokens, getLineProps, getTokenProps }) => (
34 <BorderBox
35 as="pre"
36 className={className}
@@ -39,18 +38,19 @@ function Code({className, children, live, noinline}) {
38 mb={3}
39 p={3}
40 border={0}
42 - style={{...style, overflow: 'auto'}}
41 + style={{ ...style, overflow: 'auto' }}
42 >
43 {/* This is the scroll handle, it is supposed to be focused with keyboard and scroll a wide codebox horizontally */}
44 + {/* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */}
45 <div aria-hidden="true" tabIndex={0} style={scrollHandleStyle} ref={scrollHandleRef} aria-label={code}>&nbsp;</div>
46 {tokens.map((line, i) => (
47 - <div key={i} {...getLineProps({line, key: i})}>
47 + <div key={i} {...getLineProps({ line, key: i })}>
48 {line.map((token, key) => (
49 <Text
50 key={key}
51 fontFamily="mono"
52 fontSize={1}
53 - {...getTokenProps({token, key})}
53 + {...getTokenProps({ token, key })}
54 />
55 ))}
56 </div>
@@ -64,17 +64,18 @@ function Code({className, children, live, noinline}) {
64 /**
65 * Resize the scroll handle to the size of the code contents, since the former has to be positioned absolutely.
66 */
67 - function resizeScrollHandle() {
67 + function resizeScrollHandle () {
68 // Skip if already resized.
69 - if (typeof scrollHandleStyle.width !== 'undefined')
69 + if (typeof scrollHandleStyle.width !== 'undefined') {
70 return
71 + }
72
73 const node = scrollHandleRef.current
74 node.parentElement.style.position = 'relative'
75 const computedStyle = getComputedStyle(node.parentElement)
76 const height = node.parentElement.clientHeight - parseInt(computedStyle.paddingTop, 10) - parseInt(computedStyle.paddingBottom, 10)
77 const width = node.parentElement.scrollWidth - parseInt(computedStyle.paddingLeft, 10) - parseInt(computedStyle.paddingRight, 10)
77 - setScrollHandleStyle({...scrollHandleStyle, height, width})
78 + setScrollHandleStyle({ ...scrollHandleStyle, height, width })
79 }
80 }
81
theme/src/components/container.js
+2 -2
@@ -1,7 +1,7 @@
1 -import {Box} from '@primer/components'
1 +import { Box } from '@primer/components'
2 import React from 'react'
3
4 -function Container({children}) {
4 +function Container ({ children }) {
5 return (
6 <Box id="skip-nav" width="100%" maxWidth={960} p={5} mx="auto">
7 {children}
theme/src/components/contributors.js
+3 -3
@@ -1,12 +1,12 @@
1 -import {Avatar, Flex, Link, Text, Tooltip} from '@primer/components'
2 -import {format} from 'date-fns'
1 +import { Avatar, Flex, Link, Text, Tooltip } from '@primer/components'
2 +import { format } from 'date-fns'
3 import uniqBy from 'lodash.uniqby'
4 import pluralize from 'pluralize'
5 import React from 'react'
6
7 // The `contributors` array is fetched in gatsby-node.js at build-time.
8
9 -function Contributors({contributors}) {
9 +function Contributors ({ contributors }) {
10 const uniqueContributors = uniqBy(contributors, 'login')
11 const latestContributor = uniqueContributors[0] || {}
12
theme/src/components/dark-button.js
+1 -1
@@ -1,4 +1,4 @@
1 -import {ButtonOutline, themeGet} from '@primer/components'
1 +import { ButtonOutline, themeGet } from '@primer/components'
2 import styled from 'styled-components'
3
4 const DarkButton = styled(ButtonOutline)`
theme/src/components/dark-text-input.js
+1 -1
@@ -1,4 +1,4 @@
1 -import {TextInput, themeGet} from '@primer/components'
1 +import { TextInput, themeGet } from '@primer/components'
2 import styled from 'styled-components'
3
4 const DarkTextInput = styled(TextInput)`
theme/src/components/details.js
+9 -7
@@ -25,15 +25,17 @@ const DetailsReset = styled.details`
25 }
26 `
27
28 -function getRenderer(children) {
28 +function getRenderer (children) {
29 return typeof children === 'function' ? children : () => children
30 }
31
32 -function Details({children, overlay, render = getRenderer(children), ...rest}) {
32 +function Details ({ children, overlay, render = getRenderer(children), ...rest }) {
33 const [open, setOpen] = React.useState(Boolean(rest.open))
34
35 - function toggle(event) {
36 - if (event) event.preventDefault()
35 + function toggle (event) {
36 + if (event) {
37 + event.preventDefault()
38 + }
39 if (overlay) {
40 openMenu()
41 } else {
@@ -41,21 +43,21 @@ function Details({children, overlay, render = getRenderer(children), ...rest}) {
43 }
44 }
45
44 - function openMenu() {
46 + function openMenu () {
47 if (!open) {
48 setOpen(true)
49 document.addEventListener('click', closeMenu)
50 }
51 }
52
51 - function closeMenu() {
53 + function closeMenu () {
54 setOpen(false)
55 document.removeEventListener('click', closeMenu)
56 }
57
58 return (
59 <DetailsReset {...rest} open={open}>
58 - {render({open, toggle})}
60 + {render({ open, toggle })}
61 </DetailsReset>
62 )
63 }
theme/src/components/do-dont.js
+7 -7
@@ -1,9 +1,9 @@
1 -import {Flex, Grid, Text, StyledOcticon} from '@primer/components'
2 -import {CheckIcon, XIcon} from '@primer/octicons-react'
1 +import { Flex, Grid, Text, StyledOcticon } from '@primer/components'
2 +import { CheckIcon, XIcon } from '@primer/octicons-react'
3 import React from 'react'
4 import Caption from './caption'
5
6 -export function DoDontContainer({stacked, children}) {
6 +export function DoDontContainer ({ stacked, children }) {
7 return (
8 <Grid
9 gridTemplateColumns={['1fr', null, stacked ? '1fr' : '1fr 1fr']}
@@ -19,19 +19,19 @@ DoDontContainer.defaultProps = {
19 stacked: false,
20 }
21
22 -export function Do(props) {
22 +export function Do (props) {
23 return <DoDontBase {...props} text="Do" icon={CheckIcon} iconBg="green.5" />
24 }
25
26 -export function Dont(props) {
26 +export function Dont (props) {
27 return <DoDontBase {...props} text="Don't" icon={XIcon} iconBg="red.5" />
28 }
29
30 -function DoDontBase({src, alt, children, text, icon: Icon, iconBg}) {
30 +function DoDontBase ({ src, alt, children, text, icon: Icon, iconBg }) {
31 return (
32 <Flex flexDirection="column">
33 <Flex alignSelf="start" flexDirection="row" alignItems="center" mb="2">
34 - <Flex bg={iconBg} color="white" p={1} style={{borderRadius: '50%'}}>
34 + <Flex bg={iconBg} color="white" p={1} style={{ borderRadius: '50%' }}>
35 <StyledOcticon icon={Icon} verticalAlign="middle" size={12} />
36 </Flex>
37 <Text fontWeight="bold" color="gray.9" ml={2}>
theme/src/components/drawer.js
+14 -13
@@ -1,12 +1,13 @@
1 -import {Fixed} from '@primer/components'
2 -import {AnimatePresence, motion} from 'framer-motion'
1 +import { Fixed } from '@primer/components'
2 +import { AnimatePresence, motion } from 'framer-motion'
3 import React from 'react'
4 -import {FocusOn} from 'react-focus-on'
4 +import { FocusOn } from 'react-focus-on'
5
6 -function Drawer({isOpen, onDismiss, children}) {
6 +function Drawer ({ isOpen, onDismiss, children }) {
7 return (
8 <AnimatePresence>
9 {isOpen ? (
10 + // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
11 <div
12 // These event handlers fix a bug that caused links below the fold
13 // to be unclickable in macOS Safari.
@@ -18,10 +19,10 @@ function Drawer({isOpen, onDismiss, children}) {
19 <Fixed
20 key="overlay"
21 as={motion.div}
21 - initial={{opacity: 0}}
22 - animate={{opacity: 1}}
23 - exit={{opacity: 0}}
24 - transition={{type: 'tween'}}
22 + initial={{ opacity: 0 }}
23 + animate={{ opacity: 1 }}
24 + exit={{ opacity: 0 }}
25 + transition={{ type: 'tween' }}
26 top={0}
27 right={0}
28 bottom={0}
@@ -33,16 +34,16 @@ function Drawer({isOpen, onDismiss, children}) {
34 <Fixed
35 key="drawer"
36 as={motion.div}
36 - initial={{x: '100%'}}
37 - animate={{x: 0}}
38 - exit={{x: '100%'}}
39 - transition={{type: 'tween', duration: 0.2}}
37 + initial={{ x: '100%' }}
38 + animate={{ x: 0 }}
39 + exit={{ x: '100%' }}
40 + transition={{ type: 'tween', duration: 0.2 }}
41 width={300}
42 top={0}
43 right={0}
44 bottom={0}
45 bg="gray.0"
45 - style={{zIndex: 1}}
46 + style={{ zIndex: 1 }}
47 >
48 {children}
49 </Fixed>
theme/src/components/frame.js
+6 -6
@@ -1,14 +1,14 @@
1 import React from 'react'
2 -import FrameComponent, {FrameContextConsumer} from 'react-frame-component'
3 -import {StyleSheetManager} from 'styled-components'
2 +import FrameComponent, { FrameContextConsumer } from 'react-frame-component'
3 +import { StyleSheetManager } from 'styled-components'
4 import Measure from 'react-measure'
5
6 -function Frame({children}) {
6 +function Frame ({ children }) {
7 const [height, setHeight] = React.useState('auto')
8 return (
9 - <FrameComponent style={{width: '100%', border: 0, height}}>
9 + <FrameComponent style={{ width: '100%', border: 0, height }}>
10 <FrameContextConsumer>
11 - {({document}) => {
11 + {({ document }) => {
12 // By default, styled-components injects styles in the head of the page.
13 // However, styles from the page's head don't apply inside iframes.
14 // We're using StyleSheetManager to make styled-components inject styles
@@ -22,7 +22,7 @@ function Frame({children}) {
22 bounds={true}
23 onResize={rect => setHeight(rect.bounds.height)}
24 >
25 - {({measureRef}) => <div ref={measureRef}>{children}</div>}
25 + {({ measureRef }) => <div ref={measureRef}>{children}</div>}
26 </Measure>
27 </StyleSheetManager>
28 )
theme/src/components/head.js
+1 -1
@@ -2,7 +2,7 @@ import React from 'react'
2 import Helmet from 'react-helmet'
3 import useSiteMetdata from '../use-site-metadata'
4
5 -function Head(props) {
5 +function Head (props) {
6 const siteMetadata = useSiteMetdata()
7 const title = props.title
8 ? `${props.title} | ${siteMetadata.title}`
theme/src/components/header.js
+10 -11
@@ -1,18 +1,17 @@
1 -import {Box, Flex, Link, Sticky} from '@primer/components'
1 +import { Box, Flex, Link, Sticky } from '@primer/components'
2 import {
3 SearchIcon,
4 ThreeBarsIcon,
5 } from '@primer/octicons-react'
6 -import {Link as GatsbyLink} from 'gatsby'
6 +import { Link as GatsbyLink } from 'gatsby'
7 import React from 'react'
8 -import styled from 'styled-components';
9 -import {ThemeContext} from 'styled-components'
8 +import styled, { ThemeContext } from 'styled-components'
9 import headerNavItems from '../header-nav.yml'
10 import useSiteMetadata from '../use-site-metadata'
11 import DarkButton from './dark-button'
12 import MobileSearch from './mobile-search'
14 -import NavDrawer, {useNavDrawerState} from './nav-drawer'
15 -import NavDropdown, {NavDropdownItem} from './nav-dropdown'
13 +import NavDrawer, { useNavDrawerState } from './nav-drawer'
14 +import NavDropdown, { NavDropdownItem } from './nav-dropdown'
15 import Search from './search'
16 import NpmLogo from './npm-logo'
17
@@ -23,16 +22,16 @@ const NpmHeaderBar = styled(Box)`
22 background-image: linear-gradient(139deg, #fb8817, #ff4b01, #c12127, #e02aff);
23 `
24
26 -function Header({location, isSearchEnabled = true}) {
25 +function Header ({ location, isSearchEnabled = true }) {
26 const theme = React.useContext(ThemeContext)
27 const [isNavDrawerOpen, setIsNavDrawerOpen] = useNavDrawerState(
29 - theme.breakpoints[2],
28 + theme.breakpoints[2]
29 )
30 const [isMobileSearchOpen, setIsMobileSearchOpen] = React.useState(false)
31 const siteMetadata = useSiteMetadata()
32
34 - const logoStyle = { 'color': '#cb0000', 'marginRight': '16px' };
35 - const titleStyle = { 'color': '#dddddd', 'fontWeight': '600', 'display': 'flex', 'alignItems': 'center' };
33 + const logoStyle = { color: '#cb0000', marginRight: '16px' }
34 + const titleStyle = { color: '#dddddd', fontWeight: '600', display: 'flex', alignItems: 'center' }
35
36 return (
37 <Sticky role="banner">
@@ -96,7 +95,7 @@ function Header({location, isSearchEnabled = true}) {
95 )
96 }
97
99 -function HeaderNavItems({items}) {
98 +function HeaderNavItems ({ items }) {
99 return (
100 <Flex alignItems="center" color="gray.2">
101 {items.map((item, index) => {
theme/src/components/heading.js
+10 -10
@@ -1,11 +1,11 @@
1 -import {Heading, Link} from '@primer/components'
2 -import {LinkIcon} from '@primer/octicons-react'
1 +import { Heading, Link } from '@primer/components'
2 +import { LinkIcon } from '@primer/octicons-react'
3 import themeGet from '@styled-system/theme-get'
4 import GithubSlugger from 'github-slugger'
5 import React from 'react'
6 import textContent from 'react-addons-text-content'
7 import styled from 'styled-components'
8 -import {HEADER_HEIGHT} from './header'
8 +import { HEADER_HEIGHT } from './header'
9
10 const StyledHeading = styled(Heading)`
11 margin-top: ${themeGet('space.4')};
@@ -22,7 +22,7 @@ const StyledHeading = styled(Heading)`
22 }
23 `
24
25 -function MarkdownHeading({children, ...props}) {
25 +function MarkdownHeading ({ children, ...props }) {
26 const slugger = new GithubSlugger()
27 const text = children ? textContent(children) : ''
28 const id = text ? slugger.slug(text) : ''
@@ -43,31 +43,31 @@ function MarkdownHeading({children, ...props}) {
43 )
44 }
45
46 -const StyledH1 = styled(StyledHeading).attrs({as: 'h1'})`
46 +const StyledH1 = styled(StyledHeading).attrs({ as: 'h1' })`
47 padding-bottom: ${themeGet('space.1')};
48 font-size: ${themeGet('fontSizes.5')};
49 border-bottom: 1px solid ${themeGet('colors.gray.2')};
50 `
51
52 -const StyledH2 = styled(StyledHeading).attrs({as: 'h2'})`
52 +const StyledH2 = styled(StyledHeading).attrs({ as: 'h2' })`
53 padding-bottom: ${themeGet('space.1')};
54 font-size: ${themeGet('fontSizes.4')};
55 border-bottom: 1px solid ${themeGet('colors.gray.2')};
56 `
57
58 -const StyledH3 = styled(StyledHeading).attrs({as: 'h3'})`
58 +const StyledH3 = styled(StyledHeading).attrs({ as: 'h3' })`
59 font-size: ${themeGet('fontSizes.3')};
60 `
61
62 -const StyledH4 = styled(StyledHeading).attrs({as: 'h4'})`
62 +const StyledH4 = styled(StyledHeading).attrs({ as: 'h4' })`
63 font-size: ${themeGet('fontSizes.2')};
64 `
65
66 -const StyledH5 = styled(StyledHeading).attrs({as: 'h5'})`
66 +const StyledH5 = styled(StyledHeading).attrs({ as: 'h5' })`
67 font-size: ${themeGet('fontSizes.1')};
68 `
69
70 -const StyledH6 = styled(StyledHeading).attrs({as: 'h6'})`
70 +const StyledH6 = styled(StyledHeading).attrs({ as: 'h6' })`
71 font-size: ${themeGet('fontSizes.1')};
72 color: ${themeGet('colors.gray.5')};
73 `
theme/src/components/hero-layout.js
+4 -4
@@ -1,4 +1,4 @@
1 -import {Box, Flex} from '@primer/components'
1 +import { Box, Flex } from '@primer/components'
2 import React from 'react'
3 import Container from './container'
4 import PageFooter from './page-footer'
@@ -7,8 +7,8 @@ import Header from './header'
7 import Hero from './hero'
8 import Sidebar from './sidebar'
9
10 -function HeroLayout({children, pageContext, location}) {
11 - const {additionalContributors = []} = pageContext.frontmatter
10 +function HeroLayout ({ children, pageContext, location }) {
11 + const { additionalContributors = [] } = pageContext.frontmatter
12
13 return (
14 <Flex flexDirection="column" minHeight="100vh">
@@ -32,7 +32,7 @@ function HeroLayout({children, pageContext, location}) {
32 editOnGitHub={pageContext.themeOptions.editOnGitHub}
33 editUrl={pageContext.themeOptions.editUrl}
34 contributors={pageContext.contributors.concat(
35 - additionalContributors.map(login => ({login})),
35 + additionalContributors.map(login => ({ login }))
36 )}
37 />
38 </Container>
theme/src/components/hero.js
+3 -3
@@ -1,10 +1,10 @@
1 -import {Box, Heading, Text} from '@primer/components'
1 +import { Box, Heading, Text } from '@primer/components'
2 import React from 'react'
3 import useSiteMetadata from '../use-site-metadata'
4 import Container from './container'
5
6 -function Hero() {
7 - const {title, description} = useSiteMetadata()
6 +function Hero () {
7 + const { title, description } = useSiteMetadata()
8
9 return (
10 <Box bg="black" py={6}>
theme/src/components/index.js
+46 -45
@@ -1,54 +1,55 @@
1 -import React from 'react';
1 +import React from 'react'
2 +// eslint-disable-next-line import/no-unresolved
3 import { Location } from '@reach/router'
3 -import {Box, Link} from '@primer/components'
4 -import {Link as GatsbyLink} from 'gatsby'
4 +import { Box, Link } from '@primer/components'
5 +import { Link as GatsbyLink } from 'gatsby'
6 import NavHierarchy from '../nav-hierarchy'
7
7 -function showHierarchy(items, props, depth = 1) {
8 - let hierarchy;
9 -
10 - if (props.depth && depth > props.depth) {
11 - return null;
12 - }
13 -
14 - return (
15 - <Box as="ul">
16 - {items.map(item => (
17 - <Box as="li" key={item.url}>
18 - <Link as={GatsbyLink} key={item.title} to={item.url}>{item.title}</Link>
19 - {item.description != null ? (
20 - <>
21 - <Box style={{fontSize: '0.85em', marginBottom: '0.5em'}}>
22 - {item.description}
23 - </Box>
24 - </>
25 - ) : null}
26 - {(hierarchy = NavHierarchy.getHierarchy(item, props)) != null ? showHierarchy(hierarchy, props, depth + 1) : null}
27 - </Box>
28 - ))}
8 +function showHierarchy (items, props, depth = 1) {
9 + let hierarchy
10 +
11 + if (props.depth && depth > props.depth) {
12 + return null
13 + }
14 +
15 + return (
16 + <Box as="ul">
17 + {items.map(item => (
18 + <Box as="li" key={item.url}>
19 + <Link as={GatsbyLink} key={item.title} to={item.url}>{item.title}</Link>
20 + {item.description != null ? (
21 + <>
22 + <Box style={{ fontSize: '0.85em', marginBottom: '0.5em' }}>
23 + {item.description}
24 + </Box>
25 + </>
26 + ) : null}
27 + {(hierarchy = NavHierarchy.getHierarchy(item, props)) != null ? showHierarchy(hierarchy, props, depth + 1) : null}
28 </Box>
30 - );
29 + ))}
30 + </Box>
31 + )
32 }
33
33 -function Index(props) {
34 - return (
35 - <Location>
36 - {({location}) => {
37 - let path = NavHierarchy.getLocation(location.pathname);
38 - let root = props.root ? props.root : path;
39 - root = root.replace(/\/+$/g, '');
40 -
41 - const rootItem = NavHierarchy.getItem(root);
42 - const hierarchy = NavHierarchy.getHierarchy(rootItem, props);
43 -
44 - if (!hierarchy) {
45 - throw new Error(`could not find entry for ${root}`);
46 - }
47 -
48 - return showHierarchy(hierarchy, props);
49 - }}
50 - </Location>
51 - );
34 +function Index (props) {
35 + return (
36 + <Location>
37 + {({ location }) => {
38 + const path = NavHierarchy.getLocation(location.pathname)
39 + let root = props.root ? props.root : path
40 + root = root.replace(/\/+$/g, '')
41 +
42 + const rootItem = NavHierarchy.getItem(root)
43 + const hierarchy = NavHierarchy.getHierarchy(rootItem, props)
44 +
45 + if (!hierarchy) {
46 + throw new Error(`could not find entry for ${root}`)
47 + }
48 +
49 + return showHierarchy(hierarchy, props)
50 + }}
51 + </Location>
52 + )
53 }
54
55 export default Index
theme/src/components/layout.js
+14 -14
@@ -9,11 +9,11 @@ import {
9 StyledOcticon,
10 Text,
11 } from '@primer/components'
12 -import {ChevronDownIcon, ChevronRightIcon} from '@primer/octicons-react'
12 +import { ChevronDownIcon, ChevronRightIcon } from '@primer/octicons-react'
13 import React from 'react'
14 -import {MDXProvider} from "@mdx-js/react"
14 +import { MDXProvider } from '@mdx-js/react'
15 import Head from './head'
16 -import Header, {HEADER_HEIGHT} from './header'
16 +import Header, { HEADER_HEIGHT } from './header'
17 import Index from './index'
18 import Note from './note'
19 import PageFooter from './page-footer'
@@ -27,7 +27,7 @@ import TableOfContents from './table-of-contents'
27 import VariantSelect from './variant-select'
28 import NavHierarchy from '../nav-hierarchy'
29
30 -function Layout({children, pageContext, location}) {
30 +function Layout ({ children, pageContext, location }) {
31 const {
32 title,
33 description,
@@ -36,7 +36,7 @@ function Layout({children, pageContext, location}) {
36 additionalContributors = [],
37 } = pageContext.frontmatter
38
39 - const variantRoot = NavHierarchy.getVariantRoot(location.pathname);
39 + const variantRoot = NavHierarchy.getVariantRoot(location.pathname)
40
41 return (
42 <MDXProvider components={{
@@ -44,13 +44,13 @@ function Layout({children, pageContext, location}) {
44 Note,
45 Prompt,
46 PromptReply,
47 - Screenshot
47 + Screenshot,
48 }}>
49
50 <Flex flexDirection="column" minHeight="100vh">
51 <Head title={title} description={description} />
52 <Header location={location} isSearchEnabled={pageContext.isSearchEnabled} />
53 - <Flex flex="1 1 auto" flexDirection="row" css={{zIndex: 0}} role="main">
53 + <Flex flex="1 1 auto" flexDirection="row" css={{ zIndex: 0 }} role="main">
54 <Box display={['none', null, null, 'block']}>
55 <Sidebar
56 editOnGitHub={
@@ -73,10 +73,10 @@ function Layout({children, pageContext, location}) {
73 gridRowGap={3}
74 mx="auto"
75 p={[5, 6, null, 7]}
76 - css={{alignItems: 'start', alignSelf: 'start'}}
76 + css={{ alignItems: 'start', alignSelf: 'start' }}
77 role="region"
78 >
79 - <Box css={{gridArea: 'heading'}}>
79 + <Box css={{ gridArea: 'heading' }}>
80 <BorderBox
81 borderWidth={0}
82 borderBottomWidth={1}
@@ -91,7 +91,7 @@ function Layout({children, pageContext, location}) {
91 </Box>
92 </BorderBox>
93 {variantRoot != null ? (
94 - <Box css={{'margin-top': '25px'}}>
94 + <Box css={{ 'margin-top': '25px' }}>
95 <VariantSelect overlay={true} direction="se" menuWidth="min(30ch, 500px)" root={variantRoot} location={location} />
96 </Box>
97 ) : null}
@@ -99,7 +99,7 @@ function Layout({children, pageContext, location}) {
99 {pageContext.tableOfContents.items ? (
100 <Position
101 display={['none', null, 'block']}
102 - css={{gridArea: 'table-of-contents', overflow: 'auto'}}
102 + css={{ gridArea: 'table-of-contents', overflow: 'auto' }}
103 position="sticky"
104 top={HEADER_HEIGHT + 24}
105 mt="6px"
@@ -114,7 +114,7 @@ function Layout({children, pageContext, location}) {
114 <TableOfContents items={pageContext.tableOfContents.items} labelId='table-of-content-label'/>
115 </Position>
116 ) : null}
117 - <Box css={{gridArea: 'content'}}>
117 + <Box css={{ gridArea: 'content' }}>
118 {status || source ? (
119 <Flex mb={3} alignItems="center">
120 {status ? <StatusLabel status={status} /> : null}
@@ -125,7 +125,7 @@ function Layout({children, pageContext, location}) {
125 {pageContext.tableOfContents.items ? (
126 <Box display={['block', null, 'none']} mb={3}>
127 <Details>
128 - {({open}) => (
128 + {({ open }) => (
129 <>
130 <Text as="summary" fontWeight="bold">
131 {open ? (
@@ -150,7 +150,7 @@ function Layout({children, pageContext, location}) {
150 editOnGitHub={pageContext.themeOptions.editOnGitHub}
151 editUrl={pageContext.editUrl}
152 contributors={pageContext.contributors.concat(
153 - additionalContributors.map((login) => ({login})),
153 + additionalContributors.map((login) => ({ login }))
154 )}
155 />
156 </Box>
theme/src/components/live-code.js
+7 -7
@@ -1,10 +1,10 @@
1 -import {Absolute, BorderBox, Relative, Text} from '@primer/components'
1 +import { Absolute, BorderBox, Relative, Text } from '@primer/components'
2 import htmlReactParser from 'html-react-parser'
3 import githubTheme from 'prism-react-renderer/themes/github'
4 import React, { useState } from 'react'
5 import reactElementToJsxString from 'react-element-to-jsx-string'
6 -import {LiveEditor, LiveError, LivePreview, LiveProvider} from 'react-live'
7 -import {ThemeContext} from 'styled-components'
6 +import { LiveEditor, LiveError, LivePreview, LiveProvider } from 'react-live'
7 +import { ThemeContext } from 'styled-components'
8 import scope from '../live-code-scope'
9 import ClipboardCopy from './clipboard-copy'
10 import LivePreviewWrapper from './live-preview-wrapper'
@@ -14,7 +14,7 @@ const languageTransformers = {
14 jsx: jsx => wrapWithFragment(jsx),
15 }
16
17 -function htmlToJsx(html) {
17 +function htmlToJsx (html) {
18 try {
19 const reactElement = htmlReactParser(removeNewlines(html))
20 // The output of htmlReactParser could be a single React element
@@ -26,15 +26,15 @@ function htmlToJsx(html) {
26 }
27 }
28
29 -function removeNewlines(string) {
29 +function removeNewlines (string) {
30 return string.replace(/(\r\n|\n|\r)/gm, '')
31 }
32
33 -function wrapWithFragment(jsx) {
33 +function wrapWithFragment (jsx) {
34 return `<React.Fragment>${jsx}</React.Fragment>`
35 }
36
37 -function LiveCode({code, language, noinline}) {
37 +function LiveCode ({ code, language, noinline }) {
38 const theme = React.useContext(ThemeContext)
39 const [liveCode, setLiveCode] = useState(code)
40 const handleChange = (updatedLiveCode) => setLiveCode(updatedLiveCode)
theme/src/components/live-preview-wrapper.js
+2 -2
@@ -1,10 +1,10 @@
1 -import {BaseStyles, Box} from '@primer/components'
1 +import { BaseStyles, Box } from '@primer/components'
2 import Frame from './frame'
3 import React from 'react'
4
5 // Users can shadow this file to wrap live previews.
6 // This is useful for applying global styles.
7 -function LivePreviewWrapper({children}) {
7 +function LivePreviewWrapper ({ children }) {
8 return (
9 <Frame>
10 <BaseStyles>
theme/src/components/mobile-search.js
+18 -18
@@ -1,38 +1,38 @@
1 -import {Absolute, Fixed, Flex} from '@primer/components'
2 -import {XIcon} from '@primer/octicons-react'
1 +import { Absolute, Fixed, Flex } from '@primer/components'
2 +import { XIcon } from '@primer/octicons-react'
3 import Downshift from 'downshift'
4 -import {AnimatePresence, motion} from 'framer-motion'
5 -import {navigate} from 'gatsby'
4 +import { AnimatePresence, motion } from 'framer-motion'
5 +import { navigate } from 'gatsby'
6 import React from 'react'
7 -import {FocusOn} from 'react-focus-on'
7 +import { FocusOn } from 'react-focus-on'
8 import useSearch from '../use-search'
9 import DarkButton from './dark-button'
10 import DarkTextInput from './dark-text-input'
11 import SearchResults from './search-results'
12 import useSiteMetadata from '../use-site-metadata'
13
14 -function stateReducer(state, changes) {
14 +function stateReducer (state, changes) {
15 switch (changes.type) {
16 case Downshift.stateChangeTypes.changeInput:
17 if (!changes.inputValue) {
18 // Close the menu if the input is empty.
19 - return {...changes, isOpen: false}
19 + return { ...changes, isOpen: false }
20 }
21 return changes
22 case Downshift.stateChangeTypes.blurInput:
23 // Don't let a blur event change the state of `inputValue` or `isOpen`.
24 - return {...changes, inputValue: state.inputValue, isOpen: state.isOpen}
24 + return { ...changes, inputValue: state.inputValue, isOpen: state.isOpen }
25 default:
26 return changes
27 }
28 }
29
30 -function MobileSearch({isOpen, onDismiss}) {
30 +function MobileSearch ({ isOpen, onDismiss }) {
31 const [query, setQuery] = React.useState('')
32 const results = useSearch(query)
33 const siteMetadata = useSiteMetadata()
34
35 - function handleDismiss() {
35 + function handleDismiss () {
36 setQuery('')
37 onDismiss()
38 }
@@ -44,9 +44,9 @@ function MobileSearch({isOpen, onDismiss}) {
44 <Fixed top={0} left={0} right={0} bottom={0} zIndex={1}>
45 <Absolute
46 as={motion.div}
47 - initial={{opacity: 0}}
48 - animate={{opacity: 1}}
49 - exit={{opacity: 0}}
47 + initial={{ opacity: 0 }}
48 + animate={{ opacity: 1 }}
49 + exit={{ opacity: 0 }}
50 top={0}
51 left={0}
52 right={0}
@@ -84,11 +84,11 @@ function MobileSearch({isOpen, onDismiss}) {
84 >
85 <Flex bg="gray.9" color="white" p={3} flex="0 0 auto">
86 <motion.div
87 - initial={{scaleX: 0.1}}
88 - animate={{scaleX: 1}}
89 - exit={{scaleX: 0.1, transition: {duration: 0.1}}}
90 - transition={{type: 'tween', duration: 0.2}}
91 - style={{width: '100%', originX: '100%'}}
87 + initial={{ scaleX: 0.1 }}
88 + animate={{ scaleX: 1 }}
89 + exit={{ scaleX: 0.1, transition: { duration: 0.1 } }}
90 + transition={{ type: 'tween', duration: 0.2 }}
91 + style={{ width: '100%', originX: '100%' }}
92 >
93 <DarkTextInput
94 {...getInputProps({
theme/src/components/nav-drawer.js
+9 -9
@@ -1,6 +1,6 @@
1 -import {BorderBox, Flex, Link, Text} from '@primer/components'
2 -import {ChevronDownIcon, ChevronUpIcon, XIcon} from '@primer/octicons-react'
3 -import {Link as GatsbyLink} from 'gatsby'
1 +import { BorderBox, Flex, Link, Text } from '@primer/components'
2 +import { ChevronDownIcon, ChevronUpIcon, XIcon } from '@primer/octicons-react'
3 +import { Link as GatsbyLink } from 'gatsby'
4 import debounce from 'lodash.debounce'
5 import React from 'react'
6 import navItems from '../nav.yml'
@@ -11,7 +11,7 @@ import Details from './details'
11 import Drawer from './drawer'
12 import NavItems from './nav-items'
13
14 -export function useNavDrawerState(breakpoint) {
14 +export function useNavDrawerState (breakpoint) {
15 // Handle string values from themes with units at the end
16 if (typeof breakpoint === 'string') {
17 breakpoint = parseInt(breakpoint, 10)
@@ -42,7 +42,7 @@ export function useNavDrawerState(breakpoint) {
42 return [isOpen, setOpen]
43 }
44
45 -function NavDrawer({location, isOpen, onDismiss}) {
45 +function NavDrawer ({ location, isOpen, onDismiss }) {
46 const siteMetadata = useSiteMetadata()
47 return (
48 <Drawer isOpen={isOpen} onDismiss={onDismiss}>
@@ -50,7 +50,7 @@ function NavDrawer({location, isOpen, onDismiss}) {
50 flexDirection="column"
51 height="100%"
52 bg="gray.0"
53 - style={{overflow: 'auto', WebkitOverflowScrolling: 'touch'}}
53 + style={{ overflow: 'auto', WebkitOverflowScrolling: 'touch' }}
54 >
55 <Flex flexDirection="column" flex="1 0 auto" color="gray.7" bg="gray.0">
56 <BorderBox
@@ -102,7 +102,7 @@ function NavDrawer({location, isOpen, onDismiss}) {
102 )
103 }
104
105 -function HeaderNavItems({items}) {
105 +function HeaderNavItems ({ items }) {
106 return items.map((item, index) => {
107 return (
108 <BorderBox
@@ -115,9 +115,9 @@ function HeaderNavItems({items}) {
115 >
116 {item.children ? (
117 <Details key={index}>
118 - {({open, toggle}) => (
118 + {({ open, toggle }) => (
119 <>
120 - <summary onClick={toggle} style={{cursor: 'pointer'}}>
120 + <summary onClick={toggle} style={{ cursor: 'pointer' }}>
121 <Flex alignItems="center" justifyContent="space-between">
122 <Text>{item.title}</Text>
123 {open ? <ChevronUpIcon /> : <ChevronDownIcon />}
theme/src/components/nav-dropdown.js
+5 -5
@@ -1,15 +1,15 @@
1 -import {Absolute, BorderBox, StyledOcticon, Text, themeGet} from '@primer/components'
2 -import {ChevronDownIcon} from '@primer/octicons-react'
1 +import { Absolute, BorderBox, StyledOcticon, Text, themeGet } from '@primer/components'
2 +import { ChevronDownIcon } from '@primer/octicons-react'
3 import React from 'react'
4 import styled from 'styled-components'
5 import Details from './details'
6
7 -function NavDropdown({title, children}) {
7 +function NavDropdown ({ title, children }) {
8 return (
9 <Details overlay={true}>
10 - {({toggle}) => (
10 + {({ toggle }) => (
11 <>
12 - <summary style={{cursor: 'pointer'}} onClick={toggle}>
12 + <summary style={{ cursor: 'pointer' }} onClick={toggle}>
13 <Text>{title}</Text>
14 <StyledOcticon icon={ChevronDownIcon} ml={1} />
15 </summary>
theme/src/components/nav-items.js
+91 -91
@@ -1,6 +1,6 @@
1 -import {BorderBox, Box, Flex, StyledOcticon, Link, themeGet} from '@primer/components'
2 -import {LinkExternalIcon} from '@primer/octicons-react'
3 -import {Link as GatsbyLink} from 'gatsby'
1 +import { BorderBox, Box, Flex, StyledOcticon, Link, themeGet } from '@primer/components'
2 +import { LinkExternalIcon } from '@primer/octicons-react'
3 +import { Link as GatsbyLink } from 'gatsby'
4 import preval from 'preval.macro'
5 import React from 'react'
6 import styled from 'styled-components'
@@ -19,17 +19,17 @@ const repositoryUrl = preval`
19 `
20
21 const getActiveProps = (className) => (props) => {
22 - const location = NavHierarchy.getLocation(props.location.pathname);
23 - const href = NavHierarchy.getLocation(props.href);
22 + const location = NavHierarchy.getLocation(props.location.pathname)
23 + const href = NavHierarchy.getLocation(props.href)
24
25 if (NavHierarchy.isActiveUrl(location, href)) {
26 - return { className: `${className} active` };
26 + return { className: `${className} active` }
27 }
28
29 - return { className: `${className}` };
29 + return { className: `${className}` }
30 }
31
32 -const ActiveLink = ({className, children, ...props}) => (
32 +const ActiveLink = ({ className, children, ...props }) => (
33 <Link as={GatsbyLink} getProps={getActiveProps(className)} {...props}>
34 {children}
35 </Link>
@@ -87,102 +87,102 @@ const Description = styled(Box)`
87 }
88 `
89
90 -function topLevelItems(items, path) {
91 - if (items == null) {
92 - return null;
93 - }
94 -
95 - return (
96 - <>
97 - {items.map((item) => {
98 - const children = NavHierarchy.isActiveUrl(path, item.url) ? NavHierarchy.getHierarchy(item, { path: path, hideVariants: true }) : null;
99 -
100 - return (
101 - <BorderBox
102 - key={item.title}
103 - borderWidth={0}
104 - borderRadius={0}
105 - borderTopWidth={1}
106 - py={3}
107 - px={4}
108 - role="listitem"
109 - >
110 - <Flex flexDirection="column">
111 - <TopLevelLink to={item.url} key={item.title}>{item.title}</TopLevelLink>
112 - {secondLevelItems(children, path)}
113 - </Flex>
114 - </BorderBox>
115 - )
116 - })}
117 - </>
118 - );
119 -}
90 +function topLevelItems (items, path) {
91 + if (items == null) {
92 + return null
93 + }
94
121 -function secondLevelItems(items, path) {
122 - if (items == null) {
123 - return null;
124 - }
125 -
126 - return (
127 - <Flex flexDirection="column" mt={2} role="list">
128 - {items.map((item) => {
129 - const children = NavHierarchy.isActiveUrl(path, item.url) ? NavHierarchy.getHierarchy(item, { path: path, hideVariants: true }) : null;
130 - return(
131 - <Box key={item.title} role="listitem">
132 - <SecondLevelLink key={item.url} to={item.url}>
133 - {item.title}
134 - {item.description != null ? (
135 - <>
136 - <Description>{item.description}</Description>
137 - </>
138 - ) : null}
139 - </SecondLevelLink>
140 - {thirdLevelItems(children, path)}
141 - </Box>
142 - )
143 - })}
144 - </Flex>
145 - );
95 + return (
96 + <>
97 + {items.map((item) => {
98 + const children = NavHierarchy.isActiveUrl(path, item.url) ? NavHierarchy.getHierarchy(item, { path: path, hideVariants: true }) : null
99 +
100 + return (
101 + <BorderBox
102 + key={item.title}
103 + borderWidth={0}
104 + borderRadius={0}
105 + borderTopWidth={1}
106 + py={3}
107 + px={4}
108 + role="listitem"
109 + >
110 + <Flex flexDirection="column">
111 + <TopLevelLink to={item.url} key={item.title}>{item.title}</TopLevelLink>
112 + {secondLevelItems(children, path)}
113 + </Flex>
114 + </BorderBox>
115 + )
116 + })}
117 + </>
118 + )
119 }
120
148 -function thirdLevelItems(items, path) {
149 - if (items == null) {
150 - return null;
151 - }
121 +function secondLevelItems (items, path) {
122 + if (items == null) {
123 + return null
124 + }
125
153 - return (
154 - <Flex flexDirection="column" mt={2} role="list">
155 - {items.map((item) => (
126 + return (
127 + <Flex flexDirection="column" mt={2} role="list">
128 + {items.map((item) => {
129 + const children = NavHierarchy.isActiveUrl(path, item.url) ? NavHierarchy.getHierarchy(item, { path: path, hideVariants: true }) : null
130 + return (
131 <Box key={item.title} role="listitem">
157 - <ThirdLevelLink key={item.url} to={item.url}>
132 + <SecondLevelLink key={item.url} to={item.url}>
133 {item.title}
159 - </ThirdLevelLink>
134 + {item.description != null ? (
135 + <>
136 + <Description>{item.description}</Description>
137 + </>
138 + ) : null}
139 + </SecondLevelLink>
140 + {thirdLevelItems(children, path)}
141 </Box>
161 - ))}
162 - </Flex>
163 - )
142 + )
143 + })}
144 + </Flex>
145 + )
146 }
147
166 -function githubLink(props) {
167 - if (!repositoryUrl) {
168 - return null;
169 - }
148 +function thirdLevelItems (items) {
149 + if (items == null) {
150 + return null
151 + }
152 +
153 + return (
154 + <Flex flexDirection="column" mt={2} role="list">
155 + {items.map((item) => (
156 + <Box key={item.title} role="listitem">
157 + <ThirdLevelLink key={item.url} to={item.url}>
158 + {item.title}
159 + </ThirdLevelLink>
160 + </Box>
161 + ))}
162 + </Flex>
163 + )
164 +}
165
171 - return (
172 - <BorderBox borderWidth={0} borderTopWidth={1} borderRadius={0} py={5} px={4}>
173 - <Link href={repositoryUrl} color="inherit">
174 - <Flex justifyContent="space-between" alignItems="center" color="gray.5">
166 +function githubLink () {
167 + if (!repositoryUrl) {
168 + return null
169 + }
170 +
171 + return (
172 + <BorderBox borderWidth={0} borderTopWidth={1} borderRadius={0} py={5} px={4}>
173 + <Link href={repositoryUrl} color="inherit">
174 + <Flex justifyContent="space-between" alignItems="center" color="gray.5">
175 Edit on GitHub
176 - <StyledOcticon icon={LinkExternalIcon} color="gray.5" />
177 - </Flex>
178 - </Link>
179 - </BorderBox>
180 - );
176 + <StyledOcticon icon={LinkExternalIcon} color="gray.5" />
177 + </Flex>
178 + </Link>
179 + </BorderBox>
180 + )
181 }
182
183 -function NavItems(props) {
184 - const path = NavHierarchy.getLocation(props.location.pathname);
185 - const items = NavHierarchy.getHierarchy(null, { path: path, hideVariants: true });
183 +function NavItems (props) {
184 + const path = NavHierarchy.getLocation(props.location.pathname)
185 + const items = NavHierarchy.getHierarchy(null, { path: path, hideVariants: true })
186
187 return (
188 <>
theme/src/components/note.js
+21 -21
@@ -1,24 +1,24 @@
1 -import React from 'react';
2 -import {BorderBox} from '@primer/components';
1 +import React from 'react'
2 +import { BorderBox } from '@primer/components'
3
4 -function Note({children}) {
5 - return (
6 - <BorderBox
7 - borderWidth={1}
8 - borderRadius={0}
9 - borderColor='blue.1'
10 - backgroundColor='blue.0'
11 - px={3}
12 - py={2}
13 - my={4}
14 - >
15 - {React.Children.toArray(children).map((child, index, list) => (
16 - React.cloneElement(child, {
17 - style: index === list.length - 1 ? { marginBottom: '0' } : null,
18 - })
19 - ))}
20 - </BorderBox>
21 - );
4 +function Note ({ children }) {
5 + return (
6 + <BorderBox
7 + borderWidth={1}
8 + borderRadius={0}
9 + borderColor='blue.1'
10 + backgroundColor='blue.0'
11 + px={3}
12 + py={2}
13 + my={4}
14 + >
15 + {React.Children.toArray(children).map((child, index, list) => (
16 + React.cloneElement(child, {
17 + style: index === list.length - 1 ? { marginBottom: '0' } : null,
18 + })
19 + ))}
20 + </BorderBox>
21 + )
22 }
23
24 -export default Note;
24 +export default Note
theme/src/components/npm-logo.js
+5 -5
@@ -1,15 +1,15 @@
1 -import React from 'react';
1 +import React from 'react'
2
3 export default class NpmLogo extends React.Component {
4 - render() {
5 - const bgcolor = this.props.bg || "#cb0000";
6 - const fgcolor = this.props.fg || "#ffffff";
4 + render () {
5 + const bgcolor = this.props.bg || '#cb0000'
6 + const fgcolor = this.props.fg || '#ffffff'
7
8 return (
9 <svg height={this.props.size} width={this.props.size} viewBox="0 0 700 700" fill="currentColor" style={this.props.style} aria-hidden="true">
10 <polygon fill={bgcolor} points="0,700 700,700 700,0 0,0" />
11 <polygon fill={fgcolor} points="150,550 350,550 350,250 450,250 450,550 550,550 550,150 150,150 "/>
12 </svg>
13 - );
13 + )
14 }
15 }
theme/src/components/page-footer.js
+3 -3
@@ -1,9 +1,9 @@
1 -import {BorderBox, Grid, StyledOcticon, Link} from '@primer/components'
2 -import {PencilIcon} from '@primer/octicons-react'
1 +import { BorderBox, Grid, StyledOcticon, Link } from '@primer/components'
2 +import { PencilIcon } from '@primer/octicons-react'
3 import React from 'react'
4 import Contributors from './contributors'
5
6 -function PageFooter({ editOnGitHub, editUrl, contributors }) {
6 +function PageFooter ({ editOnGitHub, editUrl, contributors }) {
7 return editUrl || contributors.length > 0 ? (
8 <BorderBox borderWidth={0} borderTopWidth={1} mt={8} py={5}>
9 <Grid gridGap={4}>
theme/src/components/prompt-reply.js
+4 -4
@@ -1,7 +1,7 @@
1 -import React from 'react';
1 +import React from 'react'
2
3 -function PromptReply({children}) {
4 - return (<strong>{children}</strong>);
3 +function PromptReply ({ children }) {
4 + return (<strong>{children}</strong>)
5 }
6
7 -export default PromptReply;
7 +export default PromptReply
theme/src/components/prompt.js
+12 -12
@@ -1,18 +1,18 @@
1 import React from 'react'
2 -import {BorderBox, Text} from '@primer/components'
2 +import { BorderBox, Text } from '@primer/components'
3
4 -function Prompt({children}) {
4 +function Prompt ({ children }) {
5 return (
6 - <BorderBox
7 - as="pre"
8 - mt={0}
9 - mb={3}
10 - p={3}
11 - border={0}
12 - style={{color: 'rgb(57, 58, 52)', backgroundColor: 'rgb(246, 248, 250)', overflow: 'auto'}}
13 - >
14 - <Text fontFamily="mono" fontSize={1}>{children}</Text>
15 - </BorderBox>
6 + <BorderBox
7 + as="pre"
8 + mt={0}
9 + mb={3}
10 + p={3}
11 + border={0}
12 + style={{ color: 'rgb(57, 58, 52)', backgroundColor: 'rgb(246, 248, 250)', overflow: 'auto' }}
13 + >
14 + <Text fontFamily="mono" fontSize={1}>{children}</Text>
15 + </BorderBox>
16 )
17 }
18
theme/src/components/screenshot.js
+12 -12
@@ -1,18 +1,18 @@
1 -import React from 'react';
1 +import React from 'react'
2 import { withPrefix } from 'gatsby'
3
4 -function Screenshot(props) {
5 - if (!props.src) {
6 - throw new Error("src is required");
7 - }
4 +function Screenshot (props) {
5 + if (!props.src) {
6 + throw new Error('src is required')
7 + }
8
9 - if (!props.alt) {
10 - throw new Error("alt text is required");
11 - }
9 + if (!props.alt) {
10 + throw new Error('alt text is required')
11 + }
12
13 - return (
14 - <div><img src={withPrefix(props.src)} alt={props.alt} style={{'border': 'solid 1px #999999', 'marginTop': '15px', 'maxWidth': 'min(100%, 525px)', 'maxHeight': '300px'}} /></div>
15 - );
13 + return (
14 + <div><img src={withPrefix(props.src)} alt={props.alt} style={{ border: 'solid 1px #999999', marginTop: '15px', maxWidth: 'min(100%, 525px)', maxHeight: '300px' }} /></div>
15 + )
16 }
17
18 -export default Screenshot;
18 +export default Screenshot
theme/src/components/search-results.js
+9 -10
@@ -1,9 +1,9 @@
1 -import {Flex, Text} from '@primer/components'
1 +import { Flex, Text } from '@primer/components'
2 import React from 'react'
3 import useSiteMetadata from '../use-site-metadata'
4 import NavHierarchy from '../nav-hierarchy'
5
6 -function SearchResults({results, getItemProps, highlightedIndex}) {
6 +function SearchResults ({ results, getItemProps, highlightedIndex }) {
7 const siteMetadata = useSiteMetadata()
8
9 if (results.length === 0) {
@@ -25,7 +25,7 @@ function SearchResults({results, getItemProps, highlightedIndex}) {
25 py: 2,
26 color: highlightedIndex === index ? 'white' : 'gray.8',
27 bg: highlightedIndex === index ? 'blue.5' : 'transparent',
28 - style: {cursor: 'pointer'},
28 + style: { cursor: 'pointer' },
29 })}
30 >
31 <Text
@@ -39,15 +39,14 @@ function SearchResults({results, getItemProps, highlightedIndex}) {
39 ))
40 }
41
42 -function getBreadcrumbs(siteTitle, path) {
43 - const hierarchy = NavHierarchy.getItemHierarchy(path);
42 +function getBreadcrumbs (siteTitle, path) {
43 + const hierarchy = NavHierarchy.getItemHierarchy(path)
44
45 if (hierarchy) {
46 - hierarchy.pop();
47 - return hierarchy.map(item => item.shortName ? item.shortName : item.title);
48 - }
49 - else {
50 - return [ siteTitle ];
46 + hierarchy.pop()
47 + return hierarchy.map(item => item.shortName ? item.shortName : item.title)
48 + } else {
49 + return [siteTitle]
50 }
51 }
52
theme/src/components/search.js
+7 -7
@@ -1,18 +1,18 @@
1 -import {BorderBox, Position} from '@primer/components'
1 +import { BorderBox, Position } from '@primer/components'
2 import Downshift from 'downshift'
3 -import {navigate} from 'gatsby'
3 +import { navigate } from 'gatsby'
4 import React from 'react'
5 import useSearch from '../use-search'
6 import useSiteMetadata from '../use-site-metadata'
7 import DarkTextInput from './dark-text-input'
8 import SearchResults from './search-results'
9
10 -function stateReducer(state, changes) {
10 +function stateReducer (state, changes) {
11 switch (changes.type) {
12 case Downshift.stateChangeTypes.changeInput:
13 if (!changes.inputValue) {
14 // Close the menu if the input is empty.
15 - return {...changes, isOpen: false}
15 + return { ...changes, isOpen: false }
16 }
17 return changes
18 default:
@@ -20,7 +20,7 @@ function stateReducer(state, changes) {
20 }
21 }
22
23 -function Search() {
23 +function Search () {
24 const [query, setQuery] = React.useState('')
25 const results = useSearch(query)
26 const siteMetadata = useSiteMetadata()
@@ -51,7 +51,7 @@ function Search() {
51 isOpen,
52 highlightedIndex,
53 }) => (
54 - <Position {...getRootProps({position: 'relative'})}>
54 + <Position {...getRootProps({ position: 'relative' })}>
55 <DarkTextInput
56 {...getInputProps({
57 placeholder: `Search ${siteMetadata.title}`,
@@ -73,7 +73,7 @@ function Search() {
73 py={1}
74 boxShadow="medium"
75 bg="white"
76 - style={{overflow: 'auto'}}
76 + style={{ overflow: 'auto' }}
77 >
78 <SearchResults
79 results={results}
theme/src/components/sidebar.js
+4 -4
@@ -1,10 +1,10 @@
1 -import {BorderBox, Flex, Position} from '@primer/components'
1 +import { BorderBox, Flex, Position } from '@primer/components'
2 import React from 'react'
3 import navItems from '../nav.yml'
4 -import {HEADER_HEIGHT} from './header'
4 +import { HEADER_HEIGHT } from './header'
5 import NavItems from './nav-items'
6
7 -function Sidebar({location, editOnGitHub}) {
7 +function Sidebar ({ location, editOnGitHub }) {
8 return (
9 <Position
10 position="sticky"
@@ -20,7 +20,7 @@ function Sidebar({location, editOnGitHub}) {
20 borderRightWidth={1}
21 borderRadius={0}
22 height="100%"
23 - style={{overflow: 'auto'}}
23 + style={{ overflow: 'auto' }}
24 >
25 <Flex flexDirection="column" role="list">
26 <NavItems location={location} items={navItems} editOnGitHub={editOnGitHub} />
theme/src/components/skip-link.js
+2 -2
@@ -1,8 +1,8 @@
1 -import {Link} from '@primer/components'
1 +import { Link } from '@primer/components'
2 import styled from 'styled-components'
3 import React from 'react'
4
5 -function SkipLinkBase(props) {
5 +function SkipLinkBase (props) {
6 return (
7 <Link
8 {...props}
theme/src/components/source-link.js
+3 -3
@@ -1,8 +1,8 @@
1 -import {Link, StyledOcticon} from '@primer/components'
2 -import {CodeIcon} from '@primer/octicons-react'
1 +import { Link, StyledOcticon } from '@primer/components'
2 +import { CodeIcon } from '@primer/octicons-react'
3 import React from 'react'
4
5 -function SourceLink({href}) {
5 +function SourceLink ({ href }) {
6 return (
7 <Link href={href} lineHeight="condensedUltra" fontSize={1}>
8 <StyledOcticon icon={CodeIcon} mr={2} />
theme/src/components/status-label.js
+4 -4
@@ -1,5 +1,5 @@
1 -import {BorderBox, StyledOcticon, Flex, Text} from '@primer/components'
2 -import {DotFillIcon} from '@primer/octicons-react'
1 +import { BorderBox, StyledOcticon, Flex, Text } from '@primer/components'
2 +import { DotFillIcon } from '@primer/octicons-react'
3 import React from 'react'
4
5 const STATUS_COLORS = {
@@ -10,11 +10,11 @@ const STATUS_COLORS = {
10 deprecated: 'red.6',
11 }
12
13 -function getStatusColor(status) {
13 +function getStatusColor (status) {
14 return STATUS_COLORS[status.toLowerCase()] || 'gray.5'
15 }
16
17 -function StatusLabel({status}) {
17 +function StatusLabel ({ status }) {
18 return (
19 <BorderBox display="inline-block" px={2} py={1}>
20 <Flex alignItems="center">
theme/src/components/table-of-contents.js
+3 -3
@@ -1,9 +1,9 @@
1 -import {Box, Link} from '@primer/components'
1 +import { Box, Link } from '@primer/components'
2 import React from 'react'
3
4 -function TableOfContents({items, depth, labelId}) {
4 +function TableOfContents ({ items, depth, labelId }) {
5 return (
6 - <Box key={items} as="ul" role='list' m={0} p={0} css={{listStyle: 'none', lineHeight: '1.4em'}} aria-labelledby={labelId}>
6 + <Box key={items} as="ul" role='list' m={0} p={0} css={{ listStyle: 'none', lineHeight: '1.4em' }} aria-labelledby={labelId}>
7 {items.map(item => (
8 <Box as="li" role='listitem' key={item.url} pl={depth > 0 ? 3 : 0}>
9 <Link key={item.title} display="inline-block" py={1} href={item.url} color="gray.6">
theme/src/components/variant-select.js
+29 -29
@@ -4,55 +4,55 @@
4 // second folder acts as a variant. If you use <VariantSelect root="/docs">
5 // then you'll get a selection for the different variants (v1.0, v2.0).
6
7 -import React from 'react';
7 +import React from 'react'
8 import { ActionList, ActionMenu, ThemeProvider } from '@primer/react'
9 import NavHierarchy from '../nav-hierarchy'
10
11 -function VariantSelect(props) {
11 +function VariantSelect (props) {
12 const [open, setOpen] = React.useState(false)
13 - const path = NavHierarchy.getPath(props.location.pathname);
14 - const vp = NavHierarchy.getVariantAndPage(props.root, path);
13 + const path = NavHierarchy.getPath(props.location.pathname)
14 + const vp = NavHierarchy.getVariantAndPage(props.root, path)
15
16 if (!vp) {
17 - return null;
17 + return null
18 }
19
20 - const variantPages = NavHierarchy.getVariantsForPage(props.root, vp.page);
21 - const items = [];
22 - let selectedItem = variantPages[0];
23 -
20 + const variantPages = NavHierarchy.getVariantsForPage(props.root, vp.page)
21 + const items = []
22 + let selectedItem = variantPages[0]
23 +
24 if (variantPages.length === 0) {
25 - return null;
25 + return null
26 }
27
28 - function anchorClickHandler(event, url) {
28 + function anchorClickHandler (event, url) {
29 event.preventDefault()
30 - window.location.href = url + "?v=true";
30 + window.location.href = url + '?v=true'
31 }
32
33 - function onItemEnterKey(event, url) {
33 + function onItemEnterKey (event, url) {
34 if (event.key === 'Enter') {
35 - window.location.href = url + "?v=true";
35 + window.location.href = url + '?v=true'
36 }
37 }
38
39 variantPages.forEach((match, index) => {
40 - let active = false;
41 - if (match.page.url === path) {
42 - selectedItem = match;
43 - active = true;
44 - }
45 - items.push(<ActionList.Item
46 - onKeyDown={e => onItemEnterKey(e, match.page.url)}
47 - onClick={e => anchorClickHandler(e, match.page.url)}
48 - id={match.variant.shortName}
49 - key={index}
50 - active={active}>
51 - {match.variant.title}
52 - </ActionList.Item>);
53 - });
40 + let active = false
41 + if (match.page.url === path) {
42 + selectedItem = match
43 + active = true
44 + }
45 + items.push(<ActionList.Item
46 + onKeyDown={e => onItemEnterKey(e, match.page.url)}
47 + onClick={e => anchorClickHandler(e, match.page.url)}
48 + id={match.variant.shortName}
49 + key={index}
50 + active={active}>
51 + {match.variant.title}
52 + </ActionList.Item>)
53 + })
54
55 - const ariaLabelMenuButton=open ? 'Version release' : selectedItem.variant.title
55 + const ariaLabelMenuButton = open ? 'Version release' : selectedItem.variant.title
56
57 return (
58 <ThemeProvider>
theme/src/components/wrap-page-element.js
+2 -2
@@ -1,8 +1,8 @@
1 -import {BaseStyles} from '@primer/components'
1 +import { BaseStyles } from '@primer/components'
2 import React from 'react'
3 import SkipLink from './skip-link'
4
5 -function wrapPageElement({element}) {
5 +function wrapPageElement ({ element }) {
6 return (
7 <BaseStyles>
8 <SkipLink />
theme/src/components/wrap-root-element.js
+5 -5
@@ -1,11 +1,11 @@
1 -import {MDXProvider} from '@mdx-js/react'
2 -import {Link, theme} from '@primer/components'
1 +import { MDXProvider } from '@mdx-js/react'
2 +import { Link, theme } from '@primer/components'
3 import React from 'react'
4 -import {ThemeProvider} from 'styled-components'
4 +import { ThemeProvider } from 'styled-components'
5 import Blockquote from './blockquote'
6 import Code from './code'
7 import DescriptionList from './description-list'
8 -import {H1, H2, H3, H4, H5, H6} from './heading'
8 +import { H1, H2, H3, H4, H5, H6 } from './heading'
9 import HorizontalRule from './horizontal-rule'
10 import Image from './image'
11 import InlineCode from './inline-code'
@@ -34,7 +34,7 @@ const components = {
34 dl: DescriptionList,
35 }
36
37 -function wrapRootElement({element}) {
37 +function wrapRootElement ({ element }) {
38 return (
39 <MDXProvider components={components}>
40 <ThemeProvider theme={theme}>{element}</ThemeProvider>
theme/src/nav-hierarchy.js
+196 -200
@@ -1,256 +1,252 @@
1 -import navItems from './nav.yml';
2 -import { withPrefix } from "gatsby";
1 +import navItems from './nav.yml'
2 +import { withPrefix } from 'gatsby'
3
4 export default {
5 - getLocation(path) {
6 - const pathPrefix = withPrefix("/");
5 + getLocation (path) {
6 + const pathPrefix = withPrefix('/')
7
8 - if (!pathPrefix || pathPrefix === "/") {
9 - return path;
10 - }
8 + if (!pathPrefix || pathPrefix === '/') {
9 + return path
10 + }
11
12 - const match = new RegExp(`^${pathPrefix}`);
13 - return path.replace(match, '/');
14 - },
12 + const match = new RegExp(`^${pathPrefix}`)
13 + return path.replace(match, '/')
14 + },
15
16 - getPath(path) {
17 - while (path && path.endsWith('/')) {
18 - path = path.substring(0, path.length - 1);
19 - }
16 + getPath (path) {
17 + while (path && path.endsWith('/')) {
18 + path = path.substring(0, path.length - 1)
19 + }
20
21 - return path;
22 - },
21 + return path
22 + },
23
24 - getVariantRoot(path) {
25 - path = this.getPath(path);
24 + getVariantRoot (path) {
25 + path = this.getPath(path)
26
27 - return this.findItem((item) => {
28 - if (item.variants && path.startsWith(item.url + '/')) {
29 - return item.url;
30 - }
27 + return this.findItem((item) => {
28 + if (item.variants && path.startsWith(item.url + '/')) {
29 + return item.url
30 + }
31
32 - return null;
33 - });
34 - },
32 + return null
33 + })
34 + },
35
36 - findItem(fn, items = navItems) {
37 - for (let i = 0; i < items.length; i++) {
38 - const item = items[i];
39 - let result = fn(item);
36 + findItem (fn, items = navItems) {
37 + for (let i = 0; i < items.length; i++) {
38 + const item = items[i]
39 + let result = fn(item)
40
41 - if (!result && item.children) {
42 - result = this.findItem(fn, item.children);
43 - }
41 + if (!result && item.children) {
42 + result = this.findItem(fn, item.children)
43 + }
44
45 - if (result) {
46 - return result;
47 - }
48 - }
45 + if (result) {
46 + return result
47 + }
48 + }
49
50 - return null;
51 - },
50 + return null
51 + },
52
53 - getItemHierarchy(path, items = navItems) {
54 - if (!path) {
55 - return null;
56 - }
53 + getItemHierarchy (path, items = navItems) {
54 + if (!path) {
55 + return null
56 + }
57
58 - for (let i = 0; i < items.length; i++) {
59 - const item = items[i];
58 + for (let i = 0; i < items.length; i++) {
59 + const item = items[i]
60
61 - if (this.getPath(item.url) === this.getPath(path)) {
62 - return [ item ];
63 - }
61 + if (this.getPath(item.url) === this.getPath(path)) {
62 + return [item]
63 + }
64
65 - const children = item.variants ? item.variants : item.children;
65 + const children = item.variants ? item.variants : item.children
66
67 - if (children) {
68 - const hierarchy = this.getItemHierarchy(path, children);
67 + if (children) {
68 + const hierarchy = this.getItemHierarchy(path, children)
69
70 - if (hierarchy) {
71 - return [ item, ...hierarchy ];
72 - }
73 - }
70 + if (hierarchy) {
71 + return [item, ...hierarchy]
72 }
73 + }
74 + }
75
76 - return null;
77 - },
76 + return null
77 + },
78
79 - getItem(path, items = navItems) {
80 - if (!path) {
81 - return { url: '/', children: items };
82 - }
79 + getItem (path, items = navItems) {
80 + if (!path) {
81 + return { url: '/', children: items }
82 + }
83
84 - for (let i = 0; i < items.length; i++) {
85 - const item = items[i];
86 -
87 - if (this.getPath(item.url) === this.getPath(path)) {
88 - return item;
89 - }
90 -
91 - const children = item.variants ? item.variants : item.children;
92 -
93 - if (children) {
94 - const child = this.getItem(path, children);
95 -
96 - if (child) {
97 - return child;
98 - }
99 - }
100 - }
101 -
102 - return null;
103 - },
84 + for (let i = 0; i < items.length; i++) {
85 + const item = items[i]
86
105 - isPathForItem(path, item) {
106 - return (this.getPath(item.url) === this.getPath(path));
107 - },
87 + if (this.getPath(item.url) === this.getPath(path)) {
88 + return item
89 + }
90
109 - isChildItem(path, items = navItems) {
110 - if (!path) {
111 - return false;
91 + const children = item.variants ? item.variants : item.children
92 +
93 + if (children) {
94 + const child = this.getItem(path, children)
95 +
96 + if (child) {
97 + return child
98 }
99 + }
100 + }
101
114 - return (this.findItem((item) => this.isPathForItem(path, item) ? item : null, items) != null);
115 - },
102 + return null
103 + },
104
117 - getHierarchy(root, props = { }) {
118 - let children;
105 + isPathForItem (path, item) {
106 + return (this.getPath(item.url) === this.getPath(path))
107 + },
108
120 - if (!root) {
121 - children = navItems;
122 - }
123 - else if (root.variants && props.hideVariants === true) {
124 - const variant = this.getCurrentOrDefaultVariant(root, props.path);
125 - children = variant.children;
126 - }
127 - else if (root.variants) {
128 - children = root.variants;
129 - }
130 - else {
131 - children = root.children;
132 - }
109 + isChildItem (path, items = navItems) {
110 + if (!path) {
111 + return false
112 + }
113
134 - if (children && props.hideVariants === true) {
135 - children = this.hideVariantsForItems(children, props);
136 - }
137 -
138 - return children;
139 - },
114 + return (this.findItem((item) => this.isPathForItem(path, item) ? item : null, items) != null)
115 + },
116 +
117 + getHierarchy (root, props = { }) {
118 + let children
119 +
120 + if (!root) {
121 + children = navItems
122 + } else if (root.variants && props.hideVariants === true) {
123 + const variant = this.getCurrentOrDefaultVariant(root, props.path)
124 + children = variant.children
125 + } else if (root.variants) {
126 + children = root.variants
127 + } else {
128 + children = root.children
129 + }
130
141 - hideVariantsForItems(items, props) {
142 - if (!items) {
143 - return null;
144 - }
131 + if (children && props.hideVariants === true) {
132 + children = this.hideVariantsForItems(children, props)
133 + }
134
146 - const updated = [ ];
135 + return children
136 + },
137
148 - for (let item of items) {
149 - if (item.variants) {
150 - const cloned = { };
151 - Object.assign(cloned, item);
138 + hideVariantsForItems (items, props) {
139 + if (!items) {
140 + return null
141 + }
142
153 - const variant = this.getCurrentOrDefaultVariant(item, props.path);
143 + const updated = []
144
155 - cloned.url = variant.url;
145 + for (const item of items) {
146 + if (item.variants) {
147 + const cloned = { }
148 + Object.assign(cloned, item)
149
157 - updated.push(cloned);
158 - }
159 - else {
160 - updated.push(item);
161 - }
162 - }
150 + const variant = this.getCurrentOrDefaultVariant(item, props.path)
151
164 - return updated
165 - },
152 + cloned.url = variant.url
153
167 - getCurrentOrDefaultVariant(root, path) {
168 - let variant = path ? this.getCurrentVariant(root, path) : null;
154 + updated.push(cloned)
155 + } else {
156 + updated.push(item)
157 + }
158 + }
159
170 - if (!variant) {
171 - variant = this.getDefaultVariant(root);
172 - }
160 + return updated
161 + },
162
174 - return variant;
175 - },
163 + getCurrentOrDefaultVariant (root, path) {
164 + let variant = path ? this.getCurrentVariant(root, path) : null
165
177 - getCurrentVariant(root, path) {
178 - for (let v of root.variants) {
179 - if (this.isActiveItem(path, v)) {
180 - return v;
181 - }
182 - }
166 + if (!variant) {
167 + variant = this.getDefaultVariant(root)
168 + }
169
184 - return null;
185 - },
170 + return variant
171 + },
172
187 - getDefaultVariant(root) {
188 - for (let v of root.variants) {
189 - if (v.default) {
190 - return v;
191 - }
192 - }
173 + getCurrentVariant (root, path) {
174 + for (const v of root.variants) {
175 + if (this.isActiveItem(path, v)) {
176 + return v
177 + }
178 + }
179
194 - return root.variants[0];
195 - },
180 + return null
181 + },
182
197 - getVariantAndPage(root, path) {
198 - if (!path.startsWith(root + '/')) {
199 - return null;
200 - }
183 + getDefaultVariant (root) {
184 + for (const v of root.variants) {
185 + if (v.default) {
186 + return v
187 + }
188 + }
189 +
190 + return root.variants[0]
191 + },
192
202 - path = path.substring(root.length + 1);
193 + getVariantAndPage (root, path) {
194 + if (!path.startsWith(root + '/')) {
195 + return null
196 + }
197
204 - const match = /^([^/]+)(?:\/(.*))?/.exec(path);
198 + path = path.substring(root.length + 1)
199
206 - if (!match) {
207 - return null;
200 + const match = /^([^/]+)(?:\/(.*))?/.exec(path)
201 +
202 + if (!match) {
203 + return null
204 + }
205 +
206 + return { variant: match[1], page: match[2] }
207 + },
208 +
209 + getVariantsForPage (root, page) {
210 + const pages = []
211 + const rootItem = this.findItem((item) => this.getPath(item.url) === this.getPath(root) ? item : null)
212 +
213 + if (rootItem && rootItem.variants) {
214 + rootItem.variants.forEach((variant) => {
215 + if (!variant.children) {
216 + return
217 }
218
210 - return { variant: match[1], page: match[2] };
211 - },
212 -
213 - getVariantsForPage(root, page) {
214 - const pages = [];
215 - const rootItem = this.findItem((item) => this.getPath(item.url) === this.getPath(root) ? item : null);
216 -
217 - if (rootItem && rootItem.variants) {
218 - rootItem.variants.forEach((variant) => {
219 - if (!variant.children) {
220 - return;
221 - }
222 -
223 - const vp = this.getVariantAndPage(root, variant.url);
224 - let variantPage;
225 -
226 - if (vp.page === page) {
227 - variantPage = variant;
228 - } else {
229 - variantPage = this.findItem((item) => {
230 - const vp = this.getVariantAndPage(root, item.url);
231 - return (vp && vp.page === page) ? item : null;
232 - }, variant.children);
233 - }
234 -
235 - if (!variantPage) {
236 - return;
237 - }
238 -
239 - pages.push({ variant: variant, page: variantPage });
240 - });
219 + const vp = this.getVariantAndPage(root, variant.url)
220 + let variantPage
221 +
222 + if (vp.page === page) {
223 + variantPage = variant
224 + } else {
225 + variantPage = this.findItem((item) => {
226 + const vp = this.getVariantAndPage(root, item.url)
227 + return (vp && vp.page === page) ? item : null
228 + }, variant.children)
229 }
230
243 - return pages;
244 - },
231 + if (!variantPage) {
232 + return
233 + }
234 +
235 + pages.push({ variant: variant, page: variantPage })
236 + })
237 + }
238
246 - isActiveItem(currentPath, linkItem) {
247 - return (this.isPathForItem(currentPath, linkItem) ||
239 + return pages
240 + },
241 +
242 + isActiveItem (currentPath, linkItem) {
243 + return (this.isPathForItem(currentPath, linkItem) ||
244 (linkItem.children && this.isChildItem(currentPath, linkItem.children)) ||
249 - (linkItem.variants && this.isChildItem(currentPath, linkItem.variants)));
250 - },
245 + (linkItem.variants && this.isChildItem(currentPath, linkItem.variants)))
246 + },
247
252 - isActiveUrl(currentPath, linkPath) {
253 - const linkItem = this.getItem(linkPath);
254 - return linkItem ? this.isActiveItem(currentPath, linkItem) : false;
255 - }
248 + isActiveUrl (currentPath, linkPath) {
249 + const linkItem = this.getItem(linkPath)
250 + return linkItem ? this.isActiveItem(currentPath, linkItem) : false
251 + },
252 }
theme/src/search.worker.js
+5 -5
@@ -1,7 +1,7 @@
1 import Fuse from 'fuse.js'
2 import debounce from 'lodash.debounce'
3
4 -(function searchWorker() {
4 +(function searchWorker () {
5 let fuse = null
6
7 // [MKT]: I landed on the debouce wait value of 50 based mostly on
@@ -13,12 +13,12 @@ import debounce from 'lodash.debounce'
13 // > Note: If `leading` and `trailing` options are `true`, `func` is invoked
14 // > on the trailing edge of the timeout only if the debounced function is
15 // > invoked more than once during the wait timeout.
16 - const performSearch = debounce(function performSearch(query) {
16 + const performSearch = debounce(function performSearch (query) {
17 const results = fuse.search(query).slice(0, 20)
18 - postMessage({results: results, query: query})
19 - }, 50, {leading: true, trailing: true})
18 + postMessage({ results: results, query: query })
19 + }, 50, { leading: true, trailing: true })
20
21 - onmessage = function({data}) {
21 + onmessage = function ({ data }) {
22 if (data.list) {
23 fuse = new Fuse(data.list, {
24 threshold: 0.2,
theme/src/use-search.js
+16 -17
@@ -1,7 +1,7 @@
1 -import {graphql, useStaticQuery} from 'gatsby'
1 +import { graphql, useStaticQuery } from 'gatsby'
2 import React from 'react'
3
4 -function useSearch(query) {
4 +function useSearch (query) {
5 const latestQuery = React.useRef(query)
6 const workerRef = React.useRef()
7
@@ -26,41 +26,40 @@ function useSearch(query) {
26 `)
27
28 const mdxNodes = data.allMdx.nodes.reduce((map, obj) => {
29 - map[obj.id] = obj;
30 - return map;
31 - }, { });
29 + map[obj.id] = obj
30 + return map
31 + }, { })
32
33 -
33 const list = React.useMemo(
34 () =>
36 - data.allSitePage.nodes.filter(node => {
37 - return (node.pageContext && node.pageContext.mdxId && mdxNodes[node.pageContext.mdxId] != null);
35 + data.allSitePage.nodes.filter(node => {
36 + return (node.pageContext && node.pageContext.mdxId && mdxNodes[node.pageContext.mdxId] != null)
37 }).map(node => {
39 - const mdxNode = mdxNodes[node.pageContext.mdxId];
38 + const mdxNode = mdxNodes[node.pageContext.mdxId]
39
40 const obj =
41 {
42 path: node.path,
43 title: mdxNode.frontmatter.title,
45 - rawBody: mdxNode.rawBody
46 - };
47 - return obj;
44 + rawBody: mdxNode.rawBody,
45 + }
46 + return obj
47 }),
49 - [data],
48 + [data]
49 )
50
51 const [results, setResults] = React.useState(list)
52
54 - const handleSearchResults = React.useCallback(({data}) => {
53 + const handleSearchResults = React.useCallback(({ data }) => {
54 if (data.query && data.results && data.query === latestQuery.current) {
55 setResults(data.results)
56 }
57 }, [])
58
59 React.useEffect(() => {
61 - const worker = new Worker(new URL('./search.worker.js', import.meta.url));
60 + const worker = new Worker(new URL('./search.worker.js', import.meta.url))
61 worker.addEventListener('message', handleSearchResults)
63 - worker.postMessage({list})
62 + worker.postMessage({ list })
63 workerRef.current = worker
64
65 return () => {
@@ -71,7 +70,7 @@ function useSearch(query) {
70 React.useEffect(() => {
71 latestQuery.current = query
72 if (query && workerRef.current) {
74 - workerRef.current.postMessage({query: query})
73 + workerRef.current.postMessage({ query: query })
74 } else {
75 setResults(list)
76 }
theme/src/use-site-metadata.js
+2 -2
@@ -1,6 +1,6 @@
1 -import {useStaticQuery, graphql} from 'gatsby'
1 +import { useStaticQuery, graphql } from 'gatsby'
2
3 -function useSiteMetadata() {
3 +function useSiteMetadata () {
4 const data = useStaticQuery(graphql`
5 {
6 site {