From 1d6806af8bebe7e909b99f4644adf8f8ceb7dbd9 Mon Sep 17 00:00:00 2001 From: Jose Javier Vega Date: Tue, 14 May 2024 08:11:56 -0600 Subject: [PATCH] [2256] Add unit tests (#75) * update unit tests - content package * remove not needed lib cross-fetch * Update tests in content and search packages * Update tests for content and search packages using chai and nock * Rollback objectId value in content mock-responses * content and redux unit tests updates #2256 * Redux/util package unit tests * Added unit tests to ice package * Added unit tests to class package * Add prettier to project * Prettify sdk tests * Update @types/mocha from v^7.0.1 to v^10.0.6 * Add missing lib in .mocharc.json #2256 * Update unit tests #2256 * Update tests description comments #2256 * Update unit tests and comments #2256 * yarn.lock update #2256 * Update tests to equal expected values #2256 * Remove optional arguments and leave defaults, update redux actions in tests #2256 * Use values from crafterConfig for endpoints, baseUrl and crafterSite in requests #2256 * Use values from crafterConfig for endpoints, baseUrl and crafterSite in requests - search tests #2256 --- default.opts | 4 +- package.json | 6 +- packages/classes/.mocharc.json | 10 + packages/classes/package.json | 13 +- packages/classes/test/index.spec.ts | 127 ++ packages/content/.mocharc.json | 9 + packages/content/package.json | 11 +- packages/content/test/index.spec.ts | 386 +++-- packages/content/test/mock-responses.ts | 7 +- packages/ice/.mocharc.json | 9 + packages/ice/package.json | 9 +- packages/ice/test/index.spec.ts | 145 ++ packages/ice/test/mock-responses.ts | 42 + packages/redux/.mocharc.json | 10 + packages/redux/package.json | 10 +- packages/redux/test/index.spec.ts | 750 +++++----- packages/redux/test/mock-responses.ts | 11 +- packages/search/.mocharc.json | 6 + packages/search/package.json | 12 +- packages/search/test/index.spec.ts | 151 +- packages/search/test/mock-responses.ts | 80 +- packages/utils/.mocharc.json | 10 + packages/utils/package.json | 4 +- packages/utils/test/index.spec.ts | 113 ++ prettier.config.js | 29 + util/mock-responses-common.ts | 563 +++++++- yarn.lock | 1703 +++++++++++++++++------ 27 files changed, 3159 insertions(+), 1071 deletions(-) create mode 100644 packages/classes/.mocharc.json create mode 100644 packages/classes/test/index.spec.ts create mode 100644 packages/content/.mocharc.json create mode 100644 packages/ice/.mocharc.json create mode 100644 packages/ice/test/index.spec.ts create mode 100644 packages/ice/test/mock-responses.ts create mode 100644 packages/redux/.mocharc.json create mode 100644 packages/search/.mocharc.json create mode 100644 packages/utils/.mocharc.json create mode 100644 packages/utils/test/index.spec.ts create mode 100644 prettier.config.js diff --git a/default.opts b/default.opts index f0b5a90..b116d49 100644 --- a/default.opts +++ b/default.opts @@ -1,5 +1,5 @@ --require assert --require mocha ---requier xhr-mock +--require xhr-mock --require ts-node/register ---require tsconfig-paths/register \ No newline at end of file +--require tsconfig-paths/register diff --git a/package.json b/package.json index 2cbfb38..03bc7ec 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,10 @@ ], "description": "Crafter CMS SDK for JavaScript", "scripts": { - "build": "./build.sh" + "build": "./build.sh", + "prettier:all": "prettier -w packages/*/src/**/*.ts prettier -w packages/*/test/**/*.ts", + "prettier:packages": "prettier -w packages/*/src/**/*.ts", + "prettier:tests": "prettier -w packages/*/test/**/*.ts" }, "repository": { "type": "git", @@ -26,6 +29,7 @@ }, "homepage": "https://github.com/craftercms/craftercms-sdk-js#readme", "devDependencies": { + "prettier": "^3.0.3", "react": "^18.2.0", "typescript": "^5.3.3" }, diff --git a/packages/classes/.mocharc.json b/packages/classes/.mocharc.json new file mode 100644 index 0000000..8f8927c --- /dev/null +++ b/packages/classes/.mocharc.json @@ -0,0 +1,10 @@ +{ + "loader": "ts-node/esm", + "spec": ["test/*.spec.ts"], + "require": ["assert", "mocha", "ts-node/register"], + "node-option": [ + "no-experimental-fetch", + "loader=ts-node/esm" + ] +} + diff --git a/packages/classes/package.json b/packages/classes/package.json index fcb826f..e53fe4c 100644 --- a/packages/classes/package.json +++ b/packages/classes/package.json @@ -21,18 +21,25 @@ "rollup": "../../node_modules/rollup/bin/rollup -c rollup.config.js", "build:ts": "tsc -p tsconfig.build.json", "clean:ts": "../../node_modules/rimraf/bin.js ts-out", - "build": "npm run build:ts && npm run rollup && npm run clean:ts" + "build": "npm run build:ts && npm run rollup && npm run clean:ts", + "test": "mocha" }, "dependencies": { "@craftercms/models": "0.0.0-PLACEHOLDER", "@craftercms/utils": "0.0.0-PLACEHOLDER", - "query-string": "^7.1.3" + "query-string": "^7.1.3", + "url-search-params-polyfill": "^5.0.0" }, "devDependencies": { "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", + "chai": "^4.3.10", + "mocha": "^10.2.0", + "nock": "^13.3.4", + "node-fetch": "2", "rollup": "^2.79.1", "rollup-plugin-sourcemaps": "^0.5.0", - "terser": "^5.30.1" + "terser": "^5.30.1", + "xhr2": "^0.2.1" } } diff --git a/packages/classes/test/index.spec.ts b/packages/classes/test/index.spec.ts new file mode 100644 index 0000000..6b1a0a6 --- /dev/null +++ b/packages/classes/test/index.spec.ts @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2007-2023 Crafter Software Corporation. All Rights Reserved. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + */ + +import 'mocha'; +import { crafterConf, httpGet, httpPost } from '@craftercms/classes'; +import { expect } from 'chai'; +import { beforeEach } from 'mocha'; +import * as nock from 'nock'; +import * as xhr2 from 'xhr2'; + +// @ts-ignore - Setting global XMLHttpRequest for testing (not available on node) +global.XMLHttpRequest = xhr2.XMLHttpRequest; + +// https://github.com/nock/nock/issues/2397 +import fetch, { Headers, Request, Response } from 'node-fetch'; + +if (!globalThis.fetch) { + (globalThis as any).fetch = fetch; + (globalThis as any).Headers = Headers; + (globalThis as any).Request = Request; + (globalThis as any).Response = Response; +} + +describe('CrafterCMS Classes', () => { + beforeEach(() => { + // replace the real XHR object with the mock XHR object before each test + if (!nock.isActive()) { + nock.activate(); + } + }); + // put the real XHR object back and clear the mocks after each test + afterEach(() => nock.cleanAll()); + + describe('ConfigManager', () => { + // Tests that crafterConfig returns a default configuration when no configuration is set. + // Values from the default configuration are mostly empty. Actual values are tested in next test. + it('Should have a default configuration', () => { + const defaultConfig = crafterConf.getConfig(); + expect(defaultConfig).to.be.an('object'); + expect(defaultConfig).to.have.property('site'); + expect(defaultConfig).to.have.property('baseUrl'); + expect(defaultConfig).to.have.property('endpoints'); + expect(defaultConfig).to.have.property('contentTypeRegistry'); + expect(defaultConfig).to.have.property('headers'); + }); + // Tests that after setting a new configuration, the provided values are set. + // e.g. an endpoint value should be different from the default value. + it('Should be able to set a new configuration', () => { + const newConfig = { + baseUrl: 'http://localhost:8080', + site: 'editorial', + searchId: 'test_search_id', + endpoints: { + GET_ITEM_URL: '/new_api/content_store/item.json', + GET_DESCRIPTOR: '/new_api/content_store/descriptor.json', + GET_CHILDREN: '/new_api/content_store/children.json', + GET_TREE: '/new_api/content_store/tree.json', + GET_NAV_TREE: '/new_api/navigation/tree.json', + GET_BREADCRUMB: '/new_api/navigation/breadcrumb.json', + TRANSFORM_URL: '/new_api/url/transform.json', + SEARCH: '/new_api/search/search.json' + } + }; + crafterConf.configure(newConfig); + const updatedConfig = crafterConf.getConfig(); + expect(updatedConfig.site).to.equal(newConfig.site); + expect(updatedConfig.baseUrl).to.equal(newConfig.baseUrl); + expect(updatedConfig.endpoints.GET_ITEM_URL).to.equal(newConfig.endpoints.GET_ITEM_URL); + expect(updatedConfig.endpoints.GET_DESCRIPTOR).to.not.equal('/api/1/content_store/descriptor.json'); + }); + // Tests that the mix method returns a mix of the current configuration (set at the previous tes) and the new values + // set at this test. + it('Should return a mix of the current config and the provided config', () => { + const mixConfig = crafterConf.mix({ + baseUrl: 'http://localhost:3000', + site: 'test_site' + }); + expect(mixConfig.site).to.equal('test_site'); + expect(mixConfig.site).to.not.equal('editorial'); + expect(mixConfig.baseUrl).to.equal('http://localhost:3000'); + expect(mixConfig.endpoints.GET_DESCRIPTOR).to.equal('/new_api/content_store/descriptor.json'); + expect(mixConfig.endpoints.GET_DESCRIPTOR).to.not.equal('/api/1/content_store/descriptor.json'); + }); + }); + + describe('SDKService', () => { + describe('httpGet', () => { + // Test the httpGet method with a mocked GET request. + it('Should return a response from the GET request', (done) => { + nock('http://localhost:8080').get('/api/1/test/getItem').query({ id: 1 }).reply(200, { id: 1, name: 'test' }); + + httpGet('http://localhost:8080/api/1/test/getItem?id=1').subscribe((response) => { + expect(response).to.not.be.null; + expect(response).to.be.an('object'); + expect(response).to.deep.equal({ id: 1, name: 'test' }); + done(); + }); + }); + }); + + describe('httpPost', () => { + // Test the httpPost method with a mocked POST request. + it('Should return a response from the POST request', (done) => { + nock('http://localhost:8080').post('/api/1/test/addItem').reply(200, { result: 'success', id: 1 }); + + httpPost('http://localhost:8080/api/1/test/addItem', { id: 1, name: 'test' }).subscribe((response) => { + expect(response).to.be.an('object'); + expect(response).to.deep.equal({ result: 'success', id: 1 }); + done(); + }); + }); + }); + }); +}); diff --git a/packages/content/.mocharc.json b/packages/content/.mocharc.json new file mode 100644 index 0000000..95eb7e8 --- /dev/null +++ b/packages/content/.mocharc.json @@ -0,0 +1,9 @@ +{ + "loader": "ts-node/esm", + "spec": ["test/*.spec.ts"], + "require": ["assert", "mocha", "ts-node/register"], + "node-option": [ + "no-experimental-fetch", + "loader=ts-node/esm" + ] +} diff --git a/packages/content/package.json b/packages/content/package.json index 399b443..10a3db8 100644 --- a/packages/content/package.json +++ b/packages/content/package.json @@ -22,7 +22,7 @@ "build:ts": "tsc -p tsconfig.build.json", "clean:ts": "../../node_modules/rimraf/bin.js ts-out", "build": "npm run build:ts && npm run rollup && npm run clean:ts", - "test": "../../node_modules/mocha/bin/mocha --opts ../../default.opts \"test/*.spec.ts\"" + "test": "mocha" }, "dependencies": { "@craftercms/classes": "0.0.0-PLACEHOLDER", @@ -33,11 +33,16 @@ "devDependencies": { "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", - "@types/mocha": "^7.0.2", - "mocha": "^7.2.0", + "@types/mocha": "^10.0.6", + "chai": "^4.3.8", + "mocha": "^10.2.0", + "nock": "^13.3.3", + "node-fetch": "2", "rollup": "^2.79.1", "rollup-plugin-sourcemaps": "^0.5.0", "terser": "^5.30.1", + "ts-node": "^10.9.1", + "whatwg-fetch": "^3.6.19", "xhr-mock": "^2.5.1" } } diff --git a/packages/content/test/index.spec.ts b/packages/content/test/index.spec.ts index cdcab79..db3ec4d 100644 --- a/packages/content/test/index.spec.ts +++ b/packages/content/test/index.spec.ts @@ -14,185 +14,327 @@ * along with this program. If not, see http://www.gnu.org/licenses/. */ -import * as assert from 'assert'; -import { ContentStoreService, NavigationService, UrlTransformationService } from '@craftercms/content'; +import { + ContentStoreService, + NavigationService, + UrlTransformationService, + parseDescriptor, + extractContent, parseProps, parseFieldValue, preParseSearchResults +} from '@craftercms/content'; import { crafterConf } from '@craftercms/classes'; import 'url-search-params-polyfill'; - -import mock from 'xhr-mock'; -import MockRequest from "xhr-mock/lib/MockRequest"; -import MockResponse from "xhr-mock/lib/MockResponse"; - -import { - item, - descriptor, - children, - tree, - navTree, - navBreadcrumb, - renderUrl, - storeUrl -} from './mock-responses'; +import { expect } from 'chai'; +import { item, descriptor, children, tree, navTree, navBreadcrumb, renderUrl, storeUrl } from './mock-responses'; +import * as nock from 'nock'; + +// https://github.com/nock/nock/issues/2397 +import fetch, { Headers, Request, Response } from 'node-fetch'; +import {item2, parsedItem, parsedSearchHit, unparsedSearchHit} from "../../../util/mock-responses-common"; +import {ContentInstance} from "../../../dist/packages/models"; + +if (!globalThis.fetch) { + (globalThis as any).fetch = fetch; + (globalThis as any).Headers = Headers; + (globalThis as any).Request = Request; + (globalThis as any).Response = Response; +} crafterConf.configure({ + baseUrl: 'http://localhost:8080', site: 'editorial' -}) +}); describe('Engine Client', () => { - // replace the real XHR object with the mock XHR object before each test - beforeEach(() => mock.setup()); + beforeEach(() => { + if (!nock.isActive()) { + nock.activate(); + } + }); // put the real XHR object back and clear the mocks after each test - afterEach(() => mock.teardown()); + afterEach(() => nock.cleanAll()); + const { baseUrl, site: crafterSite, endpoints } = crafterConf.getConfig(); describe('Content Store Service', () => { - describe('getItem', () => { - it('should return the index item', done => { - - mock.get("http://localhost:8080/api/1/site/content_store/item.json?url=%2Fsite%2Fwebsite%2Findex.xml&crafterSite=editorial", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(item)); - return res; - }); - - ContentStoreService.getItem("/site/website/index.xml", crafterConf.getConfig()) - .subscribe((respItem) => { - assert.equal(respItem.descriptorDom.page.objectId, item.descriptorDom.page.objectId); - done(); + // Tests the contentStore getItem method. Checks that it returns the index item of the site editorial. + it('return the index item', (done) => { + nock(baseUrl) + .get(endpoints.GET_ITEM_URL) + .query({ + crafterSite, + url: '/site/website/index.xml' }) + .reply(200, item); + + ContentStoreService.getItem('/site/website/index.xml').subscribe((respItem) => { + expect(respItem).to.not.be.null; + expect(respItem.url).to.equal(item.url); + expect(respItem.url).to.not.equal(item2.url); + expect(respItem.descriptorDom.page.objectId).to.equal(item.descriptorDom.page.objectId); + expect(respItem.descriptorDom.page.objectId).to.not.equal(item2.descriptorDom.page.objectId); + expect(respItem.descriptorDom.page['internal-name']).to.equal(item.descriptorDom.page['internal-name']); + expect(respItem).not.to.deep.equal(item2); + done(); + }); }); }); describe('getDescriptor', () => { - it('should return the index descriptor', done => { - - mock.get("http://localhost:8080/api/1/site/content_store/descriptor.json?url=%2Fsite%2Fwebsite%2Findex.xml&crafterSite=editorial", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(descriptor)); - return res; - }); + // Tests the contentStore getDescriptor method. Checks that it returns the index descriptor of the site editorial. + it('return the index descriptor', (done) => { + nock(baseUrl) + .get(endpoints.GET_DESCRIPTOR) + .query({ + crafterSite, + flatten: false, + url: '/site/website/index.xml' + }) + .reply(200, descriptor); - ContentStoreService.getDescriptor("/site/website/index.xml", crafterConf.getConfig()) - .subscribe((respDescriptor) => { - assert.equal(respDescriptor.page.objectId, descriptor.page.objectId); + ContentStoreService.getDescriptor('/site/website/index.xml').subscribe( + (respDescriptor) => { + expect(respDescriptor).to.not.be.null; + expect(respDescriptor.page.objectId).to.equal(descriptor.page.objectId); done(); - }) + } + ); }); }); describe('getChildren', () => { - it('should return the child pages', done => { - - mock.get("http://localhost:8080/api/1/site/content_store/children.json?url=%2Fsite%2Fwebsite%2F&crafterSite=editorial", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(children)); - return res; - }); - - ContentStoreService.getChildren("/site/website/", crafterConf.getConfig()) - .subscribe((respChildren) => { - assert.equal(respChildren.length, children.length, 'index should have 9 child pages'); - done(); + // Tests the contentStore getChildren method. Checks that it returns the children of the index page of the site editorial. + // The children length at its ids should match the expected values. + it('return the child pages', (done) => { + nock(baseUrl) + .get(endpoints.GET_CHILDREN) + .query({ + crafterSite, + url: '/site/website/' }) + .reply(200, children); + + ContentStoreService.getChildren('/site/website/').subscribe((respChildren) => { + const childrenNames = ['articles', 'crafter-level-descriptor.level.xml', 'entertainment', 'health', 'index.xml', 'search-results', 'style', 'technology']; + const allChildrenExist = childrenNames.every((name) => respChildren.find((child) => child.name === name)); + expect(respChildren, `index should have ${children.length} child pages`).to.have.lengthOf(children.length); + expect(allChildrenExist, 'all children from getChildren response should match the expected children from mock response').to.be.true; + done(); + }); }); }); describe('getTree', () => { - it('should return the page tree', done => { - - mock.get("http://localhost:8080/api/1/site/content_store/tree.json?url=%2Fsite%2Fwebsite%2F&depth=3&crafterSite=editorial", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(tree)); - return res; - }); - - ContentStoreService.getTree("/site/website/", 3, crafterConf.getConfig()) - .subscribe((respTree) => { - assert.equal(respTree.children.length, tree.children.length, 'tree should have 3 child pages'); - done(); + // Tests the contentStore getTree method. Checks that it returns the tree of `/articles/2021` folder of the site editorial. + it('return the page tree', (done) => { + nock(baseUrl) + .get(endpoints.GET_TREE) + .query({ + crafterSite, + depth: 3, + url: '/site/website/articles/2021' }) + .reply(200, tree); + + ContentStoreService.getTree('/site/website/articles/2021', 3).subscribe((respTree) => { + expect(respTree.name).to.equal(tree.name); + expect(respTree.children, `tree should have ${tree.children.length} child pages`).to.have.lengthOf( + tree.children.length + ); + expect(respTree.children[0].name).to.equal('1'); + expect(respTree.children[2].name).to.equal('3'); + done(); + }); }); }); - }); describe('Navigation Service', () => { - describe('getNavTree', () => { - it('should return the nav tree', done => { + // Tests the navigation getNavTree method. Checks that it returns the correct navigation tree of the site editorial. + it('return the nav tree', (done) => { + nock(baseUrl) + .get(endpoints.GET_NAV_TREE) + .query({ + crafterSite, + currentPageUrl: null, + depth: 3, + url: '/site/website' + }) + .reply(200, navTree); - mock.get("http://localhost:8080/api/1/site/navigation/tree.json?crafterSite=editorial&url=%2Fsite%2Fwebsite&depth=3¤tPageUrl=null", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(navTree)); - return res; + NavigationService.getNavTree('/site/website', 3).subscribe((respTree) => { + expect(respTree.label, 'tree should start at the index').to.equal(navTree.label); + expect(respTree.subItems, 'tree should have subItems').to.exist; + expect(respTree.subItems).to.deep.equal(navTree.subItems); + done(); }); - - NavigationService.getNavTree("/site/website", 3, null, crafterConf.getConfig()) - .subscribe((respTree) => { - assert.equal(respTree.label, navTree.label, 'tree should start at the index'); - assert(respTree.subItems, 'tree should have subItems'); - done(); - }) }); }); - describe('getNavBreadcrumb', () => { - it('should return the nav breadcrumb', done => { - - mock.get("http://localhost:8080/api/1/site/navigation/breadcrumb.json?crafterSite=editorial&url=%2Fsite%2Fwebsite%2Fstyle%2Findex.xml&root=null", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(navBreadcrumb)); - return res; - }); - - NavigationService.getNavBreadcrumb("/site/website/style/index.xml", null, crafterConf.getConfig()) - .subscribe((respNavBreadcrumb) => { - assert.equal(respNavBreadcrumb.length, navBreadcrumb.length, 'breadcrumb should have 2 items'); - assert.equal(respNavBreadcrumb[1].label, navBreadcrumb[1].label, 'last item should be Style'); - done(); + // Tests the navigation getNavBreadcrumb method. Checks that it returns the correct items for the navigation + // breadcrumb of the site editorial. + it('return the nav breadcrumb', (done) => { + nock(baseUrl) + .get(endpoints.GET_BREADCRUMB) + .query({ + crafterSite, + root: null, + url: '/site/website/style/index.xml' }) + .reply(200, navBreadcrumb); + + NavigationService.getNavBreadcrumb('/site/website/style/index.xml').subscribe( + (respNavBreadcrumb) => { + expect(respNavBreadcrumb, `breadcrumb should have ${navBreadcrumb.length} items`).to.have.lengthOf( + navBreadcrumb.length + ); + expect(respNavBreadcrumb[0].label, `first item should be ${navBreadcrumb[0].label}`).to.equal( + navBreadcrumb[0].label + ); + expect(respNavBreadcrumb[respNavBreadcrumb.length - 1].label, `last item should be ${navBreadcrumb[navBreadcrumb.length - 1].label}`).to.equal( + navBreadcrumb[navBreadcrumb.length - 1].label + ); + done(); + } + ); }); }); - }); describe('URL Service', () => { - describe('transform', () => { - - it('should return the render url', done => { - - mock.get("http://localhost:8080/api/1/site/url/transform.json?crafterSite=editorial&transformerName=storeUrlToRenderUrl&url=%2Fsite%2Fwebsite%2Fstyle%2Findex.xml", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(renderUrl)); - return res; + // Tests the urlTransformation transform method. Checks that the response is the expected render url + // (/site/website/style/index.xml => /style). + it('return the render url', (done) => { + nock(baseUrl) + .get(endpoints.TRANSFORM_URL) + .query({ + crafterSite, + transformerName: 'storeUrlToRenderUrl', + url: '/site/website/style/index.xml' + }) + .reply(200, `"${renderUrl}"`); + + UrlTransformationService.transform( + 'storeUrlToRenderUrl', + '/site/website/style/index.xml' + ).subscribe((url) => { + expect(url).to.equal(renderUrl); + done(); }); + }); - UrlTransformationService.transform("storeUrlToRenderUrl", "/site/website/style/index.xml", crafterConf.getConfig()) - .subscribe((url) => { - assert.equal(url, renderUrl); - done(); + it('return the store url', (done) => { + // Tests the urlTransformation transform method. Checks that the response is the expected render url + // (/technology => /site/website/technology/index.xml). + nock(baseUrl) + .get(endpoints.TRANSFORM_URL) + .query({ + crafterSite, + transformerName: 'renderUrlToStoreUrl', + url: '/technology' }) - }); + .reply(200, `"${storeUrl}"`); - it('should return the store url', done => { + UrlTransformationService.transform('renderUrlToStoreUrl', '/technology').subscribe( + (url) => { + expect(url).to.equal(storeUrl); + done(); + } + ); + }); + }); + }); +}); - mock.get("http://localhost:8080/api/1/site/url/transform.json?crafterSite=editorial&transformerName=renderUrlToStoreUrl&url=%2Ftechnology", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(storeUrl)); - return res; - }); +describe('Object Utils', () => { + describe('parseDescriptor util', () => { + it('should parse the raw descriptor correctly with different options', () => { + const parsedDescriptor = parseDescriptor(item, { parseFieldValueTypes: true }); + expect(parsedDescriptor).to.not.be.null; + expect(parsedDescriptor.selected_b).to.equal(true); + expect(parsedDescriptor.craftercms.label).to.equal(parsedItem.craftercms.label); + expect(parsedDescriptor.hero_image).to.not.be.undefined; + expect(parsedDescriptor.craftercms.dateCreated).to.not.be.null; + expect(parsedDescriptor).to.deep.equal(parsedItem); + + const parsedDescriptorWOptions = parseDescriptor(item, { + parseFieldValueTypes: false, + systemPropMap: { 'internal-name': 'itemName' }, + ignoredProps: ['hero_image'], + systemProps: ['internal-name', 'disabled', 'objectId'] + }); + expect(parsedDescriptorWOptions.selected_b).to.equal("true"); + // @ts-ignore - systemProp 'label' has been changed to 'itemName' + expect(parsedDescriptorWOptions.craftercms.itemName).to.equal(parsedItem.craftercms.label); + // 'hero_image' was set to be ignored in the options + expect(parsedDescriptorWOptions.hero_image).to.be.undefined; + // 'dateCreated' was not added in the systemProps in the options + expect(parsedDescriptorWOptions.craftercms.dateCreated).to.be.null; + }); + }); - UrlTransformationService.transform("renderUrlToStoreUrl", "/technology", crafterConf.getConfig()) - .subscribe((url) => { - assert.equal(url, storeUrl); - done(); - }) + describe('parseProps util', () => { + it('should parse a set of props correctly with different options', () => { + let parsed: ContentInstance = { + craftercms: { + id: null, + path: null, + label: null, + contentTypeId: null, + dateCreated: null, + dateModified: null, + disabled: false + } + }; + const parsedProps = parseProps(descriptor.page, parsed,{ parseFieldValueTypes: true }); + expect(parsedProps).to.not.be.null; + expect(parsedProps.selected_b).to.equal(true); + expect(parsedProps.craftercms.label).to.equal(parsedItem.craftercms.label); + expect(parsedProps.hero_image).to.equal(parsedItem.hero_image); + expect(parsedProps.craftercms.dateCreated).to.equal(parsedItem.craftercms.dateCreated); + + const parsedPropsWOptions = parseProps(descriptor.page, parsed, { + parseFieldValueTypes: false, + systemPropMap: { 'internal-name': 'itemName' } }); + expect(parsedPropsWOptions.selected_b).to.equal("true"); + // @ts-ignore - systemProp 'label' has been changed to 'itemName' + expect(parsedPropsWOptions.craftercms.itemName).to.equal(parsedItem.craftercms.label); + }); + }); + + describe('parseFieldValue util', () => { + it('should parse the values based on the propName suffix', () => { + const parsedInteger = parseFieldValue('myInteger_i', '15'); + const parsedFloating = parseFieldValue('myFloating_f', '15.5'); + const parsedBoolean = parseFieldValue('myBoolean_b', 'true'); + const parsedString = parseFieldValue('myString_s', 'myString'); + const parsedDate = parseFieldValue('myDate_dt', '2021-10-20T00:00:00Z'); + + expect(parsedInteger).to.equal(15); + expect(parsedFloating).to.equal(15.5); + expect(parsedBoolean).to.equal(true); + expect(parsedString).to.equal('myString'); + expect(parsedDate).to.equal('2021-10-20T00:00:00Z'); + }); + }); + describe('extractContent util', () => { + it('should extract the content from the descriptor, independently if the data is a descriptor or an item', () => { + const contentFromDescriptor = extractContent(descriptor); + const contentFromItem = extractContent(item); + expect({ ...contentFromDescriptor, path: item.url }).to.deep.equal(contentFromItem); }); + }); + describe('preParseSearchResults util', () => { + it('should pre-parse the search results correctly', () => { + const preParsedSearchResult = preParseSearchResults(unparsedSearchHit); + expect(preParsedSearchResult).to.not.be.null; + expect(preParsedSearchResult).to.deep.equal = parsedSearchHit; + }); }); }); diff --git a/packages/content/test/mock-responses.ts b/packages/content/test/mock-responses.ts index 6da45dc..0181e98 100644 --- a/packages/content/test/mock-responses.ts +++ b/packages/content/test/mock-responses.ts @@ -14,12 +14,7 @@ * along with this program. If not, see http://www.gnu.org/licenses/. */ -import { item, - descriptor, - children, - tree, - navTree, - navBreadcrumb } from '../../../util/mock-responses-common'; +import { item, descriptor, children, tree, navTree, navBreadcrumb } from '../../../util/mock-responses-common'; export { item, descriptor, children, tree, navTree, navBreadcrumb }; diff --git a/packages/ice/.mocharc.json b/packages/ice/.mocharc.json new file mode 100644 index 0000000..95eb7e8 --- /dev/null +++ b/packages/ice/.mocharc.json @@ -0,0 +1,9 @@ +{ + "loader": "ts-node/esm", + "spec": ["test/*.spec.ts"], + "require": ["assert", "mocha", "ts-node/register"], + "node-option": [ + "no-experimental-fetch", + "loader=ts-node/esm" + ] +} diff --git a/packages/ice/package.json b/packages/ice/package.json index cdf282f..36c6d27 100644 --- a/packages/ice/package.json +++ b/packages/ice/package.json @@ -23,11 +23,18 @@ "rollup": "../../node_modules/rollup/bin/rollup -c rollup.config.js", "build:ts": "tsc -p tsconfig.build.json", "clean:ts": "../../node_modules/rimraf/bin.js ts-out", - "build": "npm run build:ts && npm run rollup && npm run clean:ts" + "build": "npm run build:ts && npm run rollup && npm run clean:ts", + "test": "mocha" }, "devDependencies": { "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", + "@testing-library/react": "^14.0.0", + "enzyme": "^3.11.0", + "jsdom": "^22.1.0", + "mocha": "^10.2.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", "rollup": "^2.79.1", "rollup-plugin-sourcemaps": "^0.5.0", "terser": "^5.30.1" diff --git a/packages/ice/test/index.spec.ts b/packages/ice/test/index.spec.ts new file mode 100644 index 0000000..f0c1733 --- /dev/null +++ b/packages/ice/test/index.spec.ts @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2007-2023 Crafter Software Corporation. All Rights Reserved. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + */ + +import 'mocha'; +import { expect } from 'chai'; +import { crafterConf } from '@craftercms/classes'; +import { fetchIsAuthoring, getICEAttributes, getDropZoneAttributes } from '@craftercms/ice'; +import { useDropZone, useICE } from '@craftercms/ice/react'; +import { iCEAttributes, model } from './mock-responses'; +import * as nock from 'nock'; +import { renderHook } from '@testing-library/react'; +import { JSDOM } from 'jsdom'; + +// https://github.com/nock/nock/issues/2397 +import fetch, { Headers, Request, Response } from 'node-fetch'; +import { beforeEach } from 'mocha'; + +if (!globalThis.fetch) { + (globalThis as any).fetch = fetch; + (globalThis as any).Headers = Headers; + (globalThis as any).Request = Request; + (globalThis as any).Response = Response; +} + +const dom = new JSDOM(''); +declare var global: any; +(global as any).document = dom.window.document; +(global as any).window = dom.window; + +crafterConf.configure({ + baseUrl: 'http://localhost:8080', + site: 'editorial' +}); + +describe('Crafter CMS ICE', () => { + beforeEach(() => { + // replace the real XHR object with the mock XHR object before each test + if (!nock.isActive()) { + nock.activate(); + } + }); + // put the real XHR object back and clear the mocks after each test + afterEach(() => nock.cleanAll()); + + describe('getICEAttributes', () => { + // Test the getICEAttributes function, given a model, check that the correct ICE attributes are returned + it('should return the correct ICE attributes for a model', () => { + const attributes = getICEAttributes({ model }); + expect(attributes).to.include.keys('data-studio-ice'); + expect(attributes).to.include.keys('data-studio-ice-path'); + expect(attributes).to.include.keys('data-studio-ice-label'); + expect(attributes).to.include.keys('data-studio-component'); + expect(attributes).to.include.keys('data-studio-component-path'); + expect(attributes).to.deep.equal(iCEAttributes); + }); + it('should return an empty object if the model is not complete', () => { + const incompleteModel = { + craftercms: { + id: null, + path: null, + label: null, + dateCreated: null, + dateModified: null, + contentTypeId: null, + disabled: null + } + } + const attributes = getICEAttributes({ model: incompleteModel }); + expect(attributes).to.be.empty; + }); + }); + + describe('getDropZoneAttributes', () => { + // Test the getDropZoneAttributes function, given a model and zone name, check that the correct drop zone attributes + // are returned. If isAuthoring is false, the function should return an empty object + it('should return the correct drop zone attributes', () => { + const attributesAuthoring = getDropZoneAttributes({ + model, + zoneName: 'testZone' + }); + const attributesNoAuthoring = getDropZoneAttributes({ + model, + zoneName: 'testZone', + isAuthoring: false + }); + expect(attributesAuthoring['data-studio-components-target']).to.equal('testZone'); + expect(attributesAuthoring['data-studio-components-objectid']).to.equal(model.craftercms.id); + expect(attributesAuthoring['data-studio-zone-content-type']).to.equal(model.craftercms.contentTypeId); + expect(attributesNoAuthoring).to.be.empty; + }); + }); + + describe('fetchIsAuthoring', () => { + // Test the fetchIsAuthoring function to return the preview value, given a CrafterCMS configuration with a mocked GET request. + it('should return true if the site is in authoring mode', (done) => { + nock('http://localhost:8080') + .get('/api/1/config/preview.json') + .query({ + crafterSite: 'editorial' + }) + .reply(200, { preview: true }); + + fetchIsAuthoring().then((isAuthoring) => { + expect(isAuthoring).to.be.true; + done(); + }); + }); + }); + + describe('useICE', () => { + // Test the useICE hook, given a model, check that the correct ICE attributes are returned + it('should return the ICE attributes for a model using the useICE hook', () => { + const { result } = renderHook(() => useICE({ model })); + expect(result.current.props).to.include.keys('data-studio-ice'); + expect(result.current.props).to.include.keys('data-studio-ice-path'); + expect(result.current.props).to.include.keys('data-studio-ice-label'); + expect(result.current.props).to.include.keys('data-studio-component'); + expect(result.current.props).to.include.keys('data-studio-component-path'); + expect(result.current.props).to.deep.equal(iCEAttributes); + }); + }); + + describe('useDropZone', () => { + // Test the useDropZone hook, given a model and zone name, check that the correct drop zone attributes are returned + it('should return the drop zone attributes for a model using the useDropZone hook', () => { + const { result } = renderHook(() => useDropZone({ model, zoneName: 'testZone' })); + expect(result.current.props['data-studio-components-target']).to.equal('testZone'); + expect(result.current.props['data-studio-components-objectid']).to.equal(model.craftercms.id); + expect(result.current.props['data-studio-zone-content-type']).to.equal(model.craftercms.contentTypeId); + }); + }); +}); diff --git a/packages/ice/test/mock-responses.ts b/packages/ice/test/mock-responses.ts new file mode 100644 index 0000000..763805e --- /dev/null +++ b/packages/ice/test/mock-responses.ts @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2007-2023 Crafter Software Corporation. All Rights Reserved. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + */ + +export const model = { + craftercms: { + id: '8d7f21fa-5e09-00aa-8340-853b7db302da', + path: '/site/website/index.xml', + label: 'Home', + contentTypeId: '/page/page-home', + dateCreated: '2017-01-31T16:18:14.000Z', + dateModified: '2018-07-19T23:40:32.152Z', + disabled: false, + sourceMap: { + siteLogo: '/component/level-descriptor' + }, + placeInNav: false, + orderInNav: -1 + }, + siteLogo: '/static-assets/images/crafer-video-logo-dark.svg', + site_Title_t: 'Home' +}; + +export const iCEAttributes = { + 'data-studio-ice': '', + 'data-studio-ice-path': '/site/website/index.xml', + 'data-studio-ice-label': 'Home', + 'data-studio-component': '/site/website/index.xml', + 'data-studio-component-path': '/site/website/index.xml' +}; diff --git a/packages/redux/.mocharc.json b/packages/redux/.mocharc.json new file mode 100644 index 0000000..8f8927c --- /dev/null +++ b/packages/redux/.mocharc.json @@ -0,0 +1,10 @@ +{ + "loader": "ts-node/esm", + "spec": ["test/*.spec.ts"], + "require": ["assert", "mocha", "ts-node/register"], + "node-option": [ + "no-experimental-fetch", + "loader=ts-node/esm" + ] +} + diff --git a/packages/redux/package.json b/packages/redux/package.json index 7bbf5f3..93e85a7 100644 --- a/packages/redux/package.json +++ b/packages/redux/package.json @@ -22,7 +22,7 @@ "build:ts": "tsc -p tsconfig.build.json", "clean:ts": "../../node_modules/rimraf/bin.js ts-out", "build": "npm run build:ts && npm run rollup && npm run clean:ts", - "test": "../../node_modules/mocha/bin/mocha --opts ../../default.opts \"test/*.spec.ts\"" + "test": "mocha" }, "dependencies": { "@craftercms/content": "0.0.0-PLACEHOLDER", @@ -34,11 +34,15 @@ "devDependencies": { "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", - "@types/mocha": "^7.0.2", - "mocha": "^7.2.0", + "@types/mocha": "^10.0.6", + "chai": "^4.3.10", + "mocha": "^10.2.0", + "nock": "^13.3.3", + "node-fetch": "2", "rollup": "^2.79.1", "rollup-plugin-sourcemaps": "^0.5.0", "terser": "^5.30.1", + "ts-node": "^10.9.1", "tslib": "^2.6.2", "xhr-mock": "^2.5.1" } diff --git a/packages/redux/test/index.spec.ts b/packages/redux/test/index.spec.ts index aa6a904..0be8196 100644 --- a/packages/redux/test/index.spec.ts +++ b/packages/redux/test/index.spec.ts @@ -18,7 +18,6 @@ import 'mocha'; import 'url-search-params-polyfill'; import { expect } from 'chai'; -import { SearchService } from '@craftercms/search'; import { crafterConf } from '@craftercms/classes'; import { @@ -51,254 +50,225 @@ import { searchComplete } from '@craftercms/redux'; -import { - item, - descriptor, - children, - navItem, - navBreadcrumb, - tree -} from './mock-responses'; +import { item, descriptor, children, navItem, navBreadcrumb, tree } from './mock-responses'; + +import * as nock from 'nock'; +import { of } from 'rxjs'; +// https://github.com/nock/nock/issues/2397 +import fetch, { Headers, Request, Response } from 'node-fetch'; -import mock from 'xhr-mock'; -import MockRequest from "xhr-mock/lib/MockRequest"; -import MockResponse from "xhr-mock/lib/MockResponse"; -import { ActionsObservable } from 'redux-observable'; +if (!globalThis.fetch) { + (globalThis as any).fetch = fetch; + (globalThis as any).Headers = Headers; + (globalThis as any).Request = Request; + (globalThis as any).Response = Response; +} crafterConf.configure({ + baseUrl: 'http://localhost:8080', site: 'editorial' -}) +}); describe('Crafter CMS Redux', () => { let store; beforeEach(() => { store = createReduxStore(); - // replace the real XHR object with the mock XHR object before each test - mock.setup(); + if (!nock.isActive()) { + nock.activate(); + } }); // put the real XHR object back and clear the mocks after each test - afterEach(() => mock.teardown()); + afterEach(() => nock.cleanAll()); describe('ACTIONS', () => { - describe('getItem Action', () => { - it('should return the expected GET_ITEM action', done => { + it('should return the expected GET_ITEM action', (done) => { let url = '/site/website/index.xml', - expectedAction = { - type: 'CRAFTERCMS_GET_ITEM', - payload: url - }; - + expectedAction = { + type: 'GET_ITEM', + payload: url + }; const action = getItem(url); - expect(action).to.deep.equal(expectedAction); done(); }); }); describe('getItemComplete Action', () => { - it('should return the expected GET_ITEM_COMPLETE action', done => { + it('should return the expected GET_ITEM_COMPLETE action', (done) => { let expectedAction = { - type: "CRAFTERCMS_GET_ITEM_COMPLETE", - payload: item - }; - + type: 'GET_ITEM_COMPLETE', + payload: item + }; const action = getItemComplete(item); - expect(action).to.deep.equal(expectedAction); done(); }); }); describe('getDescriptor Action', () => { - it('should return the expected GET_DESCRIPTOR action', done => { + it('should return the expected GET_DESCRIPTOR action', (done) => { let url = '/site/website/index.xml', - expectedAction = { - type: 'CRAFTERCMS_GET_DESCRIPTOR', - payload: url - }; - + expectedAction = { + type: 'GET_DESCRIPTOR', + payload: url + }; const action = getDescriptor(url); - expect(action).to.deep.equal(expectedAction); done(); }); }); describe('getDescriptorComplete Action', () => { - it('should return the expected GET_DESCRIPTOR_COMPLETE action', done => { + it('should return the expected GET_DESCRIPTOR_COMPLETE action', (done) => { let url: '/site/website/index.xml', - expectedAction = { - type: "CRAFTERCMS_GET_DESCRIPTOR_COMPLETE", - payload: {descriptor, url} - }; - - const action = getDescriptorComplete({descriptor, url}); - + expectedAction = { + type: 'GET_DESCRIPTOR_COMPLETE', + payload: { descriptor, url } + }; + const action = getDescriptorComplete({ descriptor, url }); expect(action).to.deep.equal(expectedAction); done(); }); }); describe('getChildren Action', () => { - it('should return the expected GET_CHILDREN action', done => { + it('should return the expected GET_CHILDREN action', (done) => { let url = '/site/website/', - expectedAction = { - type: 'CRAFTERCMS_GET_CHILDREN', - payload: url - }; - + expectedAction = { + type: 'GET_CHILDREN', + payload: url + }; const action = getChildren(url); - expect(action).to.deep.equal(expectedAction); done(); }); }); describe('getChildrenComplete Action', () => { - it('should return the expected GET_CHILDREN_COMPLETE action', done => { + it('should return the expected GET_CHILDREN_COMPLETE action', (done) => { let url: '/site/website/index.xml', - expectedAction = { - type: "CRAFTERCMS_GET_CHILDREN_COMPLETE", - payload: { - url, - children - } - }; - - const action = getChildrenComplete({children, url}); - + expectedAction = { + type: 'GET_CHILDREN_COMPLETE', + payload: { + url, + children + } + }; + const action = getChildrenComplete({ children, url }); expect(action).to.deep.equal(expectedAction); done(); }); }); describe('getTree Action', () => { - it('should return the expected GET_TREE action', done => { + it('should return the expected GET_TREE action', (done) => { let url = '/site/website/', - expectedAction = { - type: 'CRAFTERCMS_GET_TREE', - payload: { - depth: 1, - url: url - } - }; - - const action = getTree(url); - + expectedAction = { + type: 'GET_TREE', + payload: { + url: url + } + }; + const action = getTree({ url }); expect(action).to.deep.equal(expectedAction); done(); }); }); describe('getTreeComplete Action', () => { - it('should return the expected GET_TREE_COMPLETE action', done => { + it('should return the expected GET_TREE_COMPLETE action', (done) => { let expectedAction = { - type: "CRAFTERCMS_GET_TREE_COMPLETE", - payload: item - }; - + type: 'GET_TREE_COMPLETE', + payload: item + }; const action = getTreeComplete(item); - expect(action).to.deep.equal(expectedAction); done(); }); }); describe('getNavTree Action', () => { - it('should return the expected GET_NAV action', done => { + it('should return the expected GET_NAV action', (done) => { let url = '/site/website/', - expectedAction = { - type: "CRAFTERCMS_GET_NAV", - payload: { - url, - depth: 1, - currentPageUrl: "" - } - }; - - const action = getNav(url); - + expectedAction = { + type: 'GET_NAV', + payload: { + url + } + }; + const action = getNav({ url }); expect(action).to.deep.equal(expectedAction); done(); }); }); describe('getNavTreeComplete Action', () => { - it('should return the expected GET_NAV_TREE_COMPLETE action', done => { + it('should return the expected GET_NAV_TREE_COMPLETE action', (done) => { let url: '/site/website/index.xml', - expectedAction = { - type: "CRAFTERCMS_GET_NAV_COMPLETE", - payload: navItem - }; - + expectedAction = { + type: 'GET_NAV_COMPLETE', + payload: navItem + }; const action = getNavComplete(navItem); - expect(action).to.deep.equal(expectedAction); done(); }); }); describe('getNavBreadcrumb Action', () => { - it('should return the expected GET_NAV_BREADCRUMB action', done => { + it('should return the expected GET_NAV_BREADCRUMB action', (done) => { let url = '/site/website/', - expectedAction = { - type: "CRAFTERCMS_GET_NAV_BREADCRUMB", - payload: { - url, - root: "" - } - }; - - const action = getNavBreadcrumb(url); - + expectedAction = { + type: 'GET_NAV_BREADCRUMB', + payload: { + url + } + }; + const action = getNavBreadcrumb({ url }); expect(action).to.deep.equal(expectedAction); done(); }); }); describe('getNavBreadcrumbComplete Action', () => { - it('should return the expected GET_NAV_BREADCRUMB_COMPLETE action', done => { + it('should return the expected GET_NAV_BREADCRUMB_COMPLETE action', (done) => { let url: '/site/website/index.xml', - expectedAction = { - type: "CRAFTERCMS_GET_NAV_BREADCRUMB_COMPLETE", - payload: { - breadcrumb: navBreadcrumb, - url - } - }; - + expectedAction = { + type: 'GET_NAV_BREADCRUMB_COMPLETE', + payload: { + breadcrumb: navBreadcrumb, + url + } + }; const action = getNavBreadcrumbComplete({ breadcrumb: navBreadcrumb, url }); - expect(action).to.deep.equal(expectedAction); done(); }); }); - }); describe('REDUCERS', () => { - describe('getItem Reducer', () => { - it('should return the expected GET_ITEM reducer', done => { + it('should return the expected GET_ITEM reducer', (done) => { let url = '/site/website/index.xml', - action = { - type: 'CRAFTERCMS_GET_ITEM', - payload: url + action = { + type: 'GET_ITEM', + payload: url + }, + expectedState = { + loading: { + [url]: true }, - expectedState = { - loading: { - [url]: true - }, - entries: {} - }; + entries: {} + }; let newState = itemsReducer(undefined, action); expect(newState).to.deep.equal(expectedState); @@ -307,19 +277,22 @@ describe('Crafter CMS Redux', () => { }); describe('getItemComplete Reducer', () => { - it('should return the expected GET_ITEM_COMPLETE reducer', done => { + it('should return the expected GET_ITEM_COMPLETE reducer', (done) => { let action = { - type: 'CRAFTERCMS_GET_ITEM_COMPLETE', - payload: item + type: 'GET_ITEM_COMPLETE', + payload: { + item, + url: item.url + } + }, + expectedState = { + loading: { + [item.url]: false }, - expectedState = { - loading: { - [item.url]: false - }, - entries: { - [item.url]: item - } - }; + entries: { + [item.url]: item + } + }; let newState = itemsReducer(undefined, action); expect(newState).to.deep.equal(expectedState); @@ -328,18 +301,18 @@ describe('Crafter CMS Redux', () => { }); describe('getDescriptor Reducer', () => { - it('should return the expected GET_DESCRIPTOR reducer', done => { + it('should return the expected GET_DESCRIPTOR reducer', (done) => { let url = '/site/website/index.xml', - action = { - type: 'CRAFTERCMS_GET_DESCRIPTOR', - payload: url + action = { + type: 'GET_DESCRIPTOR', + payload: url + }, + expectedState = { + loading: { + [url]: true }, - expectedState = { - loading: { - [url]: true - }, - entries: {} - }; + entries: {} + }; let newState = descriptorsReducer(undefined, action); expect(newState).to.deep.equal(expectedState); @@ -348,20 +321,20 @@ describe('Crafter CMS Redux', () => { }); describe('getDescriptorComplete Reducer', () => { - it('should return the expected GET_DESCRIPTOR_COMPLETE reducer', done => { + it('should return the expected GET_DESCRIPTOR_COMPLETE reducer', (done) => { let url = '/site/website', - action = { - type: 'CRAFTERCMS_GET_DESCRIPTOR_COMPLETE', - payload: { descriptor, url } + action = { + type: 'GET_DESCRIPTOR_COMPLETE', + payload: { descriptor, url } + }, + expectedState = { + loading: { + [url]: false }, - expectedState = { - loading: { - [url]: false - }, - entries: { - [url]: descriptor - } - }; + entries: { + [url]: descriptor + } + }; let newState = descriptorsReducer(undefined, action); expect(newState).to.deep.equal(expectedState); @@ -370,18 +343,18 @@ describe('Crafter CMS Redux', () => { }); describe('getChildren Reducer', () => { - it('should return the expected GET_CHILDREN reducer', done => { + it('should return the expected GET_CHILDREN reducer', (done) => { let url = '/site/website', - action = { - type: 'CRAFTERCMS_GET_CHILDREN', - payload: url + action = { + type: 'GET_CHILDREN', + payload: url + }, + expectedState = { + loading: { + [url]: true }, - expectedState = { - loading: { - [url]: true - }, - entries: {} - }; + entries: {} + }; let newState = childrenReducer(undefined, action); expect(newState).to.deep.equal(expectedState); @@ -390,20 +363,20 @@ describe('Crafter CMS Redux', () => { }); describe('getChildrenComplete Reducer', () => { - it('should return the expected GET_CHIDREN_COMPLETE reducer', done => { + it('should return the expected GET_CHIDREN_COMPLETE reducer', (done) => { let url = '/site/website', - action = { - type: 'CRAFTERCMS_GET_CHILDREN_COMPLETE', - payload: { children, url } + action = { + type: 'GET_CHILDREN_COMPLETE', + payload: { children, url } + }, + expectedState = { + loading: { + [url]: false }, - expectedState = { - loading: { - [url]: false - }, - entries: { - [url]: children - } - }; + entries: { + [url]: children + } + }; let newState = childrenReducer(undefined, action); expect(newState).to.deep.equal(expectedState); @@ -412,19 +385,19 @@ describe('Crafter CMS Redux', () => { }); describe('getTree Reducer', () => { - it('should return the expected GET_TREE reducer', done => { + it('should return the expected GET_TREE reducer', (done) => { let url = '/site/website', - action = { - type: 'CRAFTERCMS_GET_TREE', - payload: {url} + action = { + type: 'GET_TREE', + payload: { url } + }, + expectedState = { + loading: { + [url]: true }, - expectedState = { - loading: { - [url]: true - }, - entries: {}, - childIds: {} - }; + entries: {}, + childIds: {} + }; let newState = treeReducer(undefined, action); expect(newState).to.deep.equal(expectedState); @@ -433,22 +406,25 @@ describe('Crafter CMS Redux', () => { }); describe('getTreeComplete Reducer', () => { - it('should return the expected GET_TREE_COMPLETE reducer', done => { + it('should return the expected GET_TREE_COMPLETE reducer', (done) => { let action = { - type: 'CRAFTERCMS_GET_TREE_COMPLETE', - payload: tree + type: 'GET_TREE_COMPLETE', + payload: { + tree, + url: tree.url + } + }, + expectedState = { + loading: { + [item.url]: false + }, + entries: { + [item.url]: { ...tree, children: null } }, - expectedState = { - loading: { - [item.url]: false - }, - entries: { - [item.url]: { ...tree, children: null } - }, - childIds: { - [item.url]: [] - } - }; + childIds: { + [item.url]: [] + } + }; let newState = treeReducer(undefined, action); expect(newState).to.deep.equal(expectedState); @@ -457,19 +433,19 @@ describe('Crafter CMS Redux', () => { }); describe('getNavTree Reducer', () => { - it('should return the expected GET_NAV reducer', done => { + it('should return the expected GET_NAV reducer', (done) => { let url = '/site/website', - action = { - type: 'CRAFTERCMS_GET_NAV', - payload: {url} + action = { + type: 'GET_NAV', + payload: { url } + }, + expectedState = { + loading: { + [url]: true }, - expectedState = { - loading: { - [url]: true - }, - entries: {}, - childIds: {} - }; + entries: {}, + childIds: {} + }; let newState = navigationReducer(undefined, action); expect(newState).to.deep.equal(expectedState); @@ -478,22 +454,25 @@ describe('Crafter CMS Redux', () => { }); describe('getNavTreeComplete Reducer', () => { - it('should return the expected GET_NAV_COMPLETE reducer', done => { + it('should return the expected GET_NAV_COMPLETE reducer', (done) => { let action = { - type: 'CRAFTERCMS_GET_NAV_COMPLETE', - payload: navItem + type: 'GET_NAV_COMPLETE', + payload: { + nav: navItem, + url: navItem.url + } + }, + expectedState = { + loading: { + [navItem.url]: false + }, + entries: { + [navItem.url]: { ...navItem, subItems: null } }, - expectedState = { - loading: { - [navItem.url]: false - }, - entries: { - [navItem.url]: { ...navItem, subItems: null } - }, - childIds: { - [navItem.url]: [] - } - }; + childIds: { + [navItem.url]: [] + } + }; let newState = navigationReducer(undefined, action); expect(newState).to.deep.equal(expectedState); @@ -502,18 +481,18 @@ describe('Crafter CMS Redux', () => { }); describe('getNavBreadcrumb Reducer', () => { - it('should return the expected GET_NAV_BREADCRUMB reducer', done => { + it('should return the expected GET_NAV_BREADCRUMB reducer', (done) => { let url = '/site/website', - action = { - type: 'CRAFTERCMS_GET_NAV_BREADCRUMB', - payload: {url} + action = { + type: 'GET_NAV_BREADCRUMB', + payload: { url } + }, + expectedState = { + loading: { + [url]: true }, - expectedState = { - loading: { - [url]: true - }, - entries: {} - }; + entries: {} + }; let newState = breadcrumbsReducer(undefined, action); expect(newState).to.deep.equal(expectedState); @@ -522,193 +501,204 @@ describe('Crafter CMS Redux', () => { }); describe('getNavBreadcrumbComplete Reducer', () => { - it('should return the expected GET_NAV_BREADCRUMB_COMPLETE reducer', done => { - let url:string = '/', - action = { - type: 'CRAFTERCMS_GET_NAV_BREADCRUMB_COMPLETE', - payload: { breadcrumb: navBreadcrumb, url } + it('should return the expected GET_NAV_BREADCRUMB_COMPLETE reducer', (done) => { + let url: string = '/', + action = { + type: 'GET_NAV_BREADCRUMB_COMPLETE', + payload: { breadcrumb: navBreadcrumb, url } + }, + expectedState = { + loading: { + [url]: false }, - expectedState = { - loading: { - [url]: false - }, - entries: { - [url]: navBreadcrumb - } - }; + entries: { + [url]: navBreadcrumb + } + }; let newState = breadcrumbsReducer(undefined, action); expect(newState).to.deep.equal(expectedState); done(); }); }); - }); describe('EPICS', () => { - describe('getItem Epic', () => { - it('should return the expected GET_ITEM epic', done => { - - mock.get("http://localhost:8080/api/1/site/content_store/item.json?url=%2Fsite%2Fwebsite%2Findex.xml&crafterSite=editorial", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(item)); - return res; - }); + it('should return the expected GET_ITEM epic', (done) => { + nock('http://localhost:8080') + .get('/api/1/site/content_store/item.json') + .query({ + crafterSite: 'editorial', + url: '/site/website/index.xml' + }) + .reply(200, item); let url = '/site/website/index.xml', - actionObs = ActionsObservable.of({ - type: 'CRAFTERCMS_GET_ITEM', - payload: url - }), - expectedResponse = { - payload: item, - type: 'CRAFTERCMS_GET_ITEM_COMPLETE' - } - - getItemEpic(actionObs) - .subscribe((response) => { - expect(response).to.deep.equal(expectedResponse); + actionObs = of({ + type: 'GET_ITEM', + payload: url + }), + expectedResponse = { + payload: { + item, + url + }, + type: 'GET_ITEM_COMPLETE' + }; + + getItemEpic(actionObs).subscribe(({ payload }) => { + expect(payload).to.deep.equal(expectedResponse.payload); + // expect(payload.url.url === item.url); + // expect(payload.url.descriptorUrl === expectedResponse.payload.url); + // expect(payload).to.deep.equal(expectedResponse.payload); done(); - }) + }); }); }); describe('getDescriptor Epic', () => { - it('should return the expected GET_DESCRIPTOR epic', done => { - - mock.get("http://localhost:8080/api/1/site/content_store/descriptor.json?url=%2Fsite%2Fwebsite%2Findex.xml&crafterSite=editorial", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(descriptor)); - return res; - }); + it('should return the expected GET_DESCRIPTOR epic', (done) => { + nock('http://localhost:8080') + .get('/api/1/site/content_store/descriptor.json') + .query({ + crafterSite: 'editorial', + flatten: false, + url: '/site/website/index.xml' + }) + .reply(200, descriptor); let url = '/site/website/index.xml', - actionObs = ActionsObservable.of({ - type: 'CRAFTERCMS_GET_DESCRIPTOR', - payload: url - }), - expectedResponse = { - payload: {descriptor, url}, - type: 'CRAFTERCMS_GET_DESCRIPTOR_COMPLETE' - } - - getDescriptorEpic(actionObs) - .subscribe((response) => { - expect(response).to.deep.equal(expectedResponse); + actionObs = of({ + type: 'GET_DESCRIPTOR', + payload: url + }), + expectedResponse = { + payload: { descriptor, url }, + type: 'GET_DESCRIPTOR_COMPLETE' + }; + + getDescriptorEpic(actionObs).subscribe((response) => { + expect(response.type).to.equal(expectedResponse.type); + expect(response.payload.descriptor.page.objectId).to.equal(expectedResponse.payload.descriptor.page.objectId); done(); - }) + }); }); }); describe('getChildren Epic', () => { - it('should return the expected GET_CHILDREN epic', done => { - - mock.get("http://localhost:8080/api/1/site/content_store/children.json?url=%2Fsite%2Fwebsite&crafterSite=editorial", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(children)); - return res; - }); + it('should return the expected GET_CHILDREN epic', (done) => { + nock('http://localhost:8080') + .get('/api/1/site/content_store/children.json') + .query({ + crafterSite: 'editorial', + url: '/site/website' + }) + .reply(200, children); let url = '/site/website', - actionObs = ActionsObservable.of({ - type: 'CRAFTERCMS_GET_CHILDREN', - payload: url - }), - expectedResponse = { - payload: {children, url}, - type: 'CRAFTERCMS_GET_CHILDREN_COMPLETE' - } - - getChildrenEpic(actionObs) - .subscribe((response) => { + actionObs = of({ + type: 'GET_CHILDREN', + payload: url + }), + expectedResponse = { + payload: { children, url }, + type: 'GET_CHILDREN_COMPLETE' + }; + + getChildrenEpic(actionObs).subscribe((response) => { expect(response).to.deep.equal(expectedResponse); done(); - }) + }); }); }); describe('getTree Epic', () => { - it('should return the expected GET_TREE epic', done => { - - mock.get("http://localhost:8080/api/1/site/content_store/tree.json?url=%2Fsite%2Fwebsite&depth=1&crafterSite=editorial", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(tree)); - return res; - }); + it('should return the expected GET_TREE epic', (done) => { + nock('http://localhost:8080') + .get('/api/1/site/content_store/tree.json') + .query({ + crafterSite: 'editorial', + depth: 1, + url: '/site/website' + }) + .reply(200, tree); let url = '/site/website', - actionObs = ActionsObservable.of({ - type: 'CRAFTERCMS_GET_TREE', - payload: { url, depth: 1 } - }), - expectedResponse = { - payload: tree, - type: 'CRAFTERCMS_GET_TREE_COMPLETE' - } - - getTreeEpic(actionObs) - .subscribe((response) => { + actionObs = of({ + type: 'GET_TREE', + payload: { url, depth: 1 } + }), + expectedResponse = { + payload: { tree, url }, + type: 'GET_TREE_COMPLETE' + }; + + getTreeEpic(actionObs).subscribe((response) => { expect(response).to.deep.equal(expectedResponse); done(); - }) + }); }); }); describe('getNavTree Epic', () => { - it('should return the expected GET_NAV epic', done => { - - mock.get("http://localhost:8080/api/1/site/navigation/tree.json?crafterSite=editorial&url=%2Fsite%2Fwebsite&depth=1¤tPageUrl=", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(navItem)); - return res; - }); + it('should return the expected GET_NAV epic', (done) => { + nock('http://localhost:8080') + .get('/api/1/site/navigation/tree.json') + .query({ + crafterSite: 'editorial', + currentPageUrl: null, + depth: 1, + url: '/site/website' + }) + .reply(200, navItem); let url = '/site/website', - actionObs = ActionsObservable.of({ - type: 'CRAFTERCMS_GET_NAV', - payload: { url, depth: 1 } - }), - expectedResponse = { - payload: navItem, - type: 'CRAFTERCMS_GET_NAV_COMPLETE' - } + actionObs = of({ + type: 'GET_NAV', + payload: { url, depth: 1 } + }), + expectedResponse = { + payload: { + nav: navItem, + url + }, + type: 'GET_NAV_COMPLETE' + }; - getNavEpic(actionObs) - .subscribe((response) => { + getNavEpic(actionObs).subscribe((response) => { expect(response).to.deep.equal(expectedResponse); done(); - }) + }); }); }); describe('getNavBreadcrumb Epic', () => { - it('should return the expected GET_NAV_BREADCRUMB epic', done => { - - mock.get("http://localhost:8080/api/1/site/navigation/breadcrumb.json?crafterSite=editorial&url=%2Fsite%2Fwebsite%2Findex.xml&root=", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(navBreadcrumb)); - return res; - }); + it('should return the expected GET_NAV_BREADCRUMB epic', (done) => { + nock('http://localhost:8080') + .get('/api/1/site/navigation/breadcrumb.json') + .query({ + crafterSite: 'editorial', + url: '/site/website/index.xml', + root: null + }) + .reply(200, navBreadcrumb); let url = '/site/website/index.xml', - actionObs = ActionsObservable.of({ - type: 'CRAFTERCMS_GET_NAV_BREADCRUMB', - payload: { url } - }), - expectedResponse = { - payload: { breadcrumb: navBreadcrumb, url }, - type: 'CRAFTERCMS_GET_NAV_BREADCRUMB_COMPLETE' - } - - getNavBreadcrumbEpic(actionObs) - .subscribe((response) => { + actionObs = of({ + type: 'GET_NAV_BREADCRUMB', + payload: { url } + }), + expectedResponse = { + payload: { breadcrumb: navBreadcrumb, url }, + type: 'GET_NAV_BREADCRUMB_COMPLETE' + }; + + getNavBreadcrumbEpic(actionObs).subscribe((response) => { expect(response).to.deep.equal(expectedResponse); done(); - }) + }); }); }); - }); - }); diff --git a/packages/redux/test/mock-responses.ts b/packages/redux/test/mock-responses.ts index e1883ca..1597c32 100644 --- a/packages/redux/test/mock-responses.ts +++ b/packages/redux/test/mock-responses.ts @@ -14,17 +14,14 @@ * along with this program. If not, see http://www.gnu.org/licenses/. */ -import { item, - descriptor, - children, - navBreadcrumb } from '../../../util/mock-responses-common'; +import { item, descriptor, children, navBreadcrumb } from '../../../util/mock-responses-common'; export { item, descriptor, children, navBreadcrumb }; -export const tree = { ...item, children: [] } +export const tree = { ...item, children: [] }; export const navItem = { - url: "/", + url: '/', active: true, subItems: [] -} +}; diff --git a/packages/search/.mocharc.json b/packages/search/.mocharc.json new file mode 100644 index 0000000..f0b05e7 --- /dev/null +++ b/packages/search/.mocharc.json @@ -0,0 +1,6 @@ +{ + "loader": "ts-node/esm", + "spec": ["test/*.spec.ts"], + "require": ["assert", "mocha", "ts-node/register"] +} + diff --git a/packages/search/package.json b/packages/search/package.json index 2e3457b..26094a4 100644 --- a/packages/search/package.json +++ b/packages/search/package.json @@ -22,7 +22,7 @@ "build:ts": "tsc -p tsconfig.build.json", "clean:ts": "../../node_modules/rimraf/bin.js ts-out", "build": "npm run build:ts && npm run rollup && npm run clean:ts", - "test": "../../node_modules/mocha/bin/mocha --opts ../../default.opts \"test/*.spec.ts\"" + "test": "mocha" }, "dependencies": { "@craftercms/classes": "0.0.0-PLACEHOLDER", @@ -34,11 +34,15 @@ "devDependencies": { "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", - "@types/mocha": "^7.0.2", - "mocha": "^7.2.0", + "@types/mocha": "^10.0.6", + "chai": "^4.3.8", + "mocha": "^10.2.0", + "nock": "^13.3.3", "rollup": "^2.79.1", "rollup-plugin-sourcemaps": "^0.5.0", + "ts-node": "^10.9.1", "terser": "^5.30.1", - "xhr-mock": "^2.5.1" + "xhr-mock": "^2.5.1", + "xhr2": "^0.2.1" } } diff --git a/packages/search/test/index.spec.ts b/packages/search/test/index.spec.ts index d31422f..f348e57 100644 --- a/packages/search/test/index.spec.ts +++ b/packages/search/test/index.spec.ts @@ -14,94 +14,147 @@ * along with this program. If not, see http://www.gnu.org/licenses/. */ -import * as assert from 'assert'; import { SearchService } from '@craftercms/search'; import { crafterConf } from '@craftercms/classes'; -import 'mocha'; import 'url-search-params-polyfill'; -import { Query } from "../src/query"; +import { Query } from '../src/query'; +import {noResultsResponse, searchResponse} from './mock-responses'; +import * as xhr2 from 'xhr2'; +import * as nock from 'nock'; +import { expect } from 'chai'; -import mock from 'xhr-mock'; -import MockRequest from "xhr-mock/lib/MockRequest"; -import MockResponse from "xhr-mock/lib/MockResponse"; -import { searchResponse } from './mock-responses'; +// @ts-ignore - Setting global XMLHttpRequest for testing (not available on node) +global.XMLHttpRequest = xhr2.XMLHttpRequest; crafterConf.configure({ + baseUrl: 'http://localhost:8080', site: 'editorial' -}) +}); describe('Search Client', () => { - // replace the real XHR object with the mock XHR object before each test - beforeEach(() => mock.setup()); + beforeEach(() => { + if (!nock.isActive()) { + nock.activate(); + } + }); // put the real XHR object back and clear the mocks after each test - afterEach(() => mock.teardown()); + afterEach(() => { + nock.cleanAll(); + }); + const { baseUrl, site: crafterSite, endpoints } = crafterConf.getConfig(); describe('search', () => { + it('should find all documents', (done) => { + nock(baseUrl) + .post(endpoints.SEARCH) + .query({ + crafterSite + }) + .reply(200, { hits: searchResponse }); - it('should find all documents', done => { - mock.post("http://localhost:8080/api/1/site/search/search.json", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(searchResponse)); - return res; - }); - - const query = SearchService.createQuery({ 'uuid': '12345' }); + const query = SearchService.createQuery({ uuid: '12345' }); query.query = { - "query" : { - "match_all" : {} + query: { + match_all: {} } }; - SearchService.search(query, crafterConf.getConfig()).toPromise().then(result => { - assert.equal(result.response.numFound, searchResponse.response.numFound); - done(); - }).catch(error => { - done(error); + SearchService.search(query).subscribe({ + next: (result) => { + expect(result.total.value).to.equal(searchResponse.total.value); + expect(result.hits[0]._source.objectId).to.equal('cb760193-06a0-e1d9-6653-0f0dd1e2650e'); + done(); + }, + error: (error) => { + done(error); + } }); }); - it('should apply all filters', done => { - mock.post("http://localhost:8080/api/1/site/search/search.json", - (req: MockRequest, res: MockResponse) => { - res.body(JSON.stringify(searchResponse)); - return res; - }); + it('should apply all filters', (done) => { + nock(baseUrl) + .post(endpoints.SEARCH) + .query({ + crafterSite + }) + .reply(200, { hits: searchResponse }); - var query = SearchService.createQuery({ 'uuid': '12345' }); + const query = SearchService.createQuery({ uuid: '12345' }); query.query = { - "query" : { - "bool": { - "filter": [ + query: { + bool: { + filter: [ { - "bool": { - "should": [ + bool: { + should: [ { - "match": { - "content-type": "/page/article" + match: { + 'content-type': '/page/article' } } - ], + ] } }, { - "match": { - "featured_b": true + match: { + featured_b: true } } ] } } }; - SearchService.search(query, crafterConf.getConfig()).toPromise().then(result => { - assert.equal(result.response.numFound, searchResponse.response.numFound); - done(); - }).catch(error => { - done(error); + SearchService.search(query).subscribe({ + next: (result) => { + expect(result.total.value).to.equal(searchResponse.total.value); + done(); + }, + error: (error) => { + done(error); + } }); }); - }); + it('should return no results with a query that doesn\'t match any items', (done) => { + nock(baseUrl) + .post(endpoints.SEARCH) + .query({ + crafterSite + }) + .reply(200, { hits: noResultsResponse }); + const query = SearchService.createQuery({ + uuid: '23456', + query: { + bool: { + filter: [ + { + bool: { + should: [ + { + match: { + 'content-type': '/page/non-existing' + } + } + ] + } + } + ] + } + } + }); + + SearchService.search(query).subscribe({ + next: (result) => { + expect(result.total.value).to.equal(noResultsResponse.total.value); + done(); + }, + error: (error) => { + done(error); + } + }) + }); + }); }); diff --git a/packages/search/test/mock-responses.ts b/packages/search/test/mock-responses.ts index b7c1ce5..501be90 100644 --- a/packages/search/test/mock-responses.ts +++ b/packages/search/test/mock-responses.ts @@ -15,34 +15,60 @@ */ export const searchResponse = { - "responseHeader": { - "status": 0, - "QTime": 1, - "params": { - "q": "*", - "fl": "localId", - "fq": [ - "content-type:\"page/article\"", - "-disabled:\"true\"", - "-expired_dt:[* TO NOW]" + total: { + value: 33, + relation: 'eq' + }, + max_score: 1, + hits: [ + { + _index: 'editorial-preview_v1', + _id: 'bdbe541a5b59b0898eee7a581472dd16', + _score: 1, + _source: { + "createdDate_dt": "2017-03-28T22:27:45.000Z", + "crafterPublishedDate_dt": "2024-04-03T17:14:25.648473023Z", + "rootId": "editorial:/site/components/articles-widget/latest-articles-widget.xml", + "lastModifiedDate": "2017-03-28T22:27:45.000Z", + "internal-name": "Latest Articles Widget", + "objectGroupId": "cb76", + "localId": "/site/components/articles-widget/latest-articles-widget.xml", + "max_articles_i": "3", + "crafterSite": "editorial", + "crafterPublishedDate": "2024-04-03T17:14:25.648473023Z", + "createdDate": "2017-03-28T22:27:45.000Z", + "lastModifiedDate_dt": "2017-03-28T22:27:45.000Z", + "merge-strategy": "inherit-levels", + "title_t": "Latest Articles", + "content-type": "/component/articles-widget", + "display-template": "/templates/web/components/articles-widget.ftl", + "id": "editorial:/site/components/articles-widget/latest-articles-widget.xml", + "file-name": "latest-articles-widget.xml", + "inheritsFrom_smv": [ + "/crafter-level-descriptor.level.xml", + "/site/crafter-level-descriptor.level.xml", + "/site/components/crafter-level-descriptor.level.xml", + "/site/components/articles-widget/crafter-level-descriptor.level.xml" ], - "index_id": "editorial", - "rows": "2", - "wt": "javabin", - "version": "2" - } - }, - "response": { - "start": 0, - "maxScore": null, - "numFound": 9, - "documents": [ - { - "localId": "/site/website/articles/2017/1/men-styles-for-winter/index.xml" - }, - { - "localId": "/site/website/articles/2017/1/women-styles-for-winter/index.xml" + "objectId": "cb760193-06a0-e1d9-6653-0f0dd1e2650e", + "scripts_o": { + "item": [ + { + "value": "latest-articles.groovy", + "key": "/scripts/components/latest-articles.groovy" + } + ] } - ] + } } + ] +}; + +export const noResultsResponse = { + total: { + value: 0, + relation: "eq" + }, + max_score: null, + hits: [] }; diff --git a/packages/utils/.mocharc.json b/packages/utils/.mocharc.json new file mode 100644 index 0000000..8f8927c --- /dev/null +++ b/packages/utils/.mocharc.json @@ -0,0 +1,10 @@ +{ + "loader": "ts-node/esm", + "spec": ["test/*.spec.ts"], + "require": ["assert", "mocha", "ts-node/register"], + "node-option": [ + "no-experimental-fetch", + "loader=ts-node/esm" + ] +} + diff --git a/packages/utils/package.json b/packages/utils/package.json index 1a11cc6..8ac9d52 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -21,11 +21,13 @@ "rollup": "../../node_modules/rollup/bin/rollup -c rollup.config.js", "build:ts": "tsc -p tsconfig.build.json", "clean:ts": "../../node_modules/rimraf/bin.js ts-out", - "build": "npm run build:ts && npm run rollup && npm run clean:ts" + "build": "npm run build:ts && npm run rollup && npm run clean:ts", + "test": "mocha" }, "devDependencies": { "@rollup/plugin-commonjs": "^25.0.7", "@rollup/plugin-node-resolve": "^15.2.3", + "mocha": "^10.2.0", "rollup": "^2.79.1", "rollup-plugin-sourcemaps": "^0.5.0", "terser": "^5.30.1" diff --git a/packages/utils/test/index.spec.ts b/packages/utils/test/index.spec.ts new file mode 100644 index 0000000..d54e04e --- /dev/null +++ b/packages/utils/test/index.spec.ts @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2007-2023 Crafter Software Corporation. All Rights Reserved. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + */ + +import { crafterConf } from '@craftercms/classes'; +import { + composeUrl, + createLookupTable, + extendDeep, + isPlainObject, + notNullOrUndefined, + nullOrUndefined +} from '@craftercms/utils'; +import { expect } from 'chai'; + +crafterConf.configure({ + baseUrl: 'http://localhost:8080', + site: 'editorial' +}); + +describe('Utilities', () => { + describe('composeUrl utility', () => { + // Tests the composeUrl function. Checks that it composes an url with a base url or a crafterConfig and an endpoint. + it('should compose a url with a base url or a crafterConfig and an endpoint', () => { + const url = composeUrl('http://localhost:8080/', 'api/1/site'); + const url2 = composeUrl(crafterConf.getConfig(), 'api/1/site'); + const url3 = composeUrl('http://localhost:9090', 'api/2/site'); + const expectedUrl = 'http://localhost:8080/api/1/site'; + expect(url).to.equal(expectedUrl); + expect(url2).to.equal(expectedUrl); + expect(url3).to.not.equal(expectedUrl); + }); + }); + + describe('isPlainObject utility', () => { + // Tests the isPlainObject function. Checks that it returns true if the object is a plain object. Other values like + // null, undefined, arrays, and strings should return false. + it('should return true if the object is a plain object', () => { + expect(isPlainObject({})).to.be.true; + expect(isPlainObject({ a: 1 })).to.be.true; + expect(isPlainObject(null)).to.be.false; + expect(isPlainObject(undefined)).to.be.false; + expect(isPlainObject([])).to.be.false; + expect(isPlainObject('test')).to.be.false; + }); + }); + + describe('extendDeep utility', () => { + // Tests the extendDeep function. Checks that it extends the source object with the target object, where the latter + // object has precedence. + it('should extend the target object with the source object', () => { + const source = { a: 1, b: 2 }; + const target = { b: 3, c: 4 }; + expect(extendDeep(source, target)).to.deep.equal({ b: 3, c: 4, a: 1 }); + }); + }); + + describe('nullOrUndefined utility', () => { + // Tests the nullOrUndefined function. Checks that it returns true only if the value is null or undefined. + it('should return true if the value is null or undefined', () => { + expect(nullOrUndefined(null)).to.be.true; + expect(nullOrUndefined(undefined)).to.be.true; + expect(nullOrUndefined('test')).to.be.false; + }); + }); + + describe('notNullOrUndefined utility', () => { + // Tests the notNullOrUndefined function. Checks that it returns true if the value is neither null nor undefined. + it('should return true if the value is neither null nor undefined', () => { + expect(notNullOrUndefined(null)).to.be.false; + expect(notNullOrUndefined(undefined)).to.be.false; + expect(notNullOrUndefined('test')).to.be.true; + }); + }); + + describe('createLookupTable utility', () => { + // Tests the createLookupTable function. Checks that it creates a lookup table from a list of objects. + it('should create a lookup table from a list of objects', () => { + const list = [ + { id: 1, name: 'test1' }, + { id: 2, name: 'test2' }, + { id: 3, name: 'test3' } + ]; + const table1 = { + 1: { id: 1, name: 'test1' }, + 2: { id: 2, name: 'test2' }, + 3: { id: 3, name: 'test3' } + }; + const table2 = { + test1: { id: 1, name: 'test1' }, + test2: { id: 2, name: 'test2' }, + test3: { id: 3, name: 'test3' } + }; + + const lookupTableById = createLookupTable(list); + const lookupTableByName = createLookupTable(list, 'name'); + expect(lookupTableById).to.deep.equal(table1); + expect(lookupTableByName).to.deep.equal(table2); + }); + }); +}); diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 0000000..f249ec5 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2007-2022 Crafter Software Corporation. All Rights Reserved. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as published by + * the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +module.exports = { + printWidth: 120, + tabWidth: 2, + useTabs: false, + semi: true, + singleQuote: true, + quoteProps: 'as-needed', + jsxSingleQuote: false, + trailingComma: 'none', + bracketSpacing: true, + bracketSameLine: false, + arrowParens: 'always' +}; diff --git a/util/mock-responses-common.ts b/util/mock-responses-common.ts index c2989f4..cfc3e9e 100644 --- a/util/mock-responses-common.ts +++ b/util/mock-responses-common.ts @@ -14,7 +14,7 @@ * along with this program. If not, see http://www.gnu.org/licenses/. */ -import { Item, Descriptor } from "models"; +import { Item, Descriptor } from '@craftercms/models'; export const descriptor:Descriptor = { "page": { @@ -68,7 +68,8 @@ export const descriptor:Descriptor = { ] }, "hero_image": "/static-assets/images/strawberries.jpg", - "features_title": "Erat lacinia" + "features_title": "Erat lacinia", + "selected_b": "true" } }; @@ -81,6 +82,106 @@ export const item:Item = { "folder": false }; +export const item2:Item = { + "name": "index.xml", + "url": "/site/website/style/index.xml", + "descriptorUrl": "/site/website/style/index.xml", + "descriptorDom": { + "page": { + "content-type": "/page/category-landing", + "display-template": "/templates/web/pages/category-landing.ftl", + "merge-strategy": "inherit-levels", + "file-name": "index.xml", + "objectGroupId": "102f", + "objectId": "102fb288-0dd8-806c-7651-2dd8838ca016", + "folder-name": "style", + "createdDate": "2017-03-13T22:26:52.000Z", + "createdDate_dt": "2017-03-13T22:26:52.000Z", + "lastModifiedDate": "2017-03-21T18:15:50.000Z", + "lastModifiedDate_dt": "2017-03-21T18:15:50.000Z", + "header_o": { + "item": { + "key": "/site/components/headers/header.xml", + "value": "Header", + "include": "/site/components/headers/header.xml", + "disableFlattening": "false" + } + }, + "left_rail_o": { + "item": { + "key": "/site/components/left-rails/left-rail-with-no-articles.xml", + "value": "Left Rail with No Articles", + "include": "/site/components/left-rails/left-rail-with-no-articles.xml", + "disableFlattening": "false" + } + }, + "internal-name": "Style", + "title_t": "Style", + "placeInNav": "true", + "navLabel": "Style", + "orderDefault_f": "8000", + "category_s": "style", + "max_articles_i": "10", + "articles_title_t": "Style" + } + }, + "properties": null, + "folder": false +}; + +export const parsedItem = { + "craftercms": { + "id": "8d7f21fa-5e09-00aa-8340-853b7db302da", + "path": "/site/website/index.xml", + "label": "Home", + "contentTypeId": "/page/home", + "dateCreated": "1/31/2017 16:18:14", + "dateModified": "5/18/2017 15:52:21", + "disabled": false, + "placeInNav": false, + "fileName": "index.xml", + "orderInNav": -1 + }, + "header": { + "item": { + "key": "/site/components/headers/header.xml", + "value": "Header", + "include": "/site/components/headers/header.xml", + "disableFlattening": "false" + } + }, + "left-rail": { + "item": { + "key": "/site/components/left-rails/left-rail-with-latest-articles.xml", + "value": "Left Rail with Latest Articles", + "include": "/site/components/left-rails/left-rail-with-latest-articles.xml", + "disableFlattening": "false" + } + }, + "title": "Editorial", + "hero_text": "

Aenean ornare velit lacus, ac varius enim ullamcorper eu. Proin aliquam facilisis ante interdum congue. Integer mollis, nisl amet convallis, porttitor magna ullamcorper, amet egestas mauris. Ut magna finibus nisi nec lacinia. Nam maximus erat id euismod egestas. Pellentesque sapien ac quam. Lorem ipsum dolor sit nullam.

", + "hero_title": "

Hi, I’m Editorial

\n

by HTML5 UP

", + "features": { + "item": [ + { + "value": "Quam lorem ipsum", + "key": "/site/components/features/quam-lorem-ipsum.xml", + "include": "/site/components/features/quam-lorem-ipsum.xml", + "disableFlattening": "false" + }, + { + "key": "/site/components/features/sapien-veroeros.xml", + "value": "Sapien Veroeros", + "include": "/site/components/features/sapien-veroeros.xml", + "disableFlattening": "false" + } + ] + }, + "hero_image": "/static-assets/images/strawberries.jpg", + "features_title": "Erat lacinia", + "selected_b": true +} + export const children:Array = [ { "name": "articles", @@ -90,49 +191,6 @@ export const children:Array = [ "properties": null, "folder": true }, - { - "name": "crafter-component.xml", - "url": "/site/website/crafter-component.xml", - "descriptorUrl": "/site/website/crafter-component.xml", - "descriptorDom": { - "page": { - "display-template": { - "nil": "false", - "text": "/templates/system/common/component.ftl" - }, - "merge-strategy": "inherit-levels", - "content-type": "/component/level-descriptor", - "placeInNav": "false", - "file-name": "crafter-level-descriptor.level.xml", - "objectGroupId": "0a68", - "objectId": "0a68e8ad-77d8-0a58-e7bf-09a71fb3077b", - "folder-name": null, - "header": { - "item": { - "key": "/site/components/headers/header.xml", - "value": "Header", - "include": "/site/components/headers/header.xml", - "disableFlattening": "false" - } - }, - "createdDate": "3/13/2017 20:26:50", - "createdDate_dt": "3/13/2017 20:26:50", - "lastModifiedDate": "5/18/2017 15:38:58", - "lastModifiedDate_dt": "5/18/2017 15:38:58", - "left-rail": { - "item": { - "key": "/site/components/left-rails/left-rail-with-no-articles.xml", - "value": "Left Rail with No Articles", - "include": "/site/components/left-rails/left-rail-with-no-articles.xml", - "disableFlattening": "false" - } - }, - "hideInAuthoring": "true" - } - }, - "properties": null, - "folder": false - }, { "name": "crafter-level-descriptor.level.xml", "url": "/site/website/crafter-level-descriptor.level.xml", @@ -277,15 +335,15 @@ export const children:Array = [ ]; export const tree = { - "name": "2017", - "url": "/site/website/articles/2017", - "descriptorUrl": "/site/website/articles/2017.meta.xml", + "name": "2021", + "url": "/site/website/articles/2021", + "descriptorUrl": "/site/website/articles/2021.meta.xml", "descriptorDom": null, "properties": null, "children": [ { "name": "1", - "url": "/site/website/articles/2017/1", + "url": "/site/website/articles/2021/1", "descriptorUrl": "/site/website/articles/2017/1.meta.xml", "descriptorDom": null, "properties": null, @@ -443,8 +501,8 @@ export const tree = { }, { "name": "2", - "url": "/site/website/articles/2017/2", - "descriptorUrl": "/site/website/articles/2017/2.meta.xml", + "url": "/site/website/articles/2021/2", + "descriptorUrl": "/site/website/articles/2021/2.meta.xml", "descriptorDom": null, "properties": null, "children": [ @@ -614,8 +672,8 @@ export const tree = { }, { "name": "3", - "url": "/site/website/articles/2017/3", - "descriptorUrl": "/site/website/articles/2017/3.meta.xml", + "url": "/site/website/articles/2021/3", + "descriptorUrl": "/site/website/articles/2021/3.meta.xml", "descriptorDom": null, "properties": null, "children": [ @@ -823,11 +881,410 @@ export const navBreadcrumb = [ "url": "/", "active": false, "subItems": null, + "attributes": null }, { "label": "Style", "url": "/style", "active": false, "subItems": null, + "attributes": null } ]; + +export const unparsedSearchHit = { + "_index": "editorial-sdk-test-preview_v1", + "_id": "0aeafcd1aa14a24ad059f0b45388946f", + "_score": 0, + "_source": { + "categories_o": { + "item": [ + { + "key": "style", + "value_smv": "Style" + } + ] + }, + "internal-name": "Men Styles For Winter", + "date_dt": "2021-01-05T05:00:00.000Z", + "subject_t": "Men Styles For Winter", + "objectGroupId": "f1f9", + "localId": "/site/website/articles/2021/1/men-styles-for-winter/index.xml", + "author_s": "John Doe", + "featured_b": "true", + "title_t": "Men Styles For Winter", + "content-type": "/page/article", + "display-template": "/templates/web/pages/article.ftl", + "id": "editorial-sdk-test:/site/website/articles/2021/1/men-styles-for-winter/index.xml", + "folder-name": "men-styles-for-winter", + "objectId": "f1f9c488-67e1-7ec0-d3ca-560b194e64d1", + "summary_t": "Nulla sed enim ipsum. Sed ac neque a ligula malesuada volutpat. Donec et ligula rutrum, mattis mauris eget, vestibulum metus. Maecenas non vehicula neque. Nunc ac mauris id ipsum commodo tempus. Integer at dolor consequat, dignissim eros in, imperdiet dui.", + "createdDate_dt": "2017-03-03T20:57:07.000Z", + "lastModifiedDate": "2017-03-13T20:33:5.000Z", + "segments_o": { + "item": [ + { + "key": "guy", + "value_smv": "Guy" + } + ] + }, + "createdDate": "2017-03-3T20:57:7.000Z", + "lastModifiedDate_dt": "2017-03-13T20:33:05.000Z", + "merge-strategy": "inherit-levels", + "left_rail_o": { + "item": [ + { + "include": "/site/components/left-rails/left-rail-with-related-articles.xml", + "component": { + "createdDate_dt": "2017-03-17T18:23:52.000Z", + "createdDate": "2017-03-17T18:23:52.000Z", + "lastModifiedDate": "2017-05-18T15:53:17.000Z", + "lastModifiedDate_dt": "2017-05-18T15:53:17.000Z", + "internal-name": "Left Rail with Related Articles", + "merge-strategy": "inherit-levels", + "content-type": "/component/left-rail", + "display-template": "/templates/web/components/left-rail.ftl", + "objectGroupId": "9ed4", + "file-name": "left-rail-with-related-articles.xml", + "widgets_o": { + "item": [ + { + "include": "/site/components/articles-widget/related-articles-widget.xml", + "component": { + "createdDate_dt": "2017-03-28T22:28:21.000Z", + "lastModifiedDate": "2017-03-28T22:28:21.000Z", + "internal-name": "Related Articles Widget", + "objectGroupId": "a0b9", + "max_articles_i": "3", + "createdDate": "2017-03-28T22:28:21.000Z", + "lastModifiedDate_dt": "2017-03-28T22:28:21.000Z", + "merge-strategy": "inherit-levels", + "title_t": "Related Articles", + "content-type": "/component/articles-widget", + "display-template": "/templates/web/components/articles-widget.ftl", + "file-name": "related-articles-widget.xml", + "objectId": "a0b98d8a-b7d3-4e72-0064-d778ceff406e", + "scripts_o": { + "item": [ + { + "value": "related-articles.groovy", + "key": "/scripts/components/related-articles.groovy" + } + ] + } + }, + "value": "Related Articles Widget", + "disableFlattening": "false", + "key": "/site/components/articles-widget/related-articles-widget.xml" + }, + { + "include": "/site/components/contacts/contact-widget.xml", + "component": { + "createdDate_dt": "2017-03-28T21:12:05.000Z", + "phone_s": "(999) 999-9999", + "lastModifiedDate": "2017-03-28T21:22:31.000Z", + "internal-name": "Contact Widget", + "text_html_raw": "

Sed varius enim lorem ullamcorper dolore aliquam aenean ornare velit lacus, ac varius enim lorem ullamcorper dolore. Proin sed aliquam facilisis ante interdum. Sed nulla amet lorem feugiat tempus aliquam.

", + "address_html_raw": "

5321 Somewhere Road #789
Reston, Virginia

", + "objectGroupId": "3756", + "email_s": "info@example.com", + "address_html": "5321 Somewhere Road #789Reston, Virginia", + "createdDate": "2017-03-28T21:12:5.000Z", + "lastModifiedDate_dt": "2017-03-28T21:22:31.000Z", + "merge-strategy": "inherit-levels", + "title_t": "Contact Us", + "content-type": "/component/contact-widget", + "display-template": "/templates/web/components/contact-widget.ftl", + "file-name": "contact-widget.xml", + "objectId": "37562d94-04ad-289b-eb35-d76b91b86431", + "text_html": "Sed varius enim lorem ullamcorper dolore aliquam aenean ornare velit lacus, ac varius enim lorem ullamcorper dolore. Proin sed aliquam facilisis ante interdum. Sed nulla amet lorem feugiat tempus aliquam." + }, + "value": "Contact Widget", + "disableFlattening": "false", + "key": "/site/components/contacts/contact-widget.xml" + } + ] + }, + "objectId": "9ed49b50-6681-92e4-1221-9d067df058d0" + }, + "value": "Left Rail with Related Articles", + "disableFlattening": "false", + "key": "/site/components/left-rails/left-rail-with-related-articles.xml" + } + ] + }, + "image_s": "/static-assets/images/winter-man-pic.jpg", + "file-name": "index.xml", + "header_o": { + "item": [ + { + "include": "/site/components/headers/header.xml", + "component": { + "createdDate_dt": "2017-02-03T23:27:50.000Z", + "lastModifiedDate": "2019-12-20T13:47:32.168Z", + "internal-name": "Header", + "logo_s": "/static-assets/images/1-gear.png", + "objectGroupId": "af02", + "socialMediaWidget_o": { + "item": [ + { + "component": { + "iconsWidth_i": "24", + "createdDate_dt": "2022-02-22T19:04:47.646Z", + "lastModifiedDate": "2022-03-14T22:41:09.371Z", + "internal-name": "Social Media Networks", + "accounts_o": { + "item": [ + { + "network_s": "facebook", + "url_s": "#" + }, + { + "network_s": "twitter", + "url_s": "#" + }, + { + "network_s": "github", + "url_s": "#" + } + ] + }, + "objectGroupId": "c646", + "showItemsInline_b": "true", + "iconsHeight_i": "24", + "createdDate": "2022-02-22T19:04:47.646Z", + "lastModifiedDate_dt": "2022-03-14T22:41:09.371Z", + "merge-strategy": "inherit-levels", + "content-type": "/component/social-media-widget", + "display-template": "/templates/web/components/social-media-widget.ftl", + "file-name": "c646ba89-a4c3-308f-3492-93be61429fec.xml", + "objectId": "c646ba89-a4c3-308f-3492-93be61429fec" + }, + "value": "Social Media Networks", + "key": "c646ba89-a4c3-308f-3492-93be61429fec" + } + ] + }, + "createdDate": "2017-02-3T23:27:50.000Z", + "lastModifiedDate_dt": "2020-02-05T18:03:58.518Z", + "merge-strategy": "inherit-levels", + "business_name_s": "Editorial", + "content-type": "/component/header", + "display-template": "/templates/web/components/header.ftl", + "disabled": "false", + "file-name": "header.xml", + "objectId": "af023d71-d5ea-f8e5-2ec9-07a8b239d0c5" + }, + "value": "Header", + "disableFlattening": "false", + "key": "/site/components/headers/header.xml" + } + ] + }, + "sections_o": { + "item": [ + { + "section_html": "Nulla sed enim ipsum. Sed ac neque a ligula malesuada volutpat. Donec et ligula rutrum, mattis mauris eget, vestibulum metus. Maecenas non vehicula neque. Nunc ac mauris id ipsum commodo tempus. Integer at dolor consequat, dignissim eros in, imperdiet dui. Aliquam condimentum turpis eget tellus ultrices tincidunt. Pellentesque id varius purus, ac tristique augue. Etiam ut pharetra purus. Vestibulum quis vehicula eros. Mauris laoreet purus nec felis ullamcorper convallis. Quisque urna purus, posuere nec urna sed, ornare aliquet mauris. In faucibus vitae tellus id iaculis. Donec porttitor, elit eu elementum pulvinar, sapien ex cursus lacus, non ornare ex lectus ut elit. Donec eros ligula, suscipit eu tellus ut, tristique hendrerit tortor. Fusce sollicitudin mollis risus, ut rhoncus magna volutpat vel. Cras auctor, elit id pellentesque semper, neque nibh fermentum ante, sit amet malesuada felis magna nec enim. Vivamus sollicitudin placerat felis, vel blandit dolor sollicitudin a. Nunc vitae volutpat augue. Nunc tristique placerat tortor condimentum sagittis. Sed eu egestas ex, quis auctor neque. Nam eget tellus suscipit, vestibulum augue nec, consequat erat. Mauris malesuada nec ligula non posuere. Proin vitae posuere tortor. Phasellus vulputate quam ut dictum vulputate. Integer ac lectus metus. Ut aliquam ipsum ligula, quis molestie ex pretium sit amet. Morbi porttitor neque vel luctus laoreet. Mauris varius lacus a eros aliquam, in maximus nibh aliquam. Integer sodales consequat metus eget accumsan. Integer viverra mi erat, in hendrerit massa vestibulum placerat. Sed ut gravida nisl, ut cursus neque. Vestibulum tristique rutrum augue vel aliquet. Ut quis faucibus diam. Aliquam dolor metus, laoreet vitae lacinia a, aliquam a tellus. Vivamus sed commodo ipsum, in lacinia nisl. Sed metus diam, porta eget tortor et, vehicula hendrerit sapien. Vestibulum vehicula urna felis, id elementum libero pellentesque id. Vivamus in massa velit. Suspendisse vitae turpis fermentum lectus pellentesque laoreet. Curabitur viverra pretium turpis, eget feugiat mi blandit a. Quisque nisl urna, porta ut urna eget, mattis fringilla nisi. Ut lacus ligula, dapibus ac fermentum ac, rhoncus eget metus. Donec scelerisque, felis vitae viverra iaculis, diam sem gravida tellus, non sodales urna urna sit amet enim. Duis id justo vitae justo suscipit porta placerat vel ligula. Morbi justo nunc, rhoncus laoreet ipsum a, aliquet eleifend dui. In a quam tortor. Pellentesque eget eros ut dui tincidunt convallis. Pellentesque tincidunt rutrum tellus, non rhoncus dui finibus eu. Integer eu sem maximus, blandit neque eu, congue leo. Ut pretium efficitur turpis, id dapibus turpis bibendum vel. Suspendisse a nibh dictum, imperdiet est et, interdum odio. Morbi urna magna, eleifend vitae luctus ac, scelerisque sit amet nisi. Quisque maximus placerat ante et fermentum. Nulla eu aliquet arcu, vel maximus massa. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam posuere arcu ex, in sagittis orci rhoncus eu. Suspendisse potenti. Curabitur facilisis sapien et ligula tristique lacinia. Aliquam a mauris bibendum, placerat augue sit amet, hendrerit arcu. Nam in bibendum sapien. Pellentesque laoreet nisi vel metus dapibus dictum. Integer semper, velit laoreet ornare maximus, nulla orci maximus ante, a tincidunt eros risus blandit eros.", + "section_html_raw": "

Nulla sed enim ipsum. Sed ac neque a ligula malesuada volutpat. Donec et ligula rutrum, mattis mauris eget, vestibulum metus. Maecenas non vehicula neque. Nunc ac mauris id ipsum commodo tempus. Integer at dolor consequat, dignissim eros in, imperdiet dui. Aliquam condimentum turpis eget tellus ultrices tincidunt. Pellentesque id varius purus, ac tristique augue. Etiam ut pharetra purus. Vestibulum quis vehicula eros. Mauris laoreet purus nec felis ullamcorper convallis.

Quisque urna purus, posuere nec urna sed, ornare aliquet mauris. In faucibus vitae tellus id iaculis. Donec porttitor, elit eu elementum pulvinar, sapien ex cursus lacus, non ornare ex lectus ut elit. Donec eros ligula, suscipit eu tellus ut, tristique hendrerit tortor. Fusce sollicitudin mollis risus, ut rhoncus magna volutpat vel. Cras auctor, elit id pellentesque semper, neque nibh fermentum ante, sit amet malesuada felis magna nec enim. Vivamus sollicitudin placerat felis, vel blandit dolor sollicitudin a. Nunc vitae volutpat augue. Nunc tristique placerat tortor condimentum sagittis. Sed eu egestas ex, quis auctor neque. Nam eget tellus suscipit, vestibulum augue nec, consequat erat. Mauris malesuada nec ligula non posuere. Proin vitae posuere tortor. Phasellus vulputate quam ut dictum vulputate.

Integer ac lectus metus. Ut aliquam ipsum ligula, quis molestie ex pretium sit amet. Morbi porttitor neque vel luctus laoreet. Mauris varius lacus a eros aliquam, in maximus nibh aliquam. Integer sodales consequat metus eget accumsan. Integer viverra mi erat, in hendrerit massa vestibulum placerat. Sed ut gravida nisl, ut cursus neque. Vestibulum tristique rutrum augue vel aliquet.

Ut quis faucibus diam. Aliquam dolor metus, laoreet vitae lacinia a, aliquam a tellus. Vivamus sed commodo ipsum, in lacinia nisl. Sed metus diam, porta eget tortor et, vehicula hendrerit sapien. Vestibulum vehicula urna felis, id elementum libero pellentesque id. Vivamus in massa velit. Suspendisse vitae turpis fermentum lectus pellentesque laoreet. Curabitur viverra pretium turpis, eget feugiat mi blandit a. Quisque nisl urna, porta ut urna eget, mattis fringilla nisi. Ut lacus ligula, dapibus ac fermentum ac, rhoncus eget metus. Donec scelerisque, felis vitae viverra iaculis, diam sem gravida tellus, non sodales urna urna sit amet enim. Duis id justo vitae justo suscipit porta placerat vel ligula. Morbi justo nunc, rhoncus laoreet ipsum a, aliquet eleifend dui. In a quam tortor.

Pellentesque eget eros ut dui tincidunt convallis. Pellentesque tincidunt rutrum tellus, non rhoncus dui finibus eu. Integer eu sem maximus, blandit neque eu, congue leo. Ut pretium efficitur turpis, id dapibus turpis bibendum vel. Suspendisse a nibh dictum, imperdiet est et, interdum odio. Morbi urna magna, eleifend vitae luctus ac, scelerisque sit amet nisi. Quisque maximus placerat ante et fermentum. Nulla eu aliquet arcu, vel maximus massa. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam posuere arcu ex, in sagittis orci rhoncus eu. Suspendisse potenti. Curabitur facilisis sapien et ligula tristique lacinia. Aliquam a mauris bibendum, placerat augue sit amet, hendrerit arcu. Nam in bibendum sapien. Pellentesque laoreet nisi vel metus dapibus dictum. Integer semper, velit laoreet ornare maximus, nulla orci maximus ante, a tincidunt eros risus blandit eros.

" + } + ] + } + } +}; + +export const parsedSearchHit = { + "categories_o": { + "item": [ + { + "key": "style", + "value_smv": "Style" + } + ] + }, + "internal-name": "Men Styles For Winter", + "date_dt": "2021-01-05T05:00:00.000Z", + "subject_t": "Men Styles For Winter", + "objectGroupId": "f1f9", + "localId": "/site/website/articles/2021/1/men-styles-for-winter/index.xml", + "author_s": "John Doe", + "featured_b": "true", + "title_t": "Men Styles For Winter", + "content-type": "/page/article", + "display-template": "/templates/web/pages/article.ftl", + "id": "editorial-sdk-test:/site/website/articles/2021/1/men-styles-for-winter/index.xml", + "folder-name": "men-styles-for-winter", + "objectId": "f1f9c488-67e1-7ec0-d3ca-560b194e64d1", + "summary_t": "Nulla sed enim ipsum. Sed ac neque a ligula malesuada volutpat. Donec et ligula rutrum, mattis mauris eget, vestibulum metus. Maecenas non vehicula neque. Nunc ac mauris id ipsum commodo tempus. Integer at dolor consequat, dignissim eros in, imperdiet dui.", + "createdDate_dt": "2017-03-03T20:57:07.000Z", + "lastModifiedDate": "2017-03-13T20:33:5.000Z", + "segments_o": { + "item": [ + { + "key": "guy", + "value_smv": "Guy" + } + ] + }, + "createdDate": "2017-03-3T20:57:7.000Z", + "lastModifiedDate_dt": "2017-03-13T20:33:05.000Z", + "merge-strategy": "inherit-levels", + "left_rail_o": { + "item": [ + { + "include": "/site/components/left-rails/left-rail-with-related-articles.xml", + "component": { + "createdDate_dt": "2017-03-17T18:23:52.000Z", + "createdDate": "2017-03-17T18:23:52.000Z", + "lastModifiedDate": "2017-05-18T15:53:17.000Z", + "lastModifiedDate_dt": "2017-05-18T15:53:17.000Z", + "internal-name": "Left Rail with Related Articles", + "merge-strategy": "inherit-levels", + "content-type": "/component/left-rail", + "display-template": "/templates/web/components/left-rail.ftl", + "objectGroupId": "9ed4", + "file-name": "left-rail-with-related-articles.xml", + "widgets_o": { + "item": [ + { + "include": "/site/components/articles-widget/related-articles-widget.xml", + "component": { + "createdDate_dt": "2017-03-28T22:28:21.000Z", + "lastModifiedDate": "2017-03-28T22:28:21.000Z", + "internal-name": "Related Articles Widget", + "objectGroupId": "a0b9", + "max_articles_i": "3", + "createdDate": "2017-03-28T22:28:21.000Z", + "lastModifiedDate_dt": "2017-03-28T22:28:21.000Z", + "merge-strategy": "inherit-levels", + "title_t": "Related Articles", + "content-type": "/component/articles-widget", + "display-template": "/templates/web/components/articles-widget.ftl", + "file-name": "related-articles-widget.xml", + "objectId": "a0b98d8a-b7d3-4e72-0064-d778ceff406e", + "scripts_o": { + "item": [ + { + "value": "related-articles.groovy", + "key": "/scripts/components/related-articles.groovy" + } + ] + } + }, + "value": "Related Articles Widget", + "disableFlattening": "false", + "key": "/site/components/articles-widget/related-articles-widget.xml" + }, + { + "include": "/site/components/contacts/contact-widget.xml", + "component": { + "createdDate_dt": "2017-03-28T21:12:05.000Z", + "phone_s": "(999) 999-9999", + "lastModifiedDate": "2017-03-28T21:22:31.000Z", + "internal-name": "Contact Widget", + "text_html_raw": "

Sed varius enim lorem ullamcorper dolore aliquam aenean ornare velit lacus, ac varius enim lorem ullamcorper dolore. Proin sed aliquam facilisis ante interdum. Sed nulla amet lorem feugiat tempus aliquam.

", + "address_html_raw": "

5321 Somewhere Road #789
Reston, Virginia

", + "objectGroupId": "3756", + "email_s": "info@example.com", + "address_html": "5321 Somewhere Road #789Reston, Virginia", + "createdDate": "2017-03-28T21:12:5.000Z", + "lastModifiedDate_dt": "2017-03-28T21:22:31.000Z", + "merge-strategy": "inherit-levels", + "title_t": "Contact Us", + "content-type": "/component/contact-widget", + "display-template": "/templates/web/components/contact-widget.ftl", + "file-name": "contact-widget.xml", + "objectId": "37562d94-04ad-289b-eb35-d76b91b86431", + "text_html": "Sed varius enim lorem ullamcorper dolore aliquam aenean ornare velit lacus, ac varius enim lorem ullamcorper dolore. Proin sed aliquam facilisis ante interdum. Sed nulla amet lorem feugiat tempus aliquam." + }, + "value": "Contact Widget", + "disableFlattening": "false", + "key": "/site/components/contacts/contact-widget.xml" + } + ] + }, + "objectId": "9ed49b50-6681-92e4-1221-9d067df058d0" + }, + "value": "Left Rail with Related Articles", + "disableFlattening": "false", + "key": "/site/components/left-rails/left-rail-with-related-articles.xml" + } + ] + }, + "image_s": "/static-assets/images/winter-man-pic.jpg", + "file-name": "index.xml", + "header_o": { + "item": [ + { + "include": "/site/components/headers/header.xml", + "component": { + "createdDate_dt": "2017-02-03T23:27:50.000Z", + "lastModifiedDate": "2019-12-20T13:47:32.168Z", + "internal-name": "Header", + "logo_s": "/static-assets/images/1-gear.png", + "objectGroupId": "af02", + "socialMediaWidget_o": { + "item": [ + { + "component": { + "iconsWidth_i": "24", + "createdDate_dt": "2022-02-22T19:04:47.646Z", + "lastModifiedDate": "2022-03-14T22:41:09.371Z", + "internal-name": "Social Media Networks", + "accounts_o": { + "item": [ + { + "network_s": "facebook", + "url_s": "#" + }, + { + "network_s": "twitter", + "url_s": "#" + }, + { + "network_s": "github", + "url_s": "#" + } + ] + }, + "objectGroupId": "c646", + "showItemsInline_b": "true", + "iconsHeight_i": "24", + "createdDate": "2022-02-22T19:04:47.646Z", + "lastModifiedDate_dt": "2022-03-14T22:41:09.371Z", + "merge-strategy": "inherit-levels", + "content-type": "/component/social-media-widget", + "display-template": "/templates/web/components/social-media-widget.ftl", + "file-name": "c646ba89-a4c3-308f-3492-93be61429fec.xml", + "objectId": "c646ba89-a4c3-308f-3492-93be61429fec" + }, + "value": "Social Media Networks", + "key": "c646ba89-a4c3-308f-3492-93be61429fec" + } + ] + }, + "createdDate": "2017-02-3T23:27:50.000Z", + "lastModifiedDate_dt": "2020-02-05T18:03:58.518Z", + "merge-strategy": "inherit-levels", + "business_name_s": "Editorial", + "content-type": "/component/header", + "display-template": "/templates/web/components/header.ftl", + "disabled": "false", + "file-name": "header.xml", + "objectId": "af023d71-d5ea-f8e5-2ec9-07a8b239d0c5" + }, + "value": "Header", + "disableFlattening": "false", + "key": "/site/components/headers/header.xml" + } + ] + }, + "sections_o": { + "item": [ + { + "section_html": "Nulla sed enim ipsum. Sed ac neque a ligula malesuada volutpat. Donec et ligula rutrum, mattis mauris eget, vestibulum metus. Maecenas non vehicula neque. Nunc ac mauris id ipsum commodo tempus. Integer at dolor consequat, dignissim eros in, imperdiet dui. Aliquam condimentum turpis eget tellus ultrices tincidunt. Pellentesque id varius purus, ac tristique augue. Etiam ut pharetra purus. Vestibulum quis vehicula eros. Mauris laoreet purus nec felis ullamcorper convallis. Quisque urna purus, posuere nec urna sed, ornare aliquet mauris. In faucibus vitae tellus id iaculis. Donec porttitor, elit eu elementum pulvinar, sapien ex cursus lacus, non ornare ex lectus ut elit. Donec eros ligula, suscipit eu tellus ut, tristique hendrerit tortor. Fusce sollicitudin mollis risus, ut rhoncus magna volutpat vel. Cras auctor, elit id pellentesque semper, neque nibh fermentum ante, sit amet malesuada felis magna nec enim. Vivamus sollicitudin placerat felis, vel blandit dolor sollicitudin a. Nunc vitae volutpat augue. Nunc tristique placerat tortor condimentum sagittis. Sed eu egestas ex, quis auctor neque. Nam eget tellus suscipit, vestibulum augue nec, consequat erat. Mauris malesuada nec ligula non posuere. Proin vitae posuere tortor. Phasellus vulputate quam ut dictum vulputate. Integer ac lectus metus. Ut aliquam ipsum ligula, quis molestie ex pretium sit amet. Morbi porttitor neque vel luctus laoreet. Mauris varius lacus a eros aliquam, in maximus nibh aliquam. Integer sodales consequat metus eget accumsan. Integer viverra mi erat, in hendrerit massa vestibulum placerat. Sed ut gravida nisl, ut cursus neque. Vestibulum tristique rutrum augue vel aliquet. Ut quis faucibus diam. Aliquam dolor metus, laoreet vitae lacinia a, aliquam a tellus. Vivamus sed commodo ipsum, in lacinia nisl. Sed metus diam, porta eget tortor et, vehicula hendrerit sapien. Vestibulum vehicula urna felis, id elementum libero pellentesque id. Vivamus in massa velit. Suspendisse vitae turpis fermentum lectus pellentesque laoreet. Curabitur viverra pretium turpis, eget feugiat mi blandit a. Quisque nisl urna, porta ut urna eget, mattis fringilla nisi. Ut lacus ligula, dapibus ac fermentum ac, rhoncus eget metus. Donec scelerisque, felis vitae viverra iaculis, diam sem gravida tellus, non sodales urna urna sit amet enim. Duis id justo vitae justo suscipit porta placerat vel ligula. Morbi justo nunc, rhoncus laoreet ipsum a, aliquet eleifend dui. In a quam tortor. Pellentesque eget eros ut dui tincidunt convallis. Pellentesque tincidunt rutrum tellus, non rhoncus dui finibus eu. Integer eu sem maximus, blandit neque eu, congue leo. Ut pretium efficitur turpis, id dapibus turpis bibendum vel. Suspendisse a nibh dictum, imperdiet est et, interdum odio. Morbi urna magna, eleifend vitae luctus ac, scelerisque sit amet nisi. Quisque maximus placerat ante et fermentum. Nulla eu aliquet arcu, vel maximus massa. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam posuere arcu ex, in sagittis orci rhoncus eu. Suspendisse potenti. Curabitur facilisis sapien et ligula tristique lacinia. Aliquam a mauris bibendum, placerat augue sit amet, hendrerit arcu. Nam in bibendum sapien. Pellentesque laoreet nisi vel metus dapibus dictum. Integer semper, velit laoreet ornare maximus, nulla orci maximus ante, a tincidunt eros risus blandit eros.", + "section_html_raw": "

Nulla sed enim ipsum. Sed ac neque a ligula malesuada volutpat. Donec et ligula rutrum, mattis mauris eget, vestibulum metus. Maecenas non vehicula neque. Nunc ac mauris id ipsum commodo tempus. Integer at dolor consequat, dignissim eros in, imperdiet dui. Aliquam condimentum turpis eget tellus ultrices tincidunt. Pellentesque id varius purus, ac tristique augue. Etiam ut pharetra purus. Vestibulum quis vehicula eros. Mauris laoreet purus nec felis ullamcorper convallis.

Quisque urna purus, posuere nec urna sed, ornare aliquet mauris. In faucibus vitae tellus id iaculis. Donec porttitor, elit eu elementum pulvinar, sapien ex cursus lacus, non ornare ex lectus ut elit. Donec eros ligula, suscipit eu tellus ut, tristique hendrerit tortor. Fusce sollicitudin mollis risus, ut rhoncus magna volutpat vel. Cras auctor, elit id pellentesque semper, neque nibh fermentum ante, sit amet malesuada felis magna nec enim. Vivamus sollicitudin placerat felis, vel blandit dolor sollicitudin a. Nunc vitae volutpat augue. Nunc tristique placerat tortor condimentum sagittis. Sed eu egestas ex, quis auctor neque. Nam eget tellus suscipit, vestibulum augue nec, consequat erat. Mauris malesuada nec ligula non posuere. Proin vitae posuere tortor. Phasellus vulputate quam ut dictum vulputate.

Integer ac lectus metus. Ut aliquam ipsum ligula, quis molestie ex pretium sit amet. Morbi porttitor neque vel luctus laoreet. Mauris varius lacus a eros aliquam, in maximus nibh aliquam. Integer sodales consequat metus eget accumsan. Integer viverra mi erat, in hendrerit massa vestibulum placerat. Sed ut gravida nisl, ut cursus neque. Vestibulum tristique rutrum augue vel aliquet.

Ut quis faucibus diam. Aliquam dolor metus, laoreet vitae lacinia a, aliquam a tellus. Vivamus sed commodo ipsum, in lacinia nisl. Sed metus diam, porta eget tortor et, vehicula hendrerit sapien. Vestibulum vehicula urna felis, id elementum libero pellentesque id. Vivamus in massa velit. Suspendisse vitae turpis fermentum lectus pellentesque laoreet. Curabitur viverra pretium turpis, eget feugiat mi blandit a. Quisque nisl urna, porta ut urna eget, mattis fringilla nisi. Ut lacus ligula, dapibus ac fermentum ac, rhoncus eget metus. Donec scelerisque, felis vitae viverra iaculis, diam sem gravida tellus, non sodales urna urna sit amet enim. Duis id justo vitae justo suscipit porta placerat vel ligula. Morbi justo nunc, rhoncus laoreet ipsum a, aliquet eleifend dui. In a quam tortor.

Pellentesque eget eros ut dui tincidunt convallis. Pellentesque tincidunt rutrum tellus, non rhoncus dui finibus eu. Integer eu sem maximus, blandit neque eu, congue leo. Ut pretium efficitur turpis, id dapibus turpis bibendum vel. Suspendisse a nibh dictum, imperdiet est et, interdum odio. Morbi urna magna, eleifend vitae luctus ac, scelerisque sit amet nisi. Quisque maximus placerat ante et fermentum. Nulla eu aliquet arcu, vel maximus massa. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam posuere arcu ex, in sagittis orci rhoncus eu. Suspendisse potenti. Curabitur facilisis sapien et ligula tristique lacinia. Aliquam a mauris bibendum, placerat augue sit amet, hendrerit arcu. Nam in bibendum sapien. Pellentesque laoreet nisi vel metus dapibus dictum. Integer semper, velit laoreet ornare maximus, nulla orci maximus ante, a tincidunt eros risus blandit eros.

" + } + ] + } +} diff --git a/yarn.lock b/yarn.lock index 9ba31af..6a4c7a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,43 @@ # yarn lockfile v1 +"@babel/code-frame@^7.10.4": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== + dependencies: + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/highlight@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" + integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/runtime@^7.12.5": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" + integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== + dependencies: + regenerator-runtime "^0.14.0" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" @@ -11,7 +48,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.24" -"@jridgewell/resolve-uri@^3.1.0": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== @@ -34,6 +71,14 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" @@ -94,6 +139,59 @@ estree-walker "^2.0.2" picomatch "^2.3.1" +"@testing-library/dom@^9.0.0": + version "9.3.4" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.4.tgz#50696ec28376926fec0a1bf87d9dbac5e27f60ce" + integrity sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^5.0.1" + aria-query "5.1.3" + chalk "^4.1.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.5.0" + pretty-format "^27.0.2" + +"@testing-library/react@^14.0.0": + version "14.3.1" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.3.1.tgz#29513fc3770d6fb75245c4e1245c470e4ffdd830" + integrity sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^9.0.0" + "@types/react-dom" "^18.0.0" + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@tsconfig/node10@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@types/aria-query@^5.0.1": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== + "@types/estree@*", "@types/estree@^1.0.0": version "1.0.5" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" @@ -104,44 +202,88 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/mocha@^7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-7.0.2.tgz#b17f16cf933597e10d6d78eae3251e692ce8b0ce" - integrity sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w== +"@types/mocha@^10.0.6": + version "10.0.6" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.6.tgz#818551d39113081048bdddbef96701b4e8bb9d1b" + integrity sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg== + +"@types/prop-types@*": + version "15.7.12" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" + integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== + +"@types/react-dom@^18.0.0": + version "18.2.25" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.25.tgz#2946a30081f53e7c8d585eb138277245caedc521" + integrity sha512-o/V48vf4MQh7juIKZU2QGDfli6p1+OOi5oXx36Hffpc9adsHeXjVp8rHuPkjd8VT8sOJ2Zp05HR7CdpGTIUFUA== + dependencies: + "@types/react" "*" + +"@types/react@*": + version "18.2.79" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.79.tgz#c40efb4f255711f554d47b449f796d1c7756d865" + integrity sha512-RwGAGXPl9kSXwdNTafkOEuFrTBD5SA2B3iEB96xi8+xu5ddUa/cpvyVCSNn+asgLCTHkb5ZxN8gbuibYJi4s1w== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" "@types/resolve@1.20.2": version "1.20.2" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== -acorn@^8.8.2: +abab@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1, acorn@^8.8.2: version "8.11.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== -ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== - -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" -ansi-regex@^4.1.0: +ansi-colors@4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" -anymatch@~3.1.1: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -149,14 +291,24 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== dependencies: - sprintf-js "~1.0.2" + deep-equal "^2.0.5" -array-buffer-byte-length@^1.0.1: +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== @@ -164,19 +316,28 @@ array-buffer-byte-length@^1.0.1: call-bind "^1.0.5" is-array-buffer "^3.0.4" -array.prototype.reduce@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" - integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== +array.prototype.filter@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.4.tgz#bef83fde8a36a14d3de988c43563e0f5249962bf" + integrity sha512-r+mCJ7zXgXElgR4IRC+fkvNCeoaavWBs6EdCso5Tbcf+iEMKzBU/His60lt34WEZ9vlb8wDkZvQGcVI5GwkfoQ== dependencies: call-bind "^1.0.7" define-properties "^1.2.1" es-abstract "^1.23.2" es-array-method-boxes-properly "^1.0.0" - es-errors "^1.3.0" es-object-atoms "^1.0.0" is-string "^1.0.7" +array.prototype.flat@^1.2.3: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + arraybuffer.prototype.slice@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" @@ -191,6 +352,16 @@ arraybuffer.prototype.slice@^1.0.3: is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -213,13 +384,10 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== brace-expansion@^2.0.1: version "2.0.1" @@ -261,10 +429,23 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: get-intrinsic "^1.2.4" set-function-length "^1.2.1" -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +chai@^4.3.10, chai@^4.3.8: + version "4.4.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.0.8" chalk@^2.4.2: version "2.4.2" @@ -275,29 +456,69 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chokidar@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== +chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: - anymatch "~3.1.1" + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.3: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +chokidar@3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.2.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.1.1" + fsevents "~2.3.2" -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" color-convert@^1.9.0: version "1.9.3" @@ -306,30 +527,81 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -commander@^2.20.0: +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@~2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" - integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== - commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssstyle@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-3.0.0.tgz#17ca9c87d26eac764bb8cfd00583cff21ce0277a" + integrity sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg== + dependencies: + rrweb-cssom "^0.6.0" + +csstype@^3.0.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + +data-urls@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-4.0.0.tgz#333a454eca6f9a5b7b0f1013ff89074c3f522dd4" + integrity sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g== + dependencies: + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^12.0.0" data-view-buffer@^1.0.1: version "1.0.1" @@ -358,23 +630,59 @@ data-view-byte-offset@^1.0.0: es-errors "^1.3.0" is-data-view "^1.0.1" -debug@3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== +debug@4, debug@4.3.4, debug@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: - ms "^2.1.1" + ms "2.1.2" -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decimal.js@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== decode-uri-component@^0.2.0, decode-uri-component@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== +deep-eql@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + dependencies: + type-detect "^4.0.0" + +deep-equal@^2.0.5: + version "2.2.3" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" + integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.5" + es-get-iterator "^1.1.3" + get-intrinsic "^1.2.2" + is-arguments "^1.1.1" + is-array-buffer "^3.0.2" + is-date-object "^1.0.5" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + isarray "^2.0.5" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.13" + deepmerge@^4.2.2: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" @@ -389,7 +697,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -398,20 +706,118 @@ define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.2.0, de has-property-descriptors "^1.0.0" object-keys "^1.1.1" -diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +discontinuous-range@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" + integrity sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ== + +dom-accessibility-api@^0.5.9: + version "0.5.16" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" + integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" dom-walk@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== + dependencies: + webidl-conversions "^7.0.0" + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +enzyme-shallow-equal@^1.0.1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.7.tgz#4e3aa678022387a68e6c47aff200587851885b5e" + integrity sha512-/um0GFqUXnpM9SvKtje+9Tjoz3f1fpBC3eXRFrNs8kpYn69JljciYP7KZTqM/YQbUY9KUjvKB4jo/q+L6WGGvg== + dependencies: + hasown "^2.0.0" + object-is "^1.1.5" + +enzyme@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.11.0.tgz#71d680c580fe9349f6f5ac6c775bc3e6b7a79c28" + integrity sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw== + dependencies: + array.prototype.flat "^1.2.3" + cheerio "^1.0.0-rc.3" + enzyme-shallow-equal "^1.0.1" + function.prototype.name "^1.1.2" + has "^1.0.3" + html-element-map "^1.2.0" + is-boolean-object "^1.0.1" + is-callable "^1.1.5" + is-number-object "^1.0.4" + is-regex "^1.0.5" + is-string "^1.0.5" + is-subset "^0.1.1" + lodash.escape "^4.0.1" + lodash.isequal "^4.5.0" + object-inspect "^1.7.0" + object-is "^1.0.2" + object.assign "^4.1.0" + object.entries "^1.1.1" + object.values "^1.1.1" + raf "^3.4.1" + rst-selector-parser "^2.2.3" + string.prototype.trim "^1.2.1" es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: version "1.23.2" @@ -482,6 +888,21 @@ es-errors@^1.2.1, es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-get-iterator@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + is-arguments "^1.1.1" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.7" + isarray "^2.0.5" + stop-iteration-iterator "^1.0.0" + es-object-atoms@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" @@ -498,6 +919,13 @@ es-set-tostringtag@^2.0.3: has-tostringtag "^1.0.2" hasown "^2.0.1" +es-shim-unscopables@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -507,16 +935,21 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: +escalade@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - estree-walker@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" @@ -539,19 +972,18 @@ filter-obj@^1.1.0: resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: - locate-path "^3.0.0" + locate-path "^6.0.0" + path-exists "^4.0.0" -flat@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" - integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== - dependencies: - is-buffer "~2.0.3" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== for-each@^0.3.3: version "0.3.3" @@ -560,27 +992,31 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - fsevents@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1, function-bind@^1.1.2: +function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.6: +function.prototype.name@^1.1.2, function.prototype.name@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== @@ -595,12 +1031,17 @@ functions-have-names@^1.2.3: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -get-caller-file@^2.0.1: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -620,26 +1061,14 @@ get-symbol-description@^1.0.2: es-errors "^1.3.0" get-intrinsic "^1.2.4" -glob-parent@~5.1.0: +glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.3: +glob@8.1.0, glob@^8.0.3: version "8.1.0" resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== @@ -672,11 +1101,6 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -687,6 +1111,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" @@ -699,7 +1128,7 @@ has-proto@^1.0.1, has-proto@^1.0.3: resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== -has-symbols@^1.0.0, has-symbols@^1.0.2, has-symbols@^1.0.3: +has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== @@ -711,6 +1140,11 @@ has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: dependencies: has-symbols "^1.0.3" +has@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" + integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== + hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" @@ -723,6 +1157,55 @@ he@1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +html-element-map@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.3.1.tgz#44b2cbcfa7be7aa4ff59779e47e51012e1c73c08" + integrity sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg== + dependencies: + array.prototype.filter "^1.0.0" + call-bind "^1.0.2" + +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== + dependencies: + whatwg-encoding "^2.0.0" + +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + immer@^10.0.3: version "10.0.4" resolved "https://registry.yarnpkg.com/immer/-/immer-10.0.4.tgz#09af41477236b99449f9d705369a4daaf780362b" @@ -741,7 +1224,7 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.7: +internal-slot@^1.0.4, internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -750,7 +1233,15 @@ internal-slot@^1.0.7: hasown "^2.0.0" side-channel "^1.0.4" -is-array-buffer@^3.0.4: +is-arguments@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== @@ -772,7 +1263,7 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.1.0: +is-boolean-object@^1.0.1, is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== @@ -780,11 +1271,6 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-buffer@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - is-builtin-module@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" @@ -792,7 +1278,7 @@ is-builtin-module@^3.2.1: dependencies: builtin-modules "^3.3.0" -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== @@ -811,7 +1297,7 @@ is-data-view@^1.0.1: dependencies: is-typed-array "^1.1.13" -is-date-object@^1.0.1: +is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -823,10 +1309,10 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" @@ -835,6 +1321,11 @@ is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-map@^2.0.2, is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" @@ -857,6 +1348,16 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + is-reference@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" @@ -864,7 +1365,7 @@ is-reference@1.2.1: dependencies: "@types/estree" "*" -is-regex@^1.1.4: +is-regex@^1.0.5, is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== @@ -872,6 +1373,11 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-set@^2.0.2, is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" @@ -886,6 +1392,11 @@ is-string@^1.0.5, is-string@^1.0.7: dependencies: has-tostringtag "^1.0.0" +is-subset@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + integrity sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw== + is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" @@ -900,6 +1411,16 @@ is-typed-array@^1.1.13: dependencies: which-typed-array "^1.1.14" +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -907,48 +1428,94 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-weakset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" + integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -"js-tokens@^3.0.0 || ^4.0.0": +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" +js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdom@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-22.1.0.tgz#0fca6d1a37fbeb7f4aac93d1090d782c56b611c8" + integrity sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw== + dependencies: + abab "^2.0.6" + cssstyle "^3.0.0" + data-urls "^4.0.0" + decimal.js "^10.4.3" + domexception "^4.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.4" + parse5 "^7.1.2" + rrweb-cssom "^0.6.0" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^12.0.1" + ws "^8.13.0" + xml-name-validator "^4.0.0" + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" + p-locate "^5.0.0" -lodash@^4.17.15: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +lodash.escape@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" + integrity sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw== -log-symbols@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +log-symbols@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - chalk "^2.4.2" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" loose-envify@^1.1.0: version "1.4.0" @@ -957,6 +1524,18 @@ loose-envify@^1.1.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== + dependencies: + get-func-name "^2.0.1" + +lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== + magic-string@^0.30.3: version "0.30.8" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613" @@ -964,6 +1543,23 @@ magic-string@^0.30.3: dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -971,19 +1567,12 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" -minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.4: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== dependencies: - brace-expansion "^1.1.7" + brace-expansion "^2.0.1" minimatch@^5.0.1: version "5.1.6" @@ -992,92 +1581,109 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.5: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mkdirp@0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== +mocha@^10.2.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.4.0.tgz#ed03db96ee9cfc6d20c56f8e2af07b961dbae261" + integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA== dependencies: - minimist "^1.2.5" - -mocha@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" - integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== - dependencies: - ansi-colors "3.2.3" + ansi-colors "4.1.1" browser-stdout "1.3.1" - chokidar "3.3.0" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "8.1.0" he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - mkdirp "0.5.5" - ms "2.1.1" - node-environment-flags "1.0.6" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +moo@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" + integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -node-environment-flags@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" - integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== +nearley@^2.7.10: + version "2.20.1" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" + integrity sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ== + dependencies: + commander "^2.19.0" + moo "^0.5.0" + railroad-diagrams "^1.0.0" + randexp "0.4.6" + +nock@^13.3.3, nock@^13.3.4: + version "13.5.4" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.4.tgz#8918f0addc70a63736170fef7106a9721e0dc479" + integrity sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw== dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" + debug "^4.1.0" + json-stringify-safe "^5.0.1" + propagate "^2.0.0" + +node-fetch@2: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -object-inspect@^1.13.1: +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +nwsapi@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" + integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== + +object-inspect@^1.13.1, object-inspect@^1.7.0: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== -object-keys@^1.0.11, object-keys@^1.1.1: +object-is@^1.0.2, object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + +object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.assign@^4.1.5: +object.assign@^4.1.0, object.assign@^4.1.4, object.assign@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== @@ -1087,18 +1693,23 @@ object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" -object.getownpropertydescriptors@^2.0.3: - version "2.1.8" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" - integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== +object.entries@^1.1.1: + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +object.values@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== dependencies: - array.prototype.reduce "^1.0.6" call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.23.2" es-object-atoms "^1.0.0" - gopd "^1.0.1" - safe-array-concat "^1.1.2" once@^1.3.0: version "1.4.0" @@ -1107,41 +1718,61 @@ once@^1.3.0: dependencies: wrappy "1" -p-limit@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: - p-try "^2.0.0" + yocto-queue "^0.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: - p-limit "^2.0.0" + p-limit "^3.0.2" -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== +parse5@^7.0.0, parse5@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -picomatch@^2.0.4, picomatch@^2.2.2, picomatch@^2.3.1: +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -1151,16 +1782,45 @@ possible-typed-array-names@^1.0.0: resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== +prettier@^3.0.3: + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + +pretty-format@^27.0.2: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== +propagate@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" + integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== + +psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== +punycode@^2.1.1, punycode@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + qs@^6.11.2: version "6.12.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.0.tgz#edd40c3b823995946a8a0b1f208669c7a200db77" @@ -1178,6 +1838,51 @@ query-string@^7.1.3: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +raf@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +railroad-diagrams@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" + integrity sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A== + +randexp@0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" + integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== + dependencies: + discontinuous-range "1.0.0" + ret "~0.1.10" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + react@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" @@ -1185,12 +1890,12 @@ react@^18.2.0: dependencies: loose-envify "^1.1.0" -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: - picomatch "^2.0.4" + picomatch "^2.2.1" redux-observable@^3.0.0-rc.2: version "3.0.0-rc.2" @@ -1207,7 +1912,12 @@ redux@^5.0.1: resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b" integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== -regexp.prototype.flags@^1.5.2: +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== @@ -1222,10 +1932,10 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== reselect@^5.0.1: version "5.1.0" @@ -1246,6 +1956,11 @@ resolve@^1.22.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + rollup-plugin-sourcemaps@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.5.0.tgz#898e8411c9b5b7b524b4d96c3b41d5c43f9da77e" @@ -1261,6 +1976,19 @@ rollup@^2.79.1: optionalDependencies: fsevents "~2.3.2" +rrweb-cssom@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz#ed298055b97cbddcdeb278f904857629dec5e0e1" + integrity sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw== + +rst-selector-parser@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" + integrity sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA== + dependencies: + lodash.flattendeep "^4.4.0" + nearley "^2.7.10" + rxjs@^7.8.1: version "7.8.1" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" @@ -1278,6 +2006,11 @@ safe-array-concat@^1.1.2: has-symbols "^1.0.3" isarray "^2.0.5" +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-regex-test@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" @@ -1287,15 +2020,31 @@ safe-regex-test@^1.0.3: es-errors "^1.3.0" is-regex "^1.1.4" -semver@^5.7.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" set-function-length@^1.2.1: version "1.2.2" @@ -1353,7 +2102,7 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@^0.6.0, source-map@~0.6.1: +source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -1363,34 +2112,28 @@ split-on-first@^1.0.0: resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + dependencies: + internal-slot "^1.0.4" strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== -"string-width@^1.0.2 || 2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" -string.prototype.trim@^1.2.9: +string.prototype.trim@^1.2.1, string.prototype.trim@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== @@ -1418,31 +2161,24 @@ string.prototype.trimstart@^1.0.7: define-properties "^1.2.1" es-object-atoms "^1.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^4.1.0" + ansi-regex "^5.0.1" -strip-json-comments@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== +strip-json-comments@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: - has-flag "^3.0.0" + has-flag "^4.0.0" supports-color@^5.3.0: version "5.5.0" @@ -1451,11 +2187,23 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + terser@^5.30.1: version "5.30.1" resolved "https://registry.yarnpkg.com/terser/-/terser-5.30.1.tgz#4faaeedf00d322eb953dcc1f4eeaa9711c15f093" @@ -1473,11 +2221,57 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +tough-cookie@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tr46@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-4.1.1.tgz#281a758dcc82aeb4fe38c7dfe4d11a395aac8469" + integrity sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw== + dependencies: + punycode "^2.3.0" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-node@^10.9.1: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + tslib@^2.1.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +type-detect@^4.0.0, type-detect@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + typed-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" @@ -1527,14 +2321,6 @@ typescript@^5.3.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.3.tgz#5c6fedd4c87bee01cd7a528a30145521f8e0feff" integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== -uglify-es@3.3.9: - version "3.3.9" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" - integrity sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ== - dependencies: - commander "~2.13.0" - source-map "~0.6.1" - unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -1545,11 +2331,29 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url-search-params-polyfill@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/url-search-params-polyfill/-/url-search-params-polyfill-5.1.0.tgz#f0405dcc2e921bf7f5fdf8c4e616f1e8088ef31b" + integrity sha512-yjFY7uw2xRf9e8Mg4ZVkZwtp8dMCC4cbBkEIZiTDpuSY2WJ9+Quw0wRhxncv32qaMQwmBQT+P847rO8PrFhhDA== + url@^0.11.0: version "0.11.3" resolved "https://registry.yarnpkg.com/url/-/url-0.11.3.tgz#6f495f4b935de40ce4a0a52faee8954244f3d3ad" @@ -1563,6 +2367,61 @@ uuid@^9.0.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +w3c-xmlserializer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== + dependencies: + xml-name-validator "^4.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== + dependencies: + iconv-lite "0.6.3" + +whatwg-fetch@^3.6.19: + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== + +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^12.0.0, whatwg-url@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-12.0.1.tgz#fd7bcc71192e7c3a2a97b9a8d6b094853ed8773c" + integrity sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ== + dependencies: + tr46 "^4.1.1" + webidl-conversions "^7.0.0" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -1574,12 +2433,17 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-module@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" - integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== +which-collection@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" -which-typed-array@^1.1.14, which-typed-array@^1.1.15: +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== @@ -1590,34 +2454,30 @@ which-typed-array@^1.1.14, which-typed-array@^1.1.15: gopd "^1.0.1" has-tostringtag "^1.0.2" -which@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +ws@^8.13.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + xhr-mock@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/xhr-mock/-/xhr-mock-2.5.1.tgz#c591498a8269cc1ce5fefac20d590357affd348b" @@ -1626,40 +2486,65 @@ xhr-mock@^2.5.1: global "^4.3.0" url "^0.11.0" -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -yargs-parser@13.1.2, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== - dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" - -yargs@13.3.2, yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" +xhr2@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.2.1.tgz#4e73adc4f9cfec9cbd2157f73efdce3a5f108a93" + integrity sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw== + +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==