diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a26590ed9f..4a5e906ac8 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -22,6 +22,6 @@ "SEE_API_CLIENT_SECRET": {} }, "features": {}, - "postStartCommand": "while [ \"$(python manage.py showmigrations | grep \"\\[ \\]\" | wc -l)\" -ne \"0\" ]; do echo \"waiting for migrations\"; sleep 2; done && python manage.py update_offered_by && python manage.py update_platforms && python manage.py update_departments_schools && python manage.py backpopulate_resource_channels --overwrite --all && python manage.py update_course_number_departments && python manage.py backpopulate_mitxonline_data && python manage.py backpopulate_micromasters_data && python manage.py recreate_index --all", + "postStartCommand": "while [ \"$(python manage.py showmigrations | grep \"\\[ \\]\" | wc -l)\" -ne \"0\" ]; do echo \"waiting for migrations\"; sleep 2; done && python manage.py update_offered_by && python manage.py update_platforms && python manage.py update_departments_schools && python manage.py update_course_number_departments && python manage.py backpopulate_mitxonline_data && python manage.py backpopulate_micromasters_data && python manage.py backpopulate_resource_channels --overwrite --all && python manage.py recreate_index --all", "forwardPorts": [8062, 8063] } diff --git a/RELEASE.rst b/RELEASE.rst index 8e0a91abaf..b1510e228b 100644 --- a/RELEASE.rst +++ b/RELEASE.rst @@ -1,6 +1,29 @@ Release Notes ============= +Version 0.22.1 (Released October 15, 2024) +-------------- + +- increase learning path listing limit to 100 (#1692) +- Shanbady/consolidate static fixtures (#1684) + +Version 0.22.0 (Released October 15, 2024) +-------------- + +- Make add to list dialog scrollable (#1689) +- make search defaults settable (#1681) +- Shuffling around where the search_update event is fired so it happens in more places (#1679) +- prevent featured course carousel from re-randomizing (#1673) + +Version 0.21.3 (Released October 15, 2024) +-------------- + +- removing invalid flag from clear cache command (#1675) +- Clear Cache on Deploy (#1668) +- Update Yarn to v4.5.0 (#1624) +- topic detail banner / subtopic logic revisions (#1646) +- Restore program letter intercept view (#1643) + Version 0.21.2 (Released October 10, 2024) -------------- diff --git a/app.json b/app.json index 4fe3feccae..e02f108f58 100644 --- a/app.json +++ b/app.json @@ -91,6 +91,10 @@ "description": "Default max incompleteness penalty value for the search API and frontend", "required": false }, + "DEFAULT_SEARCH_CONTENT_FILE_SCORE_WEIGHT": { + "description": "Default score weight for content file search match", + "required": false + }, "EDX_API_ACCESS_TOKEN_URL": { "description": "URL to retrieve a MITx access token", "required": false diff --git a/learning_resources/fixtures/departments.json b/data_fixtures/fixtures/departments.json similarity index 100% rename from learning_resources/fixtures/departments.json rename to data_fixtures/fixtures/departments.json diff --git a/learning_resources/fixtures/offered_by.json b/data_fixtures/fixtures/offered_by.json similarity index 100% rename from learning_resources/fixtures/offered_by.json rename to data_fixtures/fixtures/offered_by.json diff --git a/learning_resources/fixtures/platforms.json b/data_fixtures/fixtures/platforms.json similarity index 100% rename from learning_resources/fixtures/platforms.json rename to data_fixtures/fixtures/platforms.json diff --git a/learning_resources/fixtures/schools.json b/data_fixtures/fixtures/schools.json similarity index 100% rename from learning_resources/fixtures/schools.json rename to data_fixtures/fixtures/schools.json diff --git a/data_fixtures/migrations/0001_add_testimonial_data.py b/data_fixtures/migrations/0001_add_testimonial_data.py index 544a61547b..0d1c263ea9 100644 --- a/data_fixtures/migrations/0001_add_testimonial_data.py +++ b/data_fixtures/migrations/0001_add_testimonial_data.py @@ -7,6 +7,16 @@ from django.core.files import File from django.db import migrations +from data_fixtures.utils import ( + upsert_department_data, + upsert_offered_by_data, + upsert_platform_data, + upsert_school_data, + upsert_topic_data_file, +) + +logger = logging.getLogger(__name__) + """ Fix an issue with PIL's logger when running in test https://github.com/camptocamp/pytest-odoo/issues/15 @@ -216,6 +226,27 @@ ] +def load_initial_fixtures(apps, schema_editor): + """ + Load initial static fixtures required by + management commands further down + """ + offerors = upsert_offered_by_data() + departments = upsert_department_data() + schools = upsert_school_data() + platforms = upsert_platform_data() + topics = upsert_topic_data_file() + logout = ( + f"Updated:" + f" {offerors} offerors" + f" {departments} departments" + f" {schools} schools" + f" {platforms} platforms" + f" {topics} topics" + ) + logger.info(logout) + + def load_fixtures(apps, schema_editor): """ Load fixtures for testimonials @@ -252,5 +283,6 @@ class Migration(migrations.Migration): dependencies = [] operations = [ + migrations.RunPython(load_initial_fixtures, migrations.RunPython.noop), migrations.RunPython(load_fixtures, migrations.RunPython.noop), ] diff --git a/data_fixtures/migrations/0004_upsert_initial_topic_data.py b/data_fixtures/migrations/0004_upsert_initial_topic_data.py index e107cd0bd3..7d33e10a8e 100644 --- a/data_fixtures/migrations/0004_upsert_initial_topic_data.py +++ b/data_fixtures/migrations/0004_upsert_initial_topic_data.py @@ -2,7 +2,7 @@ from django.db import migrations -from learning_resources.utils import upsert_topic_data_file +from data_fixtures.utils import upsert_topic_data_file def perform_topic_upsert(apps, schema_editor): diff --git a/data_fixtures/migrations/0007_topic_mappings_edx_add_programming_coding_to_computer_science.py b/data_fixtures/migrations/0007_topic_mappings_edx_add_programming_coding_to_computer_science.py index c1056a3153..393b3098c9 100644 --- a/data_fixtures/migrations/0007_topic_mappings_edx_add_programming_coding_to_computer_science.py +++ b/data_fixtures/migrations/0007_topic_mappings_edx_add_programming_coding_to_computer_science.py @@ -5,7 +5,7 @@ from django.db import migrations -from learning_resources.utils import upsert_topic_data_string +from data_fixtures.utils import upsert_topic_data_string map_changes = """ --- diff --git a/data_fixtures/migrations/0009_topics_update_engineering_add_manufacturing.py b/data_fixtures/migrations/0009_topics_update_engineering_add_manufacturing.py index bb3e385db7..ae3ff3969b 100644 --- a/data_fixtures/migrations/0009_topics_update_engineering_add_manufacturing.py +++ b/data_fixtures/migrations/0009_topics_update_engineering_add_manufacturing.py @@ -8,7 +8,7 @@ from django.db import migrations from channels.constants import ChannelType -from learning_resources.utils import upsert_topic_data_string +from data_fixtures.utils import upsert_topic_data_string map_changes = """ --- diff --git a/data_fixtures/migrations/0012_topic_mappings_adjust_sustainable_business_finance_accounting.py b/data_fixtures/migrations/0012_topic_mappings_adjust_sustainable_business_finance_accounting.py index 56f7d750d5..7ba92fee96 100644 --- a/data_fixtures/migrations/0012_topic_mappings_adjust_sustainable_business_finance_accounting.py +++ b/data_fixtures/migrations/0012_topic_mappings_adjust_sustainable_business_finance_accounting.py @@ -7,7 +7,7 @@ from django.db import migrations -from learning_resources.utils import upsert_topic_data_string +from data_fixtures.utils import upsert_topic_data_string forward_map_changes = """ --- diff --git a/data_fixtures/migrations/0014_add_department_SP.py b/data_fixtures/migrations/0014_add_department_SP.py index 4b34bc1f30..9805a5928a 100644 --- a/data_fixtures/migrations/0014_add_department_SP.py +++ b/data_fixtures/migrations/0014_add_department_SP.py @@ -33,6 +33,10 @@ def add_sp(apps, schema_editor): department, _ = LearningResourceDepartment.objects.get_or_create( department_id="SP", name="Special Programs", + defaults={ + "department_id": "SP", + "name": "Special Programs", + }, ) Channel = apps.get_model("channels", "Channel") @@ -43,7 +47,9 @@ def add_sp(apps, schema_editor): title=department.name, ) ChannelDepartmentDetail.objects.get_or_create( - channel=channel, department=department + channel=channel, + department=department, + defaults={"channel": channel, "department": department}, ) diff --git a/data_fixtures/utils.py b/data_fixtures/utils.py new file mode 100644 index 0000000000..629f0ccf98 --- /dev/null +++ b/data_fixtures/utils.py @@ -0,0 +1,147 @@ +import json +from pathlib import Path + +import yaml +from django.db import transaction + +from learning_resources.models import ( + LearningResourceDepartment, + LearningResourceOfferor, + LearningResourcePlatform, + LearningResourceSchool, +) +from learning_resources.utils import ( + _walk_topic_map, + department_delete_actions, + offeror_delete_actions, + offeror_upserted_actions, +) + + +@transaction.atomic() +def upsert_topic_data_file( + config_path: str = "learning_resources/data/topics.yaml", +) -> None: + """ + Load the topics from a yaml file. + + The yaml file should have a root "topics" key, and then any number of topic + records beneath it. See _walk_topic_map for an explanation of the record + format. + + Args: + - config_path (str): the path to the topics file. + Returns: + - None + """ + + with Path.open(Path(config_path)) as topic_file: + topic_file_yaml = topic_file.read() + + topics = yaml.safe_load(topic_file_yaml) + + _walk_topic_map(topics["topics"]) + + +@transaction.atomic() +def upsert_offered_by_data(): + """ + Upsert LearningResourceOfferor data + """ + offerors = [] + with Path.open(Path(__file__).parent / "fixtures" / "offered_by.json") as inf: + offered_by_json = json.load(inf) + for offeror in offered_by_json: + offeror_fields = offeror["fields"] + offered_by, _ = LearningResourceOfferor.objects.update_or_create( + code=offeror_fields["code"], + defaults=offeror_fields, + ) + offeror_upserted_actions(offered_by, overwrite=True) + offerors.append(offeror_fields["name"]) + invalid_offerors = LearningResourceOfferor.objects.exclude(name__in=offerors) + for offeror in invalid_offerors: + offeror_delete_actions(offeror) + return offerors + + +@transaction.atomic() +def upsert_department_data(): + """ + Upsert LearningResourceDepartment data + """ + departments = [] + with Path.open(Path(__file__).parent / "fixtures" / "departments.json") as inf: + departments_json = json.load(inf) + for dept in departments_json: + department_fields = dept["fields"] + LearningResourceDepartment.objects.update_or_create( + department_id=department_fields["department_id"], + defaults=department_fields, + ) + departments.append(department_fields["name"]) + invalid_departments = LearningResourceDepartment.objects.exclude( + name__in=departments + ).all() + for invalid_department in invalid_departments: + department_delete_actions(invalid_department) + return departments + + +@transaction.atomic() +def upsert_school_data(): + """ + Upsert LearningResourceSchool data + """ + schools = [] + with Path.open(Path(__file__).parent / "fixtures" / "schools.json") as inf: + schools_json = json.load(inf) + for school in schools_json: + school_fields = school["fields"] + LearningResourceSchool.objects.update_or_create( + id=school_fields["id"], + defaults=school_fields, + ) + schools.append(school_fields["name"]) + LearningResourceSchool.objects.exclude(name__in=schools).delete() + return schools + + +@transaction.atomic() +def upsert_platform_data(): + """ + Upsert LearningResourcePlatform data + """ + platforms = [] + with Path.open(Path(__file__).parent / "fixtures" / "platforms.json") as inf: + platform_json = json.load(inf) + for platform in platform_json: + platform_fields = platform["fields"] + LearningResourcePlatform.objects.update_or_create( + code=platform_fields["code"], + defaults=platform_fields, + ) + platforms.append(platform_fields["code"]) + LearningResourcePlatform.objects.exclude(code__in=platforms).delete() + return platforms + + +@transaction.atomic() +def upsert_topic_data_string(yaml_data: str) -> None: + """ + Load the topics from a yaml string. + + The yaml string should be formatted in the same way that it is for + upsert_topic_data_file - this function exists just to allow you to specify + the data as a string so you can roll it into a migration file in the + data_fixtures app. + + Args: + - yaml_data (str): the yaml to process + Returns: + - None + """ + + topics = yaml.safe_load(yaml_data) + + _walk_topic_map(topics["topics"]) diff --git a/frontends/api/src/clients.ts b/frontends/api/src/clients.ts index 1d63bba663..9d776b395e 100644 --- a/frontends/api/src/clients.ts +++ b/frontends/api/src/clients.ts @@ -20,6 +20,7 @@ import { NewsEventsApi, ProfilesApi, TestimonialsApi, + LearningResourcesSearchAdminParamsApi, } from "./generated/v0/api" import axiosInstance from "./axios" @@ -46,6 +47,9 @@ const learningResourcesSearchApi = new LearningResourcesSearchApi( axiosInstance, ) +const learningResourcesSearchAdminParamsApi = + new LearningResourcesSearchAdminParamsApi(undefined, BASE_PATH, axiosInstance) + const featuredApi = new FeaturedApi(undefined, BASE_PATH, axiosInstance) const learningpathsApi = new LearningpathsApi( @@ -108,4 +112,5 @@ export { newsEventsApi, featuredApi, testimonialsApi, + learningResourcesSearchAdminParamsApi, } diff --git a/frontends/api/src/generated/v0/api.ts b/frontends/api/src/generated/v0/api.ts index 6d2b7f1290..3db3d6ef94 100644 --- a/frontends/api/src/generated/v0/api.ts +++ b/frontends/api/src/generated/v0/api.ts @@ -4520,6 +4520,143 @@ export class CkeditorApi extends BaseAPI { } } +/** + * LearningResourcesSearchAdminParamsApi - axios parameter creator + * @export + */ +export const LearningResourcesSearchAdminParamsApiAxiosParamCreator = function ( + configuration?: Configuration, +) { + return { + /** + * Learning resource search default admin param values + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + learningResourcesSearchAdminParamsRetrieve: async ( + options: RawAxiosRequestConfig = {}, + ): Promise => { + const localVarPath = `/api/v0/learning_resources_search_admin_params/` + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL) + let baseOptions + if (configuration) { + baseOptions = configuration.baseOptions + } + + const localVarRequestOptions = { + method: "GET", + ...baseOptions, + ...options, + } + const localVarHeaderParameter = {} as any + const localVarQueryParameter = {} as any + + setSearchParams(localVarUrlObj, localVarQueryParameter) + let headersFromBaseOptions = + baseOptions && baseOptions.headers ? baseOptions.headers : {} + localVarRequestOptions.headers = { + ...localVarHeaderParameter, + ...headersFromBaseOptions, + ...options.headers, + } + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + } + }, + } +} + +/** + * LearningResourcesSearchAdminParamsApi - functional programming interface + * @export + */ +export const LearningResourcesSearchAdminParamsApiFp = function ( + configuration?: Configuration, +) { + const localVarAxiosParamCreator = + LearningResourcesSearchAdminParamsApiAxiosParamCreator(configuration) + return { + /** + * Learning resource search default admin param values + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async learningResourcesSearchAdminParamsRetrieve( + options?: RawAxiosRequestConfig, + ): Promise< + (axios?: AxiosInstance, basePath?: string) => AxiosPromise + > { + const localVarAxiosArgs = + await localVarAxiosParamCreator.learningResourcesSearchAdminParamsRetrieve( + options, + ) + const index = configuration?.serverIndex ?? 0 + const operationBasePath = + operationServerMap[ + "LearningResourcesSearchAdminParamsApi.learningResourcesSearchAdminParamsRetrieve" + ]?.[index]?.url + return (axios, basePath) => + createRequestFunction( + localVarAxiosArgs, + globalAxios, + BASE_PATH, + configuration, + )(axios, operationBasePath || basePath) + }, + } +} + +/** + * LearningResourcesSearchAdminParamsApi - factory interface + * @export + */ +export const LearningResourcesSearchAdminParamsApiFactory = function ( + configuration?: Configuration, + basePath?: string, + axios?: AxiosInstance, +) { + const localVarFp = LearningResourcesSearchAdminParamsApiFp(configuration) + return { + /** + * Learning resource search default admin param values + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + learningResourcesSearchAdminParamsRetrieve( + options?: RawAxiosRequestConfig, + ): AxiosPromise { + return localVarFp + .learningResourcesSearchAdminParamsRetrieve(options) + .then((request) => request(axios, basePath)) + }, + } +} + +/** + * LearningResourcesSearchAdminParamsApi - object-oriented interface + * @export + * @class LearningResourcesSearchAdminParamsApi + * @extends {BaseAPI} + */ +export class LearningResourcesSearchAdminParamsApi extends BaseAPI { + /** + * Learning resource search default admin param values + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof LearningResourcesSearchAdminParamsApi + */ + public learningResourcesSearchAdminParamsRetrieve( + options?: RawAxiosRequestConfig, + ) { + return LearningResourcesSearchAdminParamsApiFp(this.configuration) + .learningResourcesSearchAdminParamsRetrieve(options) + .then((request) => request(this.axios, this.basePath)) + } +} + /** * NewsEventsApi - axios parameter creator * @export diff --git a/frontends/api/src/hooks/adminSearchParams/index.ts b/frontends/api/src/hooks/adminSearchParams/index.ts new file mode 100644 index 0000000000..08a46f49cf --- /dev/null +++ b/frontends/api/src/hooks/adminSearchParams/index.ts @@ -0,0 +1,15 @@ +import { useQuery } from "@tanstack/react-query" +import { learningResourcesSearchAdminParamsApi } from "../../clients" + +const useAdminSearchParams = (enabled: boolean) => + useQuery({ + queryKey: ["adminParams"], + queryFn: async () => { + const response = + await learningResourcesSearchAdminParamsApi.learningResourcesSearchAdminParamsRetrieve() + return response.data + }, + enabled: enabled, + }) + +export { useAdminSearchParams } diff --git a/frontends/api/src/test-utils/urls.ts b/frontends/api/src/test-utils/urls.ts index 5690e2484b..89324b1a00 100644 --- a/frontends/api/src/test-utils/urls.ts +++ b/frontends/api/src/test-utils/urls.ts @@ -203,6 +203,11 @@ const search = { const userMe = { get: () => `${API_BASE_URL}/api/v0/users/me/`, } + +const adminSearchParams = { + get: () => `${API_BASE_URL}/api/v0/learning_resources_search_admin_params/`, +} + const profileMe = { get: () => `${API_BASE_URL}/api/v0/profiles/me/`, patch: () => `${API_BASE_URL}/api/v0/profiles/me/`, @@ -232,4 +237,5 @@ export { departments, newsEvents, testimonials, + adminSearchParams, } diff --git a/frontends/main/package.json b/frontends/main/package.json index 0baa05c26e..605881690c 100644 --- a/frontends/main/package.json +++ b/frontends/main/package.json @@ -12,7 +12,7 @@ "dependencies": { "@ebay/nice-modal-react": "^1.2.13", "@emotion/cache": "^11.13.1", - "@mitodl/course-search-utils": "3.2.4", + "@mitodl/course-search-utils": "^3.2.5", "@remixicon/react": "^4.2.0", "@sentry/nextjs": "^8", "@tanstack/react-query": "^4.36.1", diff --git a/frontends/main/src/app-pages/LearningPathListingPage/LearningPathListingPage.test.tsx b/frontends/main/src/app-pages/LearningPathListingPage/LearningPathListingPage.test.tsx index d413f9b912..b17660fb81 100644 --- a/frontends/main/src/app-pages/LearningPathListingPage/LearningPathListingPage.test.tsx +++ b/frontends/main/src/app-pages/LearningPathListingPage/LearningPathListingPage.test.tsx @@ -24,7 +24,7 @@ const setup = ({ const paths = factories.learningResources.learningPaths({ count: listsCount }) const userData = factories.user.user({ ...user }) setMockResponse.get(urls.userMe.get(), userData) - setMockResponse.get(urls.learningPaths.list(), paths) + setMockResponse.get(urls.learningPaths.list({ limit: 100 }), paths) const { location } = renderWithProviders(, { user, diff --git a/frontends/main/src/app-pages/LearningPathListingPage/LearningPathListingPage.tsx b/frontends/main/src/app-pages/LearningPathListingPage/LearningPathListingPage.tsx index a36257cd8e..94502ce32a 100644 --- a/frontends/main/src/app-pages/LearningPathListingPage/LearningPathListingPage.tsx +++ b/frontends/main/src/app-pages/LearningPathListingPage/LearningPathListingPage.tsx @@ -70,7 +70,7 @@ const EditListMenu: React.FC<{ resource: LearningPathResource }> = ({ } const LearningPathListingPage: React.FC = () => { - const listingQuery = useLearningPathsList() + const listingQuery = useLearningPathsList({ limit: 100 }) const { data: user } = useUserMe() const handleCreate = useCallback(() => { diff --git a/frontends/main/src/app-pages/SearchPage/SearchPage.test.tsx b/frontends/main/src/app-pages/SearchPage/SearchPage.test.tsx index 691bf6f9bd..d37a321e47 100644 --- a/frontends/main/src/app-pages/SearchPage/SearchPage.test.tsx +++ b/frontends/main/src/app-pages/SearchPage/SearchPage.test.tsx @@ -249,6 +249,12 @@ describe("SearchPage", () => { const adminOptions = screen.queryByText("Admin Options") expect(adminOptions).toBeNull() }) + + expect(makeRequest).not.toHaveBeenCalledWith( + "get", + urls.adminSearchParams, + expect.anything(), + ) }) test("non admin users do not see admin options", async () => { @@ -275,12 +281,19 @@ describe("SearchPage", () => { is_authenticated: true, is_learning_path_editor: false, }) + renderWithProviders() await waitFor(() => { const adminOptions = screen.queryByText("Admin Options") expect(adminOptions).toBeNull() }) + + expect(makeRequest).not.toHaveBeenCalledWith( + "get", + urls.adminSearchParams, + expect.anything(), + ) }) test("admin users can set staleness and score cutoff sliders", async () => { @@ -306,11 +319,16 @@ describe("SearchPage", () => { setMockResponse.get(urls.userMe.get(), { is_learning_path_editor: true, }) - process.env.NEXT_PUBLIC_DEFAULT_SEARCH_MODE = "phrase" - process.env.NEXT_PUBLIC_DEFAULT_SEARCH_SLOP = "6" - process.env.NEXT_PUBLIC_DEFAULT_SEARCH_STALENESS_PENALTY = "2.5" - process.env.NEXT_PUBLIC_DEFAULT_SEARCH_MINIMUM_SCORE_CUTOFF = "0" - process.env.NEXT_PUBLIC_DEFAULT_SEARCH_MAX_INCOMPLETENESS_PENALTY = "90" + + setMockResponse.get(urls.adminSearchParams.get(), { + search_mode: "phrase", + slop: 6, + yearly_decay_percent: 2.5, + min_score: 0, + max_incompleteness_penalty: 90, + content_file_score_weight: 1, + }) + renderWithProviders() await waitFor(() => { const adminFacetContainer = screen.getByText("Admin Options") @@ -326,11 +344,6 @@ describe("SearchPage", () => { }) test("admin users can set the search mode and slop", async () => { - process.env.NEXT_PUBLIC_DEFAULT_SEARCH_MODE = "phrase" - process.env.NEXT_PUBLIC_DEFAULT_SEARCH_SLOP = "6" - process.env.NEXT_PUBLIC_DEFAULT_SEARCH_STALENESS_PENALTY = "2.5" - process.env.NEXT_PUBLIC_DEFAULT_SEARCH_MINIMUM_SCORE_CUTOFF = "0" - process.env.NEXT_PUBLIC_DEFAULT_SEARCH_MAX_INCOMPLETENESS_PENALTY = "90" setMockApiResponses({ search: { count: 700, @@ -353,6 +366,15 @@ test("admin users can set the search mode and slop", async () => { setMockResponse.get(urls.userMe.get(), { is_learning_path_editor: true, }) + setMockResponse.get(urls.adminSearchParams.get(), { + search_mode: "phrase", + slop: 6, + yearly_decay_percent: 2.5, + min_score: 0, + max_incompleteness_penalty: 90, + content_file_score_weight: 1, + }) + const { location } = renderWithProviders() await waitFor(() => { const adminFacetContainer = screen.getByText("Admin Options") diff --git a/frontends/main/src/page-components/Dialogs/AddToListDialog.test.tsx b/frontends/main/src/page-components/Dialogs/AddToListDialog.test.tsx index 063309511d..c8515239ba 100644 --- a/frontends/main/src/page-components/Dialogs/AddToListDialog.test.tsx +++ b/frontends/main/src/page-components/Dialogs/AddToListDialog.test.tsx @@ -58,7 +58,10 @@ const setupLearningPaths = ({ urls.learningResources.details({ id: resource.id }), resource, ) - setMockResponse.get(urls.learningPaths.list(), paginatedLearningPaths) + setMockResponse.get( + urls.learningPaths.list({ limit: 100 }), + paginatedLearningPaths, + ) const view = renderWithProviders(null) if (dialogOpen) { act(() => { @@ -94,7 +97,7 @@ const setupUserLists = ({ urls.learningResources.details({ id: resource.id }), resource, ) - setMockResponse.get(urls.userLists.list(), paginatedUserLists) + setMockResponse.get(urls.userLists.list({ limit: 100 }), paginatedUserLists) const view = renderWithProviders(null) if (dialogOpen) { act(() => { diff --git a/frontends/main/src/page-components/Dialogs/AddToListDialog.tsx b/frontends/main/src/page-components/Dialogs/AddToListDialog.tsx index 0c65b23c38..08d03c11df 100644 --- a/frontends/main/src/page-components/Dialogs/AddToListDialog.tsx +++ b/frontends/main/src/page-components/Dialogs/AddToListDialog.tsx @@ -14,11 +14,7 @@ import { usePostHog } from "posthog-js/react" import NiceModal, { muiDialogV5 } from "@ebay/nice-modal-react" -import { - type LearningPathResource, - type LearningResource, - type UserList, -} from "api" +import type { LearningPathResource, LearningResource, UserList } from "api" import { useLearningResourceSetUserListRelationships, @@ -31,6 +27,8 @@ import { manageListDialogs } from "@/page-components/ManageListDialogs/ManageLis import { ListType } from "api/constants" import { useFormik } from "formik" +const LIST_LIMIT = 100 + const ResourceTitle = styled.span({ fontStyle: "italic", }) @@ -200,7 +198,7 @@ const AddToLearningPathDialogInner: React.FC = ({ }) => { const resourceQuery = useLearningResourcesDetail(resourceId) const resource = resourceQuery.data - const listsQuery = useLearningPathsList() + const listsQuery = useLearningPathsList({ limit: LIST_LIMIT }) const isReady = !!(resource && listsQuery.isSuccess) const lists = listsQuery.data?.results ?? [] @@ -219,7 +217,7 @@ const AddToUserListDialogInner: React.FC = ({ }) => { const resourceQuery = useLearningResourcesDetail(resourceId) const resource = resourceQuery.data - const listsQuery = useUserListList() + const listsQuery = useUserListList({ limit: LIST_LIMIT }) const isReady = !!(resource && listsQuery.isSuccess) const lists = listsQuery.data?.results ?? [] diff --git a/frontends/main/src/page-components/ResourceCard/ResourceCard.test.tsx b/frontends/main/src/page-components/ResourceCard/ResourceCard.test.tsx index 7d5b4fc9e5..d71998a06f 100644 --- a/frontends/main/src/page-components/ResourceCard/ResourceCard.test.tsx +++ b/frontends/main/src/page-components/ResourceCard/ResourceCard.test.tsx @@ -3,6 +3,8 @@ import * as NiceModal from "@ebay/nice-modal-react" import { renderWithProviders, user, screen, expectProps } from "@/test-utils" import type { User } from "api/hooks/user" import { ResourceCard } from "./ResourceCard" +import { getReadableResourceType } from "ol-utilities" +import { ResourceTypeEnum } from "api" import { AddToLearningPathDialog, AddToUserListDialog, @@ -65,11 +67,6 @@ describe.each([ return { resource, view, location } } - const labels = { - addToLearningPaths: "Add to Learning Path", - addToUserList: "Add to User List", - } - test("Applies className to the resource card", () => { const { view } = setup({ user: {}, props: { className: "test-class" } }) expect(view.container.firstChild).toHaveClass("test-class") @@ -91,12 +88,13 @@ describe.each([ ])( "Always shows 'Add to User List' button, but only shows 'Add to Learning Path' button if user is a learning path editor", async ({ user, expectAddToLearningPathButton }) => { - setup({ user }) + const { resource } = setup({ user }) await screen.findByRole("button", { - name: labels.addToUserList, + name: `Bookmark ${getReadableResourceType(resource?.resource_type as ResourceTypeEnum)}`, }) + const addToLearningPathButton = screen.queryByRole("button", { - name: labels.addToLearningPaths, + name: "Add to Learning Path", }) expect(!!addToLearningPathButton).toBe(expectAddToLearningPathButton) }, @@ -150,10 +148,10 @@ describe.each([ user: { is_learning_path_editor: true, is_authenticated: true }, }) const addToUserListButton = await screen.findByRole("button", { - name: labels.addToUserList, + name: `Bookmark ${getReadableResourceType(resource?.resource_type as ResourceTypeEnum)}`, }) const addToLearningPathButton = await screen.findByRole("button", { - name: labels.addToLearningPaths, + name: "Add to Learning Path", }) expect(showModal).not.toHaveBeenCalled() @@ -169,11 +167,11 @@ describe.each([ }) test("Clicking 'Add to User List' opens signup popover if not authenticated", async () => { - setup({ + const { resource } = setup({ user: { is_authenticated: false }, }) const addToUserListButton = await screen.findByRole("button", { - name: labels.addToUserList, + name: `Bookmark ${getReadableResourceType(resource?.resource_type as ResourceTypeEnum)}`, }) await user.click(addToUserListButton) const dialog = screen.getByRole("dialog") diff --git a/frontends/main/src/page-components/SearchDisplay/SearchDisplay.tsx b/frontends/main/src/page-components/SearchDisplay/SearchDisplay.tsx index c3d8b6e594..022a5a8f52 100644 --- a/frontends/main/src/page-components/SearchDisplay/SearchDisplay.tsx +++ b/frontends/main/src/page-components/SearchDisplay/SearchDisplay.tsx @@ -32,6 +32,7 @@ import { SearchModeEnumDescriptions, } from "api" import { useLearningResourcesSearch } from "api/hooks/learningResources" +import { useAdminSearchParams } from "api/hooks/adminSearchParams" import { GridColumn, GridContainer } from "@/components/GridLayout/GridLayout" import { AvailableFacets, @@ -119,7 +120,7 @@ const FacetStyles = styled.div` margin-bottom: 14px; i { - color: ${({ theme }) => theme.custom.colors.silverGrayLight}; + color: ${({ theme }) => theme.custom.colors.silverGrayDark}; svg { display: block; @@ -220,6 +221,16 @@ const FacetStyles = styled.div` } } + .facets:not(.facets-expanded, .facets-transitioning):has( + button.filter-section-button + ) { + div.facet-visible, + div.facet-list, + div.input-wrapper { + visibility: hidden; + } + } + .filterable-facet { .facet-list { max-height: 400px; @@ -552,22 +563,12 @@ const SearchDisplay: React.FC = ({ resultsHeadingEl, filterHeadingEl, }) => { - const DEFAULT_SEARCH_MODE = process.env.NEXT_PUBLIC_DEFAULT_SEARCH_MODE - const DEFAULT_SEARCH_SLOP = parseFloat( - process.env.NEXT_PUBLIC_DEFAULT_SEARCH_SLOP!, - ) - const DEFAULT_SEARCH_STALENESS_PENALTY = parseFloat( - process.env.NEXT_PUBLIC_DEFAULT_SEARCH_STALENESS_PENALTY!, - ) - const DEFAULT_SEARCH_MINIMUM_SCORE_CUTOFF = parseFloat( - process.env.NEXT_PUBLIC_DEFAULT_SEARCH_MINIMUM_SCORE_CUTOFF!, - ) - const DEFAULT_SEARCH_MAX_INCOMPLETENESS_PENALTY = parseFloat( - process.env.NEXT_PUBLIC_DEFAULT_SEARCH_MAX_INCOMPLETENESS_PENALTY!, - ) - const [searchParams] = useSearchParams() const [expandAdminOptions, setExpandAdminOptions] = useState(false) + + const { data: adminParams, isLoading: isAdminParamsLoading } = + useAdminSearchParams(expandAdminOptions) + const scrollHook = useRef(null) const activeTab = TABS.find( @@ -655,25 +656,6 @@ const SearchDisplay: React.FC = ({ actuallyToggleParamValue(name, rawValue, checked) } - const searchModeDropdown = ( - - setSearchParams((prev) => { - const next = new URLSearchParams(prev) - next.set("search_mode", e.target.value as string) - if (e.target.value !== "phrase") { - next.delete("slop") - } - return next - }) - } - options={searchModeDropdownOptions} - className="search-mode-dropdown" - /> - ) - const sortDropdown = ( = ({ /> ) - const AdminOptions: React.FC = ( - expandAdminOptions, - setExpandAdminOptions, + type adminParamsType = { + search_mode: string + slop: number + yearly_decay_percent: number + min_score: number + max_incompleteness_penalty: number + content_file_score_weight: number + } + + const AdminOptions = ( + expandAdminOptions: boolean, + setExpandAdminOptions: (value: boolean) => void, + adminParams: adminParamsType | void | undefined, ) => { + const searchModeDropdown = ( + + setSearchParams((prev) => { + const next = new URLSearchParams(prev) + next.set("search_mode", e.target.value as string) + if (e.target.value !== "phrase") { + next.delete("slop") + } + return next + }) + } + options={searchModeDropdownOptions} + className="search-mode-dropdown" + /> + ) + return (
= ({ {expandAdminOptions ? : } - {expandAdminOptions ? ( + {expandAdminOptions && adminParams && !isAdminParamsLoading ? (
Resource Score Staleness Penalty @@ -716,7 +727,7 @@ const SearchDisplay: React.FC = ({ currentValue={ searchParams.get("yearly_decay_percent") ? Number(searchParams.get("yearly_decay_percent")) - : DEFAULT_SEARCH_STALENESS_PENALTY + : adminParams.yearly_decay_percent } setSearchParams={setSearchParams} urlParam="yearly_decay_percent" @@ -738,7 +749,7 @@ const SearchDisplay: React.FC = ({
{(!searchParams.get("search_mode") && - DEFAULT_SEARCH_MODE === "phrase") || + adminParams.search_mode === "phrase") || searchParams.get("search_mode") === "phrase" ? (
Slop @@ -747,7 +758,7 @@ const SearchDisplay: React.FC = ({ currentValue={ searchParams.get("slop") ? Number(searchParams.get("slop")) - : DEFAULT_SEARCH_SLOP + : adminParams.slop } setSearchParams={setSearchParams} urlParam="slop" @@ -767,7 +778,7 @@ const SearchDisplay: React.FC = ({ currentValue={ searchParams.get("min_score") ? Number(searchParams.get("min_score")) - : DEFAULT_SEARCH_MINIMUM_SCORE_CUTOFF + : adminParams.min_score } setSearchParams={setSearchParams} urlParam="min_score" @@ -786,7 +797,7 @@ const SearchDisplay: React.FC = ({ currentValue={ searchParams.get("max_incompleteness_penalty") ? Number(searchParams.get("max_incompleteness_penalty")) - : DEFAULT_SEARCH_MAX_INCOMPLETENESS_PENALTY + : adminParams.max_incompleteness_penalty } setSearchParams={setSearchParams} urlParam="max_incompleteness_penalty" @@ -808,7 +819,7 @@ const SearchDisplay: React.FC = ({ currentValue={ searchParams.get("content_file_score_weight") ? Number(searchParams.get("content_file_score_weight")) - : 1 + : adminParams.content_file_score_weight } setSearchParams={setSearchParams} urlParam="content_file_score_weight" @@ -843,7 +854,7 @@ const SearchDisplay: React.FC = ({ facetOptions={data?.metadata.aggregations ?? {}} /> {user?.is_learning_path_editor - ? AdminOptions(expandAdminOptions, setExpandAdminOptions) + ? AdminOptions(expandAdminOptions, setExpandAdminOptions, adminParams) : null} diff --git a/frontends/mit-learn/package.json b/frontends/mit-learn/package.json index 083af6e401..be90326f1b 100644 --- a/frontends/mit-learn/package.json +++ b/frontends/mit-learn/package.json @@ -56,7 +56,7 @@ }, "dependencies": { "@ebay/nice-modal-react": "^1.2.13", - "@mitodl/course-search-utils": "^3.1.6", + "@mitodl/course-search-utils": "^3.2.5", "@remixicon/react": "^4.2.0", "@sentry/react": "^7.57.0", "@tanstack/react-query": "^4.36.1", diff --git a/frontends/mit-learn/webpack.config.js b/frontends/mit-learn/webpack.config.js index 5adf71258b..7e49fd3bbb 100644 --- a/frontends/mit-learn/webpack.config.js +++ b/frontends/mit-learn/webpack.config.js @@ -45,11 +45,6 @@ const { CSRF_COOKIE_NAME, APPZI_URL, MITOL_NOINDEX, - DEFAULT_SEARCH_MODE, - DEFAULT_SEARCH_SLOP, - DEFAULT_SEARCH_STALENESS_PENALTY, - DEFAULT_SEARCH_MINIMUM_SCORE_CUTOFF, - DEFAULT_SEARCH_MAX_INCOMPLETENESS_PENALTY, } = cleanEnv(process.env, { NODE_ENV: str({ choices: ["development", "production", "test"], @@ -129,26 +124,6 @@ const { desc: "Whether to include a noindex meta tag", default: true, }), - DEFAULT_SEARCH_SLOP: num({ - desc: "The default search slop", - default: 6, - }), - DEFAULT_SEARCH_STALENESS_PENALTY: num({ - desc: "The default search staleness penalty", - default: 2.5, - }), - DEFAULT_SEARCH_MINIMUM_SCORE_CUTOFF: num({ - desc: "The default search minimum score cutoff", - default: 5, - }), - DEFAULT_SEARCH_MAX_INCOMPLETENESS_PENALTY: num({ - desc: "The default search max incompleteness penalty", - default: 90, - }), - DEFAULT_SEARCH_MODE: str({ - desc: "The default search mode", - default: "phrase", - }), }) const MITOL_FEATURES_PREFIX = "FEATURE_" @@ -290,11 +265,6 @@ module.exports = (env, argv) => { MITOL_SUPPORT_EMAIL: JSON.stringify(MITOL_SUPPORT_EMAIL), PUBLIC_URL: JSON.stringify(PUBLIC_URL), CSRF_COOKIE_NAME: JSON.stringify(CSRF_COOKIE_NAME), - DEFAULT_SEARCH_MODE: JSON.stringify(DEFAULT_SEARCH_MODE), - DEFAULT_SEARCH_MAX_INCOMPLETENESS_PENALTY, - DEFAULT_SEARCH_MINIMUM_SCORE_CUTOFF, - DEFAULT_SEARCH_SLOP, - DEFAULT_SEARCH_STALENESS_PENALTY, }, }), ] diff --git a/frontends/ol-ckeditor/package.json b/frontends/ol-ckeditor/package.json index c4daaa5ede..34f34206ce 100644 --- a/frontends/ol-ckeditor/package.json +++ b/frontends/ol-ckeditor/package.json @@ -11,27 +11,28 @@ "react": "18.3.1" }, "dependencies": { - "@ckeditor/ckeditor5-adapter-ckfinder": "^41.0.0", - "@ckeditor/ckeditor5-autoformat": "^41.0.0", - "@ckeditor/ckeditor5-basic-styles": "^41.0.0", - "@ckeditor/ckeditor5-block-quote": "^41.0.0", - "@ckeditor/ckeditor5-cloud-services": "^41.0.0", - "@ckeditor/ckeditor5-core": "^41.0.0", - "@ckeditor/ckeditor5-dev-translations": "^42.0.0", - "@ckeditor/ckeditor5-dev-utils": "^42.0.0", - "@ckeditor/ckeditor5-easy-image": "^41.0.0", - "@ckeditor/ckeditor5-editor-classic": "^41.0.0", - "@ckeditor/ckeditor5-essentials": "^41.0.0", - "@ckeditor/ckeditor5-heading": "^41.0.0", - "@ckeditor/ckeditor5-image": "^41.0.0", - "@ckeditor/ckeditor5-link": "^41.0.0", - "@ckeditor/ckeditor5-list": "^41.0.0", - "@ckeditor/ckeditor5-markdown-gfm": "^41.0.0", - "@ckeditor/ckeditor5-media-embed": "^41.0.0", - "@ckeditor/ckeditor5-paragraph": "^41.0.0", - "@ckeditor/ckeditor5-react": "^7.0.0", - "@ckeditor/ckeditor5-theme-lark": "^41.0.0", - "@ckeditor/ckeditor5-ui": "^41.0.0", + "@ckeditor/ckeditor5-adapter-ckfinder": "^42.0.0", + "@ckeditor/ckeditor5-autoformat": "^42.0.0", + "@ckeditor/ckeditor5-basic-styles": "^42.0.0", + "@ckeditor/ckeditor5-block-quote": "^42.0.0", + "@ckeditor/ckeditor5-cloud-services": "^42.0.0", + "@ckeditor/ckeditor5-core": "^42.0.0", + "@ckeditor/ckeditor5-dev-translations": "^43.0.0", + "@ckeditor/ckeditor5-dev-utils": "^43.0.0", + "@ckeditor/ckeditor5-easy-image": "^42.0.0", + "@ckeditor/ckeditor5-editor-classic": "^42.0.0", + "@ckeditor/ckeditor5-essentials": "^42.0.0", + "@ckeditor/ckeditor5-heading": "^42.0.0", + "@ckeditor/ckeditor5-image": "^42.0.0", + "@ckeditor/ckeditor5-link": "^42.0.0", + "@ckeditor/ckeditor5-list": "^42.0.0", + "@ckeditor/ckeditor5-markdown-gfm": "^42.0.0", + "@ckeditor/ckeditor5-media-embed": "^42.0.0", + "@ckeditor/ckeditor5-paragraph": "^42.0.0", + "@ckeditor/ckeditor5-react": "^9.0.0", + "@ckeditor/ckeditor5-theme-lark": "^42.0.0", + "@ckeditor/ckeditor5-ui": "^42.0.0", + "@ckeditor/ckeditor5-utils": "^42.0.0", "axios": "^1.6.3", "classnames": "^2.3.2", "ol-components": "0.0.0", diff --git a/frontends/ol-ckeditor/src/components/CkeditorArticle.tsx b/frontends/ol-ckeditor/src/components/CkeditorArticle.tsx index a411167f58..b44539b2e8 100644 --- a/frontends/ol-ckeditor/src/components/CkeditorArticle.tsx +++ b/frontends/ol-ckeditor/src/components/CkeditorArticle.tsx @@ -149,7 +149,7 @@ const CkeditorArticle: React.FC = ({ { + onReady={(editor: ClassicEditor) => { setEditor(editor) onReady?.() }} diff --git a/frontends/ol-ckeditor/src/components/CkeditorMarkdown.tsx b/frontends/ol-ckeditor/src/components/CkeditorMarkdown.tsx index a471dfeba4..c1d709835f 100644 --- a/frontends/ol-ckeditor/src/components/CkeditorMarkdown.tsx +++ b/frontends/ol-ckeditor/src/components/CkeditorMarkdown.tsx @@ -6,6 +6,8 @@ import Essentials from "@ckeditor/ckeditor5-essentials/src/essentials" import Paragraph from "@ckeditor/ckeditor5-paragraph/src/paragraph" import Bold from "@ckeditor/ckeditor5-basic-styles/src/bold" import Italic from "@ckeditor/ckeditor5-basic-styles/src/italic" +import { EventInfo } from "@ckeditor/ckeditor5-utils" + import Markdown from "@ckeditor/ckeditor5-markdown-gfm/src/markdown" import List from "@ckeditor/ckeditor5-list/src/list" import Link from "@ckeditor/ckeditor5-link/src/link" @@ -47,7 +49,7 @@ const CkeditorMarkdown: React.FC = ({ editor={ClassicEditor} data={value} config={editorConfig} - onChange={(_event, editor) => { + onChange={(event: EventInfo, editor: ClassicEditor) => { const data = editor.getData() onChange(data) }} diff --git a/frontends/ol-components/src/components/Dialog/Dialog.tsx b/frontends/ol-components/src/components/Dialog/Dialog.tsx index 154b91145b..966fdcb783 100644 --- a/frontends/ol-components/src/components/Dialog/Dialog.tsx +++ b/frontends/ol-components/src/components/Dialog/Dialog.tsx @@ -23,7 +23,9 @@ const Header = styled.div` ` const Content = styled.div` - margin: 28px 28px 40px; + margin: 28px; + min-height: 0; + overflow: auto; ` const DialogActions = styled(MuiDialogActions)` diff --git a/frontends/ol-components/src/components/FormDialog/FormDialog.tsx b/frontends/ol-components/src/components/FormDialog/FormDialog.tsx index 85d7cbb281..3f82e535d2 100644 --- a/frontends/ol-components/src/components/FormDialog/FormDialog.tsx +++ b/frontends/ol-components/src/components/FormDialog/FormDialog.tsx @@ -8,7 +8,6 @@ const FormContent = styled.div` flex-direction: column; gap: 20px; width: 100%; - margin-bottom: -12px; ` interface FormDialogProps { /** diff --git a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.test.tsx b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.test.tsx index 5b2507a6f8..9659c4812b 100644 --- a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.test.tsx +++ b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.test.tsx @@ -2,7 +2,7 @@ import React from "react" import { screen, render } from "@testing-library/react" import { LearningResourceCard } from "./LearningResourceCard" import type { LearningResourceCardProps } from "./LearningResourceCard" -import { DEFAULT_RESOURCE_IMG } from "ol-utilities" +import { DEFAULT_RESOURCE_IMG, getReadableResourceType } from "ol-utilities" import { ResourceTypeEnum, PlatformEnum, AvailabilityEnum } from "api" import { factories } from "api/test-utils" import { ThemeProvider } from "../ThemeProvider/ThemeProvider" @@ -125,7 +125,9 @@ describe("Learning Resource Card", () => { await addToLearningPathButton.click() - const addToUserListButton = screen.getByLabelText("Add to User List") + const addToUserListButton = screen.getByLabelText( + `Bookmark ${getReadableResourceType(resource.resource_type)}`, + ) await addToUserListButton.click() diff --git a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx index dd29978299..314d2b8912 100644 --- a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx +++ b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx @@ -257,7 +257,7 @@ const LearningResourceCard: React.FC = ({ {onAddToUserListClick && ( onAddToUserListClick(event, resource.id)} > {inUserList ? ( diff --git a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.test.tsx b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.test.tsx index e9f28e8437..d90eae55ae 100644 --- a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.test.tsx +++ b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.test.tsx @@ -3,7 +3,7 @@ import { BrowserRouter } from "react-router-dom" import { screen, render } from "@testing-library/react" import { LearningResourceListCard } from "./LearningResourceListCard" import type { LearningResourceListCardProps } from "./LearningResourceListCard" -import { DEFAULT_RESOURCE_IMG } from "ol-utilities" +import { DEFAULT_RESOURCE_IMG, getReadableResourceType } from "ol-utilities" import { ResourceTypeEnum, PlatformEnum, AvailabilityEnum } from "api" import { factories } from "api/test-utils" import { ThemeProvider } from "../ThemeProvider/ThemeProvider" @@ -124,7 +124,9 @@ describe("Learning Resource List Card", () => { ) await addToLearningPathButton.click() - const addToUserListButton = screen.getByLabelText("Add to User List") + const addToUserListButton = screen.getByLabelText( + `Bookmark ${getReadableResourceType(resource.resource_type)}`, + ) await addToUserListButton.click() expect(onAddToLearningPathClick).toHaveBeenCalledWith( diff --git a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx index 00d6fb243f..6778afc08b 100644 --- a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx +++ b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx @@ -307,7 +307,6 @@ const LearningResourceListCard: React.FC = ({ if (!resource) { return null } - return ( = ({ {onAddToUserListClick && ( onAddToUserListClick(event, resource.id)} > {inUserList ? ( diff --git a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCardCondensed.tsx b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCardCondensed.tsx index a481225bc8..2bb7c4a1cd 100644 --- a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCardCondensed.tsx +++ b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCardCondensed.tsx @@ -111,6 +111,7 @@ const LearningResourceListCardCondensed: React.FC< ) } + if (!resource) { return null } @@ -133,7 +134,7 @@ const LearningResourceListCardCondensed: React.FC< {onAddToUserListClick && ( onAddToUserListClick(event, resource.id)} > {inUserList ? ( diff --git a/frontends/ol-components/src/components/LearningResourceExpanded/InfoSection.tsx b/frontends/ol-components/src/components/LearningResourceExpanded/InfoSection.tsx index 2ebd9264a7..4c6ec179bc 100644 --- a/frontends/ol-components/src/components/LearningResourceExpanded/InfoSection.tsx +++ b/frontends/ol-components/src/components/LearningResourceExpanded/InfoSection.tsx @@ -20,6 +20,7 @@ import { LearningResource, LearningResourceRun, ResourceTypeEnum } from "api" import { formatDurationClockTime, getLearningResourcePrices, + getReadableResourceType, } from "ol-utilities" import { theme } from "../ThemeProvider/ThemeProvider" import Typography from "@mui/material/Typography" @@ -288,7 +289,7 @@ const InfoSection = ({ )} onAddToUserListClick?.(event, resource.id) diff --git a/frontends/ol-components/src/components/LearningResourceExpanded/LearningResourceExpanded.test.tsx b/frontends/ol-components/src/components/LearningResourceExpanded/LearningResourceExpanded.test.tsx index 4848ea4785..0af5945c86 100644 --- a/frontends/ol-components/src/components/LearningResourceExpanded/LearningResourceExpanded.test.tsx +++ b/frontends/ol-components/src/components/LearningResourceExpanded/LearningResourceExpanded.test.tsx @@ -11,6 +11,7 @@ import { ThemeProvider } from "../ThemeProvider/ThemeProvider" import invariant from "tiny-invariant" import type { LearningResource } from "api" import { faker } from "@faker-js/faker/locale/en" +import { PLATFORMS } from "../Logo/Logo" const IMG_CONFIG: LearningResourceExpandedProps["imgConfig"] = { key: "fake-key", @@ -132,6 +133,28 @@ describe("Learning Resource Expanded", () => { }, ) + test.each([ResourceTypeEnum.PodcastEpisode])( + "Renders xpro logo conditionally on offered_by=xpro and not platform.code", + (resourceType) => { + const resource = factories.learningResources.resource({ + resource_type: resourceType, + platform: { code: "test" }, + offered_by: { code: "xpro" }, + podcast_episode: { + episode_link: "https://example.com", + }, + }) + + setup(resource) + const xproImage = screen + .getAllByRole("img") + .find((img) => img.getAttribute("alt")?.includes("xPRO")) + + expect(xproImage).toBeInTheDocument() + expect(xproImage).toHaveAttribute("alt", PLATFORMS["xpro"].name) + }, + ) + test(`Renders info section for resource type "${ResourceTypeEnum.Video}"`, () => { const resource = factories.learningResources.resource({ resource_type: ResourceTypeEnum.Video, diff --git a/frontends/ol-components/src/components/LearningResourceExpanded/LearningResourceExpanded.tsx b/frontends/ol-components/src/components/LearningResourceExpanded/LearningResourceExpanded.tsx index 6244d1341d..fdd3b2802d 100644 --- a/frontends/ol-components/src/components/LearningResourceExpanded/LearningResourceExpanded.tsx +++ b/frontends/ol-components/src/components/LearningResourceExpanded/LearningResourceExpanded.tsx @@ -212,11 +212,13 @@ const CallToActionSection = ({ ) } - - const platformImage = - PLATFORMS[resource?.platform?.code as PlatformEnum]?.image - const { platform } = resource! + const offeredBy = resource?.offered_by + const platformCode = + (offeredBy?.code as PlatformEnum) === PlatformEnum.Xpro + ? (offeredBy?.code as PlatformEnum) + : (platform?.code as PlatformEnum) + const platformImage = PLATFORMS[platformCode]?.image const getCallToActionText = (resource: LearningResource): string => { if (resource?.platform?.code === PlatformEnum.Ocw) { @@ -244,10 +246,7 @@ const CallToActionSection = ({ {platformImage ? ( on - + ) : null} diff --git a/frontends/ol-components/src/components/ThemeProvider/ThemeProvider.tsx b/frontends/ol-components/src/components/ThemeProvider/ThemeProvider.tsx index c2f7620659..ed1f947f24 100644 --- a/frontends/ol-components/src/components/ThemeProvider/ThemeProvider.tsx +++ b/frontends/ol-components/src/components/ThemeProvider/ThemeProvider.tsx @@ -78,7 +78,13 @@ const themeOptions: ThemeOptions = { styleOverrides: { paper: { borderRadius: "4px" } }, }, MuiAutocomplete: { - styleOverrides: { paper: { borderRadius: "4px" } }, + styleOverrides: { + paper: { borderRadius: "4px" }, + // Mui puts paddingRight: 2px, marginRight: -2px on the popupIndicator, + // which causes the browser to show a horizontal scrollbar on overflow + // containers when a scrollbar isn't really necessary. + popupIndicator: { paddingRight: 0, marginRight: 0 }, + }, }, MuiChip: chips.chipComponent, }, diff --git a/frontends/ol-utilities/src/types/settings.d.ts b/frontends/ol-utilities/src/types/settings.d.ts index 553c75e0c8..da51840dd7 100644 --- a/frontends/ol-utilities/src/types/settings.d.ts +++ b/frontends/ol-utilities/src/types/settings.d.ts @@ -22,10 +22,5 @@ export declare global { SITE_NAME: string MITOL_SUPPORT_EMAIL: string PUBLIC_URL: string - DEFAULT_SEARCH_MODE: string - DEFAULT_SEARCH_SLOP: number - DEFAULT_SEARCH_STALENESS_PENALTY: number - DEFAULT_SEARCH_MINIMUM_SCORE_CUTOFF: number - DEFAULT_SEARCH_MAX_INCOMPLETENESS_PENALTY: number } } diff --git a/frontends/package.json b/frontends/package.json index c4115f34e7..6bded9990e 100644 --- a/frontends/package.json +++ b/frontends/package.json @@ -48,6 +48,7 @@ "@types/jest-when": "^3.5.2", "@types/react-infinite-scroller": "^1.2.3", "@typescript-eslint/eslint-plugin": "^7.0.0", + "@typescript-eslint/typescript-estree": "^5.59.2", "cross-fetch": "^4.0.0", "eslint": "8.57.0", "eslint-config-mitodl": "^2.1.0", diff --git a/learning_resources/etl/prolearn_test.py b/learning_resources/etl/prolearn_test.py index 9390b73a48..dd216a731e 100644 --- a/learning_resources/etl/prolearn_test.py +++ b/learning_resources/etl/prolearn_test.py @@ -7,6 +7,7 @@ import pytest +from data_fixtures.utils import upsert_topic_data_file from learning_resources.constants import ( Availability, CertificationType, @@ -40,7 +41,6 @@ LearningResourcePlatformFactory, ) from learning_resources.models import LearningResourceOfferor, LearningResourcePlatform -from learning_resources.utils import upsert_topic_data_file from main.test_utils import assert_json_equal from main.utils import clean_data diff --git a/learning_resources/management/commands/update_departments_schools.py b/learning_resources/management/commands/update_departments_schools.py index 87cff3e190..5d4051c536 100644 --- a/learning_resources/management/commands/update_departments_schools.py +++ b/learning_resources/management/commands/update_departments_schools.py @@ -2,7 +2,7 @@ from django.core.management import BaseCommand -from learning_resources.utils import ( +from data_fixtures.utils import ( upsert_department_data, upsert_school_data, ) diff --git a/learning_resources/management/commands/update_offered_by.py b/learning_resources/management/commands/update_offered_by.py index 65d0783bab..8439069a4a 100644 --- a/learning_resources/management/commands/update_offered_by.py +++ b/learning_resources/management/commands/update_offered_by.py @@ -2,7 +2,7 @@ from django.core.management import BaseCommand -from learning_resources.utils import upsert_offered_by_data +from data_fixtures.utils import upsert_offered_by_data from main.utils import clear_search_cache, now_in_utc diff --git a/learning_resources/management/commands/update_platforms.py b/learning_resources/management/commands/update_platforms.py index b4e7152a55..06ff16c35d 100644 --- a/learning_resources/management/commands/update_platforms.py +++ b/learning_resources/management/commands/update_platforms.py @@ -2,7 +2,7 @@ from django.core.management import BaseCommand -from learning_resources.utils import upsert_platform_data +from data_fixtures.utils import upsert_platform_data from main.utils import clear_search_cache, now_in_utc diff --git a/learning_resources/test_utils.py b/learning_resources/test_utils.py index 59121ed84c..9484b3a936 100644 --- a/learning_resources/test_utils.py +++ b/learning_resources/test_utils.py @@ -1,7 +1,7 @@ """Test utility functions for learning resources.""" +from data_fixtures.utils import upsert_topic_data_file from learning_resources.factories import LearningResourceOfferorFactory -from learning_resources.utils import upsert_topic_data_file def set_up_topics(**kwargs): diff --git a/learning_resources/utils.py b/learning_resources/utils.py index c0c52be7b6..4abfb80543 100644 --- a/learning_resources/utils.py +++ b/learning_resources/utils.py @@ -1,9 +1,7 @@ """Utils for learning resources""" -import json import logging import re -from pathlib import Path import rapidjson import requests @@ -25,10 +23,8 @@ LearningResource, LearningResourceDepartment, LearningResourceOfferor, - LearningResourcePlatform, LearningResourceRelationship, LearningResourceRun, - LearningResourceSchool, LearningResourceTopic, LearningResourceTopicMapping, UserListRelationship, @@ -265,89 +261,6 @@ def get_ocw_topics(topics_collection): return list(set(topics)) -@transaction.atomic() -def upsert_offered_by_data(): - """ - Upsert LearningResourceOfferor data - """ - offerors = [] - with Path.open(Path(__file__).parent / "fixtures" / "offered_by.json") as inf: - offered_by_json = json.load(inf) - for offeror in offered_by_json: - offeror_fields = offeror["fields"] - offered_by, _ = LearningResourceOfferor.objects.update_or_create( - code=offeror_fields["code"], - defaults=offeror_fields, - ) - offeror_upserted_actions(offered_by, overwrite=True) - offerors.append(offeror_fields["name"]) - invalid_offerors = LearningResourceOfferor.objects.exclude(name__in=offerors) - for offeror in invalid_offerors: - offeror_delete_actions(offeror) - return offerors - - -@transaction.atomic() -def upsert_department_data(): - """ - Upsert LearningResourceDepartment data - """ - departments = [] - with Path.open(Path(__file__).parent / "fixtures" / "departments.json") as inf: - departments_json = json.load(inf) - for dept in departments_json: - department_fields = dept["fields"] - LearningResourceDepartment.objects.update_or_create( - department_id=department_fields["department_id"], - defaults=department_fields, - ) - departments.append(department_fields["name"]) - invalid_departments = LearningResourceDepartment.objects.exclude( - name__in=departments - ).all() - for invalid_department in invalid_departments: - department_delete_actions(invalid_department) - return departments - - -@transaction.atomic() -def upsert_school_data(): - """ - Upsert LearningResourceSchool data - """ - schools = [] - with Path.open(Path(__file__).parent / "fixtures" / "schools.json") as inf: - schools_json = json.load(inf) - for school in schools_json: - school_fields = school["fields"] - LearningResourceSchool.objects.update_or_create( - id=school_fields["id"], - defaults=school_fields, - ) - schools.append(school_fields["name"]) - LearningResourceSchool.objects.exclude(name__in=schools).delete() - return schools - - -@transaction.atomic() -def upsert_platform_data(): - """ - Upsert LearningResourcePlatform data - """ - platforms = [] - with Path.open(Path(__file__).parent / "fixtures" / "platforms.json") as inf: - platform_json = json.load(inf) - for platform in platform_json: - platform_fields = platform["fields"] - LearningResourcePlatform.objects.update_or_create( - code=platform_fields["code"], - defaults=platform_fields, - ) - platforms.append(platform_fields["code"]) - LearningResourcePlatform.objects.exclude(code__in=platforms).delete() - return platforms - - def resource_upserted_actions(resource: LearningResource, percolate): """ Trigger plugins when a LearningResource is created or updated @@ -562,52 +475,6 @@ def _walk_topic_map(topics: list, parent: None | LearningResourceTopic = None) - _walk_topic_map(topic["children"], lr_topic) -@transaction.atomic() -def upsert_topic_data_file( - config_path: str = "learning_resources/data/topics.yaml", -) -> None: - """ - Load the topics from a yaml file. - - The yaml file should have a root "topics" key, and then any number of topic - records beneath it. See _walk_topic_map for an explanation of the record - format. - - Args: - - config_path (str): the path to the topics file. - Returns: - - None - """ - - with Path.open(Path(config_path)) as topic_file: - topic_file_yaml = topic_file.read() - - topics = yaml.safe_load(topic_file_yaml) - - _walk_topic_map(topics["topics"]) - - -@transaction.atomic() -def upsert_topic_data_string(yaml_data: str) -> None: - """ - Load the topics from a yaml string. - - The yaml string should be formatted in the same way that it is for - upsert_topic_data_file - this function exists just to allow you to specify - the data as a string so you can roll it into a migration file in the - data_fixtures app. - - Args: - - yaml_data (str): the yaml to process - Returns: - - None - """ - - topics = yaml.safe_load(yaml_data) - - _walk_topic_map(topics["topics"]) - - def _walk_lr_topic_parents( learning_resource: LearningResource, topic: LearningResourceTopic, diff --git a/learning_resources/utils_test.py b/learning_resources/utils_test.py index 071bd115e9..6267ace80b 100644 --- a/learning_resources/utils_test.py +++ b/learning_resources/utils_test.py @@ -8,6 +8,7 @@ import pytest import yaml +from data_fixtures import utils as data_utils from learning_resources import utils from learning_resources.constants import ( CONTENT_TYPE_FILE, @@ -35,8 +36,6 @@ from learning_resources.utils import ( add_parent_topics_to_learning_resource, transfer_list_resources, - upsert_topic_data_file, - upsert_topic_data_string, ) pytestmark = pytest.mark.django_db @@ -189,9 +188,11 @@ def test_platform_data(): """ LearningResourcePlatform.objects.create(code="bad", name="bad platform") assert LearningResourcePlatform.objects.filter(code="bad").count() == 1 - with Path.open(Path(__file__).parent / "fixtures" / "platforms.json") as inf: + with Path.open( + Path(data_utils.__file__).parent / "fixtures" / "platforms.json" + ) as inf: expected_count = len(json.load(inf)) - codes = utils.upsert_platform_data() + codes = data_utils.upsert_platform_data() assert LearningResourcePlatform.objects.count() == expected_count == len(codes) assert LearningResourcePlatform.objects.filter(code="bad").count() == 0 @@ -312,7 +313,7 @@ def _get_topic_count(topics): assert LearningResourceTopic.objects.count() == 0 assert LearningResourceTopicMapping.objects.count() == 0 - upsert_topic_data_file(test_file_location) + data_utils.upsert_topic_data_file(test_file_location) assert mock_pluggy.called assert LearningResourceTopic.objects.count() == item_count @@ -340,7 +341,7 @@ def test_modify_topic_data_string(mocker): LearningResourceOfferorFactory.create(is_ocw=True) see_offeror = LearningResourceOfferorFactory.create(is_see=True) - upsert_topic_data_file(test_file_location) + data_utils.upsert_topic_data_file(test_file_location) mock_pluggy = mocker.patch("learning_resources.utils.topic_upserted_actions") @@ -358,7 +359,7 @@ def test_modify_topic_data_string(mocker): "%%ARCHITECTURE_ID%%", str(architecture_topic.topic_uuid) ) - upsert_topic_data_string(update_yaml_string) + data_utils.upsert_topic_data_string(update_yaml_string) assert mock_pluggy.called @@ -436,7 +437,7 @@ def test_modify_topic_with_parent(mocker): name: Google Analytics """ - upsert_topic_data_string(base_topic_file) + data_utils.upsert_topic_data_string(base_topic_file) assert mock_pluggy.called @@ -452,7 +453,7 @@ def test_modify_topic_with_parent(mocker): assert sub_topic.exists() sub_topic = sub_topic.get() - upsert_topic_data_string(new_topic_file) + data_utils.upsert_topic_data_string(new_topic_file) new_topic = LearningResourceTopic.objects.filter( topic_uuid="d335c250-1292-4391-a7cb-3181f803e0f3" @@ -461,7 +462,7 @@ def test_modify_topic_with_parent(mocker): assert new_topic.exists() assert new_topic.get().parent == sub_topic - upsert_topic_data_string(new_topic_nested_parent_file) + data_utils.upsert_topic_data_string(new_topic_nested_parent_file) main_topic.refresh_from_db() @@ -493,10 +494,12 @@ def test_add_parent_topics_to_learning_resource(fixture_resource): def test_upsert_offered_by(mocker): """Test that upsert_offered_by_data creates expected offerors and triggers pluggy""" - mock_upsert = mocker.patch("learning_resources.utils.offeror_upserted_actions") - with Path.open(Path(__file__).parent / "fixtures" / "offered_by.json") as inf: + mock_upsert = mocker.patch("data_fixtures.utils.offeror_upserted_actions") + with Path.open( + Path(data_utils.__file__).parent / "fixtures" / "offered_by.json" + ) as inf: offered_by_json = json.load(inf) - utils.upsert_offered_by_data() + data_utils.upsert_offered_by_data() assert LearningResourceOfferor.objects.count() == len(offered_by_json) for offered_by_data in offered_by_json: offeror = LearningResourceOfferor.objects.get( diff --git a/learning_resources/views.py b/learning_resources/views.py index cc8234c22e..683742d110 100644 --- a/learning_resources/views.py +++ b/learning_resources/views.py @@ -591,6 +591,10 @@ class TopicViewSet(viewsets.ReadOnlyModelViewSet): filter_backends = [DjangoFilterBackend] filterset_class = TopicFilter + def filter_queryset(self, queryset): + queryset = queryset.exclude(channel_url__isnull=True) + return super().filter_queryset(queryset) + @method_decorator( cache_page_for_all_users( settings.SEARCH_PAGE_CACHE_DURATION, cache="redis", key_prefix="search" diff --git a/learning_resources/views_test.py b/learning_resources/views_test.py index baeda8e39b..b7e3481561 100644 --- a/learning_resources/views_test.py +++ b/learning_resources/views_test.py @@ -547,6 +547,8 @@ def test_topics_list_endpoint(client, django_assert_num_queries): LearningResourceTopicFactory.create_batch(100), key=lambda topic: topic.name, ) + for topic in topics: + ChannelTopicDetailFactory.create(topic=topic) with django_assert_num_queries(2): resp = client.get(reverse("lr:v1:topics_api-list")) @@ -564,6 +566,7 @@ def test_topics_list_endpoint(client, django_assert_num_queries): def test_topics_detail_endpoint(client): """Test topics detail endpoint""" topic = LearningResourceTopicFactory.create() + ChannelTopicDetailFactory.create(topic=topic) resp = client.get(reverse("lr:v1:topics_api-detail", args=[topic.pk])) assert resp.data == LearningResourceTopicSerializer(instance=topic).data @@ -571,11 +574,8 @@ def test_topics_detail_endpoint(client): @pytest.mark.parametrize("published", [True, False]) def test_topic_channel_url(client, published): """ - Check that the topic API returns 'None' for channel_url of unpublished channels. - - Note: The channel_url being None is also tested on the Channel model itself, - but the API may generate the channel_url in a slightly different manner (for - example, queryset annotation) + Test that topics with published channels return the channel_url, + and unpublished channels are not included in the response """ topic = LearningResourceTopicFactory.create() channel = ChannelTopicDetailFactory.create( @@ -583,9 +583,10 @@ def test_topic_channel_url(client, published): ).channel resp = client.get(reverse("lr:v1:topics_api-detail", args=[topic.pk])) - assert resp.data["channel_url"] == channel.channel_url - if not published: - assert resp.data["channel_url"] is None + if published: + assert resp.data["channel_url"] == channel.channel_url + else: + assert resp.status_code == 404 def test_departments_list_endpoint(client): diff --git a/learning_resources_search/constants.py b/learning_resources_search/constants.py index 6cf1ad993c..78757dad6d 100644 --- a/learning_resources_search/constants.py +++ b/learning_resources_search/constants.py @@ -90,13 +90,13 @@ class FilterConfig: ENGLISH_TEXT_FIELD = { "type": "text", - "fields": {"english": {"type": "text", "analyzer": "english"}}, + "fields": {"english": {"type": "text", "analyzer": "custom_english"}}, } ENGLISH_TEXT_FIELD_WITH_SUGGEST = { "type": "text", "fields": { - "english": {"type": "text", "analyzer": "english"}, + "english": {"type": "text", "analyzer": "custom_english"}, "trigram": {"type": "text", "analyzer": "trigram"}, }, } @@ -429,3 +429,13 @@ class FilterConfig: }, **LEARNING_RESOURCE_SORTBY_OPTIONS, } + +SYNONYMS = [ + "ai, ml, artificial intelligence, machine learning", + "math, mathematics", + "chem, chemistry", + "bio, biology", + "econ, economics", + "natural language processing, nlp", + "large language model, llm", +] diff --git a/learning_resources_search/indexing_api.py b/learning_resources_search/indexing_api.py index 0b8803dcdd..6904db5b9a 100644 --- a/learning_resources_search/indexing_api.py +++ b/learning_resources_search/indexing_api.py @@ -26,6 +26,7 @@ COURSE_TYPE, MAPPING, PERCOLATE_INDEX_TYPE, + SYNONYMS, IndexestoUpdate, ) from learning_resources_search.exceptions import ReindexError @@ -143,26 +144,41 @@ def clear_and_create_index(*, index_name=None, skip_mapping=False, object_type=N }, "analysis": { "analyzer": { - "folding": { + "trigram": { "type": "custom", + "tokenizer": "standard", + "filter": ["lowercase", "synonyms_filter", "shingle"], + }, + "custom_english": { "tokenizer": "standard", "filter": [ + "english_possessive_stemmer", "lowercase", - "asciifolding", # remove accents if we use folding analyzer + "synonyms_filter", + "english_stop", + "english_keywords", + "english_stemmer", ], }, - "trigram": { - "type": "custom", - "tokenizer": "standard", - "filter": ["lowercase", "shingle"], - }, }, "filter": { "shingle": { "type": "shingle", "min_shingle_size": 2, "max_shingle_size": 3, - } + }, + "english_stop": {"type": "stop", "stopwords": "_english_"}, + "english_keywords": {"type": "keyword_marker", "keywords": []}, + "english_stemmer": {"type": "stemmer", "language": "english"}, + "english_possessive_stemmer": { + "type": "stemmer", + "language": "possessive_english", + }, + "synonyms_filter": { + "type": "synonym_graph", + "synonyms": SYNONYMS, + "expand": "true", + }, }, }, } diff --git a/learning_resources_search/urls.py b/learning_resources_search/urls.py index 029ae81492..3e5825b619 100644 --- a/learning_resources_search/urls.py +++ b/learning_resources_search/urls.py @@ -5,6 +5,7 @@ from learning_resources_search.views import ( ContentFileSearchView, + LearningResourceSearchDefaultsView, LearningResourcesSearchView, UserSearchSubscriptionViewSet, ) @@ -30,7 +31,16 @@ ), ] +v0_urls = [ + path( + r"learning_resources_search_admin_params/", + LearningResourceSearchDefaultsView.as_view(), + name="learning_resources_search_admin_params", + ), +] + app_name = "lr_search" urlpatterns = [ re_path(r"^api/v1/", include((v1_urls, "v1"))), + re_path(r"^api/v0/", include((v0_urls, "v0"))), ] diff --git a/learning_resources_search/views.py b/learning_resources_search/views.py index b61a2310a9..70ad54ecba 100644 --- a/learning_resources_search/views.py +++ b/learning_resources_search/views.py @@ -4,6 +4,7 @@ from itertools import chain from django.conf import settings +from django.http import JsonResponse from django.utils.decorators import method_decorator from drf_spectacular.utils import OpenApiParameter, extend_schema, extend_schema_view from opensearchpy.exceptions import TransportError @@ -265,3 +266,29 @@ def get(self, request): errors[key] = list(set(chain(*errors_obj.values()))) return Response(errors, status=400) + + +@action(methods=["GET"], detail=False, name="Search Defaults") +@extend_schema_view( + get=extend_schema( + parameters=None, + ), +) +class LearningResourceSearchDefaultsView(APIView): + """Learning resource search default admin param values""" + + authentication_classes = [] + permission_classes = [] + serializer_class = None + + def get(self, _): + return JsonResponse( + { + "search_mode": settings.DEFAULT_SEARCH_MODE, + "slop": settings.DEFAULT_SEARCH_SLOP, + "yearly_decay_percent": settings.DEFAULT_SEARCH_STALENESS_PENALTY, + "min_score": settings.DEFAULT_SEARCH_MINIMUM_SCORE_CUTOFF, + "max_incompleteness_penalty": settings.DEFAULT_SEARCH_MAX_INCOMPLETENESS_PENALTY, # noqa: E501 + "content_file_score_weight": settings.DEFAULT_SEARCH_CONTENT_FILE_SCORE_WEIGHT, # noqa: E501 + } + ) diff --git a/main/settings.py b/main/settings.py index 76d934a2cb..3c56978486 100644 --- a/main/settings.py +++ b/main/settings.py @@ -33,7 +33,7 @@ from main.settings_pluggy import * # noqa: F403 from openapi.settings_spectacular import open_spectacular_settings -VERSION = "0.21.2" +VERSION = "0.22.1" log = logging.getLogger() @@ -779,3 +779,6 @@ def get_all_config_keys(): DEFAULT_SEARCH_MAX_INCOMPLETENESS_PENALTY = get_float( name="DEFAULT_SEARCH_MAX_INCOMPLETENESS_PENALTY", default=90 ) +DEFAULT_SEARCH_CONTENT_FILE_SCORE_WEIGHT = get_float( + name="DEFAULT_SEARCH_CONTENT_FILE_SCORE_WEIGHT", default=1 +) diff --git a/openapi/specs/v0.yaml b/openapi/specs/v0.yaml index bea72ed810..b080e4cebf 100644 --- a/openapi/specs/v0.yaml +++ b/openapi/specs/v0.yaml @@ -288,6 +288,15 @@ paths: schema: $ref: '#/components/schemas/CKEditorSettings' description: '' + /api/v0/learning_resources_search_admin_params/: + get: + operationId: learning_resources_search_admin_params_retrieve + description: Learning resource search default admin param values + tags: + - learning_resources_search_admin_params + responses: + '200': + description: No response body /api/v0/news_events/: get: operationId: news_events_list diff --git a/scripts/run-django-dev.sh b/scripts/run-django-dev.sh index d3534c72b9..a2d53a4fcd 100755 --- a/scripts/run-django-dev.sh +++ b/scripts/run-django-dev.sh @@ -3,9 +3,15 @@ # This script runs the django app python3 manage.py collectstatic --noinput --clear + +# run initial django migrations python3 manage.py migrate --noinput + +# populate cache table python3 manage.py createcachetable -python3 manage.py migrate --noinput + +# run ONLY data migrations +RUN_DATA_MIGRATIONS=true python3 manage.py migrate --noinput # load required fixtures on development by default echo "Loading fixtures!" diff --git a/yarn.lock b/yarn.lock index 1cdf911c4a..a200186666 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1467,299 +1467,163 @@ __metadata: languageName: node linkType: hard -"@ckeditor/ckeditor5-adapter-ckfinder@npm:41.4.2, @ckeditor/ckeditor5-adapter-ckfinder@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-adapter-ckfinder@npm:41.4.2" +"@ckeditor/ckeditor5-adapter-ckfinder@npm:42.0.2, @ckeditor/ckeditor5-adapter-ckfinder@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-adapter-ckfinder@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/e27d6f497c8205917b6f7344cce3d1ab23e5d5adac3bf801177f2ff74329ff1774840e5fd7b698c4fbb6b7678226ed94ebbf6d5709bbdbf1c697a104facbcb18 + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-upload": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/042f39211b129cc1ba7bffb94d005fcba2f867473eb8d402e85f6dd13c2faab0f93eabb3b1f6c52e80c80a25b919c718f80966d4f569db9a8c2532d9b802134c languageName: node linkType: hard -"@ckeditor/ckeditor5-alignment@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-alignment@npm:41.4.2" +"@ckeditor/ckeditor5-alignment@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-alignment@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/673c21f2ffc9410448c7c6748ad1195ede6e0ddb0c819e72e7f0519cb65fad26baccadfbebad64b43b1735575ddeb19cfbade19166979438a1364894ae2c71db + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/ef635c518054909782a4044c785f72676effa6ac0db6fa0a60b5e9c75357ef9bdd78ee499f56783fc362cef6c935bcfdafd0a9dbeceb1493203bef5d31fb045e languageName: node linkType: hard -"@ckeditor/ckeditor5-autoformat@npm:41.4.2, @ckeditor/ckeditor5-autoformat@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-autoformat@npm:41.4.2" +"@ckeditor/ckeditor5-autoformat@npm:42.0.2, @ckeditor/ckeditor5-autoformat@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-autoformat@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/5061ed122121b170fb007d966ac77677bc9c2e61dff7c6b0ff89fbb8bed85e788c00f5fb24e10097b08158378687569b7fdcc3fd0145ded91912217691458d40 + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-typing": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/517480a428feecc67534e3a6753ed9d93e4b24b328015f6846636d6538ea1230ab26be36a9d8c5c3ead3a5e0fe7cebebe8db83a88cf49ed6f5da834ad28099de languageName: node linkType: hard -"@ckeditor/ckeditor5-autosave@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-autosave@npm:41.4.2" +"@ckeditor/ckeditor5-autosave@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-autosave@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/a4c8ece1511656cda00ab081aee2953b06e7a6992e45e44b34bb6d3c7ede5826d36213d7e6c0f6a098cc13f298c20d16bb084a1963bfa17405f90ebb82d7c0c1 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-basic-styles@npm:41.4.2, @ckeditor/ckeditor5-basic-styles@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-basic-styles@npm:41.4.2" - dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/bc3fed98aaed20be20a0b1ea4dc3bbe55318904bef2f20dff9e41580fcdf0e853158b8e50caa99ab481e60b9e3862bf6ddf42b3aff524e9a4f014548d614bd57 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-block-quote@npm:41.4.2, @ckeditor/ckeditor5-block-quote@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-block-quote@npm:41.4.2" - dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/a3ad1770e955120a9277cf972f1ca57b447eb4670f413aeaa195084e4729f059603bc7d11ae35c3cfaf291c53aae00438e6f4b5b9d600cfbf7cb246f5148b09b - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-build-balloon-block@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-build-balloon-block@npm:41.4.2" - dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder": "npm:41.4.2" - "@ckeditor/ckeditor5-autoformat": "npm:41.4.2" - "@ckeditor/ckeditor5-basic-styles": "npm:41.4.2" - "@ckeditor/ckeditor5-block-quote": "npm:41.4.2" - "@ckeditor/ckeditor5-ckbox": "npm:41.4.2" - "@ckeditor/ckeditor5-ckfinder": "npm:41.4.2" - "@ckeditor/ckeditor5-cloud-services": "npm:41.4.2" - "@ckeditor/ckeditor5-easy-image": "npm:41.4.2" - "@ckeditor/ckeditor5-editor-balloon": "npm:41.4.2" - "@ckeditor/ckeditor5-essentials": "npm:41.4.2" - "@ckeditor/ckeditor5-heading": "npm:41.4.2" - "@ckeditor/ckeditor5-image": "npm:41.4.2" - "@ckeditor/ckeditor5-indent": "npm:41.4.2" - "@ckeditor/ckeditor5-link": "npm:41.4.2" - "@ckeditor/ckeditor5-list": "npm:41.4.2" - "@ckeditor/ckeditor5-media-embed": "npm:41.4.2" - "@ckeditor/ckeditor5-paragraph": "npm:41.4.2" - "@ckeditor/ckeditor5-paste-from-office": "npm:41.4.2" - "@ckeditor/ckeditor5-table": "npm:41.4.2" - "@ckeditor/ckeditor5-typing": "npm:41.4.2" - "@ckeditor/ckeditor5-ui": "npm:41.4.2" - checksum: 10/7638f090493bce362f09769f021bf3d0a77f834ec1644c87ffd12aa26b447f630c0d4712a4aa0bfb41d88c05aad288427f8f6d2c0ce9e60626f46f8e90a40f71 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-build-balloon@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-build-balloon@npm:41.4.2" - dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder": "npm:41.4.2" - "@ckeditor/ckeditor5-autoformat": "npm:41.4.2" - "@ckeditor/ckeditor5-basic-styles": "npm:41.4.2" - "@ckeditor/ckeditor5-block-quote": "npm:41.4.2" - "@ckeditor/ckeditor5-ckbox": "npm:41.4.2" - "@ckeditor/ckeditor5-ckfinder": "npm:41.4.2" - "@ckeditor/ckeditor5-cloud-services": "npm:41.4.2" - "@ckeditor/ckeditor5-easy-image": "npm:41.4.2" - "@ckeditor/ckeditor5-editor-balloon": "npm:41.4.2" - "@ckeditor/ckeditor5-essentials": "npm:41.4.2" - "@ckeditor/ckeditor5-heading": "npm:41.4.2" - "@ckeditor/ckeditor5-image": "npm:41.4.2" - "@ckeditor/ckeditor5-indent": "npm:41.4.2" - "@ckeditor/ckeditor5-link": "npm:41.4.2" - "@ckeditor/ckeditor5-list": "npm:41.4.2" - "@ckeditor/ckeditor5-media-embed": "npm:41.4.2" - "@ckeditor/ckeditor5-paragraph": "npm:41.4.2" - "@ckeditor/ckeditor5-paste-from-office": "npm:41.4.2" - "@ckeditor/ckeditor5-table": "npm:41.4.2" - "@ckeditor/ckeditor5-typing": "npm:41.4.2" - checksum: 10/7a007a0503e2d3bfa2dc3035f34694f8b0f6a38f6a7320b9976f41de97ebf504249c0d0dbb81e6366b0578ced821ad9c3c636b91933ccf7c1d57a138102349fa - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-build-classic@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-build-classic@npm:41.4.2" - dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder": "npm:41.4.2" - "@ckeditor/ckeditor5-autoformat": "npm:41.4.2" - "@ckeditor/ckeditor5-basic-styles": "npm:41.4.2" - "@ckeditor/ckeditor5-block-quote": "npm:41.4.2" - "@ckeditor/ckeditor5-ckbox": "npm:41.4.2" - "@ckeditor/ckeditor5-ckfinder": "npm:41.4.2" - "@ckeditor/ckeditor5-cloud-services": "npm:41.4.2" - "@ckeditor/ckeditor5-easy-image": "npm:41.4.2" - "@ckeditor/ckeditor5-editor-classic": "npm:41.4.2" - "@ckeditor/ckeditor5-essentials": "npm:41.4.2" - "@ckeditor/ckeditor5-heading": "npm:41.4.2" - "@ckeditor/ckeditor5-image": "npm:41.4.2" - "@ckeditor/ckeditor5-indent": "npm:41.4.2" - "@ckeditor/ckeditor5-link": "npm:41.4.2" - "@ckeditor/ckeditor5-list": "npm:41.4.2" - "@ckeditor/ckeditor5-media-embed": "npm:41.4.2" - "@ckeditor/ckeditor5-paragraph": "npm:41.4.2" - "@ckeditor/ckeditor5-paste-from-office": "npm:41.4.2" - "@ckeditor/ckeditor5-table": "npm:41.4.2" - "@ckeditor/ckeditor5-typing": "npm:41.4.2" - checksum: 10/9f1556e13d74c33a564932ebf7680c7d2f6772dd50b6c204fa9284e1e7c4625bb4f1134da11900550cf65f7022dea82c35bea22b3a7df45fe86df0bcb481a48d - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-build-decoupled-document@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-build-decoupled-document@npm:41.4.2" - dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder": "npm:41.4.2" - "@ckeditor/ckeditor5-alignment": "npm:41.4.2" - "@ckeditor/ckeditor5-autoformat": "npm:41.4.2" - "@ckeditor/ckeditor5-basic-styles": "npm:41.4.2" - "@ckeditor/ckeditor5-block-quote": "npm:41.4.2" - "@ckeditor/ckeditor5-ckbox": "npm:41.4.2" - "@ckeditor/ckeditor5-ckfinder": "npm:41.4.2" - "@ckeditor/ckeditor5-cloud-services": "npm:41.4.2" - "@ckeditor/ckeditor5-easy-image": "npm:41.4.2" - "@ckeditor/ckeditor5-editor-decoupled": "npm:41.4.2" - "@ckeditor/ckeditor5-essentials": "npm:41.4.2" - "@ckeditor/ckeditor5-font": "npm:41.4.2" - "@ckeditor/ckeditor5-heading": "npm:41.4.2" - "@ckeditor/ckeditor5-image": "npm:41.4.2" - "@ckeditor/ckeditor5-indent": "npm:41.4.2" - "@ckeditor/ckeditor5-link": "npm:41.4.2" - "@ckeditor/ckeditor5-list": "npm:41.4.2" - "@ckeditor/ckeditor5-media-embed": "npm:41.4.2" - "@ckeditor/ckeditor5-paragraph": "npm:41.4.2" - "@ckeditor/ckeditor5-paste-from-office": "npm:41.4.2" - "@ckeditor/ckeditor5-table": "npm:41.4.2" - "@ckeditor/ckeditor5-typing": "npm:41.4.2" - checksum: 10/af33257cdc5d6c68dcd98ad0e0fed46b9ddafcb6428a6580b6294518ba2439f69729f16874f833d5f29edce4f66ca3d674964ebb77109c49f63d039d5a9a7907 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-build-inline@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-build-inline@npm:41.4.2" - dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder": "npm:41.4.2" - "@ckeditor/ckeditor5-autoformat": "npm:41.4.2" - "@ckeditor/ckeditor5-basic-styles": "npm:41.4.2" - "@ckeditor/ckeditor5-block-quote": "npm:41.4.2" - "@ckeditor/ckeditor5-ckbox": "npm:41.4.2" - "@ckeditor/ckeditor5-ckfinder": "npm:41.4.2" - "@ckeditor/ckeditor5-cloud-services": "npm:41.4.2" - "@ckeditor/ckeditor5-easy-image": "npm:41.4.2" - "@ckeditor/ckeditor5-editor-inline": "npm:41.4.2" - "@ckeditor/ckeditor5-essentials": "npm:41.4.2" - "@ckeditor/ckeditor5-heading": "npm:41.4.2" - "@ckeditor/ckeditor5-image": "npm:41.4.2" - "@ckeditor/ckeditor5-indent": "npm:41.4.2" - "@ckeditor/ckeditor5-link": "npm:41.4.2" - "@ckeditor/ckeditor5-list": "npm:41.4.2" - "@ckeditor/ckeditor5-media-embed": "npm:41.4.2" - "@ckeditor/ckeditor5-paragraph": "npm:41.4.2" - "@ckeditor/ckeditor5-paste-from-office": "npm:41.4.2" - "@ckeditor/ckeditor5-table": "npm:41.4.2" - "@ckeditor/ckeditor5-typing": "npm:41.4.2" - checksum: 10/0c6b0463e948a71f8b0a784a42ad2b0aff13d253385730bbc12839ad0516b65033cdfb3498fd3dd06ff37896aecfd88b76568892c78f250bd0a4e07f3ca4bc8c - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-build-multi-root@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-build-multi-root@npm:41.4.2" - dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder": "npm:41.4.2" - "@ckeditor/ckeditor5-autoformat": "npm:41.4.2" - "@ckeditor/ckeditor5-basic-styles": "npm:41.4.2" - "@ckeditor/ckeditor5-block-quote": "npm:41.4.2" - "@ckeditor/ckeditor5-ckbox": "npm:41.4.2" - "@ckeditor/ckeditor5-ckfinder": "npm:41.4.2" - "@ckeditor/ckeditor5-cloud-services": "npm:41.4.2" - "@ckeditor/ckeditor5-easy-image": "npm:41.4.2" - "@ckeditor/ckeditor5-editor-multi-root": "npm:41.4.2" - "@ckeditor/ckeditor5-essentials": "npm:41.4.2" - "@ckeditor/ckeditor5-heading": "npm:41.4.2" - "@ckeditor/ckeditor5-image": "npm:41.4.2" - "@ckeditor/ckeditor5-indent": "npm:41.4.2" - "@ckeditor/ckeditor5-link": "npm:41.4.2" - "@ckeditor/ckeditor5-list": "npm:41.4.2" - "@ckeditor/ckeditor5-media-embed": "npm:41.4.2" - "@ckeditor/ckeditor5-paragraph": "npm:41.4.2" - "@ckeditor/ckeditor5-paste-from-office": "npm:41.4.2" - "@ckeditor/ckeditor5-table": "npm:41.4.2" - "@ckeditor/ckeditor5-typing": "npm:41.4.2" - checksum: 10/77f467a026db65d02dbffa2cd06f556da9cafd4800bb9bbe821304289d6c7968cc9dd4c8f2398935b22af96b057718849caf73b03d419accd119a6aecec45957 - languageName: node - linkType: hard - -"@ckeditor/ckeditor5-ckbox@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-ckbox@npm:41.4.2" + checksum: 10/746e510cd3153b825e30f94a400a44122c93be0d12123d1c6e41168aba1288d7381a3bb73c4e348f54656f08660880228112daa415dc5067927477a5871c4e0b + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-basic-styles@npm:42.0.2, @ckeditor/ckeditor5-basic-styles@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-basic-styles@npm:42.0.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-typing": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/7d7a242c631d2ddec283f541007f0e99842441dc1f779a4f7f42668b4061f76f876695d4f04adae229233f9069244da65063614fb53b2565461621a164d70a3f + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-block-quote@npm:42.0.2, @ckeditor/ckeditor5-block-quote@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-block-quote@npm:42.0.2" dependencies: + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-enter": "npm:42.0.2" + "@ckeditor/ckeditor5-typing": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/fc314aa4ddc49724cf61f75878c13312709d59c2366efcbeb5c1f230d4110b00935babdf1d4ba1f5a977b86eac361002479535da8d3a885633d2c0ef2475a75c + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-ckbox@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-ckbox@npm:42.0.2" + dependencies: + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-upload": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" blurhash: "npm:2.0.5" - ckeditor5: "npm:41.4.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/38fb99468f83453afb63d2e3623ac3daa6c89f3f7907bdc989702e34074698e424f5ebea1b01acbb9a01406afe02441ca044789574ec1ecd0b6e1480fbafe2dd + checksum: 10/a32899beb717c8ac2fb683968715d62b80a7ed13dc3d9bc5db7e68faa6d179b570430d821a0349b5bb9c9949b35d1d3615f2a14ee6af8f9a92b42a94c4704101 languageName: node linkType: hard -"@ckeditor/ckeditor5-ckfinder@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-ckfinder@npm:41.4.2" +"@ckeditor/ckeditor5-ckfinder@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-ckfinder@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/5145a116cfb2b24d10b94a418989f2d4f30e0b34c07415a2741c41a41f6b17bb07107033ad6972b8bb2ca03305b75add2b06a4df07d1c3f757e03ce22b5e0616 + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/8fd14c72c6b6db6d9097f6af62a30b08310293d947f18720ac20d6a4b0590fbc0521a5369b4941b5b4652976eda7d00a9cec49606c8a740fde887ab2e3262696 languageName: node linkType: hard -"@ckeditor/ckeditor5-clipboard@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-clipboard@npm:41.4.2" +"@ckeditor/ckeditor5-clipboard@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-clipboard@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-core": "npm:41.4.2" - "@ckeditor/ckeditor5-engine": "npm:41.4.2" - "@ckeditor/ckeditor5-ui": "npm:41.4.2" - "@ckeditor/ckeditor5-utils": "npm:41.4.2" - "@ckeditor/ckeditor5-widget": "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + "@ckeditor/ckeditor5-widget": "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/a0df8d4cdbc3736bf9ffe667609a9a75b4028c5aefaaa4c1d6ac80c15da4f122a7bf05ca2588b952de32baad492be40fe8729efc8f51af8bd92293cb81f75dbe + checksum: 10/ae19ab5f027d272271cf53b9972504db2aedd2e0d420d6881fcd04765125720aa96f70f146b7f85ac23daf4d7ad9806d05d41c658ddd60815863b897312f8121 languageName: node linkType: hard -"@ckeditor/ckeditor5-cloud-services@npm:41.4.2, @ckeditor/ckeditor5-cloud-services@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-cloud-services@npm:41.4.2" +"@ckeditor/ckeditor5-cloud-services@npm:42.0.2, @ckeditor/ckeditor5-cloud-services@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-cloud-services@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/fbad1b720be93f553662c88025ea56ada5c3f995e8bad1d08bf69f33fcd76defedab54c7a7c80d885389a230abf4c4811882de376f2871a706d8d372d6efcb95 + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/d0537dab5218f0f2c71dd3e568ba66fcbc26b7060475992441d77728d490e13250354804d86fe2d684b306a4911ecb58cc1a5cf12996b8faf2df027b82503b56 languageName: node linkType: hard -"@ckeditor/ckeditor5-code-block@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-code-block@npm:41.4.2" +"@ckeditor/ckeditor5-code-block@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-code-block@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-enter": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/1b47e8db003a4a8ac74a34deaa8a805d74d1eceb2b24fa9002ab4a84492f2ad8f3af0e53777db683699aa6a08ecc8d557ab4d78a978154505b8ec10615f9d969 + checksum: 10/216ad69267585b4d2f8aebbe2e84fac7e51259194dc713f67dd340f36068891a37591980660c2233ed14212da5203d98ed0d65a2dd861ab02384322241058b55 languageName: node linkType: hard -"@ckeditor/ckeditor5-core@npm:41.4.2, @ckeditor/ckeditor5-core@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-core@npm:41.4.2" +"@ckeditor/ckeditor5-core@npm:42.0.2, @ckeditor/ckeditor5-core@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-core@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-engine": "npm:41.4.2" - "@ckeditor/ckeditor5-utils": "npm:41.4.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + "@ckeditor/ckeditor5-watchdog": "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/c109a7e35692bacb9f6564185deae9c49c2ce7dca9361d2a186bb4044d10acf6ce08c56ac6e44c089dc821502060828aa94aa7abf3c164043c44cc68a6530c55 + checksum: 10/3e167b238e7c6e5a2fb3405cbc99448ec252bc64a7ad908776a21bf3833f2a2b10602e32abb7a2bfc11db7855e62eaba01409132807b67d13da04ecf0c84dca7 languageName: node linkType: hard -"@ckeditor/ckeditor5-dev-translations@npm:^42.0.0, @ckeditor/ckeditor5-dev-translations@npm:^42.1.0": - version: 42.1.0 - resolution: "@ckeditor/ckeditor5-dev-translations@npm:42.1.0" +"@ckeditor/ckeditor5-dev-translations@npm:^43.0.0": + version: 43.0.0 + resolution: "@ckeditor/ckeditor5-dev-translations@npm:43.0.0" dependencies: "@babel/parser": "npm:^7.18.9" "@babel/traverse": "npm:^7.18.9" @@ -1767,15 +1631,15 @@ __metadata: pofile: "npm:^1.0.9" rimraf: "npm:^3.0.2" webpack-sources: "npm:^2.0.1" - checksum: 10/fba994e1dcd258e0211024b61645c01f2351443967a1220b8067286e31596e96dbaff12e96c4509cfc35650aa594a0a41c670b9efdedd4f0c92eebd390fabb08 + checksum: 10/2045b811fc4917398750979f96c7f9e3d1668e412b882a181baa285dd93fc94effc0d3fdb2cc5b55c49f076c3990e3ef8c9eabece72b29bf575153243d7b5858 languageName: node linkType: hard -"@ckeditor/ckeditor5-dev-utils@npm:^42.0.0": - version: 42.1.0 - resolution: "@ckeditor/ckeditor5-dev-utils@npm:42.1.0" +"@ckeditor/ckeditor5-dev-utils@npm:^43.0.0": + version: 43.0.0 + resolution: "@ckeditor/ckeditor5-dev-utils@npm:43.0.0" dependencies: - "@ckeditor/ckeditor5-dev-translations": "npm:^42.1.0" + "@ckeditor/ckeditor5-dev-translations": "npm:^43.0.0" chalk: "npm:^3.0.0" cli-cursor: "npm:^3.1.0" cli-spinners: "npm:^2.6.1" @@ -1783,10 +1647,11 @@ __metadata: cssnano: "npm:^6.0.3" del: "npm:^5.0.0" esbuild-loader: "npm:~3.0.1" - fs-extra: "npm:^9.1.0" + fs-extra: "npm:^11.2.0" is-interactive: "npm:^1.0.0" javascript-stringify: "npm:^1.6.0" mini-css-extract-plugin: "npm:^2.4.2" + mocha: "npm:^7.1.2" postcss: "npm:^8.4.12" postcss-import: "npm:^14.1.0" postcss-loader: "npm:^4.3.0" @@ -1797,475 +1662,615 @@ __metadata: style-loader: "npm:^2.0.0" terser-webpack-plugin: "npm:^4.2.3" through2: "npm:^3.0.1" - checksum: 10/bba0027aee3b0fee7a1f585c6735317c31a1a1f495959c01d0e7b88dd53d25c0a1a44a95bb47111f478e1e5145ed80b022fa494b7d92f436299cbc9a2433a7fa + checksum: 10/d9fb6169eba1b859d5d31c84a98d2494fe337126c1412c7b5b4a5290ba429f8d3d80afbbcff028da0876a0e00080cbadcff6814104eb331fc094b565a1a1fbbd languageName: node linkType: hard -"@ckeditor/ckeditor5-easy-image@npm:41.4.2, @ckeditor/ckeditor5-easy-image@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-easy-image@npm:41.4.2" +"@ckeditor/ckeditor5-easy-image@npm:42.0.2, @ckeditor/ckeditor5-easy-image@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-easy-image@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/fe61c444daaaebc1112a31ea6d19fb1e91e6b00b04bff5aab92daf964328f029a84fcddf3e108d50aa8f8ecc988043dfd3cc4429f30e3c707896efa1aa6e06c0 + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-upload": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/980653abd7a4d95e71111a5abc15e81bcfd4d5cd736fb525206d2ac6d105ed367ebb6bb9d94594326d3285de7ba43d48aee7253c55d71370f00617f44fba7b14 languageName: node linkType: hard -"@ckeditor/ckeditor5-editor-balloon@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-editor-balloon@npm:41.4.2" +"@ckeditor/ckeditor5-editor-balloon@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-editor-balloon@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/4ee6e6dc1e13ecc2c241d8a39f91d53c6c1b5f7bc0a5f74540c04107ed035ef5b07e03f55340772569f22f939dbe6c53021b7e34009eebd4a1ff7bf4d7dfda92 + checksum: 10/e3ca63ddd150c6aff71e4a97dbc4beaa6d42876606e5d16f1e79e380604014d4eed1d6bff1fc2110dc90279345c8da6d4d1c7b3e88cd626fc1c3303cdeb9e3e4 languageName: node linkType: hard -"@ckeditor/ckeditor5-editor-classic@npm:41.4.2, @ckeditor/ckeditor5-editor-classic@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-editor-classic@npm:41.4.2" +"@ckeditor/ckeditor5-editor-classic@npm:42.0.2, @ckeditor/ckeditor5-editor-classic@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-editor-classic@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/4442f1eff26a079ae140744451c4aa472498620c1af18ea802f1d160075f95c0b44fd13547899d3ce5ed77077f4d9d7b47b20ef3cde20fabd7f4b20790200856 + checksum: 10/d782427b698870df84ab87dfa73370078395b8b1d66e655a1225956bbeccdcf6c86d3fb40f6cf763cd449632057f83a9287913ef9a07877fc4e0d6b339ea1a98 languageName: node linkType: hard -"@ckeditor/ckeditor5-editor-decoupled@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-editor-decoupled@npm:41.4.2" +"@ckeditor/ckeditor5-editor-decoupled@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-editor-decoupled@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/42c9e92fe954480397f4f6059a9dca8d655a04d031d8ec0da37b1075616af4ba189c1c37772e4e8f1daadb8da30645386c473b0a242cce41fd8ea765ad4f514d + checksum: 10/508d695959f3f35f34124529e3a90cd86c4ce2c329ddb4faac2cc6a3906465e7cc116bbf676c12efaffcf7f76692cbce3f7b8f6407f805747dae030617675488 languageName: node linkType: hard -"@ckeditor/ckeditor5-editor-inline@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-editor-inline@npm:41.4.2" +"@ckeditor/ckeditor5-editor-inline@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-editor-inline@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/47135e61088462265e0edbcb3e0529809cd93d33f6de0bf142bb6546298a02df5387ae63910ca9ec3598b01fcfc484142bfc0de3ed6434bfd5299a3f8f9b7d61 + checksum: 10/4ec3d84f962678b4c2c66cf68b56e9831b1834995f13e4a4a26be062622f1c966f3f66db49f5a29bb5515895076ffcba1f8136218ccd28b266fd8325f41bd766 languageName: node linkType: hard -"@ckeditor/ckeditor5-editor-multi-root@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-editor-multi-root@npm:41.4.2" +"@ckeditor/ckeditor5-editor-multi-root@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-editor-multi-root@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/5099dbba8e7916e0d18ba436dd8f4b15c8fb0dd09fdd5cf4ae2e0934ddd980c9451ca466e23c55b9f282b4433eab9c845019e9837d50d340ad96da0780306ca0 + checksum: 10/10cf3472636d3fbaf51bb2db5a5177b6221852aa489c83c21cbb874da651f13eecbb08b88fd9c29eba6970eea69d6b3fe209372b8536d0c6ff68ae901a3ab494 languageName: node linkType: hard -"@ckeditor/ckeditor5-engine@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-engine@npm:41.4.2" +"@ckeditor/ckeditor5-engine@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-engine@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-utils": "npm:41.4.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/c2541f87c3847aa0d5689b08658b61a4043854b1c16d9fa65500f022080f8bfe8227e7d0e0c05f76240f46f93539d1a4192250135824bd45459b0972d4806123 + checksum: 10/8aead14516c80d973c12bb4aad47d5caff66c834eb0a4a8488cdfd998655f28614cb7bdd94162682fcfe25ef92754789f4dae9f213dcfca98fa91acfcd205e93 languageName: node linkType: hard -"@ckeditor/ckeditor5-enter@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-enter@npm:41.4.2" +"@ckeditor/ckeditor5-enter@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-enter@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-core": "npm:41.4.2" - "@ckeditor/ckeditor5-engine": "npm:41.4.2" - "@ckeditor/ckeditor5-utils": "npm:41.4.2" - checksum: 10/138a2e49d7cb194a40360a5cfe1c57baede731b4eb91b37bbcefd5f1044cdc7ffd2bae60e457dfc1254ea7a1cd581694fee2fc8a409e585ff039fd0d21d983a3 + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + checksum: 10/24d75df10e4c1775c74b829ca6326288318206847d6a50abf4cd733d0ed39570bd45688c54dfdf42c5a852e60bf129696906ed86955e92b857be6aa3c58296bc languageName: node linkType: hard -"@ckeditor/ckeditor5-essentials@npm:41.4.2, @ckeditor/ckeditor5-essentials@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-essentials@npm:41.4.2" +"@ckeditor/ckeditor5-essentials@npm:42.0.2, @ckeditor/ckeditor5-essentials@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-essentials@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/f2a95ce7fa9adab88a9316754d9eed877608780972b5d060b70157330643667b83ded0c118e0b4e4d765b6e717ae6ede72c5e5759c463934f1c1ab1f2485c656 + "@ckeditor/ckeditor5-clipboard": "npm:42.0.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-enter": "npm:42.0.2" + "@ckeditor/ckeditor5-select-all": "npm:42.0.2" + "@ckeditor/ckeditor5-typing": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-undo": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/18ebfe652bef79e9bbbccc79031682195ea6c7d0770c3bf89d150257998bc3318c3846f94f49b6e6efba3f8a169ed2c65b48895f8ef9a4da3ee9b791688f4580 languageName: node linkType: hard -"@ckeditor/ckeditor5-find-and-replace@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-find-and-replace@npm:41.4.2" +"@ckeditor/ckeditor5-find-and-replace@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-find-and-replace@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-ui": "npm:41.4.2" - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/35b041919ce07d5fe5badcf605ff32a3f68df031935bc3a34e6323d6520c7e6378c76401a3363996084812803abe7d42dbc92b90519dda1a49cb9e7f60d1c5b5 + checksum: 10/5264f47b55d051dc8c6aab673d7dcaab1b2484effab00a912c14776fedc38f2ed986d5674f322d81cbbb5e517990c60effbaf8fe7da9e13934640319e39c4f73 languageName: node linkType: hard -"@ckeditor/ckeditor5-font@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-font@npm:41.4.2" +"@ckeditor/ckeditor5-font@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-font@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/93f9244d61d61582d7b5f591a9eb93932cfbe9ae268721f6d14d0b78deff595736a8b7a5e7062cf97de421db09e675190662ee2d6d0393d301c8aa53b953600f + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/3d6b002d09eba52c0503a85c7ca1a6290161f5d30d7f7d8a65896b2ae11c39a89a29b4829543e23cf582811829c95e7ce30769216b17498aec429fba905296a8 languageName: node linkType: hard -"@ckeditor/ckeditor5-heading@npm:41.4.2, @ckeditor/ckeditor5-heading@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-heading@npm:41.4.2" +"@ckeditor/ckeditor5-heading@npm:42.0.2, @ckeditor/ckeditor5-heading@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-heading@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/3123916bef2098f67913f20c46b5ef26c9fa62e4cc92e81985731f090aa97d62700aae9be4eaf24c643454b99155aed9efbce255f63e92cfee04423814095c3b + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-paragraph": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/d37b72808409778b8a497f63bb140b9100d0cd17589910d42f626d8a7f077171424939f92539d55ba726f0f7ce7d8747e9e7465e977b02cb4164195d43941cdc languageName: node linkType: hard -"@ckeditor/ckeditor5-highlight@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-highlight@npm:41.4.2" +"@ckeditor/ckeditor5-highlight@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-highlight@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/c6c983c458dd0d3472087be0f3ebba75433a62e327c30cfd11f9d041a349cace799d3b54cef4dbb8c8719664578501de329682db7db88802fa56fa237942241f + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/895641e340a44fde17e177feea9273bbc2a3674561e1406ea32793cfa8052fdc342270e4e24f954c716af3fbad79f2b75f6087b90c971bbaf77e25f85520a607 languageName: node linkType: hard -"@ckeditor/ckeditor5-horizontal-line@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-horizontal-line@npm:41.4.2" +"@ckeditor/ckeditor5-horizontal-line@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-horizontal-line@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/2e02364ec2356d8508463c40454e7e76022ec0fe9ec40f3e8ae9f76f12accf352b99333320b10e697162bfa781d19bf86cf1e46da4c916e469f5e02c89132429 + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-widget": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/3b3c525a4742297bfee5a6208feeef00ee96fa914e60950c48d7b52ee4a62b602029a932cd4fef0886ad1f78db855861b2d88cdca8f767147116f8e3aca5e8e6 languageName: node linkType: hard -"@ckeditor/ckeditor5-html-embed@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-html-embed@npm:41.4.2" +"@ckeditor/ckeditor5-html-embed@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-html-embed@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/45d7a33397f5124a5317763117981a7a538edf3bf260bac6cdeabe6beecaea0c215fa707e9c389d2f988e099160fd08ac51338ef62dd1dcf35459d10fdd23a63 + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + "@ckeditor/ckeditor5-widget": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/aefba99cbddb64fea9d63fae45f972a11acdad3bf3699ba9454eefd4015921905aa38fefa5c4a6bc2376a5b1c2aec8745180d9e5f59c11cd3c1ebf0df71beeb9 languageName: node linkType: hard -"@ckeditor/ckeditor5-html-support@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-html-support@npm:41.4.2" +"@ckeditor/ckeditor5-html-support@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-html-support@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-enter": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + "@ckeditor/ckeditor5-widget": "npm:42.0.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/eb663b7f60d03f5d2af0e898f7e6a21cb000b1fd52fbb81d2e37b4b799bc4b87a5bb738a71005c3f11a04452fa191bcbf7ec78f6c9a8d6f41b860f8625d8b3de + checksum: 10/05c5eedffe10c98a9860dd350e34379c6f0c47cd4bd273a26a29912c8dc41b9bb3fd6240481772bddbb74e0ce25cc1b1ddf36e9ee39195ef982c35eb98ee81db languageName: node linkType: hard -"@ckeditor/ckeditor5-image@npm:41.4.2, @ckeditor/ckeditor5-image@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-image@npm:41.4.2" +"@ckeditor/ckeditor5-image@npm:42.0.2, @ckeditor/ckeditor5-image@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-image@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-ui": "npm:41.4.2" - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-clipboard": "npm:42.0.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-typing": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-undo": "npm:42.0.2" + "@ckeditor/ckeditor5-upload": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + "@ckeditor/ckeditor5-widget": "npm:42.0.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/35e0b9849016f074e8074e090a278ece0e546f063a46c6b86ec600574cdd1eec8a7956e7cce0e57d1ba225de08953d305f0ae4a7d50a762e76868d9c10a549e2 + checksum: 10/b6f8cf6f6e105278b794b47b97e53086cd481f42cdc51a75e581a0fe00b76a1f6055a7e3472a6fcdb7557d0dc5edd8e975fe0865f04ae80b44daba0d1f13a9b9 languageName: node linkType: hard -"@ckeditor/ckeditor5-indent@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-indent@npm:41.4.2" +"@ckeditor/ckeditor5-indent@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-indent@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/29ff8e8b13fbccb1660f985240d33bfb593120bd0f29eb3c05577af54abf79afdb15db5a710372a387e8ebacd566e0b5351f6db82179482f623962d37a20ceee + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/0cf566e479ff67b9542d32f6685fbc8aa3c071890f2503fd5e62ed2e062b0fe927dc3ec2f1be35cd711bb4c0bc1141173bb137b4b464e6e79a7069ab823ce165 + languageName: node + linkType: hard + +"@ckeditor/ckeditor5-integrations-common@npm:^2.1.0": + version: 2.1.0 + resolution: "@ckeditor/ckeditor5-integrations-common@npm:2.1.0" + peerDependencies: + ckeditor5: ">=42.0.0 || ^0.0.0-nightly" + checksum: 10/486597e70572c49a95ac0cd9abbf01310f04bade95d47f09885c0caa2161c3c48d1e854a1c9ed70e84468d574702c929cbfd91cec8795f7ec33c03565ba95492 languageName: node linkType: hard -"@ckeditor/ckeditor5-language@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-language@npm:41.4.2" +"@ckeditor/ckeditor5-language@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-language@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/eb3e9940f8bf2efd40cc25de1c1ee83a93a77f3526b53b0266a08ca6e5cdb57a50bfbc4c681431f2d6f3df4b22e05287dd6bf3dc031e1e2a2a991ec788117a15 + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/209fbecdeb9683816aff958be208201ce39e1949a7b869448efff0406a440b3df5f06cb05ebf361cf1d4771a814cb4888bba9a335efccf0c0e0469672bf217d0 languageName: node linkType: hard -"@ckeditor/ckeditor5-link@npm:41.4.2, @ckeditor/ckeditor5-link@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-link@npm:41.4.2" +"@ckeditor/ckeditor5-link@npm:42.0.2, @ckeditor/ckeditor5-link@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-link@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-ui": "npm:41.4.2" - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-clipboard": "npm:42.0.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-typing": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + "@ckeditor/ckeditor5-widget": "npm:42.0.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/56397c3a442a2d6321a70f6b2af43257fbf5705aa82f18da7475a8b6c3ba468fdb2280055dee46063ac51a91e4815fb8fe41ca5010426b272bc1b786b6464f97 + checksum: 10/4393dea1b3b0c36794cc0a92347a226b47e354b49f877d1065c0511e97598e5de9d806cc669ba1fce6ad1551cd56012550aabbee59f3bd4cb25259d373ba9bd7 languageName: node linkType: hard -"@ckeditor/ckeditor5-list@npm:41.4.2, @ckeditor/ckeditor5-list@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-list@npm:41.4.2" +"@ckeditor/ckeditor5-list@npm:42.0.2, @ckeditor/ckeditor5-list@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-list@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/e91fb61ccbf6eee65616ebb545205bd6d55080023bbd35159d2908c259a04e02c2ea45425e781d717a95135a43c294cb753bff77828244cc21d137b620839553 + "@ckeditor/ckeditor5-clipboard": "npm:42.0.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-enter": "npm:42.0.2" + "@ckeditor/ckeditor5-typing": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/33d789bc94b34a0718912ad017f3d9442e3d11b40b2017ae6039fd531ca73f5ff2ecd70761e54f0900b032b6e0207606e34d27444349eb78d7ece6fe9d29f2c7 languageName: node linkType: hard -"@ckeditor/ckeditor5-markdown-gfm@npm:41.4.2, @ckeditor/ckeditor5-markdown-gfm@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-markdown-gfm@npm:41.4.2" +"@ckeditor/ckeditor5-markdown-gfm@npm:42.0.2, @ckeditor/ckeditor5-markdown-gfm@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-markdown-gfm@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-clipboard": "npm:42.0.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + ckeditor5: "npm:42.0.2" marked: "npm:4.0.12" - turndown: "npm:6.0.0" + turndown: "npm:7.2.0" turndown-plugin-gfm: "npm:1.0.2" - checksum: 10/b14f158834ea9de387dd0e4dfacf4653a946f5284952bb1285da0eb22aaab76d2ac4b84279e405f684b3575411558eb69107a4fbbb7826971ec9c7162e884348 + checksum: 10/ecad36135d1c8d2327efb607010ac97492766ce3dd7ea2e499b8f78541a71680d6ae1f2c974473cd467491f83abfa57e6c949c11269fb0177e6986fe0a81df57 languageName: node linkType: hard -"@ckeditor/ckeditor5-media-embed@npm:41.4.2, @ckeditor/ckeditor5-media-embed@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-media-embed@npm:41.4.2" +"@ckeditor/ckeditor5-media-embed@npm:42.0.2, @ckeditor/ckeditor5-media-embed@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-media-embed@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-ui": "npm:41.4.2" - ckeditor5: "npm:41.4.2" - checksum: 10/7f8fe554510da1abc5d63986c6d9a084fa4992d93ea8714071548c42aabcf859fa75cc2d2fa31a9f46e1d1e41f623f4fd73a2ce114604502e2b3dc7b28b718ff + "@ckeditor/ckeditor5-clipboard": "npm:42.0.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-typing": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-undo": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + "@ckeditor/ckeditor5-widget": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/fb7b2d120367c67ee4b7053cb13bad3413ea75252961e420bf2c8b387ec81c41e3ef36b71a36462b73a1cd9346aa9c4143538a659db9bc8c686f294d8ff7fdeb languageName: node linkType: hard -"@ckeditor/ckeditor5-mention@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-mention@npm:41.4.2" +"@ckeditor/ckeditor5-mention@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-mention@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-typing": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/76567c1aef851fce834008402683effe00ac95628100e92126773241228a6f171ed39abff14877e2fc9cf20c89dac389695b31ee84862aa9f81054bd5ce46731 + checksum: 10/6245d9a694b3251decf7ae8886df1fbdf08f0c3a39351871a18299d5a95d3272915567e6794440d9a7bc83259b99796c9c439a003733504739e7b130ec81b50c languageName: node linkType: hard -"@ckeditor/ckeditor5-minimap@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-minimap@npm:41.4.2" +"@ckeditor/ckeditor5-minimap@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-minimap@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/99f4530f4722fb7853861a9355535b572cf97922155bde12dc5ba9d45d20c0f0f7dd6e474aaa84683ffbc0c685279c85cc79c7d664fd272f20f46d22f3120e80 + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/d01b57060aa81ff77de6d179861a59d1005c9ae8dc698f61b666423e22a356b9c83f6233161b1db41e57e5378a4c35a8bab014a8830c3dd5e3512cb0745be8a5 languageName: node linkType: hard -"@ckeditor/ckeditor5-page-break@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-page-break@npm:41.4.2" +"@ckeditor/ckeditor5-page-break@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-page-break@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/278e63096203eac6302f5c1702a3b50d212b83441f21b9c1b4af2e7b4f5e0de478532718e485d9831e56278b00e32be0b9a3f2b8898af88007f009bdde807025 + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-widget": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/4dd5ca1244233782ec54bb45fadd21e5442f6fb1d70df1298c4b4ca13f45bf0a8f108aa5beba9fd306195179c45ae4a1ac8dc2d9a465bf52758f1c8c5824745c languageName: node linkType: hard -"@ckeditor/ckeditor5-paragraph@npm:41.4.2, @ckeditor/ckeditor5-paragraph@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-paragraph@npm:41.4.2" +"@ckeditor/ckeditor5-paragraph@npm:42.0.2, @ckeditor/ckeditor5-paragraph@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-paragraph@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-core": "npm:41.4.2" - "@ckeditor/ckeditor5-ui": "npm:41.4.2" - "@ckeditor/ckeditor5-utils": "npm:41.4.2" - checksum: 10/d342b2f07e227e18cca12fe7ed32aac336c0fb716ede532c2d0a1c8c71fd483e155474fc9d757fb6733688d90fdfa9f1e66018c2e5feaa477c2ea9cd758965db + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + checksum: 10/6285a2f5c195ed773db2ccbcf3d6d1728d188c493d6f2316877e1699f45f8ce4bc5969d05d7a96d7939f1b2ea9c498f1df07aa9d988ad7078d85b2243656945d languageName: node linkType: hard -"@ckeditor/ckeditor5-paste-from-office@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-paste-from-office@npm:41.4.2" +"@ckeditor/ckeditor5-paste-from-office@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-paste-from-office@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/424e2a7da35256d9a5265a53004f23d71fa7910b655a655d3574a12392a86243c4caa4d04282e1ceb70726a01cecc39728e0dbf6d3abef146d1393c7e28745f1 + "@ckeditor/ckeditor5-clipboard": "npm:42.0.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/f958daeac0e08d5397a48ddd54641d447a9a6be810121350e0bc7d11fb2411fc701d665c903404e414ed6efc5f566b3ce71d556c8934c9f0fac29ecd352f0aef languageName: node linkType: hard -"@ckeditor/ckeditor5-react@npm:^7.0.0": - version: 7.0.0 - resolution: "@ckeditor/ckeditor5-react@npm:7.0.0" +"@ckeditor/ckeditor5-react@npm:^9.0.0": + version: 9.3.1 + resolution: "@ckeditor/ckeditor5-react@npm:9.3.1" dependencies: + "@ckeditor/ckeditor5-integrations-common": "npm:^2.1.0" prop-types: "npm:^15.7.2" peerDependencies: - "@ckeditor/ckeditor5-core": ">=41.3.1" - "@ckeditor/ckeditor5-editor-multi-root": ">=41.3.1" - "@ckeditor/ckeditor5-engine": ">=41.3.1" - "@ckeditor/ckeditor5-utils": ">=41.3.1" - "@ckeditor/ckeditor5-watchdog": ">=41.3.1" - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - checksum: 10/e6f4118567a6ee1211d3e28de86d5bff05f6a50bd579a2467f73d909cc2ac5c2b4b7a5702c48a1422a7998ecb1ba2af8f8a719072bf5bc60092bf6578a35773c + ckeditor5: ">=42.0.0 || ^0.0.0-nightly" + react: ^16.13.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10/6f10474ad96ba17c8f653cdfd5396d9919b0209f83961cf1050ae087c617c0743fba38cbe8d27c3fb6e6ab72b78486740bf31b44b70712b8edf0761d44fc24c3 languageName: node linkType: hard -"@ckeditor/ckeditor5-remove-format@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-remove-format@npm:41.4.2" +"@ckeditor/ckeditor5-remove-format@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-remove-format@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/44387df9afc6d45da9cc445d6d587a03164846884db8d9257bb0afa137dd6eb31b70dff2caccbcac83e69b44c32b21781ed8caa01f368e900f4e6c1c2cc3c1c9 + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/1eaf5a8507145144b414434b1e8a5ffb1b5d971964281d564e4c3ffa57743caf819231e4fe0edb2f407302e8291514e47b5e8e44b323b38e9ffe38c91e10fb9b languageName: node linkType: hard -"@ckeditor/ckeditor5-restricted-editing@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-restricted-editing@npm:41.4.2" +"@ckeditor/ckeditor5-restricted-editing@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-restricted-editing@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/31437106f16e3488970863e6c8790d41f19d3a972bffabc3a81cec0995edc6bfb2692a937d20e404c3463ffc5ae752f0e8db1017e7605ce2a6d214dc0d6d5f4f + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/26419e530dea7ab230e9c39fd5b7e1e1c33dc8ae55e2d95f2b73440036362914ac59709fddc22acc164789373bd776aa653d4e62aa2b58291be88fdaf5e32729 languageName: node linkType: hard -"@ckeditor/ckeditor5-select-all@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-select-all@npm:41.4.2" +"@ckeditor/ckeditor5-select-all@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-select-all@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-core": "npm:41.4.2" - "@ckeditor/ckeditor5-ui": "npm:41.4.2" - "@ckeditor/ckeditor5-utils": "npm:41.4.2" - checksum: 10/2df506f768585f02c53fcb24e144a15afd6058fd4ffddc3b1ca964c7c897ad00fefa4558296ba38ad1ba93b4f46da830f53d1b85528e25efd4b2ecc7865a886e + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + checksum: 10/bcf3b9f9b90b21d9b494b0b2be5013609559c0edf2d666721b87be99cc58a567a46d2ce6c56ba9e3c03fec6b6dcc77352b87590f573b71f917220f75fdb376da languageName: node linkType: hard -"@ckeditor/ckeditor5-show-blocks@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-show-blocks@npm:41.4.2" +"@ckeditor/ckeditor5-show-blocks@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-show-blocks@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-ui": "npm:41.4.2" - ckeditor5: "npm:41.4.2" - checksum: 10/63dbe7e06fe56eb3a3b7368fe85dc0f94a50cc3b2f8d3508250df7f9796e8e15118ae946a027f908f6f1fa16dd2b673a99bf41b3badfb24521ceb8af94115efc + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/c00f0a4ec727e777fe2e3902ec9d7cebf9dec81a79f07adf3645e83dc71c2bf50f41fb63880be6925c03c41264dbdd3cbf4cf8db2cbd2fb1a9a63b20dc48aa2c languageName: node linkType: hard -"@ckeditor/ckeditor5-source-editing@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-source-editing@npm:41.4.2" +"@ckeditor/ckeditor5-source-editing@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-source-editing@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-theme-lark": "npm:41.4.2" - ckeditor5: "npm:41.4.2" - checksum: 10/7302ae5210caf913b48f842689c9c8b99ea6706a33348650ead52685b52591a583633cb83cd4c9ebc0a206392ff6a5371dd14affb4dd524dd2aabfc3e4ded49d + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-theme-lark": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/efc13d9b708bad26120e642773b83d7bbcdd51774e7ab036848e970a26484def35a1fa0d33d95ab197f0beaa337100e290fbbf7905d06070686b140da9188b66 languageName: node linkType: hard -"@ckeditor/ckeditor5-special-characters@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-special-characters@npm:41.4.2" +"@ckeditor/ckeditor5-special-characters@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-special-characters@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" - checksum: 10/49ada5c5c28f25370d378cc96df71ca88a38aef9ec67edee841a4651106f1d54351a2743fae3b882cc398169c7608be4e7654587ea3f6312fccc2b35840bfedc + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-typing": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" + checksum: 10/42dce83ac809674f5a2fd5b9c326393ba49d234e15d3ee5b3140d0c73a05e1fe6e9f1a5fa53fb0b0a6d8ae15dc973a5d74849bb80d9548b91659f3e871bcd9d2 languageName: node linkType: hard -"@ckeditor/ckeditor5-style@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-style@npm:41.4.2" +"@ckeditor/ckeditor5-style@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-style@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-typing": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/65066951f24395cfb30aa21d72ff11afd5495addc02e5cb918b5c5c1d62ed392490de2dd775203f01ca82dfe836dcd1fc299a25d92cdfc757b9b5275a4775cbc + checksum: 10/96ad107adeb7ff59378e5e3c832a7155acafd1b85a19bce72afd5c31eb4f1aa1566ef198bc1a019b06fe43057278f98704f4cefe07ba6f32bf92c95256128801 languageName: node linkType: hard -"@ckeditor/ckeditor5-table@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-table@npm:41.4.2" +"@ckeditor/ckeditor5-table@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-table@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-ui": "npm:41.4.2" - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-clipboard": "npm:42.0.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + "@ckeditor/ckeditor5-widget": "npm:42.0.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/b5e84b7aef5b43e7641ce3f5705cc388d7a223adb214dcf7358104f20463fa010ea92f0b3abbb706bacda924f596e0bb1e08af301b5116897453d74a205fc645 + checksum: 10/9a27f28068cf81b2870346dbf11b439980f4e6ff0fb81f37139234307ae000d137c50336dcb24f4d15d6fd0a15cef8ad73776f715e6da22ed630f036de083d6c languageName: node linkType: hard -"@ckeditor/ckeditor5-theme-lark@npm:41.4.2, @ckeditor/ckeditor5-theme-lark@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-theme-lark@npm:41.4.2" +"@ckeditor/ckeditor5-theme-lark@npm:42.0.2, @ckeditor/ckeditor5-theme-lark@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-theme-lark@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-ui": "npm:41.4.2" - checksum: 10/c74a35ead602b14e9974b028f39edfa94e16dcdf0c478fcadd4bbf2243a73b9882075fe179bf956ee4d65db4d59159b72ac7395e99f11a2ebf824274cf417251 + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + checksum: 10/b31c9454065068cba1d8ee91a4b468753f2d40a3a1ffb5dbd78f9209ee1d5253aa7ec1ce1d0cd5162f1407b516ff9c0e091ec8d22e951509872e0fe60324ec51 languageName: node linkType: hard -"@ckeditor/ckeditor5-typing@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-typing@npm:41.4.2" +"@ckeditor/ckeditor5-typing@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-typing@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-core": "npm:41.4.2" - "@ckeditor/ckeditor5-engine": "npm:41.4.2" - "@ckeditor/ckeditor5-utils": "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/5b475fbd093e27c2660fa407cc22d1b4241104d3b22a423f029896e370b5c9997958b149a94d0045a141eda3bce936d6c77000516b440da956577f6409134a83 + checksum: 10/51e9b24512d3a9bf7dff8841e99737d80ebdd0034285a7ac07a1c7e49d998d6b58f65cc26e728ee28c0fcc3d1574b176023220effbe24181d8650111bfa957f5 languageName: node linkType: hard -"@ckeditor/ckeditor5-ui@npm:41.4.2, @ckeditor/ckeditor5-ui@npm:^41.0.0": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-ui@npm:41.4.2" +"@ckeditor/ckeditor5-ui@npm:42.0.2, @ckeditor/ckeditor5-ui@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-ui@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-core": "npm:41.4.2" - "@ckeditor/ckeditor5-utils": "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" color-convert: "npm:2.0.1" color-parse: "npm:1.4.2" lodash-es: "npm:4.17.21" vanilla-colorful: "npm:0.7.2" - checksum: 10/6f9bbacebc056f07696f9004c5feeb85b7b5383e08d697d2c95ecfe1953e09a3f5bc331c88ddba85f9fe2da12da816c44c18badec6d10a08211d5b3dc64436c0 + checksum: 10/6dbe9481f261a26a5c438c2075ef935c6f62e7a0a5f105eea8eb19e18242cc814669256179ea63d42f1afee49e2bac4f7ad250e8aa4cd20a48038331866865b8 languageName: node linkType: hard -"@ckeditor/ckeditor5-undo@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-undo@npm:41.4.2" +"@ckeditor/ckeditor5-undo@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-undo@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-core": "npm:41.4.2" - "@ckeditor/ckeditor5-engine": "npm:41.4.2" - "@ckeditor/ckeditor5-ui": "npm:41.4.2" - checksum: 10/fdf16678d4d6fa711867cef6408638f65f0eace856bfabadc7f608dda2629eb3bd30c0103943ac55cb2abc9d94673a408e38033818a462911d0607c9ec11aed7 + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + checksum: 10/08e0cde4c9ab8bba41f67e8e1c84d30c0eaaab5d58b97bf8ae0cba9b9710d29a41e7eed0fb5df4e02ca56caf800613e926f7e4d4315ff7556c17c14aea2ca095 languageName: node linkType: hard -"@ckeditor/ckeditor5-upload@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-upload@npm:41.4.2" +"@ckeditor/ckeditor5-upload@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-upload@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-core": "npm:41.4.2" - "@ckeditor/ckeditor5-utils": "npm:41.4.2" - checksum: 10/bc4feb0ed7378b19b6aa1952042562d65851a6d18ba642b29df5771cd354b0bd098720a2f669a21ece96dad03d0abcdb5e51bed2109f262a8c9ab99575f804b3 + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + checksum: 10/af8b8730469d7d0515840180f4e07ff0f4cdbc4403c37c31d7c5f04392d188c3c08feeb0999a119d19d783148a58373f9116d819d23b1d1e404a6121f0e6e058 languageName: node linkType: hard -"@ckeditor/ckeditor5-utils@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-utils@npm:41.4.2" +"@ckeditor/ckeditor5-utils@npm:42.0.2, @ckeditor/ckeditor5-utils@npm:^42.0.0": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-utils@npm:42.0.2" dependencies: lodash-es: "npm:4.17.21" - checksum: 10/188c5647ff8d96b31ac1debead7b047b7fb4c61e0f23bb57bb340cd43665b72ab3e95db57cb4ad946af7ac524c295521b514b5417a4c60287b4d34d5932ae190 + checksum: 10/b99628aa423f10b1dff61bd7d3565dd82c31006c4579f549dd04a4ac76ff112ff57541ba09574d86bf306014e37204de1f465f894a2d029aeebeb1212bc0107d languageName: node linkType: hard -"@ckeditor/ckeditor5-watchdog@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-watchdog@npm:41.4.2" +"@ckeditor/ckeditor5-watchdog@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-watchdog@npm:42.0.2" dependencies: lodash-es: "npm:4.17.21" - checksum: 10/c907185466fb08872f74379af4102eccd759935f948bc97ab46beb01e795f04600cccf392dc44b6ba2c2e2f33d291182a579296555f793ca64cfb897311bcaa2 + checksum: 10/17cb68c276544bf36e5b4a2c13c64dda738e0adeb6d072f539ab1e908ca2cef0dcb1054471320cff7e92d1b7a4643ae9fbdb706a8d4a21974cbae8ebc87b62f0 languageName: node linkType: hard -"@ckeditor/ckeditor5-widget@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-widget@npm:41.4.2" +"@ckeditor/ckeditor5-widget@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-widget@npm:42.0.2" dependencies: - "@ckeditor/ckeditor5-core": "npm:41.4.2" - "@ckeditor/ckeditor5-engine": "npm:41.4.2" - "@ckeditor/ckeditor5-enter": "npm:41.4.2" - "@ckeditor/ckeditor5-typing": "npm:41.4.2" - "@ckeditor/ckeditor5-ui": "npm:41.4.2" - "@ckeditor/ckeditor5-utils": "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-enter": "npm:42.0.2" + "@ckeditor/ckeditor5-typing": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/09dd50c77ccd2d4be8b8e9b415ab8d7d15c332147e049778285b0c791f07873c53b226a90dfbdc9031b10f85530277ff0e33478d304ab6c07034c4d75f585f2d + checksum: 10/9d40782d6bdde7d43603a4f81e96b3c9ecd0dbe06555ad1e6eb6541fbb6bbaf58afb79a2a741148f0435f4595c4eeaa3dda7a18162b6e781f29f0309c45bb26a languageName: node linkType: hard -"@ckeditor/ckeditor5-word-count@npm:41.4.2": - version: 41.4.2 - resolution: "@ckeditor/ckeditor5-word-count@npm:41.4.2" +"@ckeditor/ckeditor5-word-count@npm:42.0.2": + version: 42.0.2 + resolution: "@ckeditor/ckeditor5-word-count@npm:42.0.2" dependencies: - ckeditor5: "npm:41.4.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + ckeditor5: "npm:42.0.2" lodash-es: "npm:4.17.21" - checksum: 10/d86e6147b57bbaaad618134e86a7f9f167ed5e32378112b53bda02d8bf7212081f6c2a843fc88091bd432b84ab914d998a8049e16f41d46da0ee3f275f48bb5c + checksum: 10/36200b94cf112670cc0028798a3d83d23cfebd360fdad3e76adf2bc0e1883cf0d414cff51fbbef8ef62d04fd285bdbe0a81e507cbf31e20deb35d554e2cc338a languageName: node linkType: hard @@ -3527,9 +3532,9 @@ __metadata: languageName: node linkType: hard -"@mitodl/course-search-utils@npm:3.2.4": - version: 3.2.4 - resolution: "@mitodl/course-search-utils@npm:3.2.4" +"@mitodl/course-search-utils@npm:^3.2.5": + version: 3.2.5 + resolution: "@mitodl/course-search-utils@npm:3.2.5" dependencies: "@mitodl/open-api-axios": "npm:2024.9.16" "@remixicon/react": "npm:^4.2.0" @@ -3549,7 +3554,7 @@ __metadata: optional: true react-router: optional: true - checksum: 10/482ceacb80b281fcb687a700431185dc36615048429ece0391ae0a317cd7aca79544e5970b98dd4da87441178ef187575ffa3df8141745394b412de63f2500c6 + checksum: 10/539d27da630b789e474b7d0492bc1975383c393344adaf30a129f0ff058f05bc413005502cc039fccfc25de0e606bf374a230449f97c51b46f27471b932ee7c7 languageName: node linkType: hard @@ -3563,6 +3568,13 @@ __metadata: languageName: node linkType: hard +"@mixmark-io/domino@npm:^2.2.0": + version: 2.2.0 + resolution: "@mixmark-io/domino@npm:2.2.0" + checksum: 10/839624ba6baab655c4f7393e8b8561516849926651e02f40484729b9869436b1e077906810bcac0bba4762448512d3ebd2f6d9b463d8ab0d5f54d75ca5306519 + languageName: node + linkType: hard + "@mui/base@npm:5.0.0-beta.40": version: 5.0.0-beta.40 resolution: "@mui/base@npm:5.0.0-beta.40" @@ -5751,13 +5763,6 @@ __metadata: languageName: node linkType: hard -"@tootallnate/once@npm:1": - version: 1.1.2 - resolution: "@tootallnate/once@npm:1.1.2" - checksum: 10/e1fb1bbbc12089a0cb9433dc290f97bddd062deadb6178ce9bcb93bb7c1aecde5e60184bc7065aec42fe1663622a213493c48bbd4972d931aae48315f18e1be9 - languageName: node - linkType: hard - "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" @@ -6663,7 +6668,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.62.0": +"@typescript-eslint/typescript-estree@npm:5.62.0, @typescript-eslint/typescript-estree@npm:^5.59.2": version: 5.62.0 resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" dependencies: @@ -7029,7 +7034,7 @@ __metadata: languageName: node linkType: hard -"abab@npm:^2.0.3, abab@npm:^2.0.5, abab@npm:^2.0.6": +"abab@npm:^2.0.6": version: 2.0.6 resolution: "abab@npm:2.0.6" checksum: 10/ebe95d7278999e605823fc515a3b05d689bc72e7f825536e73c95ebf621636874c6de1b749b3c4bf866b96ccd4b3a2802efa313d0e45ad51a413c8c73247db20 @@ -7062,16 +7067,6 @@ __metadata: languageName: node linkType: hard -"acorn-globals@npm:^6.0.0": - version: 6.0.0 - resolution: "acorn-globals@npm:6.0.0" - dependencies: - acorn: "npm:^7.1.1" - acorn-walk: "npm:^7.1.1" - checksum: 10/72d95e5b5e585f9acd019b993ab8bbba68bb3cbc9d9b5c1ebb3c2f1fe5981f11deababfb4949f48e6262f9c57878837f5958c0cca396f81023814680ca878042 - languageName: node - linkType: hard - "acorn-globals@npm:^7.0.0": version: 7.0.1 resolution: "acorn-globals@npm:7.0.1" @@ -7100,7 +7095,7 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^7.1.1, acorn-walk@npm:^7.2.0": +"acorn-walk@npm:^7.2.0": version: 7.2.0 resolution: "acorn-walk@npm:7.2.0" checksum: 10/4d3e186f729474aed3bc3d0df44692f2010c726582655b20a23347bef650867655521c48ada444cb4fda241ee713dcb792da363ec74c6282fa884fb7144171bb @@ -7116,7 +7111,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^7.1.1, acorn@npm:^7.4.1": +"acorn@npm:^7.4.1": version: 7.4.1 resolution: "acorn@npm:7.4.1" bin: @@ -7125,7 +7120,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.0, acorn@npm:^8.1.0, acorn@npm:^8.11.0, acorn@npm:^8.11.3, acorn@npm:^8.12.1, acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": +"acorn@npm:^8.0.0, acorn@npm:^8.1.0, acorn@npm:^8.11.0, acorn@npm:^8.11.3, acorn@npm:^8.12.1, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": version: 8.12.1 resolution: "acorn@npm:8.12.1" bin: @@ -7230,6 +7225,13 @@ __metadata: languageName: node linkType: hard +"ansi-colors@npm:3.2.3": + version: 3.2.3 + resolution: "ansi-colors@npm:3.2.3" + checksum: 10/9465fcf0feca5001201013091036397537a7e196e04efca48aa1e7f4a986176778a33924d506e2b9af74321be9fb0649ab0c11be168d15aae5459feff681d665 + languageName: node + linkType: hard + "ansi-colors@npm:^4.1.1": version: 4.1.3 resolution: "ansi-colors@npm:4.1.3" @@ -7271,6 +7273,20 @@ __metadata: languageName: node linkType: hard +"ansi-regex@npm:^3.0.0": + version: 3.0.1 + resolution: "ansi-regex@npm:3.0.1" + checksum: 10/09daf180c5f59af9850c7ac1bd7fda85ba596cc8cbeb210826e90755f06c818af86d9fa1e6e8322fab2c3b9e9b03f56c537b42241139f824dd75066a1e7257cc + languageName: node + linkType: hard + +"ansi-regex@npm:^4.1.0": + version: 4.1.1 + resolution: "ansi-regex@npm:4.1.1" + checksum: 10/b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 + languageName: node + linkType: hard + "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -7285,7 +7301,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^3.2.1": +"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" dependencies: @@ -7317,7 +7333,7 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": +"anymatch@npm:^3.0.3, anymatch@npm:~3.1.1, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -7498,6 +7514,21 @@ __metadata: languageName: node linkType: hard +"array.prototype.reduce@npm:^1.0.6": + version: 1.0.7 + resolution: "array.prototype.reduce@npm:1.0.7" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-array-method-boxes-properly: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + is-string: "npm:^1.0.7" + checksum: 10/3a4fa56cf5843d821e97680861c8edfdfe6684a7f7cd1145ed611b5fa611fd62d1b149a438ae24ae884c843876a6539b67fbcacdd3276f89731eee9415dc9012 + languageName: node + linkType: hard + "array.prototype.tosorted@npm:^1.1.4": version: 1.1.4 resolution: "array.prototype.tosorted@npm:1.1.4" @@ -7602,13 +7633,6 @@ __metadata: languageName: node linkType: hard -"at-least-node@npm:^1.0.0": - version: 1.0.0 - resolution: "at-least-node@npm:1.0.0" - checksum: 10/463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e - languageName: node - linkType: hard - "available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" @@ -7952,10 +7976,10 @@ __metadata: languageName: node linkType: hard -"browser-process-hrtime@npm:^1.0.0": - version: 1.0.0 - resolution: "browser-process-hrtime@npm:1.0.0" - checksum: 10/e30f868cdb770b1201afb714ad1575dd86366b6e861900884665fb627109b3cc757c40067d3bfee1ff2a29c835257ea30725a8018a9afd02ac1c24b408b1e45f +"browser-stdout@npm:1.3.1": + version: 1.3.1 + resolution: "browser-stdout@npm:1.3.1" + checksum: 10/ac70a84e346bb7afc5045ec6f22f6a681b15a4057447d4cc1c48a25c6dedb302a49a46dd4ddfb5cdd9c96e0c905a8539be1b98ae7bc440512152967009ec7015 languageName: node linkType: hard @@ -8218,7 +8242,7 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^5.3.1": +"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" checksum: 10/e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b @@ -8450,6 +8474,25 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:3.3.0": + version: 3.3.0 + resolution: "chokidar@npm:3.3.0" + dependencies: + anymatch: "npm:~3.1.1" + braces: "npm:~3.0.2" + fsevents: "npm:~2.1.1" + glob-parent: "npm:~5.1.0" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.2.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 10/57c5c20fd1e46cf32f626f907b0a3e0dd584b2939cd8ca67cbfb255e334355f2781674d4148e2c92d045b2722fcb50178e50e57307b511f86d1e90098532d962 + languageName: node + linkType: hard + "chokidar@npm:^3.5.3": version: 3.6.0 resolution: "chokidar@npm:3.6.0" @@ -8533,74 +8576,68 @@ __metadata: languageName: node linkType: hard -"ckeditor5@npm:41.4.2": - version: 41.4.2 - resolution: "ckeditor5@npm:41.4.2" - dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder": "npm:41.4.2" - "@ckeditor/ckeditor5-alignment": "npm:41.4.2" - "@ckeditor/ckeditor5-autoformat": "npm:41.4.2" - "@ckeditor/ckeditor5-autosave": "npm:41.4.2" - "@ckeditor/ckeditor5-basic-styles": "npm:41.4.2" - "@ckeditor/ckeditor5-block-quote": "npm:41.4.2" - "@ckeditor/ckeditor5-build-balloon": "npm:41.4.2" - "@ckeditor/ckeditor5-build-balloon-block": "npm:41.4.2" - "@ckeditor/ckeditor5-build-classic": "npm:41.4.2" - "@ckeditor/ckeditor5-build-decoupled-document": "npm:41.4.2" - "@ckeditor/ckeditor5-build-inline": "npm:41.4.2" - "@ckeditor/ckeditor5-build-multi-root": "npm:41.4.2" - "@ckeditor/ckeditor5-ckbox": "npm:41.4.2" - "@ckeditor/ckeditor5-ckfinder": "npm:41.4.2" - "@ckeditor/ckeditor5-clipboard": "npm:41.4.2" - "@ckeditor/ckeditor5-cloud-services": "npm:41.4.2" - "@ckeditor/ckeditor5-code-block": "npm:41.4.2" - "@ckeditor/ckeditor5-core": "npm:41.4.2" - "@ckeditor/ckeditor5-easy-image": "npm:41.4.2" - "@ckeditor/ckeditor5-editor-balloon": "npm:41.4.2" - "@ckeditor/ckeditor5-editor-classic": "npm:41.4.2" - "@ckeditor/ckeditor5-editor-decoupled": "npm:41.4.2" - "@ckeditor/ckeditor5-editor-inline": "npm:41.4.2" - "@ckeditor/ckeditor5-editor-multi-root": "npm:41.4.2" - "@ckeditor/ckeditor5-engine": "npm:41.4.2" - "@ckeditor/ckeditor5-enter": "npm:41.4.2" - "@ckeditor/ckeditor5-essentials": "npm:41.4.2" - "@ckeditor/ckeditor5-find-and-replace": "npm:41.4.2" - "@ckeditor/ckeditor5-font": "npm:41.4.2" - "@ckeditor/ckeditor5-heading": "npm:41.4.2" - "@ckeditor/ckeditor5-highlight": "npm:41.4.2" - "@ckeditor/ckeditor5-horizontal-line": "npm:41.4.2" - "@ckeditor/ckeditor5-html-embed": "npm:41.4.2" - "@ckeditor/ckeditor5-html-support": "npm:41.4.2" - "@ckeditor/ckeditor5-image": "npm:41.4.2" - "@ckeditor/ckeditor5-indent": "npm:41.4.2" - "@ckeditor/ckeditor5-language": "npm:41.4.2" - "@ckeditor/ckeditor5-link": "npm:41.4.2" - "@ckeditor/ckeditor5-list": "npm:41.4.2" - "@ckeditor/ckeditor5-markdown-gfm": "npm:41.4.2" - "@ckeditor/ckeditor5-media-embed": "npm:41.4.2" - "@ckeditor/ckeditor5-mention": "npm:41.4.2" - "@ckeditor/ckeditor5-minimap": "npm:41.4.2" - "@ckeditor/ckeditor5-page-break": "npm:41.4.2" - "@ckeditor/ckeditor5-paragraph": "npm:41.4.2" - "@ckeditor/ckeditor5-paste-from-office": "npm:41.4.2" - "@ckeditor/ckeditor5-remove-format": "npm:41.4.2" - "@ckeditor/ckeditor5-restricted-editing": "npm:41.4.2" - "@ckeditor/ckeditor5-select-all": "npm:41.4.2" - "@ckeditor/ckeditor5-show-blocks": "npm:41.4.2" - "@ckeditor/ckeditor5-source-editing": "npm:41.4.2" - "@ckeditor/ckeditor5-special-characters": "npm:41.4.2" - "@ckeditor/ckeditor5-style": "npm:41.4.2" - "@ckeditor/ckeditor5-table": "npm:41.4.2" - "@ckeditor/ckeditor5-theme-lark": "npm:41.4.2" - "@ckeditor/ckeditor5-typing": "npm:41.4.2" - "@ckeditor/ckeditor5-ui": "npm:41.4.2" - "@ckeditor/ckeditor5-undo": "npm:41.4.2" - "@ckeditor/ckeditor5-upload": "npm:41.4.2" - "@ckeditor/ckeditor5-utils": "npm:41.4.2" - "@ckeditor/ckeditor5-watchdog": "npm:41.4.2" - "@ckeditor/ckeditor5-widget": "npm:41.4.2" - "@ckeditor/ckeditor5-word-count": "npm:41.4.2" - checksum: 10/b4b5f6d853239fa1ccc1d4af506c0e826ec2e5ed7c6d8a40bc797316ef053cbbc0580e479f7f6e0c917bb4284ac516bfc72905781c138fe0af5658a2a0fd18ca +"ckeditor5@npm:42.0.2": + version: 42.0.2 + resolution: "ckeditor5@npm:42.0.2" + dependencies: + "@ckeditor/ckeditor5-adapter-ckfinder": "npm:42.0.2" + "@ckeditor/ckeditor5-alignment": "npm:42.0.2" + "@ckeditor/ckeditor5-autoformat": "npm:42.0.2" + "@ckeditor/ckeditor5-autosave": "npm:42.0.2" + "@ckeditor/ckeditor5-basic-styles": "npm:42.0.2" + "@ckeditor/ckeditor5-block-quote": "npm:42.0.2" + "@ckeditor/ckeditor5-ckbox": "npm:42.0.2" + "@ckeditor/ckeditor5-ckfinder": "npm:42.0.2" + "@ckeditor/ckeditor5-clipboard": "npm:42.0.2" + "@ckeditor/ckeditor5-cloud-services": "npm:42.0.2" + "@ckeditor/ckeditor5-code-block": "npm:42.0.2" + "@ckeditor/ckeditor5-core": "npm:42.0.2" + "@ckeditor/ckeditor5-easy-image": "npm:42.0.2" + "@ckeditor/ckeditor5-editor-balloon": "npm:42.0.2" + "@ckeditor/ckeditor5-editor-classic": "npm:42.0.2" + "@ckeditor/ckeditor5-editor-decoupled": "npm:42.0.2" + "@ckeditor/ckeditor5-editor-inline": "npm:42.0.2" + "@ckeditor/ckeditor5-editor-multi-root": "npm:42.0.2" + "@ckeditor/ckeditor5-engine": "npm:42.0.2" + "@ckeditor/ckeditor5-enter": "npm:42.0.2" + "@ckeditor/ckeditor5-essentials": "npm:42.0.2" + "@ckeditor/ckeditor5-find-and-replace": "npm:42.0.2" + "@ckeditor/ckeditor5-font": "npm:42.0.2" + "@ckeditor/ckeditor5-heading": "npm:42.0.2" + "@ckeditor/ckeditor5-highlight": "npm:42.0.2" + "@ckeditor/ckeditor5-horizontal-line": "npm:42.0.2" + "@ckeditor/ckeditor5-html-embed": "npm:42.0.2" + "@ckeditor/ckeditor5-html-support": "npm:42.0.2" + "@ckeditor/ckeditor5-image": "npm:42.0.2" + "@ckeditor/ckeditor5-indent": "npm:42.0.2" + "@ckeditor/ckeditor5-language": "npm:42.0.2" + "@ckeditor/ckeditor5-link": "npm:42.0.2" + "@ckeditor/ckeditor5-list": "npm:42.0.2" + "@ckeditor/ckeditor5-markdown-gfm": "npm:42.0.2" + "@ckeditor/ckeditor5-media-embed": "npm:42.0.2" + "@ckeditor/ckeditor5-mention": "npm:42.0.2" + "@ckeditor/ckeditor5-minimap": "npm:42.0.2" + "@ckeditor/ckeditor5-page-break": "npm:42.0.2" + "@ckeditor/ckeditor5-paragraph": "npm:42.0.2" + "@ckeditor/ckeditor5-paste-from-office": "npm:42.0.2" + "@ckeditor/ckeditor5-remove-format": "npm:42.0.2" + "@ckeditor/ckeditor5-restricted-editing": "npm:42.0.2" + "@ckeditor/ckeditor5-select-all": "npm:42.0.2" + "@ckeditor/ckeditor5-show-blocks": "npm:42.0.2" + "@ckeditor/ckeditor5-source-editing": "npm:42.0.2" + "@ckeditor/ckeditor5-special-characters": "npm:42.0.2" + "@ckeditor/ckeditor5-style": "npm:42.0.2" + "@ckeditor/ckeditor5-table": "npm:42.0.2" + "@ckeditor/ckeditor5-theme-lark": "npm:42.0.2" + "@ckeditor/ckeditor5-typing": "npm:42.0.2" + "@ckeditor/ckeditor5-ui": "npm:42.0.2" + "@ckeditor/ckeditor5-undo": "npm:42.0.2" + "@ckeditor/ckeditor5-upload": "npm:42.0.2" + "@ckeditor/ckeditor5-utils": "npm:42.0.2" + "@ckeditor/ckeditor5-watchdog": "npm:42.0.2" + "@ckeditor/ckeditor5-widget": "npm:42.0.2" + "@ckeditor/ckeditor5-word-count": "npm:42.0.2" + checksum: 10/dc115d748d9fa5cd942a6bc76e618f8f40f826ecc55917831db92f76c1e5c33b3794d4035b81e2cb8be515946a7029579b7bdf5ed4bebadd29c78c5cb097d675 languageName: node linkType: hard @@ -8666,6 +8703,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^5.0.0": + version: 5.0.0 + resolution: "cliui@npm:5.0.0" + dependencies: + string-width: "npm:^3.1.0" + strip-ansi: "npm:^5.2.0" + wrap-ansi: "npm:^5.1.0" + checksum: 10/381264fcc3c8316b77b378ce5471ff9a1974d1f6217e0be8f4f09788482b3e6f7c0894eb21e0a86eab4ce0c68426653a407226dd51997306cb87f734776f5fdc + languageName: node + linkType: hard + "cliui@npm:^8.0.1": version: 8.0.1 resolution: "cliui@npm:8.0.1" @@ -9319,13 +9367,6 @@ __metadata: languageName: node linkType: hard -"cssom@npm:^0.4.4": - version: 0.4.4 - resolution: "cssom@npm:0.4.4" - checksum: 10/6302c5f9b33a15f5430349f91553dd370f60707b1f2bb2c21954abe307b701d6095da134679fd0891a7814bc98061e1639bd0562d8f70c2dc529918111be8d2b - languageName: node - linkType: hard - "cssom@npm:^0.5.0": version: 0.5.0 resolution: "cssom@npm:0.5.0" @@ -9363,17 +9404,6 @@ __metadata: languageName: node linkType: hard -"data-urls@npm:^2.0.0": - version: 2.0.0 - resolution: "data-urls@npm:2.0.0" - dependencies: - abab: "npm:^2.0.3" - whatwg-mimetype: "npm:^2.3.0" - whatwg-url: "npm:^8.0.0" - checksum: 10/97caf828aac25e25e04ba6869db0f99c75e6859bb5b424ada28d3e7841941ebf08ddff3c1b1bb4585986bd507a5d54c2a716853ea6cb98af877400e637393e71 - languageName: node - linkType: hard - "data-urls@npm:^3.0.2": version: 3.0.2 resolution: "data-urls@npm:3.0.2" @@ -9427,6 +9457,15 @@ __metadata: languageName: node linkType: hard +"debug@npm:3.2.6": + version: 3.2.6 + resolution: "debug@npm:3.2.6" + dependencies: + ms: "npm:^2.1.1" + checksum: 10/c495d32519ed205aeab71b4bba84701c60b2d18efe98d41f88f498f09423252155450846ee31da0e4c3ea5d7d8f5123525e463612a7d3fa0bcd5fc06e4efe5fc + languageName: node + linkType: hard + "debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6": version: 4.3.7 resolution: "debug@npm:4.3.7" @@ -9458,7 +9497,7 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:^1.1.0": +"decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" checksum: 10/ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa @@ -9479,7 +9518,7 @@ __metadata: languageName: node linkType: hard -"decimal.js@npm:^10.2.1, decimal.js@npm:^10.4.2": +"decimal.js@npm:^10.4.2": version: 10.4.3 resolution: "decimal.js@npm:10.4.3" checksum: 10/de663a7bc4d368e3877db95fcd5c87b965569b58d16cdc4258c063d231ca7118748738df17cd638f7e9dd0be8e34cec08d7234b20f1f2a756a52fc5a38b188d0 @@ -9595,7 +9634,7 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.3, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": +"define-properties@npm:^1.1.2, define-properties@npm:^1.1.3, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" dependencies: @@ -9713,6 +9752,13 @@ __metadata: languageName: node linkType: hard +"diff@npm:3.5.0": + version: 3.5.0 + resolution: "diff@npm:3.5.0" + checksum: 10/cfbc2df98d6f8eb82c0f7735c8468695f65189d31f95a708d4c97cd96a8083fdfd83d87a067a29924ae7d8ff64f578e7da78391af537815750268555fe0df9f0 + languageName: node + linkType: hard + "diff@npm:^4.0.1": version: 4.0.2 resolution: "diff@npm:4.0.2" @@ -9841,15 +9887,6 @@ __metadata: languageName: node linkType: hard -"domexception@npm:^2.0.1": - version: 2.0.1 - resolution: "domexception@npm:2.0.1" - dependencies: - webidl-conversions: "npm:^5.0.0" - checksum: 10/d638e9cb05c52999f1b2eb87c374b03311ea5b1d69c2f875bc92da73e17db60c12142b45c950228642ff7f845c536b65305483350d080df59003a653da80b691 - languageName: node - linkType: hard - "domexception@npm:^4.0.0": version: 4.0.0 resolution: "domexception@npm:4.0.0" @@ -9998,6 +10035,13 @@ __metadata: languageName: node linkType: hard +"emoji-regex@npm:^7.0.1": + version: 7.0.3 + resolution: "emoji-regex@npm:7.0.3" + checksum: 10/9159b2228b1511f2870ac5920f394c7e041715429a68459ebe531601555f11ea782a8e1718f969df2711d38c66268174407cbca57ce36485544f695c2dfdc96e + languageName: node + linkType: hard + "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -10187,6 +10231,13 @@ __metadata: languageName: node linkType: hard +"es-array-method-boxes-properly@npm:^1.0.0": + version: 1.0.0 + resolution: "es-array-method-boxes-properly@npm:1.0.0" + checksum: 10/27a8a21acf20f3f51f69dce8e643f151e380bffe569e95dc933b9ded9fcd89a765ee21b5229c93f9206c93f87395c6b75f80be8ac8c08a7ceb8771e1822ff1fb + languageName: node + linkType: hard + "es-define-property@npm:^1.0.0": version: 1.0.0 resolution: "es-define-property@npm:1.0.0" @@ -10488,7 +10539,7 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^1.0.5": +"escape-string-regexp@npm:1.0.5, escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" checksum: 10/6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 @@ -11366,6 +11417,15 @@ __metadata: languageName: node linkType: hard +"find-up@npm:3.0.0, find-up@npm:^3.0.0": + version: 3.0.0 + resolution: "find-up@npm:3.0.0" + dependencies: + locate-path: "npm:^3.0.0" + checksum: 10/38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 + languageName: node + linkType: hard + "find-up@npm:^4.0.0, find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" @@ -11439,6 +11499,17 @@ __metadata: languageName: node linkType: hard +"flat@npm:^4.1.0": + version: 4.1.1 + resolution: "flat@npm:4.1.1" + dependencies: + is-buffer: "npm:~2.0.3" + bin: + flat: cli.js + checksum: 10/95abffb1fe56c33bc7fd4098e7a9eceb5aaba0db0c1f7f240d0e220037a630ead91de83101ac9714b95756cf178c0164379fa89961c66091abb4febaf9dbd2ff + languageName: node + linkType: hard + "flatted@npm:^3.2.9": version: 3.3.1 resolution: "flatted@npm:3.3.1" @@ -11514,17 +11585,6 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^3.0.0": - version: 3.0.2 - resolution: "form-data@npm:3.0.2" - dependencies: - asynckit: "npm:^0.4.0" - combined-stream: "npm:^1.0.8" - mime-types: "npm:^2.1.12" - checksum: 10/b8d71d7149de5881c6c8ac75c03ac2e809b1b729399320cc41f59a63043fa34b95dfef5259212d6d902abb4916af48a7ca60ad5c035806ba8e3c7843dbaf3057 - languageName: node - linkType: hard - "form-data@npm:^4.0.0": version: 4.0.1 resolution: "form-data@npm:4.0.1" @@ -11583,6 +11643,7 @@ __metadata: "@types/jest-when": "npm:^3.5.2" "@types/react-infinite-scroller": "npm:^1.2.3" "@typescript-eslint/eslint-plugin": "npm:^7.0.0" + "@typescript-eslint/typescript-estree": "npm:^5.59.2" cross-fetch: "npm:^4.0.0" eslint: "npm:8.57.0" eslint-config-mitodl: "npm:^2.1.0" @@ -11623,7 +11684,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^11.1.0": +"fs-extra@npm:^11.1.0, fs-extra@npm:^11.2.0": version: 11.2.0 resolution: "fs-extra@npm:11.2.0" dependencies: @@ -11634,18 +11695,6 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^9.1.0": - version: 9.1.0 - resolution: "fs-extra@npm:9.1.0" - dependencies: - at-least-node: "npm:^1.0.0" - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10/08600da1b49552ed23dfac598c8fc909c66776dd130fea54fbcad22e330f7fcc13488bb995f6bc9ce5651aa35b65702faf616fe76370ee56f1aade55da982dca - languageName: node - linkType: hard - "fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -11688,6 +11737,16 @@ __metadata: languageName: node linkType: hard +"fsevents@npm:~2.1.1": + version: 2.1.3 + resolution: "fsevents@npm:2.1.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10/b604991f31d9ec772e278831bbe069eed8b6824b09b707eeb5c792ceb79fafa9db377981acf7555deab8f5818a75e5487d37b366f55e31d6ea62ea0e06fc777b + conditions: os=darwin + languageName: node + linkType: hard + "fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" @@ -11697,7 +11756,16 @@ __metadata: languageName: node linkType: hard -"function-bind@npm:^1.1.2": +"fsevents@patch:fsevents@npm%3A~2.1.1#optional!builtin": + version: 2.1.3 + resolution: "fsevents@patch:fsevents@npm%3A2.1.3#optional!builtin::version=2.1.3&hash=31d12a" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.1, function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" checksum: 10/185e20d20f10c8d661d59aac0f3b63b31132d492e1b11fcc2a93cb2c47257ebaee7407c38513efd2b35cafdf972d9beb2ea4593c1e0f3bf8f2744836928d7454 @@ -11737,7 +11805,7 @@ __metadata: languageName: node linkType: hard -"get-caller-file@npm:^2.0.5": +"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" checksum: 10/b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 @@ -11805,7 +11873,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.0, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -11845,6 +11913,20 @@ __metadata: languageName: node linkType: hard +"glob@npm:7.1.3": + version: 7.1.3 + resolution: "glob@npm:7.1.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.0.4" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10/2364d488ec74c4603eef6aed7d0b139341342aafe94e0b0de788248a19320633b1ccbc2639472aac90004560b0227353f27b5abedc9a0b2c5536950b227239c8 + languageName: node + linkType: hard + "glob@npm:^10.0.0, glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.3, glob@npm:^10.4.1": version: 10.4.5 resolution: "glob@npm:10.4.5" @@ -12044,6 +12126,13 @@ __metadata: languageName: node linkType: hard +"growl@npm:1.10.5": + version: 1.10.5 + resolution: "growl@npm:1.10.5" + checksum: 10/1391a9add951964de566adc0aee8b0e2b2321e768c1fdccb7a8e156d6a6cd7ea72782883ba8c2c307baf524e3059519423b72e585eba5e7a5f6e83a1e2359b0d + languageName: node + linkType: hard + "handlebars@npm:^4.4.3": version: 4.7.8 resolution: "handlebars@npm:4.7.8" @@ -12106,7 +12195,7 @@ __metadata: languageName: node linkType: hard -"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": +"has-symbols@npm:^1.0.0, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" checksum: 10/464f97a8202a7690dadd026e6d73b1ceeddd60fe6acfd06151106f050303eaa75855aaa94969df8015c11ff7c505f196114d22f7386b4a471038da5874cf5e9b @@ -12189,7 +12278,7 @@ __metadata: languageName: node linkType: hard -"he@npm:^1.2.0": +"he@npm:1.2.0, he@npm:^1.2.0": version: 1.2.0 resolution: "he@npm:1.2.0" bin: @@ -12255,15 +12344,6 @@ __metadata: languageName: node linkType: hard -"html-encoding-sniffer@npm:^2.0.1": - version: 2.0.1 - resolution: "html-encoding-sniffer@npm:2.0.1" - dependencies: - whatwg-encoding: "npm:^1.0.5" - checksum: 10/70365109cad69ee60376715fe0a56dd9ebb081327bf155cda93b2c276976c79cbedee2b988de6b0aefd0671a5d70597a35796e6e7d91feeb2c0aba46df059630 - languageName: node - linkType: hard - "html-encoding-sniffer@npm:^3.0.0": version: 3.0.0 resolution: "html-encoding-sniffer@npm:3.0.0" @@ -12364,17 +12444,6 @@ __metadata: languageName: node linkType: hard -"http-proxy-agent@npm:^4.0.1": - version: 4.0.1 - resolution: "http-proxy-agent@npm:4.0.1" - dependencies: - "@tootallnate/once": "npm:1" - agent-base: "npm:6" - debug: "npm:4" - checksum: 10/2e17f5519f2f2740b236d1d14911ea4be170c67419dc15b05ea9a860a22c5d9c6ff4da270972117067cc2cefeba9df5f7cd5e7818fdc6ae52b6acf2a533e5fdd - languageName: node - linkType: hard - "http-proxy-agent@npm:^5.0.0": version: 5.0.0 resolution: "http-proxy-agent@npm:5.0.0" @@ -12817,7 +12886,7 @@ __metadata: languageName: node linkType: hard -"is-buffer@npm:^2.0.0": +"is-buffer@npm:^2.0.0, is-buffer@npm:~2.0.3": version: 2.0.5 resolution: "is-buffer@npm:2.0.5" checksum: 10/3261a8b858edcc6c9566ba1694bf829e126faa88911d1c0a747ea658c5d81b14b6955e3a702d59dabadd58fdd440c01f321aa71d6547105fd21d03f94d0597e7 @@ -12913,6 +12982,13 @@ __metadata: languageName: node linkType: hard +"is-fullwidth-code-point@npm:^2.0.0": + version: 2.0.0 + resolution: "is-fullwidth-code-point@npm:2.0.0" + checksum: 10/eef9c6e15f68085fec19ff6a978a6f1b8f48018fd1265035552078ee945573594933b09bbd6f562553e2a241561439f1ef5339276eba68d272001343084cfab8 + languageName: node + linkType: hard + "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" @@ -13963,6 +14039,18 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:3.13.1": + version: 3.13.1 + resolution: "js-yaml@npm:3.13.1" + dependencies: + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" + bin: + js-yaml: bin/js-yaml.js + checksum: 10/cec89175b065743875fce53e63adc8b89aded77e18d00e54ff80c57ab730f22ccfddaf2fe3e6adab1d6dff59a3d55dd9ae6fc711d46335b7e94c32d3583a5627 + languageName: node + linkType: hard + "js-yaml@npm:^3.13.1": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" @@ -14000,46 +14088,6 @@ __metadata: languageName: node linkType: hard -"jsdom@npm:^16.2.0": - version: 16.7.0 - resolution: "jsdom@npm:16.7.0" - dependencies: - abab: "npm:^2.0.5" - acorn: "npm:^8.2.4" - acorn-globals: "npm:^6.0.0" - cssom: "npm:^0.4.4" - cssstyle: "npm:^2.3.0" - data-urls: "npm:^2.0.0" - decimal.js: "npm:^10.2.1" - domexception: "npm:^2.0.1" - escodegen: "npm:^2.0.0" - form-data: "npm:^3.0.0" - html-encoding-sniffer: "npm:^2.0.1" - http-proxy-agent: "npm:^4.0.1" - https-proxy-agent: "npm:^5.0.0" - is-potential-custom-element-name: "npm:^1.0.1" - nwsapi: "npm:^2.2.0" - parse5: "npm:6.0.1" - saxes: "npm:^5.0.1" - symbol-tree: "npm:^3.2.4" - tough-cookie: "npm:^4.0.0" - w3c-hr-time: "npm:^1.0.2" - w3c-xmlserializer: "npm:^2.0.0" - webidl-conversions: "npm:^6.1.0" - whatwg-encoding: "npm:^1.0.5" - whatwg-mimetype: "npm:^2.3.0" - whatwg-url: "npm:^8.5.0" - ws: "npm:^7.4.6" - xml-name-validator: "npm:^3.0.0" - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - checksum: 10/c530c04b0e3718769a66e19b0b5c762126658bce384d6743b807a28a9d89beba4ad932e474f570323efe6ce832b3d9a8f94816fd6c4d386416d5ea0b64e07ebc - languageName: node - linkType: hard - "jsdom@npm:^20.0.0": version: 20.0.3 resolution: "jsdom@npm:20.0.3" @@ -14349,6 +14397,16 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^3.0.0": + version: 3.0.0 + resolution: "locate-path@npm:3.0.0" + dependencies: + p-locate: "npm:^3.0.0" + path-exists: "npm:^3.0.0" + checksum: 10/53db3996672f21f8b0bf2a2c645ae2c13ffdae1eeecfcd399a583bce8516c0b88dcb4222ca6efbbbeb6949df7e46860895be2c02e8d3219abd373ace3bfb4e11 + languageName: node + linkType: hard + "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -14425,13 +14483,22 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.7.0": +"lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10/c08619c038846ea6ac754abd6dd29d2568aa705feb69339e836dfa8d8b09abbb2f859371e86863eda41848221f9af43714491467b5b0299122431e202bb0c532 languageName: node linkType: hard +"log-symbols@npm:3.0.0": + version: 3.0.0 + resolution: "log-symbols@npm:3.0.0" + dependencies: + chalk: "npm:^2.4.2" + checksum: 10/f2322e1452d819050b11aad247660e1494f8b2219d40a964af91d5f9af1a90636f1b3d93f2952090e42af07cc5550aecabf6c1d8ec1181207e95cb66ba112361 + languageName: node + linkType: hard + "log-symbols@npm:^4.1.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" @@ -14571,7 +14638,7 @@ __metadata: "@ebay/nice-modal-react": "npm:^1.2.13" "@emotion/cache": "npm:^11.13.1" "@faker-js/faker": "npm:^8.4.1" - "@mitodl/course-search-utils": "npm:3.2.4" + "@mitodl/course-search-utils": "npm:^3.2.5" "@remixicon/react": "npm:^4.2.0" "@sentry/nextjs": "npm:^8" "@tanstack/react-query": "npm:^4.36.1" @@ -15807,6 +15874,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:3.0.4": + version: 3.0.4 + resolution: "minimatch@npm:3.0.4" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10/3b3f17f76582417dd139646505f1d1bb5f148ea5191eb98fe73cd41224a678dadb94cc674c7d06b36de4ab5c303f039cfd7cd2d089348d6f70d04db169cf3770 + languageName: node + linkType: hard + "minimatch@npm:9.0.1": version: 9.0.1 resolution: "minimatch@npm:9.0.1" @@ -15978,6 +16054,17 @@ __metadata: languageName: unknown linkType: soft +"mkdirp@npm:0.5.5": + version: 0.5.5 + resolution: "mkdirp@npm:0.5.5" + dependencies: + minimist: "npm:^1.2.5" + bin: + mkdirp: bin/cmd.js + checksum: 10/3bce20ea525f9477befe458ab85284b0b66c8dc3812f94155af07c827175948cdd8114852ac6c6d82009b13c1048c37f6d98743eb019651ee25c39acc8aabe7d + languageName: node + linkType: hard + "mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" @@ -15987,6 +16074,41 @@ __metadata: languageName: node linkType: hard +"mocha@npm:^7.1.2": + version: 7.2.0 + resolution: "mocha@npm:7.2.0" + dependencies: + ansi-colors: "npm:3.2.3" + browser-stdout: "npm:1.3.1" + chokidar: "npm:3.3.0" + debug: "npm:3.2.6" + diff: "npm:3.5.0" + escape-string-regexp: "npm:1.0.5" + find-up: "npm:3.0.0" + glob: "npm:7.1.3" + growl: "npm:1.10.5" + he: "npm:1.2.0" + js-yaml: "npm:3.13.1" + log-symbols: "npm:3.0.0" + minimatch: "npm:3.0.4" + mkdirp: "npm:0.5.5" + ms: "npm:2.1.1" + node-environment-flags: "npm:1.0.6" + object.assign: "npm:4.1.0" + strip-json-comments: "npm:2.0.1" + supports-color: "npm:6.0.0" + which: "npm:1.3.1" + wide-align: "npm:1.1.3" + yargs: "npm:13.3.2" + yargs-parser: "npm:13.1.2" + yargs-unparser: "npm:1.6.0" + bin: + _mocha: bin/_mocha + mocha: bin/mocha + checksum: 10/3f7630fc5aecd1497a13ffa8ac98a5db6d91a9f0232d12f5d258c17da187ab1ec53192e4947443d96174785256036b711e0d3cd6f99fd5766b29c801836fe6c1 + languageName: node + linkType: hard + "module-details-from-path@npm:^1.0.3": version: 1.0.3 resolution: "module-details-from-path@npm:1.0.3" @@ -16015,6 +16137,13 @@ __metadata: languageName: node linkType: hard +"ms@npm:2.1.1": + version: 2.1.1 + resolution: "ms@npm:2.1.1" + checksum: 10/0078a23cd916a9a7435c413caa14c57d4b4f6e2470e0ab554b6964163c8a4436448ac7ae020e883685475da6b6796cc396b670f579cb275db288a21e3e57721e + languageName: node + linkType: hard + "ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" @@ -16144,6 +16273,16 @@ __metadata: languageName: node linkType: hard +"node-environment-flags@npm:1.0.6": + version: 1.0.6 + resolution: "node-environment-flags@npm:1.0.6" + dependencies: + object.getownpropertydescriptors: "npm:^2.0.3" + semver: "npm:^5.7.0" + checksum: 10/e179d0ff3697cd6006d426ce707060b044da93c8e4c7ce1b19d211c25cc276ba72aa36247bfe64d6e79a0264843d5df7124f0fc28e50fc904f07cc1b96f8c781 + languageName: node + linkType: hard + "node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.7": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" @@ -16347,7 +16486,7 @@ __metadata: languageName: node linkType: hard -"nwsapi@npm:^2.2.0, nwsapi@npm:^2.2.2": +"nwsapi@npm:^2.2.2": version: 2.2.13 resolution: "nwsapi@npm:2.2.13" checksum: 10/f7f30a236f2ee513ea8042f1a987481dc2b900167c47f7163882f0fcfe7ccb57b5c8daaf2c91008dc20a204fcd79e050aee25001433ad99990bbed5a8c74121c @@ -16378,13 +16517,25 @@ __metadata: languageName: node linkType: hard -"object-keys@npm:^1.1.1": +"object-keys@npm:^1.0.11, object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" checksum: 10/3d81d02674115973df0b7117628ea4110d56042e5326413e4b4313f0bcdf7dd78d4a3acef2c831463fa3796a66762c49daef306f4a0ea1af44877d7086d73bde languageName: node linkType: hard +"object.assign@npm:4.1.0": + version: 4.1.0 + resolution: "object.assign@npm:4.1.0" + dependencies: + define-properties: "npm:^1.1.2" + function-bind: "npm:^1.1.1" + has-symbols: "npm:^1.0.0" + object-keys: "npm:^1.0.11" + checksum: 10/9ca3797cdbd3ff8a196aaee7b4808f2d1802c4d3655b1a03d15ca0284fc1034d097c112c6be60a11a866bcbf728b05318326834054d36f11a17aacb15d04ec9e + languageName: node + linkType: hard + "object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": version: 4.1.5 resolution: "object.assign@npm:4.1.5" @@ -16432,6 +16583,21 @@ __metadata: languageName: node linkType: hard +"object.getownpropertydescriptors@npm:^2.0.3": + version: 2.1.8 + resolution: "object.getownpropertydescriptors@npm:2.1.8" + dependencies: + array.prototype.reduce: "npm:^1.0.6" + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + gopd: "npm:^1.0.1" + safe-array-concat: "npm:^1.1.2" + checksum: 10/8c50f52e0d702d30836f3d2772ba02807ca25a5381be6f9470c6d143ee0bad01bce3fff0fedea2bdbc0c9297e4eb7785ffee5739f6a3a7c60fcd622b42f8a9fb + languageName: node + linkType: hard + "object.groupby@npm:^1.0.3": version: 1.0.3 resolution: "object.groupby@npm:1.0.3" @@ -16491,27 +16657,28 @@ __metadata: version: 0.0.0-use.local resolution: "ol-ckeditor@workspace:frontends/ol-ckeditor" dependencies: - "@ckeditor/ckeditor5-adapter-ckfinder": "npm:^41.0.0" - "@ckeditor/ckeditor5-autoformat": "npm:^41.0.0" - "@ckeditor/ckeditor5-basic-styles": "npm:^41.0.0" - "@ckeditor/ckeditor5-block-quote": "npm:^41.0.0" - "@ckeditor/ckeditor5-cloud-services": "npm:^41.0.0" - "@ckeditor/ckeditor5-core": "npm:^41.0.0" - "@ckeditor/ckeditor5-dev-translations": "npm:^42.0.0" - "@ckeditor/ckeditor5-dev-utils": "npm:^42.0.0" - "@ckeditor/ckeditor5-easy-image": "npm:^41.0.0" - "@ckeditor/ckeditor5-editor-classic": "npm:^41.0.0" - "@ckeditor/ckeditor5-essentials": "npm:^41.0.0" - "@ckeditor/ckeditor5-heading": "npm:^41.0.0" - "@ckeditor/ckeditor5-image": "npm:^41.0.0" - "@ckeditor/ckeditor5-link": "npm:^41.0.0" - "@ckeditor/ckeditor5-list": "npm:^41.0.0" - "@ckeditor/ckeditor5-markdown-gfm": "npm:^41.0.0" - "@ckeditor/ckeditor5-media-embed": "npm:^41.0.0" - "@ckeditor/ckeditor5-paragraph": "npm:^41.0.0" - "@ckeditor/ckeditor5-react": "npm:^7.0.0" - "@ckeditor/ckeditor5-theme-lark": "npm:^41.0.0" - "@ckeditor/ckeditor5-ui": "npm:^41.0.0" + "@ckeditor/ckeditor5-adapter-ckfinder": "npm:^42.0.0" + "@ckeditor/ckeditor5-autoformat": "npm:^42.0.0" + "@ckeditor/ckeditor5-basic-styles": "npm:^42.0.0" + "@ckeditor/ckeditor5-block-quote": "npm:^42.0.0" + "@ckeditor/ckeditor5-cloud-services": "npm:^42.0.0" + "@ckeditor/ckeditor5-core": "npm:^42.0.0" + "@ckeditor/ckeditor5-dev-translations": "npm:^43.0.0" + "@ckeditor/ckeditor5-dev-utils": "npm:^43.0.0" + "@ckeditor/ckeditor5-easy-image": "npm:^42.0.0" + "@ckeditor/ckeditor5-editor-classic": "npm:^42.0.0" + "@ckeditor/ckeditor5-essentials": "npm:^42.0.0" + "@ckeditor/ckeditor5-heading": "npm:^42.0.0" + "@ckeditor/ckeditor5-image": "npm:^42.0.0" + "@ckeditor/ckeditor5-link": "npm:^42.0.0" + "@ckeditor/ckeditor5-list": "npm:^42.0.0" + "@ckeditor/ckeditor5-markdown-gfm": "npm:^42.0.0" + "@ckeditor/ckeditor5-media-embed": "npm:^42.0.0" + "@ckeditor/ckeditor5-paragraph": "npm:^42.0.0" + "@ckeditor/ckeditor5-react": "npm:^9.0.0" + "@ckeditor/ckeditor5-theme-lark": "npm:^42.0.0" + "@ckeditor/ckeditor5-ui": "npm:^42.0.0" + "@ckeditor/ckeditor5-utils": "npm:^42.0.0" "@faker-js/faker": "npm:^8.0.0" "@testing-library/react": "npm:16.0.1" axios: "npm:^1.6.3" @@ -16778,7 +16945,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^2.2.0": +"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" dependencies: @@ -16805,6 +16972,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^3.0.0": + version: 3.0.0 + resolution: "p-locate@npm:3.0.0" + dependencies: + p-limit: "npm:^2.0.0" + checksum: 10/83991734a9854a05fe9dbb29f707ea8a0599391f52daac32b86f08e21415e857ffa60f0e120bfe7ce0cc4faf9274a50239c7895fc0d0579d08411e513b83a4ae + languageName: node + linkType: hard + "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" @@ -16977,13 +17153,6 @@ __metadata: languageName: node linkType: hard -"parse5@npm:6.0.1": - version: 6.0.1 - resolution: "parse5@npm:6.0.1" - checksum: 10/dfb110581f62bd1425725a7c784ae022a24669bd0efc24b58c71fc731c4d868193e2ebd85b74cde2dbb965e4dcf07059b1e651adbec1b3b5267531bd132fdb75 - languageName: node - linkType: hard - "parse5@npm:^7.0.0, parse5@npm:^7.1.1": version: 7.1.2 resolution: "parse5@npm:7.1.2" @@ -17027,6 +17196,13 @@ __metadata: languageName: node linkType: hard +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 10/96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a + languageName: node + linkType: hard + "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -18530,6 +18706,15 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:~3.2.0": + version: 3.2.0 + resolution: "readdirp@npm:3.2.0" + dependencies: + picomatch: "npm:^2.0.4" + checksum: 10/3efe893b62a2fac6a5c5b7a5ef7247a7894ed4cf21c1b7115fce6f61139da3b7fa8ae81d1ff9df035c6364175935163608f44efa23e3955c7074025396e9960e + languageName: node + linkType: hard + "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" @@ -18842,6 +19027,13 @@ __metadata: languageName: node linkType: hard +"require-main-filename@npm:^2.0.0": + version: 2.0.0 + resolution: "require-main-filename@npm:2.0.0" + checksum: 10/8604a570c06a69c9d939275becc33a65676529e1c3e5a9f42d58471674df79357872b96d70bb93a0380a62d60dc9031c98b1a9dad98c946ffdd61b7ac0c8cedd + languageName: node + linkType: hard + "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" @@ -19139,15 +19331,6 @@ __metadata: languageName: node linkType: hard -"saxes@npm:^5.0.1": - version: 5.0.1 - resolution: "saxes@npm:5.0.1" - dependencies: - xmlchars: "npm:^2.2.0" - checksum: 10/148b5f98fdd45df25fa1abef35d72cdf6457ac5aef3b7d59d60f770af09d8cf6e7e3a074197071222441d68670fd3198590aba9985e37c4738af2df2f44d0686 - languageName: node - linkType: hard - "saxes@npm:^6.0.0": version: 6.0.0 resolution: "saxes@npm:6.0.0" @@ -19198,6 +19381,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^5.7.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: 10/fca14418a174d4b4ef1fecb32c5941e3412d52a4d3d85165924ce3a47fbc7073372c26faf7484ceb4bbc2bde25880c6b97e492473dc7e9708fdfb1c6a02d546e + languageName: node + linkType: hard + "semver@npm:^6.0.0, semver@npm:^6.3.0, semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" @@ -19269,6 +19461,13 @@ __metadata: languageName: node linkType: hard +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 10/8980ebf7ae9eb945bb036b6e283c547ee783a1ad557a82babf758a065e2fb6ea337fd82cac30dd565c1e606e423f30024a19fff7afbf4977d784720c4026a8ef + languageName: node + linkType: hard + "set-function-length@npm:^1.2.1": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" @@ -19826,6 +20025,27 @@ __metadata: languageName: node linkType: hard +"string-width@npm:^1.0.2 || 2": + version: 2.1.1 + resolution: "string-width@npm:2.1.1" + dependencies: + is-fullwidth-code-point: "npm:^2.0.0" + strip-ansi: "npm:^4.0.0" + checksum: 10/d6173abe088c615c8dffaf3861dc5d5906ed3dc2d6fd67ff2bd2e2b5dce7fd683c5240699cf0b1b8aa679a3b3bd6b28b5053c824cb89b813d7f6541d8f89064a + languageName: node + linkType: hard + +"string-width@npm:^3.0.0, string-width@npm:^3.1.0": + version: 3.1.0 + resolution: "string-width@npm:3.1.0" + dependencies: + emoji-regex: "npm:^7.0.1" + is-fullwidth-code-point: "npm:^2.0.0" + strip-ansi: "npm:^5.1.0" + checksum: 10/57f7ca73d201682816d573dc68bd4bb8e1dff8dc9fcf10470fdfc3474135c97175fec12ea6a159e67339b41e86963112355b64529489af6e7e70f94a7caf08b2 + languageName: node + linkType: hard + "string-width@npm:^5.0.1, string-width@npm:^5.1.2": version: 5.1.2 resolution: "string-width@npm:5.1.2" @@ -19970,6 +20190,24 @@ __metadata: languageName: node linkType: hard +"strip-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-ansi@npm:4.0.0" + dependencies: + ansi-regex: "npm:^3.0.0" + checksum: 10/d9186e6c0cf78f25274f6750ee5e4a5725fb91b70fdd79aa5fe648eab092a0ec5b9621b22d69d4534a56319f75d8944efbd84e3afa8d4ad1b9a9491f12c84eca + languageName: node + linkType: hard + +"strip-ansi@npm:^5.0.0, strip-ansi@npm:^5.1.0, strip-ansi@npm:^5.2.0": + version: 5.2.0 + resolution: "strip-ansi@npm:5.2.0" + dependencies: + ansi-regex: "npm:^4.1.0" + checksum: 10/bdb5f76ade97062bd88e7723aa019adbfacdcba42223b19ccb528ffb9fb0b89a5be442c663c4a3fb25268eaa3f6ea19c7c3fbae830bd1562d55adccae1fcec46 + languageName: node + linkType: hard + "strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0": version: 7.1.0 resolution: "strip-ansi@npm:7.1.0" @@ -20018,6 +20256,13 @@ __metadata: languageName: node linkType: hard +"strip-json-comments@npm:2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 10/1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 + languageName: node + linkType: hard + "strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" @@ -20246,6 +20491,15 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:6.0.0": + version: 6.0.0 + resolution: "supports-color@npm:6.0.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10/bc443c8e01dc11dec4b12386a2bbd0e82c3108c6b4507076d7c21f70ffabbf539487d52d65fcc21628f5841efb8dbce117ed5d622d7f3023840fa3dc5ee303ba + languageName: node + linkType: hard + "supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -20632,7 +20886,7 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:^4.0.0, tough-cookie@npm:^4.1.2": +"tough-cookie@npm:^4.1.2": version: 4.1.4 resolution: "tough-cookie@npm:4.1.4" dependencies: @@ -20644,15 +20898,6 @@ __metadata: languageName: node linkType: hard -"tr46@npm:^2.1.0": - version: 2.1.0 - resolution: "tr46@npm:2.1.0" - dependencies: - punycode: "npm:^2.1.1" - checksum: 10/302b13f458da713b2a6ff779a0c1d27361d369fdca6c19330536d31db61789b06b246968fc879fdac818a92d02643dca1a0f4da5618df86aea4a79fb3243d3f3 - languageName: node - linkType: hard - "tr46@npm:^3.0.0": version: 3.0.0 resolution: "tr46@npm:3.0.0" @@ -20871,12 +21116,12 @@ __metadata: languageName: node linkType: hard -"turndown@npm:6.0.0": - version: 6.0.0 - resolution: "turndown@npm:6.0.0" +"turndown@npm:7.2.0": + version: 7.2.0 + resolution: "turndown@npm:7.2.0" dependencies: - jsdom: "npm:^16.2.0" - checksum: 10/9a92891c92b0c5a37b905d1405537668c6559e0fef5cb32e6a71e9477318c11ef0417889837545cddece8e54b6f7b2957f1018cd30e744d887501660e578a62b + "@mixmark-io/domino": "npm:^2.2.0" + checksum: 10/ad373d9cff76e80196effe29c19c1a14fda428fa9f41ef7458daa9c0c8939f37bbc36d0a504940f95ba34a6db8fd4d9cafd1ae498f91d010805f8d540e9e71bb languageName: node linkType: hard @@ -21658,24 +21903,6 @@ __metadata: languageName: node linkType: hard -"w3c-hr-time@npm:^1.0.2": - version: 1.0.2 - resolution: "w3c-hr-time@npm:1.0.2" - dependencies: - browser-process-hrtime: "npm:^1.0.0" - checksum: 10/03851d90c236837c24c2983f5a8806a837c6515b21d52e5f29776b07cc08695779303d481454d768308489f00dd9d3232d595acaa5b2686d199465a4d9f7b283 - languageName: node - linkType: hard - -"w3c-xmlserializer@npm:^2.0.0": - version: 2.0.0 - resolution: "w3c-xmlserializer@npm:2.0.0" - dependencies: - xml-name-validator: "npm:^3.0.0" - checksum: 10/400c18b75ce6af269168f964e7d1eb196a7422e134032906540c69d83b802f38dc64e18fc259c02966a334687483f416398d2ad7ebe9d19ab434a7a0247c71c3 - languageName: node - linkType: hard - "w3c-xmlserializer@npm:^4.0.0": version: 4.0.0 resolution: "w3c-xmlserializer@npm:4.0.0" @@ -21734,20 +21961,6 @@ __metadata: languageName: node linkType: hard -"webidl-conversions@npm:^5.0.0": - version: 5.0.0 - resolution: "webidl-conversions@npm:5.0.0" - checksum: 10/cea864dd9cf1f2133d82169a446fb94427ba089e4676f5895273ea085f165649afe587ae3f19f2f0370751a724bba2d96e9956d652b3e41ac1feaaa4376e2d70 - languageName: node - linkType: hard - -"webidl-conversions@npm:^6.1.0": - version: 6.1.0 - resolution: "webidl-conversions@npm:6.1.0" - checksum: 10/4454b73060a6d83f7ec1f1db24c480b7ecda33880306dd32a3d62d85b36df4789a383489f1248387e5451737dca17054b8cbf2e792ba89e49d76247f0f4f6380 - languageName: node - linkType: hard - "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -21861,15 +22074,6 @@ __metadata: languageName: node linkType: hard -"whatwg-encoding@npm:^1.0.5": - version: 1.0.5 - resolution: "whatwg-encoding@npm:1.0.5" - dependencies: - iconv-lite: "npm:0.4.24" - checksum: 10/5be4efe111dce29ddee3448d3915477fcc3b28f991d9cf1300b4e50d6d189010d47bca2f51140a844cf9b726e8f066f4aee72a04d687bfe4f2ee2767b2f5b1e6 - languageName: node - linkType: hard - "whatwg-encoding@npm:^2.0.0": version: 2.0.0 resolution: "whatwg-encoding@npm:2.0.0" @@ -21879,13 +22083,6 @@ __metadata: languageName: node linkType: hard -"whatwg-mimetype@npm:^2.3.0": - version: 2.3.0 - resolution: "whatwg-mimetype@npm:2.3.0" - checksum: 10/3582c1d74d708716013433bbab45cb9b31ef52d276adfbe2205d948be1ec9bb1a4ac05ce6d9045f3acc4104489e1344c857b14700002385a4b997a5673ff6416 - languageName: node - linkType: hard - "whatwg-mimetype@npm:^3.0.0": version: 3.0.0 resolution: "whatwg-mimetype@npm:3.0.0" @@ -21913,17 +22110,6 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^8.0.0, whatwg-url@npm:^8.5.0": - version: 8.7.0 - resolution: "whatwg-url@npm:8.7.0" - dependencies: - lodash: "npm:^4.7.0" - tr46: "npm:^2.1.0" - webidl-conversions: "npm:^6.1.0" - checksum: 10/512a8b2703dffbf13a9a247bf2fb27c3048a3ceb5ece09f88b737c8260afaba4b2f6775c2f1cfc29c2ba4859f2454a9de73fac08e239b00ae2b42cd6b8bb0d35 - languageName: node - linkType: hard - "which-boxed-primitive@npm:^1.0.2": version: 1.0.2 resolution: "which-boxed-primitive@npm:1.0.2" @@ -21969,6 +22155,13 @@ __metadata: languageName: node linkType: hard +"which-module@npm:^2.0.0": + version: 2.0.1 + resolution: "which-module@npm:2.0.1" + checksum: 10/1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be + languageName: node + linkType: hard + "which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.2": version: 1.1.15 resolution: "which-typed-array@npm:1.1.15" @@ -21982,7 +22175,7 @@ __metadata: languageName: node linkType: hard -"which@npm:^1.2.14, which@npm:^1.3.1": +"which@npm:1.3.1, which@npm:^1.2.14, which@npm:^1.3.1": version: 1.3.1 resolution: "which@npm:1.3.1" dependencies: @@ -22015,6 +22208,15 @@ __metadata: languageName: node linkType: hard +"wide-align@npm:1.1.3": + version: 1.1.3 + resolution: "wide-align@npm:1.1.3" + dependencies: + string-width: "npm:^1.0.2 || 2" + checksum: 10/187642e0bbaf36d7ef95e85fec9cabe281a29bebfbeb218024fedbef3f066374e99fbf8391a57f2e40612dca4fa460feeeeb526bb17de7d9d0654b6b4bd1be2e + languageName: node + linkType: hard + "word-wrap@npm:^1.2.5": version: 1.2.5 resolution: "word-wrap@npm:1.2.5" @@ -22040,6 +22242,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^5.1.0": + version: 5.1.0 + resolution: "wrap-ansi@npm:5.1.0" + dependencies: + ansi-styles: "npm:^3.2.0" + string-width: "npm:^3.0.0" + strip-ansi: "npm:^5.0.0" + checksum: 10/f02bbbd13f40169f3d69b8c95126c1d2a340e6f149d04125527c3d501d74a304a434f4329a83bfdc3b9fdb82403e9ae0cdd7b83a99f0da0d5a7e544f6b709914 + languageName: node + linkType: hard + "wrap-ansi@npm:^6.0.1": version: 6.2.0 resolution: "wrap-ansi@npm:6.2.0" @@ -22089,21 +22302,6 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7.4.6": - version: 7.5.10 - resolution: "ws@npm:7.5.10" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 10/9c796b84ba80ffc2c2adcdfc9c8e9a219ba99caa435c9a8d45f9ac593bba325563b3f83edc5eb067cc6d21b9a6bf2c930adf76dd40af5f58a5ca6859e81858f0 - languageName: node - linkType: hard - "ws@npm:^8.11.0, ws@npm:^8.2.3": version: 8.18.0 resolution: "ws@npm:8.18.0" @@ -22119,13 +22317,6 @@ __metadata: languageName: node linkType: hard -"xml-name-validator@npm:^3.0.0": - version: 3.0.0 - resolution: "xml-name-validator@npm:3.0.0" - checksum: 10/24f5d38c777ad9239dfe99c4ca3cd155415b65ac583785d1514e04b9f86d6d09eaff983ed373e7a779ceefd1fca0fd893f2fc264999e9aeaac36b6e1afc397ed - languageName: node - linkType: hard - "xml-name-validator@npm:^4.0.0": version: 4.0.0 resolution: "xml-name-validator@npm:4.0.0" @@ -22147,6 +22338,13 @@ __metadata: languageName: node linkType: hard +"y18n@npm:^4.0.0": + version: 4.0.3 + resolution: "y18n@npm:4.0.3" + checksum: 10/392870b2a100bbc643bc035fe3a89cef5591b719c7bdc8721bcdb3d27ab39fa4870acdca67b0ee096e146d769f311d68eda6b8195a6d970f227795061923013f + languageName: node + linkType: hard + "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8" @@ -22184,6 +22382,16 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:13.1.2, yargs-parser@npm:^13.1.2": + version: 13.1.2 + resolution: "yargs-parser@npm:13.1.2" + dependencies: + camelcase: "npm:^5.0.0" + decamelize: "npm:^1.2.0" + checksum: 10/89a84fbb32827832a1d34f596f5efe98027c398af731728304a920c2f9ba03071c694418723df16882ebb646ddb72a8fb1c9567552afcbc2f268e86c4faea5a8 + languageName: node + linkType: hard + "yargs-parser@npm:^20.2.9": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" @@ -22198,6 +22406,35 @@ __metadata: languageName: node linkType: hard +"yargs-unparser@npm:1.6.0": + version: 1.6.0 + resolution: "yargs-unparser@npm:1.6.0" + dependencies: + flat: "npm:^4.1.0" + lodash: "npm:^4.17.15" + yargs: "npm:^13.3.0" + checksum: 10/ca662bb94af53d816d47f2162f0a1d135783f09de9fd47645a5cb18dd25532b0b710432b680d2c065ff45de122ba4a96433c41595fa7bfcc08eb12e889db95c1 + languageName: node + linkType: hard + +"yargs@npm:13.3.2, yargs@npm:^13.3.0": + version: 13.3.2 + resolution: "yargs@npm:13.3.2" + dependencies: + cliui: "npm:^5.0.0" + find-up: "npm:^3.0.0" + get-caller-file: "npm:^2.0.1" + require-directory: "npm:^2.1.1" + require-main-filename: "npm:^2.0.0" + set-blocking: "npm:^2.0.0" + string-width: "npm:^3.0.0" + which-module: "npm:^2.0.0" + y18n: "npm:^4.0.0" + yargs-parser: "npm:^13.1.2" + checksum: 10/608ba2e62ac2c7c4572b9c6f7a2d3ef76e2deaad8c8082788ed29ae3ef33e9f68e087f07eb804ed5641de2bc4eab977405d3833b1d11ae8dbbaf5847584d96be + languageName: node + linkType: hard + "yargs@npm:^17.3.1": version: 17.7.2 resolution: "yargs@npm:17.7.2"