@internetarchive/collection-browser 4.2.1-alpha-webdev7004.0 → 4.2.1-alpha-webdev8165.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"restoration-state-handler.test.js","sourceRoot":"","sources":["../../test/restoration-state-handler.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { SearchType } from '@internetarchive/search-service';\nimport { expect } from '@open-wc/testing';\nimport { SortField, getDefaultSelectedFacets } from '../src/models';\nimport { RestorationStateHandler } from '../src/restoration-state-handler';\n\ndescribe('Restoration state handler', () => {\n it('should restore query from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?query=boop';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.baseQuery).to.equal('boop');\n });\n\n it('should restore default search type from URL without valid sin', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sin=foo';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.searchType).to.equal(SearchType.DEFAULT);\n });\n\n it('should restore default search type if sin explicitly empty in URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sin=';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.searchType).to.equal(SearchType.DEFAULT);\n });\n\n it('should restore full text search type from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sin=TXT';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.searchType).to.equal(SearchType.FULLTEXT);\n });\n\n it('should restore radio search type from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sin=RADIO';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.searchType).to.equal(SearchType.RADIO);\n });\n\n it('should restore TV search type from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sin=TV';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.searchType).to.equal(SearchType.TV);\n });\n\n it('should restore metadata search type from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sin=MD';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.searchType).to.equal(SearchType.METADATA);\n });\n\n it('should restore page number from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?page=42';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.currentPage).to.equal(42);\n });\n\n it('should restore selected year facets from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[]=year:\"2018\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedFacets.year?.['2018'].state).to.equal(\n 'selected',\n );\n });\n\n it('should ignore unrecognized facet types in URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[]=foo:\"bar\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedFacets).to.deep.equal(\n getDefaultSelectedFacets(),\n );\n });\n\n it('should restore selected date range facets from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[]=year:\"2018+TO+2021\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.minSelectedDate).to.equal('2018');\n expect(restorationState.maxSelectedDate).to.equal('2021');\n });\n\n it('should restore creator filter from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[]=firstCreator:F';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedCreatorFilter).to.equal('F');\n });\n\n it('should restore title filter from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[]=firstTitle:F';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedTitleFilter).to.equal('F');\n });\n\n it('should restore other selected facets from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[]=subject:\"foo\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedFacets.subject?.foo.state).to.equal(\n 'selected',\n );\n });\n\n it('should restore negative facets from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?not[]=year:2018';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedFacets.year?.['2018'].state).to.equal(\n 'hidden',\n );\n });\n\n it('should restore multiple selected/negative facets from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search =\n '?and[]=collection:\"foo\"&and[]=collection:\"bar\"&not[]=collection:\"baz\"&not[]=collection:\"boop\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n\n expect(restorationState.selectedFacets.collection?.foo.state).to.equal(\n 'selected',\n );\n expect(restorationState.selectedFacets.collection?.bar.state).to.equal(\n 'selected',\n );\n\n expect(restorationState.selectedFacets.collection?.baz.state).to.equal(\n 'hidden',\n );\n expect(restorationState.selectedFacets.collection?.boop.state).to.equal(\n 'hidden',\n );\n });\n\n it('negative facets take precedence if both present in URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[]=collection:\"foo\"&not[]=collection:\"foo\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedFacets.collection?.foo.state).to.equal(\n 'hidden',\n );\n });\n\n it('should restore selected facets with numbers in the square brackets', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[12]=subject:\"foo\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedFacets.subject?.foo.state).to.equal(\n 'selected',\n );\n });\n\n it('should restore negative facets with numbers in the square brackets', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?not[12]=year:2018';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedFacets.year?.['2018'].state).to.equal(\n 'hidden',\n );\n });\n\n it('should restore any TV clip filters from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n const url = new URL(window.location.href);\n\n // Commercials\n url.search = '?only_commercials=1';\n window.history.replaceState({ path: url.href }, '', url.href);\n const commercialsRestorationState = handler.getRestorationState();\n expect(\n commercialsRestorationState.selectedFacets.clip_type?.commercial.state,\n ).to.equal('selected');\n\n // Fact checks\n url.search = '?only_factchecks=1';\n window.history.replaceState({ path: url.href }, '', url.href);\n const factchecksRestorationState = handler.getRestorationState();\n expect(\n factchecksRestorationState.selectedFacets.clip_type?.['fact check'].state,\n ).to.equal('selected');\n\n // Quotes\n url.search = '?only_quotes=1';\n window.history.replaceState({ path: url.href }, '', url.href);\n const quotesRestorationState = handler.getRestorationState();\n expect(\n quotesRestorationState.selectedFacets.clip_type?.quote.state,\n ).to.equal('selected');\n\n // No filter param\n url.search = '';\n window.history.replaceState({ path: url.href }, '', url.href);\n const unfilteredRestorationState = handler.getRestorationState();\n expect(unfilteredRestorationState.selectedFacets.clip_type).to.deep.equal(\n {},\n );\n });\n\n it('should restore sort from URL (space format)', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sort=date+desc';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedSort).to.equal('date');\n expect(restorationState.sortDirection).to.equal('desc');\n });\n\n it('should restore sort from URL (prefix format, desc)', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sort=-date';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedSort).to.equal('date');\n expect(restorationState.sortDirection).to.equal('desc');\n });\n\n it('should restore sort from URL (prefix format, asc)', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sort=date';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedSort).to.equal('date');\n expect(restorationState.sortDirection).to.equal('asc');\n });\n\n it('should restore sort from URL (space format)', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sort=foo+desc';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedSort).to.equal('unrecognized');\n expect(restorationState.sortDirection).to.equal('desc');\n });\n\n it('should restore unrecognized sort from URL (prefix format)', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sort=-foo';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedSort).to.equal('unrecognized');\n expect(restorationState.sortDirection).to.equal('desc');\n });\n\n it('should save direction to URL even for unrecognized sort fields', async () => {\n const url = new URL(window.location.href);\n url.search = '?sort=foo';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n handler.persistState({\n selectedSort: SortField.unrecognized,\n sortDirection: 'desc',\n selectedFacets: getDefaultSelectedFacets(),\n });\n\n expect(window.location.search).to.equal('?sort=-foo');\n });\n\n it('should keep existing direction for unrecognized sort fields when unspecified in state', async () => {\n const url = new URL(window.location.href);\n url.search = '?sort=foo+desc';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n handler.persistState({\n selectedSort: SortField.unrecognized,\n selectedFacets: getDefaultSelectedFacets(),\n });\n\n expect(window.location.search).to.equal('?sort=-foo');\n });\n\n it('should just ignore unrecognized sort fields w/ unknown formats', async () => {\n const url = new URL(window.location.href);\n url.search = '?sort=+foo';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n handler.persistState({\n selectedSort: SortField.unrecognized,\n selectedFacets: getDefaultSelectedFacets(),\n });\n\n expect(window.location.search).to.equal('?sort=+foo');\n });\n\n it('should not save current page state to the URL for page 1', async () => {\n const url = new URL(window.location.href);\n url.search = '';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n handler.persistState({\n currentPage: 1,\n selectedFacets: getDefaultSelectedFacets(),\n });\n\n expect(window.location.search).to.be.empty;\n });\n\n it('should save current page state to the URL when page > 1', async () => {\n const url = new URL(window.location.href);\n url.search = '';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n handler.persistState({\n currentPage: 2,\n selectedFacets: getDefaultSelectedFacets(),\n });\n\n expect(window.location.search).to.equal('?page=2');\n });\n\n it('should upgrade legacy search params to new ones', async () => {\n const url = new URL(window.location.href);\n url.search = '?q=foo';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n const restorationState = handler.getRestorationState();\n expect(restorationState.baseQuery).to.equal('foo');\n\n handler.persistState(restorationState);\n expect(window.location.search).to.equal('?query=foo');\n });\n\n it('should remove empty sin param', async () => {\n const url = new URL(window.location.href);\n url.search = '?sin=';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n\n handler.persistState({ selectedFacets: getDefaultSelectedFacets() });\n expect(window.location.search).to.equal('');\n });\n\n it('should persist metadata search type only when option is true', async () => {\n const url = new URL(window.location.href);\n url.search = '?sin=';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n\n handler.persistState(\n {\n selectedFacets: getDefaultSelectedFacets(),\n searchType: SearchType.METADATA,\n },\n { persistMetadataSearchType: false },\n );\n expect(window.location.search).to.equal('');\n\n handler.persistState(\n {\n selectedFacets: getDefaultSelectedFacets(),\n searchType: SearchType.METADATA,\n },\n { persistMetadataSearchType: true },\n );\n expect(window.location.search).to.equal('?sin=MD');\n });\n\n it('round trip load/persist should erase numbers in square brackets', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[0]=subject:\"foo\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n // Load state from the URL and immediately persist it back to the URL\n const restorationState = handler.getRestorationState();\n handler.persistState(restorationState);\n\n // Ensure the new URL includes the \"normalized\" facet parameter and not the numbered one\n expect(decodeURIComponent(window.location.search)).to.include(\n 'and[]=subject:\"foo\"',\n );\n expect(new URL(window.location.href).searchParams.get('and[0]')).to.be.null;\n });\n});\n"]}
1
+ {"version":3,"file":"restoration-state-handler.test.js","sourceRoot":"","sources":["../../test/restoration-state-handler.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAE3E,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC;QAC3B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC;QACxB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC;QACrB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC;QACxB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC;QAC1B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;QACvB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;QACvB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC;QACxB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,oBAAoB,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CACnE,UAAU,CACX,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,kBAAkB,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CACnD,wBAAwB,EAAE,CAC3B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,4BAA4B,CAAC;QAC1C,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,uBAAuB,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,qBAAqB,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,sBAAsB,CAAC;QACpC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CACjE,UAAU,CACX,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,kBAAkB,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CACnE,QAAQ,CACT,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM;YACR,+FAA+F,CAAC;QAClG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAEvD,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CACpE,UAAU,CACX,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CACpE,UAAU,CACX,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CACpE,QAAQ,CACT,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CACrE,QAAQ,CACT,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,gDAAgD,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CACpE,QAAQ,CACT,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,wBAAwB,CAAC;QACtC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CACjE,UAAU,CACX,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,oBAAoB,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CACnE,QAAQ,CACT,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE1C,cAAc;QACd,GAAG,CAAC,MAAM,GAAG,qBAAqB,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,2BAA2B,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAClE,MAAM,CACJ,2BAA2B,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,CACvE,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAEvB,cAAc;QACd,GAAG,CAAC,MAAM,GAAG,oBAAoB,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjE,MAAM,CACJ,0BAA0B,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC,KAAK,CAC1E,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAEvB,SAAS;QACT,GAAG,CAAC,MAAM,GAAG,gBAAgB,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,sBAAsB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAC7D,MAAM,CACJ,sBAAsB,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAC7D,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAEvB,kBAAkB;QAClB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjE,MAAM,CAAC,0BAA0B,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CACvE,EAAE,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,iBAAiB,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC;QAC3B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC;QAC1B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,gBAAgB,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC/D,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC;QAC1B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC/D,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC;QACzB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,YAAY,CAAC;YACnB,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,aAAa,EAAE,MAAM;YACrB,cAAc,EAAE,wBAAwB,EAAE;SAC3C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;QACrG,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,gBAAgB,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,YAAY,CAAC;YACnB,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,cAAc,EAAE,wBAAwB,EAAE;SAC3C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC;QAC1B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,YAAY,CAAC;YACnB,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,cAAc,EAAE,wBAAwB,EAAE;SAC3C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,YAAY,CAAC;YACnB,WAAW,EAAE,CAAC;YACd,cAAc,EAAE,wBAAwB,EAAE;SAC3C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,YAAY,CAAC;YACnB,WAAW,EAAE,CAAC;YACd,cAAc,EAAE,wBAAwB,EAAE;SAC3C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;QACtB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEnD,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC;QACrB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,OAAO,CAAC,YAAY,CAAC,EAAE,cAAc,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC;QACrB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,OAAO,CAAC,YAAY,CAClB;YACE,cAAc,EAAE,wBAAwB,EAAE;YAC1C,UAAU,EAAE,UAAU,CAAC,QAAQ;SAChC,EACD,EAAE,yBAAyB,EAAE,KAAK,EAAE,CACrC,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAE5C,OAAO,CAAC,YAAY,CAClB;YACE,cAAc,EAAE,wBAAwB,EAAE;YAC1C,UAAU,EAAE,UAAU,CAAC,QAAQ;SAChC,EACD,EAAE,yBAAyB,EAAE,IAAI,EAAE,CACpC,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,YAAY,CAAC;YACnB,YAAY,EAAE,SAAS,CAAC,SAAS;YACjC,cAAc,EAAE,wBAAwB,EAAE;SAC3C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,YAAY,CAAC;YACnB,UAAU,EAAE,UAAU,CAAC,EAAE;YACzB,YAAY,EAAE,SAAS,CAAC,SAAS;YACjC,cAAc,EAAE,wBAAwB,EAAE;SAC3C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,YAAY,CAAC;YACnB,YAAY,EAAE,SAAS,CAAC,OAAO;YAC/B,cAAc,EAAE,wBAAwB,EAAE;SAC3C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,YAAY,CAAC;YACnB,YAAY,EAAE,SAAS,CAAC,aAAa;YACrC,aAAa,EAAE,MAAM;YACrB,cAAc,EAAE,wBAAwB,EAAE;SAC3C,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,mEAAmE;QACnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,iBAAiB,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,sEAAsE;QACtE,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEpE,mEAAmE;QACnE,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,cAAc,CAAC;QAC5B,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEpE,uDAAuD;QACvD,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEnE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,GAAG,CAAC,MAAM,GAAG,uBAAuB,CAAC;QACrC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9D,qEAAqE;QACrE,MAAM,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvD,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QAEvC,wFAAwF;QACxF,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAC3D,qBAAqB,CACtB,CAAC;QACF,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { SearchType } from '@internetarchive/search-service';\nimport { expect } from '@open-wc/testing';\nimport { SortField, getDefaultSelectedFacets } from '../src/models';\nimport { RestorationStateHandler } from '../src/restoration-state-handler';\n\ndescribe('Restoration state handler', () => {\n it('should restore query from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?query=boop';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.baseQuery).to.equal('boop');\n });\n\n it('should restore default search type from URL without valid sin', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sin=foo';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.searchType).to.equal(SearchType.DEFAULT);\n });\n\n it('should restore default search type if sin explicitly empty in URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sin=';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.searchType).to.equal(SearchType.DEFAULT);\n });\n\n it('should restore full text search type from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sin=TXT';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.searchType).to.equal(SearchType.FULLTEXT);\n });\n\n it('should restore radio search type from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sin=RADIO';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.searchType).to.equal(SearchType.RADIO);\n });\n\n it('should restore TV search type from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sin=TV';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.searchType).to.equal(SearchType.TV);\n });\n\n it('should restore metadata search type from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sin=MD';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.searchType).to.equal(SearchType.METADATA);\n });\n\n it('should restore page number from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?page=42';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.currentPage).to.equal(42);\n });\n\n it('should restore selected year facets from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[]=year:\"2018\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedFacets.year?.['2018'].state).to.equal(\n 'selected',\n );\n });\n\n it('should ignore unrecognized facet types in URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[]=foo:\"bar\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedFacets).to.deep.equal(\n getDefaultSelectedFacets(),\n );\n });\n\n it('should restore selected date range facets from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[]=year:\"2018+TO+2021\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.minSelectedDate).to.equal('2018');\n expect(restorationState.maxSelectedDate).to.equal('2021');\n });\n\n it('should restore creator filter from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[]=firstCreator:F';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedCreatorFilter).to.equal('F');\n });\n\n it('should restore title filter from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[]=firstTitle:F';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedTitleFilter).to.equal('F');\n });\n\n it('should restore other selected facets from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[]=subject:\"foo\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedFacets.subject?.foo.state).to.equal(\n 'selected',\n );\n });\n\n it('should restore negative facets from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?not[]=year:2018';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedFacets.year?.['2018'].state).to.equal(\n 'hidden',\n );\n });\n\n it('should restore multiple selected/negative facets from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search =\n '?and[]=collection:\"foo\"&and[]=collection:\"bar\"&not[]=collection:\"baz\"&not[]=collection:\"boop\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n\n expect(restorationState.selectedFacets.collection?.foo.state).to.equal(\n 'selected',\n );\n expect(restorationState.selectedFacets.collection?.bar.state).to.equal(\n 'selected',\n );\n\n expect(restorationState.selectedFacets.collection?.baz.state).to.equal(\n 'hidden',\n );\n expect(restorationState.selectedFacets.collection?.boop.state).to.equal(\n 'hidden',\n );\n });\n\n it('negative facets take precedence if both present in URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[]=collection:\"foo\"&not[]=collection:\"foo\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedFacets.collection?.foo.state).to.equal(\n 'hidden',\n );\n });\n\n it('should restore selected facets with numbers in the square brackets', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[12]=subject:\"foo\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedFacets.subject?.foo.state).to.equal(\n 'selected',\n );\n });\n\n it('should restore negative facets with numbers in the square brackets', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?not[12]=year:2018';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedFacets.year?.['2018'].state).to.equal(\n 'hidden',\n );\n });\n\n it('should restore any TV clip filters from URL', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n const url = new URL(window.location.href);\n\n // Commercials\n url.search = '?only_commercials=1';\n window.history.replaceState({ path: url.href }, '', url.href);\n const commercialsRestorationState = handler.getRestorationState();\n expect(\n commercialsRestorationState.selectedFacets.clip_type?.commercial.state,\n ).to.equal('selected');\n\n // Fact checks\n url.search = '?only_factchecks=1';\n window.history.replaceState({ path: url.href }, '', url.href);\n const factchecksRestorationState = handler.getRestorationState();\n expect(\n factchecksRestorationState.selectedFacets.clip_type?.['fact check'].state,\n ).to.equal('selected');\n\n // Quotes\n url.search = '?only_quotes=1';\n window.history.replaceState({ path: url.href }, '', url.href);\n const quotesRestorationState = handler.getRestorationState();\n expect(\n quotesRestorationState.selectedFacets.clip_type?.quote.state,\n ).to.equal('selected');\n\n // No filter param\n url.search = '';\n window.history.replaceState({ path: url.href }, '', url.href);\n const unfilteredRestorationState = handler.getRestorationState();\n expect(unfilteredRestorationState.selectedFacets.clip_type).to.deep.equal(\n {},\n );\n });\n\n it('should restore sort from URL (space format)', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sort=date+desc';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedSort).to.equal('date');\n expect(restorationState.sortDirection).to.equal('desc');\n });\n\n it('should restore sort from URL (prefix format, desc)', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sort=-date';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedSort).to.equal('date');\n expect(restorationState.sortDirection).to.equal('desc');\n });\n\n it('should restore sort from URL (prefix format, asc)', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sort=date';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedSort).to.equal('date');\n expect(restorationState.sortDirection).to.equal('asc');\n });\n\n it('should restore sort from URL (space format)', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sort=foo+desc';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedSort).to.equal('unrecognized');\n expect(restorationState.sortDirection).to.equal('desc');\n });\n\n it('should restore unrecognized sort from URL (prefix format)', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?sort=-foo';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedSort).to.equal('unrecognized');\n expect(restorationState.sortDirection).to.equal('desc');\n });\n\n it('should save direction to URL even for unrecognized sort fields', async () => {\n const url = new URL(window.location.href);\n url.search = '?sort=foo';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n handler.persistState({\n selectedSort: SortField.unrecognized,\n sortDirection: 'desc',\n selectedFacets: getDefaultSelectedFacets(),\n });\n\n expect(window.location.search).to.equal('?sort=-foo');\n });\n\n it('should keep existing direction for unrecognized sort fields when unspecified in state', async () => {\n const url = new URL(window.location.href);\n url.search = '?sort=foo+desc';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n handler.persistState({\n selectedSort: SortField.unrecognized,\n selectedFacets: getDefaultSelectedFacets(),\n });\n\n expect(window.location.search).to.equal('?sort=-foo');\n });\n\n it('should just ignore unrecognized sort fields w/ unknown formats', async () => {\n const url = new URL(window.location.href);\n url.search = '?sort=+foo';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n handler.persistState({\n selectedSort: SortField.unrecognized,\n selectedFacets: getDefaultSelectedFacets(),\n });\n\n expect(window.location.search).to.equal('?sort=+foo');\n });\n\n it('should not save current page state to the URL for page 1', async () => {\n const url = new URL(window.location.href);\n url.search = '';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n handler.persistState({\n currentPage: 1,\n selectedFacets: getDefaultSelectedFacets(),\n });\n\n expect(window.location.search).to.be.empty;\n });\n\n it('should save current page state to the URL when page > 1', async () => {\n const url = new URL(window.location.href);\n url.search = '';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n handler.persistState({\n currentPage: 2,\n selectedFacets: getDefaultSelectedFacets(),\n });\n\n expect(window.location.search).to.equal('?page=2');\n });\n\n it('should upgrade legacy search params to new ones', async () => {\n const url = new URL(window.location.href);\n url.search = '?q=foo';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n const restorationState = handler.getRestorationState();\n expect(restorationState.baseQuery).to.equal('foo');\n\n handler.persistState(restorationState);\n expect(window.location.search).to.equal('?query=foo');\n });\n\n it('should remove empty sin param', async () => {\n const url = new URL(window.location.href);\n url.search = '?sin=';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n\n handler.persistState({ selectedFacets: getDefaultSelectedFacets() });\n expect(window.location.search).to.equal('');\n });\n\n it('should persist metadata search type only when option is true', async () => {\n const url = new URL(window.location.href);\n url.search = '?sin=';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n\n handler.persistState(\n {\n selectedFacets: getDefaultSelectedFacets(),\n searchType: SearchType.METADATA,\n },\n { persistMetadataSearchType: false },\n );\n expect(window.location.search).to.equal('');\n\n handler.persistState(\n {\n selectedFacets: getDefaultSelectedFacets(),\n searchType: SearchType.METADATA,\n },\n { persistMetadataSearchType: true },\n );\n expect(window.location.search).to.equal('?sin=MD');\n });\n\n it('should write relevance sort to URL when explicitly selected', async () => {\n const url = new URL(window.location.href);\n url.search = '';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n handler.persistState({\n selectedSort: SortField.relevance,\n selectedFacets: getDefaultSelectedFacets(),\n });\n\n expect(window.location.search).to.equal('?sort=relevance');\n });\n\n it('should write relevance sort to URL for TV search', async () => {\n const url = new URL(window.location.href);\n url.search = '';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n handler.persistState({\n searchType: SearchType.TV,\n selectedSort: SortField.relevance,\n selectedFacets: getDefaultSelectedFacets(),\n });\n\n expect(window.location.search).to.include('sort=relevance');\n });\n\n it('should not write sort param for SortField.default', async () => {\n const url = new URL(window.location.href);\n url.search = '';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n handler.persistState({\n selectedSort: SortField.default,\n selectedFacets: getDefaultSelectedFacets(),\n });\n\n expect(window.location.search).to.not.include('sort');\n });\n\n it('should write datefavorited sort to URL when explicitly selected', async () => {\n const url = new URL(window.location.href);\n url.search = '';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n handler.persistState({\n selectedSort: SortField.datefavorited,\n sortDirection: 'desc',\n selectedFacets: getDefaultSelectedFacets(),\n });\n\n expect(window.location.search).to.equal('?sort=-favoritedate');\n });\n\n it('should round-trip relevance sort via URL', async () => {\n // 1. Set the URL to include the new canonical relevance sort param\n const url = new URL(window.location.href);\n url.search = '?sort=relevance';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n\n // 2. Load state from the URL and verify it resolves to relevance sort\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedSort).to.equal(SortField.relevance);\n\n // 3. Persist the state back and verify the sort param is preserved\n handler.persistState(restorationState);\n expect(window.location.search).to.include('sort=relevance');\n });\n\n it('should still resolve legacy _score URL param to relevance sort', async () => {\n const url = new URL(window.location.href);\n url.search = '?sort=_score';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n const handler = new RestorationStateHandler({ context: 'search' });\n const restorationState = handler.getRestorationState();\n expect(restorationState.selectedSort).to.equal(SortField.relevance);\n\n // Re-persisting upgrades the URL to the canonical form\n handler.persistState(restorationState);\n expect(window.location.search).to.include('sort=relevance');\n });\n\n it('round trip load/persist should erase numbers in square brackets', async () => {\n const handler = new RestorationStateHandler({ context: 'search' });\n\n const url = new URL(window.location.href);\n url.search = '?and[0]=subject:\"foo\"';\n window.history.replaceState({ path: url.href }, '', url.href);\n\n // Load state from the URL and immediately persist it back to the URL\n const restorationState = handler.getRestorationState();\n handler.persistState(restorationState);\n\n // Ensure the new URL includes the \"normalized\" facet parameter and not the numbered one\n expect(decodeURIComponent(window.location.search)).to.include(\n 'and[]=subject:\"foo\"',\n );\n expect(new URL(window.location.href).searchParams.get('and[0]')).to.be.null;\n });\n});\n"]}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "The Internet Archive Collection Browser.",
4
4
  "license": "AGPL-3.0-only",
