Compare commits
267 Commits
test_hyper
...
chris/FAL-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
49c28de286 | ||
|
|
950bfee7c1 | ||
|
|
0f2dd4a88f | ||
|
|
6646c8ed0f | ||
|
|
9a9806ccad | ||
|
|
86e9c6b1fa | ||
|
|
2a787953ef | ||
|
|
c90195e0fd | ||
|
|
dfd3b93f0a | ||
|
|
ae449b914b | ||
|
|
5c006af6ec | ||
|
|
641fc589a4 | ||
|
|
0c88fd6da9 | ||
|
|
8e680dc8d4 | ||
|
|
2f6e510b09 | ||
|
|
87af7e8973 | ||
|
|
33c445ebc2 | ||
|
|
7825bcde75 | ||
|
|
2c9f90ba5a | ||
|
|
ada52c3169 | ||
|
|
38b0b6543b | ||
|
|
e6b72453b3 | ||
|
|
0820a1e7df | ||
|
|
be82e96e6f | ||
|
|
b2203f0ece | ||
|
|
53e925e07a | ||
|
|
25830a2130 | ||
|
|
6ce7b86e83 | ||
|
|
5bdef7cffa | ||
|
|
f0c5a513de | ||
|
|
da46fe0a48 | ||
|
|
7c4ef47da5 | ||
|
|
8003453b73 | ||
|
|
92c3a98a3d | ||
|
|
0e1550a45b | ||
|
|
15c79ceb21 | ||
|
|
43de4d1e32 | ||
|
|
591444d72d | ||
|
|
2f9566c4f5 | ||
|
|
915bd559e0 | ||
|
|
00ce3d7856 | ||
|
|
90ddc5e71c | ||
|
|
9ceebbe137 | ||
|
|
8326257938 | ||
|
|
30cfd269e2 | ||
|
|
082a1c6510 | ||
|
|
a146307a4f | ||
|
|
556bb1e56d | ||
|
|
bd2e2d8655 | ||
|
|
11de4022f0 | ||
|
|
9caa4351ba | ||
|
|
74e671d08b | ||
|
|
5b7efc65bc | ||
|
|
f9cd15eee6 | ||
|
|
bad66caadd | ||
|
|
2ae594f23c | ||
|
|
8e3ea89339 | ||
|
|
537b3292ee | ||
|
|
46d5917303 | ||
|
|
4f3904ea4c | ||
|
|
215f7280da | ||
|
|
60417a76cb | ||
|
|
cbec6505f5 | ||
|
|
654daa58ee | ||
|
|
bd18e874b5 | ||
|
|
2db6d89fca | ||
|
|
a51ff99042 | ||
|
|
966767ffd4 | ||
|
|
fc9ded432a | ||
|
|
a3e03dc12f | ||
|
|
77fe2d1086 | ||
|
|
efd967a42b | ||
|
|
eaba380417 | ||
|
|
f3332a214f | ||
|
|
bc11aaf5ce | ||
|
|
4ae9d3c8df | ||
|
|
3673c5f561 | ||
|
|
2fe24f39ac | ||
|
|
c4f565bf76 | ||
|
|
e8e5a3c4ce | ||
|
|
749c0022ec | ||
|
|
642be162d7 | ||
|
|
a969de4d90 | ||
|
|
8d86433748 | ||
|
|
90f375939a | ||
|
|
a1214f7fa9 | ||
|
|
88821077cb | ||
|
|
3ebd2372d2 | ||
|
|
6014da9a22 | ||
|
|
f355a17943 | ||
|
|
ae82486d72 | ||
|
|
dd2853900b | ||
|
|
2533724203 | ||
|
|
ffd430d321 | ||
|
|
ad62519af7 | ||
|
|
76b5dd5925 | ||
|
|
701e41b664 | ||
|
|
ac9faacc4d | ||
|
|
37313b30bd | ||
|
|
6f79e4475d | ||
|
|
e2da13d129 | ||
|
|
aeefcc639f | ||
|
|
4905f3bbc7 | ||
|
|
60cebf703d | ||
|
|
71fa247c61 | ||
|
|
31fc0453b4 | ||
|
|
75137bc651 | ||
|
|
085cd7d05c | ||
|
|
810dd420fd | ||
|
|
747f7b6133 | ||
|
|
ebf4b7c162 | ||
|
|
962b30bed9 | ||
|
|
75ea7500e1 | ||
|
|
08c3d123d8 | ||
|
|
920f4a54e1 | ||
|
|
d9e1a4dea6 | ||
|
|
8b9a80eb04 | ||
|
|
a5c17452e7 | ||
|
|
4b4ab92383 | ||
|
|
97710c262e | ||
|
|
b510b6f69f | ||
|
|
488173ebdb | ||
|
|
5a84d8c52f | ||
|
|
ac7f90065d | ||
|
|
19f81cc05d | ||
|
|
fa9d66c5e5 | ||
|
|
dc16b226f0 | ||
|
|
cba4e684ab | ||
|
|
96df339be5 | ||
|
|
eaee5257bd | ||
|
|
154b411ad8 | ||
|
|
284e9c7d68 | ||
|
|
fcf1e5cb33 | ||
|
|
2e9b5b7e78 | ||
|
|
8a423ebf10 | ||
|
|
b6db457c6f | ||
|
|
80dabca88e | ||
|
|
376414a653 | ||
|
|
ca85ca8e4b | ||
|
|
4a1f454855 | ||
|
|
4adf2ff087 | ||
|
|
569a981a85 | ||
|
|
3097976b7b | ||
|
|
acef2e70cc | ||
|
|
c1d874f94f | ||
|
|
dc16c42746 | ||
|
|
ea33c15b36 | ||
|
|
d440394067 | ||
|
|
73ac6d725a | ||
|
|
0e2cab2838 | ||
|
|
b3605fa1b8 | ||
|
|
be13c18e5d | ||
|
|
019eede7c2 | ||
|
|
5991fd3997 | ||
|
|
9a2dac6d4b | ||
|
|
061855c31e | ||
|
|
5df4cd941d | ||
|
|
7274316eb8 | ||
|
|
151b3e30bf | ||
|
|
dd6780ff41 | ||
|
|
99e11d3534 | ||
|
|
ee7992bde5 | ||
|
|
1dee2bba58 | ||
|
|
d806b6150d | ||
|
|
c7f3e26798 | ||
|
|
27a2b1235e | ||
|
|
3c69733170 | ||
|
|
cfb4944d43 | ||
|
|
17e514f937 | ||
|
|
0c7cef66ab | ||
|
|
c677e7fef3 | ||
|
|
50cb8608c4 | ||
|
|
5bb8a5d47c | ||
|
|
f02347dd71 | ||
|
|
0eaa7f6f88 | ||
|
|
e6c1c95260 | ||
|
|
a18444e691 | ||
|
|
5561c030e8 | ||
|
|
fffa9e2566 | ||
|
|
f18274533e | ||
|
|
3fc0f27d67 | ||
|
|
36e57a0cfb | ||
|
|
afd6afdbb9 | ||
|
|
01243afdd9 | ||
|
|
b0e194e512 | ||
|
|
260582b6f0 | ||
|
|
ce337aedef | ||
|
|
44d47f8783 | ||
|
|
65c8b8ba4b | ||
|
|
80dba704da | ||
|
|
9906901262 | ||
|
|
5167b167eb | ||
|
|
951b707c7d | ||
|
|
8e1e2fdb46 | ||
|
|
ca8ce5b253 | ||
|
|
c5f7d0cf3b | ||
|
|
ac5574d2c4 | ||
|
|
df3577241f | ||
|
|
65605bf937 | ||
|
|
9e978057bc | ||
|
|
279a900a10 | ||
|
|
f2d5bc4680 | ||
|
|
ee5e51d371 | ||
|
|
0e40aa295d | ||
|
|
e212e1a1ef | ||
|
|
1568067980 | ||
|
|
503642be8c | ||
|
|
6f3b7ab962 | ||
|
|
08ac1c0c4d | ||
|
|
6a3b0064ff | ||
|
|
1d45fa2e38 | ||
|
|
62bffc06d7 | ||
|
|
88aa4c1524 | ||
|
|
4ebc1590e7 | ||
|
|
97e5fbaa5e | ||
|
|
03a757de21 | ||
|
|
d8eda2494b | ||
|
|
db07092880 | ||
|
|
26c6a71624 | ||
|
|
d5dc8b5ebe | ||
|
|
7b2cc125a5 | ||
|
|
9a2dc8061a | ||
|
|
cc47616256 | ||
|
|
e8463f7a6a | ||
|
|
c77c4f3c91 | ||
|
|
36277d8ef5 | ||
|
|
cdb8016657 | ||
|
|
8c3fab3792 | ||
|
|
04e8f3a488 | ||
|
|
d7173036a5 | ||
|
|
208b0c9195 | ||
|
|
24e469542d | ||
|
|
0fdc460c5b | ||
|
|
a7b10495e6 | ||
|
|
fdfc30dbd5 | ||
|
|
75e0531c5b | ||
|
|
b697a44f36 | ||
|
|
db0f562d93 | ||
|
|
11835d28aa | ||
|
|
b023173ed4 | ||
|
|
bc18fffedf | ||
|
|
484154b9bd | ||
|
|
65aca04708 | ||
|
|
d92b27ee93 | ||
|
|
0f5c752eb0 | ||
|
|
3d2df5f4be | ||
|
|
dbb1a996e1 | ||
|
|
b30a1c8c5e | ||
|
|
855b44f745 | ||
|
|
2d55ba4ccc | ||
|
|
d62c4cf4f8 | ||
|
|
9824502278 | ||
|
|
d6b51ecf0c | ||
|
|
1fe1f93314 | ||
|
|
fbc1273955 | ||
|
|
7edb3528ba | ||
|
|
e7c22b1cbf | ||
|
|
380f3be164 | ||
|
|
74d7d66c59 | ||
|
|
e2189f2fdd | ||
|
|
293b7941dd | ||
|
|
eaa075464c | ||
|
|
03d732846e | ||
|
|
c1302f1089 | ||
|
|
ea26981393 | ||
|
|
55e505eb36 | ||
|
|
9002f7acfe |
7
.env
7
.env
@@ -41,9 +41,10 @@ HOTJAR_APP_ID=''
|
|||||||
HOTJAR_VERSION=6
|
HOTJAR_VERSION=6
|
||||||
HOTJAR_DEBUG=false
|
HOTJAR_DEBUG=false
|
||||||
INVITE_STUDENTS_EMAIL_TO=''
|
INVITE_STUDENTS_EMAIL_TO=''
|
||||||
ENABLE_HOME_PAGE_COURSE_API_V2=true
|
|
||||||
ENABLE_CHECKLIST_QUALITY=''
|
ENABLE_CHECKLIST_QUALITY=''
|
||||||
ENABLE_GRADING_METHOD_IN_PROBLEMS=false
|
ENABLE_GRADING_METHOD_IN_PROBLEMS=false
|
||||||
# "Multi-level" blocks are unsupported in libraries
|
# "Multi-level" blocks are unsupported in libraries
|
||||||
# TODO: Missing support for ORA2
|
LIBRARY_UNSUPPORTED_BLOCKS="conditional,step-builder,problem-builder"
|
||||||
LIBRARY_UNSUPPORTED_BLOCKS="conditional,step-builder,problem-builder,openassessment"
|
# Fallback in local style files
|
||||||
|
PARAGON_THEME_URLS={}
|
||||||
|
COURSE_TEAM_SUPPORT_EMAIL=''
|
||||||
|
|||||||
@@ -44,8 +44,10 @@ HOTJAR_APP_ID=''
|
|||||||
HOTJAR_VERSION=6
|
HOTJAR_VERSION=6
|
||||||
HOTJAR_DEBUG=true
|
HOTJAR_DEBUG=true
|
||||||
INVITE_STUDENTS_EMAIL_TO="someone@domain.com"
|
INVITE_STUDENTS_EMAIL_TO="someone@domain.com"
|
||||||
ENABLE_HOME_PAGE_COURSE_API_V2=true
|
|
||||||
ENABLE_CHECKLIST_QUALITY=true
|
ENABLE_CHECKLIST_QUALITY=true
|
||||||
ENABLE_GRADING_METHOD_IN_PROBLEMS=false
|
ENABLE_GRADING_METHOD_IN_PROBLEMS=false
|
||||||
# "Multi-level" blocks are unsupported in libraries
|
# "Multi-level" blocks are unsupported in libraries
|
||||||
LIBRARY_UNSUPPORTED_BLOCKS="conditional,step-builder,problem-builder"
|
LIBRARY_UNSUPPORTED_BLOCKS="conditional,step-builder,problem-builder"
|
||||||
|
# Fallback in local style files
|
||||||
|
PARAGON_THEME_URLS={}
|
||||||
|
COURSE_TEAM_SUPPORT_EMAIL=''
|
||||||
|
|||||||
@@ -40,5 +40,6 @@ ENABLE_HOME_PAGE_COURSE_API_V2=true
|
|||||||
ENABLE_CHECKLIST_QUALITY=true
|
ENABLE_CHECKLIST_QUALITY=true
|
||||||
ENABLE_GRADING_METHOD_IN_PROBLEMS=false
|
ENABLE_GRADING_METHOD_IN_PROBLEMS=false
|
||||||
# "Multi-level" blocks are unsupported in libraries
|
# "Multi-level" blocks are unsupported in libraries
|
||||||
# TODO: Missing support for ORA2
|
LIBRARY_UNSUPPORTED_BLOCKS="conditional,step-builder,problem-builder"
|
||||||
LIBRARY_UNSUPPORTED_BLOCKS="conditional,step-builder,problem-builder,openassessment"
|
PARAGON_THEME_URLS=
|
||||||
|
COURSE_TEAM_SUPPORT_EMAIL='support@example.com'
|
||||||
|
|||||||
25
.github/pull_request_template.md
vendored
25
.github/pull_request_template.md
vendored
@@ -2,26 +2,37 @@
|
|||||||
|
|
||||||
Describe what this pull request changes, and why. Include implications for people using this change.
|
Describe what this pull request changes, and why. Include implications for people using this change.
|
||||||
Design decisions and their rationales should be documented in the repo (docstring / ADR), per
|
Design decisions and their rationales should be documented in the repo (docstring / ADR), per
|
||||||
|
[OEP-19](https://open-edx-proposals.readthedocs.io/en/latest/oep-0019-bp-developer-documentation.html), and can be linked here.
|
||||||
|
|
||||||
Useful information to include:
|
Useful information to include:
|
||||||
- Which edX user roles will this change impact? Common user roles are "Learner", "Course Author",
|
- Which user roles will this change impact? Common user roles are "Learner", "Course Author",
|
||||||
"Developer", and "Operator".
|
"Developer", and "Operator".
|
||||||
- Include screenshots for changes to the UI (ideally, both "before" and "after" screenshots, if applicable).
|
- Include screenshots for changes to the UI (ideally, both "before" and "after" screenshots, if applicable).
|
||||||
- Provide links to the description of corresponding configuration changes. Remember to correctly annotate these
|
|
||||||
changes.
|
|
||||||
|
|
||||||
## Supporting information
|
## Supporting information
|
||||||
|
|
||||||
Link to other information about the change, such as Jira issues, GitHub issues, or Discourse discussions.
|
Link to other information about the change, such as GitHub issues, or Discourse discussions.
|
||||||
Be sure to check they are publicly readable, or if not, repeat the information here.
|
Be sure to check they are publicly readable, or if not, repeat the information here.
|
||||||
|
|
||||||
## Testing instructions
|
## Testing instructions
|
||||||
|
|
||||||
Please provide detailed step-by-step instructions for testing this change.
|
Please provide detailed step-by-step instructions for manually testing this change.
|
||||||
|
|
||||||
|
|
||||||
## Other information
|
## Other information
|
||||||
|
|
||||||
Include anything else that will help reviewers and consumers understand the change.
|
Include anything else that will help reviewers and consumers understand the change.
|
||||||
- Does this change depend on other changes elsewhere?
|
- Does this change depend on other changes elsewhere?
|
||||||
- Any special concerns or limitations? For example: deprecations, migrations, security, or accessibility.
|
- Any special concerns or limitations? For example: deprecations, migrations, security, or accessibility.
|
||||||
|
|
||||||
|
## Best Practices Checklist
|
||||||
|
|
||||||
|
We're trying to move away from some deprecated patterns in this codebase. Please
|
||||||
|
check if your PR meets these recommendations before asking for a review:
|
||||||
|
|
||||||
|
- [ ] Any _new_ files are using TypeScript (`.ts`, `.tsx`).
|
||||||
|
- [ ] Deprecated `propTypes`, `defaultProps`, and `injectIntl` patterns are not used in any new or modified code.
|
||||||
|
- [ ] Tests should use the helpers in `src/testUtils.tsx` (specifically `initializeMocks`)
|
||||||
|
- [ ] Do not add new fields to the Redux state/store. Use React Context to share state among multiple components.
|
||||||
|
- [ ] Use React Query to load data from REST APIs. See any `apiHooks.ts` in this repo for examples.
|
||||||
|
- [ ] All new i18n messages in `messages.ts` files have a `description` for translators to use.
|
||||||
|
- [ ] Imports avoid using `../`. To import from parent folders, use `@src`, e.g. `import { initializeMocks } from '@src/testUtils';` instead of `from '../../../../testUtils'`
|
||||||
|
|||||||
18
.github/workflows/add-issue-to-btr-project.yml
vendored
Normal file
18
.github/workflows/add-issue-to-btr-project.yml
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Run the workflow that adds new tickets that are labelled "release testing"
|
||||||
|
# to the org-wide BTR project board
|
||||||
|
|
||||||
|
name: Add release testing issues to the BTR project board
|
||||||
|
|
||||||
|
on:
|
||||||
|
issues:
|
||||||
|
types: [labeled]
|
||||||
|
# This workflow is triggered when an issue is labeled with 'release testing'.
|
||||||
|
# It adds the issue to the BTR project and applies the 'needs triage' label
|
||||||
|
# if it doesn't already have it.
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
handle-release-testing:
|
||||||
|
uses: openedx/.github/.github/workflows/add-issue-to-btr-project.yml@master
|
||||||
|
secrets:
|
||||||
|
GITHUB_APP_ID: ${{ secrets.GRAPHQL_AUTH_APP_ID }}
|
||||||
|
GITHUB_APP_PRIVATE_KEY: ${{ secrets.GRAPHQL_AUTH_APP_PEM }}
|
||||||
8
.github/workflows/validate.yml
vendored
8
.github/workflows/validate.yml
vendored
@@ -11,7 +11,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version-file: '.nvmrc'
|
node-version-file: '.nvmrc'
|
||||||
@@ -25,13 +25,13 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: tests
|
needs: tests
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v5
|
||||||
- name: Download code coverage results
|
- name: Download code coverage results
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: code-coverage-report
|
name: code-coverage-report
|
||||||
- name: Upload coverage
|
- name: Upload coverage
|
||||||
uses: codecov/codecov-action@v4
|
uses: codecov/codecov-action@v5
|
||||||
with:
|
with:
|
||||||
fail_ci_if_error: true
|
fail_ci_if_error: true
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
# The following users are the maintainers of all frontend-app-authoring files
|
|
||||||
* @openedx/2u-tnl
|
|
||||||
69
README.rst
69
README.rst
@@ -165,21 +165,7 @@ Feature: New React XBlock Editors
|
|||||||
|
|
||||||
.. image:: ./docs/readme-images/feature-problem-editor.png
|
.. image:: ./docs/readme-images/feature-problem-editor.png
|
||||||
|
|
||||||
This allows an operator to enable the use of new React editors for the HTML, Video, and Problem XBlocks, all of which are provided here.
|
New React editors for the HTML, Video, and Problem XBlocks are provided here and are rendered by this MFE instead of by the XBlock's authoring view.
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
|
|
||||||
* ``edx-platform`` Waffle flags:
|
|
||||||
|
|
||||||
* ``new_core_editors.use_new_text_editor``: must be enabled for the new HTML Xblock editor to be used in Studio
|
|
||||||
* ``new_core_editors.use_new_video_editor``: must be enabled for the new Video Xblock editor to be used in Studio
|
|
||||||
* ``new_core_editors.use_new_problem_editor``: must be enabled for the new Problem Xblock editor to be used in Studio
|
|
||||||
|
|
||||||
Feature Description
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
When a corresponding waffle flag is set, upon editing a block in Studio, the view is rendered by this MFE instead of by the XBlock's authoring view. The user remains in Studio.
|
|
||||||
|
|
||||||
Feature: New Proctoring Exams View
|
Feature: New Proctoring Exams View
|
||||||
==================================
|
==================================
|
||||||
@@ -193,10 +179,6 @@ Requirements
|
|||||||
|
|
||||||
* ``ZENDESK_*``: necessary if automatic ZenDesk ticket creation is desired
|
* ``ZENDESK_*``: necessary if automatic ZenDesk ticket creation is desired
|
||||||
|
|
||||||
* ``edx-platform`` Feature flags:
|
|
||||||
|
|
||||||
* ``ENABLE_EXAM_SETTINGS_HTML_VIEW``: this feature flag must be enabled for the link to the settings view to be shown
|
|
||||||
|
|
||||||
* `edx-exams <https://github.com/edx/edx-exams>`_: for this feature to work, the ``edx-exams`` IDA must be deployed and its API accessible by the browser
|
* `edx-exams <https://github.com/edx/edx-exams>`_: for this feature to work, the ``edx-exams`` IDA must be deployed and its API accessible by the browser
|
||||||
|
|
||||||
Configuration
|
Configuration
|
||||||
@@ -221,16 +203,6 @@ Feature: Advanced Settings
|
|||||||
|
|
||||||
.. image:: ./docs/readme-images/feature-advanced-settings.png
|
.. image:: ./docs/readme-images/feature-advanced-settings.png
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
|
|
||||||
* ``edx-platform`` Waffle flags:
|
|
||||||
|
|
||||||
* ``contentstore.new_studio_mfe.use_new_advanced_settings_page``: this feature flag must be enabled for the link to the settings view to be shown. It can be enabled on a per-course basis.
|
|
||||||
|
|
||||||
Feature Description
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
In Studio, the "Advanced Settings" page for each enabled course will now be served by this frontend, instead of the UI built into edx-platform. The advanced settings page holds many different settings for the course, such as what features or XBlocks are enabled.
|
In Studio, the "Advanced Settings" page for each enabled course will now be served by this frontend, instead of the UI built into edx-platform. The advanced settings page holds many different settings for the course, such as what features or XBlocks are enabled.
|
||||||
|
|
||||||
Feature: Files & Uploads
|
Feature: Files & Uploads
|
||||||
@@ -238,16 +210,6 @@ Feature: Files & Uploads
|
|||||||
|
|
||||||
.. image:: ./docs/readme-images/feature-files-uploads.png
|
.. image:: ./docs/readme-images/feature-files-uploads.png
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
|
|
||||||
* ``edx-platform`` Waffle flags:
|
|
||||||
|
|
||||||
* ``contentstore.new_studio_mfe.use_new_files_uploads_page``: this feature flag must be enabled for the link to the Files & Uploads page to go to the MFE. It can be enabled on a per-course basis.
|
|
||||||
|
|
||||||
Feature Description
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
In Studio, the "Files & Uploads" page for each enabled course will now be served by this frontend, instead of the UI built into edx-platform. This page allows managing static asset files like PDFs, images, etc. used for the course.
|
In Studio, the "Files & Uploads" page for each enabled course will now be served by this frontend, instead of the UI built into edx-platform. This page allows managing static asset files like PDFs, images, etc. used for the course.
|
||||||
|
|
||||||
Feature: Course Updates
|
Feature: Course Updates
|
||||||
@@ -255,26 +217,11 @@ Feature: Course Updates
|
|||||||
|
|
||||||
.. image:: ./docs/readme-images/feature-course-updates.png
|
.. image:: ./docs/readme-images/feature-course-updates.png
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
|
|
||||||
* ``edx-platform`` Waffle flags:
|
|
||||||
|
|
||||||
* ``contentstore.new_studio_mfe.use_new_updates_page``: this feature flag must be enabled.
|
|
||||||
|
|
||||||
Feature: Import/Export Pages
|
Feature: Import/Export Pages
|
||||||
============================
|
============================
|
||||||
|
|
||||||
.. image:: ./docs/readme-images/feature-export.png
|
.. image:: ./docs/readme-images/feature-export.png
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
|
|
||||||
* ``edx-platform`` Waffle flags:
|
|
||||||
|
|
||||||
* ``contentstore.new_studio_mfe.use_new_export_page``: this feature flag will change the CMS to link to the new export page.
|
|
||||||
* ``contentstore.new_studio_mfe.use_new_import_page``: this feature flag will change the CMS to link to the new import page.
|
|
||||||
|
|
||||||
Feature: Tagging/Taxonomy Pages
|
Feature: Tagging/Taxonomy Pages
|
||||||
================================
|
================================
|
||||||
|
|
||||||
@@ -380,6 +327,20 @@ For more information about these options, see the `Getting Help`_ page.
|
|||||||
.. _Getting Help: https://openedx.org/community/connect
|
.. _Getting Help: https://openedx.org/community/connect
|
||||||
|
|
||||||
|
|
||||||
|
Legacy Studio
|
||||||
|
*************
|
||||||
|
|
||||||
|
If you would like to use legacy studio for certain features, you can set the following waffle flags in ``edx-platform``:
|
||||||
|
* ``legacy_studio.text_editor``: loads the legacy HTML Xblock editor when editing a text block
|
||||||
|
* ``legacy_studio.video_editor``: loads the legacy Video editor when editing a video block
|
||||||
|
* ``legacy_studio.problem_editor``: loads the legacy Problem editor when editing a problem block
|
||||||
|
* ``legacy_studio.advanced_settings``: Advanced Settings page
|
||||||
|
* ``legacy_studio.updates``: Updates page
|
||||||
|
* ``legacy_studio.export``: Export page
|
||||||
|
* ``legacy_studio.import``: Import page
|
||||||
|
* ``legacy_studio.files_uploads``: Files page
|
||||||
|
* ``legacy_studio.exam_settings``: loads the legacy Exam Settings
|
||||||
|
|
||||||
License
|
License
|
||||||
*******
|
*******
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,6 @@ metadata:
|
|||||||
openedx.org/arch-interest-groups: ""
|
openedx.org/arch-interest-groups: ""
|
||||||
openedx.org/release: "master"
|
openedx.org/release: "master"
|
||||||
spec:
|
spec:
|
||||||
owner: group:2u-tnl
|
owner: user:bradenmacdonald
|
||||||
type: 'website'
|
type: 'website'
|
||||||
lifecycle: 'production'
|
lifecycle: 'production'
|
||||||
|
|||||||
@@ -10,4 +10,5 @@ coverage:
|
|||||||
threshold: 0%
|
threshold: 0%
|
||||||
ignore:
|
ignore:
|
||||||
- "src/grading-settings/grading-scale/react-ranger.js"
|
- "src/grading-settings/grading-scale/react-ranger.js"
|
||||||
|
- "src/generic/DraggableList/verticalSortableList.ts"
|
||||||
- "src/index.js"
|
- "src/index.js"
|
||||||
|
|||||||
@@ -11,9 +11,11 @@ module.exports = createConfig('jest', {
|
|||||||
],
|
],
|
||||||
moduleNameMapper: {
|
moduleNameMapper: {
|
||||||
'^lodash-es$': 'lodash',
|
'^lodash-es$': 'lodash',
|
||||||
|
// This alias is for any code in the src directory that wants to avoid '../../' style relative imports:
|
||||||
|
'^@src/(.*)$': '<rootDir>/src/$1',
|
||||||
|
// This alias is used for plugins in the plugins/ folder only.
|
||||||
'^CourseAuthoring/(.*)$': '<rootDir>/src/$1',
|
'^CourseAuthoring/(.*)$': '<rootDir>/src/$1',
|
||||||
},
|
},
|
||||||
modulePathIgnorePatterns: [
|
modulePathIgnorePatterns: [
|
||||||
'/src/pages-and-resources/utils.test.jsx',
|
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|||||||
4845
package-lock.json
generated
4845
package-lock.json
generated
@@ -10,6 +10,7 @@
|
|||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/lang-html": "^6.0.0",
|
"@codemirror/lang-html": "^6.0.0",
|
||||||
|
"@codemirror/lang-markdown": "^6.0.0",
|
||||||
"@codemirror/lang-xml": "^6.0.0",
|
"@codemirror/lang-xml": "^6.0.0",
|
||||||
"@codemirror/lint": "^6.2.1",
|
"@codemirror/lint": "^6.2.1",
|
||||||
"@codemirror/state": "^6.0.0",
|
"@codemirror/state": "^6.0.0",
|
||||||
@@ -19,12 +20,12 @@
|
|||||||
"@dnd-kit/sortable": "^8.0.0",
|
"@dnd-kit/sortable": "^8.0.0",
|
||||||
"@dnd-kit/utilities": "^3.2.2",
|
"@dnd-kit/utilities": "^3.2.2",
|
||||||
"@edx/brand": "npm:@openedx/brand-openedx@^1.2.3",
|
"@edx/brand": "npm:@openedx/brand-openedx@^1.2.3",
|
||||||
"@edx/browserslist-config": "1.2.0",
|
"@edx/browserslist-config": "1.5.0",
|
||||||
"@edx/frontend-component-footer": "^14.3.0",
|
"@edx/frontend-component-footer": "^14.9.0",
|
||||||
"@edx/frontend-component-header": "^6.2.0",
|
"@edx/frontend-component-header": "^6.2.0",
|
||||||
"@edx/frontend-enterprise-hotjar": "^7.2.0",
|
"@edx/frontend-enterprise-hotjar": "^7.2.0",
|
||||||
"@edx/frontend-platform": "^8.3.1",
|
"@edx/frontend-platform": "^8.4.0",
|
||||||
"@edx/openedx-atlas": "^0.6.0",
|
"@edx/openedx-atlas": "^0.7.0",
|
||||||
"@openedx-plugins/course-app-calculator": "file:plugins/course-apps/calculator",
|
"@openedx-plugins/course-app-calculator": "file:plugins/course-apps/calculator",
|
||||||
"@openedx-plugins/course-app-edxnotes": "file:plugins/course-apps/edxnotes",
|
"@openedx-plugins/course-app-edxnotes": "file:plugins/course-apps/edxnotes",
|
||||||
"@openedx-plugins/course-app-learning_assistant": "file:plugins/course-apps/learning_assistant",
|
"@openedx-plugins/course-app-learning_assistant": "file:plugins/course-apps/learning_assistant",
|
||||||
@@ -35,13 +36,12 @@
|
|||||||
"@openedx-plugins/course-app-teams": "file:plugins/course-apps/teams",
|
"@openedx-plugins/course-app-teams": "file:plugins/course-apps/teams",
|
||||||
"@openedx-plugins/course-app-wiki": "file:plugins/course-apps/wiki",
|
"@openedx-plugins/course-app-wiki": "file:plugins/course-apps/wiki",
|
||||||
"@openedx-plugins/course-app-xpert_unit_summary": "file:plugins/course-apps/xpert_unit_summary",
|
"@openedx-plugins/course-app-xpert_unit_summary": "file:plugins/course-apps/xpert_unit_summary",
|
||||||
"@openedx/frontend-build": "^14.3.3",
|
"@openedx/frontend-build": "^14.5.0",
|
||||||
"@openedx/frontend-plugin-framework": "^1.6.0",
|
"@openedx/frontend-plugin-framework": "^1.7.0",
|
||||||
"@openedx/frontend-slot-footer": "^1.2.0",
|
"@openedx/paragon": "^23.5.0",
|
||||||
"@openedx/paragon": "^22.16.0",
|
|
||||||
"@redux-devtools/extension": "^3.3.0",
|
"@redux-devtools/extension": "^3.3.0",
|
||||||
"@reduxjs/toolkit": "1.9.7",
|
"@reduxjs/toolkit": "1.9.7",
|
||||||
"@tanstack/react-query": "4.36.1",
|
"@tanstack/react-query": "4.40.1",
|
||||||
"@tinymce/tinymce-react": "^3.14.0",
|
"@tinymce/tinymce-react": "^3.14.0",
|
||||||
"classnames": "2.5.1",
|
"classnames": "2.5.1",
|
||||||
"codemirror": "^6.0.0",
|
"codemirror": "^6.0.0",
|
||||||
@@ -55,7 +55,6 @@
|
|||||||
"meilisearch": "^0.41.0",
|
"meilisearch": "^0.41.0",
|
||||||
"moment": "2.30.1",
|
"moment": "2.30.1",
|
||||||
"moment-shortformat": "^2.1.0",
|
"moment-shortformat": "^2.1.0",
|
||||||
"npm": "^10.8.1",
|
|
||||||
"prop-types": "^15.8.1",
|
"prop-types": "^15.8.1",
|
||||||
"react": "^18.3.1",
|
"react": "^18.3.1",
|
||||||
"react-datepicker": "^4.13.0",
|
"react-datepicker": "^4.13.0",
|
||||||
@@ -65,31 +64,31 @@
|
|||||||
"react-onclickoutside": "^6.13.0",
|
"react-onclickoutside": "^6.13.0",
|
||||||
"react-redux": "7.2.9",
|
"react-redux": "7.2.9",
|
||||||
"react-responsive": "9.0.2",
|
"react-responsive": "9.0.2",
|
||||||
"react-router": "6.27.0",
|
"react-router": "6.30.1",
|
||||||
"react-router-dom": "6.27.0",
|
"react-router-dom": "6.30.1",
|
||||||
"react-select": "5.8.0",
|
"react-select": "5.10.2",
|
||||||
"react-textarea-autosize": "^8.5.3",
|
"react-textarea-autosize": "^8.5.3",
|
||||||
"react-transition-group": "4.4.5",
|
"react-transition-group": "4.4.5",
|
||||||
"redux": "4.0.5",
|
"redux": "4.2.1",
|
||||||
"redux-logger": "^3.0.6",
|
"redux-logger": "^3.0.6",
|
||||||
"redux-thunk": "^2.4.1",
|
"redux-thunk": "^2.4.1",
|
||||||
"reselect": "^4.1.5",
|
"reselect": "^4.1.5",
|
||||||
"start": "^5.1.0",
|
|
||||||
"tinymce": "^5.10.4",
|
"tinymce": "^5.10.4",
|
||||||
"universal-cookie": "^4.0.4",
|
"universal-cookie": "^4.0.4",
|
||||||
"uuid": "^3.4.0",
|
"uuid": "^11.1.0",
|
||||||
"xmlchecker": "^0.1.0",
|
"xmlchecker": "^0.1.0",
|
||||||
"yup": "0.31.1"
|
"yup": "0.32.11"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@edx/react-unit-test-utils": "^4.0.0",
|
|
||||||
"@edx/stylelint-config-edx": "2.3.3",
|
"@edx/stylelint-config-edx": "2.3.3",
|
||||||
"@edx/typescript-config": "^1.0.1",
|
"@edx/typescript-config": "^1.0.1",
|
||||||
"@testing-library/jest-dom": "^6.6.3",
|
"@testing-library/jest-dom": "^6.6.3",
|
||||||
"@testing-library/react": "^16.2.0",
|
"@testing-library/react": "^16.2.0",
|
||||||
"@testing-library/user-event": "^13.2.1",
|
"@testing-library/user-event": "^14.6.1",
|
||||||
"@types/lodash": "^4.17.7",
|
"@types/lodash": "^4.17.17",
|
||||||
"axios-mock-adapter": "1.22.0",
|
"@types/react": "^18",
|
||||||
|
"@types/react-dom": "^18",
|
||||||
|
"axios-mock-adapter": "2.1.0",
|
||||||
"eslint-import-resolver-webpack": "^0.13.8",
|
"eslint-import-resolver-webpack": "^0.13.8",
|
||||||
"fetch-mock-jest": "^1.5.1",
|
"fetch-mock-jest": "^1.5.1",
|
||||||
"jest-canvas-mock": "^2.5.2",
|
"jest-canvas-mock": "^2.5.2",
|
||||||
@@ -148,14 +147,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@babel/code-frame": {
|
"node_modules/@babel/code-frame": {
|
||||||
"version": "7.26.2",
|
"version": "7.27.1",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
|
||||||
"integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
|
"integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/helper-validator-identifier": "^7.25.9",
|
"@babel/helper-validator-identifier": "^7.27.1",
|
||||||
"js-tokens": "^4.0.0",
|
"js-tokens": "^4.0.0",
|
||||||
"picocolors": "^1.0.0"
|
"picocolors": "^1.1.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.9.0"
|
"node": ">=6.9.0"
|
||||||
@@ -437,9 +436,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@babel/helper-validator-identifier": {
|
"node_modules/@babel/helper-validator-identifier": {
|
||||||
"version": "7.25.9",
|
"version": "7.27.1",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
|
||||||
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
|
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.9.0"
|
"node": ">=6.9.0"
|
||||||
@@ -1964,6 +1963,215 @@
|
|||||||
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
|
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/@bundled-es-modules/deepmerge": {
|
||||||
|
"version": "4.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@bundled-es-modules/deepmerge/-/deepmerge-4.3.1.tgz",
|
||||||
|
"integrity": "sha512-Rk453EklPUPC3NRWc3VUNI/SSUjdBaFoaQvFRmNBNtMHVtOFD5AntiWg5kEE1hqcPqedYFDzxE3ZcMYPcA195w==",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"deepmerge": "^4.3.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@bundled-es-modules/glob": {
|
||||||
|
"version": "10.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@bundled-es-modules/glob/-/glob-10.4.2.tgz",
|
||||||
|
"integrity": "sha512-740y5ofkzydsFao5EXJrGilcIL6EFEw/cmPf2uhTw9J6G1YOhiIFjNFCHdpgEiiH5VlU3G0SARSjlFlimRRSMA==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"buffer": "^6.0.3",
|
||||||
|
"events": "^3.3.0",
|
||||||
|
"glob": "^10.4.2",
|
||||||
|
"patch-package": "^8.0.0",
|
||||||
|
"path": "^0.12.7",
|
||||||
|
"stream": "^0.0.3",
|
||||||
|
"string_decoder": "^1.3.0",
|
||||||
|
"url": "^0.11.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@bundled-es-modules/glob/node_modules/brace-expansion": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"balanced-match": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@bundled-es-modules/glob/node_modules/buffer": {
|
||||||
|
"version": "6.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
|
||||||
|
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"base64-js": "^1.3.1",
|
||||||
|
"ieee754": "^1.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@bundled-es-modules/glob/node_modules/glob": {
|
||||||
|
"version": "10.4.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
|
||||||
|
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"foreground-child": "^3.1.0",
|
||||||
|
"jackspeak": "^3.1.2",
|
||||||
|
"minimatch": "^9.0.4",
|
||||||
|
"minipass": "^7.1.2",
|
||||||
|
"package-json-from-dist": "^1.0.0",
|
||||||
|
"path-scurry": "^1.11.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"glob": "dist/esm/bin.mjs"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@bundled-es-modules/glob/node_modules/minimatch": {
|
||||||
|
"version": "9.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
|
||||||
|
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"brace-expansion": "^2.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16 || 14 >=14.17"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@bundled-es-modules/glob/node_modules/string_decoder": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"safe-buffer": "~5.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@bundled-es-modules/memfs": {
|
||||||
|
"version": "4.17.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@bundled-es-modules/memfs/-/memfs-4.17.0.tgz",
|
||||||
|
"integrity": "sha512-ykdrkEmQr9BV804yd37ikXfNnvxrwYfY9Z2/EtMHFEFadEjsQXJ1zL9bVZrKNLDtm91UdUOEHso6Aweg93K6xQ==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"assert": "^2.1.0",
|
||||||
|
"buffer": "^6.0.3",
|
||||||
|
"events": "^3.3.0",
|
||||||
|
"memfs": "^4.17.0",
|
||||||
|
"path": "^0.12.7",
|
||||||
|
"stream": "^0.0.3",
|
||||||
|
"util": "^0.12.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@bundled-es-modules/memfs/node_modules/buffer": {
|
||||||
|
"version": "6.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
|
||||||
|
"integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"base64-js": "^1.3.1",
|
||||||
|
"ieee754": "^1.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@bundled-es-modules/memfs/node_modules/memfs": {
|
||||||
|
"version": "4.17.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.0.tgz",
|
||||||
|
"integrity": "sha512-4eirfZ7thblFmqFjywlTmuWVSvccHAJbn1r8qQLzmTO11qcqpohOjmY2mFce6x7x7WtskzRqApPD0hv+Oa74jg==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"@jsonjoy.com/json-pack": "^1.0.3",
|
||||||
|
"@jsonjoy.com/util": "^1.3.0",
|
||||||
|
"tree-dump": "^1.0.1",
|
||||||
|
"tslib": "^2.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 4.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/streamich"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@bundled-es-modules/postcss-calc-ast-parser": {
|
||||||
|
"version": "0.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/@bundled-es-modules/postcss-calc-ast-parser/-/postcss-calc-ast-parser-0.1.6.tgz",
|
||||||
|
"integrity": "sha512-y65TM5zF+uaxo9OeekJ3rxwTINlQvrkbZLogYvQYVoLtxm4xEiHfZ7e/MyiWbStYyWZVZkVqsaVU6F4SUK5XUA==",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"postcss-calc-ast-parser": "^0.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@chevrotain/cst-dts-gen": {
|
||||||
|
"version": "11.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz",
|
||||||
|
"integrity": "sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"@chevrotain/gast": "11.0.3",
|
||||||
|
"@chevrotain/types": "11.0.3",
|
||||||
|
"lodash-es": "4.17.21"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@chevrotain/gast": {
|
||||||
|
"version": "11.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-11.0.3.tgz",
|
||||||
|
"integrity": "sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"@chevrotain/types": "11.0.3",
|
||||||
|
"lodash-es": "4.17.21"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@chevrotain/regexp-to-ast": {
|
||||||
|
"version": "11.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz",
|
||||||
|
"integrity": "sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==",
|
||||||
|
"license": "Apache-2.0"
|
||||||
|
},
|
||||||
|
"node_modules/@chevrotain/types": {
|
||||||
|
"version": "11.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.0.3.tgz",
|
||||||
|
"integrity": "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==",
|
||||||
|
"license": "Apache-2.0"
|
||||||
|
},
|
||||||
|
"node_modules/@chevrotain/utils": {
|
||||||
|
"version": "11.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-11.0.3.tgz",
|
||||||
|
"integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==",
|
||||||
|
"license": "Apache-2.0"
|
||||||
|
},
|
||||||
"node_modules/@codemirror/autocomplete": {
|
"node_modules/@codemirror/autocomplete": {
|
||||||
"version": "6.18.6",
|
"version": "6.18.6",
|
||||||
"resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.6.tgz",
|
"resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.6.tgz",
|
||||||
@@ -1977,9 +2185,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@codemirror/commands": {
|
"node_modules/@codemirror/commands": {
|
||||||
"version": "6.8.0",
|
"version": "6.8.1",
|
||||||
"resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.8.1.tgz",
|
||||||
"integrity": "sha512-q8VPEFaEP4ikSlt6ZxjB3zW72+7osfAYW9i8Zu943uqbKuz6utc1+F170hyLUCUltXORjQXRyYQNfkckzA/bPQ==",
|
"integrity": "sha512-KlGVYufHMQzxbdQONiLyGQDUW0itrLZwq3CcY7xpv9ZLRHqzkBSoteocBHtMCoY7/Ci4xhzSrToIeLg7FxHuaw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/language": "^6.0.0",
|
"@codemirror/language": "^6.0.0",
|
||||||
@@ -2033,6 +2241,21 @@
|
|||||||
"@lezer/javascript": "^1.0.0"
|
"@lezer/javascript": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@codemirror/lang-markdown": {
|
||||||
|
"version": "6.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.3.4.tgz",
|
||||||
|
"integrity": "sha512-fBm0BO03azXnTAsxhONDYHi/qWSI+uSEIpzKM7h/bkIc9fHnFp9y7KTMXKON0teNT97pFhc1a9DQTtWBYEZ7ug==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@codemirror/autocomplete": "^6.7.1",
|
||||||
|
"@codemirror/lang-html": "^6.0.0",
|
||||||
|
"@codemirror/language": "^6.3.0",
|
||||||
|
"@codemirror/state": "^6.0.0",
|
||||||
|
"@codemirror/view": "^6.0.0",
|
||||||
|
"@lezer/common": "^1.2.1",
|
||||||
|
"@lezer/markdown": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@codemirror/lang-xml": {
|
"node_modules/@codemirror/lang-xml": {
|
||||||
"version": "6.1.0",
|
"version": "6.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@codemirror/lang-xml/-/lang-xml-6.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@codemirror/lang-xml/-/lang-xml-6.1.0.tgz",
|
||||||
@@ -2093,12 +2316,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@codemirror/view": {
|
"node_modules/@codemirror/view": {
|
||||||
"version": "6.36.4",
|
"version": "6.38.1",
|
||||||
"resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.36.4.tgz",
|
"resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.1.tgz",
|
||||||
"integrity": "sha512-ZQ0V5ovw/miKEXTvjgzRyjnrk9TwriUB1k4R5p7uNnHR9Hus+D1SXHGdJshijEzPFjU25xea/7nhIeSqYFKdbA==",
|
"integrity": "sha512-RmTOkE7hRU3OVREqFVITWHz6ocgBjv08GoePscAakgVQfciA3SGCEk7mb9IzwW61cKKmlTpHXG6DUE5Ubx+MGQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/state": "^6.5.0",
|
"@codemirror/state": "^6.5.0",
|
||||||
|
"crelt": "^1.0.6",
|
||||||
"style-mod": "^4.1.0",
|
"style-mod": "^4.1.0",
|
||||||
"w3c-keyname": "^2.2.4"
|
"w3c-keyname": "^2.2.4"
|
||||||
}
|
}
|
||||||
@@ -2306,9 +2530,9 @@
|
|||||||
"license": "GPL-3.0-or-later"
|
"license": "GPL-3.0-or-later"
|
||||||
},
|
},
|
||||||
"node_modules/@edx/browserslist-config": {
|
"node_modules/@edx/browserslist-config": {
|
||||||
"version": "1.2.0",
|
"version": "1.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/@edx/browserslist-config/-/browserslist-config-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@edx/browserslist-config/-/browserslist-config-1.5.0.tgz",
|
||||||
"integrity": "sha512-T1+6P52Yx7SMkmoIr4O0Q3m/DyRdrLTJbv1xVijdRLFEq1hqdafEs+Ln1423U5LSkTePb9AOkEtL1G0RZLFl1w==",
|
"integrity": "sha512-d2ggwi5j4DOBJOwhWZxBWQSDR0DhT4ke/1PbzRauICdFkuOyax+PsFjK8GUh443K2OaQpy9PGfiCzZ1Yg37AUA==",
|
||||||
"license": "AGPL-3.0"
|
"license": "AGPL-3.0"
|
||||||
},
|
},
|
||||||
"node_modules/@edx/eslint-config": {
|
"node_modules/@edx/eslint-config": {
|
||||||
@@ -2329,9 +2553,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@edx/frontend-component-footer": {
|
"node_modules/@edx/frontend-component-footer": {
|
||||||
"version": "14.3.0",
|
"version": "14.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/@edx/frontend-component-footer/-/frontend-component-footer-14.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/@edx/frontend-component-footer/-/frontend-component-footer-14.9.0.tgz",
|
||||||
"integrity": "sha512-domQOIsAf+b1YiQvpt245Cfz6OgrKKw3TJrDIFS+J70Mn98MpCGGg55mBraOzTfopsouzp5bN03F1PLkXyjnEQ==",
|
"integrity": "sha512-eI3ffSvAKDoP1K/vBuQrCL7ca0U7hJqRlGjBq62dSAlsgOS59t+9T1ZkIWCSoRUzHLv4fS+taiBeCsIQVV356Q==",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fortawesome/fontawesome-svg-core": "6.7.2",
|
"@fortawesome/fontawesome-svg-core": "6.7.2",
|
||||||
@@ -2339,6 +2563,7 @@
|
|||||||
"@fortawesome/free-regular-svg-icons": "6.7.2",
|
"@fortawesome/free-regular-svg-icons": "6.7.2",
|
||||||
"@fortawesome/free-solid-svg-icons": "6.7.2",
|
"@fortawesome/free-solid-svg-icons": "6.7.2",
|
||||||
"@fortawesome/react-fontawesome": "0.2.2",
|
"@fortawesome/react-fontawesome": "0.2.2",
|
||||||
|
"@openedx/frontend-plugin-framework": "^1.7.0",
|
||||||
"classnames": "^2.5.1",
|
"classnames": "^2.5.1",
|
||||||
"jest-environment-jsdom": "^29.7.0",
|
"jest-environment-jsdom": "^29.7.0",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
@@ -2353,21 +2578,18 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@edx/frontend-component-header": {
|
"node_modules/@edx/frontend-component-header": {
|
||||||
"version": "6.2.0",
|
"version": "6.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/@edx/frontend-component-header/-/frontend-component-header-6.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@edx/frontend-component-header/-/frontend-component-header-6.6.0.tgz",
|
||||||
"integrity": "sha512-rM/+NtvPAQk+RmAA/fhXnsneeta/CGi319Wei/or6aW7ETpSmMkfoYM4MKv+JPhF/vLMxqBzz6lwzefF9D62Lw==",
|
"integrity": "sha512-Qp4f0ZaKmwYdEXcjr24zePbN9oEdVFPuamxA4nH6dUGVi2whwX+US80yVJ1abQs3BX23zPpzYnqyc6/UhOqhLw==",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fortawesome/fontawesome-svg-core": "6.6.0",
|
"@fortawesome/fontawesome-svg-core": "6.7.2",
|
||||||
"@fortawesome/free-brands-svg-icons": "6.6.0",
|
"@fortawesome/free-brands-svg-icons": "6.7.2",
|
||||||
"@fortawesome/free-regular-svg-icons": "6.6.0",
|
"@fortawesome/free-regular-svg-icons": "6.7.2",
|
||||||
"@fortawesome/free-solid-svg-icons": "6.6.0",
|
"@fortawesome/free-solid-svg-icons": "6.7.2",
|
||||||
"@fortawesome/react-fontawesome": "^0.2.0",
|
"@fortawesome/react-fontawesome": "^0.2.0",
|
||||||
"@openedx/frontend-plugin-framework": "^1.6.0",
|
"@openedx/frontend-plugin-framework": "^1.7.0",
|
||||||
"axios-mock-adapter": "1.22.0",
|
|
||||||
"babel-polyfill": "6.26.0",
|
|
||||||
"classnames": "^2.5.1",
|
"classnames": "^2.5.1",
|
||||||
"jest-environment-jsdom": "^29.7.0",
|
|
||||||
"react-responsive": "8.2.0",
|
"react-responsive": "8.2.0",
|
||||||
"react-transition-group": "4.4.5"
|
"react-transition-group": "4.4.5"
|
||||||
},
|
},
|
||||||
@@ -2380,63 +2602,6 @@
|
|||||||
"react-router-dom": "^6.14.2"
|
"react-router-dom": "^6.14.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@edx/frontend-component-header/node_modules/@fortawesome/fontawesome-common-types": {
|
|
||||||
"version": "6.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.6.0.tgz",
|
|
||||||
"integrity": "sha512-xyX0X9mc0kyz9plIyryrRbl7ngsA9jz77mCZJsUkLl+ZKs0KWObgaEBoSgQiYWAsSmjz/yjl0F++Got0Mdp4Rw==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@edx/frontend-component-header/node_modules/@fortawesome/fontawesome-svg-core": {
|
|
||||||
"version": "6.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.6.0.tgz",
|
|
||||||
"integrity": "sha512-KHwPkCk6oRT4HADE7smhfsKudt9N/9lm6EJ5BVg0tD1yPA5hht837fB87F8pn15D8JfTqQOjhKTktwmLMiD7Kg==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@fortawesome/fontawesome-common-types": "6.6.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@edx/frontend-component-header/node_modules/@fortawesome/free-brands-svg-icons": {
|
|
||||||
"version": "6.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.6.0.tgz",
|
|
||||||
"integrity": "sha512-1MPD8lMNW/earme4OQi1IFHtmHUwAKgghXlNwWi9GO7QkTfD+IIaYpIai4m2YJEzqfEji3jFHX1DZI5pbY/biQ==",
|
|
||||||
"license": "(CC-BY-4.0 AND MIT)",
|
|
||||||
"dependencies": {
|
|
||||||
"@fortawesome/fontawesome-common-types": "6.6.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@edx/frontend-component-header/node_modules/@fortawesome/free-regular-svg-icons": {
|
|
||||||
"version": "6.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.6.0.tgz",
|
|
||||||
"integrity": "sha512-Yv9hDzL4aI73BEwSEh20clrY8q/uLxawaQ98lekBx6t9dQKDHcDzzV1p2YtBGTtolYtNqcWdniOnhzB+JPnQEQ==",
|
|
||||||
"license": "(CC-BY-4.0 AND MIT)",
|
|
||||||
"dependencies": {
|
|
||||||
"@fortawesome/fontawesome-common-types": "6.6.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@edx/frontend-component-header/node_modules/@fortawesome/free-solid-svg-icons": {
|
|
||||||
"version": "6.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.6.0.tgz",
|
|
||||||
"integrity": "sha512-IYv/2skhEDFc2WGUcqvFJkeK39Q+HyPf5GHUrT/l2pKbtgEIv1al1TKd6qStR5OIwQdN1GZP54ci3y4mroJWjA==",
|
|
||||||
"license": "(CC-BY-4.0 AND MIT)",
|
|
||||||
"dependencies": {
|
|
||||||
"@fortawesome/fontawesome-common-types": "6.6.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@edx/frontend-component-header/node_modules/react-responsive": {
|
"node_modules/@edx/frontend-component-header/node_modules/react-responsive": {
|
||||||
"version": "8.2.0",
|
"version": "8.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-8.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-8.2.0.tgz",
|
||||||
@@ -2467,16 +2632,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@edx/frontend-platform": {
|
"node_modules/@edx/frontend-platform": {
|
||||||
"version": "8.3.3",
|
"version": "8.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/@edx/frontend-platform/-/frontend-platform-8.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/@edx/frontend-platform/-/frontend-platform-8.5.0.tgz",
|
||||||
"integrity": "sha512-xj8uKY4k9DgScYWsBFx8B1cngZ6HTPHvmd7W+NpBB4Kqw9yCT1OUii4p8/8khF68vb7hcTQuu13A9hM0lkE5bw==",
|
"integrity": "sha512-nzz46Pe0G1mFHoywzOWPhwy2m26CmD3o11FubeU8F94VsKfJsAexTETyWHRvwuVhQs6qaFzgobAjjEl8w0mu6A==",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@cospired/i18n-iso-languages": "4.2.0",
|
"@cospired/i18n-iso-languages": "4.2.0",
|
||||||
"@formatjs/intl-pluralrules": "4.3.3",
|
"@formatjs/intl-pluralrules": "4.3.3",
|
||||||
"@formatjs/intl-relativetimeformat": "10.0.1",
|
"@formatjs/intl-relativetimeformat": "10.0.1",
|
||||||
"axios": "1.8.4",
|
"axios": "1.9.0",
|
||||||
"axios-cache-interceptor": "1.6.2",
|
"axios-cache-interceptor": "1.8.0",
|
||||||
"form-urlencoded": "4.1.4",
|
"form-urlencoded": "4.1.4",
|
||||||
"glob": "7.2.3",
|
"glob": "7.2.3",
|
||||||
"history": "4.10.1",
|
"history": "4.10.1",
|
||||||
@@ -2505,6 +2670,12 @@
|
|||||||
"react-redux": "^7.1.1 || ^8.1.1",
|
"react-redux": "^7.1.1 || ^8.1.1",
|
||||||
"react-router-dom": "^6.0.0",
|
"react-router-dom": "^6.0.0",
|
||||||
"redux": "^4.0.4"
|
"redux": "^4.0.4"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@openedx/frontend-build": {
|
||||||
|
"optional": true,
|
||||||
|
"reason": "This package is only a peer dependency to ensure using a minimum compatible version that provides env.config and PARAGON_THEME support. It is not needed at runtime, and may be omitted with `--omit=optional`."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@edx/new-relic-source-map-webpack-plugin": {
|
"node_modules/@edx/new-relic-source-map-webpack-plugin": {
|
||||||
@@ -2517,39 +2688,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@edx/openedx-atlas": {
|
"node_modules/@edx/openedx-atlas": {
|
||||||
"version": "0.6.2",
|
"version": "0.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/@edx/openedx-atlas/-/openedx-atlas-0.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/@edx/openedx-atlas/-/openedx-atlas-0.7.0.tgz",
|
||||||
"integrity": "sha512-28Q8vzJDMS4wUxdkbIUBQpzWJ3HTdMaGlaEhFjrVGfuZkh++1AG6Tn/7FMD88cegalYAkphu530VQCHEkMZQhw==",
|
"integrity": "sha512-jqv0IV1pHsSn9+RO8Rdsr8jm3SOd84CCzzmo2QC9yvh1MK1+p4YDURQLpmmgKJ0JzE5Cb6ImhnNL/ogpJ2wetQ==",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
"atlas": "atlas"
|
"atlas": "atlas"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@edx/react-unit-test-utils": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@edx/react-unit-test-utils/-/react-unit-test-utils-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-QlVYhYD9L2bzx1eAtf8BbCJr00ek9rrHrG+/pW2bVSt+t0uvKHQpX1CNdMrDePv18DsMeC7IOB00t8ZIn4mi7w==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "AGPL-3.0",
|
|
||||||
"dependencies": {
|
|
||||||
"@edx/browserslist-config": "^1.1.1",
|
|
||||||
"@reduxjs/toolkit": "^1.5.1",
|
|
||||||
"@testing-library/dom": "^10.4.0",
|
|
||||||
"@testing-library/jest-dom": "^6.6.3",
|
|
||||||
"@testing-library/react": "^16.2.0",
|
|
||||||
"classnames": "^2.2.6",
|
|
||||||
"core-js": "3.6.5",
|
|
||||||
"lodash": "^4.17.21",
|
|
||||||
"react-dev-utils": "^12.0.1",
|
|
||||||
"react-test-renderer": "^18.3.1"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"@edx/frontend-platform": "^8.3.1",
|
|
||||||
"@openedx/frontend-build": "^14.3.0",
|
|
||||||
"@openedx/paragon": "^22.0.0 || ^23.0.0",
|
|
||||||
"react": "^18.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@edx/stylelint-config-edx": {
|
"node_modules/@edx/stylelint-config-edx": {
|
||||||
"version": "2.3.3",
|
"version": "2.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/@edx/stylelint-config-edx/-/stylelint-config-edx-2.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/@edx/stylelint-config-edx/-/stylelint-config-edx-2.3.3.tgz",
|
||||||
@@ -2573,20 +2719,20 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@emnapi/core": {
|
"node_modules/@emnapi/core": {
|
||||||
"version": "1.3.1",
|
"version": "1.4.3",
|
||||||
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz",
|
||||||
"integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==",
|
"integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emnapi/wasi-threads": "1.0.1",
|
"@emnapi/wasi-threads": "1.0.2",
|
||||||
"tslib": "^2.4.0"
|
"tslib": "^2.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@emnapi/runtime": {
|
"node_modules/@emnapi/runtime": {
|
||||||
"version": "1.3.1",
|
"version": "1.4.3",
|
||||||
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz",
|
||||||
"integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==",
|
"integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -2594,9 +2740,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@emnapi/wasi-threads": {
|
"node_modules/@emnapi/wasi-threads": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz",
|
||||||
"integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==",
|
"integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -2733,9 +2879,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@eslint-community/eslint-utils": {
|
"node_modules/@eslint-community/eslint-utils": {
|
||||||
"version": "4.5.1",
|
"version": "4.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz",
|
||||||
"integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==",
|
"integrity": "sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"eslint-visitor-keys": "^3.4.3"
|
"eslint-visitor-keys": "^3.4.3"
|
||||||
@@ -2874,9 +3020,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@formatjs/cli": {
|
"node_modules/@formatjs/cli": {
|
||||||
"version": "6.6.3",
|
"version": "6.6.4",
|
||||||
"resolved": "https://registry.npmjs.org/@formatjs/cli/-/cli-6.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/@formatjs/cli/-/cli-6.6.4.tgz",
|
||||||
"integrity": "sha512-vW9EQdHmxQg/+s9K39ZwKcIyyhmEMHOtsv1KyQFtjv+pbE3XmiB5ohoo4wAx3HDsrufrTsplGnQdQ+KB2wY/bA==",
|
"integrity": "sha512-VSDPsT7AO/mtth1rEBwl97Us5dMgqZpI8v7QJXakB4f90pDJsqHBdBeTbjHYrlFr2WvBLVo3/6mGPw9DeX7PUg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
"formatjs": "bin/formatjs"
|
"formatjs": "bin/formatjs"
|
||||||
@@ -3202,9 +3348,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@formatjs/ts-transformer/node_modules/typescript": {
|
"node_modules/@formatjs/ts-transformer/node_modules/typescript": {
|
||||||
"version": "5.8.2",
|
"version": "5.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
|
||||||
"integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
|
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsc": "bin/tsc",
|
"tsc": "bin/tsc",
|
||||||
@@ -3331,6 +3477,102 @@
|
|||||||
"deprecated": "Use @eslint/object-schema instead",
|
"deprecated": "Use @eslint/object-schema instead",
|
||||||
"license": "BSD-3-Clause"
|
"license": "BSD-3-Clause"
|
||||||
},
|
},
|
||||||
|
"node_modules/@isaacs/cliui": {
|
||||||
|
"version": "8.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
|
||||||
|
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"string-width": "^5.1.2",
|
||||||
|
"string-width-cjs": "npm:string-width@^4.2.0",
|
||||||
|
"strip-ansi": "^7.0.1",
|
||||||
|
"strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
|
||||||
|
"wrap-ansi": "^8.1.0",
|
||||||
|
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@isaacs/cliui/node_modules/ansi-regex": {
|
||||||
|
"version": "6.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
|
||||||
|
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@isaacs/cliui/node_modules/ansi-styles": {
|
||||||
|
"version": "6.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
|
||||||
|
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@isaacs/cliui/node_modules/emoji-regex": {
|
||||||
|
"version": "9.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
|
||||||
|
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/@isaacs/cliui/node_modules/string-width": {
|
||||||
|
"version": "5.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
|
||||||
|
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"eastasianwidth": "^0.2.0",
|
||||||
|
"emoji-regex": "^9.2.2",
|
||||||
|
"strip-ansi": "^7.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@isaacs/cliui/node_modules/strip-ansi": {
|
||||||
|
"version": "7.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
|
||||||
|
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-regex": "^6.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
|
||||||
|
"version": "8.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
|
||||||
|
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": "^6.1.0",
|
||||||
|
"string-width": "^5.0.1",
|
||||||
|
"strip-ansi": "^7.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@istanbuljs/load-nyc-config": {
|
"node_modules/@istanbuljs/load-nyc-config": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
|
||||||
@@ -3806,6 +4048,60 @@
|
|||||||
"@jridgewell/sourcemap-codec": "^1.4.14"
|
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@jsonjoy.com/base64": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/streamich"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"tslib": "2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@jsonjoy.com/json-pack": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"@jsonjoy.com/base64": "^1.1.1",
|
||||||
|
"@jsonjoy.com/util": "^1.1.2",
|
||||||
|
"hyperdyperid": "^1.2.0",
|
||||||
|
"thingies": "^1.20.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/streamich"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"tslib": "2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@jsonjoy.com/util": {
|
||||||
|
"version": "1.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz",
|
||||||
|
"integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/streamich"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"tslib": "2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@leichtgewicht/ip-codec": {
|
"node_modules/@leichtgewicht/ip-codec": {
|
||||||
"version": "2.0.5",
|
"version": "2.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
|
||||||
@@ -3850,9 +4146,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@lezer/javascript": {
|
"node_modules/@lezer/javascript": {
|
||||||
"version": "1.4.21",
|
"version": "1.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.4.21.tgz",
|
"resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.5.1.tgz",
|
||||||
"integrity": "sha512-lL+1fcuxWYPURMM/oFZLEDm0XuLN128QPV+VuGtKpeaOGdcl9F2LYC3nh1S9LkPqx9M0mndZFdXCipNAZpzIkQ==",
|
"integrity": "sha512-ATOImjeVJuvgm3JQ/bpo2Tmv55HSScE2MTPnKRMRIPx2cLhHGyX2VnqpHhtIV1tVzIjZDbcWQm+NCTF40ggZVw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@lezer/common": "^1.2.0",
|
"@lezer/common": "^1.2.0",
|
||||||
@@ -3869,6 +4165,16 @@
|
|||||||
"@lezer/common": "^1.0.0"
|
"@lezer/common": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@lezer/markdown": {
|
||||||
|
"version": "1.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.4.3.tgz",
|
||||||
|
"integrity": "sha512-kfw+2uMrQ/wy/+ONfrH83OkdFNM0ye5Xq96cLlaCy7h5UT9FO54DU4oRoIc0CSBh5NWmWuiIJA7NGLMJbQ+Oxg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@lezer/common": "^1.0.0",
|
||||||
|
"@lezer/highlight": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@lezer/xml": {
|
"node_modules/@lezer/xml": {
|
||||||
"version": "1.0.6",
|
"version": "1.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.6.tgz",
|
||||||
@@ -3887,21 +4193,21 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@napi-rs/wasm-runtime": {
|
"node_modules/@napi-rs/wasm-runtime": {
|
||||||
"version": "0.2.7",
|
"version": "0.2.9",
|
||||||
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.7.tgz",
|
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.9.tgz",
|
||||||
"integrity": "sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==",
|
"integrity": "sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emnapi/core": "^1.3.1",
|
"@emnapi/core": "^1.4.0",
|
||||||
"@emnapi/runtime": "^1.3.1",
|
"@emnapi/runtime": "^1.4.0",
|
||||||
"@tybys/wasm-util": "^0.9.0"
|
"@tybys/wasm-util": "^0.9.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@newrelic/publish-sourcemap": {
|
"node_modules/@newrelic/publish-sourcemap": {
|
||||||
"version": "5.1.3",
|
"version": "5.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/@newrelic/publish-sourcemap/-/publish-sourcemap-5.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/@newrelic/publish-sourcemap/-/publish-sourcemap-5.1.4.tgz",
|
||||||
"integrity": "sha512-CuHiYXRVU4kDJ4D0nZYVRlRKb8V+s8MFpIyA2D5UBNCOntf/8jv+rxJR1wJ8WYkTio7f+uBKXn/K4GzrhWvKUw==",
|
"integrity": "sha512-35Nm26FxnVi7Nrfrl7nMHObIrHlkCStIPul/fQnru7RBlZIZiYKeGA9eEKBuho1ccoFK783w12nuntSV6wohlg==",
|
||||||
"license": "New Relic proprietary",
|
"license": "New Relic proprietary",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"superagent": "^10.1.0",
|
"superagent": "^10.1.0",
|
||||||
@@ -3929,6 +4235,18 @@
|
|||||||
"eslint-scope": "5.1.1"
|
"eslint-scope": "5.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@noble/hashes": {
|
||||||
|
"version": "1.8.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
|
||||||
|
"integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": "^14.21.3 || >=16"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://paulmillr.com/funding/"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@nodelib/fs.scandir": {
|
"node_modules/@nodelib/fs.scandir": {
|
||||||
"version": "2.1.5",
|
"version": "2.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
|
||||||
@@ -4005,9 +4323,9 @@
|
|||||||
"link": true
|
"link": true
|
||||||
},
|
},
|
||||||
"node_modules/@openedx/frontend-build": {
|
"node_modules/@openedx/frontend-build": {
|
||||||
"version": "14.4.0",
|
"version": "14.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/@openedx/frontend-build/-/frontend-build-14.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/@openedx/frontend-build/-/frontend-build-14.6.1.tgz",
|
||||||
"integrity": "sha512-9TrJ2x9n7VkMymah2e1+6cRhC0kpNdFDv63s2RbPdCHjfoFBvaelqfrwMw1KXfudnc6EO3M7scQTw2z3vfNrpA==",
|
"integrity": "sha512-HPswCfxThP0F92fmKqOetQ+E7HNiXDmOE+vHkfrpdKYNUj6Sn+7jaBICn8pNfif8uq4tF2ZGRnAgfUphry2ORQ==",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/cli": "7.24.8",
|
"@babel/cli": "7.24.8",
|
||||||
@@ -4089,9 +4407,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@openedx/frontend-build/node_modules/semver": {
|
"node_modules/@openedx/frontend-build/node_modules/semver": {
|
||||||
"version": "7.7.1",
|
"version": "7.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
||||||
"integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
|
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"bin": {
|
"bin": {
|
||||||
"semver": "bin/semver.js"
|
"semver": "bin/semver.js"
|
||||||
@@ -4157,9 +4475,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@openedx/frontend-plugin-framework": {
|
"node_modules/@openedx/frontend-plugin-framework": {
|
||||||
"version": "1.6.0",
|
"version": "1.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/@openedx/frontend-plugin-framework/-/frontend-plugin-framework-1.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/@openedx/frontend-plugin-framework/-/frontend-plugin-framework-1.7.0.tgz",
|
||||||
"integrity": "sha512-zgP+/hs/cvcPmFOgVm2xt/qgX1nheNsfipzCO7I3bON4hHyOhmOyzwFZJ7pz7GzCJwKlMVguh3HcJgf4p/BPKQ==",
|
"integrity": "sha512-8tGkuHvtzhbqb9dU4sXUtR0K44+Hjh1uGR6DvhZAt9wSKQC1v4RBk34ef8DFzQhoNQa/Jtn6BJuta4Un6MmHmw==",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@edx/brand": "npm:@openedx/brand-openedx@^1.2.2",
|
"@edx/brand": "npm:@openedx/brand-openedx@^1.2.2",
|
||||||
@@ -4233,33 +4551,10 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@openedx/frontend-plugin-framework/node_modules/redux": {
|
|
||||||
"version": "4.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
|
|
||||||
"integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@babel/runtime": "^7.9.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@openedx/frontend-slot-footer": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@openedx/frontend-slot-footer/-/frontend-slot-footer-1.2.0.tgz",
|
|
||||||
"integrity": "sha512-bJuqgdiAlPRj1QuUOJWtNqGTCTcdsk4vHeOM3jRkxtWycq+j1JpGnnZEWAmjoRv9dDKr39vt2buNrmvj0sCTbA==",
|
|
||||||
"license": "AGPL-3.0",
|
|
||||||
"dependencies": {
|
|
||||||
"@openedx/frontend-plugin-framework": "^1.5.0"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"@edx/frontend-component-footer": "*",
|
|
||||||
"react": "^17.0.0 || ^18.0.0",
|
|
||||||
"react-dom": "^17.0.0 || ^18.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@openedx/paragon": {
|
"node_modules/@openedx/paragon": {
|
||||||
"version": "22.17.0",
|
"version": "23.14.2",
|
||||||
"resolved": "https://registry.npmjs.org/@openedx/paragon/-/paragon-22.17.0.tgz",
|
"resolved": "https://registry.npmjs.org/@openedx/paragon/-/paragon-23.14.2.tgz",
|
||||||
"integrity": "sha512-MzOLQ0myaOErwumPJwxVZXTw7zJKrARtu4YMSaISF5Sz6pE1/dYz9qfRcqaraYRcJGNdbPRzOG0v3iqbZo1uHQ==",
|
"integrity": "sha512-mBsoH9nwt4VGkoE9y33BrSJsjTzWlKjooWGXeJng4LdFNnBy7bhtEvRENQ9/0L0/trWhEMZffAMP7h9HBfg5EQ==",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"example",
|
"example",
|
||||||
@@ -4269,20 +4564,33 @@
|
|||||||
"dependent-usage-analyzer"
|
"dependent-usage-analyzer"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fortawesome/fontawesome-svg-core": "^6.1.1",
|
|
||||||
"@fortawesome/react-fontawesome": "^0.1.18",
|
|
||||||
"@popperjs/core": "^2.11.4",
|
"@popperjs/core": "^2.11.4",
|
||||||
|
"@tokens-studio/sd-transforms": "^1.2.4",
|
||||||
|
"axios": "^0.27.2",
|
||||||
"bootstrap": "^4.6.2",
|
"bootstrap": "^4.6.2",
|
||||||
"chalk": "^4.1.2",
|
"chalk": "^4.1.2",
|
||||||
"child_process": "^1.0.2",
|
"child_process": "^1.0.2",
|
||||||
|
"chroma-js": "^2.4.2",
|
||||||
"classnames": "^2.3.1",
|
"classnames": "^2.3.1",
|
||||||
|
"cli-progress": "^3.12.0",
|
||||||
|
"commander": "^9.4.1",
|
||||||
"email-prop-type": "^3.0.0",
|
"email-prop-type": "^3.0.0",
|
||||||
"file-selector": "^0.6.0",
|
"file-selector": "^0.6.0",
|
||||||
"font-awesome": "^4.7.0",
|
|
||||||
"glob": "^8.0.3",
|
"glob": "^8.0.3",
|
||||||
"inquirer": "^8.2.5",
|
"inquirer": "^8.2.5",
|
||||||
|
"js-toml": "^1.0.0",
|
||||||
"lodash.uniqby": "^4.7.0",
|
"lodash.uniqby": "^4.7.0",
|
||||||
|
"log-update": "^4.0.0",
|
||||||
|
"lz-string": "^1.5.0",
|
||||||
"mailto-link": "^2.0.0",
|
"mailto-link": "^2.0.0",
|
||||||
|
"minimist": "^1.2.8",
|
||||||
|
"ora": "^5.4.1",
|
||||||
|
"postcss": "^8.4.21",
|
||||||
|
"postcss-combine-duplicated-selectors": "^10.0.3",
|
||||||
|
"postcss-custom-media": "^9.1.2",
|
||||||
|
"postcss-import": "^15.1.0",
|
||||||
|
"postcss-map": "^0.11.0",
|
||||||
|
"postcss-minify": "^1.1.0",
|
||||||
"prop-types": "^15.8.1",
|
"prop-types": "^15.8.1",
|
||||||
"react-bootstrap": "^1.6.5",
|
"react-bootstrap": "^1.6.5",
|
||||||
"react-colorful": "^5.6.1",
|
"react-colorful": "^5.6.1",
|
||||||
@@ -4295,6 +4603,8 @@
|
|||||||
"react-responsive": "^8.2.0",
|
"react-responsive": "^8.2.0",
|
||||||
"react-table": "^7.7.0",
|
"react-table": "^7.7.0",
|
||||||
"react-transition-group": "^4.4.2",
|
"react-transition-group": "^4.4.2",
|
||||||
|
"sass": "^1.58.3",
|
||||||
|
"style-dictionary": "^4.3.2",
|
||||||
"tabbable": "^5.3.3",
|
"tabbable": "^5.3.3",
|
||||||
"uncontrollable": "^7.2.1",
|
"uncontrollable": "^7.2.1",
|
||||||
"uuid": "^9.0.0"
|
"uuid": "^9.0.0"
|
||||||
@@ -4308,28 +4618,34 @@
|
|||||||
"react-intl": "^5.25.1 || ^6.4.0"
|
"react-intl": "^5.25.1 || ^6.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@openedx/paragon/node_modules/@fortawesome/react-fontawesome": {
|
"node_modules/@openedx/paragon/node_modules/axios": {
|
||||||
"version": "0.1.19",
|
"version": "0.27.2",
|
||||||
"resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.19.tgz",
|
"resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
|
||||||
"integrity": "sha512-Hyb+lB8T18cvLNX0S3llz7PcSOAJMLwiVKBuuzwM/nI5uoBw+gQjnf9il0fR1C3DKOI5Kc79pkJ4/xB0Uw9aFQ==",
|
"integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"prop-types": "^15.8.1"
|
"follow-redirects": "^1.14.9",
|
||||||
},
|
"form-data": "^4.0.0"
|
||||||
"peerDependencies": {
|
|
||||||
"@fortawesome/fontawesome-svg-core": "~1 || ~6",
|
|
||||||
"react": ">=16.x"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@openedx/paragon/node_modules/brace-expansion": {
|
"node_modules/@openedx/paragon/node_modules/brace-expansion": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||||
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"balanced-match": "^1.0.0"
|
"balanced-match": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@openedx/paragon/node_modules/commander": {
|
||||||
|
"version": "9.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
|
||||||
|
"integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": "^12.20.0 || >=14"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@openedx/paragon/node_modules/glob": {
|
"node_modules/@openedx/paragon/node_modules/glob": {
|
||||||
"version": "8.1.0",
|
"version": "8.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
|
||||||
@@ -4362,6 +4678,34 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@openedx/paragon/node_modules/postcss-custom-media": {
|
||||||
|
"version": "9.1.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-9.1.5.tgz",
|
||||||
|
"integrity": "sha512-GStyWMz7Qbo/Gtw1xVspzVSX8eipgNg4lpsO3CAeY4/A1mzok+RV6MCv3fg62trWijh/lYEj6vps4o8JcBBpDA==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/csstools"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/csstools"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@csstools/cascade-layer-name-parser": "^1.0.2",
|
||||||
|
"@csstools/css-parser-algorithms": "^2.2.0",
|
||||||
|
"@csstools/css-tokenizer": "^2.1.1",
|
||||||
|
"@csstools/media-query-list-parser": "^2.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^14 || ^16 || >=18"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"postcss": "^8.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@openedx/paragon/node_modules/react-responsive": {
|
"node_modules/@openedx/paragon/node_modules/react-responsive": {
|
||||||
"version": "8.2.0",
|
"version": "8.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-8.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-8.2.0.tgz",
|
||||||
@@ -4393,6 +4737,15 @@
|
|||||||
"uuid": "dist/bin/uuid"
|
"uuid": "dist/bin/uuid"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@paralleldrive/cuid2": {
|
||||||
|
"version": "2.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz",
|
||||||
|
"integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@noble/hashes": "^1.1.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@parcel/watcher": {
|
"node_modules/@parcel/watcher": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
|
||||||
@@ -4689,6 +5042,16 @@
|
|||||||
"url": "https://opencollective.com/parcel"
|
"url": "https://opencollective.com/parcel"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@pkgjs/parseargs": {
|
||||||
|
"version": "0.11.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
|
||||||
|
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@pmmmwh/react-refresh-webpack-plugin": {
|
"node_modules/@pmmmwh/react-refresh-webpack-plugin": {
|
||||||
"version": "0.5.15",
|
"version": "0.5.15",
|
||||||
"resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz",
|
"resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz",
|
||||||
@@ -4738,9 +5101,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@polka/url": {
|
"node_modules/@polka/url": {
|
||||||
"version": "1.0.0-next.28",
|
"version": "1.0.0-next.29",
|
||||||
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz",
|
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
|
||||||
"integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==",
|
"integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@popperjs/core": {
|
"node_modules/@popperjs/core": {
|
||||||
@@ -4790,19 +5153,10 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@reduxjs/toolkit/node_modules/redux": {
|
|
||||||
"version": "4.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
|
|
||||||
"integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@babel/runtime": "^7.9.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@remix-run/router": {
|
"node_modules/@remix-run/router": {
|
||||||
"version": "1.20.0",
|
"version": "1.23.0",
|
||||||
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.20.0.tgz",
|
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.0.tgz",
|
||||||
"integrity": "sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==",
|
"integrity": "sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14.0.0"
|
"node": ">=14.0.0"
|
||||||
@@ -5117,9 +5471,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tanstack/query-core": {
|
"node_modules/@tanstack/query-core": {
|
||||||
"version": "4.36.1",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.36.1.tgz",
|
"resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.40.0.tgz",
|
||||||
"integrity": "sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA==",
|
"integrity": "sha512-7MJTtZkCSuehMC7IxMOCGsLvHS3jHx4WjveSrGsG1Nc1UQLjaFwwkpLA2LmPfvOAxnH4mszMOBFD6LlZE+aB+Q==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"funding": {
|
"funding": {
|
||||||
"type": "github",
|
"type": "github",
|
||||||
@@ -5127,12 +5481,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tanstack/react-query": {
|
"node_modules/@tanstack/react-query": {
|
||||||
"version": "4.36.1",
|
"version": "4.40.1",
|
||||||
"resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.36.1.tgz",
|
"resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.40.1.tgz",
|
||||||
"integrity": "sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==",
|
"integrity": "sha512-mgD07S5N8e5v81CArKDWrHE4LM7HxZ9k/KLeD3+NUD9WimGZgKIqojUZf/rXkfAMYZU9p0Chzj2jOXm7xpgHHQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tanstack/query-core": "4.36.1",
|
"@tanstack/query-core": "4.40.0",
|
||||||
"use-sync-external-store": "^1.2.0"
|
"use-sync-external-store": "^1.2.0"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
@@ -5159,6 +5513,7 @@
|
|||||||
"integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==",
|
"integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/code-frame": "^7.10.4",
|
"@babel/code-frame": "^7.10.4",
|
||||||
"@babel/runtime": "^7.12.5",
|
"@babel/runtime": "^7.12.5",
|
||||||
@@ -5174,18 +5529,17 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@testing-library/jest-dom": {
|
"node_modules/@testing-library/jest-dom": {
|
||||||
"version": "6.6.3",
|
"version": "6.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.8.0.tgz",
|
||||||
"integrity": "sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==",
|
"integrity": "sha512-WgXcWzVM6idy5JaftTVC8Vs83NKRmGJz4Hqs4oyOuO2J4r/y79vvKZsb+CaGyCSEbUPI6OsewfPd0G1A0/TUZQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@adobe/css-tools": "^4.4.0",
|
"@adobe/css-tools": "^4.4.0",
|
||||||
"aria-query": "^5.0.0",
|
"aria-query": "^5.0.0",
|
||||||
"chalk": "^3.0.0",
|
|
||||||
"css.escape": "^1.5.1",
|
"css.escape": "^1.5.1",
|
||||||
"dom-accessibility-api": "^0.6.3",
|
"dom-accessibility-api": "^0.6.3",
|
||||||
"lodash": "^4.17.21",
|
"picocolors": "^1.1.1",
|
||||||
"redent": "^3.0.0"
|
"redent": "^3.0.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -5194,20 +5548,6 @@
|
|||||||
"yarn": ">=1"
|
"yarn": ">=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@testing-library/jest-dom/node_modules/chalk": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
|
|
||||||
"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-styles": "^4.1.0",
|
|
||||||
"supports-color": "^7.1.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": {
|
"node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": {
|
||||||
"version": "0.6.3",
|
"version": "0.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz",
|
||||||
@@ -5216,9 +5556,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@testing-library/react": {
|
"node_modules/@testing-library/react": {
|
||||||
"version": "16.2.0",
|
"version": "16.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz",
|
||||||
"integrity": "sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==",
|
"integrity": "sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -5244,16 +5584,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@testing-library/user-event": {
|
"node_modules/@testing-library/user-event": {
|
||||||
"version": "13.5.0",
|
"version": "14.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz",
|
||||||
"integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==",
|
"integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
|
||||||
"@babel/runtime": "^7.12.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10",
|
"node": ">=12",
|
||||||
"npm": ">=6"
|
"npm": ">=6"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
@@ -5274,6 +5611,32 @@
|
|||||||
"react-dom": "^18.0.0 || ^17.0.1 || ^16.7.0"
|
"react-dom": "^18.0.0 || ^17.0.1 || ^16.7.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@tokens-studio/sd-transforms": {
|
||||||
|
"version": "1.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tokens-studio/sd-transforms/-/sd-transforms-1.3.0.tgz",
|
||||||
|
"integrity": "sha512-zVbiYjTGWpSuwzZwiuvcWf79CQEcTMKSxrOaQJ0zHXFxEmrpETWeIRxv2IO8rtMos/cS8mvnDwPngoHQOMs1SA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@bundled-es-modules/deepmerge": "^4.3.1",
|
||||||
|
"@bundled-es-modules/postcss-calc-ast-parser": "^0.1.6",
|
||||||
|
"@tokens-studio/types": "^0.5.1",
|
||||||
|
"colorjs.io": "^0.5.2",
|
||||||
|
"expr-eval-fork": "^2.0.2",
|
||||||
|
"is-mergeable-object": "^1.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"style-dictionary": "^4.3.0 || ^5.0.0-rc.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@tokens-studio/types": {
|
||||||
|
"version": "0.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@tokens-studio/types/-/types-0.5.2.tgz",
|
||||||
|
"integrity": "sha512-rzMcZP0bj2E5jaa7Fj0LGgYHysoCrbrxILVbT0ohsCUH5uCHY/u6J7Qw/TE0n6gR9Js/c9ZO9T8mOoz0HdLMbA==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/@tootallnate/once": {
|
"node_modules/@tootallnate/once": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
|
||||||
@@ -5307,7 +5670,8 @@
|
|||||||
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
|
||||||
"integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
|
"integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
|
"peer": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/babel__core": {
|
"node_modules/@types/babel__core": {
|
||||||
"version": "7.20.5",
|
"version": "7.20.5",
|
||||||
@@ -5323,9 +5687,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/babel__generator": {
|
"node_modules/@types/babel__generator": {
|
||||||
"version": "7.6.8",
|
"version": "7.27.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
|
"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
|
||||||
"integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
|
"integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/types": "^7.0.0"
|
"@babel/types": "^7.0.0"
|
||||||
@@ -5617,10 +5981,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/lodash": {
|
"node_modules/@types/lodash": {
|
||||||
"version": "4.17.16",
|
"version": "4.17.20",
|
||||||
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.16.tgz",
|
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz",
|
||||||
"integrity": "sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==",
|
"integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/mime": {
|
"node_modules/@types/mime": {
|
||||||
@@ -5643,12 +6006,12 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "22.13.14",
|
"version": "22.15.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.14.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.2.tgz",
|
||||||
"integrity": "sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==",
|
"integrity": "sha512-uKXqKN9beGoMdBfcaTY1ecwz6ctxuJAcUlwE55938g0ZJ8lRxwAZqRz2AJ4pzpt5dHdTPMB863UZ0ESiFUcP7A==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"undici-types": "~6.20.0"
|
"undici-types": "~6.21.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/node-forge": {
|
"node_modules/@types/node-forge": {
|
||||||
@@ -5698,15 +6061,25 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/react": {
|
"node_modules/@types/react": {
|
||||||
"version": "18.3.20",
|
"version": "18.3.23",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz",
|
||||||
"integrity": "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==",
|
"integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/prop-types": "*",
|
"@types/prop-types": "*",
|
||||||
"csstype": "^3.0.2"
|
"csstype": "^3.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/react-dom": {
|
||||||
|
"version": "18.3.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz",
|
||||||
|
"integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
|
||||||
|
"devOptional": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"peerDependencies": {
|
||||||
|
"@types/react": "^18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@types/react-redux": {
|
"node_modules/@types/react-redux": {
|
||||||
"version": "7.1.34",
|
"version": "7.1.34",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.34.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.34.tgz",
|
||||||
@@ -5804,9 +6177,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/ws": {
|
"node_modules/@types/ws": {
|
||||||
"version": "8.18.0",
|
"version": "8.18.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
|
||||||
"integrity": "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==",
|
"integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": "*"
|
"@types/node": "*"
|
||||||
@@ -6064,9 +6437,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@unrs/resolver-binding-darwin-arm64": {
|
"node_modules/@unrs/resolver-binding-darwin-arm64": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.7.2.tgz",
|
||||||
"integrity": "sha512-ddnlXgRi0Fog5+7U5Q1qY62wl95Q1lB4tXQX1UIA9YHmRCHN2twaQW0/4tDVGCvTVEU3xEayU7VemEr7GcBYUw==",
|
"integrity": "sha512-vxtBno4xvowwNmO/ASL0Y45TpHqmNkAaDtz4Jqb+clmcVSSl8XCG/PNFFkGsXXXS6AMjP+ja/TtNCFFa1QwLRg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -6077,9 +6450,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@unrs/resolver-binding-darwin-x64": {
|
"node_modules/@unrs/resolver-binding-darwin-x64": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.7.2.tgz",
|
||||||
"integrity": "sha512-tnl9xoEeg503jis+LW5cuq4hyLGQyqaoBL8VdPSqcewo/FL1C8POHbzl+AL25TidWYJD+R6bGUTE381kA1sT9w==",
|
"integrity": "sha512-qhVa8ozu92C23Hsmv0BF4+5Dyyd5STT1FolV4whNgbY6mj3kA0qsrGPe35zNR3wAN7eFict3s4Rc2dDTPBTuFQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -6090,9 +6463,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@unrs/resolver-binding-freebsd-x64": {
|
"node_modules/@unrs/resolver-binding-freebsd-x64": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.7.2.tgz",
|
||||||
"integrity": "sha512-zyPn9LFCCjhKPeCtECZaiMUgkYN/VpLb4a9Xv7QriJmTaQxsuDtXqOHifrzUXIhorJTyS+5MOKDuNL0X9I4EHA==",
|
"integrity": "sha512-zKKdm2uMXqLFX6Ac7K5ElnnG5VIXbDlFWzg4WJ8CGUedJryM5A3cTgHuGMw1+P5ziV8CRhnSEgOnurTI4vpHpg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -6103,9 +6476,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
|
"node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.7.2.tgz",
|
||||||
"integrity": "sha512-UWx56Wh59Ro69fe+Wfvld4E1n9KG0e3zeouWLn8eSasyi/yVH/7ZW3CLTVFQ81oMKSpXwr5u6RpzttDXZKiO4g==",
|
"integrity": "sha512-8N1z1TbPnHH+iDS/42GJ0bMPLiGK+cUqOhNbMKtWJ4oFGzqSJk/zoXFzcQkgtI63qMcUI7wW1tq2usZQSb2jxw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@@ -6116,9 +6489,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
|
"node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.7.2.tgz",
|
||||||
"integrity": "sha512-VYGQXsOEJtfaoY2fOm8Z9ii5idFaHFYlrq3yMFZPaFKo8ufOXYm8hnfru7qetbM9MX116iWaPC0ZX5sK+1Dr+g==",
|
"integrity": "sha512-tjYzI9LcAXR9MYd9rO45m1s0B/6bJNuZ6jeOxo1pq1K6OBuRMMmfyvJYval3s9FPPGmrldYA3mi4gWDlWuTFGA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@@ -6129,9 +6502,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
|
"node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.7.2.tgz",
|
||||||
"integrity": "sha512-3zP420zxJfYPD1rGp2/OTIBxF8E3+/6VqCG+DEO6kkDgBiloa7Y8pw1o7N9BfgAC+VC8FPZsFXhV2lpx+lLRMQ==",
|
"integrity": "sha512-jon9M7DKRLGZ9VYSkFMflvNqu9hDtOCEnO2QAryFWgT6o6AXU8du56V7YqnaLKr6rAbZBWYsYpikF226v423QA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -6142,9 +6515,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@unrs/resolver-binding-linux-arm64-musl": {
|
"node_modules/@unrs/resolver-binding-linux-arm64-musl": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.7.2.tgz",
|
||||||
"integrity": "sha512-ZWjSleUgr88H4Kei7yT4PlPqySTuWN1OYDDcdbmMCtLWFly3ed+rkrcCb3gvqXdDbYrGOtzv3g2qPEN+WWNv5Q==",
|
"integrity": "sha512-c8Cg4/h+kQ63pL43wBNaVMmOjXI/X62wQmru51qjfTvI7kmCy5uHTJvK/9LrF0G8Jdx8r34d019P1DVJmhXQpA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -6155,9 +6528,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
|
"node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.7.2.tgz",
|
||||||
"integrity": "sha512-p+5OvYJ2UOlpjes3WfBlxyvQok2u26hLyPxLFHkYlfzhZW0juhvBf/tvewz1LDFe30M7zL9cF4OOO5dcvtk+cw==",
|
"integrity": "sha512-A+lcwRFyrjeJmv3JJvhz5NbcCkLQL6Mk16kHTNm6/aGNc4FwPHPE4DR9DwuCvCnVHvF5IAd9U4VIs/VvVir5lg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
@@ -6167,10 +6540,36 @@
|
|||||||
"linux"
|
"linux"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
|
||||||
|
"version": "1.7.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.7.2.tgz",
|
||||||
|
"integrity": "sha512-hQQ4TJQrSQW8JlPm7tRpXN8OCNP9ez7PajJNjRD1ZTHQAy685OYqPrKjfaMw/8LiHCt8AZ74rfUVHP9vn0N69Q==",
|
||||||
|
"cpu": [
|
||||||
|
"riscv64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
|
||||||
|
"version": "1.7.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.7.2.tgz",
|
||||||
|
"integrity": "sha512-NoAGbiqrxtY8kVooZ24i70CjLDlUFI7nDj3I9y54U94p+3kPxwd2L692YsdLa+cqQ0VoqMWoehDFp21PKRUoIQ==",
|
||||||
|
"cpu": [
|
||||||
|
"riscv64"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
"node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
|
"node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.7.2.tgz",
|
||||||
"integrity": "sha512-yweY7I6SqNn3kvj6vE4PQRo7j8Oz6+NiUhmgciBNAUOuI3Jq0bnW29hbHJdxZRSN1kYkQnSkbbA1tT8VnK816w==",
|
"integrity": "sha512-KaZByo8xuQZbUhhreBTW+yUnOIHUsv04P8lKjQ5otiGoSJ17ISGYArc+4vKdLEpGaLbemGzr4ZeUbYQQsLWFjA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
@@ -6181,9 +6580,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@unrs/resolver-binding-linux-x64-gnu": {
|
"node_modules/@unrs/resolver-binding-linux-x64-gnu": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.7.2.tgz",
|
||||||
"integrity": "sha512-fNIvtzJcGN9hzWTIayrTSk2+KHQrqKbbY+I88xMVMOFV9t4AXha4veJdKaIuuks+2JNr6GuuNdsL7+exywZ32w==",
|
"integrity": "sha512-dEidzJDubxxhUCBJ/SHSMJD/9q7JkyfBMT77Px1npl4xpg9t0POLvnWywSk66BgZS/b2Hy9Y1yFaoMTFJUe9yg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -6194,9 +6593,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@unrs/resolver-binding-linux-x64-musl": {
|
"node_modules/@unrs/resolver-binding-linux-x64-musl": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.7.2.tgz",
|
||||||
"integrity": "sha512-OaFEw8WAjiwBGxutQgkWhoAGB5BQqZJ8Gjt/mW+m6DWNjimcxU22uWCuEtfw1CIwLlKPOzsgH0429fWmZcTGkg==",
|
"integrity": "sha512-RvP+Ux3wDjmnZDT4XWFfNBRVG0fMsc+yVzNFUqOflnDfZ9OYujv6nkh+GOr+watwrW4wdp6ASfG/e7bkDradsw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -6207,25 +6606,25 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@unrs/resolver-binding-wasm32-wasi": {
|
"node_modules/@unrs/resolver-binding-wasm32-wasi": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.7.2.tgz",
|
||||||
"integrity": "sha512-u+sumtO7M0AGQ9bNQrF4BHNpUyxo23FM/yXZfmVAicTQ+mXtG06O7pm5zQUw3Mr4jRs2I84uh4O0hd8bdouuvQ==",
|
"integrity": "sha512-y797JBmO9IsvXVRCKDXOxjyAE4+CcZpla2GSoBQ33TVb3ILXuFnMrbR/QQZoauBYeOFuu4w3ifWLw52sdHGz6g==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"wasm32"
|
"wasm32"
|
||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@napi-rs/wasm-runtime": "^0.2.7"
|
"@napi-rs/wasm-runtime": "^0.2.9"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14.0.0"
|
"node": ">=14.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
|
"node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.7.2.tgz",
|
||||||
"integrity": "sha512-ZAJKy95vmDIHsRFuPNqPQRON8r2mSMf3p9DoX+OMOhvu2c8OXGg8MvhGRf3PNg45ozRrPdXDnngURKgaFfpGoQ==",
|
"integrity": "sha512-gtYTh4/VREVSLA+gHrfbWxaMO/00y+34htY7XpioBTy56YN2eBjkPrY1ML1Zys89X3RJDKVaogzwxlM1qU7egg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -6236,9 +6635,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
|
"node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.7.2.tgz",
|
||||||
"integrity": "sha512-nQG4YFAS2BLoKVQFK/FrWJvFATI5DQUWQrcPcsWG9Ve5BLLHZuPOrJ2SpAJwLXQrRv6XHSFAYGI8wQpBg/CiFA==",
|
"integrity": "sha512-Ywv20XHvHTDRQs12jd3MY8X5C8KLjDbg/jyaal/QLKx3fAShhJyD4blEANInsjxW3P7isHx1Blt56iUDDJO3jg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
@@ -6249,9 +6648,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@unrs/resolver-binding-win32-x64-msvc": {
|
"node_modules/@unrs/resolver-binding-win32-x64-msvc": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.7.2.tgz",
|
||||||
"integrity": "sha512-XBWpUP0mHya6yGBwNefhyEa6V7HgYKCxEAY4qhTm/PcAQyBPNmjj97VZJOJkVdUsyuuii7xmq0pXWX/c2aToHQ==",
|
"integrity": "sha512-friS8NEQfHaDbkThxopGk+LuE5v3iY0StruifjQEt7SLbA46OnfgMO15sOTkbpJkol6RB+1l1TYPXh0sCddpvA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -6463,6 +6862,23 @@
|
|||||||
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
|
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
|
||||||
"license": "Apache-2.0"
|
"license": "Apache-2.0"
|
||||||
},
|
},
|
||||||
|
"node_modules/@yarnpkg/lockfile": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
|
||||||
|
"license": "BSD-2-Clause"
|
||||||
|
},
|
||||||
|
"node_modules/@zip.js/zip.js": {
|
||||||
|
"version": "2.7.60",
|
||||||
|
"resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.60.tgz",
|
||||||
|
"integrity": "sha512-vA3rLyqdxBrVo1FWSsbyoecaqWTV+vgPRf0QKeM7kVDG0r+lHUqd7zQDv1TO9k4BcAoNzNDSNrrel24Mk6addA==",
|
||||||
|
"license": "BSD-3-Clause",
|
||||||
|
"engines": {
|
||||||
|
"bun": ">=0.7.0",
|
||||||
|
"deno": ">=1.0.0",
|
||||||
|
"node": ">=16.5.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/abab": {
|
"node_modules/abab": {
|
||||||
"version": "2.0.6",
|
"version": "2.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
|
||||||
@@ -6913,6 +7329,19 @@
|
|||||||
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
|
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/assert": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"call-bind": "^1.0.2",
|
||||||
|
"is-nan": "^1.3.2",
|
||||||
|
"object-is": "^1.1.5",
|
||||||
|
"object.assign": "^4.1.4",
|
||||||
|
"util": "^0.12.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/assert-ok": {
|
"node_modules/assert-ok": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/assert-ok/-/assert-ok-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/assert-ok/-/assert-ok-1.0.0.tgz",
|
||||||
@@ -6929,7 +7358,6 @@
|
|||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
|
||||||
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
|
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
@@ -7036,9 +7464,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/axios": {
|
"node_modules/axios": {
|
||||||
"version": "1.8.4",
|
"version": "1.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.8.4.tgz",
|
"resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz",
|
||||||
"integrity": "sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==",
|
"integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"follow-redirects": "^1.15.6",
|
"follow-redirects": "^1.15.6",
|
||||||
@@ -7047,9 +7475,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/axios-cache-interceptor": {
|
"node_modules/axios-cache-interceptor": {
|
||||||
"version": "1.6.2",
|
"version": "1.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/axios-cache-interceptor/-/axios-cache-interceptor-1.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/axios-cache-interceptor/-/axios-cache-interceptor-1.8.0.tgz",
|
||||||
"integrity": "sha512-YLbAODIHZZIcD4b3WYFVQOa5W2TY/WnJ6sBHqAg6Z+hx+RVj8/OcjQyRopO6awn7/kOkGL5X9TP16AucnlJ/lw==",
|
"integrity": "sha512-cTNnPGJyQkxnWp0EWvE3NRvgURU5cWw/Qx3dIhXyHSM4Ip0c7EEe0I3an0Jwa549m1CAOg57ibj27YRNLmQCcg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cache-parser": "1.2.5",
|
"cache-parser": "1.2.5",
|
||||||
@@ -7067,9 +7495,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/axios-mock-adapter": {
|
"node_modules/axios-mock-adapter": {
|
||||||
"version": "1.22.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.22.0.tgz",
|
"resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-2.1.0.tgz",
|
||||||
"integrity": "sha512-dmI0KbkyAhntUR05YY96qg2H6gg0XMl2+qTW0xmYg6Up+BFBAJYRLROMXRdDEL06/Wqwa0TJThAYvFtSFdRCZw==",
|
"integrity": "sha512-AZUe4OjECGCNNssH8SOdtneiQELsqTsat3SQQCWLPjN436/H+L9AjWfV7bF+Zg/YL9cgbhrz5671hoh+Tbn98w==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fast-deep-equal": "^3.1.3",
|
"fast-deep-equal": "^3.1.3",
|
||||||
@@ -7252,6 +7681,15 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/babel-plugin-macros/node_modules/yaml": {
|
||||||
|
"version": "1.10.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
|
||||||
|
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
|
||||||
|
"license": "ISC",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/babel-plugin-polyfill-corejs2": {
|
"node_modules/babel-plugin-polyfill-corejs2": {
|
||||||
"version": "0.4.13",
|
"version": "0.4.13",
|
||||||
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz",
|
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz",
|
||||||
@@ -7406,9 +7844,9 @@
|
|||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"node_modules/bare-fs": {
|
"node_modules/bare-fs": {
|
||||||
"version": "4.0.2",
|
"version": "4.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.3.tgz",
|
||||||
"integrity": "sha512-S5mmkMesiduMqnz51Bfh0Et9EX0aTCJxhsI4bvzFFLs8Z1AV8RDHadfY5CyLwdoLHgXbNBEN1gQcbEtGwuvixw==",
|
"integrity": "sha512-OeEZYIg+2qepaWLyphaOXHAHKo3xkM8y3BeGAvHdMN8GNWvEAU1Yw6rYpGzu/wDDbKxgEjVeVDpgGhDzaeMpjg==",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -7618,9 +8056,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/brace-expansion": {
|
"node_modules/brace-expansion": {
|
||||||
"version": "1.1.11",
|
"version": "1.1.12",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
|
||||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"balanced-match": "^1.0.0",
|
"balanced-match": "^1.0.0",
|
||||||
@@ -7860,9 +8298,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001715",
|
"version": "1.0.30001737",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001737.tgz",
|
||||||
"integrity": "sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw==",
|
"integrity": "sha512-BiloLiXtQNrY5UyF0+1nSJLXUENuhka2pzy2Fx5pGxqavdrxSCW4U6Pn/PoG3Efspi2frRbHpBV2XsrPE6EDlw==",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
@@ -7910,6 +8348,12 @@
|
|||||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/change-case": {
|
||||||
|
"version": "5.4.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz",
|
||||||
|
"integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/char-regex": {
|
"node_modules/char-regex": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
|
||||||
@@ -7925,6 +8369,20 @@
|
|||||||
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
|
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/chevrotain": {
|
||||||
|
"version": "11.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz",
|
||||||
|
"integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"@chevrotain/cst-dts-gen": "11.0.3",
|
||||||
|
"@chevrotain/gast": "11.0.3",
|
||||||
|
"@chevrotain/regexp-to-ast": "11.0.3",
|
||||||
|
"@chevrotain/types": "11.0.3",
|
||||||
|
"@chevrotain/utils": "11.0.3",
|
||||||
|
"lodash-es": "4.17.21"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/child_process": {
|
"node_modules/child_process": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz",
|
||||||
@@ -7961,6 +8419,12 @@
|
|||||||
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
|
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
|
"node_modules/chroma-js": {
|
||||||
|
"version": "2.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.6.0.tgz",
|
||||||
|
"integrity": "sha512-BLHvCB9s8Z1EV4ethr6xnkl/P2YRFOGqfgvuMG/MyCbZPrTA+NeiByY6XvgF0zP4/2deU2CXnWyMa3zu1LqQ3A==",
|
||||||
|
"license": "(BSD-3-Clause AND Apache-2.0)"
|
||||||
|
},
|
||||||
"node_modules/chrome-trace-event": {
|
"node_modules/chrome-trace-event": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
|
||||||
@@ -8045,6 +8509,18 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/cli-progress": {
|
||||||
|
"version": "3.12.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz",
|
||||||
|
"integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"string-width": "^4.2.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/cli-spinners": {
|
"node_modules/cli-spinners": {
|
||||||
"version": "2.9.2",
|
"version": "2.9.2",
|
||||||
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
|
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
|
||||||
@@ -8140,9 +8616,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/codemirror": {
|
"node_modules/codemirror": {
|
||||||
"version": "6.0.1",
|
"version": "6.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.2.tgz",
|
||||||
"integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==",
|
"integrity": "sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/autocomplete": "^6.0.0",
|
"@codemirror/autocomplete": "^6.0.0",
|
||||||
@@ -8213,6 +8689,12 @@
|
|||||||
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
|
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/colorjs.io": {
|
||||||
|
"version": "0.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz",
|
||||||
|
"integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/combined-stream": {
|
"node_modules/combined-stream": {
|
||||||
"version": "1.0.8",
|
"version": "1.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
@@ -8241,10 +8723,13 @@
|
|||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
"node_modules/component-emitter": {
|
"node_modules/component-emitter": {
|
||||||
"version": "1.3.1",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-2.0.0.tgz",
|
||||||
"integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
|
"integrity": "sha512-4m5s3Me2xxlVKG9PkZpQqHQR7bgpnN7joDMJ4yvVkVXngjoITG76IaZmzmywSeRTeTpc6N6r3H3+KyUurV8OYw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
@@ -8262,16 +8747,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/compression": {
|
"node_modules/compression": {
|
||||||
"version": "1.8.0",
|
"version": "1.8.1",
|
||||||
"resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz",
|
||||||
"integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==",
|
"integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bytes": "3.1.2",
|
"bytes": "3.1.2",
|
||||||
"compressible": "~2.0.18",
|
"compressible": "~2.0.18",
|
||||||
"debug": "2.6.9",
|
"debug": "2.6.9",
|
||||||
"negotiator": "~0.6.4",
|
"negotiator": "~0.6.4",
|
||||||
"on-headers": "~1.0.2",
|
"on-headers": "~1.1.0",
|
||||||
"safe-buffer": "5.2.1",
|
"safe-buffer": "5.2.1",
|
||||||
"vary": "~1.1.2"
|
"vary": "~1.1.2"
|
||||||
},
|
},
|
||||||
@@ -9351,7 +9836,8 @@
|
|||||||
"resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
|
"resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
|
||||||
"integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
|
"integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
|
"peer": true
|
||||||
},
|
},
|
||||||
"node_modules/dom-converter": {
|
"node_modules/dom-converter": {
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
@@ -9512,6 +9998,12 @@
|
|||||||
"integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
|
"integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/eastasianwidth": {
|
||||||
|
"version": "0.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
|
||||||
|
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/ee-first": {
|
"node_modules/ee-first": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||||
@@ -9534,9 +10026,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.5.126",
|
"version": "1.5.143",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.126.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.143.tgz",
|
||||||
"integrity": "sha512-AtH1uLcTC72LA4vfYcEJJkrMk/MY/X0ub8Hv7QGAePW2JkeUFHEL/QfS4J77R6M87Sss8O0OcqReSaN1bpyA+Q==",
|
"integrity": "sha512-QqklJMOFBMqe46k8iIOwA9l2hz57V2OKMmP5eSWcUvwx+mASAsbU+wkF1pHjn9ZVSBPrsYWr4/W/95y5SwYg2g==",
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
"node_modules/email-prop-type": {
|
"node_modules/email-prop-type": {
|
||||||
@@ -9574,6 +10066,15 @@
|
|||||||
"integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
|
"integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/emoji-regex-xs": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-1QFuh8l7LqUcKe24LsPUNzjrzJQ7pgRwp1QMcZ5MX6mFplk2zQ08NVCM84++1cveaUUYtcCYHmeFEuNg16sU4g==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/emojis-list": {
|
"node_modules/emojis-list": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
|
||||||
@@ -9768,9 +10269,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/es-module-lexer": {
|
"node_modules/es-module-lexer": {
|
||||||
"version": "1.6.0",
|
"version": "1.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
|
||||||
"integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==",
|
"integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/es-object-atoms": {
|
"node_modules/es-object-atoms": {
|
||||||
@@ -10020,23 +10521,23 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-import-resolver-typescript": {
|
"node_modules/eslint-import-resolver-typescript": {
|
||||||
"version": "4.2.5",
|
"version": "4.3.4",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.3.4.tgz",
|
||||||
"integrity": "sha512-VtSNsVbyDlubDcx5Lb1K1Y8G4MxUuC9XVALX1z2EIXaLobCedvFPQ2XRemobQStn04G9MRi3iu1JFLKI4/8fig==",
|
"integrity": "sha512-buzw5z5VtiQMysYLH9iW9BV04YyZebsw+gPi+c4FCjfS9i6COYOrEWw9t3m3wA9PFBfqcBCqWf32qrXLbwafDw==",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"debug": "^4.4.0",
|
"debug": "^4.4.0",
|
||||||
"get-tsconfig": "^4.10.0",
|
"get-tsconfig": "^4.10.0",
|
||||||
"is-bun-module": "^2.0.0",
|
"is-bun-module": "^2.0.0",
|
||||||
"stable-hash": "^0.0.5",
|
"stable-hash": "^0.0.5",
|
||||||
"tinyglobby": "^0.2.12",
|
"tinyglobby": "^0.2.13",
|
||||||
"unrs-resolver": "^1.3.2"
|
"unrs-resolver": "^1.6.3"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^16.17.0 || >=18.6.0"
|
"node": "^16.17.0 || >=18.6.0"
|
||||||
},
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
|
"url": "https://opencollective.com/eslint-import-resolver-typescript"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"eslint": "*",
|
"eslint": "*",
|
||||||
@@ -10334,9 +10835,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-plugin-formatjs/node_modules/brace-expansion": {
|
"node_modules/eslint-plugin-formatjs/node_modules/brace-expansion": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||||
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"balanced-match": "^1.0.0"
|
"balanced-match": "^1.0.0"
|
||||||
@@ -10388,9 +10889,9 @@
|
|||||||
"license": "0BSD"
|
"license": "0BSD"
|
||||||
},
|
},
|
||||||
"node_modules/eslint-plugin-formatjs/node_modules/typescript": {
|
"node_modules/eslint-plugin-formatjs/node_modules/typescript": {
|
||||||
"version": "5.8.2",
|
"version": "5.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
|
||||||
"integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
|
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsc": "bin/tsc",
|
"tsc": "bin/tsc",
|
||||||
@@ -10887,6 +11388,12 @@
|
|||||||
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
|
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/expr-eval-fork": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/expr-eval-fork/-/expr-eval-fork-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-NaAnObPVwHEYrODd7Jzp3zzT9pgTAlUUL4MZiZu9XAYPDpx89cPsfyEImFb2XY0vQNbrqg2CG7CLiI+Rs3seaQ==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/express": {
|
"node_modules/express": {
|
||||||
"version": "4.21.2",
|
"version": "4.21.2",
|
||||||
"resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
|
"resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
|
||||||
@@ -11256,9 +11763,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/filelist/node_modules/brace-expansion": {
|
"node_modules/filelist/node_modules/brace-expansion": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||||
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"balanced-match": "^1.0.0"
|
"balanced-match": "^1.0.0"
|
||||||
@@ -11374,6 +11881,15 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/find-yarn-workspace-root": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"micromatch": "^4.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/flat": {
|
"node_modules/flat": {
|
||||||
"version": "5.0.2",
|
"version": "5.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
|
||||||
@@ -11451,15 +11967,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/font-awesome": {
|
|
||||||
"version": "4.7.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
|
|
||||||
"integrity": "sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==",
|
|
||||||
"license": "(OFL-1.1 AND MIT)",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/for-each": {
|
"node_modules/for-each": {
|
||||||
"version": "0.3.5",
|
"version": "0.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
|
||||||
@@ -11475,6 +11982,34 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/foreground-child": {
|
||||||
|
"version": "3.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
|
||||||
|
"integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"cross-spawn": "^7.0.6",
|
||||||
|
"signal-exit": "^4.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/foreground-child/node_modules/signal-exit": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
|
||||||
|
"license": "ISC",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/fork-ts-checker-webpack-plugin": {
|
"node_modules/fork-ts-checker-webpack-plugin": {
|
||||||
"version": "6.5.3",
|
"version": "6.5.3",
|
||||||
"resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz",
|
"resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz",
|
||||||
@@ -11569,15 +12104,25 @@
|
|||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/fork-ts-checker-webpack-plugin/node_modules/yaml": {
|
||||||
|
"version": "1.10.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
|
||||||
|
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
|
||||||
|
"license": "ISC",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/form-data": {
|
"node_modules/form-data": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
|
||||||
"integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
|
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"asynckit": "^0.4.0",
|
"asynckit": "^0.4.0",
|
||||||
"combined-stream": "^1.0.8",
|
"combined-stream": "^1.0.8",
|
||||||
"es-set-tostringtag": "^2.1.0",
|
"es-set-tostringtag": "^2.1.0",
|
||||||
|
"hasown": "^2.0.2",
|
||||||
"mime-types": "^2.1.12"
|
"mime-types": "^2.1.12"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -11591,15 +12136,18 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/formidable": {
|
"node_modules/formidable": {
|
||||||
"version": "3.5.2",
|
"version": "3.5.4",
|
||||||
"resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.2.tgz",
|
"resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz",
|
||||||
"integrity": "sha512-Jqc1btCy3QzRbJaICGwKcBfGWuLADRerLzDqi2NwSt/UkXLsHJw2TVResiaoBufHVHy9aSgClOHCeJsSsFLTbg==",
|
"integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@paralleldrive/cuid2": "^2.2.2",
|
||||||
"dezalgo": "^1.0.4",
|
"dezalgo": "^1.0.4",
|
||||||
"hexoid": "^2.0.0",
|
|
||||||
"once": "^1.4.0"
|
"once": "^1.4.0"
|
||||||
},
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.0.0"
|
||||||
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://ko-fi.com/tunnckoCore/commissions"
|
"url": "https://ko-fi.com/tunnckoCore/commissions"
|
||||||
}
|
}
|
||||||
@@ -12193,15 +12741,6 @@
|
|||||||
"he": "bin/he"
|
"he": "bin/he"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/hexoid": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/hexoid/-/hexoid-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/history": {
|
"node_modules/history": {
|
||||||
"version": "4.10.1",
|
"version": "4.10.1",
|
||||||
"resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
|
"resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
|
||||||
@@ -12283,9 +12822,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/html-entities": {
|
"node_modules/html-entities": {
|
||||||
"version": "2.5.3",
|
"version": "2.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.3.tgz",
|
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz",
|
||||||
"integrity": "sha512-D3AfvN7SjhTgBSA8L1BN4FpPzuEd06uy4lHwSoRWr0lndi9BKaNzPLKGOWZ2ocSGguozr08TTb2jhCLHaemruw==",
|
"integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "github",
|
"type": "github",
|
||||||
@@ -12439,9 +12978,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/http-parser-js": {
|
"node_modules/http-parser-js": {
|
||||||
"version": "0.5.9",
|
"version": "0.5.10",
|
||||||
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz",
|
"resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz",
|
||||||
"integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==",
|
"integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/http-proxy": {
|
"node_modules/http-proxy": {
|
||||||
@@ -12473,9 +13012,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/http-proxy-middleware": {
|
"node_modules/http-proxy-middleware": {
|
||||||
"version": "2.0.7",
|
"version": "2.0.9",
|
||||||
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
|
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz",
|
||||||
"integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
|
"integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/http-proxy": "^1.17.8",
|
"@types/http-proxy": "^1.17.8",
|
||||||
@@ -12530,6 +13069,15 @@
|
|||||||
"node": ">=10.17.0"
|
"node": ">=10.17.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/hyperdyperid": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.18"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/hyphenate-style-name": {
|
"node_modules/hyphenate-style-name": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz",
|
||||||
@@ -12910,6 +13458,22 @@
|
|||||||
"node": ">= 0.10"
|
"node": ">= 0.10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/is-arguments": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"call-bound": "^1.0.2",
|
||||||
|
"has-tostringtag": "^1.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/is-array-buffer": {
|
"node_modules/is-array-buffer": {
|
||||||
"version": "3.0.5",
|
"version": "3.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
|
||||||
@@ -12999,6 +13563,7 @@
|
|||||||
"version": "2.0.5",
|
"version": "2.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
|
||||||
"integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
|
"integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
|
||||||
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "github",
|
"type": "github",
|
||||||
@@ -13240,6 +13805,28 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/is-mergeable-object": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-CPduJfuGg8h8vW74WOxHtHmtQutyQBzR+3MjQ6iDHIYdbOnm1YC7jv43SqCoU8OPGTJD4nibmiryA4kmogbGrA==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/is-nan": {
|
||||||
|
"version": "1.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
|
||||||
|
"integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"call-bind": "^1.0.0",
|
||||||
|
"define-properties": "^1.1.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/is-number": {
|
"node_modules/is-number": {
|
||||||
"version": "7.0.0",
|
"version": "7.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
||||||
@@ -13308,13 +13895,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/is-plain-obj": {
|
"node_modules/is-plain-obj": {
|
||||||
"version": "1.1.0",
|
"version": "4.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
|
||||||
"integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
|
"integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/is-plain-object": {
|
"node_modules/is-plain-object": {
|
||||||
@@ -13673,6 +14262,21 @@
|
|||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/jackspeak": {
|
||||||
|
"version": "3.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
|
||||||
|
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
|
||||||
|
"license": "BlueOak-1.0.0",
|
||||||
|
"dependencies": {
|
||||||
|
"@isaacs/cliui": "^8.0.2"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@pkgjs/parseargs": "^0.11.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/jake": {
|
"node_modules/jake": {
|
||||||
"version": "10.9.2",
|
"version": "10.9.2",
|
||||||
"resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
|
"resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
|
||||||
@@ -14704,6 +15308,16 @@
|
|||||||
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/js-toml": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/js-toml/-/js-toml-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-/7IQ//bzn2a/5IDazPUNzlW7bsjxS51cxciYZDR+Z+3Le60yzT0YfI8KOWqTtBcZkXXVklhWd2OuGd8ZksB0wQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"chevrotain": "^11.0.3",
|
||||||
|
"xregexp": "^5.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/js-yaml": {
|
"node_modules/js-yaml": {
|
||||||
"version": "3.14.1",
|
"version": "3.14.1",
|
||||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
|
||||||
@@ -14818,13 +15432,13 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/json-stable-stringify": {
|
"node_modules/json-stable-stringify": {
|
||||||
"version": "1.2.1",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz",
|
||||||
"integrity": "sha512-Lp6HbbBgosLmJbjx0pBLbgvx68FaFU1sdkmBuckmhhJ88kL13OA51CDtR2yJB50eCNMH9wRqtQNNiAqQH4YXnA==",
|
"integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"call-bind": "^1.0.8",
|
"call-bind": "^1.0.8",
|
||||||
"call-bound": "^1.0.3",
|
"call-bound": "^1.0.4",
|
||||||
"isarray": "^2.0.5",
|
"isarray": "^2.0.5",
|
||||||
"jsonify": "^0.0.1",
|
"jsonify": "^0.0.1",
|
||||||
"object-keys": "^1.1.1"
|
"object-keys": "^1.1.1"
|
||||||
@@ -14926,6 +15540,15 @@
|
|||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/klaw-sync": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"graceful-fs": "^4.1.11"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/kleur": {
|
"node_modules/kleur": {
|
||||||
"version": "3.0.3",
|
"version": "3.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
|
||||||
@@ -15176,6 +15799,24 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/log-update": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-escapes": "^4.3.0",
|
||||||
|
"cli-cursor": "^3.1.0",
|
||||||
|
"slice-ansi": "^4.0.0",
|
||||||
|
"wrap-ansi": "^6.2.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/loose-envify": {
|
"node_modules/loose-envify": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
|
||||||
@@ -15210,7 +15851,6 @@
|
|||||||
"version": "1.5.0",
|
"version": "1.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
|
||||||
"integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
|
"integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
"lz-string": "bin/bin.js"
|
"lz-string": "bin/bin.js"
|
||||||
@@ -15645,6 +16285,25 @@
|
|||||||
"node": ">= 6"
|
"node": ">= 6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/minimist-options/node_modules/is-plain-obj": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/minipass": {
|
||||||
|
"version": "7.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
|
||||||
|
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
|
||||||
|
"license": "ISC",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16 || 14 >=14.17"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/mkdirp-classic": {
|
"node_modules/mkdirp-classic": {
|
||||||
"version": "0.5.3",
|
"version": "0.5.3",
|
||||||
"resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
|
"resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
|
||||||
@@ -15717,6 +16376,12 @@
|
|||||||
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
|
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
|
"node_modules/nanoclone": {
|
||||||
|
"version": "0.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz",
|
||||||
|
"integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/nanoid": {
|
"node_modules/nanoid": {
|
||||||
"version": "3.3.11",
|
"version": "3.3.11",
|
||||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
|
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
|
||||||
@@ -15741,6 +16406,21 @@
|
|||||||
"integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==",
|
"integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/napi-postinstall": {
|
||||||
|
"version": "0.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.2.tgz",
|
||||||
|
"integrity": "sha512-Wy1VI/hpKHwy1MsnFxHCJxqFwmmxD0RA/EKPL7e6mfbsY01phM2SZyJnRdU0bLvhu0Quby1DCcAZti3ghdl4/A==",
|
||||||
|
"license": "MIT",
|
||||||
|
"bin": {
|
||||||
|
"napi-postinstall": "lib/cli.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^12.20.0 || ^14.18.0 || >=16.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://opencollective.com/napi-postinstall"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/natural-compare": {
|
"node_modules/natural-compare": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
|
||||||
@@ -15919,166 +16599,6 @@
|
|||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/npm": {
|
|
||||||
"version": "10.9.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/npm/-/npm-10.9.2.tgz",
|
|
||||||
"integrity": "sha512-iriPEPIkoMYUy3F6f3wwSZAU93E0Eg6cHwIR6jzzOXWSy+SD/rOODEs74cVONHKSx2obXtuUoyidVEhISrisgQ==",
|
|
||||||
"bundleDependencies": [
|
|
||||||
"@isaacs/string-locale-compare",
|
|
||||||
"@npmcli/arborist",
|
|
||||||
"@npmcli/config",
|
|
||||||
"@npmcli/fs",
|
|
||||||
"@npmcli/map-workspaces",
|
|
||||||
"@npmcli/package-json",
|
|
||||||
"@npmcli/promise-spawn",
|
|
||||||
"@npmcli/redact",
|
|
||||||
"@npmcli/run-script",
|
|
||||||
"@sigstore/tuf",
|
|
||||||
"abbrev",
|
|
||||||
"archy",
|
|
||||||
"cacache",
|
|
||||||
"chalk",
|
|
||||||
"ci-info",
|
|
||||||
"cli-columns",
|
|
||||||
"fastest-levenshtein",
|
|
||||||
"fs-minipass",
|
|
||||||
"glob",
|
|
||||||
"graceful-fs",
|
|
||||||
"hosted-git-info",
|
|
||||||
"ini",
|
|
||||||
"init-package-json",
|
|
||||||
"is-cidr",
|
|
||||||
"json-parse-even-better-errors",
|
|
||||||
"libnpmaccess",
|
|
||||||
"libnpmdiff",
|
|
||||||
"libnpmexec",
|
|
||||||
"libnpmfund",
|
|
||||||
"libnpmhook",
|
|
||||||
"libnpmorg",
|
|
||||||
"libnpmpack",
|
|
||||||
"libnpmpublish",
|
|
||||||
"libnpmsearch",
|
|
||||||
"libnpmteam",
|
|
||||||
"libnpmversion",
|
|
||||||
"make-fetch-happen",
|
|
||||||
"minimatch",
|
|
||||||
"minipass",
|
|
||||||
"minipass-pipeline",
|
|
||||||
"ms",
|
|
||||||
"node-gyp",
|
|
||||||
"nopt",
|
|
||||||
"normalize-package-data",
|
|
||||||
"npm-audit-report",
|
|
||||||
"npm-install-checks",
|
|
||||||
"npm-package-arg",
|
|
||||||
"npm-pick-manifest",
|
|
||||||
"npm-profile",
|
|
||||||
"npm-registry-fetch",
|
|
||||||
"npm-user-validate",
|
|
||||||
"p-map",
|
|
||||||
"pacote",
|
|
||||||
"parse-conflict-json",
|
|
||||||
"proc-log",
|
|
||||||
"qrcode-terminal",
|
|
||||||
"read",
|
|
||||||
"semver",
|
|
||||||
"spdx-expression-parse",
|
|
||||||
"ssri",
|
|
||||||
"supports-color",
|
|
||||||
"tar",
|
|
||||||
"text-table",
|
|
||||||
"tiny-relative-date",
|
|
||||||
"treeverse",
|
|
||||||
"validate-npm-package-name",
|
|
||||||
"which",
|
|
||||||
"write-file-atomic"
|
|
||||||
],
|
|
||||||
"license": "Artistic-2.0",
|
|
||||||
"workspaces": [
|
|
||||||
"docs",
|
|
||||||
"smoke-tests",
|
|
||||||
"mock-globals",
|
|
||||||
"mock-registry",
|
|
||||||
"workspaces/*"
|
|
||||||
],
|
|
||||||
"dependencies": {
|
|
||||||
"@isaacs/string-locale-compare": "^1.1.0",
|
|
||||||
"@npmcli/arborist": "^8.0.0",
|
|
||||||
"@npmcli/config": "^9.0.0",
|
|
||||||
"@npmcli/fs": "^4.0.0",
|
|
||||||
"@npmcli/map-workspaces": "^4.0.2",
|
|
||||||
"@npmcli/package-json": "^6.1.0",
|
|
||||||
"@npmcli/promise-spawn": "^8.0.2",
|
|
||||||
"@npmcli/redact": "^3.0.0",
|
|
||||||
"@npmcli/run-script": "^9.0.1",
|
|
||||||
"@sigstore/tuf": "^3.0.0",
|
|
||||||
"abbrev": "^3.0.0",
|
|
||||||
"archy": "~1.0.0",
|
|
||||||
"cacache": "^19.0.1",
|
|
||||||
"chalk": "^5.3.0",
|
|
||||||
"ci-info": "^4.1.0",
|
|
||||||
"cli-columns": "^4.0.0",
|
|
||||||
"fastest-levenshtein": "^1.0.16",
|
|
||||||
"fs-minipass": "^3.0.3",
|
|
||||||
"glob": "^10.4.5",
|
|
||||||
"graceful-fs": "^4.2.11",
|
|
||||||
"hosted-git-info": "^8.0.2",
|
|
||||||
"ini": "^5.0.0",
|
|
||||||
"init-package-json": "^7.0.2",
|
|
||||||
"is-cidr": "^5.1.0",
|
|
||||||
"json-parse-even-better-errors": "^4.0.0",
|
|
||||||
"libnpmaccess": "^9.0.0",
|
|
||||||
"libnpmdiff": "^7.0.0",
|
|
||||||
"libnpmexec": "^9.0.0",
|
|
||||||
"libnpmfund": "^6.0.0",
|
|
||||||
"libnpmhook": "^11.0.0",
|
|
||||||
"libnpmorg": "^7.0.0",
|
|
||||||
"libnpmpack": "^8.0.0",
|
|
||||||
"libnpmpublish": "^10.0.1",
|
|
||||||
"libnpmsearch": "^8.0.0",
|
|
||||||
"libnpmteam": "^7.0.0",
|
|
||||||
"libnpmversion": "^7.0.0",
|
|
||||||
"make-fetch-happen": "^14.0.3",
|
|
||||||
"minimatch": "^9.0.5",
|
|
||||||
"minipass": "^7.1.1",
|
|
||||||
"minipass-pipeline": "^1.2.4",
|
|
||||||
"ms": "^2.1.2",
|
|
||||||
"node-gyp": "^11.0.0",
|
|
||||||
"nopt": "^8.0.0",
|
|
||||||
"normalize-package-data": "^7.0.0",
|
|
||||||
"npm-audit-report": "^6.0.0",
|
|
||||||
"npm-install-checks": "^7.1.1",
|
|
||||||
"npm-package-arg": "^12.0.0",
|
|
||||||
"npm-pick-manifest": "^10.0.0",
|
|
||||||
"npm-profile": "^11.0.1",
|
|
||||||
"npm-registry-fetch": "^18.0.2",
|
|
||||||
"npm-user-validate": "^3.0.0",
|
|
||||||
"p-map": "^4.0.0",
|
|
||||||
"pacote": "^19.0.1",
|
|
||||||
"parse-conflict-json": "^4.0.0",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"qrcode-terminal": "^0.12.0",
|
|
||||||
"read": "^4.0.0",
|
|
||||||
"semver": "^7.6.3",
|
|
||||||
"spdx-expression-parse": "^4.0.0",
|
|
||||||
"ssri": "^12.0.0",
|
|
||||||
"supports-color": "^9.4.0",
|
|
||||||
"tar": "^6.2.1",
|
|
||||||
"text-table": "~0.2.0",
|
|
||||||
"tiny-relative-date": "^1.3.0",
|
|
||||||
"treeverse": "^3.0.0",
|
|
||||||
"validate-npm-package-name": "^6.0.0",
|
|
||||||
"which": "^5.0.0",
|
|
||||||
"write-file-atomic": "^6.0.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"npm": "bin/npm-cli.js",
|
|
||||||
"npx": "bin/npx-cli.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm-run-path": {
|
"node_modules/npm-run-path": {
|
||||||
"version": "4.0.1",
|
"version": "4.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
|
||||||
@@ -16091,2391 +16611,6 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/@isaacs/cliui": {
|
|
||||||
"version": "8.0.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"string-width": "^5.1.2",
|
|
||||||
"string-width-cjs": "npm:string-width@^4.2.0",
|
|
||||||
"strip-ansi": "^7.0.1",
|
|
||||||
"strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
|
|
||||||
"wrap-ansi": "^8.1.0",
|
|
||||||
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": {
|
|
||||||
"version": "6.1.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": {
|
|
||||||
"version": "9.2.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": {
|
|
||||||
"version": "5.1.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"eastasianwidth": "^0.2.0",
|
|
||||||
"emoji-regex": "^9.2.2",
|
|
||||||
"strip-ansi": "^7.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": {
|
|
||||||
"version": "7.1.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-regex": "^6.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@isaacs/fs-minipass": {
|
|
||||||
"version": "4.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"minipass": "^7.0.4"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@isaacs/string-locale-compare": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/agent": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"agent-base": "^7.1.0",
|
|
||||||
"http-proxy-agent": "^7.0.0",
|
|
||||||
"https-proxy-agent": "^7.0.1",
|
|
||||||
"lru-cache": "^10.0.1",
|
|
||||||
"socks-proxy-agent": "^8.0.3"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/arborist": {
|
|
||||||
"version": "8.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@isaacs/string-locale-compare": "^1.1.0",
|
|
||||||
"@npmcli/fs": "^4.0.0",
|
|
||||||
"@npmcli/installed-package-contents": "^3.0.0",
|
|
||||||
"@npmcli/map-workspaces": "^4.0.1",
|
|
||||||
"@npmcli/metavuln-calculator": "^8.0.0",
|
|
||||||
"@npmcli/name-from-folder": "^3.0.0",
|
|
||||||
"@npmcli/node-gyp": "^4.0.0",
|
|
||||||
"@npmcli/package-json": "^6.0.1",
|
|
||||||
"@npmcli/query": "^4.0.0",
|
|
||||||
"@npmcli/redact": "^3.0.0",
|
|
||||||
"@npmcli/run-script": "^9.0.1",
|
|
||||||
"bin-links": "^5.0.0",
|
|
||||||
"cacache": "^19.0.1",
|
|
||||||
"common-ancestor-path": "^1.0.1",
|
|
||||||
"hosted-git-info": "^8.0.0",
|
|
||||||
"json-parse-even-better-errors": "^4.0.0",
|
|
||||||
"json-stringify-nice": "^1.1.4",
|
|
||||||
"lru-cache": "^10.2.2",
|
|
||||||
"minimatch": "^9.0.4",
|
|
||||||
"nopt": "^8.0.0",
|
|
||||||
"npm-install-checks": "^7.1.0",
|
|
||||||
"npm-package-arg": "^12.0.0",
|
|
||||||
"npm-pick-manifest": "^10.0.0",
|
|
||||||
"npm-registry-fetch": "^18.0.1",
|
|
||||||
"pacote": "^19.0.0",
|
|
||||||
"parse-conflict-json": "^4.0.0",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"proggy": "^3.0.0",
|
|
||||||
"promise-all-reject-late": "^1.0.0",
|
|
||||||
"promise-call-limit": "^3.0.1",
|
|
||||||
"read-package-json-fast": "^4.0.0",
|
|
||||||
"semver": "^7.3.7",
|
|
||||||
"ssri": "^12.0.0",
|
|
||||||
"treeverse": "^3.0.0",
|
|
||||||
"walk-up-path": "^3.0.1"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"arborist": "bin/index.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/config": {
|
|
||||||
"version": "9.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/map-workspaces": "^4.0.1",
|
|
||||||
"@npmcli/package-json": "^6.0.1",
|
|
||||||
"ci-info": "^4.0.0",
|
|
||||||
"ini": "^5.0.0",
|
|
||||||
"nopt": "^8.0.0",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"semver": "^7.3.5",
|
|
||||||
"walk-up-path": "^3.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/fs": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"semver": "^7.3.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/git": {
|
|
||||||
"version": "6.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/promise-spawn": "^8.0.0",
|
|
||||||
"ini": "^5.0.0",
|
|
||||||
"lru-cache": "^10.0.1",
|
|
||||||
"npm-pick-manifest": "^10.0.0",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"promise-inflight": "^1.0.1",
|
|
||||||
"promise-retry": "^2.0.1",
|
|
||||||
"semver": "^7.3.5",
|
|
||||||
"which": "^5.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/installed-package-contents": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"npm-bundled": "^4.0.0",
|
|
||||||
"npm-normalize-package-bin": "^4.0.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"installed-package-contents": "bin/index.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/map-workspaces": {
|
|
||||||
"version": "4.0.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/name-from-folder": "^3.0.0",
|
|
||||||
"@npmcli/package-json": "^6.0.0",
|
|
||||||
"glob": "^10.2.2",
|
|
||||||
"minimatch": "^9.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/metavuln-calculator": {
|
|
||||||
"version": "8.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"cacache": "^19.0.0",
|
|
||||||
"json-parse-even-better-errors": "^4.0.0",
|
|
||||||
"pacote": "^20.0.0",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"semver": "^7.3.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/metavuln-calculator/node_modules/pacote": {
|
|
||||||
"version": "20.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/git": "^6.0.0",
|
|
||||||
"@npmcli/installed-package-contents": "^3.0.0",
|
|
||||||
"@npmcli/package-json": "^6.0.0",
|
|
||||||
"@npmcli/promise-spawn": "^8.0.0",
|
|
||||||
"@npmcli/run-script": "^9.0.0",
|
|
||||||
"cacache": "^19.0.0",
|
|
||||||
"fs-minipass": "^3.0.0",
|
|
||||||
"minipass": "^7.0.2",
|
|
||||||
"npm-package-arg": "^12.0.0",
|
|
||||||
"npm-packlist": "^9.0.0",
|
|
||||||
"npm-pick-manifest": "^10.0.0",
|
|
||||||
"npm-registry-fetch": "^18.0.0",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"promise-retry": "^2.0.1",
|
|
||||||
"sigstore": "^3.0.0",
|
|
||||||
"ssri": "^12.0.0",
|
|
||||||
"tar": "^6.1.11"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"pacote": "bin/index.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/name-from-folder": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/node-gyp": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/package-json": {
|
|
||||||
"version": "6.1.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/git": "^6.0.0",
|
|
||||||
"glob": "^10.2.2",
|
|
||||||
"hosted-git-info": "^8.0.0",
|
|
||||||
"json-parse-even-better-errors": "^4.0.0",
|
|
||||||
"normalize-package-data": "^7.0.0",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"semver": "^7.5.3"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/promise-spawn": {
|
|
||||||
"version": "8.0.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"which": "^5.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/query": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"postcss-selector-parser": "^6.1.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/redact": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@npmcli/run-script": {
|
|
||||||
"version": "9.0.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/node-gyp": "^4.0.0",
|
|
||||||
"@npmcli/package-json": "^6.0.0",
|
|
||||||
"@npmcli/promise-spawn": "^8.0.0",
|
|
||||||
"node-gyp": "^11.0.0",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"which": "^5.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@pkgjs/parseargs": {
|
|
||||||
"version": "0.11.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=14"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@sigstore/protobuf-specs": {
|
|
||||||
"version": "0.3.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"engines": {
|
|
||||||
"node": "^16.14.0 || >=18.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@sigstore/tuf": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"dependencies": {
|
|
||||||
"@sigstore/protobuf-specs": "^0.3.2",
|
|
||||||
"tuf-js": "^3.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/@tufjs/canonical-json": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": "^16.14.0 || >=18.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/abbrev": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/agent-base": {
|
|
||||||
"version": "7.1.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"debug": "^4.3.4"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 14"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/aggregate-error": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"clean-stack": "^2.0.0",
|
|
||||||
"indent-string": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/ansi-regex": {
|
|
||||||
"version": "5.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/ansi-styles": {
|
|
||||||
"version": "6.2.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/aproba": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/archy": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/balanced-match": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/bin-links": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"cmd-shim": "^7.0.0",
|
|
||||||
"npm-normalize-package-bin": "^4.0.0",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"read-cmd-shim": "^5.0.0",
|
|
||||||
"write-file-atomic": "^6.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/binary-extensions": {
|
|
||||||
"version": "2.3.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/brace-expansion": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"balanced-match": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/cacache": {
|
|
||||||
"version": "19.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/fs": "^4.0.0",
|
|
||||||
"fs-minipass": "^3.0.0",
|
|
||||||
"glob": "^10.2.2",
|
|
||||||
"lru-cache": "^10.0.1",
|
|
||||||
"minipass": "^7.0.3",
|
|
||||||
"minipass-collect": "^2.0.1",
|
|
||||||
"minipass-flush": "^1.0.5",
|
|
||||||
"minipass-pipeline": "^1.2.4",
|
|
||||||
"p-map": "^7.0.2",
|
|
||||||
"ssri": "^12.0.0",
|
|
||||||
"tar": "^7.4.3",
|
|
||||||
"unique-filename": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/cacache/node_modules/chownr": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "BlueOak-1.0.0",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/cacache/node_modules/minizlib": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"minipass": "^7.0.4",
|
|
||||||
"rimraf": "^5.0.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 18"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/cacache/node_modules/mkdirp": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"bin": {
|
|
||||||
"mkdirp": "dist/cjs/src/bin.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/cacache/node_modules/p-map": {
|
|
||||||
"version": "7.0.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/cacache/node_modules/tar": {
|
|
||||||
"version": "7.4.3",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@isaacs/fs-minipass": "^4.0.0",
|
|
||||||
"chownr": "^3.0.0",
|
|
||||||
"minipass": "^7.1.2",
|
|
||||||
"minizlib": "^3.0.1",
|
|
||||||
"mkdirp": "^3.0.1",
|
|
||||||
"yallist": "^5.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/cacache/node_modules/yallist": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "BlueOak-1.0.0",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/chalk": {
|
|
||||||
"version": "5.3.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": "^12.17.0 || ^14.13 || >=16.0.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/chalk/chalk?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/chownr": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/ci-info": {
|
|
||||||
"version": "4.1.0",
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"type": "github",
|
|
||||||
"url": "https://github.com/sponsors/sibiraj-s"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/cidr-regex": {
|
|
||||||
"version": "4.1.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "BSD-2-Clause",
|
|
||||||
"dependencies": {
|
|
||||||
"ip-regex": "^5.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=14"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/clean-stack": {
|
|
||||||
"version": "2.2.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/cli-columns": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"string-width": "^4.2.3",
|
|
||||||
"strip-ansi": "^6.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/cmd-shim": {
|
|
||||||
"version": "7.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/color-convert": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"color-name": "~1.1.4"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=7.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/color-name": {
|
|
||||||
"version": "1.1.4",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/common-ancestor-path": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/cross-spawn": {
|
|
||||||
"version": "7.0.6",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"path-key": "^3.1.0",
|
|
||||||
"shebang-command": "^2.0.0",
|
|
||||||
"which": "^2.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/cross-spawn/node_modules/which": {
|
|
||||||
"version": "2.0.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"isexe": "^2.0.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"node-which": "bin/node-which"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/cssesc": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"bin": {
|
|
||||||
"cssesc": "bin/cssesc"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/debug": {
|
|
||||||
"version": "4.3.7",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"ms": "^2.1.3"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6.0"
|
|
||||||
},
|
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"supports-color": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/diff": {
|
|
||||||
"version": "5.2.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "BSD-3-Clause",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.3.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/eastasianwidth": {
|
|
||||||
"version": "0.2.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/emoji-regex": {
|
|
||||||
"version": "8.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/encoding": {
|
|
||||||
"version": "0.1.13",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"iconv-lite": "^0.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/env-paths": {
|
|
||||||
"version": "2.2.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/err-code": {
|
|
||||||
"version": "2.0.3",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/exponential-backoff": {
|
|
||||||
"version": "3.1.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "Apache-2.0"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/fastest-levenshtein": {
|
|
||||||
"version": "1.0.16",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 4.9.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/foreground-child": {
|
|
||||||
"version": "3.3.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"cross-spawn": "^7.0.0",
|
|
||||||
"signal-exit": "^4.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=14"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/fs-minipass": {
|
|
||||||
"version": "3.0.3",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"minipass": "^7.0.3"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/glob": {
|
|
||||||
"version": "10.4.5",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"foreground-child": "^3.1.0",
|
|
||||||
"jackspeak": "^3.1.2",
|
|
||||||
"minimatch": "^9.0.4",
|
|
||||||
"minipass": "^7.1.2",
|
|
||||||
"package-json-from-dist": "^1.0.0",
|
|
||||||
"path-scurry": "^1.11.1"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"glob": "dist/esm/bin.mjs"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/graceful-fs": {
|
|
||||||
"version": "4.2.11",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/hosted-git-info": {
|
|
||||||
"version": "8.0.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"lru-cache": "^10.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/http-cache-semantics": {
|
|
||||||
"version": "4.1.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "BSD-2-Clause"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/http-proxy-agent": {
|
|
||||||
"version": "7.0.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"agent-base": "^7.1.0",
|
|
||||||
"debug": "^4.3.4"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 14"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/https-proxy-agent": {
|
|
||||||
"version": "7.0.5",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"agent-base": "^7.0.2",
|
|
||||||
"debug": "4"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 14"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/iconv-lite": {
|
|
||||||
"version": "0.6.3",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/ignore-walk": {
|
|
||||||
"version": "7.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"minimatch": "^9.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/imurmurhash": {
|
|
||||||
"version": "0.1.4",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.8.19"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/indent-string": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/ini": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/init-package-json": {
|
|
||||||
"version": "7.0.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/package-json": "^6.0.0",
|
|
||||||
"npm-package-arg": "^12.0.0",
|
|
||||||
"promzard": "^2.0.0",
|
|
||||||
"read": "^4.0.0",
|
|
||||||
"semver": "^7.3.5",
|
|
||||||
"validate-npm-package-license": "^3.0.4",
|
|
||||||
"validate-npm-package-name": "^6.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/ip-address": {
|
|
||||||
"version": "9.0.5",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"jsbn": "1.1.0",
|
|
||||||
"sprintf-js": "^1.1.3"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 12"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/ip-regex": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/is-cidr": {
|
|
||||||
"version": "5.1.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "BSD-2-Clause",
|
|
||||||
"dependencies": {
|
|
||||||
"cidr-regex": "^4.1.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=14"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/is-fullwidth-code-point": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/isexe": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/jackspeak": {
|
|
||||||
"version": "3.4.3",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "BlueOak-1.0.0",
|
|
||||||
"dependencies": {
|
|
||||||
"@isaacs/cliui": "^8.0.2"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"@pkgjs/parseargs": "^0.11.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/jsbn": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/json-parse-even-better-errors": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/json-stringify-nice": {
|
|
||||||
"version": "1.1.4",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/jsonparse": {
|
|
||||||
"version": "1.3.1",
|
|
||||||
"engines": [
|
|
||||||
"node >= 0.2.0"
|
|
||||||
],
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/just-diff": {
|
|
||||||
"version": "6.0.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/just-diff-apply": {
|
|
||||||
"version": "5.5.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/libnpmaccess": {
|
|
||||||
"version": "9.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"npm-package-arg": "^12.0.0",
|
|
||||||
"npm-registry-fetch": "^18.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/libnpmdiff": {
|
|
||||||
"version": "7.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/arborist": "^8.0.0",
|
|
||||||
"@npmcli/installed-package-contents": "^3.0.0",
|
|
||||||
"binary-extensions": "^2.3.0",
|
|
||||||
"diff": "^5.1.0",
|
|
||||||
"minimatch": "^9.0.4",
|
|
||||||
"npm-package-arg": "^12.0.0",
|
|
||||||
"pacote": "^19.0.0",
|
|
||||||
"tar": "^6.2.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/libnpmexec": {
|
|
||||||
"version": "9.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/arborist": "^8.0.0",
|
|
||||||
"@npmcli/run-script": "^9.0.1",
|
|
||||||
"ci-info": "^4.0.0",
|
|
||||||
"npm-package-arg": "^12.0.0",
|
|
||||||
"pacote": "^19.0.0",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"read": "^4.0.0",
|
|
||||||
"read-package-json-fast": "^4.0.0",
|
|
||||||
"semver": "^7.3.7",
|
|
||||||
"walk-up-path": "^3.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/libnpmfund": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/arborist": "^8.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/libnpmhook": {
|
|
||||||
"version": "11.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"aproba": "^2.0.0",
|
|
||||||
"npm-registry-fetch": "^18.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/libnpmorg": {
|
|
||||||
"version": "7.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"aproba": "^2.0.0",
|
|
||||||
"npm-registry-fetch": "^18.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/libnpmpack": {
|
|
||||||
"version": "8.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/arborist": "^8.0.0",
|
|
||||||
"@npmcli/run-script": "^9.0.1",
|
|
||||||
"npm-package-arg": "^12.0.0",
|
|
||||||
"pacote": "^19.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/libnpmpublish": {
|
|
||||||
"version": "10.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"ci-info": "^4.0.0",
|
|
||||||
"normalize-package-data": "^7.0.0",
|
|
||||||
"npm-package-arg": "^12.0.0",
|
|
||||||
"npm-registry-fetch": "^18.0.1",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"semver": "^7.3.7",
|
|
||||||
"sigstore": "^3.0.0",
|
|
||||||
"ssri": "^12.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/libnpmsearch": {
|
|
||||||
"version": "8.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"npm-registry-fetch": "^18.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/libnpmteam": {
|
|
||||||
"version": "7.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"aproba": "^2.0.0",
|
|
||||||
"npm-registry-fetch": "^18.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/libnpmversion": {
|
|
||||||
"version": "7.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/git": "^6.0.1",
|
|
||||||
"@npmcli/run-script": "^9.0.1",
|
|
||||||
"json-parse-even-better-errors": "^4.0.0",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"semver": "^7.3.7"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/lru-cache": {
|
|
||||||
"version": "10.4.3",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/make-fetch-happen": {
|
|
||||||
"version": "14.0.3",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/agent": "^3.0.0",
|
|
||||||
"cacache": "^19.0.1",
|
|
||||||
"http-cache-semantics": "^4.1.1",
|
|
||||||
"minipass": "^7.0.2",
|
|
||||||
"minipass-fetch": "^4.0.0",
|
|
||||||
"minipass-flush": "^1.0.5",
|
|
||||||
"minipass-pipeline": "^1.2.4",
|
|
||||||
"negotiator": "^1.0.0",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"promise-retry": "^2.0.1",
|
|
||||||
"ssri": "^12.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 0.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/minimatch": {
|
|
||||||
"version": "9.0.5",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"brace-expansion": "^2.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=16 || 14 >=14.17"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/minipass": {
|
|
||||||
"version": "7.1.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=16 || 14 >=14.17"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/minipass-collect": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"minipass": "^7.0.3"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=16 || 14 >=14.17"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/minipass-fetch": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"minipass": "^7.0.3",
|
|
||||||
"minipass-sized": "^1.0.3",
|
|
||||||
"minizlib": "^3.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"encoding": "^0.1.13"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/minipass-fetch/node_modules/minizlib": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"minipass": "^7.0.4",
|
|
||||||
"rimraf": "^5.0.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 18"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/minipass-flush": {
|
|
||||||
"version": "1.0.5",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"minipass": "^3.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/minipass-flush/node_modules/minipass": {
|
|
||||||
"version": "3.3.6",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"yallist": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/minipass-pipeline": {
|
|
||||||
"version": "1.2.4",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"minipass": "^3.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": {
|
|
||||||
"version": "3.3.6",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"yallist": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/minipass-sized": {
|
|
||||||
"version": "1.0.3",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"minipass": "^3.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/minipass-sized/node_modules/minipass": {
|
|
||||||
"version": "3.3.6",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"yallist": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/minizlib": {
|
|
||||||
"version": "2.1.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"minipass": "^3.0.0",
|
|
||||||
"yallist": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/minizlib/node_modules/minipass": {
|
|
||||||
"version": "3.3.6",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"yallist": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/mkdirp": {
|
|
||||||
"version": "1.0.4",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"bin": {
|
|
||||||
"mkdirp": "bin/cmd.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/ms": {
|
|
||||||
"version": "2.1.3",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/mute-stream": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/node-gyp": {
|
|
||||||
"version": "11.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"env-paths": "^2.2.0",
|
|
||||||
"exponential-backoff": "^3.1.1",
|
|
||||||
"glob": "^10.3.10",
|
|
||||||
"graceful-fs": "^4.2.6",
|
|
||||||
"make-fetch-happen": "^14.0.3",
|
|
||||||
"nopt": "^8.0.0",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"semver": "^7.3.5",
|
|
||||||
"tar": "^7.4.3",
|
|
||||||
"which": "^5.0.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"node-gyp": "bin/node-gyp.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/node-gyp/node_modules/chownr": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "BlueOak-1.0.0",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/node-gyp/node_modules/minizlib": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"minipass": "^7.0.4",
|
|
||||||
"rimraf": "^5.0.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 18"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/node-gyp/node_modules/mkdirp": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"bin": {
|
|
||||||
"mkdirp": "dist/cjs/src/bin.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/node-gyp/node_modules/tar": {
|
|
||||||
"version": "7.4.3",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@isaacs/fs-minipass": "^4.0.0",
|
|
||||||
"chownr": "^3.0.0",
|
|
||||||
"minipass": "^7.1.2",
|
|
||||||
"minizlib": "^3.0.1",
|
|
||||||
"mkdirp": "^3.0.1",
|
|
||||||
"yallist": "^5.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/node-gyp/node_modules/yallist": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "BlueOak-1.0.0",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=18"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/nopt": {
|
|
||||||
"version": "8.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"abbrev": "^2.0.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"nopt": "bin/nopt.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/nopt/node_modules/abbrev": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/normalize-package-data": {
|
|
||||||
"version": "7.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "BSD-2-Clause",
|
|
||||||
"dependencies": {
|
|
||||||
"hosted-git-info": "^8.0.0",
|
|
||||||
"semver": "^7.3.5",
|
|
||||||
"validate-npm-package-license": "^3.0.4"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/npm-audit-report": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/npm-bundled": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"npm-normalize-package-bin": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/npm-install-checks": {
|
|
||||||
"version": "7.1.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "BSD-2-Clause",
|
|
||||||
"dependencies": {
|
|
||||||
"semver": "^7.1.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/npm-normalize-package-bin": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/npm-package-arg": {
|
|
||||||
"version": "12.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"hosted-git-info": "^8.0.0",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"semver": "^7.3.5",
|
|
||||||
"validate-npm-package-name": "^6.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/npm-packlist": {
|
|
||||||
"version": "9.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"ignore-walk": "^7.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/npm-pick-manifest": {
|
|
||||||
"version": "10.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"npm-install-checks": "^7.1.0",
|
|
||||||
"npm-normalize-package-bin": "^4.0.0",
|
|
||||||
"npm-package-arg": "^12.0.0",
|
|
||||||
"semver": "^7.3.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/npm-profile": {
|
|
||||||
"version": "11.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"npm-registry-fetch": "^18.0.0",
|
|
||||||
"proc-log": "^5.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/npm-registry-fetch": {
|
|
||||||
"version": "18.0.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/redact": "^3.0.0",
|
|
||||||
"jsonparse": "^1.3.1",
|
|
||||||
"make-fetch-happen": "^14.0.0",
|
|
||||||
"minipass": "^7.0.2",
|
|
||||||
"minipass-fetch": "^4.0.0",
|
|
||||||
"minizlib": "^3.0.1",
|
|
||||||
"npm-package-arg": "^12.0.0",
|
|
||||||
"proc-log": "^5.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"minipass": "^7.0.4",
|
|
||||||
"rimraf": "^5.0.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 18"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/npm-user-validate": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "BSD-2-Clause",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/p-map": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"aggregate-error": "^3.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/package-json-from-dist": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "BlueOak-1.0.0"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/pacote": {
|
|
||||||
"version": "19.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"@npmcli/git": "^6.0.0",
|
|
||||||
"@npmcli/installed-package-contents": "^3.0.0",
|
|
||||||
"@npmcli/package-json": "^6.0.0",
|
|
||||||
"@npmcli/promise-spawn": "^8.0.0",
|
|
||||||
"@npmcli/run-script": "^9.0.0",
|
|
||||||
"cacache": "^19.0.0",
|
|
||||||
"fs-minipass": "^3.0.0",
|
|
||||||
"minipass": "^7.0.2",
|
|
||||||
"npm-package-arg": "^12.0.0",
|
|
||||||
"npm-packlist": "^9.0.0",
|
|
||||||
"npm-pick-manifest": "^10.0.0",
|
|
||||||
"npm-registry-fetch": "^18.0.0",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"promise-retry": "^2.0.1",
|
|
||||||
"sigstore": "^3.0.0",
|
|
||||||
"ssri": "^12.0.0",
|
|
||||||
"tar": "^6.1.11"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"pacote": "bin/index.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/parse-conflict-json": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"json-parse-even-better-errors": "^4.0.0",
|
|
||||||
"just-diff": "^6.0.0",
|
|
||||||
"just-diff-apply": "^5.2.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/path-key": {
|
|
||||||
"version": "3.1.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/path-scurry": {
|
|
||||||
"version": "1.11.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "BlueOak-1.0.0",
|
|
||||||
"dependencies": {
|
|
||||||
"lru-cache": "^10.2.0",
|
|
||||||
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=16 || 14 >=14.18"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/postcss-selector-parser": {
|
|
||||||
"version": "6.1.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"cssesc": "^3.0.0",
|
|
||||||
"util-deprecate": "^1.0.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/proc-log": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/proggy": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/promise-all-reject-late": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/promise-call-limit": {
|
|
||||||
"version": "3.0.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/promise-inflight": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/promise-retry": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"err-code": "^2.0.2",
|
|
||||||
"retry": "^0.12.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/promzard": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"read": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/qrcode-terminal": {
|
|
||||||
"version": "0.12.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"bin": {
|
|
||||||
"qrcode-terminal": "bin/qrcode-terminal.js"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/read": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"mute-stream": "^2.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/read-cmd-shim": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/read-package-json-fast": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"json-parse-even-better-errors": "^4.0.0",
|
|
||||||
"npm-normalize-package-bin": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/retry": {
|
|
||||||
"version": "0.12.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/rimraf": {
|
|
||||||
"version": "5.0.10",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"glob": "^10.3.7"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"rimraf": "dist/esm/bin.mjs"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/safer-buffer": {
|
|
||||||
"version": "2.1.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/semver": {
|
|
||||||
"version": "7.6.3",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"bin": {
|
|
||||||
"semver": "bin/semver.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/shebang-command": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"shebang-regex": "^3.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/shebang-regex": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/signal-exit": {
|
|
||||||
"version": "4.1.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=14"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/isaacs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/sigstore": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"dependencies": {
|
|
||||||
"@sigstore/bundle": "^3.0.0",
|
|
||||||
"@sigstore/core": "^2.0.0",
|
|
||||||
"@sigstore/protobuf-specs": "^0.3.2",
|
|
||||||
"@sigstore/sign": "^3.0.0",
|
|
||||||
"@sigstore/tuf": "^3.0.0",
|
|
||||||
"@sigstore/verify": "^2.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"dependencies": {
|
|
||||||
"@sigstore/protobuf-specs": "^0.3.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/sigstore/node_modules/@sigstore/core": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"dependencies": {
|
|
||||||
"@sigstore/bundle": "^3.0.0",
|
|
||||||
"@sigstore/core": "^2.0.0",
|
|
||||||
"@sigstore/protobuf-specs": "^0.3.2",
|
|
||||||
"make-fetch-happen": "^14.0.1",
|
|
||||||
"proc-log": "^5.0.0",
|
|
||||||
"promise-retry": "^2.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"dependencies": {
|
|
||||||
"@sigstore/bundle": "^3.0.0",
|
|
||||||
"@sigstore/core": "^2.0.0",
|
|
||||||
"@sigstore/protobuf-specs": "^0.3.2"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/smart-buffer": {
|
|
||||||
"version": "4.2.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 6.0.0",
|
|
||||||
"npm": ">= 3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/socks": {
|
|
||||||
"version": "2.8.3",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"ip-address": "^9.0.5",
|
|
||||||
"smart-buffer": "^4.2.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 10.0.0",
|
|
||||||
"npm": ">= 3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/socks-proxy-agent": {
|
|
||||||
"version": "8.0.4",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"agent-base": "^7.1.1",
|
|
||||||
"debug": "^4.3.4",
|
|
||||||
"socks": "^2.8.3"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 14"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/spdx-correct": {
|
|
||||||
"version": "3.2.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"dependencies": {
|
|
||||||
"spdx-expression-parse": "^3.0.0",
|
|
||||||
"spdx-license-ids": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"spdx-exceptions": "^2.1.0",
|
|
||||||
"spdx-license-ids": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/spdx-exceptions": {
|
|
||||||
"version": "2.5.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "CC-BY-3.0"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/spdx-expression-parse": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"spdx-exceptions": "^2.1.0",
|
|
||||||
"spdx-license-ids": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/spdx-license-ids": {
|
|
||||||
"version": "3.0.20",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "CC0-1.0"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/sprintf-js": {
|
|
||||||
"version": "1.1.3",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "BSD-3-Clause"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/ssri": {
|
|
||||||
"version": "12.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"minipass": "^7.0.3"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/string-width": {
|
|
||||||
"version": "4.2.3",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"emoji-regex": "^8.0.0",
|
|
||||||
"is-fullwidth-code-point": "^3.0.0",
|
|
||||||
"strip-ansi": "^6.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/string-width-cjs": {
|
|
||||||
"name": "string-width",
|
|
||||||
"version": "4.2.3",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"emoji-regex": "^8.0.0",
|
|
||||||
"is-fullwidth-code-point": "^3.0.0",
|
|
||||||
"strip-ansi": "^6.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/strip-ansi": {
|
|
||||||
"version": "6.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-regex": "^5.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/strip-ansi-cjs": {
|
|
||||||
"name": "strip-ansi",
|
|
||||||
"version": "6.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-regex": "^5.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/supports-color": {
|
|
||||||
"version": "9.4.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/chalk/supports-color?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/tar": {
|
|
||||||
"version": "6.2.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"chownr": "^2.0.0",
|
|
||||||
"fs-minipass": "^2.0.0",
|
|
||||||
"minipass": "^5.0.0",
|
|
||||||
"minizlib": "^2.1.1",
|
|
||||||
"mkdirp": "^1.0.3",
|
|
||||||
"yallist": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/tar/node_modules/fs-minipass": {
|
|
||||||
"version": "2.1.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"minipass": "^3.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": {
|
|
||||||
"version": "3.3.6",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"yallist": "^4.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/tar/node_modules/minipass": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/text-table": {
|
|
||||||
"version": "0.2.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/tiny-relative-date": {
|
|
||||||
"version": "1.3.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/treeverse": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/tuf-js": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@tufjs/models": "3.0.1",
|
|
||||||
"debug": "^4.3.6",
|
|
||||||
"make-fetch-happen": "^14.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/tuf-js/node_modules/@tufjs/models": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"@tufjs/canonical-json": "2.0.0",
|
|
||||||
"minimatch": "^9.0.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/unique-filename": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"unique-slug": "^5.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/unique-slug": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"imurmurhash": "^0.1.4"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/util-deprecate": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/validate-npm-package-license": {
|
|
||||||
"version": "3.0.4",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"dependencies": {
|
|
||||||
"spdx-correct": "^3.0.0",
|
|
||||||
"spdx-expression-parse": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"spdx-exceptions": "^2.1.0",
|
|
||||||
"spdx-license-ids": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/validate-npm-package-name": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/walk-up-path": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/which": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"isexe": "^3.1.1"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"node-which": "bin/which.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/which/node_modules/isexe": {
|
|
||||||
"version": "3.1.1",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=16"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/wrap-ansi": {
|
|
||||||
"version": "8.1.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-styles": "^6.1.0",
|
|
||||||
"string-width": "^5.0.1",
|
|
||||||
"strip-ansi": "^7.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/wrap-ansi-cjs": {
|
|
||||||
"name": "wrap-ansi",
|
|
||||||
"version": "7.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-styles": "^4.0.0",
|
|
||||||
"string-width": "^4.1.0",
|
|
||||||
"strip-ansi": "^6.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
|
|
||||||
"version": "4.3.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"color-convert": "^2.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": {
|
|
||||||
"version": "6.1.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": {
|
|
||||||
"version": "9.2.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": {
|
|
||||||
"version": "5.1.2",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"eastasianwidth": "^0.2.0",
|
|
||||||
"emoji-regex": "^9.2.2",
|
|
||||||
"strip-ansi": "^7.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": {
|
|
||||||
"version": "7.1.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-regex": "^6.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/write-file-atomic": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC",
|
|
||||||
"dependencies": {
|
|
||||||
"imurmurhash": "^0.1.4",
|
|
||||||
"signal-exit": "^4.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || >=20.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/npm/node_modules/yallist": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"inBundle": true,
|
|
||||||
"license": "ISC"
|
|
||||||
},
|
|
||||||
"node_modules/nth-check": {
|
"node_modules/nth-check": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
|
||||||
@@ -18489,9 +16624,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/nwsapi": {
|
"node_modules/nwsapi": {
|
||||||
"version": "2.2.19",
|
"version": "2.2.20",
|
||||||
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.19.tgz",
|
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz",
|
||||||
"integrity": "sha512-94bcyI3RsqiZufXjkr3ltkI86iEl+I7uiHVDtcq9wJUTwYQJ5odHDeSzkkrRzi80jJ8MaeZgqKjH1bAWAFw9bA==",
|
"integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/object-assign": {
|
"node_modules/object-assign": {
|
||||||
@@ -18527,6 +16662,22 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/object-is": {
|
||||||
|
"version": "1.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz",
|
||||||
|
"integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"call-bind": "^1.0.7",
|
||||||
|
"define-properties": "^1.2.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/object-keys": {
|
"node_modules/object-keys": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
|
||||||
@@ -18657,9 +16808,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/on-headers": {
|
"node_modules/on-headers": {
|
||||||
"version": "1.0.2",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz",
|
||||||
"integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
|
"integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.8"
|
"node": ">= 0.8"
|
||||||
@@ -18854,6 +17005,12 @@
|
|||||||
"node": ">=6"
|
"node": ">=6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/package-json-from-dist": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
|
||||||
|
"license": "BlueOak-1.0.0"
|
||||||
|
},
|
||||||
"node_modules/pako": {
|
"node_modules/pako": {
|
||||||
"version": "1.0.11",
|
"version": "1.0.11",
|
||||||
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
|
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
|
||||||
@@ -18931,6 +17088,74 @@
|
|||||||
"tslib": "^2.0.3"
|
"tslib": "^2.0.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/patch-package": {
|
||||||
|
"version": "8.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz",
|
||||||
|
"integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@yarnpkg/lockfile": "^1.1.0",
|
||||||
|
"chalk": "^4.1.2",
|
||||||
|
"ci-info": "^3.7.0",
|
||||||
|
"cross-spawn": "^7.0.3",
|
||||||
|
"find-yarn-workspace-root": "^2.0.0",
|
||||||
|
"fs-extra": "^9.0.0",
|
||||||
|
"json-stable-stringify": "^1.0.2",
|
||||||
|
"klaw-sync": "^6.0.0",
|
||||||
|
"minimist": "^1.2.6",
|
||||||
|
"open": "^7.4.2",
|
||||||
|
"rimraf": "^2.6.3",
|
||||||
|
"semver": "^7.5.3",
|
||||||
|
"slash": "^2.0.0",
|
||||||
|
"tmp": "^0.0.33",
|
||||||
|
"yaml": "^2.2.2"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"patch-package": "index.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14",
|
||||||
|
"npm": ">5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/patch-package/node_modules/open": {
|
||||||
|
"version": "7.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
|
||||||
|
"integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"is-docker": "^2.0.0",
|
||||||
|
"is-wsl": "^2.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/patch-package/node_modules/semver": {
|
||||||
|
"version": "7.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
|
||||||
|
"integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
|
||||||
|
"license": "ISC",
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/path": {
|
||||||
|
"version": "0.12.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
|
||||||
|
"integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"process": "^0.11.1",
|
||||||
|
"util": "^0.10.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/path-exists": {
|
"node_modules/path-exists": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
|
||||||
@@ -18970,6 +17195,28 @@
|
|||||||
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
|
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/path-scurry": {
|
||||||
|
"version": "1.11.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
|
||||||
|
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
|
||||||
|
"license": "BlueOak-1.0.0",
|
||||||
|
"dependencies": {
|
||||||
|
"lru-cache": "^10.2.0",
|
||||||
|
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16 || 14 >=14.18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/path-scurry/node_modules/lru-cache": {
|
||||||
|
"version": "10.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
|
||||||
|
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
|
||||||
|
"license": "ISC"
|
||||||
|
},
|
||||||
"node_modules/path-to-regexp": {
|
"node_modules/path-to-regexp": {
|
||||||
"version": "0.1.12",
|
"version": "0.1.12",
|
||||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
|
||||||
@@ -18985,6 +17232,27 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/path-unified": {
|
||||||
|
"version": "0.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-unified/-/path-unified-0.2.0.tgz",
|
||||||
|
"integrity": "sha512-MNKqvrKbbbb5p7XHXV6ZAsf/1f/yJQa13S/fcX0uua8ew58Tgc6jXV+16JyAbnR/clgCH+euKDxrF2STxMHdrg==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/path/node_modules/inherits": {
|
||||||
|
"version": "2.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||||
|
"integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
|
||||||
|
"license": "ISC"
|
||||||
|
},
|
||||||
|
"node_modules/path/node_modules/util": {
|
||||||
|
"version": "0.10.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
|
||||||
|
"integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"inherits": "2.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/picocolors": {
|
"node_modules/picocolors": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
||||||
@@ -19277,6 +17545,24 @@
|
|||||||
"postcss": "^8.2.2"
|
"postcss": "^8.2.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/postcss-calc-ast-parser": {
|
||||||
|
"version": "0.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-calc-ast-parser/-/postcss-calc-ast-parser-0.1.4.tgz",
|
||||||
|
"integrity": "sha512-CebpbHc96zgFjGgdQ6BqBy6XIUgRx1xXWCAAk6oke02RZ5nxwo9KQejTg8y7uYEeI9kv8jKQPYjoe6REsY23vw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"postcss-value-parser": "^3.3.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/postcss-calc-ast-parser/node_modules/postcss-value-parser": {
|
||||||
|
"version": "3.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
|
||||||
|
"integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/postcss-colormin": {
|
"node_modules/postcss-colormin": {
|
||||||
"version": "6.1.0",
|
"version": "6.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz",
|
||||||
@@ -19295,6 +17581,21 @@
|
|||||||
"postcss": "^8.4.31"
|
"postcss": "^8.4.31"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/postcss-combine-duplicated-selectors": {
|
||||||
|
"version": "10.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-combine-duplicated-selectors/-/postcss-combine-duplicated-selectors-10.0.3.tgz",
|
||||||
|
"integrity": "sha512-IP0BmwFloCskv7DV7xqvzDXqMHpwdczJa6ZvIW8abgHdcIHs9mCJX2ltFhu3EwA51ozp13DByng30+Ke+eIExA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"postcss-selector-parser": "^6.0.4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "^10.0.0 || ^12.0.0 || >=14.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"postcss": "^8.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/postcss-convert-values": {
|
"node_modules/postcss-convert-values": {
|
||||||
"version": "6.1.0",
|
"version": "6.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz",
|
||||||
@@ -19387,6 +17688,23 @@
|
|||||||
"postcss": "^8.4.31"
|
"postcss": "^8.4.31"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/postcss-import": {
|
||||||
|
"version": "15.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
|
||||||
|
"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"postcss-value-parser": "^4.0.0",
|
||||||
|
"read-cache": "^1.0.0",
|
||||||
|
"resolve": "^1.1.7"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"postcss": "^8.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/postcss-loader": {
|
"node_modules/postcss-loader": {
|
||||||
"version": "7.3.4",
|
"version": "7.3.4",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz",
|
||||||
@@ -19421,6 +17739,52 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/postcss-map": {
|
||||||
|
"version": "0.11.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-map/-/postcss-map-0.11.0.tgz",
|
||||||
|
"integrity": "sha512-cgHYZrH9aAMds90upYUPhYz8xnAcRD45SwuNns/nQHONIrPQDhpwk3JLsAQGOndQxnRVXfB6nB+3WqSMy8fqlA==",
|
||||||
|
"license": "Unlicense",
|
||||||
|
"dependencies": {
|
||||||
|
"js-yaml": "^3.12.0",
|
||||||
|
"postcss": "^7.0.2",
|
||||||
|
"reduce-function-call": "^1.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/postcss-map/node_modules/picocolors": {
|
||||||
|
"version": "0.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
|
||||||
|
"integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
|
||||||
|
"license": "ISC"
|
||||||
|
},
|
||||||
|
"node_modules/postcss-map/node_modules/postcss": {
|
||||||
|
"version": "7.0.39",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
|
||||||
|
"integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"picocolors": "^0.2.1",
|
||||||
|
"source-map": "^0.6.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/postcss/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/postcss-map/node_modules/source-map": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||||
|
"license": "BSD-3-Clause",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/postcss-media-query-parser": {
|
"node_modules/postcss-media-query-parser": {
|
||||||
"version": "0.2.3",
|
"version": "0.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
|
||||||
@@ -19462,6 +17826,19 @@
|
|||||||
"postcss": "^8.4.31"
|
"postcss": "^8.4.31"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/postcss-minify": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/postcss-minify/-/postcss-minify-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-9D64ueIW0DL2FdLajQTlXrnTN8Ox9NjuXqigKMmB819RhdClNPYx5Zp3i5x0ghjjy3vGrLBBYEYvJjY/1eMNbw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"postcss-selector-parser": "^6.0",
|
||||||
|
"postcss-value-parser": "^4.1"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"postcss": "^8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/postcss-minify-font-values": {
|
"node_modules/postcss-minify-font-values": {
|
||||||
"version": "6.1.0",
|
"version": "6.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz",
|
||||||
@@ -19934,9 +18311,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/prebuild-install/node_modules/detect-libc": {
|
"node_modules/prebuild-install/node_modules/detect-libc": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
|
||||||
"integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
|
"integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
@@ -19957,9 +18334,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/prebuild-install/node_modules/tar-fs": {
|
"node_modules/prebuild-install/node_modules/tar-fs": {
|
||||||
"version": "2.1.2",
|
"version": "2.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz",
|
||||||
"integrity": "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==",
|
"integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chownr": "^1.1.1",
|
"chownr": "^1.1.1",
|
||||||
@@ -19993,6 +18370,21 @@
|
|||||||
"node": ">= 0.8.0"
|
"node": ">= 0.8.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/prettier": {
|
||||||
|
"version": "3.5.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
|
||||||
|
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"bin": {
|
||||||
|
"prettier": "bin/prettier.cjs"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/prettier/prettier?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/pretty-error": {
|
"node_modules/pretty-error": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz",
|
||||||
@@ -20009,6 +18401,7 @@
|
|||||||
"integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
|
"integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ansi-regex": "^5.0.1",
|
"ansi-regex": "^5.0.1",
|
||||||
"ansi-styles": "^5.0.0",
|
"ansi-styles": "^5.0.0",
|
||||||
@@ -20024,6 +18417,7 @@
|
|||||||
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
|
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"peer": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
},
|
},
|
||||||
@@ -20036,7 +18430,17 @@
|
|||||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
|
||||||
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
|
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
|
"peer": true
|
||||||
|
},
|
||||||
|
"node_modules/process": {
|
||||||
|
"version": "0.11.10",
|
||||||
|
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
|
||||||
|
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6.0"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"node_modules/process-nextick-args": {
|
"node_modules/process-nextick-args": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
@@ -20175,9 +18579,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/purgecss/node_modules/brace-expansion": {
|
"node_modules/purgecss/node_modules/brace-expansion": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
||||||
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"balanced-match": "^1.0.0"
|
"balanced-match": "^1.0.0"
|
||||||
@@ -20777,9 +19181,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react-onclickoutside": {
|
"node_modules/react-onclickoutside": {
|
||||||
"version": "6.13.1",
|
"version": "6.13.2",
|
||||||
"resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.13.1.tgz",
|
"resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.13.2.tgz",
|
||||||
"integrity": "sha512-LdrrxK/Yh9zbBQdFbMTXPp3dTSN9B+9YJQucdDu3JNKRrbdU+H+/TVONJoWtOwy4II8Sqf1y/DTI6w/vGPYW0w==",
|
"integrity": "sha512-h6Hbf1c8b7tIYY4u90mDdBLY4+AGQVMFtIE89HgC0DtVCh/JfKl477gYqUtGLmjZBKK3MJxomP/lFiLbz4sq9A==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"funding": {
|
"funding": {
|
||||||
"type": "individual",
|
"type": "individual",
|
||||||
@@ -20943,12 +19347,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react-router": {
|
"node_modules/react-router": {
|
||||||
"version": "6.27.0",
|
"version": "6.30.1",
|
||||||
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.27.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.1.tgz",
|
||||||
"integrity": "sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==",
|
"integrity": "sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@remix-run/router": "1.20.0"
|
"@remix-run/router": "1.23.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14.0.0"
|
"node": ">=14.0.0"
|
||||||
@@ -20958,13 +19362,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react-router-dom": {
|
"node_modules/react-router-dom": {
|
||||||
"version": "6.27.0",
|
"version": "6.30.1",
|
||||||
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.27.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.1.tgz",
|
||||||
"integrity": "sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==",
|
"integrity": "sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@remix-run/router": "1.20.0",
|
"@remix-run/router": "1.23.0",
|
||||||
"react-router": "6.27.0"
|
"react-router": "6.30.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14.0.0"
|
"node": ">=14.0.0"
|
||||||
@@ -20975,9 +19379,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react-select": {
|
"node_modules/react-select": {
|
||||||
"version": "5.8.0",
|
"version": "5.10.2",
|
||||||
"resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/react-select/-/react-select-5.10.2.tgz",
|
||||||
"integrity": "sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==",
|
"integrity": "sha512-Z33nHdEFWq9tfnfVXaiM12rbJmk+QjFEztWLtmXqQhz6Al4UZZ9xc0wiatmGtUOCCnHN0WizL3tCMYRENX4rVQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.12.0",
|
"@babel/runtime": "^7.12.0",
|
||||||
@@ -20988,11 +19392,11 @@
|
|||||||
"memoize-one": "^6.0.0",
|
"memoize-one": "^6.0.0",
|
||||||
"prop-types": "^15.6.0",
|
"prop-types": "^15.6.0",
|
||||||
"react-transition-group": "^4.3.0",
|
"react-transition-group": "^4.3.0",
|
||||||
"use-isomorphic-layout-effect": "^1.1.2"
|
"use-isomorphic-layout-effect": "^1.2.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"react": "^16.8.0 || ^17.0.0 || ^18.0.0",
|
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
|
||||||
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/react-shallow-renderer": {
|
"node_modules/react-shallow-renderer": {
|
||||||
@@ -21076,9 +19480,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/react-textarea-autosize": {
|
"node_modules/react-textarea-autosize": {
|
||||||
"version": "8.5.8",
|
"version": "8.5.9",
|
||||||
"resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.8.tgz",
|
"resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.9.tgz",
|
||||||
"integrity": "sha512-iUiIj70JefrTuSJ4LbVFiSqWiHHss5L63L717bqaWHMgkm9sz6eEvro4vZ3uQfGJbevzwT6rHOszHKA8RkhRMg==",
|
"integrity": "sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.20.13",
|
"@babel/runtime": "^7.20.13",
|
||||||
@@ -21108,6 +19512,24 @@
|
|||||||
"react-dom": ">=16.6.0"
|
"react-dom": ">=16.6.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/read-cache": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"pify": "^2.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/read-cache/node_modules/pify": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/read-pkg": {
|
"node_modules/read-pkg": {
|
||||||
"version": "6.0.0",
|
"version": "6.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz",
|
||||||
@@ -21297,14 +19719,22 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/redux": {
|
"node_modules/reduce-function-call": {
|
||||||
"version": "4.0.5",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz",
|
||||||
"integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==",
|
"integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"loose-envify": "^1.4.0",
|
"balanced-match": "^1.0.0"
|
||||||
"symbol-observable": "^1.2.0"
|
}
|
||||||
|
},
|
||||||
|
"node_modules/redux": {
|
||||||
|
"version": "4.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
|
||||||
|
"integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/runtime": "^7.9.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/redux-logger": {
|
"node_modules/redux-logger": {
|
||||||
@@ -21909,9 +20339,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/schema-utils": {
|
"node_modules/schema-utils": {
|
||||||
"version": "4.3.0",
|
"version": "4.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz",
|
||||||
"integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==",
|
"integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/json-schema": "^7.0.9",
|
"@types/json-schema": "^7.0.9",
|
||||||
@@ -22239,9 +20669,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/sharp/node_modules/detect-libc": {
|
"node_modules/sharp/node_modules/detect-libc": {
|
||||||
"version": "2.0.3",
|
"version": "2.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
|
||||||
"integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
|
"integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
@@ -22469,7 +20899,6 @@
|
|||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
|
||||||
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
|
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ansi-styles": "^4.0.0",
|
"ansi-styles": "^4.0.0",
|
||||||
@@ -22716,16 +21145,6 @@
|
|||||||
"integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==",
|
"integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/start": {
|
|
||||||
"version": "5.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/start/-/start-5.1.0.tgz",
|
|
||||||
"integrity": "sha512-lirwWQmvBC65bnxU3HzKx5m7vfZJZTx/FrKyPWbtobcvujGbinQQRrNodtcgkp4mTZ00umzDeg7lraN351l0aA==",
|
|
||||||
"deprecated": "Deprecated in favor of https://github.com/deepsweet/start",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/statuses": {
|
"node_modules/statuses": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
|
||||||
@@ -22735,6 +21154,15 @@
|
|||||||
"node": ">= 0.8"
|
"node": ">= 0.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/stream": {
|
||||||
|
"version": "0.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/stream/-/stream-0.0.3.tgz",
|
||||||
|
"integrity": "sha512-aMsbn7VKrl4A2T7QAQQbzgN7NVc70vgF5INQrBXqn4dCXN1zy3L9HGgLO5s7PExmdrzTJ8uR/27aviW8or8/+A==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"component-emitter": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/streamx": {
|
"node_modules/streamx": {
|
||||||
"version": "2.22.0",
|
"version": "2.22.0",
|
||||||
"resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz",
|
"resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz",
|
||||||
@@ -22799,6 +21227,27 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/string-width-cjs": {
|
||||||
|
"name": "string-width",
|
||||||
|
"version": "4.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
||||||
|
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"emoji-regex": "^8.0.0",
|
||||||
|
"is-fullwidth-code-point": "^3.0.0",
|
||||||
|
"strip-ansi": "^6.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/string-width-cjs/node_modules/emoji-regex": {
|
||||||
|
"version": "8.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||||
|
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/string-width/node_modules/emoji-regex": {
|
"node_modules/string-width/node_modules/emoji-regex": {
|
||||||
"version": "8.0.0",
|
"version": "8.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||||
@@ -22900,6 +21349,19 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/strip-ansi-cjs": {
|
||||||
|
"name": "strip-ansi",
|
||||||
|
"version": "6.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
||||||
|
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-regex": "^5.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/strip-bom": {
|
"node_modules/strip-bom": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
|
||||||
@@ -22955,6 +21417,55 @@
|
|||||||
],
|
],
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/style-dictionary": {
|
||||||
|
"version": "4.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/style-dictionary/-/style-dictionary-4.4.0.tgz",
|
||||||
|
"integrity": "sha512-+xU0IA1StzqAqFs/QtXkK+XJa7wpS4X5H+JQccRKsRCElgeLGocFU1U/UMvMUylKFw6vwGV+Y/a2wb2pm5rFFQ==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"@bundled-es-modules/deepmerge": "^4.3.1",
|
||||||
|
"@bundled-es-modules/glob": "^10.4.2",
|
||||||
|
"@bundled-es-modules/memfs": "^4.9.4",
|
||||||
|
"@zip.js/zip.js": "^2.7.44",
|
||||||
|
"chalk": "^5.3.0",
|
||||||
|
"change-case": "^5.3.0",
|
||||||
|
"commander": "^12.1.0",
|
||||||
|
"is-plain-obj": "^4.1.0",
|
||||||
|
"json5": "^2.2.2",
|
||||||
|
"patch-package": "^8.0.0",
|
||||||
|
"path-unified": "^0.2.0",
|
||||||
|
"prettier": "^3.3.3",
|
||||||
|
"tinycolor2": "^1.6.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"style-dictionary": "bin/style-dictionary.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/style-dictionary/node_modules/chalk": {
|
||||||
|
"version": "5.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz",
|
||||||
|
"integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": "^12.17.0 || ^14.13 || >=16.0.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/style-dictionary/node_modules/commander": {
|
||||||
|
"version": "12.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
|
||||||
|
"integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/style-loader": {
|
"node_modules/style-loader": {
|
||||||
"version": "3.3.4",
|
"version": "3.3.4",
|
||||||
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz",
|
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz",
|
||||||
@@ -23192,6 +21703,15 @@
|
|||||||
"node": ">=14.18.0"
|
"node": ">=14.18.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/superagent/node_modules/component-emitter": {
|
||||||
|
"version": "1.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
|
||||||
|
"integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/superagent/node_modules/mime": {
|
"node_modules/superagent/node_modules/mime": {
|
||||||
"version": "2.6.0",
|
"version": "2.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
|
||||||
@@ -23350,15 +21870,6 @@
|
|||||||
"url": "https://github.com/fb55/domutils?sponsor=1"
|
"url": "https://github.com/fb55/domutils?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/symbol-observable": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
|
|
||||||
"integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==",
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/symbol-tree": {
|
"node_modules/symbol-tree": {
|
||||||
"version": "3.2.4",
|
"version": "3.2.4",
|
||||||
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
|
||||||
@@ -23423,9 +21934,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/tar-fs": {
|
"node_modules/tar-fs": {
|
||||||
"version": "3.0.8",
|
"version": "3.0.9",
|
||||||
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz",
|
||||||
"integrity": "sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==",
|
"integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"pump": "^3.0.0",
|
"pump": "^3.0.0",
|
||||||
@@ -23582,6 +22093,18 @@
|
|||||||
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
|
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/thingies": {
|
||||||
|
"version": "1.21.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz",
|
||||||
|
"integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==",
|
||||||
|
"license": "Unlicense",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.18"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"tslib": "^2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/through": {
|
"node_modules/through": {
|
||||||
"version": "2.3.8",
|
"version": "2.3.8",
|
||||||
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
||||||
@@ -23606,13 +22129,19 @@
|
|||||||
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==",
|
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/tinycolor2": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz",
|
||||||
|
"integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/tinyglobby": {
|
"node_modules/tinyglobby": {
|
||||||
"version": "0.2.12",
|
"version": "0.2.13",
|
||||||
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz",
|
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
|
||||||
"integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
|
"integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fdir": "^6.4.3",
|
"fdir": "^6.4.4",
|
||||||
"picomatch": "^4.0.2"
|
"picomatch": "^4.0.2"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@@ -23623,9 +22152,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/tinyglobby/node_modules/fdir": {
|
"node_modules/tinyglobby/node_modules/fdir": {
|
||||||
"version": "6.4.3",
|
"version": "6.4.4",
|
||||||
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
|
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
|
||||||
"integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
|
"integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"picomatch": "^3 || ^4"
|
"picomatch": "^3 || ^4"
|
||||||
@@ -23742,6 +22271,22 @@
|
|||||||
"punycode": "^2.1.0"
|
"punycode": "^2.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/tree-dump": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/streamich"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"tslib": "2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/trim-newlines": {
|
"node_modules/trim-newlines": {
|
||||||
"version": "4.1.1",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz",
|
||||||
@@ -23768,9 +22313,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ts-jest": {
|
"node_modules/ts-jest": {
|
||||||
"version": "29.3.0",
|
"version": "29.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.2.tgz",
|
||||||
"integrity": "sha512-4bfGBX7Gd1Aqz3SyeDS9O276wEU/BInZxskPrbhZLyv+c1wskDCqDFMJQJLWrIr/fKoAH4GE5dKUlrdyvo+39A==",
|
"integrity": "sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bs-logger": "^0.2.6",
|
"bs-logger": "^0.2.6",
|
||||||
@@ -23781,7 +22326,7 @@
|
|||||||
"lodash.memoize": "^4.1.2",
|
"lodash.memoize": "^4.1.2",
|
||||||
"make-error": "^1.3.6",
|
"make-error": "^1.3.6",
|
||||||
"semver": "^7.7.1",
|
"semver": "^7.7.1",
|
||||||
"type-fest": "^4.37.0",
|
"type-fest": "^4.39.1",
|
||||||
"yargs-parser": "^21.1.1"
|
"yargs-parser": "^21.1.1"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -23829,9 +22374,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ts-jest/node_modules/type-fest": {
|
"node_modules/ts-jest/node_modules/type-fest": {
|
||||||
"version": "4.38.0",
|
"version": "4.40.1",
|
||||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.38.0.tgz",
|
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.40.1.tgz",
|
||||||
"integrity": "sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==",
|
"integrity": "sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA==",
|
||||||
"license": "(MIT OR CC0-1.0)",
|
"license": "(MIT OR CC0-1.0)",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=16"
|
"node": ">=16"
|
||||||
@@ -24148,9 +22693,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/undici-types": {
|
"node_modules/undici-types": {
|
||||||
"version": "6.20.0",
|
"version": "6.21.0",
|
||||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
|
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
|
||||||
"integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
|
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/unicode-canonical-property-names-ecmascript": {
|
"node_modules/unicode-canonical-property-names-ecmascript": {
|
||||||
@@ -24163,20 +22708,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/unicode-emoji-utils": {
|
"node_modules/unicode-emoji-utils": {
|
||||||
"version": "1.2.0",
|
"version": "1.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/unicode-emoji-utils/-/unicode-emoji-utils-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/unicode-emoji-utils/-/unicode-emoji-utils-1.3.1.tgz",
|
||||||
"integrity": "sha512-djUB91p/6oYpgps4W5K/MAvM+UspoAANHSUW495BrxeLRoned3iNPEDQgrKx9LbLq93VhNz0NWvI61vcfrwYoA==",
|
"integrity": "sha512-6PiQxmnlsOsqzZCZz0sykSyMy/r1HiJiOWWXV98+BDva583DU4CtBeyDNsi4wMYUIbjUtMs4RgAuyft0EKLoVw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"emoji-regex": "10.3.0"
|
"emoji-regex-xs": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/unicode-emoji-utils/node_modules/emoji-regex": {
|
|
||||||
"version": "10.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
|
|
||||||
"integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
|
|
||||||
"license": "MIT"
|
|
||||||
},
|
|
||||||
"node_modules/unicode-match-property-ecmascript": {
|
"node_modules/unicode-match-property-ecmascript": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
|
||||||
@@ -24246,29 +22785,35 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/unrs-resolver": {
|
"node_modules/unrs-resolver": {
|
||||||
"version": "1.3.2",
|
"version": "1.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.7.2.tgz",
|
||||||
"integrity": "sha512-ZKQBC351Ubw0PY8xWhneIfb6dygTQeUHtCcNGd0QB618zabD/WbFMYdRyJ7xeVT+6G82K5v/oyZO0QSHFtbIuw==",
|
"integrity": "sha512-BBKpaylOW8KbHsu378Zky/dGh4ckT/4NW/0SHRABdqRLcQJ2dAOjDo9g97p04sWflm0kqPqpUatxReNV/dqI5A==",
|
||||||
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"napi-postinstall": "^0.2.2"
|
||||||
|
},
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/sponsors/JounQin"
|
"url": "https://github.com/sponsors/JounQin"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@unrs/resolver-binding-darwin-arm64": "1.3.2",
|
"@unrs/resolver-binding-darwin-arm64": "1.7.2",
|
||||||
"@unrs/resolver-binding-darwin-x64": "1.3.2",
|
"@unrs/resolver-binding-darwin-x64": "1.7.2",
|
||||||
"@unrs/resolver-binding-freebsd-x64": "1.3.2",
|
"@unrs/resolver-binding-freebsd-x64": "1.7.2",
|
||||||
"@unrs/resolver-binding-linux-arm-gnueabihf": "1.3.2",
|
"@unrs/resolver-binding-linux-arm-gnueabihf": "1.7.2",
|
||||||
"@unrs/resolver-binding-linux-arm-musleabihf": "1.3.2",
|
"@unrs/resolver-binding-linux-arm-musleabihf": "1.7.2",
|
||||||
"@unrs/resolver-binding-linux-arm64-gnu": "1.3.2",
|
"@unrs/resolver-binding-linux-arm64-gnu": "1.7.2",
|
||||||
"@unrs/resolver-binding-linux-arm64-musl": "1.3.2",
|
"@unrs/resolver-binding-linux-arm64-musl": "1.7.2",
|
||||||
"@unrs/resolver-binding-linux-ppc64-gnu": "1.3.2",
|
"@unrs/resolver-binding-linux-ppc64-gnu": "1.7.2",
|
||||||
"@unrs/resolver-binding-linux-s390x-gnu": "1.3.2",
|
"@unrs/resolver-binding-linux-riscv64-gnu": "1.7.2",
|
||||||
"@unrs/resolver-binding-linux-x64-gnu": "1.3.2",
|
"@unrs/resolver-binding-linux-riscv64-musl": "1.7.2",
|
||||||
"@unrs/resolver-binding-linux-x64-musl": "1.3.2",
|
"@unrs/resolver-binding-linux-s390x-gnu": "1.7.2",
|
||||||
"@unrs/resolver-binding-wasm32-wasi": "1.3.2",
|
"@unrs/resolver-binding-linux-x64-gnu": "1.7.2",
|
||||||
"@unrs/resolver-binding-win32-arm64-msvc": "1.3.2",
|
"@unrs/resolver-binding-linux-x64-musl": "1.7.2",
|
||||||
"@unrs/resolver-binding-win32-ia32-msvc": "1.3.2",
|
"@unrs/resolver-binding-wasm32-wasi": "1.7.2",
|
||||||
"@unrs/resolver-binding-win32-x64-msvc": "1.3.2"
|
"@unrs/resolver-binding-win32-arm64-msvc": "1.7.2",
|
||||||
|
"@unrs/resolver-binding-win32-ia32-msvc": "1.7.2",
|
||||||
|
"@unrs/resolver-binding-win32-x64-msvc": "1.7.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/update-browserslist-db": {
|
"node_modules/update-browserslist-db": {
|
||||||
@@ -24310,6 +22855,19 @@
|
|||||||
"punycode": "^2.1.0"
|
"punycode": "^2.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/url": {
|
||||||
|
"version": "0.11.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz",
|
||||||
|
"integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"punycode": "^1.4.1",
|
||||||
|
"qs": "^6.12.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/url-loader": {
|
"node_modules/url-loader": {
|
||||||
"version": "4.1.1",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz",
|
||||||
@@ -24365,6 +22923,12 @@
|
|||||||
"requires-port": "^1.0.0"
|
"requires-port": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/url/node_modules/punycode": {
|
||||||
|
"version": "1.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
|
||||||
|
"integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/use-callback-ref": {
|
"node_modules/use-callback-ref": {
|
||||||
"version": "1.3.3",
|
"version": "1.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
|
||||||
@@ -24454,14 +23018,27 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/use-sync-external-store": {
|
"node_modules/use-sync-external-store": {
|
||||||
"version": "1.4.0",
|
"version": "1.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz",
|
||||||
"integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==",
|
"integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
|
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/util": {
|
||||||
|
"version": "0.12.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
|
||||||
|
"integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"inherits": "^2.0.3",
|
||||||
|
"is-arguments": "^1.0.4",
|
||||||
|
"is-generator-function": "^1.0.7",
|
||||||
|
"is-typed-array": "^1.1.3",
|
||||||
|
"which-typed-array": "^1.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/util-deprecate": {
|
"node_modules/util-deprecate": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||||
@@ -24484,13 +23061,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/uuid": {
|
"node_modules/uuid": {
|
||||||
"version": "3.4.0",
|
"version": "11.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
|
||||||
"integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
|
"integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
|
||||||
"deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
|
"funding": [
|
||||||
|
"https://github.com/sponsors/broofa",
|
||||||
|
"https://github.com/sponsors/ctavan"
|
||||||
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
"uuid": "bin/uuid"
|
"uuid": "dist/esm/bin/uuid"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/v8-to-istanbul": {
|
"node_modules/v8-to-istanbul": {
|
||||||
@@ -24610,13 +23190,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/webpack": {
|
"node_modules/webpack": {
|
||||||
"version": "5.98.0",
|
"version": "5.99.7",
|
||||||
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz",
|
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.7.tgz",
|
||||||
"integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==",
|
"integrity": "sha512-CNqKBRMQjwcmKR0idID5va1qlhrqVUKpovi+Ec79ksW8ux7iS1+A6VqzfZXgVYCFRKl7XL5ap3ZoMpwBJxcg0w==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/eslint-scope": "^3.7.7",
|
"@types/eslint-scope": "^3.7.7",
|
||||||
"@types/estree": "^1.0.6",
|
"@types/estree": "^1.0.6",
|
||||||
|
"@types/json-schema": "^7.0.15",
|
||||||
"@webassemblyjs/ast": "^1.14.1",
|
"@webassemblyjs/ast": "^1.14.1",
|
||||||
"@webassemblyjs/wasm-edit": "^1.14.1",
|
"@webassemblyjs/wasm-edit": "^1.14.1",
|
||||||
"@webassemblyjs/wasm-parser": "^1.14.1",
|
"@webassemblyjs/wasm-parser": "^1.14.1",
|
||||||
@@ -24633,7 +23214,7 @@
|
|||||||
"loader-runner": "^4.2.0",
|
"loader-runner": "^4.2.0",
|
||||||
"mime-types": "^2.1.27",
|
"mime-types": "^2.1.27",
|
||||||
"neo-async": "^2.6.2",
|
"neo-async": "^2.6.2",
|
||||||
"schema-utils": "^4.3.0",
|
"schema-utils": "^4.3.2",
|
||||||
"tapable": "^2.1.1",
|
"tapable": "^2.1.1",
|
||||||
"terser-webpack-plugin": "^5.3.11",
|
"terser-webpack-plugin": "^5.3.11",
|
||||||
"watchpack": "^2.4.1",
|
"watchpack": "^2.4.1",
|
||||||
@@ -25168,6 +23749,24 @@
|
|||||||
"node": ">=8"
|
"node": ">=8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/wrap-ansi-cjs": {
|
||||||
|
"name": "wrap-ansi",
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": "^4.0.0",
|
||||||
|
"string-width": "^4.1.0",
|
||||||
|
"strip-ansi": "^6.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/wrappy": {
|
"node_modules/wrappy": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
@@ -25232,6 +23831,15 @@
|
|||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/xregexp": {
|
||||||
|
"version": "5.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/xregexp/-/xregexp-5.1.2.tgz",
|
||||||
|
"integrity": "sha512-6hGgEMCGhqCTFEJbqmWrNIPqfpdirdGWkqshu7fFZddmTSfgv5Sn9D2SaKloR79s5VUiUlpwzg3CM3G6D3VIlw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/runtime-corejs3": "^7.26.9"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/y18n": {
|
"node_modules/y18n": {
|
||||||
"version": "5.0.8",
|
"version": "5.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
||||||
@@ -25248,12 +23856,15 @@
|
|||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
"node_modules/yaml": {
|
"node_modules/yaml": {
|
||||||
"version": "1.10.2",
|
"version": "2.7.1",
|
||||||
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
|
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz",
|
||||||
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
|
"integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
|
"bin": {
|
||||||
|
"yaml": "bin.mjs"
|
||||||
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 6"
|
"node": ">= 14"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/yargs": {
|
"node_modules/yargs": {
|
||||||
@@ -25296,14 +23907,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/yup": {
|
"node_modules/yup": {
|
||||||
"version": "0.31.1",
|
"version": "0.32.11",
|
||||||
"resolved": "https://registry.npmjs.org/yup/-/yup-0.31.1.tgz",
|
"resolved": "https://registry.npmjs.org/yup/-/yup-0.32.11.tgz",
|
||||||
"integrity": "sha512-Lf6648jDYOWR75IlWkVfwesPyW6oj+50NpxlKvsQlpPsB8eI+ndI7b4S1VrwbmeV9hIZDu1MzrlIL4W+gK1jPw==",
|
"integrity": "sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime": "^7.10.5",
|
"@babel/runtime": "^7.15.4",
|
||||||
"lodash": "^4.17.20",
|
"@types/lodash": "^4.14.175",
|
||||||
"lodash-es": "^4.17.11",
|
"lodash": "^4.17.21",
|
||||||
|
"lodash-es": "^4.17.21",
|
||||||
|
"nanoclone": "^0.2.1",
|
||||||
"property-expr": "^2.0.4",
|
"property-expr": "^2.0.4",
|
||||||
"toposort": "^2.0.2"
|
"toposort": "^2.0.2"
|
||||||
},
|
},
|
||||||
|
|||||||
44
package.json
44
package.json
@@ -11,11 +11,10 @@
|
|||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "fedx-scripts webpack",
|
"build": "fedx-scripts webpack",
|
||||||
"i18n_extract": "fedx-scripts formatjs extract",
|
"i18n_extract": "fedx-scripts formatjs extract --include=plugins",
|
||||||
"stylelint": "stylelint \"plugins/**/*.scss\" \"src/**/*.scss\" \"scss/**/*.scss\" --config .stylelintrc.json",
|
"stylelint": "stylelint \"plugins/**/*.scss\" \"src/**/*.scss\" \"scss/**/*.scss\" --config .stylelintrc.json",
|
||||||
"lint": "npm run stylelint && fedx-scripts eslint --ext .js --ext .jsx --ext .ts --ext .tsx .",
|
"lint": "npm run stylelint && fedx-scripts eslint --ext .js --ext .jsx --ext .ts --ext .tsx .",
|
||||||
"lint:fix": "npm run stylelint -- --fix && fedx-scripts eslint --fix --ext .js --ext .jsx --ext .ts --ext .tsx .",
|
"lint:fix": "npm run stylelint -- --fix && fedx-scripts eslint --fix --ext .js --ext .jsx --ext .ts --ext .tsx .",
|
||||||
"snapshot": "TZ=UTC fedx-scripts jest --updateSnapshot",
|
|
||||||
"start": "fedx-scripts webpack-dev-server --progress",
|
"start": "fedx-scripts webpack-dev-server --progress",
|
||||||
"start:with-theme": "paragon install-theme && npm start && npm install",
|
"start:with-theme": "paragon install-theme && npm start && npm install",
|
||||||
"dev": "PUBLIC_PATH=/authoring/ MFE_CONFIG_API_URL='http://localhost:8000/api/mfe_config/v1' fedx-scripts webpack-dev-server --progress --host apps.local.openedx.io",
|
"dev": "PUBLIC_PATH=/authoring/ MFE_CONFIG_API_URL='http://localhost:8000/api/mfe_config/v1' fedx-scripts webpack-dev-server --progress --host apps.local.openedx.io",
|
||||||
@@ -34,6 +33,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/lang-html": "^6.0.0",
|
"@codemirror/lang-html": "^6.0.0",
|
||||||
|
"@codemirror/lang-markdown": "^6.0.0",
|
||||||
"@codemirror/lang-xml": "^6.0.0",
|
"@codemirror/lang-xml": "^6.0.0",
|
||||||
"@codemirror/lint": "^6.2.1",
|
"@codemirror/lint": "^6.2.1",
|
||||||
"@codemirror/state": "^6.0.0",
|
"@codemirror/state": "^6.0.0",
|
||||||
@@ -43,12 +43,12 @@
|
|||||||
"@dnd-kit/sortable": "^8.0.0",
|
"@dnd-kit/sortable": "^8.0.0",
|
||||||
"@dnd-kit/utilities": "^3.2.2",
|
"@dnd-kit/utilities": "^3.2.2",
|
||||||
"@edx/brand": "npm:@openedx/brand-openedx@^1.2.3",
|
"@edx/brand": "npm:@openedx/brand-openedx@^1.2.3",
|
||||||
"@edx/browserslist-config": "1.2.0",
|
"@edx/browserslist-config": "1.5.0",
|
||||||
"@edx/frontend-component-footer": "^14.3.0",
|
"@edx/frontend-component-footer": "^14.9.0",
|
||||||
"@edx/frontend-component-header": "^6.2.0",
|
"@edx/frontend-component-header": "^6.2.0",
|
||||||
"@edx/frontend-enterprise-hotjar": "^7.2.0",
|
"@edx/frontend-enterprise-hotjar": "^7.2.0",
|
||||||
"@edx/frontend-platform": "^8.3.1",
|
"@edx/frontend-platform": "^8.4.0",
|
||||||
"@edx/openedx-atlas": "^0.6.0",
|
"@edx/openedx-atlas": "^0.7.0",
|
||||||
"@openedx-plugins/course-app-calculator": "file:plugins/course-apps/calculator",
|
"@openedx-plugins/course-app-calculator": "file:plugins/course-apps/calculator",
|
||||||
"@openedx-plugins/course-app-edxnotes": "file:plugins/course-apps/edxnotes",
|
"@openedx-plugins/course-app-edxnotes": "file:plugins/course-apps/edxnotes",
|
||||||
"@openedx-plugins/course-app-learning_assistant": "file:plugins/course-apps/learning_assistant",
|
"@openedx-plugins/course-app-learning_assistant": "file:plugins/course-apps/learning_assistant",
|
||||||
@@ -59,13 +59,12 @@
|
|||||||
"@openedx-plugins/course-app-teams": "file:plugins/course-apps/teams",
|
"@openedx-plugins/course-app-teams": "file:plugins/course-apps/teams",
|
||||||
"@openedx-plugins/course-app-wiki": "file:plugins/course-apps/wiki",
|
"@openedx-plugins/course-app-wiki": "file:plugins/course-apps/wiki",
|
||||||
"@openedx-plugins/course-app-xpert_unit_summary": "file:plugins/course-apps/xpert_unit_summary",
|
"@openedx-plugins/course-app-xpert_unit_summary": "file:plugins/course-apps/xpert_unit_summary",
|
||||||
"@openedx/frontend-build": "^14.3.3",
|
"@openedx/frontend-build": "^14.5.0",
|
||||||
"@openedx/frontend-plugin-framework": "^1.6.0",
|
"@openedx/frontend-plugin-framework": "^1.7.0",
|
||||||
"@openedx/frontend-slot-footer": "^1.2.0",
|
"@openedx/paragon": "^23.5.0",
|
||||||
"@openedx/paragon": "^22.16.0",
|
|
||||||
"@redux-devtools/extension": "^3.3.0",
|
"@redux-devtools/extension": "^3.3.0",
|
||||||
"@reduxjs/toolkit": "1.9.7",
|
"@reduxjs/toolkit": "1.9.7",
|
||||||
"@tanstack/react-query": "4.36.1",
|
"@tanstack/react-query": "4.40.1",
|
||||||
"@tinymce/tinymce-react": "^3.14.0",
|
"@tinymce/tinymce-react": "^3.14.0",
|
||||||
"classnames": "2.5.1",
|
"classnames": "2.5.1",
|
||||||
"codemirror": "^6.0.0",
|
"codemirror": "^6.0.0",
|
||||||
@@ -79,7 +78,6 @@
|
|||||||
"meilisearch": "^0.41.0",
|
"meilisearch": "^0.41.0",
|
||||||
"moment": "2.30.1",
|
"moment": "2.30.1",
|
||||||
"moment-shortformat": "^2.1.0",
|
"moment-shortformat": "^2.1.0",
|
||||||
"npm": "^10.8.1",
|
|
||||||
"prop-types": "^15.8.1",
|
"prop-types": "^15.8.1",
|
||||||
"react": "^18.3.1",
|
"react": "^18.3.1",
|
||||||
"react-datepicker": "^4.13.0",
|
"react-datepicker": "^4.13.0",
|
||||||
@@ -89,31 +87,31 @@
|
|||||||
"react-onclickoutside": "^6.13.0",
|
"react-onclickoutside": "^6.13.0",
|
||||||
"react-redux": "7.2.9",
|
"react-redux": "7.2.9",
|
||||||
"react-responsive": "9.0.2",
|
"react-responsive": "9.0.2",
|
||||||
"react-router": "6.27.0",
|
"react-router": "6.30.1",
|
||||||
"react-router-dom": "6.27.0",
|
"react-router-dom": "6.30.1",
|
||||||
"react-select": "5.8.0",
|
"react-select": "5.10.2",
|
||||||
"react-textarea-autosize": "^8.5.3",
|
"react-textarea-autosize": "^8.5.3",
|
||||||
"react-transition-group": "4.4.5",
|
"react-transition-group": "4.4.5",
|
||||||
"redux": "4.0.5",
|
"redux": "4.2.1",
|
||||||
"redux-logger": "^3.0.6",
|
"redux-logger": "^3.0.6",
|
||||||
"redux-thunk": "^2.4.1",
|
"redux-thunk": "^2.4.1",
|
||||||
"reselect": "^4.1.5",
|
"reselect": "^4.1.5",
|
||||||
"start": "^5.1.0",
|
|
||||||
"tinymce": "^5.10.4",
|
"tinymce": "^5.10.4",
|
||||||
"universal-cookie": "^4.0.4",
|
"universal-cookie": "^4.0.4",
|
||||||
"uuid": "^3.4.0",
|
"uuid": "^11.1.0",
|
||||||
"xmlchecker": "^0.1.0",
|
"xmlchecker": "^0.1.0",
|
||||||
"yup": "0.31.1"
|
"yup": "0.32.11"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@edx/react-unit-test-utils": "^4.0.0",
|
|
||||||
"@edx/stylelint-config-edx": "2.3.3",
|
"@edx/stylelint-config-edx": "2.3.3",
|
||||||
"@edx/typescript-config": "^1.0.1",
|
"@edx/typescript-config": "^1.0.1",
|
||||||
"@testing-library/jest-dom": "^6.6.3",
|
"@testing-library/jest-dom": "^6.6.3",
|
||||||
"@testing-library/react": "^16.2.0",
|
"@testing-library/react": "^16.2.0",
|
||||||
"@testing-library/user-event": "^13.2.1",
|
"@testing-library/user-event": "^14.6.1",
|
||||||
"@types/lodash": "^4.17.7",
|
"@types/lodash": "^4.17.17",
|
||||||
"axios-mock-adapter": "1.22.0",
|
"@types/react": "^18",
|
||||||
|
"@types/react-dom": "^18",
|
||||||
|
"axios-mock-adapter": "2.1.0",
|
||||||
"eslint-import-resolver-webpack": "^0.13.8",
|
"eslint-import-resolver-webpack": "^0.13.8",
|
||||||
"fetch-mock-jest": "^1.5.1",
|
"fetch-mock-jest": "^1.5.1",
|
||||||
"jest-canvas-mock": "^2.5.2",
|
"jest-canvas-mock": "^2.5.2",
|
||||||
|
|||||||
@@ -2,16 +2,12 @@ import React from 'react';
|
|||||||
import { screen, waitFor } from '@testing-library/react';
|
import { screen, waitFor } from '@testing-library/react';
|
||||||
|
|
||||||
import { RequestStatus } from 'CourseAuthoring/data/constants';
|
import { RequestStatus } from 'CourseAuthoring/data/constants';
|
||||||
import { render } from 'CourseAuthoring/pages-and-resources/utils.test';
|
import { initializeMocks, render } from 'CourseAuthoring/testUtils';
|
||||||
import LearningAssistantSettings from './Settings';
|
import LearningAssistantSettings from './Settings';
|
||||||
|
|
||||||
const onClose = () => { };
|
const onClose = () => { };
|
||||||
|
|
||||||
describe('Learning Assistant Settings', () => {
|
describe('Learning Assistant Settings', () => {
|
||||||
beforeEach(() => {
|
|
||||||
jest.clearAllMocks();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('renders', async () => {
|
it('renders', async () => {
|
||||||
const initialState = {
|
const initialState = {
|
||||||
models: {
|
models: {
|
||||||
@@ -38,14 +34,8 @@ describe('Learning Assistant Settings', () => {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
render(
|
initializeMocks({ initialState });
|
||||||
<LearningAssistantSettings
|
render(<LearningAssistantSettings onClose={onClose} />);
|
||||||
onClose={onClose}
|
|
||||||
/>,
|
|
||||||
{
|
|
||||||
preloadedState: initialState,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
const toggleDescription = 'Reinforce learning concepts by sharing text-based course content '
|
const toggleDescription = 'Reinforce learning concepts by sharing text-based course content '
|
||||||
+ 'with OpenAI (via API) to power an in-course Learning Assistant. Learners can leave feedback about the quality '
|
+ 'with OpenAI (via API) to power an in-course Learning Assistant. Learners can leave feedback about the quality '
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import { getConfig } from '@edx/frontend-platform';
|
import { getConfig } from '@edx/frontend-platform';
|
||||||
import { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
import { FormattedMessage, useIntl } from '@edx/frontend-platform/i18n';
|
||||||
import { Form, Hyperlink } from '@openedx/paragon';
|
import { Form, Hyperlink } from '@openedx/paragon';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import AppConfigFormDivider from 'CourseAuthoring/pages-and-resources/discussions/app-config-form/apps/shared/AppConfigFormDivider';
|
import AppConfigFormDivider from 'CourseAuthoring/pages-and-resources/discussions/app-config-form/apps/shared/AppConfigFormDivider';
|
||||||
@@ -11,10 +11,10 @@ import LiveCommonFields from './LiveCommonFields';
|
|||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
|
|
||||||
const BbbSettings = ({
|
const BbbSettings = ({
|
||||||
intl,
|
|
||||||
values,
|
values,
|
||||||
setFieldValue,
|
setFieldValue,
|
||||||
}) => {
|
}) => {
|
||||||
|
const intl = useIntl();
|
||||||
const [bbbPlan, setBbbPlan] = useState(values.tierType);
|
const [bbbPlan, setBbbPlan] = useState(values.tierType);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -107,12 +107,10 @@ const BbbSettings = ({
|
|||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
</>
|
</>
|
||||||
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
BbbSettings.propTypes = {
|
BbbSettings.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
values: PropTypes.shape({
|
values: PropTypes.shape({
|
||||||
consumerKey: PropTypes.string,
|
consumerKey: PropTypes.string,
|
||||||
consumerSecret: PropTypes.string,
|
consumerSecret: PropTypes.string,
|
||||||
@@ -127,4 +125,4 @@ BbbSettings.propTypes = {
|
|||||||
setFieldValue: PropTypes.func.isRequired,
|
setFieldValue: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(BbbSettings);
|
export default BbbSettings;
|
||||||
|
|||||||
@@ -124,12 +124,13 @@ describe('BBB Settings', () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
test('free plans message is visible when free plan is selected', async () => {
|
test('free plans message is visible when free plan is selected', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
await mockStore({ emailSharing: true, isFreeTier: true });
|
await mockStore({ emailSharing: true, isFreeTier: true });
|
||||||
renderComponent();
|
renderComponent();
|
||||||
const spinner = getByRole(container, 'status');
|
const spinner = getByRole(container, 'status');
|
||||||
await waitForElementToBeRemoved(spinner);
|
await waitForElementToBeRemoved(spinner);
|
||||||
const dropDown = container.querySelector('select[name="tierType"]');
|
const dropDown = container.querySelector('select[name="tierType"]');
|
||||||
userEvent.selectOptions(
|
await user.selectOptions(
|
||||||
dropDown,
|
dropDown,
|
||||||
getByRole(dropDown, 'option', { name: 'Free' }),
|
getByRole(dropDown, 'option', { name: 'Free' }),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,42 +1,43 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import FormikControl from 'CourseAuthoring/generic/FormikControl';
|
import FormikControl from 'CourseAuthoring/generic/FormikControl';
|
||||||
|
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
|
|
||||||
const LiveCommonFields = ({
|
const LiveCommonFields = ({
|
||||||
intl,
|
|
||||||
values,
|
values,
|
||||||
}) => (
|
}) => {
|
||||||
<>
|
const intl = useIntl();
|
||||||
<p className="pb-2">{intl.formatMessage(messages.formInstructions)}</p>
|
return (
|
||||||
<FormikControl
|
<>
|
||||||
name="consumerKey"
|
<p className="pb-2">{intl.formatMessage(messages.formInstructions)}</p>
|
||||||
value={values.consumerKey}
|
<FormikControl
|
||||||
floatingLabel={intl.formatMessage(messages.consumerKey)}
|
name="consumerKey"
|
||||||
className="pb-1"
|
value={values.consumerKey}
|
||||||
type="input"
|
floatingLabel={intl.formatMessage(messages.consumerKey)}
|
||||||
/>
|
className="pb-1"
|
||||||
<FormikControl
|
type="input"
|
||||||
name="consumerSecret"
|
/>
|
||||||
value={values.consumerSecret}
|
<FormikControl
|
||||||
floatingLabel={intl.formatMessage(messages.consumerSecret)}
|
name="consumerSecret"
|
||||||
className="pb-1"
|
value={values.consumerSecret}
|
||||||
type="password"
|
floatingLabel={intl.formatMessage(messages.consumerSecret)}
|
||||||
/>
|
className="pb-1"
|
||||||
<FormikControl
|
type="password"
|
||||||
name="launchUrl"
|
/>
|
||||||
value={values.launchUrl}
|
<FormikControl
|
||||||
floatingLabel={intl.formatMessage(messages.launchUrl)}
|
name="launchUrl"
|
||||||
className="pb-1"
|
value={values.launchUrl}
|
||||||
type="input"
|
floatingLabel={intl.formatMessage(messages.launchUrl)}
|
||||||
/>
|
className="pb-1"
|
||||||
</>
|
type="input"
|
||||||
);
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
LiveCommonFields.propTypes = {
|
LiveCommonFields.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
values: PropTypes.shape({
|
values: PropTypes.shape({
|
||||||
consumerKey: PropTypes.string,
|
consumerKey: PropTypes.string,
|
||||||
consumerSecret: PropTypes.string,
|
consumerSecret: PropTypes.string,
|
||||||
@@ -45,4 +46,4 @@ LiveCommonFields.propTypes = {
|
|||||||
}).isRequired,
|
}).isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(LiveCommonFields);
|
export default LiveCommonFields;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import React, { useEffect } from 'react';
|
|||||||
import { useDispatch, useSelector } from 'react-redux';
|
import { useDispatch, useSelector } from 'react-redux';
|
||||||
import { camelCase } from 'lodash';
|
import { camelCase } from 'lodash';
|
||||||
import { Icon } from '@openedx/paragon';
|
import { Icon } from '@openedx/paragon';
|
||||||
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import * as Yup from 'yup';
|
import * as Yup from 'yup';
|
||||||
import { useNavigate } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
@@ -20,9 +20,9 @@ import ZoomSettings from './ZoomSettings';
|
|||||||
import BBBSettings from './BBBSettings';
|
import BBBSettings from './BBBSettings';
|
||||||
|
|
||||||
const LiveSettings = ({
|
const LiveSettings = ({
|
||||||
intl,
|
|
||||||
onClose,
|
onClose,
|
||||||
}) => {
|
}) => {
|
||||||
|
const intl = useIntl();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const courseId = useSelector(state => state.courseDetail.courseId);
|
const courseId = useSelector(state => state.courseDetail.courseId);
|
||||||
@@ -130,8 +130,7 @@ const LiveSettings = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
LiveSettings.propTypes = {
|
LiveSettings.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
onClose: PropTypes.func.isRequired,
|
onClose: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(LiveSettings);
|
export default LiveSettings;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import FormikControl from 'CourseAuthoring/generic/FormikControl';
|
import FormikControl from 'CourseAuthoring/generic/FormikControl';
|
||||||
|
|
||||||
@@ -8,37 +8,38 @@ import { providerNames } from './constants';
|
|||||||
import LiveCommonFields from './LiveCommonFields';
|
import LiveCommonFields from './LiveCommonFields';
|
||||||
|
|
||||||
const ZoomSettings = ({
|
const ZoomSettings = ({
|
||||||
intl,
|
|
||||||
values,
|
values,
|
||||||
}) => (
|
}) => {
|
||||||
// eslint-disable-next-line react/jsx-no-useless-fragment
|
const intl = useIntl();
|
||||||
<>
|
return (
|
||||||
{!values.piiSharingEnable ? (
|
// eslint-disable-next-line react/jsx-no-useless-fragment
|
||||||
<p data-testid="request-pii-sharing">
|
<>
|
||||||
{intl.formatMessage(messages.requestPiiSharingEnable, { provider: providerNames[values.provider] })}
|
{!values.piiSharingEnable ? (
|
||||||
</p>
|
<p data-testid="request-pii-sharing">
|
||||||
) : (
|
{intl.formatMessage(messages.requestPiiSharingEnable, { provider: providerNames[values.provider] })}
|
||||||
<>
|
</p>
|
||||||
{(values.piiSharingEmail || values.piiSharingUsername)
|
) : (
|
||||||
&& (
|
<>
|
||||||
<p data-testid="helper-text">
|
{(values.piiSharingEmail || values.piiSharingUsername)
|
||||||
{intl.formatMessage(messages.providerHelperText, { providerName: providerNames[values.provider] })}
|
&& (
|
||||||
</p>
|
<p data-testid="helper-text">
|
||||||
)}
|
{intl.formatMessage(messages.providerHelperText, { providerName: providerNames[values.provider] })}
|
||||||
<LiveCommonFields values={values} />
|
</p>
|
||||||
<FormikControl
|
)}
|
||||||
name="launchEmail"
|
<LiveCommonFields values={values} />
|
||||||
value={values.launchEmail}
|
<FormikControl
|
||||||
floatingLabel={intl.formatMessage(messages.launchEmail)}
|
name="launchEmail"
|
||||||
type="input"
|
value={values.launchEmail}
|
||||||
/>
|
floatingLabel={intl.formatMessage(messages.launchEmail)}
|
||||||
</>
|
type="input"
|
||||||
)}
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
)}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
ZoomSettings.propTypes = {
|
ZoomSettings.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
values: PropTypes.shape({
|
values: PropTypes.shape({
|
||||||
consumerKey: PropTypes.string,
|
consumerKey: PropTypes.string,
|
||||||
consumerSecret: PropTypes.string,
|
consumerSecret: PropTypes.string,
|
||||||
@@ -51,4 +52,4 @@ ZoomSettings.propTypes = {
|
|||||||
}).isRequired,
|
}).isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(ZoomSettings);
|
export default ZoomSettings;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import PropTypes from 'prop-types';
|
|||||||
|
|
||||||
import { getConfig } from '@edx/frontend-platform';
|
import { getConfig } from '@edx/frontend-platform';
|
||||||
import { getAuthenticatedUser } from '@edx/frontend-platform/auth';
|
import { getAuthenticatedUser } from '@edx/frontend-platform/auth';
|
||||||
import { injectIntl, intlShape, FormattedMessage } from '@edx/frontend-platform/i18n';
|
import { useIntl, FormattedMessage } from '@edx/frontend-platform/i18n';
|
||||||
import {
|
import {
|
||||||
ActionRow, Alert, Badge, Form, Hyperlink, ModalDialog, StatefulButton,
|
ActionRow, Alert, Badge, Form, Hyperlink, ModalDialog, StatefulButton,
|
||||||
} from '@openedx/paragon';
|
} from '@openedx/paragon';
|
||||||
@@ -25,7 +25,8 @@ import { PagesAndResourcesContext } from 'CourseAuthoring/pages-and-resources/Pa
|
|||||||
|
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
|
|
||||||
const ProctoringSettings = ({ intl, onClose }) => {
|
const ProctoringSettings = ({ onClose }) => {
|
||||||
|
const intl = useIntl();
|
||||||
const initialFormValues = {
|
const initialFormValues = {
|
||||||
enableProctoredExams: false,
|
enableProctoredExams: false,
|
||||||
proctoringProvider: false,
|
proctoringProvider: false,
|
||||||
@@ -652,10 +653,9 @@ const ProctoringSettings = ({ intl, onClose }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
ProctoringSettings.propTypes = {
|
ProctoringSettings.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
onClose: PropTypes.func.isRequired,
|
onClose: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
ProctoringSettings.defaultProps = {};
|
ProctoringSettings.defaultProps = {};
|
||||||
|
|
||||||
export default injectIntl(ProctoringSettings);
|
export default ProctoringSettings;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import * as Yup from 'yup';
|
import * as Yup from 'yup';
|
||||||
@@ -8,7 +8,8 @@ import { useAppSetting } from 'CourseAuthoring/utils';
|
|||||||
import AppSettingsModal from 'CourseAuthoring/pages-and-resources/app-settings-modal/AppSettingsModal';
|
import AppSettingsModal from 'CourseAuthoring/pages-and-resources/app-settings-modal/AppSettingsModal';
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
|
|
||||||
const ProgressSettings = ({ intl, onClose }) => {
|
const ProgressSettings = ({ onClose }) => {
|
||||||
|
const intl = useIntl();
|
||||||
const [disableProgressGraph, saveSetting] = useAppSetting('disableProgressGraph');
|
const [disableProgressGraph, saveSetting] = useAppSetting('disableProgressGraph');
|
||||||
const showProgressGraphSetting = getConfig().ENABLE_PROGRESS_GRAPH_SETTINGS.toString().toLowerCase() === 'true';
|
const showProgressGraphSetting = getConfig().ENABLE_PROGRESS_GRAPH_SETTINGS.toString().toLowerCase() === 'true';
|
||||||
|
|
||||||
@@ -48,8 +49,7 @@ const ProgressSettings = ({ intl, onClose }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
ProgressSettings.propTypes = {
|
ProgressSettings.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
onClose: PropTypes.func.isRequired,
|
onClose: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(ProgressSettings);
|
export default ProgressSettings;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||||
import { Button, Form, TransitionReplace } from '@openedx/paragon';
|
import { Button, Form, TransitionReplace } from '@openedx/paragon';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
@@ -30,8 +30,9 @@ const TeamTypeNameMessage = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const GroupEditor = ({
|
const GroupEditor = ({
|
||||||
intl, group, onDelete, onChange, onBlur, fieldNameCommonBase, errors,
|
group, onDelete, onChange, onBlur, fieldNameCommonBase, errors,
|
||||||
}) => {
|
}) => {
|
||||||
|
const intl = useIntl();
|
||||||
const [isDeleting, setDeleting] = useState(false);
|
const [isDeleting, setDeleting] = useState(false);
|
||||||
const [isOpen, setOpen] = useState(group.id === null);
|
const [isOpen, setOpen] = useState(group.id === null);
|
||||||
const initiateDeletion = () => setDeleting(true);
|
const initiateDeletion = () => setDeleting(true);
|
||||||
@@ -149,7 +150,6 @@ export const groupShape = PropTypes.shape({
|
|||||||
});
|
});
|
||||||
|
|
||||||
GroupEditor.propTypes = {
|
GroupEditor.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
fieldNameCommonBase: PropTypes.string.isRequired,
|
fieldNameCommonBase: PropTypes.string.isRequired,
|
||||||
errors: PropTypes.shape({
|
errors: PropTypes.shape({
|
||||||
name: PropTypes.string,
|
name: PropTypes.string,
|
||||||
@@ -170,4 +170,4 @@ GroupEditor.defaultProps = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(GroupEditor);
|
export default GroupEditor;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||||
import { Button, Form } from '@openedx/paragon';
|
import { Button, Form } from '@openedx/paragon';
|
||||||
import { Add } from '@openedx/paragon/icons';
|
import { Add } from '@openedx/paragon/icons';
|
||||||
|
|
||||||
@@ -17,9 +17,9 @@ import messages from './messages';
|
|||||||
setupYupExtensions();
|
setupYupExtensions();
|
||||||
|
|
||||||
const TeamSettings = ({
|
const TeamSettings = ({
|
||||||
intl,
|
|
||||||
onClose,
|
onClose,
|
||||||
}) => {
|
}) => {
|
||||||
|
const intl = useIntl();
|
||||||
const [teamsConfiguration, saveSettings] = useAppSetting('teamsConfiguration');
|
const [teamsConfiguration, saveSettings] = useAppSetting('teamsConfiguration');
|
||||||
const blankNewGroup = {
|
const blankNewGroup = {
|
||||||
name: '',
|
name: '',
|
||||||
@@ -166,8 +166,7 @@ const TeamSettings = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
TeamSettings.propTypes = {
|
TeamSettings.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
onClose: PropTypes.func.isRequired,
|
onClose: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(TeamSettings);
|
export default TeamSettings;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import * as Yup from 'yup';
|
import * as Yup from 'yup';
|
||||||
@@ -8,7 +8,8 @@ import { useAppSetting } from 'CourseAuthoring/utils';
|
|||||||
import AppSettingsModal from 'CourseAuthoring/pages-and-resources/app-settings-modal/AppSettingsModal';
|
import AppSettingsModal from 'CourseAuthoring/pages-and-resources/app-settings-modal/AppSettingsModal';
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
|
|
||||||
const WikiSettings = ({ intl, onClose }) => {
|
const WikiSettings = ({ onClose }) => {
|
||||||
|
const intl = useIntl();
|
||||||
const [enablePublicWiki, saveSetting] = useAppSetting('allowPublicWikiAccess');
|
const [enablePublicWiki, saveSetting] = useAppSetting('allowPublicWikiAccess');
|
||||||
const handleSettingsSave = (values) => saveSetting(values.enablePublicWiki);
|
const handleSettingsSave = (values) => saveSetting(values.enablePublicWiki);
|
||||||
|
|
||||||
@@ -32,7 +33,7 @@ const WikiSettings = ({ intl, onClose }) => {
|
|||||||
label={intl.formatMessage(messages.enablePublicWikiLabel)}
|
label={intl.formatMessage(messages.enablePublicWikiLabel)}
|
||||||
helpText={intl.formatMessage(messages.enablePublicWikiHelp)}
|
helpText={intl.formatMessage(messages.enablePublicWikiHelp)}
|
||||||
onChange={handleChange}
|
onChange={handleChange}
|
||||||
onBlue={handleBlur}
|
onBlur={handleBlur}
|
||||||
checked={values.enablePublicWiki}
|
checked={values.enablePublicWiki}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
@@ -42,8 +43,7 @@ const WikiSettings = ({ intl, onClose }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
WikiSettings.propTypes = {
|
WikiSettings.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
onClose: PropTypes.func.isRequired,
|
onClose: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(WikiSettings);
|
export default WikiSettings;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import React, { useCallback, useContext, useEffect } from 'react';
|
import React, { useCallback, useContext, useEffect } from 'react';
|
||||||
import { useDispatch } from 'react-redux';
|
import { useDispatch } from 'react-redux';
|
||||||
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||||
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
|
||||||
import { PagesAndResourcesContext } from 'CourseAuthoring/pages-and-resources/PagesAndResourcesProvider';
|
import { PagesAndResourcesContext } from 'CourseAuthoring/pages-and-resources/PagesAndResourcesProvider';
|
||||||
import { useNavigate } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
|
|
||||||
@@ -10,7 +9,8 @@ import messages from './messages';
|
|||||||
|
|
||||||
import { fetchXpertSettings } from './data/thunks';
|
import { fetchXpertSettings } from './data/thunks';
|
||||||
|
|
||||||
const XpertUnitSummarySettings = ({ intl }) => {
|
const XpertUnitSummarySettings = () => {
|
||||||
|
const intl = useIntl();
|
||||||
const { path: pagesAndResourcesPath, courseId } = useContext(PagesAndResourcesContext);
|
const { path: pagesAndResourcesPath, courseId } = useContext(PagesAndResourcesContext);
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
@@ -38,8 +38,4 @@ const XpertUnitSummarySettings = ({ intl }) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
XpertUnitSummarySettings.propTypes = {
|
export default XpertUnitSummarySettings;
|
||||||
intl: intlShape.isRequired,
|
|
||||||
};
|
|
||||||
|
|
||||||
export default injectIntl(XpertUnitSummarySettings);
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||||
import {
|
import {
|
||||||
ActionRow,
|
ActionRow,
|
||||||
Alert,
|
Alert,
|
||||||
@@ -70,38 +70,40 @@ AppSettingsForm.defaultProps = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const SettingsModalBase = ({
|
const SettingsModalBase = ({
|
||||||
intl, title, onClose, variant, isMobile, children, footer,
|
title, onClose, variant, isMobile, children, footer,
|
||||||
}) => (
|
}) => {
|
||||||
<ModalDialog
|
const intl = useIntl();
|
||||||
title={title}
|
return (
|
||||||
isOpen
|
<ModalDialog
|
||||||
onClose={onClose}
|
title={title}
|
||||||
size="lg"
|
isOpen
|
||||||
variant={variant}
|
onClose={onClose}
|
||||||
hasCloseButton={isMobile}
|
size="lg"
|
||||||
isFullscreenOnMobile
|
variant={variant}
|
||||||
>
|
hasCloseButton={isMobile}
|
||||||
<ModalDialog.Header>
|
isFullscreenOnMobile
|
||||||
<ModalDialog.Title data-testid="modal-title">
|
>
|
||||||
{title}
|
<ModalDialog.Header>
|
||||||
</ModalDialog.Title>
|
<ModalDialog.Title data-testid="modal-title">
|
||||||
</ModalDialog.Header>
|
{title}
|
||||||
<ModalDialog.Body>
|
</ModalDialog.Title>
|
||||||
{children}
|
</ModalDialog.Header>
|
||||||
</ModalDialog.Body>
|
<ModalDialog.Body>
|
||||||
<ModalDialog.Footer className="p-4">
|
{children}
|
||||||
<ActionRow>
|
</ModalDialog.Body>
|
||||||
<ModalDialog.CloseButton variant="tertiary">
|
<ModalDialog.Footer className="p-4">
|
||||||
{intl.formatMessage(messages.cancel)}
|
<ActionRow>
|
||||||
</ModalDialog.CloseButton>
|
<ModalDialog.CloseButton variant="tertiary">
|
||||||
{footer}
|
{intl.formatMessage(messages.cancel)}
|
||||||
</ActionRow>
|
</ModalDialog.CloseButton>
|
||||||
</ModalDialog.Footer>
|
{footer}
|
||||||
</ModalDialog>
|
</ActionRow>
|
||||||
);
|
</ModalDialog.Footer>
|
||||||
|
</ModalDialog>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
SettingsModalBase.propTypes = {
|
SettingsModalBase.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
title: PropTypes.string.isRequired,
|
title: PropTypes.string.isRequired,
|
||||||
onClose: PropTypes.func.isRequired,
|
onClose: PropTypes.func.isRequired,
|
||||||
variant: PropTypes.oneOf(['default', 'dark']).isRequired,
|
variant: PropTypes.oneOf(['default', 'dark']).isRequired,
|
||||||
@@ -115,11 +117,11 @@ SettingsModalBase.defaultProps = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const ResetUnitsButton = ({
|
const ResetUnitsButton = ({
|
||||||
intl,
|
|
||||||
courseId,
|
courseId,
|
||||||
checked,
|
checked,
|
||||||
visible,
|
visible,
|
||||||
}) => {
|
}) => {
|
||||||
|
const intl = useIntl();
|
||||||
const resetStatusRequestStatus = useSelector(getResetStatus);
|
const resetStatusRequestStatus = useSelector(getResetStatus);
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
@@ -185,7 +187,6 @@ const ResetUnitsButton = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
ResetUnitsButton.propTypes = {
|
ResetUnitsButton.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
courseId: PropTypes.string.isRequired,
|
courseId: PropTypes.string.isRequired,
|
||||||
checked: PropTypes.oneOf(['true', 'false']).isRequired,
|
checked: PropTypes.oneOf(['true', 'false']).isRequired,
|
||||||
visible: PropTypes.bool,
|
visible: PropTypes.bool,
|
||||||
@@ -196,7 +197,6 @@ ResetUnitsButton.defaultProps = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const SettingsModal = ({
|
const SettingsModal = ({
|
||||||
intl,
|
|
||||||
appId,
|
appId,
|
||||||
title,
|
title,
|
||||||
children,
|
children,
|
||||||
@@ -213,6 +213,7 @@ const SettingsModal = ({
|
|||||||
allUnitsEnabledText,
|
allUnitsEnabledText,
|
||||||
noUnitsEnabledText,
|
noUnitsEnabledText,
|
||||||
}) => {
|
}) => {
|
||||||
|
const intl = useIntl();
|
||||||
const { courseId } = useContext(PagesAndResourcesContext);
|
const { courseId } = useContext(PagesAndResourcesContext);
|
||||||
const loadingStatus = useSelector(getLoadingStatus);
|
const loadingStatus = useSelector(getLoadingStatus);
|
||||||
const updateSettingsRequestStatus = useSelector(getSavingStatus);
|
const updateSettingsRequestStatus = useSelector(getSavingStatus);
|
||||||
@@ -372,7 +373,6 @@ const SettingsModal = ({
|
|||||||
>
|
>
|
||||||
{allUnitsEnabledText}
|
{allUnitsEnabledText}
|
||||||
<ResetUnitsButton
|
<ResetUnitsButton
|
||||||
intl={intl}
|
|
||||||
courseId={courseId}
|
courseId={courseId}
|
||||||
checked={formikProps.values.checked}
|
checked={formikProps.values.checked}
|
||||||
visible={formikProps.values.checked === 'true'}
|
visible={formikProps.values.checked === 'true'}
|
||||||
@@ -385,7 +385,6 @@ const SettingsModal = ({
|
|||||||
>
|
>
|
||||||
{noUnitsEnabledText}
|
{noUnitsEnabledText}
|
||||||
<ResetUnitsButton
|
<ResetUnitsButton
|
||||||
intl={intl}
|
|
||||||
courseId={courseId}
|
courseId={courseId}
|
||||||
checked={formikProps.values.checked}
|
checked={formikProps.values.checked}
|
||||||
visible={formikProps.values.checked === 'false'}
|
visible={formikProps.values.checked === 'false'}
|
||||||
@@ -423,7 +422,6 @@ const SettingsModal = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
SettingsModal.propTypes = {
|
SettingsModal.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
title: PropTypes.string.isRequired,
|
title: PropTypes.string.isRequired,
|
||||||
appId: PropTypes.string.isRequired,
|
appId: PropTypes.string.isRequired,
|
||||||
children: PropTypes.func,
|
children: PropTypes.func,
|
||||||
@@ -450,4 +448,4 @@ SettingsModal.defaultProps = {
|
|||||||
enableReinitialize: false,
|
enableReinitialize: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(SettingsModal);
|
export default SettingsModal;
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
@import "~@edx/brand/paragon/variables";
|
@import "~@openedx/paragon/styles/scss/core/utilities-only";
|
||||||
@import "~@openedx/paragon/scss/core/utilities-only";
|
|
||||||
|
|
||||||
.summary-radio {
|
.summary-radio {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ import { useDispatch, useSelector } from 'react-redux';
|
|||||||
import {
|
import {
|
||||||
useLocation,
|
useLocation,
|
||||||
} from 'react-router-dom';
|
} from 'react-router-dom';
|
||||||
import { StudioFooterSlot } from '@openedx/frontend-slot-footer';
|
import { StudioFooterSlot } from '@edx/frontend-component-footer';
|
||||||
import Header from './header';
|
import Header from './header';
|
||||||
import { fetchCourseDetail, fetchWaffleFlags } from './data/thunks';
|
import { fetchCourseDetail } from './data/thunks';
|
||||||
import { useModel } from './generic/model-store';
|
import { useModel } from './generic/model-store';
|
||||||
import NotFoundAlert from './generic/NotFoundAlert';
|
import NotFoundAlert from './generic/NotFoundAlert';
|
||||||
import PermissionDeniedAlert from './generic/PermissionDeniedAlert';
|
import PermissionDeniedAlert from './generic/PermissionDeniedAlert';
|
||||||
@@ -21,7 +21,6 @@ const CourseAuthoringPage = ({ courseId, children }) => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
dispatch(fetchCourseDetail(courseId));
|
dispatch(fetchCourseDetail(courseId));
|
||||||
dispatch(fetchWaffleFlags(courseId));
|
|
||||||
}, [courseId]);
|
}, [courseId]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import CourseAuthoringPage from './CourseAuthoringPage';
|
|||||||
import PagesAndResources from './pages-and-resources/PagesAndResources';
|
import PagesAndResources from './pages-and-resources/PagesAndResources';
|
||||||
import { executeThunk } from './utils';
|
import { executeThunk } from './utils';
|
||||||
import { fetchCourseApps } from './pages-and-resources/data/thunks';
|
import { fetchCourseApps } from './pages-and-resources/data/thunks';
|
||||||
import { fetchCourseDetail, fetchWaffleFlags } from './data/thunks';
|
import { fetchCourseDetail } from './data/thunks';
|
||||||
import { getApiWaffleFlagsUrl } from './data/api';
|
import { getApiWaffleFlagsUrl } from './data/api';
|
||||||
import { initializeMocks, render } from './testUtils';
|
import { initializeMocks, render } from './testUtils';
|
||||||
|
|
||||||
@@ -26,7 +26,6 @@ beforeEach(async () => {
|
|||||||
axiosMock
|
axiosMock
|
||||||
.onGet(getApiWaffleFlagsUrl(courseId))
|
.onGet(getApiWaffleFlagsUrl(courseId))
|
||||||
.reply(200, {});
|
.reply(200, {});
|
||||||
await executeThunk(fetchWaffleFlags(courseId), store.dispatch);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Editor Pages Load no header', () => {
|
describe('Editor Pages Load no header', () => {
|
||||||
@@ -102,4 +101,20 @@ describe('Course authoring page', () => {
|
|||||||
expect(await wrapper.findByTestId(contentTestId)).toBeInTheDocument();
|
expect(await wrapper.findByTestId(contentTestId)).toBeInTheDocument();
|
||||||
expect(wrapper.queryByTestId('notFoundAlert')).not.toBeInTheDocument();
|
expect(wrapper.queryByTestId('notFoundAlert')).not.toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
const mockStoreDenied = async () => {
|
||||||
|
const studioApiBaseUrl = getConfig().STUDIO_BASE_URL;
|
||||||
|
const courseAppsApiUrl = `${studioApiBaseUrl}/api/course_apps/v1/apps`;
|
||||||
|
|
||||||
|
axiosMock.onGet(
|
||||||
|
`${courseAppsApiUrl}/${courseId}`,
|
||||||
|
).reply(403);
|
||||||
|
await executeThunk(fetchCourseApps(courseId), store.dispatch);
|
||||||
|
};
|
||||||
|
test('renders PermissionDeniedAlert when courseAppsApiStatus is DENIED', async () => {
|
||||||
|
mockPathname = '/editor/';
|
||||||
|
await mockStoreDenied();
|
||||||
|
|
||||||
|
const wrapper = render(<CourseAuthoringPage courseId={courseId} />);
|
||||||
|
expect(await wrapper.findByTestId('permissionDeniedAlert')).toBeInTheDocument();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import {
|
|||||||
} from 'react-router-dom';
|
} from 'react-router-dom';
|
||||||
import { getConfig } from '@edx/frontend-platform';
|
import { getConfig } from '@edx/frontend-platform';
|
||||||
import { PageWrap } from '@edx/frontend-platform/react';
|
import { PageWrap } from '@edx/frontend-platform/react';
|
||||||
import { Textbooks } from 'CourseAuthoring/textbooks';
|
import { Textbooks } from './textbooks';
|
||||||
import CourseAuthoringPage from './CourseAuthoringPage';
|
import CourseAuthoringPage from './CourseAuthoringPage';
|
||||||
import { PagesAndResources } from './pages-and-resources';
|
import { PagesAndResources } from './pages-and-resources';
|
||||||
import EditorContainer from './editors/EditorContainer';
|
import EditorContainer from './editors/EditorContainer';
|
||||||
@@ -17,7 +17,7 @@ import ScheduleAndDetails from './schedule-and-details';
|
|||||||
import { GradingSettings } from './grading-settings';
|
import { GradingSettings } from './grading-settings';
|
||||||
import CourseTeam from './course-team/CourseTeam';
|
import CourseTeam from './course-team/CourseTeam';
|
||||||
import { CourseUpdates } from './course-updates';
|
import { CourseUpdates } from './course-updates';
|
||||||
import { CourseUnit } from './course-unit';
|
import { CourseUnit, SubsectionUnitRedirect } from './course-unit';
|
||||||
import { Certificates } from './certificates';
|
import { Certificates } from './certificates';
|
||||||
import CourseExportPage from './export-page/CourseExportPage';
|
import CourseExportPage from './export-page/CourseExportPage';
|
||||||
import CourseOptimizerPage from './optimizer-page/CourseOptimizerPage';
|
import CourseOptimizerPage from './optimizer-page/CourseOptimizerPage';
|
||||||
@@ -82,6 +82,10 @@ const CourseAuthoringRoutes = () => {
|
|||||||
path="custom-pages/*"
|
path="custom-pages/*"
|
||||||
element={<PageWrap><CustomPages courseId={courseId} /></PageWrap>}
|
element={<PageWrap><CustomPages courseId={courseId} /></PageWrap>}
|
||||||
/>
|
/>
|
||||||
|
<Route
|
||||||
|
path="/subsection/:subsectionId"
|
||||||
|
element={<PageWrap><SubsectionUnitRedirect courseId={courseId} /></PageWrap>}
|
||||||
|
/>
|
||||||
{DECODED_ROUTES.COURSE_UNIT.map((path) => (
|
{DECODED_ROUTES.COURSE_UNIT.map((path) => (
|
||||||
<Route
|
<Route
|
||||||
key={path}
|
key={path}
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import CourseAuthoringRoutes from './CourseAuthoringRoutes';
|
import CourseAuthoringRoutes from './CourseAuthoringRoutes';
|
||||||
import { executeThunk } from './utils';
|
|
||||||
import { getApiWaffleFlagsUrl } from './data/api';
|
import { getApiWaffleFlagsUrl } from './data/api';
|
||||||
import { fetchWaffleFlags } from './data/thunks';
|
|
||||||
import {
|
import {
|
||||||
screen, initializeMocks, render, waitFor,
|
screen, initializeMocks, render, waitFor,
|
||||||
} from './testUtils';
|
} from './testUtils';
|
||||||
@@ -11,7 +9,6 @@ const pagesAndResourcesMockText = 'Pages And Resources';
|
|||||||
const editorContainerMockText = 'Editor Container';
|
const editorContainerMockText = 'Editor Container';
|
||||||
const videoSelectorContainerMockText = 'Video Selector Container';
|
const videoSelectorContainerMockText = 'Video Selector Container';
|
||||||
const customPagesMockText = 'Custom Pages';
|
const customPagesMockText = 'Custom Pages';
|
||||||
let store;
|
|
||||||
const mockComponentFn = jest.fn();
|
const mockComponentFn = jest.fn();
|
||||||
|
|
||||||
jest.mock('react-router-dom', () => ({
|
jest.mock('react-router-dom', () => ({
|
||||||
@@ -51,12 +48,10 @@ jest.mock('./custom-pages/CustomPages', () => (props) => {
|
|||||||
|
|
||||||
describe('<CourseAuthoringRoutes>', () => {
|
describe('<CourseAuthoringRoutes>', () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
const { axiosMock, reduxStore } = initializeMocks();
|
const { axiosMock } = initializeMocks();
|
||||||
store = reduxStore;
|
|
||||||
axiosMock
|
axiosMock
|
||||||
.onGet(getApiWaffleFlagsUrl(courseId))
|
.onGet(getApiWaffleFlagsUrl(courseId))
|
||||||
.reply(200, {});
|
.reply(200, {});
|
||||||
await executeThunk(fetchWaffleFlags(courseId), store.dispatch);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('renders the PagesAndResources component when the pages and resources route is active', async () => {
|
it('renders the PagesAndResources component when the pages and resources route is active', async () => {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { injectIntl, FormattedMessage } from '@edx/frontend-platform/i18n';
|
import { FormattedMessage } from '@edx/frontend-platform/i18n';
|
||||||
import { Hyperlink, MailtoLink, Stack } from '@openedx/paragon';
|
import { Hyperlink, MailtoLink, Stack } from '@openedx/paragon';
|
||||||
|
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
@@ -95,4 +95,4 @@ AccessibilityBody.propTypes = {
|
|||||||
email: PropTypes.string.isRequired,
|
email: PropTypes.string.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(AccessibilityBody);
|
export default AccessibilityBody;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import {
|
import {
|
||||||
injectIntl, FormattedMessage, intlShape, FormattedDate, FormattedTime,
|
FormattedMessage, FormattedDate, FormattedTime, useIntl,
|
||||||
} from '@edx/frontend-platform/i18n';
|
} from '@edx/frontend-platform/i18n';
|
||||||
import {
|
import {
|
||||||
ActionRow, Alert, Form, Stack, StatefulButton,
|
ActionRow, Alert, Form, Stack, StatefulButton,
|
||||||
@@ -15,9 +15,8 @@ import messages from './messages';
|
|||||||
|
|
||||||
const AccessibilityForm = ({
|
const AccessibilityForm = ({
|
||||||
accessibilityEmail,
|
accessibilityEmail,
|
||||||
// injected
|
|
||||||
intl,
|
|
||||||
}) => {
|
}) => {
|
||||||
|
const intl = useIntl();
|
||||||
const {
|
const {
|
||||||
errors,
|
errors,
|
||||||
values,
|
values,
|
||||||
@@ -139,8 +138,6 @@ const AccessibilityForm = ({
|
|||||||
|
|
||||||
AccessibilityForm.propTypes = {
|
AccessibilityForm.propTypes = {
|
||||||
accessibilityEmail: PropTypes.string.isRequired,
|
accessibilityEmail: PropTypes.string.isRequired,
|
||||||
// injected
|
|
||||||
intl: intlShape.isRequired,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(AccessibilityForm);
|
export default AccessibilityForm;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
render,
|
render,
|
||||||
act,
|
|
||||||
screen,
|
screen,
|
||||||
} from '@testing-library/react';
|
} from '@testing-library/react';
|
||||||
import userEvent from '@testing-library/user-event';
|
import userEvent from '@testing-library/user-event';
|
||||||
@@ -74,22 +73,24 @@ describe('<AccessibilityPolicyForm />', () => {
|
|||||||
describe('statusAlert', () => {
|
describe('statusAlert', () => {
|
||||||
let formSections;
|
let formSections;
|
||||||
let submitButton;
|
let submitButton;
|
||||||
|
let user;
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
user = userEvent.setup();
|
||||||
renderComponent();
|
renderComponent();
|
||||||
formSections = screen.getAllByRole('textbox');
|
formSections = screen.getAllByRole('textbox');
|
||||||
await act(async () => {
|
|
||||||
userEvent.type(formSections[0], 'email@email.com');
|
await user.type(formSections[0], 'email@email.com');
|
||||||
userEvent.type(formSections[1], 'test name');
|
await user.type(formSections[1], 'test name');
|
||||||
userEvent.type(formSections[2], 'feedback message');
|
await user.type(formSections[2], 'feedback message');
|
||||||
});
|
|
||||||
submitButton = screen.getByText(messages.accessibilityPolicyFormSubmitLabel.defaultMessage);
|
submitButton = screen.getByText(messages.accessibilityPolicyFormSubmitLabel.defaultMessage);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('shows correct success message', async () => {
|
it('shows correct success message', async () => {
|
||||||
axiosMock.onPost(getZendeskrUrl()).reply(200);
|
axiosMock.onPost(getZendeskrUrl()).reply(200);
|
||||||
await act(async () => {
|
|
||||||
userEvent.click(submitButton);
|
await user.click(submitButton);
|
||||||
});
|
|
||||||
const { savingStatus } = store.getState().accessibilityPage;
|
const { savingStatus } = store.getState().accessibilityPage;
|
||||||
expect(savingStatus).toEqual(RequestStatus.SUCCESSFUL);
|
expect(savingStatus).toEqual(RequestStatus.SUCCESSFUL);
|
||||||
|
|
||||||
@@ -104,9 +105,9 @@ describe('<AccessibilityPolicyForm />', () => {
|
|||||||
|
|
||||||
it('shows correct rate limiting message', async () => {
|
it('shows correct rate limiting message', async () => {
|
||||||
axiosMock.onPost(getZendeskrUrl()).reply(429);
|
axiosMock.onPost(getZendeskrUrl()).reply(429);
|
||||||
await act(async () => {
|
|
||||||
userEvent.click(submitButton);
|
await user.click(submitButton);
|
||||||
});
|
|
||||||
const { savingStatus } = store.getState().accessibilityPage;
|
const { savingStatus } = store.getState().accessibilityPage;
|
||||||
expect(savingStatus).toEqual(RequestStatus.FAILED);
|
expect(savingStatus).toEqual(RequestStatus.FAILED);
|
||||||
|
|
||||||
@@ -123,23 +124,24 @@ describe('<AccessibilityPolicyForm />', () => {
|
|||||||
describe('input validation', () => {
|
describe('input validation', () => {
|
||||||
let formSections;
|
let formSections;
|
||||||
let submitButton;
|
let submitButton;
|
||||||
|
let user;
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
|
user = userEvent.setup();
|
||||||
renderComponent();
|
renderComponent();
|
||||||
formSections = screen.getAllByRole('textbox');
|
formSections = screen.getAllByRole('textbox');
|
||||||
await act(async () => {
|
|
||||||
userEvent.type(formSections[0], 'email@email.com');
|
await user.type(formSections[0], 'email@email.com');
|
||||||
userEvent.type(formSections[1], 'test name');
|
await user.type(formSections[1], 'test name');
|
||||||
userEvent.type(formSections[2], 'feedback message');
|
await user.type(formSections[2], 'feedback message');
|
||||||
});
|
|
||||||
submitButton = screen.getByText(messages.accessibilityPolicyFormSubmitLabel.defaultMessage);
|
submitButton = screen.getByText(messages.accessibilityPolicyFormSubmitLabel.defaultMessage);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('adds validation checking on each input field', async () => {
|
it('adds validation checking on each input field', async () => {
|
||||||
await act(async () => {
|
await user.clear(formSections[0]);
|
||||||
userEvent.clear(formSections[0]);
|
await user.clear(formSections[1]);
|
||||||
userEvent.clear(formSections[1]);
|
await user.clear(formSections[2]);
|
||||||
userEvent.clear(formSections[2]);
|
|
||||||
});
|
|
||||||
const emailError = screen.getByTestId('error-feedback-email');
|
const emailError = screen.getByTestId('error-feedback-email');
|
||||||
expect(emailError).toBeVisible();
|
expect(emailError).toBeVisible();
|
||||||
|
|
||||||
@@ -151,12 +153,10 @@ describe('<AccessibilityPolicyForm />', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('sumbit button is disabled when trying to submit with all empty fields', async () => {
|
it('sumbit button is disabled when trying to submit with all empty fields', async () => {
|
||||||
await act(async () => {
|
await user.clear(formSections[0]);
|
||||||
userEvent.clear(formSections[0]);
|
await user.clear(formSections[1]);
|
||||||
userEvent.clear(formSections[1]);
|
await user.clear(formSections[2]);
|
||||||
userEvent.clear(formSections[2]);
|
await user.click(submitButton);
|
||||||
userEvent.click(submitButton);
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(submitButton.closest('button')).toBeDisabled();
|
expect(submitButton.closest('button')).toBeDisabled();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,20 +1,18 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||||
import { Helmet } from 'react-helmet';
|
import { Helmet } from 'react-helmet';
|
||||||
import { Container } from '@openedx/paragon';
|
import { Container } from '@openedx/paragon';
|
||||||
import { StudioFooterSlot } from '@openedx/frontend-slot-footer';
|
import { StudioFooterSlot } from '@edx/frontend-component-footer';
|
||||||
|
|
||||||
import Header from '../header';
|
import Header from '../header';
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
import AccessibilityBody from './AccessibilityBody';
|
import AccessibilityBody from './AccessibilityBody';
|
||||||
import AccessibilityForm from './AccessibilityForm';
|
import AccessibilityForm from './AccessibilityForm';
|
||||||
|
|
||||||
const AccessibilityPage = ({
|
import { COMMUNITY_ACCESSIBILITY_LINK, ACCESSIBILITY_EMAIL } from './constants';
|
||||||
// injected
|
|
||||||
intl,
|
const AccessibilityPage = () => {
|
||||||
}) => {
|
const intl = useIntl();
|
||||||
const communityAccessibilityLink = 'https://www.edx.org/accessibility';
|
|
||||||
const email = 'accessibility@edx.org';
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Helmet>
|
<Helmet>
|
||||||
@@ -26,17 +24,16 @@ const AccessibilityPage = ({
|
|||||||
</Helmet>
|
</Helmet>
|
||||||
<Header isHiddenMainMenu />
|
<Header isHiddenMainMenu />
|
||||||
<Container size="xl" classNamae="px-4">
|
<Container size="xl" classNamae="px-4">
|
||||||
<AccessibilityBody {...{ email, communityAccessibilityLink }} />
|
<AccessibilityBody
|
||||||
<AccessibilityForm accessibilityEmail={email} />
|
{...{ email: ACCESSIBILITY_EMAIL, communityAccessibilityLink: COMMUNITY_ACCESSIBILITY_LINK }}
|
||||||
|
/>
|
||||||
|
<AccessibilityForm accessibilityEmail={ACCESSIBILITY_EMAIL} />
|
||||||
</Container>
|
</Container>
|
||||||
<StudioFooterSlot />
|
<StudioFooterSlot />
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
AccessibilityPage.propTypes = {
|
AccessibilityPage.propTypes = {};
|
||||||
// injected
|
|
||||||
intl: intlShape.isRequired,
|
|
||||||
};
|
|
||||||
|
|
||||||
export default injectIntl(AccessibilityPage);
|
export default AccessibilityPage;
|
||||||
|
|||||||
@@ -1,42 +1,13 @@
|
|||||||
import {
|
// @ts-check
|
||||||
render,
|
import { initializeMocks, render, screen } from '../testUtils';
|
||||||
screen,
|
|
||||||
} from '@testing-library/react';
|
|
||||||
import { AppProvider } from '@edx/frontend-platform/react';
|
|
||||||
import { IntlProvider } from '@edx/frontend-platform/i18n';
|
|
||||||
import { initializeMockApp } from '@edx/frontend-platform';
|
|
||||||
import initializeStore from '../store';
|
|
||||||
import AccessibilityPage from './index';
|
import AccessibilityPage from './index';
|
||||||
|
|
||||||
const initialState = {
|
const renderComponent = () => render(<AccessibilityPage />);
|
||||||
accessibilityPage: {
|
|
||||||
status: {},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
let store;
|
|
||||||
|
|
||||||
const renderComponent = () => {
|
|
||||||
render(
|
|
||||||
<IntlProvider locale="en">
|
|
||||||
<AppProvider store={store}>
|
|
||||||
<AccessibilityPage />
|
|
||||||
</AppProvider>
|
|
||||||
</IntlProvider>,
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
describe('<AccessibilityPolicyPage />', () => {
|
describe('<AccessibilityPolicyPage />', () => {
|
||||||
describe('renders', () => {
|
describe('renders', () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
initializeMockApp({
|
initializeMocks();
|
||||||
authenticatedUser: {
|
|
||||||
userId: 3,
|
|
||||||
username: 'abc123',
|
|
||||||
administrator: false,
|
|
||||||
roles: [],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
store = initializeStore(initialState);
|
|
||||||
});
|
});
|
||||||
it('contains the policy body', () => {
|
it('contains the policy body', () => {
|
||||||
renderComponent();
|
renderComponent();
|
||||||
|
|||||||
2
src/accessibility-page/constants.ts
Normal file
2
src/accessibility-page/constants.ts
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
export const COMMUNITY_ACCESSIBILITY_LINK = 'https://www.edx.org/accessibility';
|
||||||
|
export const ACCESSIBILITY_EMAIL = 'accessibility@edx.org';
|
||||||
@@ -10,9 +10,11 @@ function submitAccessibilityForm({ email, name, message }) {
|
|||||||
await postAccessibilityForm({ email, name, message });
|
await postAccessibilityForm({ email, name, message });
|
||||||
dispatch(updateSavingStatus({ status: RequestStatus.SUCCESSFUL }));
|
dispatch(updateSavingStatus({ status: RequestStatus.SUCCESSFUL }));
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
/* istanbul ignore else */
|
||||||
if (error.response && error.response.status === 429) {
|
if (error.response && error.response.status === 429) {
|
||||||
dispatch(updateSavingStatus({ status: RequestStatus.FAILED }));
|
dispatch(updateSavingStatus({ status: RequestStatus.FAILED }));
|
||||||
} else {
|
} else {
|
||||||
|
/* istanbul ignore next */
|
||||||
dispatch(updateSavingStatus({ status: RequestStatus.SUCCESSFUL }));
|
dispatch(updateSavingStatus({ status: RequestStatus.SUCCESSFUL }));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {
|
|||||||
Container, Button, Layout, StatefulButton, TransitionReplace,
|
Container, Button, Layout, StatefulButton, TransitionReplace,
|
||||||
} from '@openedx/paragon';
|
} from '@openedx/paragon';
|
||||||
import { CheckCircle, Info, Warning } from '@openedx/paragon/icons';
|
import { CheckCircle, Info, Warning } from '@openedx/paragon/icons';
|
||||||
import { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
import { FormattedMessage, useIntl } from '@edx/frontend-platform/i18n';
|
||||||
import Placeholder from '../editors/Placeholder';
|
import Placeholder from '../editors/Placeholder';
|
||||||
|
|
||||||
import AlertProctoringError from '../generic/AlertProctoringError';
|
import AlertProctoringError from '../generic/AlertProctoringError';
|
||||||
@@ -26,7 +26,8 @@ import messages from './messages';
|
|||||||
import ModalError from './modal-error/ModalError';
|
import ModalError from './modal-error/ModalError';
|
||||||
import getPageHeadTitle from '../generic/utils';
|
import getPageHeadTitle from '../generic/utils';
|
||||||
|
|
||||||
const AdvancedSettings = ({ intl, courseId }) => {
|
const AdvancedSettings = ({ courseId }) => {
|
||||||
|
const intl = useIntl();
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const [saveSettingsPrompt, showSaveSettingsPrompt] = useState(false);
|
const [saveSettingsPrompt, showSaveSettingsPrompt] = useState(false);
|
||||||
const [showDeprecated, setShowDeprecated] = useState(false);
|
const [showDeprecated, setShowDeprecated] = useState(false);
|
||||||
@@ -278,8 +279,7 @@ const AdvancedSettings = ({ intl, courseId }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
AdvancedSettings.propTypes = {
|
AdvancedSettings.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
courseId: PropTypes.string.isRequired,
|
courseId: PropTypes.string.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(AdvancedSettings);
|
export default AdvancedSettings;
|
||||||
|
|||||||
@@ -1,12 +1,9 @@
|
|||||||
import React from 'react';
|
import {
|
||||||
import { initializeMockApp } from '@edx/frontend-platform';
|
render as baseRender,
|
||||||
import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';
|
fireEvent,
|
||||||
import { IntlProvider, injectIntl } from '@edx/frontend-platform/i18n';
|
initializeMocks,
|
||||||
import { AppProvider } from '@edx/frontend-platform/react';
|
waitFor,
|
||||||
import { render, fireEvent, waitFor } from '@testing-library/react';
|
} from '../testUtils';
|
||||||
import MockAdapter from 'axios-mock-adapter';
|
|
||||||
|
|
||||||
import initializeStore from '../store';
|
|
||||||
import { executeThunk } from '../utils';
|
import { executeThunk } from '../utils';
|
||||||
import { advancedSettingsMock } from './__mocks__';
|
import { advancedSettingsMock } from './__mocks__';
|
||||||
import { getCourseAdvancedSettingsApiUrl } from './data/api';
|
import { getCourseAdvancedSettingsApiUrl } from './data/api';
|
||||||
@@ -28,39 +25,22 @@ jest.mock('react-textarea-autosize', () => jest.fn((props) => (
|
|||||||
/>
|
/>
|
||||||
)));
|
)));
|
||||||
|
|
||||||
jest.mock('react-router-dom', () => ({
|
const render = () => baseRender(
|
||||||
...jest.requireActual('react-router-dom'),
|
<AdvancedSettings courseId={courseId} />,
|
||||||
useLocation: () => ({
|
{ path: mockPathname },
|
||||||
pathname: mockPathname,
|
|
||||||
}),
|
|
||||||
}));
|
|
||||||
|
|
||||||
const RootWrapper = () => (
|
|
||||||
<AppProvider store={store}>
|
|
||||||
<IntlProvider locale="en" messages={{}}>
|
|
||||||
<AdvancedSettings intl={injectIntl} courseId={courseId} />
|
|
||||||
</IntlProvider>
|
|
||||||
</AppProvider>
|
|
||||||
);
|
);
|
||||||
|
|
||||||
describe('<AdvancedSettings />', () => {
|
describe('<AdvancedSettings />', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
initializeMockApp({
|
const mocks = initializeMocks();
|
||||||
authenticatedUser: {
|
store = mocks.reduxStore;
|
||||||
userId: 3,
|
axiosMock = mocks.axiosMock;
|
||||||
username: 'abc123',
|
|
||||||
administrator: true,
|
|
||||||
roles: [],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
store = initializeStore();
|
|
||||||
axiosMock = new MockAdapter(getAuthenticatedHttpClient());
|
|
||||||
axiosMock
|
axiosMock
|
||||||
.onGet(`${getCourseAdvancedSettingsApiUrl(courseId)}?fetch_all=0`)
|
.onGet(`${getCourseAdvancedSettingsApiUrl(courseId)}?fetch_all=0`)
|
||||||
.reply(200, advancedSettingsMock);
|
.reply(200, advancedSettingsMock);
|
||||||
});
|
});
|
||||||
it('should render without errors', async () => {
|
it('should render without errors', async () => {
|
||||||
const { getByText } = render(<RootWrapper />);
|
const { getByText } = render();
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(getByText(messages.headingSubtitle.defaultMessage)).toBeInTheDocument();
|
expect(getByText(messages.headingSubtitle.defaultMessage)).toBeInTheDocument();
|
||||||
const advancedSettingsElement = getByText(messages.headingTitle.defaultMessage, {
|
const advancedSettingsElement = getByText(messages.headingTitle.defaultMessage, {
|
||||||
@@ -72,7 +52,7 @@ describe('<AdvancedSettings />', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('should render setting element', async () => {
|
it('should render setting element', async () => {
|
||||||
const { getByText, queryByText } = render(<RootWrapper />);
|
const { getByText, queryByText } = render();
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
const advancedModuleListTitle = getByText(/Advanced Module List/i);
|
const advancedModuleListTitle = getByText(/Advanced Module List/i);
|
||||||
expect(advancedModuleListTitle).toBeInTheDocument();
|
expect(advancedModuleListTitle).toBeInTheDocument();
|
||||||
@@ -80,7 +60,7 @@ describe('<AdvancedSettings />', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('should change to onСhange', async () => {
|
it('should change to onСhange', async () => {
|
||||||
const { getByLabelText } = render(<RootWrapper />);
|
const { getByLabelText } = render();
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
const textarea = getByLabelText(/Advanced Module List/i);
|
const textarea = getByLabelText(/Advanced Module List/i);
|
||||||
expect(textarea).toBeInTheDocument();
|
expect(textarea).toBeInTheDocument();
|
||||||
@@ -89,7 +69,7 @@ describe('<AdvancedSettings />', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('should display a warning alert', async () => {
|
it('should display a warning alert', async () => {
|
||||||
const { getByLabelText, getByText } = render(<RootWrapper />);
|
const { getByLabelText, getByText } = render();
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
const textarea = getByLabelText(/Advanced Module List/i);
|
const textarea = getByLabelText(/Advanced Module List/i);
|
||||||
fireEvent.change(textarea, { target: { value: '[3, 2, 1]' } });
|
fireEvent.change(textarea, { target: { value: '[3, 2, 1]' } });
|
||||||
@@ -100,7 +80,7 @@ describe('<AdvancedSettings />', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('should display a tooltip on clicking on the icon', async () => {
|
it('should display a tooltip on clicking on the icon', async () => {
|
||||||
const { getByLabelText, getByText } = render(<RootWrapper />);
|
const { getByLabelText, getByText } = render();
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
const button = getByLabelText(/Show help text/i);
|
const button = getByLabelText(/Show help text/i);
|
||||||
fireEvent.click(button);
|
fireEvent.click(button);
|
||||||
@@ -108,7 +88,7 @@ describe('<AdvancedSettings />', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('should change deprecated button text ', async () => {
|
it('should change deprecated button text ', async () => {
|
||||||
const { getByText } = render(<RootWrapper />);
|
const { getByText } = render();
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
const showDeprecatedItemsBtn = getByText(/Show Deprecated Settings/i);
|
const showDeprecatedItemsBtn = getByText(/Show Deprecated Settings/i);
|
||||||
expect(showDeprecatedItemsBtn).toBeInTheDocument();
|
expect(showDeprecatedItemsBtn).toBeInTheDocument();
|
||||||
@@ -118,7 +98,7 @@ describe('<AdvancedSettings />', () => {
|
|||||||
expect(getByText('Certificate web/html view enabled')).toBeInTheDocument();
|
expect(getByText('Certificate web/html view enabled')).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
it('should reset to default value on click on Cancel button', async () => {
|
it('should reset to default value on click on Cancel button', async () => {
|
||||||
const { getByLabelText, getByText } = render(<RootWrapper />);
|
const { getByLabelText, getByText } = render();
|
||||||
let textarea;
|
let textarea;
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
textarea = getByLabelText(/Advanced Module List/i);
|
textarea = getByLabelText(/Advanced Module List/i);
|
||||||
@@ -129,7 +109,7 @@ describe('<AdvancedSettings />', () => {
|
|||||||
expect(textarea.value).toBe('[]');
|
expect(textarea.value).toBe('[]');
|
||||||
});
|
});
|
||||||
it('should update the textarea value and display the updated value after clicking "Change manually"', async () => {
|
it('should update the textarea value and display the updated value after clicking "Change manually"', async () => {
|
||||||
const { getByLabelText, getByText } = render(<RootWrapper />);
|
const { getByLabelText, getByText } = render();
|
||||||
let textarea;
|
let textarea;
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
textarea = getByLabelText(/Advanced Module List/i);
|
textarea = getByLabelText(/Advanced Module List/i);
|
||||||
@@ -141,7 +121,7 @@ describe('<AdvancedSettings />', () => {
|
|||||||
expect(textarea.value).toBe('[3, 2, 1,');
|
expect(textarea.value).toBe('[3, 2, 1,');
|
||||||
});
|
});
|
||||||
it('should show success alert after save', async () => {
|
it('should show success alert after save', async () => {
|
||||||
const { getByLabelText, getByText } = render(<RootWrapper />);
|
const { getByLabelText, getByText } = render();
|
||||||
let textarea;
|
let textarea;
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
textarea = getByLabelText(/Advanced Module List/i);
|
textarea = getByLabelText(/Advanced Module List/i);
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
import { camelCaseObject, getConfig } from '@edx/frontend-platform';
|
/* eslint-disable import/prefer-default-export */
|
||||||
|
import {
|
||||||
|
camelCaseObject,
|
||||||
|
getConfig,
|
||||||
|
} from '@edx/frontend-platform';
|
||||||
import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';
|
import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';
|
||||||
|
import { camelCase } from 'lodash';
|
||||||
import { convertObjectToSnakeCase } from '../../utils';
|
import { convertObjectToSnakeCase } from '../../utils';
|
||||||
|
|
||||||
const getApiBaseUrl = () => getConfig().STUDIO_BASE_URL;
|
const getApiBaseUrl = () => getConfig().STUDIO_BASE_URL;
|
||||||
@@ -14,7 +19,19 @@ const getProctoringErrorsApiUrl = () => `${getApiBaseUrl()}/api/contentstore/v1/
|
|||||||
export async function getCourseAdvancedSettings(courseId) {
|
export async function getCourseAdvancedSettings(courseId) {
|
||||||
const { data } = await getAuthenticatedHttpClient()
|
const { data } = await getAuthenticatedHttpClient()
|
||||||
.get(`${getCourseAdvancedSettingsApiUrl(courseId)}?fetch_all=0`);
|
.get(`${getCourseAdvancedSettingsApiUrl(courseId)}?fetch_all=0`);
|
||||||
return camelCaseObject(data);
|
const keepValues = {};
|
||||||
|
Object.keys(data).forEach((key) => {
|
||||||
|
keepValues[camelCase(key)] = { value: data[key].value };
|
||||||
|
});
|
||||||
|
const formattedData = {};
|
||||||
|
const formattedCamelCaseData = camelCaseObject(data);
|
||||||
|
Object.keys(formattedCamelCaseData).forEach((key) => {
|
||||||
|
formattedData[key] = {
|
||||||
|
...formattedCamelCaseData[key],
|
||||||
|
value: keepValues[key]?.value,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return formattedData;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -26,7 +43,19 @@ export async function getCourseAdvancedSettings(courseId) {
|
|||||||
export async function updateCourseAdvancedSettings(courseId, settings) {
|
export async function updateCourseAdvancedSettings(courseId, settings) {
|
||||||
const { data } = await getAuthenticatedHttpClient()
|
const { data } = await getAuthenticatedHttpClient()
|
||||||
.patch(`${getCourseAdvancedSettingsApiUrl(courseId)}`, convertObjectToSnakeCase(settings));
|
.patch(`${getCourseAdvancedSettingsApiUrl(courseId)}`, convertObjectToSnakeCase(settings));
|
||||||
return camelCaseObject(data);
|
const keepValues = {};
|
||||||
|
Object.keys(data).forEach((key) => {
|
||||||
|
keepValues[camelCase(key)] = { value: data[key].value };
|
||||||
|
});
|
||||||
|
const formattedData = {};
|
||||||
|
const formattedCamelCaseData = camelCaseObject(data);
|
||||||
|
Object.keys(formattedCamelCaseData).forEach((key) => {
|
||||||
|
formattedData[key] = {
|
||||||
|
...formattedCamelCaseData[key],
|
||||||
|
value: keepValues[key]?.value,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return formattedData;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,5 +65,17 @@ export async function updateCourseAdvancedSettings(courseId, settings) {
|
|||||||
*/
|
*/
|
||||||
export async function getProctoringExamErrors(courseId) {
|
export async function getProctoringExamErrors(courseId) {
|
||||||
const { data } = await getAuthenticatedHttpClient().get(`${getProctoringErrorsApiUrl()}${courseId}`);
|
const { data } = await getAuthenticatedHttpClient().get(`${getProctoringErrorsApiUrl()}${courseId}`);
|
||||||
return camelCaseObject(data);
|
const keepValues = {};
|
||||||
|
Object.keys(data).forEach((key) => {
|
||||||
|
keepValues[camelCase(key)] = { value: data[key].value };
|
||||||
|
});
|
||||||
|
const formattedData = {};
|
||||||
|
const formattedCamelCaseData = camelCaseObject(data);
|
||||||
|
Object.keys(formattedCamelCaseData).forEach((key) => {
|
||||||
|
formattedData[key] = {
|
||||||
|
...formattedCamelCaseData[key],
|
||||||
|
value: keepValues[key]?.value,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
return formattedData;
|
||||||
}
|
}
|
||||||
|
|||||||
236
src/advanced-settings/data/api.test.js
Normal file
236
src/advanced-settings/data/api.test.js
Normal file
@@ -0,0 +1,236 @@
|
|||||||
|
import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';
|
||||||
|
import {
|
||||||
|
getCourseAdvancedSettings,
|
||||||
|
updateCourseAdvancedSettings,
|
||||||
|
getProctoringExamErrors,
|
||||||
|
} from './api';
|
||||||
|
|
||||||
|
jest.mock('@edx/frontend-platform/auth', () => ({
|
||||||
|
getAuthenticatedHttpClient: jest.fn(),
|
||||||
|
}));
|
||||||
|
|
||||||
|
describe('courseSettings API', () => {
|
||||||
|
const mockHttpClient = {
|
||||||
|
get: jest.fn(),
|
||||||
|
patch: jest.fn(),
|
||||||
|
};
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
jest.clearAllMocks();
|
||||||
|
getAuthenticatedHttpClient.mockReturnValue(mockHttpClient);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getCourseAdvancedSettings', () => {
|
||||||
|
it('should fetch and unformat course advanced settings', async () => {
|
||||||
|
const fakeData = {
|
||||||
|
key_snake_case: {
|
||||||
|
display_name: 'To come camelCase',
|
||||||
|
testCamelCase: 'This key must not be formatted',
|
||||||
|
PascalCase: 'To come camelCase',
|
||||||
|
'kebab-case': 'To come camelCase',
|
||||||
|
UPPER_CASE: 'To come camelCase',
|
||||||
|
lowercase: 'This key must not be formatted',
|
||||||
|
UPPERCASE: 'To come lowercase',
|
||||||
|
'Title Case': 'To come camelCase',
|
||||||
|
'dot.case': 'To come camelCase',
|
||||||
|
SCREAMING_SNAKE_CASE: 'To come camelCase',
|
||||||
|
MixedCase: 'To come camelCase',
|
||||||
|
'Train-Case': 'To come camelCase',
|
||||||
|
nestedOption: {
|
||||||
|
anotherOption: 'To come camelCase',
|
||||||
|
},
|
||||||
|
// value is an object with various cases
|
||||||
|
// this contain must not be formatted to camelCase
|
||||||
|
value: {
|
||||||
|
snake_case: 'snake_case',
|
||||||
|
camelCase: 'camelCase',
|
||||||
|
PascalCase: 'PascalCase',
|
||||||
|
'kebab-case': 'kebab-case',
|
||||||
|
UPPER_CASE: 'UPPER_CASE',
|
||||||
|
lowercase: 'lowercase',
|
||||||
|
UPPERCASE: 'UPPERCASE',
|
||||||
|
'Title Case': 'Title Case',
|
||||||
|
'dot.case': 'dot.case',
|
||||||
|
SCREAMING_SNAKE_CASE: 'SCREAMING_SNAKE_CASE',
|
||||||
|
MixedCase: 'MixedCase',
|
||||||
|
'Train-Case': 'Train-Case',
|
||||||
|
nestedOption: {
|
||||||
|
anotherOption: 'nestedContent',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const expected = {
|
||||||
|
keySnakeCase: {
|
||||||
|
displayName: 'To come camelCase',
|
||||||
|
testCamelCase: 'This key must not be formatted',
|
||||||
|
pascalCase: 'To come camelCase',
|
||||||
|
kebabCase: 'To come camelCase',
|
||||||
|
upperCase: 'To come camelCase',
|
||||||
|
lowercase: 'This key must not be formatted',
|
||||||
|
uppercase: 'To come lowercase',
|
||||||
|
titleCase: 'To come camelCase',
|
||||||
|
dotCase: 'To come camelCase',
|
||||||
|
screamingSnakeCase: 'To come camelCase',
|
||||||
|
mixedCase: 'To come camelCase',
|
||||||
|
trainCase: 'To come camelCase',
|
||||||
|
nestedOption: {
|
||||||
|
anotherOption: 'To come camelCase',
|
||||||
|
},
|
||||||
|
value: fakeData.key_snake_case.value,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
mockHttpClient.get.mockResolvedValue({ data: fakeData });
|
||||||
|
|
||||||
|
const result = await getCourseAdvancedSettings('course-v1:Test+T101+2024');
|
||||||
|
expect(mockHttpClient.get).toHaveBeenCalledWith(
|
||||||
|
`${process.env.STUDIO_BASE_URL}/api/contentstore/v0/advanced_settings/course-v1:Test+T101+2024?fetch_all=0`,
|
||||||
|
);
|
||||||
|
expect(result).toEqual(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('updateCourseAdvancedSettings', () => {
|
||||||
|
it('should update and unformat course advanced settings', async () => {
|
||||||
|
const fakeData = {
|
||||||
|
key_snake_case: {
|
||||||
|
display_name: 'To come camelCase',
|
||||||
|
testCamelCase: 'This key must not be formatted', // because already be camelCase
|
||||||
|
PascalCase: 'To come camelCase',
|
||||||
|
'kebab-case': 'To come camelCase',
|
||||||
|
UPPER_CASE: 'To come camelCase',
|
||||||
|
lowercase: 'This key must not be formatted', // because camelCase in lowercase not formatted
|
||||||
|
UPPERCASE: 'To come lowercase', // because camelCase in UPPERCASE format to lowercase
|
||||||
|
'Title Case': 'To come camelCase',
|
||||||
|
'dot.case': 'To come camelCase',
|
||||||
|
SCREAMING_SNAKE_CASE: 'To come camelCase',
|
||||||
|
MixedCase: 'To come camelCase',
|
||||||
|
'Train-Case': 'To come camelCase',
|
||||||
|
nestedOption: {
|
||||||
|
anotherOption: 'To come camelCase',
|
||||||
|
},
|
||||||
|
// value is an object with various cases
|
||||||
|
// this contain must not be formatted to camelCase
|
||||||
|
value: {
|
||||||
|
snake_case: 'snake_case',
|
||||||
|
camelCase: 'camelCase',
|
||||||
|
PascalCase: 'PascalCase',
|
||||||
|
'kebab-case': 'kebab-case',
|
||||||
|
UPPER_CASE: 'UPPER_CASE',
|
||||||
|
lowercase: 'lowercase',
|
||||||
|
UPPERCASE: 'UPPERCASE',
|
||||||
|
'Title Case': 'Title Case',
|
||||||
|
'dot.case': 'dot.case',
|
||||||
|
SCREAMING_SNAKE_CASE: 'SCREAMING_SNAKE_CASE',
|
||||||
|
MixedCase: 'MixedCase',
|
||||||
|
'Train-Case': 'Train-Case',
|
||||||
|
nestedOption: {
|
||||||
|
anotherOption: 'nestedContent',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const expected = {
|
||||||
|
keySnakeCase: {
|
||||||
|
displayName: 'To come camelCase',
|
||||||
|
testCamelCase: 'This key must not be formatted',
|
||||||
|
pascalCase: 'To come camelCase',
|
||||||
|
kebabCase: 'To come camelCase',
|
||||||
|
upperCase: 'To come camelCase',
|
||||||
|
lowercase: 'This key must not be formatted',
|
||||||
|
uppercase: 'To come lowercase',
|
||||||
|
titleCase: 'To come camelCase',
|
||||||
|
dotCase: 'To come camelCase',
|
||||||
|
screamingSnakeCase: 'To come camelCase',
|
||||||
|
mixedCase: 'To come camelCase',
|
||||||
|
trainCase: 'To come camelCase',
|
||||||
|
nestedOption: {
|
||||||
|
anotherOption: 'To come camelCase',
|
||||||
|
},
|
||||||
|
value: fakeData.key_snake_case.value,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
mockHttpClient.patch.mockResolvedValue({ data: fakeData });
|
||||||
|
|
||||||
|
const result = await updateCourseAdvancedSettings('course-v1:Test+T101+2024', {});
|
||||||
|
expect(mockHttpClient.patch).toHaveBeenCalledWith(
|
||||||
|
`${process.env.STUDIO_BASE_URL}/api/contentstore/v0/advanced_settings/course-v1:Test+T101+2024`,
|
||||||
|
{},
|
||||||
|
);
|
||||||
|
expect(result).toEqual(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getProctoringExamErrors', () => {
|
||||||
|
it('should fetch proctoring errors and return unformat object', async () => {
|
||||||
|
const fakeData = {
|
||||||
|
key_snake_case: {
|
||||||
|
display_name: 'To come camelCase',
|
||||||
|
testCamelCase: 'This key must not be formatted',
|
||||||
|
PascalCase: 'To come camelCase',
|
||||||
|
'kebab-case': 'To come camelCase',
|
||||||
|
UPPER_CASE: 'To come camelCase',
|
||||||
|
lowercase: 'This key must not be formatted',
|
||||||
|
UPPERCASE: 'To come lowercase',
|
||||||
|
'Title Case': 'To come camelCase',
|
||||||
|
'dot.case': 'To come camelCase',
|
||||||
|
SCREAMING_SNAKE_CASE: 'To come camelCase',
|
||||||
|
MixedCase: 'To come camelCase',
|
||||||
|
'Train-Case': 'To come camelCase',
|
||||||
|
nestedOption: {
|
||||||
|
anotherOption: 'To come camelCase',
|
||||||
|
},
|
||||||
|
// value is an object with various cases
|
||||||
|
// this contain must not be formatted to camelCase
|
||||||
|
value: {
|
||||||
|
snake_case: 'snake_case',
|
||||||
|
camelCase: 'camelCase',
|
||||||
|
PascalCase: 'PascalCase',
|
||||||
|
'kebab-case': 'kebab-case',
|
||||||
|
UPPER_CASE: 'UPPER_CASE',
|
||||||
|
lowercase: 'lowercase',
|
||||||
|
UPPERCASE: 'UPPERCASE',
|
||||||
|
'Title Case': 'Title Case',
|
||||||
|
'dot.case': 'dot.case',
|
||||||
|
SCREAMING_SNAKE_CASE: 'SCREAMING_SNAKE_CASE',
|
||||||
|
MixedCase: 'MixedCase',
|
||||||
|
'Train-Case': 'Train-Case',
|
||||||
|
nestedOption: {
|
||||||
|
anotherOption: 'nestedContent',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const expected = {
|
||||||
|
keySnakeCase: {
|
||||||
|
displayName: 'To come camelCase',
|
||||||
|
testCamelCase: 'This key must not be formatted',
|
||||||
|
pascalCase: 'To come camelCase',
|
||||||
|
kebabCase: 'To come camelCase',
|
||||||
|
upperCase: 'To come camelCase',
|
||||||
|
lowercase: 'This key must not be formatted',
|
||||||
|
uppercase: 'To come lowercase',
|
||||||
|
titleCase: 'To come camelCase',
|
||||||
|
dotCase: 'To come camelCase',
|
||||||
|
screamingSnakeCase: 'To come camelCase',
|
||||||
|
mixedCase: 'To come camelCase',
|
||||||
|
trainCase: 'To come camelCase',
|
||||||
|
nestedOption: {
|
||||||
|
anotherOption: 'To come camelCase',
|
||||||
|
},
|
||||||
|
value: fakeData.key_snake_case.value,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
mockHttpClient.get.mockResolvedValue({ data: fakeData });
|
||||||
|
|
||||||
|
const result = await getProctoringExamErrors('course-v1:Test+T101+2024');
|
||||||
|
expect(mockHttpClient.get).toHaveBeenCalledWith(
|
||||||
|
`${process.env.STUDIO_BASE_URL}/api/contentstore/v1/proctoring_errors/course-v1:Test+T101+2024`,
|
||||||
|
);
|
||||||
|
expect(result).toEqual(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -1,55 +1,57 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { ActionRow, AlertModal, Button } from '@openedx/paragon';
|
import { ActionRow, AlertModal, Button } from '@openedx/paragon';
|
||||||
import { FormattedMessage, injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
import { FormattedMessage, useIntl } from '@edx/frontend-platform/i18n';
|
||||||
|
|
||||||
import ModalErrorListItem from './ModalErrorListItem';
|
import ModalErrorListItem from './ModalErrorListItem';
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
|
|
||||||
const ModalError = ({
|
const ModalError = ({
|
||||||
intl, isError, handleUndoChanges, showErrorModal, errorList, settingsData,
|
isError, handleUndoChanges, showErrorModal, errorList, settingsData,
|
||||||
}) => (
|
}) => {
|
||||||
<AlertModal
|
const intl = useIntl();
|
||||||
title={intl.formatMessage(messages.modalErrorTitle)}
|
return (
|
||||||
isOpen={isError}
|
<AlertModal
|
||||||
variant="danger"
|
title={intl.formatMessage(messages.modalErrorTitle)}
|
||||||
footerNode={(
|
isOpen={isError}
|
||||||
<ActionRow>
|
variant="danger"
|
||||||
<Button
|
footerNode={(
|
||||||
variant="tertiary"
|
<ActionRow>
|
||||||
onClick={() => showErrorModal(!isError)}
|
<Button
|
||||||
>
|
variant="tertiary"
|
||||||
{intl.formatMessage(messages.modalErrorButtonChangeManually)}
|
onClick={() => showErrorModal(!isError)}
|
||||||
</Button>
|
>
|
||||||
<Button onClick={handleUndoChanges}>
|
{intl.formatMessage(messages.modalErrorButtonChangeManually)}
|
||||||
{intl.formatMessage(messages.modalErrorButtonUndoChanges)}
|
</Button>
|
||||||
</Button>
|
<Button onClick={handleUndoChanges}>
|
||||||
</ActionRow>
|
{intl.formatMessage(messages.modalErrorButtonUndoChanges)}
|
||||||
|
</Button>
|
||||||
|
</ActionRow>
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<p>
|
<p>
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
id="course-authoring.advanced-settings.modal.error.description"
|
id="course-authoring.advanced-settings.modal.error.description"
|
||||||
defaultMessage="There was {errorCounter} while trying to save the course settings in the database.
|
defaultMessage="There was {errorCounter} while trying to save the course settings in the database.
|
||||||
Please check the following validation feedbacks and reflect them in your course settings:"
|
Please check the following validation feedbacks and reflect them in your course settings:"
|
||||||
values={{ errorCounter: <strong>{errorList.length} validation error </strong> }}
|
values={{ errorCounter: <strong>{errorList.length} validation error </strong> }}
|
||||||
/>
|
|
||||||
</p>
|
|
||||||
<hr />
|
|
||||||
<ul className="p-0">
|
|
||||||
{errorList.map((settingName) => (
|
|
||||||
<ModalErrorListItem
|
|
||||||
key={settingName.key}
|
|
||||||
settingName={settingName}
|
|
||||||
settingsData={settingsData}
|
|
||||||
/>
|
/>
|
||||||
))}
|
</p>
|
||||||
</ul>
|
<hr />
|
||||||
</AlertModal>
|
<ul className="p-0">
|
||||||
);
|
{errorList.map((settingName) => (
|
||||||
|
<ModalErrorListItem
|
||||||
|
key={settingName.key}
|
||||||
|
settingName={settingName}
|
||||||
|
settingsData={settingsData}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</AlertModal>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
ModalError.propTypes = {
|
ModalError.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
isError: PropTypes.bool.isRequired,
|
isError: PropTypes.bool.isRequired,
|
||||||
handleUndoChanges: PropTypes.func.isRequired,
|
handleUndoChanges: PropTypes.func.isRequired,
|
||||||
showErrorModal: PropTypes.func.isRequired,
|
showErrorModal: PropTypes.func.isRequired,
|
||||||
@@ -60,4 +62,4 @@ ModalError.propTypes = {
|
|||||||
settingsData: PropTypes.shape({}).isRequired,
|
settingsData: PropTypes.shape({}).isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(ModalError);
|
export default ModalError;
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
bottom: 0;
|
bottom: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 0 .625rem;
|
padding: 0 .625rem;
|
||||||
z-index: $zindex-modal;
|
z-index: var(--pgn-elevation-modal-zindex);
|
||||||
}
|
}
|
||||||
|
|
||||||
.alert-proctoring-error {
|
.alert-proctoring-error {
|
||||||
@@ -66,13 +66,13 @@
|
|||||||
.setting-sidebar-supplementary {
|
.setting-sidebar-supplementary {
|
||||||
.setting-sidebar-supplementary-about {
|
.setting-sidebar-supplementary-about {
|
||||||
.setting-sidebar-supplementary-about-title {
|
.setting-sidebar-supplementary-about-title {
|
||||||
font: normal $font-weight-bold 1.125rem/1.5rem $font-family-base;
|
font: normal var(--pgn-typography-font-weight-bold) 1.125rem/1.5rem var(--pgn-typography-font-family-base);
|
||||||
color: $headings-color;
|
color: var(--pgn-color-headings-base);
|
||||||
margin-bottom: 1.25rem;
|
margin-bottom: 1.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.setting-sidebar-supplementary-about-descriptions {
|
.setting-sidebar-supplementary-about-descriptions {
|
||||||
font: normal $font-weight-normal .875rem/1.5rem $font-family-base;
|
font: normal var(--pgn-typography-font-weight-normal) .875rem/1.5rem var(--pgn-typography-font-family-base);
|
||||||
color: $text-color-base;
|
color: $text-color-base;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -81,16 +81,16 @@
|
|||||||
list-style: none;
|
list-style: none;
|
||||||
|
|
||||||
.setting-sidebar-supplementary-other-link {
|
.setting-sidebar-supplementary-other-link {
|
||||||
font: normal $font-weight-normal .875rem/1.5rem $font-family-base;
|
font: normal var(--pgn-typography-font-weight-normal) .875rem/1.5rem var(--pgn-typography-font-family-base);
|
||||||
line-height: 1.5rem;
|
line-height: 1.5rem;
|
||||||
color: $info-500;
|
color: var(--pgn-color-info-500);
|
||||||
margin-bottom: .5rem;
|
margin-bottom: .5rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.setting-sidebar-supplementary-other-title {
|
.setting-sidebar-supplementary-other-title {
|
||||||
font: normal $font-weight-bold 1.125rem/1.5rem $font-family-base;
|
font: normal var(--pgn-typography-font-weight-bold) 1.125rem/1.5rem var(--pgn-typography-font-family-base);
|
||||||
color: $headings-color;
|
color: var(--pgn-color-headings-base);
|
||||||
margin-bottom: 1.25rem;
|
margin-bottom: 1.25rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
color: $danger;
|
color: var(--pgn-color-danger-base);
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal-error-item-title {
|
.modal-error-item-title {
|
||||||
@@ -113,12 +113,12 @@
|
|||||||
|
|
||||||
.modal-popup-content {
|
.modal-popup-content {
|
||||||
max-width: 200px;
|
max-width: 200px;
|
||||||
color: $white;
|
color: var(--pgn-color-white);
|
||||||
background-color: $black;
|
background-color: var(--pgn-color-black);
|
||||||
filter: drop-shadow(0 2px 4px rgba(0 0 0 / .15));
|
filter: drop-shadow(0 2px 4px rgba(0 0 0 / .15));
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pgn__modal-popup__arrow::after {
|
.pgn__modal-popup__arrow::after {
|
||||||
border-top-color: $black;
|
border-top-color: var(--pgn-color-black);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
$text-color-base: $gray-700;
|
$text-color-base: var(--pgn-color-gray-700);
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
import { InfoOutline, Warning } from '@openedx/paragon/icons';
|
import { InfoOutline, Warning } from '@openedx/paragon/icons';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { capitalize } from 'lodash';
|
import { capitalize } from 'lodash';
|
||||||
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||||
import TextareaAutosize from 'react-textarea-autosize';
|
import TextareaAutosize from 'react-textarea-autosize';
|
||||||
|
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
@@ -25,9 +25,8 @@ const SettingCard = ({
|
|||||||
saveSettingsPrompt,
|
saveSettingsPrompt,
|
||||||
isEditableState,
|
isEditableState,
|
||||||
setIsEditableState,
|
setIsEditableState,
|
||||||
// injected
|
|
||||||
intl,
|
|
||||||
}) => {
|
}) => {
|
||||||
|
const intl = useIntl();
|
||||||
const { deprecated, help, displayName } = settingData;
|
const { deprecated, help, displayName } = settingData;
|
||||||
const initialValue = JSON.stringify(settingData.value, null, 4);
|
const initialValue = JSON.stringify(settingData.value, null, 4);
|
||||||
const [isOpen, open, close] = useToggle(false);
|
const [isOpen, open, close] = useToggle(false);
|
||||||
@@ -115,7 +114,6 @@ const SettingCard = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
SettingCard.propTypes = {
|
SettingCard.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
settingData: PropTypes.shape({
|
settingData: PropTypes.shape({
|
||||||
deprecated: PropTypes.bool,
|
deprecated: PropTypes.bool,
|
||||||
help: PropTypes.string,
|
help: PropTypes.string,
|
||||||
@@ -137,4 +135,4 @@ SettingCard.propTypes = {
|
|||||||
setIsEditableState: PropTypes.func.isRequired,
|
setIsEditableState: PropTypes.func.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(SettingCard);
|
export default SettingCard;
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ jest.mock('react-textarea-autosize', () => jest.fn((props) => (
|
|||||||
const RootWrapper = () => (
|
const RootWrapper = () => (
|
||||||
<IntlProvider locale="en">
|
<IntlProvider locale="en">
|
||||||
<SettingCard
|
<SettingCard
|
||||||
intl={{}}
|
|
||||||
isOn
|
isOn
|
||||||
name="settingName"
|
name="settingName"
|
||||||
setEdited={setEdited}
|
setEdited={setEdited}
|
||||||
@@ -58,7 +57,6 @@ describe('<SettingCard />', () => {
|
|||||||
const { getByText } = render(
|
const { getByText } = render(
|
||||||
<IntlProvider locale="en">
|
<IntlProvider locale="en">
|
||||||
<SettingCard
|
<SettingCard
|
||||||
intl={{}}
|
|
||||||
isOn
|
isOn
|
||||||
name="settingName"
|
name="settingName"
|
||||||
setEdited={setEdited}
|
setEdited={setEdited}
|
||||||
@@ -79,11 +77,12 @@ describe('<SettingCard />', () => {
|
|||||||
expect(queryByText(messages.deprecated.defaultMessage)).toBeNull();
|
expect(queryByText(messages.deprecated.defaultMessage)).toBeNull();
|
||||||
});
|
});
|
||||||
it('calls setEdited on blur', async () => {
|
it('calls setEdited on blur', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const { getByLabelText } = render(<RootWrapper />);
|
const { getByLabelText } = render(<RootWrapper />);
|
||||||
const inputBox = getByLabelText(/Setting Name/i);
|
const inputBox = getByLabelText(/Setting Name/i);
|
||||||
fireEvent.focus(inputBox);
|
fireEvent.focus(inputBox);
|
||||||
userEvent.clear(inputBox);
|
await user.clear(inputBox);
|
||||||
userEvent.type(inputBox, '3, 2, 1');
|
await user.type(inputBox, '3, 2, 1');
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(inputBox).toHaveValue('3, 2, 1');
|
expect(inputBox).toHaveValue('3, 2, 1');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,28 +1,25 @@
|
|||||||
|
// @ts-check
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {
|
import { FormattedMessage } from '@edx/frontend-platform/i18n';
|
||||||
FormattedMessage,
|
|
||||||
injectIntl,
|
|
||||||
intlShape,
|
|
||||||
} from '@edx/frontend-platform/i18n';
|
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
|
||||||
import { HelpSidebar } from '../../generic/help-sidebar';
|
import { HelpSidebar } from '../../generic/help-sidebar';
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
|
|
||||||
const SettingsSidebar = ({ intl, courseId, proctoredExamSettingsUrl }) => (
|
const SettingsSidebar = ({ courseId, proctoredExamSettingsUrl = '' }) => (
|
||||||
<HelpSidebar
|
<HelpSidebar
|
||||||
courseId={courseId}
|
courseId={courseId}
|
||||||
proctoredExamSettingsUrl={proctoredExamSettingsUrl}
|
proctoredExamSettingsUrl={proctoredExamSettingsUrl}
|
||||||
showOtherSettings
|
showOtherSettings
|
||||||
>
|
>
|
||||||
<h4 className="help-sidebar-about-title">
|
<h4 className="help-sidebar-about-title">
|
||||||
{intl.formatMessage(messages.about)}
|
<FormattedMessage {...messages.about} />
|
||||||
</h4>
|
</h4>
|
||||||
<p className="help-sidebar-about-descriptions">
|
<p className="help-sidebar-about-descriptions">
|
||||||
{intl.formatMessage(messages.aboutDescription1)}
|
<FormattedMessage {...messages.aboutDescription1} />
|
||||||
</p>
|
</p>
|
||||||
<p className="help-sidebar-about-descriptions">
|
<p className="help-sidebar-about-descriptions">
|
||||||
{intl.formatMessage(messages.aboutDescription2)}
|
<FormattedMessage {...messages.aboutDescription2} />
|
||||||
</p>
|
</p>
|
||||||
<p className="help-sidebar-about-descriptions">
|
<p className="help-sidebar-about-descriptions">
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
@@ -34,14 +31,9 @@ const SettingsSidebar = ({ intl, courseId, proctoredExamSettingsUrl }) => (
|
|||||||
</HelpSidebar>
|
</HelpSidebar>
|
||||||
);
|
);
|
||||||
|
|
||||||
SettingsSidebar.defaultProps = {
|
|
||||||
proctoredExamSettingsUrl: '',
|
|
||||||
};
|
|
||||||
|
|
||||||
SettingsSidebar.propTypes = {
|
SettingsSidebar.propTypes = {
|
||||||
intl: intlShape.isRequired,
|
|
||||||
courseId: PropTypes.string.isRequired,
|
courseId: PropTypes.string.isRequired,
|
||||||
proctoredExamSettingsUrl: PropTypes.string,
|
proctoredExamSettingsUrl: PropTypes.string,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(SettingsSidebar);
|
export default SettingsSidebar;
|
||||||
|
|||||||
@@ -1,43 +1,21 @@
|
|||||||
import React from 'react';
|
// @ts-check
|
||||||
import { render } from '@testing-library/react';
|
import { initializeMocks, render } from '../../testUtils';
|
||||||
import { IntlProvider } from '@edx/frontend-platform/i18n';
|
|
||||||
import { initializeMockApp } from '@edx/frontend-platform';
|
|
||||||
import { AppProvider } from '@edx/frontend-platform/react';
|
|
||||||
|
|
||||||
import initializeStore from '../../store';
|
|
||||||
import SettingsSidebar from './SettingsSidebar';
|
import SettingsSidebar from './SettingsSidebar';
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
|
|
||||||
const courseId = 'course-123';
|
const courseId = 'course-123';
|
||||||
let store;
|
|
||||||
|
|
||||||
const RootWrapper = () => (
|
|
||||||
<AppProvider store={store}>
|
|
||||||
<IntlProvider locale="en" messages={{}}>
|
|
||||||
<SettingsSidebar intl={{ formatMessage: jest.fn() }} courseId={courseId} />
|
|
||||||
</IntlProvider>
|
|
||||||
</AppProvider>
|
|
||||||
);
|
|
||||||
|
|
||||||
describe('<SettingsSidebar />', () => {
|
describe('<SettingsSidebar />', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
initializeMockApp({
|
initializeMocks();
|
||||||
authenticatedUser: {
|
|
||||||
userId: 3,
|
|
||||||
username: 'abc123',
|
|
||||||
administrator: true,
|
|
||||||
roles: [],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
store = initializeStore();
|
|
||||||
});
|
});
|
||||||
it('renders about and other sidebar titles correctly', () => {
|
it('renders about and other sidebar titles correctly', () => {
|
||||||
const { getByText } = render(<RootWrapper />);
|
const { getByText } = render(<SettingsSidebar courseId={courseId} />);
|
||||||
expect(getByText(messages.about.defaultMessage)).toBeInTheDocument();
|
expect(getByText(messages.about.defaultMessage)).toBeInTheDocument();
|
||||||
expect(getByText(messages.other.defaultMessage)).toBeInTheDocument();
|
expect(getByText(messages.other.defaultMessage)).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
it('renders about descriptions correctly', () => {
|
it('renders about descriptions correctly', () => {
|
||||||
const { getByText } = render(<RootWrapper />);
|
const { getByText } = render(<SettingsSidebar courseId={courseId} />);
|
||||||
const aboutThirtyDescription = getByText('When you enter strings as policy values, ensure that you use double quotation marks (“) around the string. Do not use single quotation marks (‘).');
|
const aboutThirtyDescription = getByText('When you enter strings as policy values, ensure that you use double quotation marks (“) around the string. Do not use single quotation marks (‘).');
|
||||||
expect(getByText(messages.aboutDescription1.defaultMessage)).toBeInTheDocument();
|
expect(getByText(messages.aboutDescription1.defaultMessage)).toBeInTheDocument();
|
||||||
expect(getByText(messages.aboutDescription2.defaultMessage)).toBeInTheDocument();
|
expect(getByText(messages.aboutDescription2.defaultMessage)).toBeInTheDocument();
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
.form-group-custom {
|
.form-group-custom {
|
||||||
.pgn__form-label {
|
.pgn__form-label {
|
||||||
font: normal $font-weight-bold .75rem/1.25rem $font-family-base;
|
font: normal var(--pgn-typography-font-weight-bold) .75rem/1.25rem var(--pgn-typography-font-family-base);
|
||||||
color: $gray-500;
|
color: var(--pgn-color-gray-500);
|
||||||
margin-bottom: .5rem;
|
margin-bottom: .5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pgn__form-control-description,
|
.pgn__form-control-description,
|
||||||
.pgn__form-text {
|
.pgn__form-text {
|
||||||
font: normal $font-weight-normal .75rem/1.25rem $font-family-base;
|
font: normal var(--pgn-typography-font-weight-normal) .75rem/1.25rem var(--pgn-typography-font-family-base);
|
||||||
color: $gray-500;
|
color: var(--pgn-color-gray-500);
|
||||||
margin-top: .5rem;
|
margin-top: .5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,12 +19,12 @@
|
|||||||
|
|
||||||
.form-group-custom_isInvalid {
|
.form-group-custom_isInvalid {
|
||||||
input {
|
input {
|
||||||
border-color: $form-feedback-invalid-color;
|
border-color: var(--pgn-color-form-feedback-invalid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.feedback-error {
|
.feedback-error {
|
||||||
color: $form-feedback-invalid-color;
|
color: var(--pgn-color-form-feedback-invalid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,40 +34,40 @@
|
|||||||
.datepicker-custom-control {
|
.datepicker-custom-control {
|
||||||
display: block;
|
display: block;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
font-size: $input-font-size;
|
font-size: var(--pgn-typography-form-input-font-size-base);
|
||||||
font-weight: $input-font-weight;
|
font-weight: var(--pgn-typography-form-input-font-weight);
|
||||||
line-height: $input-line-height;
|
line-height: var(--pgn-typography-form-input-line-height-base);
|
||||||
background: $input-bg;
|
background: var(--pgn-color-form-input-bg-base);
|
||||||
border-color: $input-border-color;
|
border-color: var(--pgn-color-form-input-border);
|
||||||
border-width: $input-border-width;
|
border-width: var(--pgn-size-form-input-width-border);
|
||||||
box-shadow: $input-box-shadow;
|
box-shadow: var(--pgn-elevation-form-input-base);
|
||||||
border-radius: $input-border-radius;
|
border-radius: var(--pgn-size-form-input-radius-border-base);
|
||||||
color: $input-color;
|
color: var(--pgn-color-form-input-base);
|
||||||
padding: $input-padding-y $input-padding-x;
|
padding: var(--pgn-spacing-form-input-padding-y-base) var(--pgn-spacing-form-input-padding-x-base);
|
||||||
height: $input-height;
|
height: var(--pgn-size-form-input-height-base);
|
||||||
resize: none;
|
resize: none;
|
||||||
|
|
||||||
&:focus,
|
&:focus,
|
||||||
:focus-visible {
|
:focus-visible {
|
||||||
color: $input-focus-color;
|
color: var(--pgn-color-form-input-focus-base);
|
||||||
background-color: $input-bg;
|
background-color: var(--pgn-color-form-input-bg-base);
|
||||||
border-color: $input-focus-border-color;
|
border-color: var(--pgn-color-form-input-focus-border);
|
||||||
box-shadow: $input-focus-box-shadow;
|
box-shadow: var(--pgn-elevation-form-input-focus);
|
||||||
outline: 0;
|
outline: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
&::placeholder {
|
&::placeholder {
|
||||||
color: $input-placeholder-color;
|
color: var(--pgn-color-form-input-placeholder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.datepicker-custom-control_readonly {
|
.datepicker-custom-control_readonly {
|
||||||
border-color: transparent;
|
border-color: transparent;
|
||||||
background: $input-disabled-bg;
|
background: var(--pgn-color-form-input-bg-disabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
.datepicker-custom-control_isInvalid {
|
.datepicker-custom-control_isInvalid {
|
||||||
border-color: $form-feedback-invalid-color;
|
border-color: var(--pgn-color-form-feedback-invalid);
|
||||||
}
|
}
|
||||||
|
|
||||||
.datepicker-custom-control-icon {
|
.datepicker-custom-control-icon {
|
||||||
@@ -76,7 +76,7 @@
|
|||||||
right: 1.188rem;
|
right: 1.188rem;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
transform: translateY(-50%);
|
transform: translateY(-50%);
|
||||||
color: $black;
|
color: var(--pgn-color-black);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
.text-black {
|
.text-black {
|
||||||
color: $black;
|
color: var(--pgn-color-black);
|
||||||
}
|
}
|
||||||
|
|
||||||
.h-200px {
|
.h-200px {
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
$text-color-base: $gray-700;
|
$text-color-base: var(--pgn-color-gray-700);
|
||||||
$text-color-weak: #3E3E3C;
|
$text-color-weak: #3E3E3C;
|
||||||
|
|||||||
@@ -1,14 +1,9 @@
|
|||||||
import { render, waitFor } from '@testing-library/react';
|
// @ts-check
|
||||||
import userEvent from '@testing-library/user-event';
|
import userEvent from '@testing-library/user-event';
|
||||||
import { IntlProvider } from '@edx/frontend-platform/i18n';
|
|
||||||
import { initializeMockApp } from '@edx/frontend-platform';
|
|
||||||
import { AppProvider } from '@edx/frontend-platform/react';
|
|
||||||
import MockAdapter from 'axios-mock-adapter';
|
|
||||||
import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';
|
|
||||||
|
|
||||||
|
import { initializeMocks, render, waitFor } from '../testUtils';
|
||||||
import { RequestStatus } from '../data/constants';
|
import { RequestStatus } from '../data/constants';
|
||||||
import { executeThunk } from '../utils';
|
import { executeThunk } from '../utils';
|
||||||
import initializeStore from '../store';
|
|
||||||
import { getCertificatesApiUrl } from './data/api';
|
import { getCertificatesApiUrl } from './data/api';
|
||||||
import { fetchCertificates } from './data/thunks';
|
import { fetchCertificates } from './data/thunks';
|
||||||
import { certificatesDataMock } from './__mocks__';
|
import { certificatesDataMock } from './__mocks__';
|
||||||
@@ -19,26 +14,13 @@ let axiosMock;
|
|||||||
let store;
|
let store;
|
||||||
const courseId = 'course-123';
|
const courseId = 'course-123';
|
||||||
|
|
||||||
const renderComponent = (props) => render(
|
const renderComponent = (props) => render(<Certificates courseId={courseId} {...props} />);
|
||||||
<AppProvider store={store} messages={{}}>
|
|
||||||
<IntlProvider locale="en">
|
|
||||||
<Certificates courseId={courseId} {...props} />
|
|
||||||
</IntlProvider>
|
|
||||||
</AppProvider>,
|
|
||||||
);
|
|
||||||
|
|
||||||
describe('Certificates', () => {
|
describe('Certificates', () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
initializeMockApp({
|
const mocks = initializeMocks();
|
||||||
authenticatedUser: {
|
store = mocks.reduxStore;
|
||||||
userId: 3,
|
axiosMock = mocks.axiosMock;
|
||||||
username: 'abc123',
|
|
||||||
administrator: true,
|
|
||||||
roles: [],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
store = initializeStore();
|
|
||||||
axiosMock = new MockAdapter(getAuthenticatedHttpClient());
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('renders WithoutModes when there are certificates but no certificate modes', async () => {
|
it('renders WithoutModes when there are certificates but no certificate modes', async () => {
|
||||||
@@ -129,11 +111,13 @@ describe('Certificates', () => {
|
|||||||
.reply(200, noCertificatesMock);
|
.reply(200, noCertificatesMock);
|
||||||
await executeThunk(fetchCertificates(courseId), store.dispatch);
|
await executeThunk(fetchCertificates(courseId), store.dispatch);
|
||||||
|
|
||||||
|
const user = userEvent.setup();
|
||||||
|
|
||||||
const { queryByTestId, getByTestId, getByRole } = renderComponent();
|
const { queryByTestId, getByTestId, getByRole } = renderComponent();
|
||||||
|
|
||||||
await waitFor(() => {
|
await waitFor(async () => {
|
||||||
const addCertificateButton = getByRole('button', { name: messages.setupCertificateBtn.defaultMessage });
|
const addCertificateButton = getByRole('button', { name: messages.setupCertificateBtn.defaultMessage });
|
||||||
userEvent.click(addCertificateButton);
|
await user.click(addCertificateButton);
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(getByTestId('certificates-create-form')).toBeInTheDocument();
|
expect(getByTestId('certificates-create-form')).toBeInTheDocument();
|
||||||
@@ -149,11 +133,13 @@ describe('Certificates', () => {
|
|||||||
.reply(200, certificatesDataMock);
|
.reply(200, certificatesDataMock);
|
||||||
await executeThunk(fetchCertificates(courseId), store.dispatch);
|
await executeThunk(fetchCertificates(courseId), store.dispatch);
|
||||||
|
|
||||||
|
const user = userEvent.setup();
|
||||||
|
|
||||||
const { queryByTestId, getByTestId, getAllByLabelText } = renderComponent();
|
const { queryByTestId, getByTestId, getAllByLabelText } = renderComponent();
|
||||||
|
|
||||||
await waitFor(() => {
|
await waitFor(async () => {
|
||||||
const editCertificateButton = getAllByLabelText(messages.editTooltip.defaultMessage)[0];
|
const editCertificateButton = getAllByLabelText(messages.editTooltip.defaultMessage)[0];
|
||||||
userEvent.click(editCertificateButton);
|
await user.click(editCertificateButton);
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(getByTestId('certificates-edit-form')).toBeInTheDocument();
|
expect(getByTestId('certificates-edit-form')).toBeInTheDocument();
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
import { render, waitFor, within } from '@testing-library/react';
|
import {
|
||||||
|
render, waitFor, within,
|
||||||
|
} from '@testing-library/react';
|
||||||
import userEvent from '@testing-library/user-event';
|
import userEvent from '@testing-library/user-event';
|
||||||
import { Provider } from 'react-redux';
|
import { Provider } from 'react-redux';
|
||||||
import { IntlProvider } from '@edx/frontend-platform/i18n';
|
import { IntlProvider } from '@edx/frontend-platform/i18n';
|
||||||
@@ -85,17 +87,19 @@ describe('CertificateCreateForm', () => {
|
|||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const user = userEvent.setup();
|
||||||
|
|
||||||
const { getByPlaceholderText, getByRole, getByDisplayValue } = renderComponent();
|
const { getByPlaceholderText, getByRole, getByDisplayValue } = renderComponent();
|
||||||
|
|
||||||
userEvent.type(
|
await user.type(
|
||||||
getByPlaceholderText(detailsMessages.detailsCourseTitleOverride.defaultMessage),
|
getByPlaceholderText(detailsMessages.detailsCourseTitleOverride.defaultMessage),
|
||||||
courseTitleOverrideValue,
|
courseTitleOverrideValue,
|
||||||
);
|
);
|
||||||
userEvent.type(
|
await user.type(
|
||||||
getByPlaceholderText(signatoryMessages.namePlaceholder.defaultMessage),
|
getByPlaceholderText(signatoryMessages.namePlaceholder.defaultMessage),
|
||||||
signatoryNameValue,
|
signatoryNameValue,
|
||||||
);
|
);
|
||||||
userEvent.click(getByRole('button', { name: messages.cardCreate.defaultMessage }));
|
await user.click(getByRole('button', { name: messages.cardCreate.defaultMessage }));
|
||||||
|
|
||||||
axiosMock.onPost(
|
axiosMock.onPost(
|
||||||
getCertificateApiUrl(courseId),
|
getCertificateApiUrl(courseId),
|
||||||
@@ -109,8 +113,9 @@ describe('CertificateCreateForm', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('cancel certificates creation', async () => {
|
it('cancel certificates creation', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const { getByRole } = renderComponent();
|
const { getByRole } = renderComponent();
|
||||||
userEvent.click(getByRole('button', { name: messages.cardCancel.defaultMessage }));
|
await user.click(getByRole('button', { name: messages.cardCancel.defaultMessage }));
|
||||||
|
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(store.getState().certificates.componentMode).toBe(MODE_STATES.noCertificates);
|
expect(store.getState().certificates.componentMode).toBe(MODE_STATES.noCertificates);
|
||||||
@@ -127,13 +132,14 @@ describe('CertificateCreateForm', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('add and delete signatory', async () => {
|
it('add and delete signatory', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const {
|
const {
|
||||||
getAllByRole, queryAllByRole, getByText, getByRole,
|
getAllByRole, queryAllByRole, getByText, getByRole,
|
||||||
} = renderComponent();
|
} = renderComponent();
|
||||||
|
|
||||||
const addSignatoryBtn = getByText(signatoryMessages.addSignatoryButton.defaultMessage);
|
const addSignatoryBtn = getByText(signatoryMessages.addSignatoryButton.defaultMessage);
|
||||||
|
|
||||||
userEvent.click(addSignatoryBtn);
|
await user.click(addSignatoryBtn);
|
||||||
|
|
||||||
const deleteIcons = getAllByRole('button', { name: messages.deleteTooltip.defaultMessage });
|
const deleteIcons = getAllByRole('button', { name: messages.deleteTooltip.defaultMessage });
|
||||||
|
|
||||||
@@ -141,13 +147,13 @@ describe('CertificateCreateForm', () => {
|
|||||||
expect(deleteIcons.length).toBe(2);
|
expect(deleteIcons.length).toBe(2);
|
||||||
});
|
});
|
||||||
|
|
||||||
userEvent.click(deleteIcons[0]);
|
await user.click(deleteIcons[0]);
|
||||||
|
|
||||||
const confirModal = getByRole('dialog');
|
const confirModal = getByRole('dialog');
|
||||||
const deleteModalButton = within(confirModal).getByRole('button', { name: messages.deleteTooltip.defaultMessage });
|
const deleteModalButton = within(confirModal).getByRole('button', { name: messages.deleteTooltip.defaultMessage });
|
||||||
|
|
||||||
userEvent.click(deleteIcons[0]);
|
await user.click(deleteIcons[0]);
|
||||||
userEvent.click(deleteModalButton);
|
await user.click(deleteModalButton);
|
||||||
|
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(queryAllByRole('button', { name: messages.deleteTooltip.defaultMessage }).length).toBe(0);
|
expect(queryAllByRole('button', { name: messages.deleteTooltip.defaultMessage }).length).toBe(0);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Provider, useDispatch } from 'react-redux';
|
import { Provider, useDispatch } from 'react-redux';
|
||||||
import { useParams } from 'react-router-dom';
|
import { useParams } from 'react-router-dom';
|
||||||
import { render, waitFor } from '@testing-library/react';
|
import { render, screen } from '@testing-library/react';
|
||||||
import userEvent from '@testing-library/user-event';
|
import userEvent from '@testing-library/user-event';
|
||||||
import { IntlProvider } from '@edx/frontend-platform/i18n';
|
import { IntlProvider } from '@edx/frontend-platform/i18n';
|
||||||
import { initializeMockApp } from '@edx/frontend-platform';
|
import { initializeMockApp } from '@edx/frontend-platform';
|
||||||
@@ -86,24 +86,24 @@ describe('CertificateDetails', () => {
|
|||||||
expect(getByText(defaultProps.detailsCourseTitle)).toBeInTheDocument();
|
expect(getByText(defaultProps.detailsCourseTitle)).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('opens confirm modal on delete button click', () => {
|
it('opens confirm modal on delete button click', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const { getByRole, getByText } = renderComponent(defaultProps);
|
const { getByRole, getByText } = renderComponent(defaultProps);
|
||||||
const deleteButton = getByRole('button', { name: commonMessages.deleteTooltip.defaultMessage });
|
const deleteButton = getByRole('button', { name: commonMessages.deleteTooltip.defaultMessage });
|
||||||
userEvent.click(deleteButton);
|
await user.click(deleteButton);
|
||||||
|
|
||||||
expect(getByText(messages.deleteCertificateConfirmationTitle.defaultMessage)).toBeInTheDocument();
|
expect(getByText(messages.deleteCertificateConfirmationTitle.defaultMessage)).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('dispatches delete action on confirm modal action', async () => {
|
it('dispatches delete action on confirm modal action', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const props = { ...defaultProps, courseId, certificateId };
|
const props = { ...defaultProps, courseId, certificateId };
|
||||||
const { getByRole } = renderComponent(props);
|
const { getByRole } = renderComponent(props);
|
||||||
const deleteButton = getByRole('button', { name: commonMessages.deleteTooltip.defaultMessage });
|
const deleteButton = getByRole('button', { name: commonMessages.deleteTooltip.defaultMessage });
|
||||||
userEvent.click(deleteButton);
|
await user.click(deleteButton);
|
||||||
|
|
||||||
await waitFor(() => {
|
const confirmActionButton = await screen.findByRole('button', { name: commonMessages.deleteTooltip.defaultMessage });
|
||||||
const confirmActionButton = getByRole('button', { name: commonMessages.deleteTooltip.defaultMessage });
|
await user.click(confirmActionButton);
|
||||||
userEvent.click(confirmActionButton);
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(mockDispatch).toHaveBeenCalledWith(deleteCourseCertificate(courseId, certificateId));
|
expect(mockDispatch).toHaveBeenCalledWith(deleteCourseCertificate(courseId, certificateId));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -58,11 +58,12 @@ describe('CertificateDetails', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('handles input change in create mode', async () => {
|
it('handles input change in create mode', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const { getByPlaceholderText } = renderComponent(defaultProps);
|
const { getByPlaceholderText } = renderComponent(defaultProps);
|
||||||
const input = getByPlaceholderText(messages.detailsCourseTitleOverride.defaultMessage);
|
const input = getByPlaceholderText(messages.detailsCourseTitleOverride.defaultMessage);
|
||||||
const newInputValue = 'New Title';
|
const newInputValue = 'New Title';
|
||||||
|
|
||||||
userEvent.type(input, newInputValue);
|
await user.type(input, newInputValue);
|
||||||
|
|
||||||
waitFor(() => {
|
waitFor(() => {
|
||||||
expect(input.value).toBe(newInputValue);
|
expect(input.value).toBe(newInputValue);
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import { Provider } from 'react-redux';
|
import { Provider } from 'react-redux';
|
||||||
import { render, waitFor, within } from '@testing-library/react';
|
import {
|
||||||
|
render, waitFor, within,
|
||||||
|
} from '@testing-library/react';
|
||||||
import userEvent from '@testing-library/user-event';
|
import userEvent from '@testing-library/user-event';
|
||||||
import { initializeMockApp } from '@edx/frontend-platform';
|
import { initializeMockApp } from '@edx/frontend-platform';
|
||||||
import { IntlProvider } from '@edx/frontend-platform/i18n';
|
import { IntlProvider } from '@edx/frontend-platform/i18n';
|
||||||
@@ -68,15 +70,15 @@ describe('CertificateEditForm Component', () => {
|
|||||||
}],
|
}],
|
||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
|
const user = userEvent.setup();
|
||||||
const { getByDisplayValue, getByRole, getByPlaceholderText } = renderComponent();
|
const { getByDisplayValue, getByRole, getByPlaceholderText } = renderComponent();
|
||||||
|
|
||||||
userEvent.type(
|
await user.type(
|
||||||
getByPlaceholderText(messagesDetails.detailsCourseTitleOverride.defaultMessage),
|
getByPlaceholderText(messagesDetails.detailsCourseTitleOverride.defaultMessage),
|
||||||
courseTitleOverrideValue,
|
courseTitleOverrideValue,
|
||||||
);
|
);
|
||||||
|
|
||||||
userEvent.click(getByRole('button', { name: messages.saveTooltip.defaultMessage }));
|
await user.click(getByRole('button', { name: messages.saveTooltip.defaultMessage }));
|
||||||
|
|
||||||
axiosMock.onPost(
|
axiosMock.onPost(
|
||||||
getUpdateCertificateApiUrl(courseId, certificatesDataMock.certificates[0].id),
|
getUpdateCertificateApiUrl(courseId, certificatesDataMock.certificates[0].id),
|
||||||
@@ -91,16 +93,17 @@ describe('CertificateEditForm Component', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('deletes a certificate and updates the store', async () => {
|
it('deletes a certificate and updates the store', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
axiosMock.onDelete(
|
axiosMock.onDelete(
|
||||||
getUpdateCertificateApiUrl(courseId, certificatesDataMock.certificates[0].id),
|
getUpdateCertificateApiUrl(courseId, certificatesDataMock.certificates[0].id),
|
||||||
).reply(200);
|
).reply(200);
|
||||||
|
|
||||||
const { getByRole } = renderComponent();
|
const { getByRole } = renderComponent();
|
||||||
|
|
||||||
userEvent.click(getByRole('button', { name: messages.deleteTooltip.defaultMessage }));
|
await user.click(getByRole('button', { name: messages.deleteTooltip.defaultMessage }));
|
||||||
|
|
||||||
const confirmDeleteModal = getByRole('dialog');
|
const confirmDeleteModal = getByRole('dialog');
|
||||||
userEvent.click(within(confirmDeleteModal).getByRole('button', { name: messages.deleteTooltip.defaultMessage }));
|
await user.click(within(confirmDeleteModal).getByRole('button', { name: messages.deleteTooltip.defaultMessage }));
|
||||||
|
|
||||||
await executeThunk(deleteCourseCertificate(courseId, certificatesDataMock.certificates[0].id), store.dispatch);
|
await executeThunk(deleteCourseCertificate(courseId, certificatesDataMock.certificates[0].id), store.dispatch);
|
||||||
|
|
||||||
@@ -110,16 +113,17 @@ describe('CertificateEditForm Component', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('updates loading status if delete fails', async () => {
|
it('updates loading status if delete fails', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
axiosMock.onDelete(
|
axiosMock.onDelete(
|
||||||
getUpdateCertificateApiUrl(courseId, certificatesDataMock.certificates[0].id),
|
getUpdateCertificateApiUrl(courseId, certificatesDataMock.certificates[0].id),
|
||||||
).reply(404);
|
).reply(404);
|
||||||
|
|
||||||
const { getByRole } = renderComponent();
|
const { getByRole } = renderComponent();
|
||||||
|
|
||||||
userEvent.click(getByRole('button', { name: messages.deleteTooltip.defaultMessage }));
|
await user.click(getByRole('button', { name: messages.deleteTooltip.defaultMessage }));
|
||||||
|
|
||||||
const confirmDeleteModal = getByRole('dialog');
|
const confirmDeleteModal = getByRole('dialog');
|
||||||
userEvent.click(within(confirmDeleteModal).getByRole('button', { name: messages.deleteTooltip.defaultMessage }));
|
await user.click(within(confirmDeleteModal).getByRole('button', { name: messages.deleteTooltip.defaultMessage }));
|
||||||
|
|
||||||
await executeThunk(deleteCourseCertificate(courseId, certificatesDataMock.certificates[0].id), store.dispatch);
|
await executeThunk(deleteCourseCertificate(courseId, certificatesDataMock.certificates[0].id), store.dispatch);
|
||||||
|
|
||||||
@@ -129,11 +133,12 @@ describe('CertificateEditForm Component', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('cancel edit form', async () => {
|
it('cancel edit form', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const { getByRole } = renderComponent();
|
const { getByRole } = renderComponent();
|
||||||
|
|
||||||
expect(store.getState().certificates.componentMode).toBe(MODE_STATES.editAll);
|
expect(store.getState().certificates.componentMode).toBe(MODE_STATES.editAll);
|
||||||
|
|
||||||
userEvent.click(getByRole('button', { name: messages.cardCancel.defaultMessage }));
|
await user.click(getByRole('button', { name: messages.cardCancel.defaultMessage }));
|
||||||
|
|
||||||
expect(store.getState().certificates.componentMode).toBe(MODE_STATES.view);
|
expect(store.getState().certificates.componentMode).toBe(MODE_STATES.view);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -88,20 +88,22 @@ describe('CertificateSignatories', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('adds a new signatory when add button is clicked', () => {
|
it('adds a new signatory when add button is clicked', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const { getByText } = renderComponent({ ...defaultProps, isForm: true });
|
const { getByText } = renderComponent({ ...defaultProps, isForm: true });
|
||||||
|
|
||||||
userEvent.click(getByText(messages.addSignatoryButton.defaultMessage));
|
await user.click(getByText(messages.addSignatoryButton.defaultMessage));
|
||||||
expect(useCreateSignatory().handleAddSignatory).toHaveBeenCalled();
|
expect(useCreateSignatory().handleAddSignatory).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('calls remove for the correct signatory when delete icon is clicked', async () => {
|
it('calls remove for the correct signatory when delete icon is clicked', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const { getAllByRole } = renderComponent(defaultProps);
|
const { getAllByRole } = renderComponent(defaultProps);
|
||||||
|
|
||||||
const deleteIcons = getAllByRole('button', { name: commonMessages.deleteTooltip.defaultMessage });
|
const deleteIcons = getAllByRole('button', { name: commonMessages.deleteTooltip.defaultMessage });
|
||||||
expect(deleteIcons.length).toBe(signatoriesMock.length);
|
expect(deleteIcons.length).toBe(signatoriesMock.length);
|
||||||
|
|
||||||
userEvent.click(deleteIcons[0]);
|
await user.click(deleteIcons[0]);
|
||||||
|
|
||||||
waitFor(() => {
|
waitFor(() => {
|
||||||
expect(mockArrayHelpers.remove).toHaveBeenCalledWith(0);
|
expect(mockArrayHelpers.remove).toHaveBeenCalledWith(0);
|
||||||
|
|||||||
@@ -34,11 +34,12 @@ describe('Signatory Component', () => {
|
|||||||
expect(queryByText(messages.namePlaceholder.defaultMessage)).not.toBeInTheDocument();
|
expect(queryByText(messages.namePlaceholder.defaultMessage)).not.toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('calls handleEdit when the edit button is clicked', () => {
|
it('calls handleEdit when the edit button is clicked', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const { getByRole } = renderSignatory(defaultProps);
|
const { getByRole } = renderSignatory(defaultProps);
|
||||||
|
|
||||||
const editButton = getByRole('button', { name: commonMessages.editTooltip.defaultMessage });
|
const editButton = getByRole('button', { name: commonMessages.editTooltip.defaultMessage });
|
||||||
userEvent.click(editButton);
|
await user.click(editButton);
|
||||||
|
|
||||||
expect(mockHandleEdit).toHaveBeenCalled();
|
expect(mockHandleEdit).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -60,12 +60,13 @@ describe('Signatory Component', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('handles input change', async () => {
|
it('handles input change', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const handleChange = jest.fn();
|
const handleChange = jest.fn();
|
||||||
const { getByPlaceholderText } = renderSignatory({ ...defaultProps, handleChange });
|
const { getByPlaceholderText } = renderSignatory({ ...defaultProps, handleChange });
|
||||||
const input = getByPlaceholderText(messages.namePlaceholder.defaultMessage);
|
const input = getByPlaceholderText(messages.namePlaceholder.defaultMessage);
|
||||||
const newInputValue = 'Jane Doe';
|
const newInputValue = 'Jane Doe';
|
||||||
|
|
||||||
userEvent.type(input, newInputValue, { name: 'signatories[0].name' });
|
await user.type(input, newInputValue, { name: 'signatories[0].name' });
|
||||||
|
|
||||||
waitFor(() => {
|
waitFor(() => {
|
||||||
expect(handleChange).toHaveBeenCalledWith(expect.anything());
|
expect(handleChange).toHaveBeenCalledWith(expect.anything());
|
||||||
@@ -73,7 +74,8 @@ describe('Signatory Component', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('opens image upload modal on button click', () => {
|
it('opens image upload modal on button click', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const { getByRole, queryByRole } = renderSignatory(defaultProps);
|
const { getByRole, queryByRole } = renderSignatory(defaultProps);
|
||||||
const replaceButton = getByRole(
|
const replaceButton = getByRole(
|
||||||
'button',
|
'button',
|
||||||
@@ -82,28 +84,30 @@ describe('Signatory Component', () => {
|
|||||||
|
|
||||||
expect(queryByRole('presentation')).not.toBeInTheDocument();
|
expect(queryByRole('presentation')).not.toBeInTheDocument();
|
||||||
|
|
||||||
userEvent.click(replaceButton);
|
await user.click(replaceButton);
|
||||||
|
|
||||||
expect(getByRole('presentation')).toBeInTheDocument();
|
expect(getByRole('presentation')).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('shows confirm modal on delete icon click', async () => {
|
it('shows confirm modal on delete icon click', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const { getByLabelText, getByText } = renderSignatory(defaultProps);
|
const { getByLabelText, getByText } = renderSignatory(defaultProps);
|
||||||
const deleteIcon = getByLabelText(commonMessages.deleteTooltip.defaultMessage);
|
const deleteIcon = getByLabelText(commonMessages.deleteTooltip.defaultMessage);
|
||||||
|
|
||||||
userEvent.click(deleteIcon);
|
await user.click(deleteIcon);
|
||||||
|
|
||||||
expect(getByText(messages.deleteSignatoryConfirmationMessage.defaultMessage)).toBeInTheDocument();
|
expect(getByText(messages.deleteSignatoryConfirmationMessage.defaultMessage)).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('cancels deletion of a signatory', () => {
|
it('cancels deletion of a signatory', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const { getByRole } = renderSignatory(defaultProps);
|
const { getByRole } = renderSignatory(defaultProps);
|
||||||
|
|
||||||
const deleteIcon = getByRole('button', { name: commonMessages.deleteTooltip.defaultMessage });
|
const deleteIcon = getByRole('button', { name: commonMessages.deleteTooltip.defaultMessage });
|
||||||
userEvent.click(deleteIcon);
|
await user.click(deleteIcon);
|
||||||
|
|
||||||
const cancelButton = getByRole('button', { name: commonMessages.cardCancel.defaultMessage });
|
const cancelButton = getByRole('button', { name: commonMessages.cardCancel.defaultMessage });
|
||||||
userEvent.click(cancelButton);
|
await user.click(cancelButton);
|
||||||
|
|
||||||
expect(defaultProps.handleDeleteSignatory).not.toHaveBeenCalled();
|
expect(defaultProps.handleDeleteSignatory).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
import { Provider } from 'react-redux';
|
import { Provider } from 'react-redux';
|
||||||
import { render, waitFor, within } from '@testing-library/react';
|
import {
|
||||||
|
render, waitFor, within,
|
||||||
|
} from '@testing-library/react';
|
||||||
import userEvent from '@testing-library/user-event';
|
import userEvent from '@testing-library/user-event';
|
||||||
import { initializeMockApp } from '@edx/frontend-platform';
|
import { initializeMockApp } from '@edx/frontend-platform';
|
||||||
import { IntlProvider } from '@edx/frontend-platform/i18n';
|
import { IntlProvider } from '@edx/frontend-platform/i18n';
|
||||||
@@ -62,6 +64,7 @@ describe('CertificatesList Component', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('update certificate', async () => {
|
it('update certificate', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const {
|
const {
|
||||||
getByText, queryByText, getByPlaceholderText, getByRole, getAllByLabelText,
|
getByText, queryByText, getByPlaceholderText, getByRole, getAllByLabelText,
|
||||||
} = renderComponent();
|
} = renderComponent();
|
||||||
@@ -80,13 +83,13 @@ describe('CertificatesList Component', () => {
|
|||||||
|
|
||||||
const editButtons = getAllByLabelText(messages.editTooltip.defaultMessage);
|
const editButtons = getAllByLabelText(messages.editTooltip.defaultMessage);
|
||||||
|
|
||||||
userEvent.click(editButtons[1]);
|
await user.click(editButtons[1]);
|
||||||
|
|
||||||
const nameInput = getByPlaceholderText(signatoryMessages.namePlaceholder.defaultMessage);
|
const nameInput = getByPlaceholderText(signatoryMessages.namePlaceholder.defaultMessage);
|
||||||
userEvent.clear(nameInput);
|
await user.clear(nameInput);
|
||||||
userEvent.type(nameInput, signatoryNameValue);
|
await user.type(nameInput, signatoryNameValue);
|
||||||
|
|
||||||
userEvent.click(getByRole('button', { name: messages.saveTooltip.defaultMessage }));
|
await user.click(getByRole('button', { name: messages.saveTooltip.defaultMessage }));
|
||||||
|
|
||||||
axiosMock
|
axiosMock
|
||||||
.onPost(getUpdateCertificateApiUrl(courseId, certificatesMock.id))
|
.onPost(getUpdateCertificateApiUrl(courseId, certificatesMock.id))
|
||||||
@@ -100,6 +103,7 @@ describe('CertificatesList Component', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('toggle edit signatory', async () => {
|
it('toggle edit signatory', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const {
|
const {
|
||||||
getAllByLabelText, queryByPlaceholderText, getByTestId, getByPlaceholderText,
|
getAllByLabelText, queryByPlaceholderText, getByTestId, getByPlaceholderText,
|
||||||
} = renderComponent();
|
} = renderComponent();
|
||||||
@@ -107,13 +111,13 @@ describe('CertificatesList Component', () => {
|
|||||||
|
|
||||||
expect(editButtons.length).toBe(3);
|
expect(editButtons.length).toBe(3);
|
||||||
|
|
||||||
userEvent.click(editButtons[1]);
|
await user.click(editButtons[1]);
|
||||||
|
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(getByPlaceholderText(signatoryMessages.namePlaceholder.defaultMessage)).toBeInTheDocument();
|
expect(getByPlaceholderText(signatoryMessages.namePlaceholder.defaultMessage)).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
userEvent.click(within(getByTestId('signatory-form')).getByRole('button', { name: messages.cardCancel.defaultMessage }));
|
await user.click(within(getByTestId('signatory-form')).getByRole('button', { name: messages.cardCancel.defaultMessage }));
|
||||||
|
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(queryByPlaceholderText(signatoryMessages.namePlaceholder.defaultMessage)).not.toBeInTheDocument();
|
expect(queryByPlaceholderText(signatoryMessages.namePlaceholder.defaultMessage)).not.toBeInTheDocument();
|
||||||
@@ -121,10 +125,11 @@ describe('CertificatesList Component', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('toggle certificate edit all', async () => {
|
it('toggle certificate edit all', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const { getByTestId } = renderComponent();
|
const { getByTestId } = renderComponent();
|
||||||
const detailsSection = getByTestId('certificate-details');
|
const detailsSection = getByTestId('certificate-details');
|
||||||
const editButton = within(detailsSection).getByLabelText(messages.editTooltip.defaultMessage);
|
const editButton = within(detailsSection).getByLabelText(messages.editTooltip.defaultMessage);
|
||||||
userEvent.click(editButton);
|
await user.click(editButton);
|
||||||
|
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(store.getState().certificates.componentMode).toBe(MODE_STATES.editAll);
|
expect(store.getState().certificates.componentMode).toBe(MODE_STATES.editAll);
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ export async function createCertificate(courseId, certificatesData) {
|
|||||||
getCertificateApiUrl(courseId),
|
getCertificateApiUrl(courseId),
|
||||||
prepareCertificatePayload(certificatesData),
|
prepareCertificatePayload(certificatesData),
|
||||||
);
|
);
|
||||||
|
/* istanbul ignore next */
|
||||||
return camelCaseObject(data);
|
return camelCaseObject(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,6 +51,7 @@ export async function updateCertificate(courseId, certificateData) {
|
|||||||
getUpdateCertificateApiUrl(courseId, certificateData.id),
|
getUpdateCertificateApiUrl(courseId, certificateData.id),
|
||||||
prepareCertificatePayload(certificateData),
|
prepareCertificatePayload(certificateData),
|
||||||
);
|
);
|
||||||
|
/* istanbul ignore next */
|
||||||
return camelCaseObject(data);
|
return camelCaseObject(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,12 +29,11 @@ const slice = createSlice({
|
|||||||
fetchCertificatesSuccess: (state, { payload }) => {
|
fetchCertificatesSuccess: (state, { payload }) => {
|
||||||
Object.assign(state.certificatesData, payload);
|
Object.assign(state.certificatesData, payload);
|
||||||
},
|
},
|
||||||
createCertificateSuccess: (state, action) => {
|
createCertificateSuccess: /* istanbul ignore next */ (state, action) => {
|
||||||
state.certificatesData.certificates.push(action.payload);
|
state.certificatesData.certificates.push(action.payload);
|
||||||
},
|
},
|
||||||
updateCertificateSuccess: (state, action) => {
|
updateCertificateSuccess: /* istanbul ignore next */ (state, action) => {
|
||||||
const index = state.certificatesData.certificates.findIndex(c => c.id === action.payload.id);
|
const index = state.certificatesData.certificates.findIndex(c => c.id === action.payload.id);
|
||||||
|
|
||||||
if (index !== -1) {
|
if (index !== -1) {
|
||||||
state.certificatesData.certificates[index] = action.payload;
|
state.certificatesData.certificates[index] = action.payload;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
/* istanbul ignore file */
|
||||||
import { RequestStatus } from '../../data/constants';
|
import { RequestStatus } from '../../data/constants';
|
||||||
import {
|
import {
|
||||||
hideProcessingNotification,
|
hideProcessingNotification,
|
||||||
|
|||||||
@@ -1,14 +1,9 @@
|
|||||||
import { render, waitFor } from '@testing-library/react';
|
// @ts-check
|
||||||
import { IntlProvider } from '@edx/frontend-platform/i18n';
|
|
||||||
import { initializeMockApp } from '@edx/frontend-platform';
|
|
||||||
import { AppProvider } from '@edx/frontend-platform/react';
|
|
||||||
|
|
||||||
import initializeStore from '../../../store';
|
|
||||||
import CertificatesSidebar from './CertificatesSidebar';
|
import CertificatesSidebar from './CertificatesSidebar';
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
|
import { initializeMocks, render, waitFor } from '../../../testUtils';
|
||||||
|
|
||||||
const courseId = 'course-123';
|
const courseId = 'course-123';
|
||||||
let store;
|
|
||||||
|
|
||||||
jest.mock('@edx/frontend-platform/i18n', () => ({
|
jest.mock('@edx/frontend-platform/i18n', () => ({
|
||||||
...jest.requireActual('@edx/frontend-platform/i18n'),
|
...jest.requireActual('@edx/frontend-platform/i18n'),
|
||||||
@@ -17,25 +12,11 @@ jest.mock('@edx/frontend-platform/i18n', () => ({
|
|||||||
}),
|
}),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const renderComponent = (props) => render(
|
const renderComponent = (props) => render(<CertificatesSidebar courseId={courseId} {...props} />);
|
||||||
<AppProvider store={store} messages={{}}>
|
|
||||||
<IntlProvider locale="en">
|
|
||||||
<CertificatesSidebar courseId={courseId} {...props} />
|
|
||||||
</IntlProvider>
|
|
||||||
</AppProvider>,
|
|
||||||
);
|
|
||||||
|
|
||||||
describe('CertificatesSidebar', () => {
|
describe('CertificatesSidebar', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
initializeMockApp({
|
initializeMocks();
|
||||||
authenticatedUser: {
|
|
||||||
userId: 3,
|
|
||||||
username: 'abc123',
|
|
||||||
administrator: true,
|
|
||||||
roles: [],
|
|
||||||
},
|
|
||||||
});
|
|
||||||
store = initializeStore();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('renders correctly', async () => {
|
it('renders correctly', async () => {
|
||||||
|
|||||||
@@ -53,16 +53,17 @@ describe('HeaderButtons Component', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('updates preview URL param based on selected dropdown item', async () => {
|
it('updates preview URL param based on selected dropdown item', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const { getByRole } = renderComponent();
|
const { getByRole } = renderComponent();
|
||||||
const previewLink = getByRole('link', { name: messages.headingActionsPreview.defaultMessage });
|
const previewLink = getByRole('link', { name: messages.headingActionsPreview.defaultMessage });
|
||||||
|
|
||||||
expect(previewLink).toHaveAttribute('href', expect.stringContaining(certificatesDataMock.courseModes[0]));
|
expect(previewLink).toHaveAttribute('href', expect.stringContaining(certificatesDataMock.courseModes[0]));
|
||||||
|
|
||||||
const dropdownButton = getByRole('button', { name: certificatesDataMock.courseModes[0] });
|
const dropdownButton = getByRole('button', { name: certificatesDataMock.courseModes[0] });
|
||||||
userEvent.click(dropdownButton);
|
await user.click(dropdownButton);
|
||||||
|
|
||||||
const verifiedMode = await getByRole('button', { name: certificatesDataMock.courseModes[1] });
|
const verifiedMode = await getByRole('button', { name: certificatesDataMock.courseModes[1] });
|
||||||
userEvent.click(verifiedMode);
|
await user.click(verifiedMode);
|
||||||
|
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(previewLink).toHaveAttribute('href', expect.stringContaining(certificatesDataMock.courseModes[1]));
|
expect(previewLink).toHaveAttribute('href', expect.stringContaining(certificatesDataMock.courseModes[1]));
|
||||||
@@ -70,6 +71,7 @@ describe('HeaderButtons Component', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('activates certificate when button is clicked', async () => {
|
it('activates certificate when button is clicked', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const newCertificateData = {
|
const newCertificateData = {
|
||||||
...certificatesDataMock,
|
...certificatesDataMock,
|
||||||
isActive: true,
|
isActive: true,
|
||||||
@@ -78,7 +80,7 @@ describe('HeaderButtons Component', () => {
|
|||||||
const { getByRole, queryByRole } = renderComponent();
|
const { getByRole, queryByRole } = renderComponent();
|
||||||
|
|
||||||
const activationButton = getByRole('button', { name: messages.headingActionsActivate.defaultMessage });
|
const activationButton = getByRole('button', { name: messages.headingActionsActivate.defaultMessage });
|
||||||
userEvent.click(activationButton);
|
await user.click(activationButton);
|
||||||
|
|
||||||
axiosMock.onPost(
|
axiosMock.onPost(
|
||||||
getUpdateCertificateApiUrl(courseId, certificatesDataMock.certificates[0].id),
|
getUpdateCertificateApiUrl(courseId, certificatesDataMock.certificates[0].id),
|
||||||
@@ -97,6 +99,7 @@ describe('HeaderButtons Component', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('deactivates certificate when button is clicked', async () => {
|
it('deactivates certificate when button is clicked', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
axiosMock
|
axiosMock
|
||||||
.onGet(getCertificatesApiUrl(courseId))
|
.onGet(getCertificatesApiUrl(courseId))
|
||||||
.reply(200, { ...certificatesDataMock, isActive: true });
|
.reply(200, { ...certificatesDataMock, isActive: true });
|
||||||
@@ -110,7 +113,7 @@ describe('HeaderButtons Component', () => {
|
|||||||
const { getByRole, queryByRole } = renderComponent();
|
const { getByRole, queryByRole } = renderComponent();
|
||||||
|
|
||||||
const deactivateButton = getByRole('button', { name: messages.headingActionsDeactivate.defaultMessage });
|
const deactivateButton = getByRole('button', { name: messages.headingActionsDeactivate.defaultMessage });
|
||||||
userEvent.click(deactivateButton);
|
await user.click(deactivateButton);
|
||||||
|
|
||||||
axiosMock.onPost(
|
axiosMock.onPost(
|
||||||
getUpdateCertificateApiUrl(courseId, certificatesDataMock.certificates[0].id),
|
getUpdateCertificateApiUrl(courseId, certificatesDataMock.certificates[0].id),
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
.certificates {
|
.certificates {
|
||||||
.section-title {
|
.section-title {
|
||||||
color: $black;
|
color: var(--pgn-color-black);
|
||||||
}
|
}
|
||||||
|
|
||||||
.sub-header-actions {
|
.sub-header-actions {
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
.certificate-details {
|
.certificate-details {
|
||||||
.certificate-details__info {
|
.certificate-details__info {
|
||||||
color: $black;
|
color: var(--pgn-color-black);
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: baseline;
|
align-items: baseline;
|
||||||
}
|
}
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
.certificate-details__info-paragraph-course-number {
|
.certificate-details__info-paragraph-course-number {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
color: $gray-700;
|
color: var(--pgn-color-gray-700);
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: map-get($grid-breakpoints, "xl")) {
|
@media (--pgn-size-breakpoint-max-width-xl) {
|
||||||
.signatory {
|
.signatory {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ export const COURSE_CREATOR_STATES = {
|
|||||||
granted: 'granted',
|
granted: 'granted',
|
||||||
denied: 'denied',
|
denied: 'denied',
|
||||||
disallowedForThisSite: 'disallowed_for_this_site',
|
disallowedForThisSite: 'disallowed_for_this_site',
|
||||||
};
|
} as const;
|
||||||
|
|
||||||
export const DECODED_ROUTES = {
|
export const DECODED_ROUTES = {
|
||||||
COURSE_UNIT: [
|
COURSE_UNIT: [
|
||||||
@@ -105,4 +105,5 @@ export const iframeMessageTypes = {
|
|||||||
resize: 'plugin.resize',
|
resize: 'plugin.resize',
|
||||||
videoFullScreen: 'plugin.videoFullScreen',
|
videoFullScreen: 'plugin.videoFullScreen',
|
||||||
xblockEvent: 'xblock-event',
|
xblockEvent: 'xblock-event',
|
||||||
|
xblockScroll: 'xblock-scroll',
|
||||||
};
|
};
|
||||||
@@ -112,7 +112,6 @@ const CustomLoadingIndicator = () => {
|
|||||||
return (
|
return (
|
||||||
<Spinner
|
<Spinner
|
||||||
animation="border"
|
animation="border"
|
||||||
size="xl"
|
|
||||||
screenReaderText={intl.formatMessage(messages.loadingMessage)}
|
screenReaderText={intl.formatMessage(messages.loadingMessage)}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
.add-tags-button:not([disabled]):hover {
|
.add-tags-button:not([disabled]):hover {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
color: $info-900 !important;
|
color: var(--pgn-color-info-900) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.react-select-add-tags__control {
|
.react-select-add-tags__control {
|
||||||
|
|||||||
@@ -508,6 +508,7 @@ describe('<ContentTagsCollapsible />', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should handle search term change', async () => {
|
it('should handle search term change', async () => {
|
||||||
|
const user = userEvent.setup({ advanceTimers: jest.advanceTimersByTime });
|
||||||
const {
|
const {
|
||||||
getByText, getByRole, getByDisplayValue,
|
getByText, getByRole, getByDisplayValue,
|
||||||
} = await getComponent();
|
} = await getComponent();
|
||||||
@@ -523,7 +524,7 @@ describe('<ContentTagsCollapsible />', () => {
|
|||||||
const searchTerm = 'memo';
|
const searchTerm = 'memo';
|
||||||
|
|
||||||
// Trigger a change in the search field
|
// Trigger a change in the search field
|
||||||
userEvent.type(searchField, searchTerm);
|
await user.type(searchField, searchTerm);
|
||||||
|
|
||||||
await act(async () => {
|
await act(async () => {
|
||||||
// Fast-forward time by 500 milliseconds (for the debounce delay)
|
// Fast-forward time by 500 milliseconds (for the debounce delay)
|
||||||
@@ -535,14 +536,14 @@ describe('<ContentTagsCollapsible />', () => {
|
|||||||
expect(getByDisplayValue(searchTerm)).toBeInTheDocument();
|
expect(getByDisplayValue(searchTerm)).toBeInTheDocument();
|
||||||
|
|
||||||
// Clear search
|
// Clear search
|
||||||
userEvent.clear(searchField);
|
fireEvent.change(searchField, { target: { value: '' } });
|
||||||
|
|
||||||
// Check that the search term has been cleared
|
// Check that the search term has been cleared
|
||||||
expect(searchField).toHaveValue('');
|
expect(searchField).toHaveValue('');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should close dropdown selector when clicking away', async () => {
|
it('should close dropdown selector when clicking away', async () => {
|
||||||
const { getByText, queryByText } = await getComponent();
|
const { container, getByText, queryByText } = await getComponent();
|
||||||
|
|
||||||
// Click on "Add a tag" button to open dropdown
|
// Click on "Add a tag" button to open dropdown
|
||||||
const addTagsButton = getByText(messages.collapsibleAddTagsPlaceholderText.defaultMessage);
|
const addTagsButton = getByText(messages.collapsibleAddTagsPlaceholderText.defaultMessage);
|
||||||
@@ -554,10 +555,9 @@ describe('<ContentTagsCollapsible />', () => {
|
|||||||
expect(queryByText('Tag 3')).toBeInTheDocument();
|
expect(queryByText('Tag 3')).toBeInTheDocument();
|
||||||
|
|
||||||
// Simulate clicking outside the dropdown remove focus
|
// Simulate clicking outside the dropdown remove focus
|
||||||
userEvent.click(document.body);
|
const outsideElement = container.querySelector('.taxonomy-tags-count-chip');
|
||||||
|
const selectElement = container.querySelector('.react-select-add-tags__input');
|
||||||
// Simulate clicking outside the dropdown again to close it
|
fireEvent.blur(selectElement, { relatedTarget: outsideElement });
|
||||||
userEvent.click(document.body);
|
|
||||||
|
|
||||||
// Wait for the dropdown selector for tags to close, Tag 3 is no longer on
|
// Wait for the dropdown selector for tags to close, Tag 3 is no longer on
|
||||||
// the page
|
// the page
|
||||||
@@ -565,6 +565,7 @@ describe('<ContentTagsCollapsible />', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should test keyboard navigation of add tags widget', async () => {
|
it('should test keyboard navigation of add tags widget', async () => {
|
||||||
|
const user = userEvent.setup({ delay: null });
|
||||||
const {
|
const {
|
||||||
getByText,
|
getByText,
|
||||||
queryByText,
|
queryByText,
|
||||||
@@ -598,59 +599,61 @@ describe('<ContentTagsCollapsible />', () => {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Press tab to focus on first element in dropdown, Tag 1 should be focused
|
// Press tab to focus on first element in dropdown, Tag 1 should be focused
|
||||||
userEvent.tab();
|
await user.keyboard('{Tab}');
|
||||||
|
|
||||||
const dropdownTag1Div = queryAllByText('Tag 1')[1].closest('.dropdown-selector-tag-actions');
|
const dropdownTag1Div = queryAllByText('Tag 1')[1].closest('.dropdown-selector-tag-actions');
|
||||||
expect(dropdownTag1Div).toHaveFocus();
|
expect(dropdownTag1Div).toHaveFocus();
|
||||||
|
|
||||||
// Press right arrow to expand Tag 1, Tag 1.1 & Tag 1.2 should now be visible
|
// Press right arrow to expand Tag 1, Tag 1.1 & Tag 1.2 should now be visible
|
||||||
userEvent.keyboard('{arrowright}');
|
await user.keyboard('{arrowright}');
|
||||||
expect(queryAllByText('Tag 1.1').length).toBe(2);
|
expect(queryAllByText('Tag 1.1').length).toBe(2);
|
||||||
expect(queryByText('Tag 1.2')).toBeInTheDocument();
|
expect(queryByText('Tag 1.2')).toBeInTheDocument();
|
||||||
|
|
||||||
// Press left arrow to collapse Tag 1, Tag 1.1 & Tag 1.2 should not be visible
|
// Press left arrow to collapse Tag 1, Tag 1.1 & Tag 1.2 should not be visible
|
||||||
userEvent.keyboard('{arrowleft}');
|
await user.keyboard('{arrowleft}');
|
||||||
expect(queryAllByText('Tag 1.1').length).toBe(1);
|
expect(queryAllByText('Tag 1.1').length).toBe(1);
|
||||||
expect(queryByText('Tag 1.2')).not.toBeInTheDocument();
|
expect(queryByText('Tag 1.2')).not.toBeInTheDocument();
|
||||||
|
|
||||||
// Press enter key to expand Tag 1, Tag 1.1 & Tag 1.2 should now be visible
|
// Press enter key to expand Tag 1, Tag 1.1 & Tag 1.2 should now be visible
|
||||||
userEvent.keyboard('{enter}');
|
await user.keyboard('{enter}');
|
||||||
expect(queryAllByText('Tag 1.1').length).toBe(2);
|
expect(queryAllByText('Tag 1.1').length).toBe(2);
|
||||||
expect(queryByText('Tag 1.2')).toBeInTheDocument();
|
expect(queryByText('Tag 1.2')).toBeInTheDocument();
|
||||||
|
|
||||||
// Press down arrow to navigate to Tag 1.1, it should be focused
|
// Press down arrow to navigate to Tag 1.1, it should be focused
|
||||||
userEvent.keyboard('{arrowdown}');
|
await user.keyboard('{arrowdown}');
|
||||||
const dropdownTag1pt1Div = queryAllByText('Tag 1.1')[1].closest('.dropdown-selector-tag-actions');
|
const dropdownTag1pt1Div = queryAllByText('Tag 1.1')[1].closest('.dropdown-selector-tag-actions');
|
||||||
expect(dropdownTag1pt1Div).toHaveFocus();
|
expect(dropdownTag1pt1Div).toHaveFocus();
|
||||||
|
|
||||||
// Press down arrow again to navigate to Tag 1.2, it should be fouced
|
// Press down arrow again to navigate to Tag 1.2, it should be fouced
|
||||||
userEvent.keyboard('{arrowdown}');
|
await user.keyboard('{arrowdown}');
|
||||||
const dropdownTag1pt2Div = queryAllByText('Tag 1.2')[0].closest('.dropdown-selector-tag-actions');
|
const dropdownTag1pt2Div = queryAllByText('Tag 1.2')[0].closest('.dropdown-selector-tag-actions');
|
||||||
expect(dropdownTag1pt2Div).toHaveFocus();
|
expect(dropdownTag1pt2Div).toHaveFocus();
|
||||||
|
|
||||||
// Press down arrow again to navigate to Tag 2, it should be fouced
|
// Press down arrow again to navigate to Tag 2, it should be fouced
|
||||||
userEvent.keyboard('{arrowdown}');
|
await user.keyboard('{arrowdown}');
|
||||||
const dropdownTag2Div = queryAllByText('Tag 2')[1].closest('.dropdown-selector-tag-actions');
|
const dropdownTag2Div = queryAllByText('Tag 2')[1].closest('.dropdown-selector-tag-actions');
|
||||||
expect(dropdownTag2Div).toHaveFocus();
|
expect(dropdownTag2Div).toHaveFocus();
|
||||||
|
|
||||||
// Press up arrow to navigate back to Tag 1.2, it should be focused
|
// Press up arrow to navigate back to Tag 1.2, it should be focused
|
||||||
userEvent.keyboard('{arrowup}');
|
await user.keyboard('{arrowup}');
|
||||||
expect(dropdownTag1pt2Div).toHaveFocus();
|
expect(dropdownTag1pt2Div).toHaveFocus();
|
||||||
|
|
||||||
// Press up arrow to navigate back to Tag 1.1, it should be focused
|
// Press up arrow to navigate back to Tag 1.1, it should be focused
|
||||||
userEvent.keyboard('{arrowup}');
|
await user.keyboard('{arrowup}');
|
||||||
expect(dropdownTag1pt1Div).toHaveFocus();
|
expect(dropdownTag1pt1Div).toHaveFocus();
|
||||||
|
|
||||||
// Press up arrow again to navigate to Tag 1, it should be focused
|
// Press up arrow again to navigate to Tag 1, it should be focused
|
||||||
userEvent.keyboard('{arrowup}');
|
await user.keyboard('{arrowup}');
|
||||||
expect(dropdownTag1Div).toHaveFocus();
|
expect(dropdownTag1Div).toHaveFocus();
|
||||||
|
|
||||||
// Press down arrow twice to navigate to Tag 1.2, it should be focsed
|
// Press down arrow twice to navigate to Tag 1.2, it should be focsed
|
||||||
userEvent.keyboard('{arrowdown}');
|
await user.keyboard('{arrowdown}');
|
||||||
userEvent.keyboard('{arrowdown}');
|
await user.keyboard('{arrowdown}');
|
||||||
expect(dropdownTag1pt2Div).toHaveFocus();
|
expect(dropdownTag1pt2Div).toHaveFocus();
|
||||||
|
|
||||||
// Press space key to check Tag 1.2, it should be staged
|
// Press space key to check Tag 1.2, it should be staged
|
||||||
userEvent.keyboard('{space}');
|
await user.keyboard('[Space]');
|
||||||
|
|
||||||
const taxonomyId = 123;
|
const taxonomyId = 123;
|
||||||
const addedStagedTag = {
|
const addedStagedTag = {
|
||||||
value: 'Tag%201,Tag%201.2',
|
value: 'Tag%201,Tag%201.2',
|
||||||
@@ -659,35 +662,35 @@ describe('<ContentTagsCollapsible />', () => {
|
|||||||
expect(data.addStagedContentTag).toHaveBeenCalledWith(taxonomyId, addedStagedTag);
|
expect(data.addStagedContentTag).toHaveBeenCalledWith(taxonomyId, addedStagedTag);
|
||||||
|
|
||||||
// Press enter key again to uncheck Tag 1.2 (since it's a leaf), it should be unstaged
|
// Press enter key again to uncheck Tag 1.2 (since it's a leaf), it should be unstaged
|
||||||
userEvent.keyboard('{enter}');
|
await user.keyboard('{enter}');
|
||||||
const tagValue = 'Tag%201,Tag%201.2';
|
const tagValue = 'Tag%201,Tag%201.2';
|
||||||
expect(data.removeStagedContentTag).toHaveBeenCalledWith(taxonomyId, tagValue);
|
expect(data.removeStagedContentTag).toHaveBeenCalledWith(taxonomyId, tagValue);
|
||||||
|
|
||||||
// Press left arrow to navigate back to Tag 1, it should be focused
|
// Press left arrow to navigate back to Tag 1, it should be focused
|
||||||
userEvent.keyboard('{arrowleft}');
|
await user.keyboard('{arrowleft}');
|
||||||
expect(dropdownTag1Div).toHaveFocus();
|
expect(dropdownTag1Div).toHaveFocus();
|
||||||
|
|
||||||
// Press tab key it should jump to cancel button, it should be focused
|
// Press tab key it should jump to cancel button, it should be focused
|
||||||
userEvent.tab();
|
await user.keyboard('{Tab}');
|
||||||
const dropdownCancel = getByText(messages.collapsibleCancelStagedTagsButtonText.defaultMessage);
|
const dropdownCancel = getByText(messages.collapsibleCancelStagedTagsButtonText.defaultMessage);
|
||||||
expect(dropdownCancel).toHaveFocus();
|
expect(dropdownCancel).toHaveFocus();
|
||||||
|
|
||||||
// Press tab again, it should exit and close the select menu, since there are not staged tags
|
// Press tab again, it should exit and close the select menu, since there are not staged tags
|
||||||
userEvent.tab();
|
await user.keyboard('{Tab}');
|
||||||
expect(queryByText('Tag 3')).not.toBeInTheDocument();
|
expect(queryByText('Tag 3')).not.toBeInTheDocument();
|
||||||
|
|
||||||
// Press shift tab, focus back on select menu input, it should open the menu
|
// Press shift tab, focus back on select menu input, it should open the menu
|
||||||
userEvent.tab({ shift: true });
|
await user.tab({ shift: true });
|
||||||
expect(queryByText('Tag 3')).toBeInTheDocument();
|
expect(queryByText('Tag 3')).toBeInTheDocument();
|
||||||
|
|
||||||
// Press shift tab again, it should focus out and close the select menu
|
// Press shift tab again, it should focus out and close the select menu
|
||||||
userEvent.tab({ shift: true });
|
await user.tab({ shift: true });
|
||||||
expect(queryByText('Tag 3')).not.toBeInTheDocument();
|
expect(queryByText('Tag 3')).not.toBeInTheDocument();
|
||||||
|
|
||||||
// Press tab again, the select menu should open, then press escape, it should close
|
// Press tab again, the select menu should open, then press escape, it should close
|
||||||
userEvent.tab();
|
await user.keyboard('{Tab}');
|
||||||
expect(queryByText('Tag 3')).toBeInTheDocument();
|
expect(queryByText('Tag 3')).toBeInTheDocument();
|
||||||
userEvent.keyboard('{escape}');
|
await user.keyboard('{escape}');
|
||||||
expect(queryByText('Tag 3')).not.toBeInTheDocument();
|
expect(queryByText('Tag 3')).not.toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -699,7 +702,7 @@ describe('<ContentTagsCollapsible />', () => {
|
|||||||
const xButtonAppliedTag = within(appliedTag).getByRole('button', {
|
const xButtonAppliedTag = within(appliedTag).getByRole('button', {
|
||||||
name: /delete/i,
|
name: /delete/i,
|
||||||
});
|
});
|
||||||
await userEvent.click(xButtonAppliedTag);
|
fireEvent.click(xButtonAppliedTag);
|
||||||
|
|
||||||
// Check that the applied tag has been removed
|
// Check that the applied tag has been removed
|
||||||
expect(appliedTag).not.toBeInTheDocument();
|
expect(appliedTag).not.toBeInTheDocument();
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
.tags-drawer-cancel-button:hover {
|
.tags-drawer-cancel-button:hover {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
color: $gray-300 !important;
|
color: var(--pgn-color-gray-300) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.other-description {
|
.other-description {
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
.enable-taxonomies-button:not([disabled]):hover {
|
.enable-taxonomies-button:not([disabled]):hover {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
color: $info-900 !important;
|
color: var(--pgn-color-info-900) !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ const path = '/content/:contentId?/*';
|
|||||||
const mockOnClose = jest.fn();
|
const mockOnClose = jest.fn();
|
||||||
const mockSetBlockingSheet = jest.fn();
|
const mockSetBlockingSheet = jest.fn();
|
||||||
const mockNavigate = jest.fn();
|
const mockNavigate = jest.fn();
|
||||||
|
const mockSidebarAction = jest.fn();
|
||||||
mockContentTaxonomyTagsData.applyMock();
|
mockContentTaxonomyTagsData.applyMock();
|
||||||
mockTaxonomyListData.applyMock();
|
mockTaxonomyListData.applyMock();
|
||||||
mockTaxonomyTagsData.applyMock();
|
mockTaxonomyTagsData.applyMock();
|
||||||
@@ -33,6 +34,7 @@ const {
|
|||||||
languageWithoutTagsId,
|
languageWithoutTagsId,
|
||||||
largeTagsId,
|
largeTagsId,
|
||||||
emptyTagsId,
|
emptyTagsId,
|
||||||
|
containerTagsId,
|
||||||
} = mockContentTaxonomyTagsData;
|
} = mockContentTaxonomyTagsData;
|
||||||
|
|
||||||
jest.mock('react-router-dom', () => ({
|
jest.mock('react-router-dom', () => ({
|
||||||
@@ -40,14 +42,20 @@ jest.mock('react-router-dom', () => ({
|
|||||||
useNavigate: () => mockNavigate,
|
useNavigate: () => mockNavigate,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const renderDrawer = (contentId, drawerParams = {}) => (
|
jest.mock('../library-authoring/common/context/SidebarContext', () => ({
|
||||||
render(
|
...jest.requireActual('../library-authoring/common/context/SidebarContext'),
|
||||||
|
useSidebarContext: () => ({ sidebarAction: mockSidebarAction() }),
|
||||||
|
}));
|
||||||
|
|
||||||
|
const renderDrawer = (contentId, drawerParams = {}, renderPath = path, containerId = '') => {
|
||||||
|
const params = { contentId, containerId };
|
||||||
|
return render(
|
||||||
<ContentTagsDrawerSheetContext.Provider value={drawerParams}>
|
<ContentTagsDrawerSheetContext.Provider value={drawerParams}>
|
||||||
<ContentTagsDrawer {...drawerParams} />
|
<ContentTagsDrawer {...drawerParams} />
|
||||||
</ContentTagsDrawerSheetContext.Provider>,
|
</ContentTagsDrawerSheetContext.Provider>,
|
||||||
{ path, params: { contentId } },
|
{ path: renderPath, params },
|
||||||
)
|
);
|
||||||
);
|
};
|
||||||
|
|
||||||
describe('<ContentTagsDrawer />', () => {
|
describe('<ContentTagsDrawer />', () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
@@ -184,6 +192,26 @@ describe('<ContentTagsDrawer />', () => {
|
|||||||
expect(screen.getByRole('button', { name: /save/i })).toBeInTheDocument();
|
expect(screen.getByRole('button', { name: /save/i })).toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should change to edit mode sidebar action is set to JumpToManageTags', async () => {
|
||||||
|
mockSidebarAction.mockReturnValueOnce('jump-to-manage-tags');
|
||||||
|
renderDrawer(stagedTagsId, { variant: 'component' });
|
||||||
|
expect(await screen.findByText('Taxonomy 1')).toBeInTheDocument();
|
||||||
|
|
||||||
|
// Show delete tag buttons
|
||||||
|
expect(screen.getAllByRole('button', {
|
||||||
|
name: /delete/i,
|
||||||
|
}).length).toBe(2);
|
||||||
|
|
||||||
|
// Show add a tag select
|
||||||
|
expect(screen.getByText(/add a tag/i)).toBeInTheDocument();
|
||||||
|
|
||||||
|
// Show cancel button
|
||||||
|
expect(screen.getByRole('button', { name: /cancel/i })).toBeInTheDocument();
|
||||||
|
|
||||||
|
// Show save button
|
||||||
|
expect(screen.getByRole('button', { name: /save/i })).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
it('should change to read mode when click on `Cancel` on drawer variant', async () => {
|
it('should change to read mode when click on `Cancel` on drawer variant', async () => {
|
||||||
renderDrawer(stagedTagsId);
|
renderDrawer(stagedTagsId);
|
||||||
expect(await screen.findByText('Taxonomy 1')).toBeInTheDocument();
|
expect(await screen.findByText('Taxonomy 1')).toBeInTheDocument();
|
||||||
@@ -666,6 +694,42 @@ describe('<ContentTagsDrawer />', () => {
|
|||||||
await waitFor(() => expect(axiosMock.history.put[0].url).toEqual(url));
|
await waitFor(() => expect(axiosMock.history.put[0].url).toEqual(url));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
[
|
||||||
|
'lct:org:lib:unit:1',
|
||||||
|
'lib-collection:org:lib:1',
|
||||||
|
'lb:org:lib:html:1',
|
||||||
|
].forEach((containerId) => {
|
||||||
|
it(`should invalidate children query when update child tag when containerId is ${containerId}`, async () => {
|
||||||
|
const newPath = '/container/:containerId/';
|
||||||
|
const { axiosMock, queryClient } = initializeMocks();
|
||||||
|
const mockInvalidateQueries = jest.spyOn(queryClient, 'invalidateQueries');
|
||||||
|
const url = getContentTaxonomyTagsApiUrl(containerTagsId);
|
||||||
|
axiosMock.onPut(url).reply(200);
|
||||||
|
renderDrawer(containerTagsId, { id: containerTagsId }, newPath, containerId);
|
||||||
|
expect(await screen.findByText('Taxonomy 1')).toBeInTheDocument();
|
||||||
|
const editTagsButton = screen.getByRole('button', {
|
||||||
|
name: /edit tags/i,
|
||||||
|
});
|
||||||
|
fireEvent.click(editTagsButton);
|
||||||
|
|
||||||
|
const saveButton = screen.getByRole('button', {
|
||||||
|
name: /save/i,
|
||||||
|
});
|
||||||
|
fireEvent.click(saveButton);
|
||||||
|
|
||||||
|
await waitFor(() => expect(axiosMock.history.put[0].url).toEqual(url));
|
||||||
|
expect(mockInvalidateQueries).toHaveBeenCalledTimes(5);
|
||||||
|
expect(mockInvalidateQueries).toHaveBeenNthCalledWith(5, [
|
||||||
|
'contentLibrary',
|
||||||
|
'lib:org:lib',
|
||||||
|
'content',
|
||||||
|
'container',
|
||||||
|
containerId,
|
||||||
|
'children',
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should taxonomies must be ordered', async () => {
|
it('should taxonomies must be ordered', async () => {
|
||||||
renderDrawer(largeTagsId);
|
renderDrawer(largeTagsId);
|
||||||
expect(await screen.findByText('Taxonomy 1')).toBeInTheDocument();
|
expect(await screen.findByText('Taxonomy 1')).toBeInTheDocument();
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import ContentTagsCollapsible from './ContentTagsCollapsible';
|
|||||||
import Loading from '../generic/Loading';
|
import Loading from '../generic/Loading';
|
||||||
import { useCreateContentTagsDrawerContext } from './ContentTagsDrawerHelper';
|
import { useCreateContentTagsDrawerContext } from './ContentTagsDrawerHelper';
|
||||||
import { ContentTagsDrawerContext, ContentTagsDrawerSheetContext } from './common/context';
|
import { ContentTagsDrawerContext, ContentTagsDrawerSheetContext } from './common/context';
|
||||||
|
import { SidebarActions, useSidebarContext } from '../library-authoring/common/context/SidebarContext';
|
||||||
|
|
||||||
interface TaxonomyListProps {
|
interface TaxonomyListProps {
|
||||||
contentId: string;
|
contentId: string;
|
||||||
@@ -88,7 +89,6 @@ const ContentTagsDrawerTitle = () => {
|
|||||||
<div className="d-flex justify-content-center align-items-center flex-column">
|
<div className="d-flex justify-content-center align-items-center flex-column">
|
||||||
<Spinner
|
<Spinner
|
||||||
animation="border"
|
animation="border"
|
||||||
size="xl"
|
|
||||||
screenReaderText={intl.formatMessage(messages.loadingMessage)}
|
screenReaderText={intl.formatMessage(messages.loadingMessage)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -148,7 +148,6 @@ const ContentTagsDrawerVariantFooter = ({ onClose, readOnly }: ContentTagsDrawer
|
|||||||
: (
|
: (
|
||||||
<Spinner
|
<Spinner
|
||||||
animation="border"
|
animation="border"
|
||||||
size="xl"
|
|
||||||
screenReaderText={intl.formatMessage(messages.loadingMessage)}
|
screenReaderText={intl.formatMessage(messages.loadingMessage)}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
@@ -196,7 +195,6 @@ const ContentTagsComponentVariantFooter = ({ readOnly = false }: ContentTagsComp
|
|||||||
<div className="d-flex justify-content-center">
|
<div className="d-flex justify-content-center">
|
||||||
<Spinner
|
<Spinner
|
||||||
animation="border"
|
animation="border"
|
||||||
size="xl"
|
|
||||||
screenReaderText={intl.formatMessage(messages.loadingMessage)}
|
screenReaderText={intl.formatMessage(messages.loadingMessage)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -244,6 +242,7 @@ const ContentTagsDrawer = ({
|
|||||||
if (contentId === undefined) {
|
if (contentId === undefined) {
|
||||||
throw new Error('Error: contentId cannot be null.');
|
throw new Error('Error: contentId cannot be null.');
|
||||||
}
|
}
|
||||||
|
const { sidebarAction } = useSidebarContext();
|
||||||
|
|
||||||
const context = useCreateContentTagsDrawerContext(contentId, !readOnly, variant === 'drawer');
|
const context = useCreateContentTagsDrawerContext(contentId, !readOnly, variant === 'drawer');
|
||||||
const { blockingSheet } = useContext(ContentTagsDrawerSheetContext);
|
const { blockingSheet } = useContext(ContentTagsDrawerSheetContext);
|
||||||
@@ -260,6 +259,7 @@ const ContentTagsDrawer = ({
|
|||||||
closeToast,
|
closeToast,
|
||||||
setCollapsibleToInitalState,
|
setCollapsibleToInitalState,
|
||||||
otherTaxonomies,
|
otherTaxonomies,
|
||||||
|
toEditMode,
|
||||||
} = context;
|
} = context;
|
||||||
|
|
||||||
let onCloseDrawer: () => void;
|
let onCloseDrawer: () => void;
|
||||||
@@ -302,8 +302,13 @@ const ContentTagsDrawer = ({
|
|||||||
|
|
||||||
// First call of the initial collapsible states
|
// First call of the initial collapsible states
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
setCollapsibleToInitalState();
|
// Open tag edit mode when sidebarAction is JumpToManageTags
|
||||||
}, [isTaxonomyListLoaded, isContentTaxonomyTagsLoaded]);
|
if (sidebarAction === SidebarActions.JumpToManageTags) {
|
||||||
|
toEditMode();
|
||||||
|
} else {
|
||||||
|
setCollapsibleToInitalState();
|
||||||
|
}
|
||||||
|
}, [isTaxonomyListLoaded, isContentTaxonomyTagsLoaded, sidebarAction, toEditMode]);
|
||||||
|
|
||||||
const renderFooter = () => {
|
const renderFooter = () => {
|
||||||
if (isTaxonomyListLoaded && isContentTaxonomyTagsLoaded) {
|
if (isTaxonomyListLoaded && isContentTaxonomyTagsLoaded) {
|
||||||
|
|||||||
@@ -234,7 +234,6 @@ const ContentTagsDropDownSelector = ({
|
|||||||
<div className="d-flex justify-content-center align-items-center flex-row">
|
<div className="d-flex justify-content-center align-items-center flex-row">
|
||||||
<Spinner
|
<Spinner
|
||||||
animation="border"
|
animation="border"
|
||||||
size="xl"
|
|
||||||
screenReaderText={intl.formatMessage(messages.loadingTagsDropdownMessage)}
|
screenReaderText={intl.formatMessage(messages.loadingTagsDropdownMessage)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
color: $info-900 !important;
|
color: var(--pgn-color-info-900) !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,7 +19,8 @@
|
|||||||
// In the future, this customizability should be implemented in paragon instead
|
// In the future, this customizability should be implemented in paragon instead
|
||||||
input.pgn__form-checkbox-input {
|
input.pgn__form-checkbox-input {
|
||||||
&:indeterminate {
|
&:indeterminate {
|
||||||
@extend :checked; /* stylelint-disable-line scss/at-extend-no-missing-placeholder */
|
border-color: var(--pgn-color-form-control-indicator-checked-border-base);
|
||||||
|
background-image: var(--pgn-other-content-form-control-checkbox-indicator-icon-checked-base);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -34,6 +35,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-selector-tag-actions:focus-visible {
|
.dropdown-selector-tag-actions:focus-visible {
|
||||||
outline: solid 2px $info-900;
|
outline: solid 2px var(--pgn-color-info-900);
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,13 +9,13 @@
|
|||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
svg {
|
svg {
|
||||||
color: $gray-900;
|
color: var(--pgn-color-gray-900);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&:focus-visible {
|
&:focus-visible {
|
||||||
border: 2px solid;
|
border: 2px solid;
|
||||||
border-color: $gray-900;
|
border-color: var(--pgn-color-gray-900);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ mockContentTaxonomyTagsData.emptyTagsId = 'block-v1:EmptyTagsOrg+STC1+2023_1+typ
|
|||||||
mockContentTaxonomyTagsData.emptyTags = {
|
mockContentTaxonomyTagsData.emptyTags = {
|
||||||
taxonomies: [],
|
taxonomies: [],
|
||||||
};
|
};
|
||||||
mockContentTaxonomyTagsData.containerTagsId = 'lct:org:lib:unit:container_tags';
|
mockContentTaxonomyTagsData.containerTagsId = 'lct:StagedTagsOrg:lib:unit:container_tags';
|
||||||
mockContentTaxonomyTagsData.applyMock = () => jest.spyOn(api, 'getContentTaxonomyTagsData').mockImplementation(mockContentTaxonomyTagsData);
|
mockContentTaxonomyTagsData.applyMock = () => jest.spyOn(api, 'getContentTaxonomyTagsData').mockImplementation(mockContentTaxonomyTagsData);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import {
|
|||||||
useMutation,
|
useMutation,
|
||||||
useQueryClient,
|
useQueryClient,
|
||||||
} from '@tanstack/react-query';
|
} from '@tanstack/react-query';
|
||||||
|
import { useParams } from 'react-router';
|
||||||
import {
|
import {
|
||||||
getTaxonomyTagsData,
|
getTaxonomyTagsData,
|
||||||
getContentTaxonomyTagsData,
|
getContentTaxonomyTagsData,
|
||||||
@@ -14,7 +15,7 @@ import {
|
|||||||
updateContentTaxonomyTags,
|
updateContentTaxonomyTags,
|
||||||
getContentTaxonomyTagsCount,
|
getContentTaxonomyTagsCount,
|
||||||
} from './api';
|
} from './api';
|
||||||
import { libraryQueryPredicate, xblockQueryKeys } from '../../library-authoring/data/apiHooks';
|
import { libraryAuthoringQueryKeys, libraryQueryPredicate, xblockQueryKeys } from '../../library-authoring/data/apiHooks';
|
||||||
import { getLibraryId } from '../../generic/key-utils';
|
import { getLibraryId } from '../../generic/key-utils';
|
||||||
|
|
||||||
/** @typedef {import("../../taxonomy/data/types.js").TagListData} TagListData */
|
/** @typedef {import("../../taxonomy/data/types.js").TagListData} TagListData */
|
||||||
@@ -111,7 +112,7 @@ export const useContentTaxonomyTagsData = (contentId) => (
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds the query to get meta data about the content object
|
* Builds the query to get meta data about the content object
|
||||||
* @param {string} contentId The id of the content object (unit/component)
|
* @param {string} contentId The id of the content object
|
||||||
* @param {boolean} enabled Flag to enable/disable the query
|
* @param {boolean} enabled Flag to enable/disable the query
|
||||||
*/
|
*/
|
||||||
export const useContentData = (contentId, enabled) => (
|
export const useContentData = (contentId, enabled) => (
|
||||||
@@ -129,6 +130,7 @@ export const useContentData = (contentId, enabled) => (
|
|||||||
export const useContentTaxonomyTagsUpdater = (contentId) => {
|
export const useContentTaxonomyTagsUpdater = (contentId) => {
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
const unitIframe = window.frames['xblock-iframe'];
|
const unitIframe = window.frames['xblock-iframe'];
|
||||||
|
const { containerId } = useParams();
|
||||||
|
|
||||||
return useMutation({
|
return useMutation({
|
||||||
/**
|
/**
|
||||||
@@ -141,7 +143,7 @@ export const useContentTaxonomyTagsUpdater = (contentId) => {
|
|||||||
* >}
|
* >}
|
||||||
*/
|
*/
|
||||||
mutationFn: ({ tagsData }) => updateContentTaxonomyTags(contentId, tagsData),
|
mutationFn: ({ tagsData }) => updateContentTaxonomyTags(contentId, tagsData),
|
||||||
onSettled: /* istanbul ignore next */ () => {
|
onSettled: () => {
|
||||||
queryClient.invalidateQueries({ queryKey: ['contentTaxonomyTags', contentId] });
|
queryClient.invalidateQueries({ queryKey: ['contentTaxonomyTags', contentId] });
|
||||||
/// Invalidate query with pattern on course outline
|
/// Invalidate query with pattern on course outline
|
||||||
let contentPattern;
|
let contentPattern;
|
||||||
@@ -158,6 +160,11 @@ export const useContentTaxonomyTagsUpdater = (contentId) => {
|
|||||||
queryClient.invalidateQueries(xblockQueryKeys.componentMetadata(contentId));
|
queryClient.invalidateQueries(xblockQueryKeys.componentMetadata(contentId));
|
||||||
// Invalidate content search to update tags count
|
// Invalidate content search to update tags count
|
||||||
queryClient.invalidateQueries(['content_search'], { predicate: (query) => libraryQueryPredicate(query, libraryId) });
|
queryClient.invalidateQueries(['content_search'], { predicate: (query) => libraryQueryPredicate(query, libraryId) });
|
||||||
|
// If the tags for an item were edited from a container page (Unit, Subsection, Section),
|
||||||
|
// invalidate children query to fetch count again.
|
||||||
|
if (containerId) {
|
||||||
|
queryClient.invalidateQueries(libraryAuthoringQueryKeys.containerChildren(containerId));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onSuccess: /* istanbul ignore next */ () => {
|
onSuccess: /* istanbul ignore next */ () => {
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ describe('useContentTaxonomyTagsUpdater', () => {
|
|||||||
|
|
||||||
const contentId = 'testerContent';
|
const contentId = 'testerContent';
|
||||||
const taxonomyId = 123;
|
const taxonomyId = 123;
|
||||||
const mutation = useContentTaxonomyTagsUpdater(contentId);
|
const mutation = renderHook(() => useContentTaxonomyTagsUpdater(contentId)).result.current;
|
||||||
const tagsData = [{
|
const tagsData = [{
|
||||||
taxonomy: taxonomyId,
|
taxonomy: taxonomyId,
|
||||||
tags: ['tag1', 'tag2'],
|
tags: ['tag1', 'tag2'],
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
// @ts-check
|
import { useState, useMemo } from 'react';
|
||||||
import React, { useState, useMemo } from 'react';
|
|
||||||
import {
|
import {
|
||||||
Card, Stack, Button, Collapsible, Icon,
|
Card, Stack, Button, Collapsible, Icon,
|
||||||
} from '@openedx/paragon';
|
} from '@openedx/paragon';
|
||||||
@@ -10,10 +9,19 @@ import { ContentTagsDrawerSheet } from '..';
|
|||||||
|
|
||||||
import messages from '../messages';
|
import messages from '../messages';
|
||||||
import { useContentTaxonomyTagsData } from '../data/apiHooks';
|
import { useContentTaxonomyTagsData } from '../data/apiHooks';
|
||||||
|
import type { ContentTaxonomyTagData, Tag } from '../data/types';
|
||||||
import { LoadingSpinner } from '../../generic/Loading';
|
import { LoadingSpinner } from '../../generic/Loading';
|
||||||
import TagsTree from '../TagsTree';
|
import TagsTree from '../TagsTree';
|
||||||
|
|
||||||
const TagsSidebarBody = () => {
|
interface TagsSidebarBodyProps {
|
||||||
|
readOnly: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
type TagTree = {
|
||||||
|
[key: string]: { children: TagTree, canChangeObjecttag: boolean, canDeleteObjecttag: boolean }
|
||||||
|
};
|
||||||
|
|
||||||
|
const TagsSidebarBody = ({ readOnly }: TagsSidebarBodyProps) => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const [showManageTags, setShowManageTags] = useState(false);
|
const [showManageTags, setShowManageTags] = useState(false);
|
||||||
const contentId = useParams().blockId;
|
const contentId = useParams().blockId;
|
||||||
@@ -24,8 +32,8 @@ const TagsSidebarBody = () => {
|
|||||||
isSuccess: isContentTaxonomyTagsLoaded,
|
isSuccess: isContentTaxonomyTagsLoaded,
|
||||||
} = useContentTaxonomyTagsData(contentId || '');
|
} = useContentTaxonomyTagsData(contentId || '');
|
||||||
|
|
||||||
const buildTagsTree = (contentTags) => {
|
const buildTagsTree = (contentTags: Tag[]) => {
|
||||||
const resultTree = {};
|
const resultTree: TagTree = {};
|
||||||
contentTags.forEach(item => {
|
contentTags.forEach(item => {
|
||||||
let currentLevel = resultTree;
|
let currentLevel = resultTree;
|
||||||
|
|
||||||
@@ -46,7 +54,7 @@ const TagsSidebarBody = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const tree = useMemo(() => {
|
const tree = useMemo(() => {
|
||||||
const result = [];
|
const result: (Omit<ContentTaxonomyTagData, 'tags'> & { tags: TagTree })[] = [];
|
||||||
if (isContentTaxonomyTagsLoaded && contentTaxonomyTagsData) {
|
if (isContentTaxonomyTagsLoaded && contentTaxonomyTagsData) {
|
||||||
contentTaxonomyTagsData.taxonomies.forEach((taxonomy) => {
|
contentTaxonomyTagsData.taxonomies.forEach((taxonomy) => {
|
||||||
result.push({
|
result.push({
|
||||||
@@ -88,7 +96,13 @@ const TagsSidebarBody = () => {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<Button className="mt-3 ml-2" variant="outline-primary" size="sm" onClick={() => setShowManageTags(true)}>
|
<Button
|
||||||
|
className="mt-3 ml-2"
|
||||||
|
variant="outline-primary"
|
||||||
|
size="sm"
|
||||||
|
onClick={() => setShowManageTags(true)}
|
||||||
|
disabled={readOnly}
|
||||||
|
>
|
||||||
{intl.formatMessage(messages.manageTagsButton)}
|
{intl.formatMessage(messages.manageTagsButton)}
|
||||||
</Button>
|
</Button>
|
||||||
</Stack>
|
</Stack>
|
||||||
@@ -102,6 +116,4 @@ const TagsSidebarBody = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
TagsSidebarBody.propTypes = {};
|
|
||||||
|
|
||||||
export default TagsSidebarBody;
|
export default TagsSidebarBody;
|
||||||
@@ -1,10 +1,14 @@
|
|||||||
import TagsSidebarHeader from './TagsSidebarHeader';
|
import TagsSidebarHeader from './TagsSidebarHeader';
|
||||||
import TagsSidebarBody from './TagsSidebarBody';
|
import TagsSidebarBody from './TagsSidebarBody';
|
||||||
|
|
||||||
const TagsSidebarControls = () => (
|
interface TagsSidebarControlsProps {
|
||||||
|
readOnly: boolean,
|
||||||
|
}
|
||||||
|
|
||||||
|
const TagsSidebarControls = ({ readOnly }: TagsSidebarControlsProps) => (
|
||||||
<>
|
<>
|
||||||
<TagsSidebarHeader />
|
<TagsSidebarHeader />
|
||||||
<TagsSidebarBody />
|
<TagsSidebarBody readOnly={readOnly} />
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { injectIntl, FormattedMessage } from '@edx/frontend-platform/i18n';
|
import { FormattedMessage } from '@edx/frontend-platform/i18n';
|
||||||
|
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
|
|
||||||
@@ -33,4 +33,4 @@ AriaLiveRegion.propTypes = {
|
|||||||
enableQuality: PropTypes.bool.isRequired,
|
enableQuality: PropTypes.bool.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(AriaLiveRegion);
|
export default AriaLiveRegion;
|
||||||
|
|||||||
@@ -2,11 +2,10 @@ import PropTypes from 'prop-types';
|
|||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { FormattedMessage, useIntl } from '@edx/frontend-platform/i18n';
|
import { FormattedMessage, useIntl } from '@edx/frontend-platform/i18n';
|
||||||
import { ActionRow, Button, Icon } from '@openedx/paragon';
|
import { ActionRow, Button, Icon } from '@openedx/paragon';
|
||||||
import { useSelector } from 'react-redux';
|
|
||||||
import { CheckCircle, RadioButtonUnchecked } from '@openedx/paragon/icons';
|
import { CheckCircle, RadioButtonUnchecked } from '@openedx/paragon/icons';
|
||||||
import { getConfig } from '@edx/frontend-platform';
|
import { getConfig } from '@edx/frontend-platform';
|
||||||
|
|
||||||
import { getWaffleFlags } from '../../data/selectors';
|
import { useWaffleFlags } from '../../data/apiHooks';
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
|
|
||||||
const getUpdateLinks = (courseId, waffleFlags) => {
|
const getUpdateLinks = (courseId, waffleFlags) => {
|
||||||
@@ -35,7 +34,7 @@ const ChecklistItemBody = ({
|
|||||||
isCompleted,
|
isCompleted,
|
||||||
}) => {
|
}) => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const waffleFlags = useSelector(getWaffleFlags);
|
const waffleFlags = useWaffleFlags(courseId);
|
||||||
const updateLinks = getUpdateLinks(courseId, waffleFlags);
|
const updateLinks = getUpdateLinks(courseId, waffleFlags);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { useSelector } from 'react-redux';
|
|
||||||
import { injectIntl, FormattedMessage, FormattedNumber } from '@edx/frontend-platform/i18n';
|
import { injectIntl, FormattedMessage, FormattedNumber } from '@edx/frontend-platform/i18n';
|
||||||
import { Icon } from '@openedx/paragon';
|
import { Icon } from '@openedx/paragon';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { ModeComment } from '@openedx/paragon/icons';
|
import { ModeComment } from '@openedx/paragon/icons';
|
||||||
import { getConfig } from '@edx/frontend-platform';
|
import { getConfig } from '@edx/frontend-platform';
|
||||||
import { getWaffleFlags } from '../../data/selectors';
|
import { useWaffleFlags } from '../../data/apiHooks';
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
|
|
||||||
const ChecklistItemComment = ({
|
const ChecklistItemComment = ({
|
||||||
@@ -13,7 +12,7 @@ const ChecklistItemComment = ({
|
|||||||
checkId,
|
checkId,
|
||||||
data,
|
data,
|
||||||
}) => {
|
}) => {
|
||||||
const waffleFlags = useSelector(getWaffleFlags);
|
const waffleFlags = useWaffleFlags(courseId);
|
||||||
|
|
||||||
const getPathToCourseOutlinePage = (assignmentId) => (waffleFlags.useNewCourseOutlinePage
|
const getPathToCourseOutlinePage = (assignmentId) => (waffleFlags.useNewCourseOutlinePage
|
||||||
? `/course/${courseId}#${assignmentId}` : `${getConfig().STUDIO_BASE_URL}/course/${courseId}#${assignmentId}`);
|
? `/course/${courseId}#${assignmentId}` : `${getConfig().STUDIO_BASE_URL}/course/${courseId}#${assignmentId}`);
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { injectIntl } from '@edx/frontend-platform/i18n';
|
|
||||||
import { Container, Stack } from '@openedx/paragon';
|
import { Container, Stack } from '@openedx/paragon';
|
||||||
|
|
||||||
import { LoadingSpinner } from '../../generic/Loading';
|
import { LoadingSpinner } from '../../generic/Loading';
|
||||||
import { getCompletionCount, useChecklistState } from './hooks';
|
import { getCompletionCount, useChecklistState } from './hooks';
|
||||||
import ChecklistItemBody from './ChecklistItemBody';
|
import ChecklistItemBody from './ChecklistItemBody';
|
||||||
@@ -129,4 +127,4 @@ ChecklistSection.propTypes = {
|
|||||||
isLoading: PropTypes.bool.isRequired,
|
isLoading: PropTypes.bool.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(ChecklistSection);
|
export default ChecklistSection;
|
||||||
|
|||||||
@@ -13,10 +13,10 @@
|
|||||||
|
|
||||||
.assignment-list {
|
.assignment-list {
|
||||||
display: inline;
|
display: inline;
|
||||||
padding-inline-start: map-get($spacers, 1);
|
padding-inline-start: var(--pgn-spacing-spacer-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//complete checklist item style
|
//complete checklist item style
|
||||||
.checklist-item-complete {
|
.checklist-item-complete {
|
||||||
box-shadow: -5px 0 0 0 $success-500;
|
box-shadow: -5px 0 0 0 var(--pgn-color-success-500);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,7 @@ import {
|
|||||||
initializeMocks, render, screen, within,
|
initializeMocks, render, screen, within,
|
||||||
} from '../../testUtils';
|
} from '../../testUtils';
|
||||||
import { getApiWaffleFlagsUrl } from '../../data/api';
|
import { getApiWaffleFlagsUrl } from '../../data/api';
|
||||||
import { fetchWaffleFlags } from '../../data/thunks';
|
|
||||||
import { generateCourseLaunchData } from '../factories/mockApiResponses';
|
import { generateCourseLaunchData } from '../factories/mockApiResponses';
|
||||||
import { executeThunk } from '../../utils';
|
|
||||||
import { checklistItems } from './utils/courseChecklistData';
|
import { checklistItems } from './utils/courseChecklistData';
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
|
|
||||||
@@ -34,7 +32,7 @@ const renderComponent = (props) => {
|
|||||||
|
|
||||||
describe('ChecklistSection', () => {
|
describe('ChecklistSection', () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
const { axiosMock, reduxStore } = initializeMocks();
|
const { axiosMock } = initializeMocks();
|
||||||
axiosMock
|
axiosMock
|
||||||
.onGet(getApiWaffleFlagsUrl(courseId))
|
.onGet(getApiWaffleFlagsUrl(courseId))
|
||||||
.reply(200, {
|
.reply(200, {
|
||||||
@@ -43,7 +41,6 @@ describe('ChecklistSection', () => {
|
|||||||
useNewScheduleDetailsPage: true,
|
useNewScheduleDetailsPage: true,
|
||||||
useNewCourseOutlinePage: true,
|
useNewCourseOutlinePage: true,
|
||||||
});
|
});
|
||||||
await executeThunk(fetchWaffleFlags(courseId), reduxStore.dispatch);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('a heading using the dataHeading prop', () => {
|
it('a heading using the dataHeading prop', () => {
|
||||||
|
|||||||
@@ -71,16 +71,6 @@ const messages = defineMessages({
|
|||||||
defaultMessage: 'Learners engage best with short videos followed by opportunities to practice. Ensure that 80% or more of course videos are less than 10 minutes long.',
|
defaultMessage: 'Learners engage best with short videos followed by opportunities to practice. Ensure that 80% or more of course videos are less than 10 minutes long.',
|
||||||
description: 'Description for a section that prompts a user to follow best practices for video length',
|
description: 'Description for a section that prompts a user to follow best practices for video length',
|
||||||
},
|
},
|
||||||
mobileFriendlyVideoShortDescription: {
|
|
||||||
id: 'mobileFriendlyVideoShortDescription',
|
|
||||||
defaultMessage: 'Create mobile-friendly video',
|
|
||||||
description: 'Label for a section that describes mobile friendly videos',
|
|
||||||
},
|
|
||||||
mobileFriendlyVideoLongDescription: {
|
|
||||||
id: 'mobileFriendlyVideoLongDescription',
|
|
||||||
defaultMessage: 'Mobile-friendly videos can be viewed across all supported devices. Ensure that at least 90% of course videos are mobile friendly by uploading course videos to the edX video pipeline.',
|
|
||||||
description: 'Description for a section that prompts a user to follow best practices for mobile friendly videos',
|
|
||||||
},
|
|
||||||
diverseSequencesShortDescription: {
|
diverseSequencesShortDescription: {
|
||||||
id: 'diverseSequencesShortDescription',
|
id: 'diverseSequencesShortDescription',
|
||||||
defaultMessage: 'Build diverse learning sequences',
|
defaultMessage: 'Build diverse learning sequences',
|
||||||
|
|||||||
@@ -36,10 +36,6 @@ export const checklistItems = {
|
|||||||
id: 'videoDuration',
|
id: 'videoDuration',
|
||||||
pacingTypeFilter: filters.ALL,
|
pacingTypeFilter: filters.ALL,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
id: 'mobileFriendlyVideo',
|
|
||||||
pacingTypeFilter: filters.ALL,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: 'diverseSequences',
|
id: 'diverseSequences',
|
||||||
pacingTypeFilter: filters.ALL,
|
pacingTypeFilter: filters.ALL,
|
||||||
|
|||||||
@@ -35,18 +35,8 @@ export const hasAssignmentDeadlines = (assignments, dates) => {
|
|||||||
|
|
||||||
export const hasShortVideoDuration = (videos) => {
|
export const hasShortVideoDuration = (videos) => {
|
||||||
if (videos.totalNumber === 0) {
|
if (videos.totalNumber === 0) {
|
||||||
return true;
|
return false;
|
||||||
} if (videos.totalNumber > 0 && videos.durations.median <= 600) {
|
} if (videos.totalNumber > 0 && videos.durations.median !== null && videos.durations.median <= 600) {
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const hasMobileFriendlyVideos = (videos) => {
|
|
||||||
if (videos.totalNumber === 0) {
|
|
||||||
return true;
|
|
||||||
} if (videos.totalNumber > 0 && (videos.numMobileEncoded / videos.totalNumber) >= 0.9) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +47,7 @@ export const hasDiverseSequences = (subsections) => {
|
|||||||
if (subsections.totalVisible === 0) {
|
if (subsections.totalVisible === 0) {
|
||||||
return false;
|
return false;
|
||||||
} if (subsections.totalVisible > 0) {
|
} if (subsections.totalVisible > 0) {
|
||||||
return ((subsections.numWithOneBlockType / subsections.totalVisible) < 0.2);
|
return ((subsections.numWithOneBlockType / subsections.totalVisible) <= 0.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@@ -68,7 +58,7 @@ export const hasWeeklyHighlights = sections => (
|
|||||||
);
|
);
|
||||||
|
|
||||||
export const hasShortUnitDepth = units => (
|
export const hasShortUnitDepth = units => (
|
||||||
units.numBlocks.median <= 3
|
units.numBlocks.median <= 3 && units.totalVisible > 0
|
||||||
);
|
);
|
||||||
|
|
||||||
export const hasProctoringEscalationEmail = proctoring => (
|
export const hasProctoringEscalationEmail = proctoring => (
|
||||||
|
|||||||
@@ -189,8 +189,8 @@ describe('courseCheckValidators utility functions', () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
describe('hasShortVideoDuration', () => {
|
describe('hasShortVideoDuration', () => {
|
||||||
it('returns true if course run has no videos', () => {
|
it('returns false if course run has no videos', () => {
|
||||||
expect(validators.hasShortVideoDuration({ totalNumber: 0 })).toEqual(true);
|
expect(validators.hasShortVideoDuration({ totalNumber: 0 })).toEqual(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns true if course run videos have a median duration <= to 600', () => {
|
it('returns true if course run videos have a median duration <= to 600', () => {
|
||||||
@@ -204,22 +204,6 @@ describe('courseCheckValidators utility functions', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('hasMobileFriendlyVideos', () => {
|
|
||||||
it('returns true if course run has no videos', () => {
|
|
||||||
expect(validators.hasMobileFriendlyVideos({ totalNumber: 0 })).toEqual(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('returns true if course run videos are >= 90% mobile friendly', () => {
|
|
||||||
expect(validators.hasMobileFriendlyVideos({ totalNumber: 10, numMobileEncoded: 9 }))
|
|
||||||
.toEqual(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('returns true if course run videos are < 90% mobile friendly', () => {
|
|
||||||
expect(validators.hasMobileFriendlyVideos({ totalNumber: 10, numMobileEncoded: 8 }))
|
|
||||||
.toEqual(false);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('hasDiverseSequences', () => {
|
describe('hasDiverseSequences', () => {
|
||||||
it('returns true if < 20% of visible subsections have more than one block type', () => {
|
it('returns true if < 20% of visible subsections have more than one block type', () => {
|
||||||
expect(validators.hasDiverseSequences({ totalVisible: 10, numWithOneBlockType: 1 }))
|
expect(validators.hasDiverseSequences({ totalVisible: 10, numWithOneBlockType: 1 }))
|
||||||
@@ -264,6 +248,7 @@ describe('courseCheckValidators utility functions', () => {
|
|||||||
describe('hasShortUnitDepth', () => {
|
describe('hasShortUnitDepth', () => {
|
||||||
it('returns true when course run has median number of blocks <= 3', () => {
|
it('returns true when course run has median number of blocks <= 3', () => {
|
||||||
const units = {
|
const units = {
|
||||||
|
totalVisible: 2,
|
||||||
numBlocks: {
|
numBlocks: {
|
||||||
median: 3,
|
median: 3,
|
||||||
},
|
},
|
||||||
@@ -274,6 +259,7 @@ describe('courseCheckValidators utility functions', () => {
|
|||||||
|
|
||||||
it('returns false when course run has median number of blocks > 3', () => {
|
it('returns false when course run has median number of blocks > 3', () => {
|
||||||
const units = {
|
const units = {
|
||||||
|
totalVisible: 2,
|
||||||
numBlocks: {
|
numBlocks: {
|
||||||
median: 4,
|
median: 4,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -14,8 +14,6 @@ const getValidatedValue = (data, id) => {
|
|||||||
return healthValidators.hasAssignmentDeadlines(data.assignments, data.dates);
|
return healthValidators.hasAssignmentDeadlines(data.assignments, data.dates);
|
||||||
case 'videoDuration':
|
case 'videoDuration':
|
||||||
return healthValidators.hasShortVideoDuration(data.videos);
|
return healthValidators.hasShortVideoDuration(data.videos);
|
||||||
case 'mobileFriendlyVideo':
|
|
||||||
return healthValidators.hasMobileFriendlyVideos(data.videos);
|
|
||||||
case 'diverseSequences':
|
case 'diverseSequences':
|
||||||
return healthValidators.hasDiverseSequences(data.subsections);
|
return healthValidators.hasDiverseSequences(data.subsections);
|
||||||
case 'weeklyHighlights':
|
case 'weeklyHighlights':
|
||||||
|
|||||||
@@ -88,20 +88,6 @@ describe('getValidatedValue utility function', () => {
|
|||||||
expect(spy).toHaveBeenCalledTimes(1);
|
expect(spy).toHaveBeenCalledTimes(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('mobile friendly video', () => {
|
|
||||||
const spy = jest.fn();
|
|
||||||
localValidators.hasMobileFriendlyVideos = spy;
|
|
||||||
|
|
||||||
const props = {
|
|
||||||
data: {
|
|
||||||
videos: {},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
getValidatedValue(props, 'mobileFriendlyVideo');
|
|
||||||
expect(spy).toHaveBeenCalledTimes(1);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('diverse sequences', () => {
|
it('diverse sequences', () => {
|
||||||
const spy = jest.fn();
|
const spy = jest.fn();
|
||||||
localValidators.hasDiverseSequences = spy;
|
localValidators.hasDiverseSequences = spy;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React, { useEffect } from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { getConfig } from '@edx/frontend-platform';
|
import { getConfig } from '@edx/frontend-platform';
|
||||||
import { injectIntl, intlShape } from '@edx/frontend-platform/i18n';
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||||
import { Helmet } from 'react-helmet';
|
import { Helmet } from 'react-helmet';
|
||||||
import { useDispatch, useSelector } from 'react-redux';
|
import { useDispatch, useSelector } from 'react-redux';
|
||||||
import { Container, Stack } from '@openedx/paragon';
|
import { Container, Stack } from '@openedx/paragon';
|
||||||
@@ -17,9 +17,8 @@ import ConnectionErrorAlert from '../generic/ConnectionErrorAlert';
|
|||||||
|
|
||||||
const CourseChecklist = ({
|
const CourseChecklist = ({
|
||||||
courseId,
|
courseId,
|
||||||
// injected,
|
|
||||||
intl,
|
|
||||||
}) => {
|
}) => {
|
||||||
|
const intl = useIntl();
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
const courseDetails = useModel('courseDetails', courseId);
|
const courseDetails = useModel('courseDetails', courseId);
|
||||||
const enableQuality = getConfig().ENABLE_CHECKLIST_QUALITY === 'true';
|
const enableQuality = getConfig().ENABLE_CHECKLIST_QUALITY === 'true';
|
||||||
@@ -97,8 +96,6 @@ const CourseChecklist = ({
|
|||||||
|
|
||||||
CourseChecklist.propTypes = {
|
CourseChecklist.propTypes = {
|
||||||
courseId: PropTypes.string.isRequired,
|
courseId: PropTypes.string.isRequired,
|
||||||
// injected
|
|
||||||
intl: intlShape.isRequired,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export default injectIntl(CourseChecklist);
|
export default CourseChecklist;
|
||||||
|
|||||||
@@ -75,48 +75,90 @@ describe('<CourseLibraries />', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('shows alert when out of sync components are present', async () => {
|
it('shows alert when out of sync components are present', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
await renderCourseLibrariesPage(mockGetEntityLinks.courseKey);
|
await renderCourseLibrariesPage(mockGetEntityLinks.courseKey);
|
||||||
const allTab = await screen.findByRole('tab', { name: 'Libraries' });
|
const allTab = await screen.findByRole('tab', { name: 'Libraries' });
|
||||||
const reviewTab = await screen.findByRole('tab', { name: 'Review Content Updates 5' });
|
const reviewTab = await screen.findByRole('tab', { name: 'Review Content Updates 7' });
|
||||||
// review tab should be open by default as outOfSyncCount is greater than 0
|
// review tab should be open by default as outOfSyncCount is greater than 0
|
||||||
expect(reviewTab).toHaveAttribute('aria-selected', 'true');
|
expect(reviewTab).toHaveAttribute('aria-selected', 'true');
|
||||||
|
|
||||||
userEvent.click(allTab);
|
await user.click(allTab);
|
||||||
const alert = await screen.findByRole('alert');
|
const alert = await screen.findByRole('alert');
|
||||||
expect(await within(alert).findByText(
|
expect(await within(alert).findByText(
|
||||||
'5 library components are out of sync. Review updates to accept or ignore changes',
|
'7 library components are out of sync. Review updates to accept or ignore changes',
|
||||||
)).toBeInTheDocument();
|
)).toBeInTheDocument();
|
||||||
expect(allTab).toHaveAttribute('aria-selected', 'true');
|
expect(allTab).toHaveAttribute('aria-selected', 'true');
|
||||||
|
|
||||||
const reviewBtn = await screen.findByRole('button', { name: 'Review' });
|
const reviewBtn = await screen.findByRole('button', { name: 'Review' });
|
||||||
userEvent.click(reviewBtn);
|
await user.click(reviewBtn);
|
||||||
|
|
||||||
expect(allTab).toHaveAttribute('aria-selected', 'false');
|
expect(allTab).toHaveAttribute('aria-selected', 'false');
|
||||||
expect(await screen.findByRole('tab', { name: 'Review Content Updates 5' })).toHaveAttribute('aria-selected', 'true');
|
expect(await screen.findByRole('tab', { name: 'Review Content Updates 7' })).toHaveAttribute('aria-selected', 'true');
|
||||||
expect(alert).not.toBeInTheDocument();
|
expect(alert).not.toBeInTheDocument();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('hide alert on dismiss', async () => {
|
it('hide alert on dismiss', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
await renderCourseLibrariesPage(mockGetEntityLinks.courseKey);
|
await renderCourseLibrariesPage(mockGetEntityLinks.courseKey);
|
||||||
const reviewTab = await screen.findByRole('tab', { name: 'Review Content Updates 5' });
|
const reviewTab = await screen.findByRole('tab', { name: 'Review Content Updates 7' });
|
||||||
// review tab should be open by default as outOfSyncCount is greater than 0
|
// review tab should be open by default as outOfSyncCount is greater than 0
|
||||||
expect(reviewTab).toHaveAttribute('aria-selected', 'true');
|
expect(reviewTab).toHaveAttribute('aria-selected', 'true');
|
||||||
const allTab = await screen.findByRole('tab', { name: 'Libraries' });
|
const allTab = await screen.findByRole('tab', { name: 'Libraries' });
|
||||||
userEvent.click(allTab);
|
await user.click(allTab);
|
||||||
expect(allTab).toHaveAttribute('aria-selected', 'true');
|
expect(allTab).toHaveAttribute('aria-selected', 'true');
|
||||||
|
|
||||||
const alert = await screen.findByRole('alert');
|
const alert = await screen.findByRole('alert');
|
||||||
expect(await within(alert).findByText(
|
expect(await within(alert).findByText(
|
||||||
'5 library components are out of sync. Review updates to accept or ignore changes',
|
'7 library components are out of sync. Review updates to accept or ignore changes',
|
||||||
)).toBeInTheDocument();
|
)).toBeInTheDocument();
|
||||||
const dismissBtn = await screen.findByRole('button', { name: 'Dismiss' });
|
const dismissBtn = await screen.findByRole('button', { name: 'Dismiss' });
|
||||||
userEvent.click(dismissBtn);
|
await user.click(dismissBtn);
|
||||||
expect(allTab).toHaveAttribute('aria-selected', 'true');
|
expect(allTab).toHaveAttribute('aria-selected', 'true');
|
||||||
waitFor(() => expect(alert).not.toBeInTheDocument());
|
waitFor(() => expect(alert).not.toBeInTheDocument());
|
||||||
// review updates button
|
// review updates button
|
||||||
const reviewActionBtn = await screen.findByRole('button', { name: 'Review Updates' });
|
const reviewActionBtn = await screen.findByRole('button', { name: 'Review Updates' });
|
||||||
userEvent.click(reviewActionBtn);
|
await user.click(reviewActionBtn);
|
||||||
expect(await screen.findByRole('tab', { name: 'Review Content Updates 5' })).toHaveAttribute('aria-selected', 'true');
|
expect(await screen.findByRole('tab', { name: 'Review Content Updates 7' })).toHaveAttribute('aria-selected', 'true');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('show alert if max lastPublishedDate is greated than the local storage value', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
|
const lastPublishedDate = new Date('2025-05-01T22:20:44.989042Z');
|
||||||
|
localStorage.setItem(
|
||||||
|
`outOfSyncCountAlert-${mockGetEntityLinks.courseKey}`,
|
||||||
|
String(lastPublishedDate.getTime() - 1000),
|
||||||
|
);
|
||||||
|
|
||||||
|
await renderCourseLibrariesPage(mockGetEntityLinks.courseKey);
|
||||||
|
const allTab = await screen.findByRole('tab', { name: 'Libraries' });
|
||||||
|
const reviewTab = await screen.findByRole('tab', { name: 'Review Content Updates 7' });
|
||||||
|
// review tab should be open by default as outOfSyncCount is greater than 0
|
||||||
|
expect(reviewTab).toHaveAttribute('aria-selected', 'true');
|
||||||
|
|
||||||
|
await user.click(allTab);
|
||||||
|
const alert = await screen.findByRole('alert');
|
||||||
|
expect(await within(alert).findByText(
|
||||||
|
'7 library components are out of sync. Review updates to accept or ignore changes',
|
||||||
|
)).toBeInTheDocument();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('doesnt show alert if max lastPublishedDate is less than the local storage value', async () => {
|
||||||
|
const user = userEvent.setup();
|
||||||
|
const lastPublishedDate = new Date('2025-05-01T22:20:44.989042Z');
|
||||||
|
localStorage.setItem(
|
||||||
|
`outOfSyncCountAlert-${mockGetEntityLinks.courseKey}`,
|
||||||
|
String(lastPublishedDate.getTime() + 1000),
|
||||||
|
);
|
||||||
|
|
||||||
|
await renderCourseLibrariesPage(mockGetEntityLinks.courseKey);
|
||||||
|
const allTab = await screen.findByRole('tab', { name: 'Libraries' });
|
||||||
|
const reviewTab = await screen.findByRole('tab', { name: 'Review Content Updates 7' });
|
||||||
|
// review tab should be open by default as outOfSyncCount is greater than 0
|
||||||
|
expect(reviewTab).toHaveAttribute('aria-selected', 'true');
|
||||||
|
await user.click(allTab);
|
||||||
|
expect(allTab).toHaveAttribute('aria-selected', 'true');
|
||||||
|
|
||||||
|
expect(screen.queryByRole('alert')).not.toBeInTheDocument();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -151,94 +193,138 @@ describe('<CourseLibraries ReviewTab />', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('shows all readyToSync links', async () => {
|
it('shows all readyToSync links', async () => {
|
||||||
await renderCourseLibrariesReviewPage(mockGetEntityLinksSummaryByDownstreamContext.courseKey);
|
await renderCourseLibrariesReviewPage();
|
||||||
const updateBtns = await screen.findAllByRole('button', { name: 'Update' });
|
const updateBtns = await screen.findAllByRole('button', { name: 'Update' });
|
||||||
expect(updateBtns.length).toEqual(5);
|
expect(updateBtns.length).toEqual(7);
|
||||||
const ignoreBtns = await screen.findAllByRole('button', { name: 'Ignore' });
|
const ignoreBtns = await screen.findAllByRole('button', { name: 'Ignore' });
|
||||||
expect(ignoreBtns.length).toEqual(5);
|
expect(ignoreBtns.length).toEqual(7);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('update changes works', async () => {
|
test.each([
|
||||||
|
{
|
||||||
|
label: 'update changes works with components',
|
||||||
|
itemIndex: 0,
|
||||||
|
expectedToastMsg: 'Success! "Dropdown" is updated',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'update changes works with containers',
|
||||||
|
itemIndex: 5,
|
||||||
|
expectedToastMsg: 'Success! "Unit 1" is updated',
|
||||||
|
},
|
||||||
|
])('$label', async ({ itemIndex, expectedToastMsg }) => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const mockInvalidateQueries = jest.spyOn(queryClient, 'invalidateQueries');
|
const mockInvalidateQueries = jest.spyOn(queryClient, 'invalidateQueries');
|
||||||
const usageKey = mockGetEntityLinks.response.results[0].downstreamUsageKey;
|
const usageKey = mockGetEntityLinks.response[itemIndex].downstreamUsageKey;
|
||||||
axiosMock.onPost(libraryBlockChangesUrl(usageKey)).reply(200, {});
|
axiosMock.onPost(libraryBlockChangesUrl(usageKey)).reply(200, {});
|
||||||
await renderCourseLibrariesReviewPage(mockGetEntityLinksSummaryByDownstreamContext.courseKey);
|
await renderCourseLibrariesReviewPage(mockGetEntityLinksSummaryByDownstreamContext.courseKey);
|
||||||
const updateBtns = await screen.findAllByRole('button', { name: 'Update' });
|
const updateBtns = await screen.findAllByRole('button', { name: 'Update' });
|
||||||
expect(updateBtns.length).toEqual(5);
|
expect(updateBtns.length).toEqual(7);
|
||||||
userEvent.click(updateBtns[0]);
|
await user.click(updateBtns[itemIndex]);
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(axiosMock.history.post.length).toEqual(1);
|
expect(axiosMock.history.post.length).toEqual(1);
|
||||||
});
|
});
|
||||||
expect(axiosMock.history.post[0].url).toEqual(libraryBlockChangesUrl(usageKey));
|
expect(axiosMock.history.post[0].url).toEqual(libraryBlockChangesUrl(usageKey));
|
||||||
expect(mockShowToast).toHaveBeenCalledWith('Success! "Dropdown" is updated');
|
expect(mockShowToast).toHaveBeenCalledWith(expectedToastMsg);
|
||||||
expect(mockInvalidateQueries).toHaveBeenCalledWith(['courseLibraries', 'course-v1:OpenEdx+DemoX+CourseX']);
|
expect(mockInvalidateQueries).toHaveBeenCalledWith({ queryKey: ['courseLibraries', 'course-v1:OpenEdx+DemoX+CourseX'] });
|
||||||
});
|
});
|
||||||
|
|
||||||
it('update changes works in preview modal', async () => {
|
test.each([
|
||||||
|
{
|
||||||
|
label: 'update changes works in preview modal with components',
|
||||||
|
itemIndex: 0,
|
||||||
|
expectedToastMsg: 'Success! "Dropdown" is updated',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'update changes works in preview modal with containers',
|
||||||
|
itemIndex: 5,
|
||||||
|
expectedToastMsg: 'Success! "Unit 1" is updated',
|
||||||
|
},
|
||||||
|
])('$label', async ({ itemIndex, expectedToastMsg }) => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const mockInvalidateQueries = jest.spyOn(queryClient, 'invalidateQueries');
|
const mockInvalidateQueries = jest.spyOn(queryClient, 'invalidateQueries');
|
||||||
const usageKey = mockGetEntityLinks.response.results[0].downstreamUsageKey;
|
const usageKey = mockGetEntityLinks.response[itemIndex].downstreamUsageKey;
|
||||||
axiosMock.onPost(libraryBlockChangesUrl(usageKey)).reply(200, {});
|
axiosMock.onPost(libraryBlockChangesUrl(usageKey)).reply(200, {});
|
||||||
await renderCourseLibrariesReviewPage(mockGetEntityLinksSummaryByDownstreamContext.courseKey);
|
await renderCourseLibrariesReviewPage(mockGetEntityLinksSummaryByDownstreamContext.courseKey);
|
||||||
const previewBtns = await screen.findAllByRole('button', { name: 'Review Updates' });
|
const previewBtns = await screen.findAllByRole('button', { name: 'Review Updates' });
|
||||||
expect(previewBtns.length).toEqual(5);
|
expect(previewBtns.length).toEqual(7);
|
||||||
userEvent.click(previewBtns[0]);
|
await user.click(previewBtns[itemIndex]);
|
||||||
const dialog = await screen.findByRole('dialog');
|
const dialog = await screen.findByRole('dialog');
|
||||||
const confirmBtn = await within(dialog).findByRole('button', { name: 'Accept changes' });
|
const confirmBtn = await within(dialog).findByRole('button', { name: 'Accept changes' });
|
||||||
userEvent.click(confirmBtn);
|
await user.click(confirmBtn);
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(axiosMock.history.post.length).toEqual(1);
|
expect(axiosMock.history.post.length).toEqual(1);
|
||||||
});
|
});
|
||||||
expect(axiosMock.history.post[0].url).toEqual(libraryBlockChangesUrl(usageKey));
|
expect(axiosMock.history.post[0].url).toEqual(libraryBlockChangesUrl(usageKey));
|
||||||
expect(mockShowToast).toHaveBeenCalledWith('Success! "Dropdown" is updated');
|
expect(mockShowToast).toHaveBeenCalledWith(expectedToastMsg);
|
||||||
expect(mockInvalidateQueries).toHaveBeenCalledWith(['courseLibraries', 'course-v1:OpenEdx+DemoX+CourseX']);
|
expect(mockInvalidateQueries).toHaveBeenCalledWith({ queryKey: ['courseLibraries', 'course-v1:OpenEdx+DemoX+CourseX'] });
|
||||||
});
|
});
|
||||||
|
|
||||||
it('ignore change works', async () => {
|
test.each([
|
||||||
|
{
|
||||||
|
label: 'ignore change works with components',
|
||||||
|
itemIndex: 0,
|
||||||
|
expectedToastMsg: '"Dropdown" will remain out of sync with library content. You will be notified when this component is updated again.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'ignore change works with containers',
|
||||||
|
itemIndex: 5,
|
||||||
|
expectedToastMsg: '"Unit 1" will remain out of sync with library content. You will be notified when this component is updated again.',
|
||||||
|
},
|
||||||
|
])('$label', async ({ itemIndex, expectedToastMsg }) => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const mockInvalidateQueries = jest.spyOn(queryClient, 'invalidateQueries');
|
const mockInvalidateQueries = jest.spyOn(queryClient, 'invalidateQueries');
|
||||||
const usageKey = mockGetEntityLinks.response.results[0].downstreamUsageKey;
|
const usageKey = mockGetEntityLinks.response[itemIndex].downstreamUsageKey;
|
||||||
axiosMock.onDelete(libraryBlockChangesUrl(usageKey)).reply(204, {});
|
axiosMock.onDelete(libraryBlockChangesUrl(usageKey)).reply(204, {});
|
||||||
await renderCourseLibrariesReviewPage(mockGetEntityLinksSummaryByDownstreamContext.courseKey);
|
await renderCourseLibrariesReviewPage(mockGetEntityLinksSummaryByDownstreamContext.courseKey);
|
||||||
const ignoreBtns = await screen.findAllByRole('button', { name: 'Ignore' });
|
const ignoreBtns = await screen.findAllByRole('button', { name: 'Ignore' });
|
||||||
expect(ignoreBtns.length).toEqual(5);
|
expect(ignoreBtns.length).toEqual(7);
|
||||||
// Show confirmation modal on clicking ignore.
|
// Show confirmation modal on clicking ignore.
|
||||||
userEvent.click(ignoreBtns[0]);
|
await user.click(ignoreBtns[itemIndex]);
|
||||||
const dialog = await screen.findByRole('dialog', { name: 'Ignore these changes?' });
|
const dialog = await screen.findByRole('dialog', { name: 'Ignore these changes?' });
|
||||||
expect(dialog).toBeInTheDocument();
|
expect(dialog).toBeInTheDocument();
|
||||||
const confirmBtn = await within(dialog).findByRole('button', { name: 'Ignore' });
|
const confirmBtn = await within(dialog).findByRole('button', { name: 'Ignore' });
|
||||||
userEvent.click(confirmBtn);
|
await user.click(confirmBtn);
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(axiosMock.history.delete.length).toEqual(1);
|
expect(axiosMock.history.delete.length).toEqual(1);
|
||||||
});
|
});
|
||||||
expect(axiosMock.history.delete[0].url).toEqual(libraryBlockChangesUrl(usageKey));
|
expect(axiosMock.history.delete[0].url).toEqual(libraryBlockChangesUrl(usageKey));
|
||||||
expect(mockShowToast).toHaveBeenCalledWith(
|
expect(mockShowToast).toHaveBeenCalledWith(expectedToastMsg);
|
||||||
'"Dropdown" will remain out of sync with library content. You will be notified when this component is updated again.',
|
expect(mockInvalidateQueries).toHaveBeenCalledWith({ queryKey: ['courseLibraries', 'course-v1:OpenEdx+DemoX+CourseX'] });
|
||||||
);
|
|
||||||
expect(mockInvalidateQueries).toHaveBeenCalledWith(['courseLibraries', 'course-v1:OpenEdx+DemoX+CourseX']);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('ignore change works in preview', async () => {
|
test.each([
|
||||||
|
{
|
||||||
|
label: 'ignore change works with components',
|
||||||
|
itemIndex: 0,
|
||||||
|
expectedToastMsg: '"Dropdown" will remain out of sync with library content. You will be notified when this component is updated again.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'ignore change works with containers',
|
||||||
|
itemIndex: 5,
|
||||||
|
expectedToastMsg: '"Unit 1" will remain out of sync with library content. You will be notified when this component is updated again.',
|
||||||
|
},
|
||||||
|
])('$label', async ({ itemIndex, expectedToastMsg }) => {
|
||||||
|
const user = userEvent.setup();
|
||||||
const mockInvalidateQueries = jest.spyOn(queryClient, 'invalidateQueries');
|
const mockInvalidateQueries = jest.spyOn(queryClient, 'invalidateQueries');
|
||||||
const usageKey = mockGetEntityLinks.response.results[0].downstreamUsageKey;
|
const usageKey = mockGetEntityLinks.response[itemIndex].downstreamUsageKey;
|
||||||
axiosMock.onDelete(libraryBlockChangesUrl(usageKey)).reply(204, {});
|
axiosMock.onDelete(libraryBlockChangesUrl(usageKey)).reply(204, {});
|
||||||
await renderCourseLibrariesReviewPage(mockGetEntityLinksSummaryByDownstreamContext.courseKey);
|
await renderCourseLibrariesReviewPage(mockGetEntityLinksSummaryByDownstreamContext.courseKey);
|
||||||
const previewBtns = await screen.findAllByRole('button', { name: 'Review Updates' });
|
const previewBtns = await screen.findAllByRole('button', { name: 'Review Updates' });
|
||||||
expect(previewBtns.length).toEqual(5);
|
expect(previewBtns.length).toEqual(7);
|
||||||
userEvent.click(previewBtns[0]);
|
await user.click(previewBtns[itemIndex]);
|
||||||
const previewDialog = await screen.findByRole('dialog');
|
const previewDialog = await screen.findByRole('dialog');
|
||||||
const ignoreBtn = await within(previewDialog).findByRole('button', { name: 'Ignore changes' });
|
const ignoreBtn = await within(previewDialog).findByRole('button', { name: 'Ignore changes' });
|
||||||
userEvent.click(ignoreBtn);
|
await user.click(ignoreBtn);
|
||||||
// Show confirmation modal on clicking ignore.
|
// Show confirmation modal on clicking ignore.
|
||||||
const dialog = await screen.findByRole('dialog', { name: 'Ignore these changes?' });
|
const dialog = await screen.findByRole('dialog', { name: 'Ignore these changes?' });
|
||||||
expect(dialog).toBeInTheDocument();
|
expect(dialog).toBeInTheDocument();
|
||||||
const confirmBtn = await within(dialog).findByRole('button', { name: 'Ignore' });
|
const confirmBtn = await within(dialog).findByRole('button', { name: 'Ignore' });
|
||||||
userEvent.click(confirmBtn);
|
await user.click(confirmBtn);
|
||||||
await waitFor(() => {
|
await waitFor(() => {
|
||||||
expect(axiosMock.history.delete.length).toEqual(1);
|
expect(axiosMock.history.delete.length).toEqual(1);
|
||||||
});
|
});
|
||||||
expect(axiosMock.history.delete[0].url).toEqual(libraryBlockChangesUrl(usageKey));
|
expect(axiosMock.history.delete[0].url).toEqual(libraryBlockChangesUrl(usageKey));
|
||||||
expect(mockShowToast).toHaveBeenCalledWith(
|
expect(mockShowToast).toHaveBeenCalledWith(expectedToastMsg);
|
||||||
'"Dropdown" will remain out of sync with library content. You will be notified when this component is updated again.',
|
expect(mockInvalidateQueries).toHaveBeenCalledWith({ queryKey: ['courseLibraries', 'course-v1:OpenEdx+DemoX+CourseX'] });
|
||||||
);
|
|
||||||
expect(mockInvalidateQueries).toHaveBeenCalledWith(['courseLibraries', 'course-v1:OpenEdx+DemoX+CourseX']);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ export const CourseLibraries: React.FC<Props> = ({ courseId }) => {
|
|||||||
if (tabKey !== CourseLibraryTabs.review) {
|
if (tabKey !== CourseLibraryTabs.review) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (!outOfSyncCount || outOfSyncCount === 0) {
|
if (!outOfSyncCount) {
|
||||||
return (
|
return (
|
||||||
<Stack direction="horizontal" gap={2}>
|
<Stack direction="horizontal" gap={2}>
|
||||||
<Icon src={CheckCircle} size="xs" />
|
<Icon src={CheckCircle} size="xs" />
|
||||||
|
|||||||
@@ -18,12 +18,11 @@ interface OutOfSyncAlertProps {
|
|||||||
* in course can be updated. Following are the conditions for displaying the alert.
|
* in course can be updated. Following are the conditions for displaying the alert.
|
||||||
*
|
*
|
||||||
* * The alert is displayed if components are out of sync.
|
* * The alert is displayed if components are out of sync.
|
||||||
* * If the user clicks on dismiss button, the state is stored in localstorage of user
|
* * If the user clicks on dismiss button, the state of dismiss is stored in localstorage of user
|
||||||
* in this format: outOfSyncCountAlert-${courseId} = <number of out of sync components>.
|
* in this format: outOfSyncCountAlert-${courseId} = <datetime value in milliseconds>.
|
||||||
* * If the number of sync components don't change for the course and the user opens outline
|
* * If there are not new published components for the course and the user opens outline
|
||||||
* in the same browser, they don't see the alert again.
|
* in the same browser, they don't see the alert again.
|
||||||
* * If the number changes, i.e., if a new component is out of sync or the user updates or ignores
|
* * If there is a new published component upstream, the alert is displayed again.
|
||||||
* a component, the alert is displayed again.
|
|
||||||
*/
|
*/
|
||||||
export const OutOfSyncAlert: React.FC<OutOfSyncAlertProps> = ({
|
export const OutOfSyncAlert: React.FC<OutOfSyncAlertProps> = ({
|
||||||
showAlert,
|
showAlert,
|
||||||
@@ -34,7 +33,9 @@ export const OutOfSyncAlert: React.FC<OutOfSyncAlertProps> = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const { data, isLoading } = useEntityLinksSummaryByDownstreamContext(courseId);
|
const { data, isLoading } = useEntityLinksSummaryByDownstreamContext(courseId);
|
||||||
const outOfSyncCount = data?.reduce((count, lib) => count + lib.readyToSyncCount, 0);
|
const outOfSyncCount = data?.reduce((count, lib) => count + (lib.readyToSyncCount || 0), 0);
|
||||||
|
const lastPublishedDate = data?.map(lib => new Date(lib.lastPublishedAt || 0).getTime())
|
||||||
|
.reduce((acc, lastPublished) => Math.max(lastPublished, acc), 0);
|
||||||
const alertKey = `outOfSyncCountAlert-${courseId}`;
|
const alertKey = `outOfSyncCountAlert-${courseId}`;
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -46,13 +47,14 @@ export const OutOfSyncAlert: React.FC<OutOfSyncAlertProps> = ({
|
|||||||
setShowAlert(false);
|
setShowAlert(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const dismissedAlert = localStorage.getItem(alertKey);
|
const dismissedAlertDate = parseInt(localStorage.getItem(alertKey) ?? '0', 10);
|
||||||
setShowAlert(parseInt(dismissedAlert || '', 10) !== outOfSyncCount);
|
|
||||||
}, [outOfSyncCount, isLoading, data]);
|
setShowAlert((lastPublishedDate ?? 0) > dismissedAlertDate);
|
||||||
|
}, [outOfSyncCount, lastPublishedDate, isLoading, data]);
|
||||||
|
|
||||||
const dismissAlert = () => {
|
const dismissAlert = () => {
|
||||||
setShowAlert(false);
|
setShowAlert(false);
|
||||||
localStorage.setItem(alertKey, String(outOfSyncCount));
|
localStorage.setItem(alertKey, Date.now().toString());
|
||||||
onDismiss?.();
|
onDismiss?.();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, {
|
import React, {
|
||||||
useCallback, useContext, useEffect, useMemo, useState,
|
useCallback, useContext, useMemo, useState,
|
||||||
} from 'react';
|
} from 'react';
|
||||||
import { getConfig } from '@edx/frontend-platform';
|
import { getConfig } from '@edx/frontend-platform';
|
||||||
import { useIntl } from '@edx/frontend-platform/i18n';
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
||||||
@@ -14,14 +14,12 @@ import {
|
|||||||
useToggle,
|
useToggle,
|
||||||
} from '@openedx/paragon';
|
} from '@openedx/paragon';
|
||||||
|
|
||||||
import {
|
import { tail, keyBy } from 'lodash';
|
||||||
tail, keyBy, orderBy, merge, omitBy,
|
|
||||||
} from 'lodash';
|
|
||||||
import { useQueryClient } from '@tanstack/react-query';
|
import { useQueryClient } from '@tanstack/react-query';
|
||||||
import { Loop, Warning } from '@openedx/paragon/icons';
|
import { Loop } from '@openedx/paragon/icons';
|
||||||
import messages from './messages';
|
import messages from './messages';
|
||||||
import previewChangesMessages from '../course-unit/preview-changes/messages';
|
import previewChangesMessages from '../course-unit/preview-changes/messages';
|
||||||
import { courseLibrariesQueryKeys, useEntityLinks } from './data/apiHooks';
|
import { invalidateLinksQuery, useEntityLinks } from './data/apiHooks';
|
||||||
import {
|
import {
|
||||||
SearchContextProvider, SearchKeywordsField, useSearchContext, BlockTypeLabel, Highlight, SearchSortWidget,
|
SearchContextProvider, SearchKeywordsField, useSearchContext, BlockTypeLabel, Highlight, SearchSortWidget,
|
||||||
} from '../search-manager';
|
} from '../search-manager';
|
||||||
@@ -37,28 +35,45 @@ import { useLoadOnScroll } from '../hooks';
|
|||||||
import DeleteModal from '../generic/delete-modal/DeleteModal';
|
import DeleteModal from '../generic/delete-modal/DeleteModal';
|
||||||
import { PublishableEntityLink } from './data/api';
|
import { PublishableEntityLink } from './data/api';
|
||||||
import AlertError from '../generic/alert-error';
|
import AlertError from '../generic/alert-error';
|
||||||
import AlertMessage from '../generic/alert-message';
|
import NewsstandIcon from '../generic/NewsstandIcon';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
courseId: string;
|
courseId: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface BlockCardProps {
|
interface ItemCardProps {
|
||||||
info: ContentHit;
|
info: ContentHit;
|
||||||
|
itemType: 'component' | 'container';
|
||||||
actions?: React.ReactNode;
|
actions?: React.ReactNode;
|
||||||
|
libraryName?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const BlockCard: React.FC<BlockCardProps> = ({ info, actions }) => {
|
const ItemCard: React.FC<ItemCardProps> = ({
|
||||||
|
info,
|
||||||
|
itemType,
|
||||||
|
actions,
|
||||||
|
libraryName,
|
||||||
|
}) => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const componentIcon = getItemIcon(info.blockType);
|
const itemIcon = getItemIcon(info.blockType);
|
||||||
const breadcrumbs = tail(info.breadcrumbs) as Array<{ displayName: string, usageKey: string }>;
|
const breadcrumbs = tail(info.breadcrumbs) as Array<{ displayName: string, usageKey: string }>;
|
||||||
|
|
||||||
const getBlockLink = useCallback(() => {
|
const getItemLink = useCallback(() => {
|
||||||
let key = info.usageKey;
|
let key = info.usageKey;
|
||||||
if (breadcrumbs?.length > 1) {
|
if (breadcrumbs?.length > 1) {
|
||||||
key = breadcrumbs[breadcrumbs.length - 1].usageKey || key;
|
key = breadcrumbs[breadcrumbs.length - 1].usageKey || key;
|
||||||
}
|
}
|
||||||
return `${getConfig().STUDIO_BASE_URL}/container/${key}`;
|
|
||||||
|
if (itemType === 'component') {
|
||||||
|
return `${getConfig().STUDIO_BASE_URL}/container/${key}`;
|
||||||
|
}
|
||||||
|
if (itemType === 'container') {
|
||||||
|
const encodedKey = encodeURIComponent(key);
|
||||||
|
return `${getConfig().STUDIO_BASE_URL}/course/${info.contextKey}?show=${encodedKey}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// istanbul ignore next
|
||||||
|
return '';
|
||||||
}, [info]);
|
}, [info]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -72,7 +87,7 @@ const BlockCard: React.FC<BlockCardProps> = ({ info, actions }) => {
|
|||||||
<Stack direction="horizontal" gap={2}>
|
<Stack direction="horizontal" gap={2}>
|
||||||
<Stack direction="vertical" gap={1}>
|
<Stack direction="vertical" gap={1}>
|
||||||
<Stack direction="horizontal" gap={1} className="micro text-gray-500">
|
<Stack direction="horizontal" gap={1} className="micro text-gray-500">
|
||||||
<Icon src={componentIcon} size="xs" />
|
<Icon src={itemIcon} size="xs" />
|
||||||
<BlockTypeLabel blockType={info.blockType} />
|
<BlockTypeLabel blockType={info.blockType} />
|
||||||
</Stack>
|
</Stack>
|
||||||
<Stack direction="horizontal" className="small" gap={1}>
|
<Stack direction="horizontal" className="small" gap={1}>
|
||||||
@@ -81,15 +96,27 @@ const BlockCard: React.FC<BlockCardProps> = ({ info, actions }) => {
|
|||||||
</strong>
|
</strong>
|
||||||
</Stack>
|
</Stack>
|
||||||
<Stack direction="horizontal" className="micro" gap={3}>
|
<Stack direction="horizontal" className="micro" gap={3}>
|
||||||
|
{libraryName && (
|
||||||
|
<Stack direction="horizontal" gap={2}>
|
||||||
|
<Icon src={NewsstandIcon} size="xs" />
|
||||||
|
{libraryName}
|
||||||
|
</Stack>
|
||||||
|
)}
|
||||||
{intl.formatMessage(messages.breadcrumbLabel)}
|
{intl.formatMessage(messages.breadcrumbLabel)}
|
||||||
<Hyperlink showLaunchIcon={false} destination={getBlockLink()} target="_blank">
|
<Hyperlink showLaunchIcon={false} destination={getItemLink()} target="_blank">
|
||||||
<Breadcrumb
|
{info.blockType === 'chapter' ? (
|
||||||
className="micro text-gray-700 border-bottom"
|
<div className="micro text-gray-700 border-bottom">
|
||||||
ariaLabel={intl.formatMessage(messages.breadcrumbLabel)}
|
{intl.formatMessage(messages.viewSectionInCourseLabel)}
|
||||||
links={breadcrumbs.map((breadcrumb) => ({ label: breadcrumb.displayName }))}
|
</div>
|
||||||
spacer={<span className="custom-spacer">/</span>}
|
) : (
|
||||||
linkAs="span"
|
<Breadcrumb
|
||||||
/>
|
className="micro text-gray-700 border-bottom"
|
||||||
|
ariaLabel={intl.formatMessage(messages.breadcrumbLabel)}
|
||||||
|
links={breadcrumbs.map((breadcrumb) => ({ label: breadcrumb.displayName }))}
|
||||||
|
spacer={<span className="custom-spacer">/</span>}
|
||||||
|
linkAs="span"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</Hyperlink>
|
</Hyperlink>
|
||||||
</Stack>
|
</Stack>
|
||||||
</Stack>
|
</Stack>
|
||||||
@@ -100,37 +127,31 @@ const BlockCard: React.FC<BlockCardProps> = ({ info, actions }) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const ComponentReviewList = ({
|
const ItemReviewList = ({
|
||||||
outOfSyncComponents,
|
outOfSyncItems,
|
||||||
onSearchUpdate,
|
|
||||||
}: {
|
}: {
|
||||||
outOfSyncComponents: PublishableEntityLink[];
|
outOfSyncItems: PublishableEntityLink[];
|
||||||
onSearchUpdate: () => void;
|
|
||||||
}) => {
|
}) => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const { showToast } = useContext(ToastContext);
|
const { showToast } = useContext(ToastContext);
|
||||||
const [blockData, setBlockData] = useState<LibraryChangesMessageData | undefined>(undefined);
|
const [blockData, setBlockData] = useState<LibraryChangesMessageData | undefined>(undefined);
|
||||||
// ignore changes confirmation modal toggle.
|
// ignore changes confirmation modal toggle.
|
||||||
const [isConfirmModalOpen, openConfirmModal, closeConfirmModal] = useToggle(false);
|
const [isConfirmModalOpen, openConfirmModal, closeConfirmModal] = useToggle(false);
|
||||||
|
// Toggle preview changes modal
|
||||||
|
const [isPreviewModalOpen, openPreviewModal, closePreviewModal] = useToggle(false);
|
||||||
|
const acceptChangesMutation = useAcceptLibraryBlockChanges();
|
||||||
|
const ignoreChangesMutation = useIgnoreLibraryBlockChanges();
|
||||||
|
|
||||||
const {
|
const {
|
||||||
hits: downstreamInfo,
|
hits,
|
||||||
isLoading: isIndexDataLoading,
|
isLoading: isIndexDataLoading,
|
||||||
searchKeywords,
|
|
||||||
searchSortOrder,
|
|
||||||
hasError,
|
hasError,
|
||||||
hasNextPage,
|
hasNextPage,
|
||||||
isFetchingNextPage,
|
isFetchingNextPage,
|
||||||
fetchNextPage,
|
fetchNextPage,
|
||||||
} = useSearchContext() as {
|
} = useSearchContext();
|
||||||
hits: ContentHit[];
|
|
||||||
isLoading: boolean;
|
const downstreamInfo = hits as ContentHit[];
|
||||||
searchKeywords: string;
|
|
||||||
searchSortOrder: SearchSortOption;
|
|
||||||
hasError: boolean;
|
|
||||||
hasNextPage: boolean | undefined,
|
|
||||||
isFetchingNextPage: boolean;
|
|
||||||
fetchNextPage: () => void;
|
|
||||||
};
|
|
||||||
|
|
||||||
useLoadOnScroll(
|
useLoadOnScroll(
|
||||||
hasNextPage,
|
hasNextPage,
|
||||||
@@ -139,51 +160,37 @@ const ComponentReviewList = ({
|
|||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
|
|
||||||
const outOfSyncComponentsByKey = useMemo(
|
const outOfSyncItemsByKey = useMemo(
|
||||||
() => keyBy(outOfSyncComponents, 'downstreamUsageKey'),
|
() => keyBy(outOfSyncItems, 'downstreamUsageKey'),
|
||||||
[outOfSyncComponents],
|
[outOfSyncItems],
|
||||||
);
|
|
||||||
const downstreamInfoByKey = useMemo(
|
|
||||||
() => keyBy(downstreamInfo, 'usageKey'),
|
|
||||||
[downstreamInfo],
|
|
||||||
);
|
);
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
useEffect(() => {
|
const setSelectedBlockData = useCallback((info: ContentHit) => {
|
||||||
if (searchKeywords) {
|
|
||||||
onSearchUpdate();
|
|
||||||
}
|
|
||||||
}, [searchKeywords]);
|
|
||||||
|
|
||||||
// Toggle preview changes modal
|
|
||||||
const [isModalOpen, openModal, closeModal] = useToggle(false);
|
|
||||||
const acceptChangesMutation = useAcceptLibraryBlockChanges();
|
|
||||||
const ignoreChangesMutation = useIgnoreLibraryBlockChanges();
|
|
||||||
|
|
||||||
const setSeletecdBlockData = (info: ContentHit) => {
|
|
||||||
setBlockData({
|
setBlockData({
|
||||||
displayName: info.displayName,
|
displayName: info.displayName,
|
||||||
downstreamBlockId: info.usageKey,
|
downstreamBlockId: info.usageKey,
|
||||||
upstreamBlockId: outOfSyncComponentsByKey[info.usageKey].upstreamUsageKey,
|
upstreamBlockId: outOfSyncItemsByKey[info.usageKey].upstreamKey,
|
||||||
upstreamBlockVersionSynced: outOfSyncComponentsByKey[info.usageKey].versionSynced,
|
upstreamBlockVersionSynced: outOfSyncItemsByKey[info.usageKey].versionSynced,
|
||||||
isVertical: info.blockType === 'vertical',
|
isContainer: info.blockType === 'vertical' || info.blockType === 'sequential' || info.blockType === 'chapter',
|
||||||
});
|
});
|
||||||
};
|
}, [outOfSyncItemsByKey]);
|
||||||
|
|
||||||
// Show preview changes on review
|
// Show preview changes on review
|
||||||
const onReview = useCallback((info: ContentHit) => {
|
const onReview = useCallback((info: ContentHit) => {
|
||||||
setSeletecdBlockData(info);
|
setSelectedBlockData(info);
|
||||||
openModal();
|
openPreviewModal();
|
||||||
}, [setSeletecdBlockData, openModal]);
|
}, [setSelectedBlockData, openPreviewModal]);
|
||||||
|
|
||||||
const onIgnoreClick = useCallback((info: ContentHit) => {
|
const onIgnoreClick = useCallback((info: ContentHit) => {
|
||||||
setSeletecdBlockData(info);
|
setSelectedBlockData(info);
|
||||||
openConfirmModal();
|
openConfirmModal();
|
||||||
}, [setSeletecdBlockData, openConfirmModal]);
|
}, [setSelectedBlockData, openConfirmModal]);
|
||||||
|
|
||||||
const reloadLinks = useCallback((usageKey: string) => {
|
const reloadLinks = useCallback((usageKey: string) => {
|
||||||
const courseKey = outOfSyncComponentsByKey[usageKey].downstreamContextKey;
|
const courseKey = outOfSyncItemsByKey[usageKey].downstreamContextKey;
|
||||||
queryClient.invalidateQueries(courseLibrariesQueryKeys.courseLibraries(courseKey));
|
invalidateLinksQuery(queryClient, courseKey);
|
||||||
}, [outOfSyncComponentsByKey]);
|
}, [outOfSyncItemsByKey]);
|
||||||
|
|
||||||
const postChange = (accept: boolean) => {
|
const postChange = (accept: boolean) => {
|
||||||
// istanbul ignore if: this should never happen
|
// istanbul ignore if: this should never happen
|
||||||
@@ -236,19 +243,6 @@ const ComponentReviewList = ({
|
|||||||
}
|
}
|
||||||
}, [blockData]);
|
}, [blockData]);
|
||||||
|
|
||||||
const orderInfo = useMemo(() => {
|
|
||||||
if (searchSortOrder !== SearchSortOption.RECENTLY_MODIFIED) {
|
|
||||||
return downstreamInfo;
|
|
||||||
}
|
|
||||||
if (isIndexDataLoading) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
let merged = merge(downstreamInfoByKey, outOfSyncComponentsByKey);
|
|
||||||
merged = omitBy(merged, (o) => !o.displayName);
|
|
||||||
const ordered = orderBy(Object.values(merged), 'updated', 'desc');
|
|
||||||
return ordered;
|
|
||||||
}, [downstreamInfoByKey, outOfSyncComponentsByKey]);
|
|
||||||
|
|
||||||
if (isIndexDataLoading) {
|
if (isIndexDataLoading) {
|
||||||
return <Loading />;
|
return <Loading />;
|
||||||
}
|
}
|
||||||
@@ -259,10 +253,12 @@ const ComponentReviewList = ({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{orderInfo?.map((info) => (
|
{downstreamInfo?.map((info) => (
|
||||||
<BlockCard
|
<ItemCard
|
||||||
key={info.usageKey}
|
key={info.usageKey}
|
||||||
info={info}
|
info={info}
|
||||||
|
itemType={outOfSyncItemsByKey[info.usageKey]?.upstreamType}
|
||||||
|
libraryName={outOfSyncItemsByKey[info.usageKey]?.upstreamContextTitle}
|
||||||
actions={(
|
actions={(
|
||||||
<ActionRow>
|
<ActionRow>
|
||||||
<Button
|
<Button
|
||||||
@@ -293,20 +289,14 @@ const ComponentReviewList = ({
|
|||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
<PreviewLibraryXBlockChanges
|
{blockData && (
|
||||||
blockData={blockData}
|
<PreviewLibraryXBlockChanges
|
||||||
isModalOpen={isModalOpen}
|
blockData={blockData}
|
||||||
closeModal={closeModal}
|
isModalOpen={isPreviewModalOpen}
|
||||||
postChange={postChange}
|
closeModal={closePreviewModal}
|
||||||
alertNode={(
|
postChange={postChange}
|
||||||
<AlertMessage
|
/>
|
||||||
show
|
)}
|
||||||
variant="warning"
|
|
||||||
icon={Warning}
|
|
||||||
title={intl.formatMessage(messages.olderVersionPreviewAlert)}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
|
||||||
<DeleteModal
|
<DeleteModal
|
||||||
isOpen={isConfirmModalOpen}
|
isOpen={isConfirmModalOpen}
|
||||||
close={closeConfirmModal}
|
close={closeConfirmModal}
|
||||||
@@ -323,37 +313,21 @@ const ComponentReviewList = ({
|
|||||||
const ReviewTabContent = ({ courseId }: Props) => {
|
const ReviewTabContent = ({ courseId }: Props) => {
|
||||||
const intl = useIntl();
|
const intl = useIntl();
|
||||||
const {
|
const {
|
||||||
data: linkPages,
|
data: outOfSyncItems,
|
||||||
isLoading: isSyncComponentsLoading,
|
isLoading: isSyncItemsLoading,
|
||||||
hasNextPage,
|
|
||||||
isFetchingNextPage,
|
|
||||||
fetchNextPage,
|
|
||||||
isError,
|
isError,
|
||||||
error,
|
error,
|
||||||
} = useEntityLinks({ courseId, readyToSync: true });
|
} = useEntityLinks({
|
||||||
|
courseId,
|
||||||
|
readyToSync: true,
|
||||||
|
useTopLevelParents: true,
|
||||||
|
});
|
||||||
|
|
||||||
const outOfSyncComponents = useMemo(
|
|
||||||
() => linkPages?.pages?.reduce((links, page) => [...links, ...page.results], []) ?? [],
|
|
||||||
[linkPages],
|
|
||||||
);
|
|
||||||
const downstreamKeys = useMemo(
|
const downstreamKeys = useMemo(
|
||||||
() => outOfSyncComponents?.map(link => link.downstreamUsageKey),
|
() => outOfSyncItems?.map(link => link.downstreamUsageKey),
|
||||||
[outOfSyncComponents],
|
[outOfSyncItems],
|
||||||
);
|
);
|
||||||
|
|
||||||
useLoadOnScroll(
|
|
||||||
hasNextPage,
|
|
||||||
isFetchingNextPage,
|
|
||||||
fetchNextPage,
|
|
||||||
true,
|
|
||||||
);
|
|
||||||
|
|
||||||
const onSearchUpdate = () => {
|
|
||||||
if (hasNextPage && !isFetchingNextPage) {
|
|
||||||
fetchNextPage();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const disableSortOptions = [
|
const disableSortOptions = [
|
||||||
SearchSortOption.RELEVANCE,
|
SearchSortOption.RELEVANCE,
|
||||||
SearchSortOption.OLDEST,
|
SearchSortOption.OLDEST,
|
||||||
@@ -361,7 +335,7 @@ const ReviewTabContent = ({ courseId }: Props) => {
|
|||||||
SearchSortOption.RECENTLY_PUBLISHED,
|
SearchSortOption.RECENTLY_PUBLISHED,
|
||||||
];
|
];
|
||||||
|
|
||||||
if (isSyncComponentsLoading) {
|
if (isSyncItemsLoading) {
|
||||||
return <Loading />;
|
return <Loading />;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -382,9 +356,8 @@ const ReviewTabContent = ({ courseId }: Props) => {
|
|||||||
<SearchSortWidget disableOptions={disableSortOptions} />
|
<SearchSortWidget disableOptions={disableSortOptions} />
|
||||||
<ActionRow.Spacer />
|
<ActionRow.Spacer />
|
||||||
</ActionRow>
|
</ActionRow>
|
||||||
<ComponentReviewList
|
<ItemReviewList
|
||||||
outOfSyncComponents={outOfSyncComponents}
|
outOfSyncItems={outOfSyncItems}
|
||||||
onSearchUpdate={onSearchUpdate}
|
|
||||||
/>
|
/>
|
||||||
</SearchContextProvider>
|
</SearchContextProvider>
|
||||||
);
|
);
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user