5
5
  "author": "Internet Archive",
6
- "version": "4.2.1-alpha-webdev7004.0",
6
+ "version": "4.2.1-alpha-webdev8165.0",
7
7
  "main": "dist/index.js",
8
8
  "module": "dist/index.js",
9
9
  "scripts": {
@@ -603,24 +603,6 @@ export class CollectionBrowserDataSource
603
603
  );
604
604
  }
605
605
 
606
- /**
607
- * Returns the search type to actually use for fetches.
608
- * When within a collection with an empty query and FTS selected,
609
- * falls back to metadata search since FTS requires a non-empty query
610
- * and we'd still like to show the unfiltered collection in that case.
611
- */
612
- private get effectiveSearchType(): SearchType {
613
- const trimmedQuery = this.host.baseQuery?.trim();
614
- if (
615
- !trimmedQuery &&
616
- this.host.withinCollection &&
617
- this.host.searchType === SearchType.FULLTEXT
618
- ) {
619
- return SearchType.METADATA;
620
- }
621
- return this.host.searchType;
622
- }
623
-
624
606
  /**
625
607
  * @inheritdoc
626
608
  */
@@ -633,11 +615,9 @@ export class CollectionBrowserDataSource
633
615
  const isCollectionSearch = !!this.host.withinCollection;
634
616
  const isProfileSearch = !!this.host.withinProfile;
635
617
  const hasProfileElement = !!this.host.profileElement;
636
-
637
- const searchType = this.effectiveSearchType;
638
- const isDefaultedSearch = searchType === SearchType.DEFAULT;
639
- const isMetadataSearch = searchType === SearchType.METADATA;
640
- const isTvSearch = searchType === SearchType.TV;
618
+ const isDefaultedSearch = this.host.searchType === SearchType.DEFAULT;
619
+ const isMetadataSearch = this.host.searchType === SearchType.METADATA;
620
+ const isTvSearch = this.host.searchType === SearchType.TV;
641
621
 
642
622
  // Metadata/tv searches within a collection are allowed to have no query.
643
623
  const isValidForCollectionSearch =
@@ -716,7 +696,7 @@ export class CollectionBrowserDataSource
716
696
  const pageTarget = this.host.withinCollection ?? profileKey;
717
697
  const sortField = this.host.selectedSort ?? 'none';
718
698
  const sortDirection = this.host.sortDirection ?? 'none';
719
- return `fq:${this.fullQuery}-pt:${pageTarget}-st:${this.effectiveSearchType}-sf:${sortField}-sd:${sortDirection}`;
699
+ return `fq:${this.fullQuery}-pt:${pageTarget}-st:${this.host.searchType}-sf:${sortField}-sd:${sortDirection}`;
720
700
  }
721
701
 
722
702
  /**
@@ -726,7 +706,7 @@ export class CollectionBrowserDataSource
726
706
  get facetFetchQueryKey(): string {
727
707
  const profileKey = `pf;${this.host.withinProfile}--pe;${this.host.profileElement}`;
728
708
  const pageTarget = this.host.withinCollection ?? profileKey;
729
- return `facets-fq:${this.fullQuery}-pt:${pageTarget}-st:${this.effectiveSearchType}`;
709
+ return `facets-fq:${this.fullQuery}-pt:${pageTarget}-st:${this.host.searchType}`;
730
710
  }
731
711
 
732
712
  /**
@@ -1037,7 +1017,7 @@ export class CollectionBrowserDataSource
1037
1017
 
1038
1018
  const searchResponse = await this.host.searchService?.search(
1039
1019
  params,
1040
- this.effectiveSearchType,
1020
+ this.host.searchType,
1041
1021
  );
1042
1022
  const success = searchResponse?.success;
1043
1023
 
@@ -1173,7 +1153,7 @@ export class CollectionBrowserDataSource
1173
1153
  // log('=== FIRING PAGE REQUEST ===', params);
1174
1154
  const searchResponse = await this.host.searchService?.search(
1175
1155
  params,
1176
- this.effectiveSearchType,
1156
+ this.host.searchType,
1177
1157
  );
1178
1158
  // log('=== RECEIVED PAGE RESPONSE IN CB ===', searchResponse);
1179
1159
  const success = searchResponse?.success;
@@ -1362,7 +1342,7 @@ export class CollectionBrowserDataSource
1362
1342
 
1363
1343
  const searchResponse = await this.host.searchService?.search(
1364
1344
  params,
1365
- this.effectiveSearchType,
1345
+ this.host.searchType,
1366
1346
  );
1367
1347
 
1368
1348
  return (searchResponse?.success?.response?.aggregations?.[
package/src/models.ts CHANGED
@@ -364,13 +364,6 @@ export interface SortOption {
364
364
  */
365
365
  shownInSortBar: boolean;
366
366
 
367
- /**
368
- * Whether this sort option should be saved to the URL.
369
- * If false, then no `sort` param will be added to the URL when this sort option
370
- * is selected.
371
- */
372
- shownInURL: boolean;
373
-
374
367
  /**
375
368
  * Whether this sort option is passed to the search service.
376
369
  * If false, then no sort param will be passed to the search service at all when
@@ -408,7 +401,6 @@ export const SORT_OPTIONS: Record<SortField, SortOption> = {
408
401
  defaultSortDirection: null,
409
402
  canSetDirection: false,
410
403
  shownInSortBar: false,
411
- shownInURL: false,
412
404
  handledBySearchService: false, // We rely on the PPS default sort handling in these cases
413
405
  displayName: '',
414
406
  urlNames: ['', null, undefined], // Empty or nullish sort params result in default sorting
@@ -422,30 +414,30 @@ export const SORT_OPTIONS: Record<SortField, SortOption> = {
422
414
  defaultSortDirection: null,
423
415
  canSetDirection: true,
424
416
  shownInSortBar: false,
425
- shownInURL: false,
426
417
  handledBySearchService: true, // The unrecognized sort param is passed along as-is
427
418
  displayName: '',
428
419
  urlNames: [],
429
420
  },
430
- // Relevance sort is unique in that it does not produce a URL param when it is set.
431
- // It is only available when there is a user-specified query that relevancy can be scored against.
432
- // Therefore, it does not appear as a sort bar option when browsing a collection with no query set.
421
+ // Relevance sort is only available when there is a user-specified query that relevancy can be
422
+ // scored against. Therefore, it does not appear as a sort bar option when browsing a collection
423
+ // with no query set. When relevance is the page default (e.g., for regular searches), it is
424
+ // remapped to SortField.default and does not produce a URL param. When it is NOT the default
425
+ // (e.g., TV searches), it writes `sort=relevance` to the URL. The `_score` alias is retained
426
+ // for backwards compatibility (it's what the PPS uses under the hood).
433
427
  [SortField.relevance]: {
434
428
  field: SortField.relevance,
435
429
  defaultSortDirection: null,
436
430
  canSetDirection: false,
437
431
  shownInSortBar: true,
438
- shownInURL: false,
439
432
  handledBySearchService: false,
440
433
  displayName: 'Relevance',
441
- urlNames: ['_score'],
434
+ urlNames: ['relevance', '_score'],
442
435
  },
443
436
  [SortField.alltimeview]: {
444
437
  field: SortField.alltimeview,
445
438
  defaultSortDirection: 'desc',
446
439
  canSetDirection: true,
447
440
  shownInSortBar: true,
448
- shownInURL: true,
449
441
  handledBySearchService: true,
450
442
  searchServiceKey: 'downloads',
451
443
  displayName: 'All-time views',
@@ -456,7 +448,6 @@ export const SORT_OPTIONS: Record<SortField, SortOption> = {
456
448
  defaultSortDirection: 'desc',
457
449
  canSetDirection: true,
458
450
  shownInSortBar: true,
459
- shownInURL: true,
460
451
  handledBySearchService: true,
461
452
  searchServiceKey: 'week',
462
453
  displayName: 'Weekly views',
@@ -467,7 +458,6 @@ export const SORT_OPTIONS: Record<SortField, SortOption> = {
467
458
  defaultSortDirection: 'asc',
468
459
  canSetDirection: true,
469
460
  shownInSortBar: true,
470
- shownInURL: true,
471
461
  handledBySearchService: true,
472
462
  searchServiceKey: 'titleSorter',
473
463
  displayName: 'Title',
@@ -478,7 +468,6 @@ export const SORT_OPTIONS: Record<SortField, SortOption> = {
478
468
  defaultSortDirection: 'desc',
479
469
  canSetDirection: true,
480
470
  shownInSortBar: true,
481
- shownInURL: true,
482
471
  handledBySearchService: true,
483
472
  searchServiceKey: 'date',
484
473
  displayName: 'Date published',
@@ -489,7 +478,6 @@ export const SORT_OPTIONS: Record<SortField, SortOption> = {
489
478
  defaultSortDirection: 'desc',
490
479
  canSetDirection: true,
491
480
  shownInSortBar: true,
492
- shownInURL: true,
493
481
  handledBySearchService: true,
494
482
  searchServiceKey: 'publicdate',
495
483
  displayName: 'Date archived',
@@ -500,7 +488,6 @@ export const SORT_OPTIONS: Record<SortField, SortOption> = {
500
488
  defaultSortDirection: 'desc',
501
489
  canSetDirection: true,
502
490
  shownInSortBar: true,
503
- shownInURL: true,
504
491
  handledBySearchService: true,
505
492
  searchServiceKey: 'reviewdate',
506
493
  displayName: 'Date reviewed',
@@ -511,7 +498,6 @@ export const SORT_OPTIONS: Record<SortField, SortOption> = {
511
498
  defaultSortDirection: 'desc',
512
499
  canSetDirection: true,
513
500
  shownInSortBar: true,
514
- shownInURL: true,
515
501
  handledBySearchService: true,
516
502
  searchServiceKey: 'addeddate',
517
503
  displayName: 'Date added',
@@ -522,7 +508,6 @@ export const SORT_OPTIONS: Record<SortField, SortOption> = {
522
508
  defaultSortDirection: 'desc',
523
509
  canSetDirection: false,
524
510
  shownInSortBar: true, // But only when viewing fav-* collections
525
- shownInURL: false,
526
511
  handledBySearchService: false,
527
512
  searchServiceKey: 'favoritedate',
528
513
  displayName: 'Date favorited',
@@ -533,7 +518,6 @@ export const SORT_OPTIONS: Record<SortField, SortOption> = {
533
518
  defaultSortDirection: 'asc',
534
519
  canSetDirection: true,
535
520
  shownInSortBar: true,
536
- shownInURL: true,
537
521
  handledBySearchService: true,
538
522
  searchServiceKey: 'creatorSorter',
539
523
  displayName: 'Creator',
@@ -147,10 +147,6 @@ export class RestorationStateHandler
147
147
  const sortOption = SORT_OPTIONS[state.selectedSort];
148
148
  let prefix = this.sortDirectionPrefix(state.sortDirection);
149
149
 
150
- const isTVRelevanceSort =
151
- state.searchType === SearchType.TV &&
152
- state.selectedSort === SortField.relevance;
153
-
154
150
  if (sortOption.field === SortField.unrecognized) {
155
151
  // For unrecognized sorts, use the existing param, possibly updating its direction
156
152
  const oldSortParam = oldParams.get('sort') ?? '';
@@ -165,7 +161,7 @@ export class RestorationStateHandler
165
161
  } else {
166
162
  newParams.set('sort', oldSortParam);
167
163
  }
168
- } else if (sortOption.shownInURL || isTVRelevanceSort) {
164
+ } else if (sortOption.field !== SortField.default) {
169
165
  // Otherwise, use the canonical API form of the sort option
170
166
  const canonicalApiSort = sortOption.urlNames[0];
171
167
  newParams.set('sort', `${prefix}${canonicalApiSort}`);
@@ -128,66 +128,4 @@ describe('Collection Browser Data Source', () => {
128
128
  dataSource.refreshLetterCounts();
129
129
  expect(dataSource.prefixFilterCountMap).to.deep.equal({});
130
130
  });
131
-
132
- describe('empty FTS query in collection falls back to metadata search', () => {
133
- it('allows search with empty query and FTS in a collection', async () => {
134
- const searchService = new MockSearchService();
135
- host.searchService = searchService;
136
- host.withinCollection = 'test-collection';
137
- host.searchType = SearchType.FULLTEXT;
138
- host.baseQuery = '';
139
- await host.updateComplete;
140
-
141
- const dataSource = new CollectionBrowserDataSource(host);
142
- host.addController(dataSource);
143
- expect(dataSource.canPerformSearch).to.be.true;
144
- host.removeController(dataSource);
145
- });
146
-
147
- it('uses metadata search type for fetch when FTS query is empty in a collection', async () => {
148
- const searchService = new MockSearchService();
149
- host.searchService = searchService;
150
- host.withinCollection = 'test-collection';
151
- host.searchType = SearchType.FULLTEXT;
152
- host.baseQuery = '';
153
- await host.updateComplete;
154
-
155
- const dataSource = new CollectionBrowserDataSource(host);
156
- host.addController(dataSource);
157
- await dataSource.fetchPage(1);
158
-
159
- expect(searchService.searchType).to.equal(SearchType.METADATA);
160
- host.removeController(dataSource);
161
- });
162
-
163
- it('uses FTS search type for fetch when FTS query is non-empty in a collection', async () => {
164
- const searchService = new MockSearchService();
165
- host.searchService = searchService;
166
- host.withinCollection = 'test-collection';
167
- host.searchType = SearchType.FULLTEXT;
168
- host.baseQuery = 'some query';
169
- await host.updateComplete;
170
-
171
- const dataSource = new CollectionBrowserDataSource(host);
172
- host.addController(dataSource);
173
- await dataSource.fetchPage(1);
174
-
175
- expect(searchService.searchType).to.equal(SearchType.FULLTEXT);
176
- host.removeController(dataSource);
177
- });
178
-
179
- it('does not allow search with empty FTS query outside a collection', async () => {
180
- const searchService = new MockSearchService();
181
- host.searchService = searchService;
182
- host.withinCollection = undefined;
183
- host.searchType = SearchType.FULLTEXT;
184
- host.baseQuery = '';
185
- await host.updateComplete;
186
-
187
- const dataSource = new CollectionBrowserDataSource(host);
188
- host.addController(dataSource);
189
- expect(dataSource.canPerformSearch).to.be.false;
190
- host.removeController(dataSource);
191
- });
192
- });
193
131
  });
@@ -460,6 +460,95 @@ describe('Restoration state handler', () => {
460
460
  expect(window.location.search).to.equal('?sin=MD');
461
461
  });
462
462
 
463
+ it('should write relevance sort to URL when explicitly selected', async () => {
464
+ const url = new URL(window.location.href);
465
+ url.search = '';
466
+ window.history.replaceState({ path: url.href }, '', url.href);
467
+
468
+ const handler = new RestorationStateHandler({ context: 'search' });
469
+ handler.persistState({
470
+ selectedSort: SortField.relevance,
471
+ selectedFacets: getDefaultSelectedFacets(),
472
+ });
473
+
474
+ expect(window.location.search).to.equal('?sort=relevance');
475
+ });
476
+
477
+ it('should write relevance sort to URL for TV search', async () => {
478
+ const url = new URL(window.location.href);
479
+ url.search = '';
480
+ window.history.replaceState({ path: url.href }, '', url.href);
481
+
482
+ const handler = new RestorationStateHandler({ context: 'search' });
483
+ handler.persistState({
484
+ searchType: SearchType.TV,
485
+ selectedSort: SortField.relevance,
486
+ selectedFacets: getDefaultSelectedFacets(),
487
+ });
488
+
489
+ expect(window.location.search).to.include('sort=relevance');
490
+ });
491
+
492
+ it('should not write sort param for SortField.default', async () => {
493
+ const url = new URL(window.location.href);
494
+ url.search = '';
495
+ window.history.replaceState({ path: url.href }, '', url.href);
496
+
497
+ const handler = new RestorationStateHandler({ context: 'search' });
498
+ handler.persistState({
499
+ selectedSort: SortField.default,
500
+ selectedFacets: getDefaultSelectedFacets(),
501
+ });
502
+
503
+ expect(window.location.search).to.not.include('sort');
504
+ });
505
+
506
+ it('should write datefavorited sort to URL when explicitly selected', async () => {
507
+ const url = new URL(window.location.href);
508
+ url.search = '';
509
+ window.history.replaceState({ path: url.href }, '', url.href);
510
+
511
+ const handler = new RestorationStateHandler({ context: 'search' });
512
+ handler.persistState({
513
+ selectedSort: SortField.datefavorited,
514
+ sortDirection: 'desc',
515
+ selectedFacets: getDefaultSelectedFacets(),
516
+ });
517
+
518
+ expect(window.location.search).to.equal('?sort=-favoritedate');
519
+ });
520
+
521
+ it('should round-trip relevance sort via URL', async () => {
522
+ // 1. Set the URL to include the new canonical relevance sort param
523
+ const url = new URL(window.location.href);
524
+ url.search = '?sort=relevance';
525
+ window.history.replaceState({ path: url.href }, '', url.href);
526
+
527
+ const handler = new RestorationStateHandler({ context: 'search' });
528
+
529
+ // 2. Load state from the URL and verify it resolves to relevance sort
530
+ const restorationState = handler.getRestorationState();
531
+ expect(restorationState.selectedSort).to.equal(SortField.relevance);
532
+
533
+ // 3. Persist the state back and verify the sort param is preserved
534
+ handler.persistState(restorationState);
535
+ expect(window.location.search).to.include('sort=relevance');
536
+ });
537
+
538
+ it('should still resolve legacy _score URL param to relevance sort', async () => {
539
+ const url = new URL(window.location.href);
540
+ url.search = '?sort=_score';
541
+ window.history.replaceState({ path: url.href }, '', url.href);
542
+
543
+ const handler = new RestorationStateHandler({ context: 'search' });
544
+ const restorationState = handler.getRestorationState();
545
+ expect(restorationState.selectedSort).to.equal(SortField.relevance);
546
+
547
+ // Re-persisting upgrades the URL to the canonical form
548
+ handler.persistState(restorationState);
549
+ expect(window.location.search).to.include('sort=relevance');
550
+ });
551
+
463
552
  it('round trip load/persist should erase numbers in square brackets', async () => {
464
553
  const handler = new RestorationStateHandler({ context: 'search' });
465
554
 
@@ -1,11 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(cd /c/Users/Laton/workspace/IA/iaux-collection-browser && npm test 2>&1)",
5
- "Bash(cd /c/Users/Laton/workspace/IA/iaux-collection-browser && yarn run format 2>&1)",
6
- "Bash(cd /c/Users/Laton/workspace/IA/iaux-collection-browser && npx tsc --noEmit 2>&1)",
7
- "Bash(cd /c/Users/Laton/workspace/IA/iaux-collection-browser && npx wtr --coverage 2>&1)",
8
- "Bash(cd /c/Users/Laton/workspace/IA/iaux-collection-browser && npm run format 2>&1)"
9
- ]
10
- }
11
- }