@coveo/headless 3.28.0-pre.bc5fc96bfc → 3.28.0-pre.c3286fd3a1

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,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../ponyfills/global-this-shim.js", "../../../../../node_modules/navigator.sendbeacon/dist/navigator.sendbeacon.cjs.js", "../../../../../node_modules/abortcontroller-polyfill/dist/cjs-ponyfill.js", "../../../ponyfills/abortable-fetch-shim.js", "../../../../../node_modules/headers-polyfill/node_modules/set-cookie-parser/lib/set-cookie.js", "../../../../../node_modules/headers-polyfill/src/Headers.ts", "../../../../../node_modules/headers-polyfill/src/utils/normalizeHeaderName.ts", "../../../../../node_modules/headers-polyfill/src/utils/normalizeHeaderValue.ts", "../../../../../node_modules/headers-polyfill/src/utils/isValidHeaderName.ts", "../../../../../node_modules/headers-polyfill/src/utils/isValidHeaderValue.ts", "../../../../../node_modules/headers-polyfill/src/getRawHeaders.ts", "../../../../../node_modules/headers-polyfill/src/transformers/headersToList.ts", "../../../../../node_modules/headers-polyfill/src/transformers/headersToString.ts", "../../../../../node_modules/headers-polyfill/src/transformers/headersToObject.ts", "../../../../../node_modules/headers-polyfill/src/transformers/stringToHeaders.ts", "../../../../../node_modules/headers-polyfill/src/transformers/listToHeaders.ts", "../../../../../node_modules/headers-polyfill/src/transformers/reduceHeadersObject.ts", "../../../../../node_modules/headers-polyfill/src/transformers/objectToHeaders.ts", "../../../../../node_modules/headers-polyfill/src/transformers/flattenHeadersList.ts", "../../../../../node_modules/headers-polyfill/src/transformers/flattenHeadersObject.ts", "../../../ponyfills/headers-shim.js", "../../../../../node_modules/exponential-backoff/src/options.ts", "../../../../../node_modules/exponential-backoff/src/jitter/full/full.jitter.ts", "../../../../../node_modules/exponential-backoff/src/jitter/no/no.jitter.ts", "../../../../../node_modules/exponential-backoff/src/jitter/jitter.factory.ts", "../../../../../node_modules/exponential-backoff/src/delay/delay.base.ts", "../../../../../node_modules/exponential-backoff/src/delay/skip-first/skip-first.delay.ts", "../../../../../node_modules/exponential-backoff/src/delay/always/always.delay.ts", "../../../../../node_modules/exponential-backoff/src/delay/delay.factory.ts", "../../../../../node_modules/exponential-backoff/src/backoff.ts", "../../../../../node_modules/dayjs/dayjs.min.js", "../../../../../node_modules/dayjs/plugin/quarterOfYear.js", "../../../../../node_modules/dayjs/plugin/customParseFormat.js", "../../../../../node_modules/dayjs/plugin/timezone.js", "../../../../../node_modules/dayjs/plugin/utc.js", "../../../../../node_modules/quick-format-unescaped/index.js", "../../../../../node_modules/pino/browser.js", "../../../src/case-assist.index.ts", "../../../src/api/platform-client.ts", "../../../src/utils/errors.ts", "../../../src/utils/utils.ts", "../../../src/api/form-url-encoder.ts", "../../../src/app/case-assist-engine/case-assist-engine.ts", "../../../../bueno/dist/bueno.esm.js", "../../../src/api/preprocess-request.ts", "../../../src/api/service/case-assist/case-assist-api-client.ts", "../../../src/api/search/html/html-api-client.ts", "../../../src/utils/url-utils.ts", "../../../src/api/api-client-utils.ts", "../../../src/api/search/encoding-finder.ts", "../../../src/api/search/search-api-params.ts", "../../../src/api/search/search-api-error-response.ts", "../../../src/api/service/case-assist/get-case-classifications/get-case-classifications-request.ts", "../../../src/api/service/case-assist/case-assist-params.ts", "../../../src/api/service/case-assist/get-document-suggestions/get-document-suggestions-request.ts", "../../../src/features/case-assist-configuration/case-assist-configuration-actions.ts", "../../../../../node_modules/redux/src/utils/formatProdErrorMessage.ts", "../../../../../node_modules/redux/src/utils/symbol-observable.ts", "../../../../../node_modules/redux/src/utils/actionTypes.ts", "../../../../../node_modules/redux/src/utils/isPlainObject.ts", "../../../../../node_modules/redux/src/utils/kindOf.ts", "../../../../../node_modules/redux/src/createStore.ts", "../../../../../node_modules/redux/src/utils/warning.ts", "../../../../../node_modules/redux/src/combineReducers.ts", "../../../../../node_modules/redux/src/bindActionCreators.ts", "../../../../../node_modules/redux/src/compose.ts", "../../../../../node_modules/redux/src/applyMiddleware.ts", "../../../../../node_modules/redux/src/utils/isAction.ts", "../../../../../node_modules/immer/src/utils/env.ts", "../../../../../node_modules/immer/src/utils/errors.ts", "../../../../../node_modules/immer/src/utils/common.ts", "../../../../../node_modules/immer/src/utils/plugins.ts", "../../../../../node_modules/immer/src/core/scope.ts", "../../../../../node_modules/immer/src/core/finalize.ts", "../../../../../node_modules/immer/src/core/proxy.ts", "../../../../../node_modules/immer/src/core/immerClass.ts", "../../../../../node_modules/immer/src/core/current.ts", "../../../../../node_modules/immer/src/plugins/patches.ts", "../../../../../node_modules/immer/src/plugins/mapset.ts", "../../../../../node_modules/immer/src/immer.ts", "../../../../../node_modules/reselect/src/devModeChecks/identityFunctionCheck.ts", "../../../../../node_modules/reselect/src/devModeChecks/inputStabilityCheck.ts", "../../../../../node_modules/reselect/src/devModeChecks/setGlobalDevModeChecks.ts", "../../../../../node_modules/reselect/src/utils.ts", "../../../../../node_modules/reselect/src/autotrackMemoize/autotracking.ts", "../../../../../node_modules/reselect/src/autotrackMemoize/tracking.ts", "../../../../../node_modules/reselect/src/autotrackMemoize/proxy.ts", "../../../../../node_modules/reselect/src/lruMemoize.ts", "../../../../../node_modules/reselect/src/autotrackMemoize/autotrackMemoize.ts", "../../../../../node_modules/reselect/src/weakMapMemoize.ts", "../../../../../node_modules/reselect/src/createSelectorCreator.ts", "../../../../../node_modules/reselect/src/createStructuredSelector.ts", "../../../../../node_modules/redux-thunk/dist/redux-thunk.mjs", "../../../../../node_modules/@reduxjs/toolkit/src/index.ts", "../../../../../node_modules/@reduxjs/toolkit/src/createDraftSafeSelector.ts", "../../../../../node_modules/@reduxjs/toolkit/src/configureStore.ts", "../../../../../node_modules/@reduxjs/toolkit/src/devtoolsExtension.ts", "../../../../../node_modules/@reduxjs/toolkit/src/getDefaultMiddleware.ts", "../../../../../node_modules/@reduxjs/toolkit/src/createAction.ts", "../../../../../node_modules/@reduxjs/toolkit/src/tsHelpers.ts", "../../../../../node_modules/@reduxjs/toolkit/src/actionCreatorInvariantMiddleware.ts", "../../../../../node_modules/@reduxjs/toolkit/src/utils.ts", "../../../../../node_modules/@reduxjs/toolkit/src/immutableStateInvariantMiddleware.ts", "../../../../../node_modules/@reduxjs/toolkit/src/serializableStateInvariantMiddleware.ts", "../../../../../node_modules/@reduxjs/toolkit/src/autoBatchEnhancer.ts", "../../../../../node_modules/@reduxjs/toolkit/src/getDefaultEnhancers.ts", "../../../../../node_modules/@reduxjs/toolkit/src/createReducer.ts", "../../../../../node_modules/@reduxjs/toolkit/src/mapBuilders.ts", "../../../../../node_modules/@reduxjs/toolkit/src/matchers.ts", "../../../../../node_modules/@reduxjs/toolkit/src/nanoid.ts", "../../../../../node_modules/@reduxjs/toolkit/src/createAsyncThunk.ts", "../../../../../node_modules/@reduxjs/toolkit/src/createSlice.ts", "../../../../../node_modules/@reduxjs/toolkit/src/entities/entity_state.ts", "../../../../../node_modules/@reduxjs/toolkit/src/entities/state_selectors.ts", "../../../../../node_modules/@reduxjs/toolkit/src/entities/state_adapter.ts", "../../../../../node_modules/@reduxjs/toolkit/src/entities/utils.ts", "../../../../../node_modules/@reduxjs/toolkit/src/entities/unsorted_state_adapter.ts", "../../../../../node_modules/@reduxjs/toolkit/src/entities/sorted_state_adapter.ts", "../../../../../node_modules/@reduxjs/toolkit/src/entities/create_adapter.ts", "../../../../../node_modules/@reduxjs/toolkit/src/listenerMiddleware/index.ts", "../../../../../node_modules/@reduxjs/toolkit/src/listenerMiddleware/exceptions.ts", "../../../../../node_modules/@reduxjs/toolkit/src/listenerMiddleware/utils.ts", "../../../../../node_modules/@reduxjs/toolkit/src/listenerMiddleware/task.ts", "../../../../../node_modules/@reduxjs/toolkit/src/dynamicMiddleware/index.ts", "../../../../../node_modules/@reduxjs/toolkit/src/combineSlices.ts", "../../../../../node_modules/@reduxjs/toolkit/src/formatProdErrorMessage.ts", "../../../src/utils/validate-payload.ts", "../../../src/features/case-assist-configuration/case-assist-configuration-slice.ts", "../../../src/features/case-assist-configuration/case-assist-configuration-state.ts", "../../../src/features/debug/debug-slice.ts", "../../../src/features/search-parameters/search-parameter-actions.ts", "../../../src/features/search-parameters/search-parameter-schema.ts", "../../../src/features/debug/debug-actions.ts", "../../../src/features/debug/debug-state.ts", "../../../src/features/search-hub/search-hub-actions.ts", "../../../src/features/search-hub/search-hub-slice.ts", "../../../src/features/configuration/configuration-actions.ts", "../../../src/utils/version.ts", "../../../src/features/history/history-actions.ts", "../../../src/features/search-hub/search-hub-state.ts", "../../../src/app/engine.ts", "../../../src/api/analytics/analytics-relay-client.ts", "../../../../../node_modules/@coveo/relay/lib/npm/relay.mjs", "../../../../../node_modules/uuid/dist/esm-browser/index.js", "../../../../../node_modules/uuid/dist/esm-browser/validate.js", "../../../../../node_modules/uuid/dist/esm-browser/regex.js", "../../../../../node_modules/uuid/dist/esm-browser/stringify.js", "../../../../../node_modules/uuid/dist/esm-browser/rng.js", "../../../../../node_modules/uuid/dist/esm-browser/v4.js", "../../../../../node_modules/uuid/dist/esm-browser/native.js", "../../../../../node_modules/@coveo/explorer-messenger/dist/messenger.js", "../../../src/api/analytics/analytics-selectors.ts", "../../../src/api/knowledge/stream-answer-api.ts", "../../../src/app/navigator-context-provider.ts", "../../../src/features/advanced-search-queries/advanced-search-query-selectors.ts", "../../../src/features/configuration/analytics-params.ts", "../../../src/features/context/context-selector.ts", "../../../src/features/generated-answer/generated-answer-actions.ts", "../../../src/features/generated-answer/generated-answer-analytics-actions.ts", "../../../src/features/analytics/analytics-utils.ts", "../../../src/api/analytics/case-assist-analytics.ts", "../../../../../node_modules/coveo.analytics/dist/browser.mjs", "../../../src/api/analytics/base-analytics.ts", "../../../src/api/analytics/coveo-analytics-utils.ts", "../../../src/api/analytics/insight-analytics.ts", "../../../src/features/facets/facet-set/facet-set-analytics-actions-utils.ts", "../../../src/features/facets/automatic-facet-set/automatic-facet-set-state.ts", "../../../src/features/facets/automatic-facet-set/automatic-facet-set-constants.ts", "../../../src/features/facets/category-facet-set/category-facet-set-selectors.ts", "../../../src/features/facets/facet-set/facet-set-selectors.ts", "../../../src/features/facets/category-facet-set/category-facet-utils.ts", "../../../src/features/facets/category-facet-set/category-facet-set-state.ts", "../../../src/features/facets/range-facets/date-facet-set/date-facet-set-state.ts", "../../../src/features/facets/range-facets/numeric-facet-set/numeric-facet-set-state.ts", "../../../src/features/facets/facet-set/facet-set-state.ts", "../../../src/features/query/query-state.ts", "../../../src/features/search/search-state.ts", "../../../src/api/analytics/search-analytics.ts", "../../../src/features/sort-criteria/sort-criteria-state.ts", "../../../src/features/sort-criteria/criteria.ts", "../../../src/api/analytics/coveo.analytics/history-store.ts", "../../../src/api/analytics/coveo.analytics/storage.ts", "../../../src/api/analytics/coveo.analytics/cookie.ts", "../../../src/api/analytics/coveo.analytics/detector.ts", "../../../src/features/folding/folding-utils.ts", "../../../src/features/pipeline/pipeline-state.ts", "../../../src/features/analytics/search-action-cause.ts", "../../../src/features/generated-answer/generated-answer-selectors.ts", "../../../src/features/generated-answer/generated-answer-request.ts", "../../../src/features/generated-answer/generated-response-format.ts", "../../../src/features/pagination/pagination-constants.ts", "../../../src/features/pipeline/select-pipeline.ts", "../../../src/features/query/query-selectors.ts", "../../../src/features/search/search-mappings.ts", "../../../src/api/search/date/relative-date.ts", "../../../src/api/search/date/date-format.ts", "../../../src/features/facets/range-facets/date-facet-set/interfaces/request.ts", "../../../src/features/search/search-selectors.ts", "../../../src/features/result-templates/result-templates-helpers.ts", "../../../src/features/search-hub/search-hub-selectors.ts", "../../../src/features/static-filter-set/static-filter-set-selectors.ts", "../../../src/features/tab-set/tab-set-selectors.ts", "../../../src/utils/facet-utils.ts", "../../../src/features/facets/generic/interfaces/generic-facet-request.ts", "../../../src/utils/fetch-event-source/fetch.ts", "../../../src/utils/fetch-event-source/parse.ts", "../../../src/api/knowledge/answer-slice.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/apiState.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/rtkImports.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/copyWithStructuralSharing.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/countObjectKeys.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/flatten.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/isAbsoluteUrl.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/isDocumentVisible.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/isNotNullish.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/isOnline.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/joinUrls.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/getOrInsert.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/fetchBaseQuery.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/HandledError.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/retry.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/setupListeners.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/endpointDefinitions.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildThunks.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildInitiate.ts", "../../../../../node_modules/@reduxjs/toolkit/src/tsHelpers.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildSlice.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildSelectors.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/createApi.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/defaultSerializeQueryArgs.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/fakeBaseQuery.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/module.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/tsHelpers.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/batchActions.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/cacheCollection.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/cacheLifecycle.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/devMiddleware.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/invalidationByTags.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/polling.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/queryLifecycle.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/windowEventHandling.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/index.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/index.ts", "../../../src/features/debug/version-slice.ts", "../../../src/app/analytics-middleware.ts", "../../../src/app/common-reducers.ts", "../../../src/features/configuration/configuration-slice.ts", "../../../src/features/tab-set/tab-set-actions.ts", "../../../src/features/configuration/configuration-state.ts", "../../../src/features/configuration/magic-cookie.ts", "../../../src/app/instantly-callable-middleware.ts", "../../../src/app/logger-middlewares.ts", "../../../src/app/reducer-manager.ts", "../../../src/app/renew-access-token-middleware.ts", "../../../../../node_modules/ts-debounce/src/index.ts", "../../../src/features/error/error-actions.ts", "../../../src/app/store.ts", "../../../src/app/logger.ts", "../../../src/app/thunk-extra-arguments.ts", "../../../src/app/case-assist-engine/case-assist-engine-configuration.ts", "../../../src/app/engine-configuration.ts", "../../../src/controllers/case-field/headless-case-field.ts", "../../../src/features/case-assist/case-assist-analytics-actions.ts", "../../../src/features/case-assist/case-assist-analytics-selectors.ts", "../../../src/features/case-field/case-field-actions.ts", "../../../src/api/search/search-api-client.ts", "../../../src/api/search/api-calls-queue.ts", "../../../src/features/case-field/case-field-slice.ts", "../../../src/features/case-field/case-field-state.ts", "../../../src/features/case-input/case-input-slice.ts", "../../../src/features/case-input/case-input-actions.ts", "../../../src/features/case-input/case-input-state.ts", "../../../src/features/document-suggestion/document-suggestion-actions.ts", "../../../src/features/document-suggestion/document-suggestion-slice.ts", "../../../src/features/document-suggestion/document-suggestion-state.ts", "../../../src/controllers/controller/headless-controller.ts", "../../../src/controllers/case-input/headless-case-input.ts", "../../../src/controllers/document-suggestion-list/case-assist-headless-interactive-result.ts", "../../../src/controllers/core/interactive-result/headless-core-interactive-result.ts", "../../../src/controllers/document-suggestion-list/headless-document-suggestion-list.ts", "../../../src/controllers/quickview/case-assist-headless-quickview.ts", "../../../src/features/result-preview/result-preview-actions.ts", "../../../src/features/result-preview/result-preview-request-builder.ts", "../../../src/controllers/core/quickview/headless-core-quickview.ts", "../../../src/features/result-preview/result-preview-slice.ts", "../../../src/features/search/search-actions.ts", "../../../src/features/breadcrumb/breadcrumb-actions.ts", "../../../src/features/facets/generic/facet-actions.ts", "../../../src/features/instant-results/instant-result-analytics-actions.ts", "../../../src/api/analytics/instant-result-analytics.ts", "../../../src/features/instant-results/instant-results-actions.ts", "../../../src/features/pagination/pagination-actions.ts", "../../../src/features/query/query-actions.ts", "../../../src/features/search-and-folding/search-and-folding-request.ts", "../../../src/features/search/legacy/search-actions.ts", "../../../src/features/search-and-folding/legacy/search-and-folding-request.ts", "../../../src/features/configuration/legacy-analytics-params.ts", "../../../src/features/search/search-analytics-actions.ts", "../../../src/features/advanced-search-queries/advanced-search-queries-state.ts", "../../../src/features/search/legacy/search-actions-thunk-processor.ts", "../../../src/features/did-you-mean/did-you-mean-actions.ts", "../../../src/features/did-you-mean/did-you-mean-analytics-actions.ts", "../../../src/features/history/history-state.ts", "../../../src/features/context/context-state.ts", "../../../src/features/dictionary-field-context/dictionary-field-context-state.ts", "../../../src/features/facet-options/facet-options-state.ts", "../../../src/features/facets/facet-order/facet-order-state.ts", "../../../src/features/pagination/pagination-state.ts", "../../../src/features/query-set/query-set-state.ts", "../../../src/features/static-filter-set/static-filter-set-state.ts", "../../../src/features/tab-set/tab-set-state.ts", "../../../src/features/triggers/trigger-analytics-actions.ts", "../../../src/features/triggers/triggers-actions.ts", "../../../src/features/search/legacy/search-request.ts", "../../../src/features/search/search-actions-thunk-processor.ts", "../../../src/features/search/search-request.ts", "../../../src/features/result-preview/result-preview-state.ts", "../../../src/features/analytics/generic-analytics-actions-loader.ts", "../../../src/features/analytics/analytics-actions.ts", "../../../src/features/case-assist/case-assist-analytics-actions-loader.ts", "../../../src/features/case-field/case-field-actions-loader.ts", "../../../src/features/case-input/case-input-actions-loader.ts", "../../../src/features/document-suggestion/document-suggestion-actions-loader.ts"],
3
+ "sources": ["../../../ponyfills/global-this-shim.js", "../../../../../node_modules/navigator.sendbeacon/dist/navigator.sendbeacon.cjs.js", "../../../node_modules/abortcontroller-polyfill/dist/cjs-ponyfill.js", "../../../ponyfills/abortable-fetch-shim.js", "../../../../../node_modules/headers-polyfill/node_modules/set-cookie-parser/lib/set-cookie.js", "../../../../../node_modules/headers-polyfill/src/Headers.ts", "../../../../../node_modules/headers-polyfill/src/utils/normalizeHeaderName.ts", "../../../../../node_modules/headers-polyfill/src/utils/normalizeHeaderValue.ts", "../../../../../node_modules/headers-polyfill/src/utils/isValidHeaderName.ts", "../../../../../node_modules/headers-polyfill/src/utils/isValidHeaderValue.ts", "../../../../../node_modules/headers-polyfill/src/getRawHeaders.ts", "../../../../../node_modules/headers-polyfill/src/transformers/headersToList.ts", "../../../../../node_modules/headers-polyfill/src/transformers/headersToString.ts", "../../../../../node_modules/headers-polyfill/src/transformers/headersToObject.ts", "../../../../../node_modules/headers-polyfill/src/transformers/stringToHeaders.ts", "../../../../../node_modules/headers-polyfill/src/transformers/listToHeaders.ts", "../../../../../node_modules/headers-polyfill/src/transformers/reduceHeadersObject.ts", "../../../../../node_modules/headers-polyfill/src/transformers/objectToHeaders.ts", "../../../../../node_modules/headers-polyfill/src/transformers/flattenHeadersList.ts", "../../../../../node_modules/headers-polyfill/src/transformers/flattenHeadersObject.ts", "../../../ponyfills/headers-shim.js", "../../../../../node_modules/exponential-backoff/src/options.ts", "../../../../../node_modules/exponential-backoff/src/jitter/full/full.jitter.ts", "../../../../../node_modules/exponential-backoff/src/jitter/no/no.jitter.ts", "../../../../../node_modules/exponential-backoff/src/jitter/jitter.factory.ts", "../../../../../node_modules/exponential-backoff/src/delay/delay.base.ts", "../../../../../node_modules/exponential-backoff/src/delay/skip-first/skip-first.delay.ts", "../../../../../node_modules/exponential-backoff/src/delay/always/always.delay.ts", "../../../../../node_modules/exponential-backoff/src/delay/delay.factory.ts", "../../../../../node_modules/exponential-backoff/src/backoff.ts", "../../../../../node_modules/dayjs/dayjs.min.js", "../../../../../node_modules/dayjs/plugin/quarterOfYear.js", "../../../../../node_modules/dayjs/plugin/customParseFormat.js", "../../../../../node_modules/dayjs/plugin/timezone.js", "../../../../../node_modules/dayjs/plugin/utc.js", "../../../../../node_modules/quick-format-unescaped/index.js", "../../../../../node_modules/pino/browser.js", "../../../src/case-assist.index.ts", "../../../src/api/platform-client.ts", "../../../src/utils/errors.ts", "../../../src/utils/utils.ts", "../../../src/api/form-url-encoder.ts", "../../../src/app/case-assist-engine/case-assist-engine.ts", "../../../../bueno/dist/bueno.esm.js", "../../../src/api/preprocess-request.ts", "../../../src/api/service/case-assist/case-assist-api-client.ts", "../../../src/api/search/html/html-api-client.ts", "../../../src/utils/url-utils.ts", "../../../src/api/api-client-utils.ts", "../../../src/api/search/encoding-finder.ts", "../../../src/api/search/search-api-params.ts", "../../../src/api/search/search-api-error-response.ts", "../../../src/api/service/case-assist/get-case-classifications/get-case-classifications-request.ts", "../../../src/api/service/case-assist/case-assist-params.ts", "../../../src/api/service/case-assist/get-document-suggestions/get-document-suggestions-request.ts", "../../../src/features/case-assist-configuration/case-assist-configuration-actions.ts", "../../../../../node_modules/redux/src/utils/formatProdErrorMessage.ts", "../../../../../node_modules/redux/src/utils/symbol-observable.ts", "../../../../../node_modules/redux/src/utils/actionTypes.ts", "../../../../../node_modules/redux/src/utils/isPlainObject.ts", "../../../../../node_modules/redux/src/utils/kindOf.ts", "../../../../../node_modules/redux/src/createStore.ts", "../../../../../node_modules/redux/src/utils/warning.ts", "../../../../../node_modules/redux/src/combineReducers.ts", "../../../../../node_modules/redux/src/bindActionCreators.ts", "../../../../../node_modules/redux/src/compose.ts", "../../../../../node_modules/redux/src/applyMiddleware.ts", "../../../../../node_modules/redux/src/utils/isAction.ts", "../../../../../node_modules/immer/src/utils/env.ts", "../../../../../node_modules/immer/src/utils/errors.ts", "../../../../../node_modules/immer/src/utils/common.ts", "../../../../../node_modules/immer/src/utils/plugins.ts", "../../../../../node_modules/immer/src/core/scope.ts", "../../../../../node_modules/immer/src/core/finalize.ts", "../../../../../node_modules/immer/src/core/proxy.ts", "../../../../../node_modules/immer/src/core/immerClass.ts", "../../../../../node_modules/immer/src/core/current.ts", "../../../../../node_modules/immer/src/plugins/patches.ts", "../../../../../node_modules/immer/src/plugins/mapset.ts", "../../../../../node_modules/immer/src/immer.ts", "../../../../../node_modules/reselect/src/devModeChecks/identityFunctionCheck.ts", "../../../../../node_modules/reselect/src/devModeChecks/inputStabilityCheck.ts", "../../../../../node_modules/reselect/src/devModeChecks/setGlobalDevModeChecks.ts", "../../../../../node_modules/reselect/src/utils.ts", "../../../../../node_modules/reselect/src/autotrackMemoize/autotracking.ts", "../../../../../node_modules/reselect/src/autotrackMemoize/tracking.ts", "../../../../../node_modules/reselect/src/autotrackMemoize/proxy.ts", "../../../../../node_modules/reselect/src/lruMemoize.ts", "../../../../../node_modules/reselect/src/autotrackMemoize/autotrackMemoize.ts", "../../../../../node_modules/reselect/src/weakMapMemoize.ts", "../../../../../node_modules/reselect/src/createSelectorCreator.ts", "../../../../../node_modules/reselect/src/createStructuredSelector.ts", "../../../../../node_modules/redux-thunk/dist/redux-thunk.mjs", "../../../../../node_modules/@reduxjs/toolkit/src/index.ts", "../../../../../node_modules/@reduxjs/toolkit/src/createDraftSafeSelector.ts", "../../../../../node_modules/@reduxjs/toolkit/src/configureStore.ts", "../../../../../node_modules/@reduxjs/toolkit/src/devtoolsExtension.ts", "../../../../../node_modules/@reduxjs/toolkit/src/getDefaultMiddleware.ts", "../../../../../node_modules/@reduxjs/toolkit/src/createAction.ts", "../../../../../node_modules/@reduxjs/toolkit/src/tsHelpers.ts", "../../../../../node_modules/@reduxjs/toolkit/src/actionCreatorInvariantMiddleware.ts", "../../../../../node_modules/@reduxjs/toolkit/src/utils.ts", "../../../../../node_modules/@reduxjs/toolkit/src/immutableStateInvariantMiddleware.ts", "../../../../../node_modules/@reduxjs/toolkit/src/serializableStateInvariantMiddleware.ts", "../../../../../node_modules/@reduxjs/toolkit/src/autoBatchEnhancer.ts", "../../../../../node_modules/@reduxjs/toolkit/src/getDefaultEnhancers.ts", "../../../../../node_modules/@reduxjs/toolkit/src/createReducer.ts", "../../../../../node_modules/@reduxjs/toolkit/src/mapBuilders.ts", "../../../../../node_modules/@reduxjs/toolkit/src/matchers.ts", "../../../../../node_modules/@reduxjs/toolkit/src/nanoid.ts", "../../../../../node_modules/@reduxjs/toolkit/src/createAsyncThunk.ts", "../../../../../node_modules/@reduxjs/toolkit/src/createSlice.ts", "../../../../../node_modules/@reduxjs/toolkit/src/entities/entity_state.ts", "../../../../../node_modules/@reduxjs/toolkit/src/entities/state_selectors.ts", "../../../../../node_modules/@reduxjs/toolkit/src/entities/state_adapter.ts", "../../../../../node_modules/@reduxjs/toolkit/src/entities/utils.ts", "../../../../../node_modules/@reduxjs/toolkit/src/entities/unsorted_state_adapter.ts", "../../../../../node_modules/@reduxjs/toolkit/src/entities/sorted_state_adapter.ts", "../../../../../node_modules/@reduxjs/toolkit/src/entities/create_adapter.ts", "../../../../../node_modules/@reduxjs/toolkit/src/listenerMiddleware/index.ts", "../../../../../node_modules/@reduxjs/toolkit/src/listenerMiddleware/exceptions.ts", "../../../../../node_modules/@reduxjs/toolkit/src/listenerMiddleware/utils.ts", "../../../../../node_modules/@reduxjs/toolkit/src/listenerMiddleware/task.ts", "../../../../../node_modules/@reduxjs/toolkit/src/dynamicMiddleware/index.ts", "../../../../../node_modules/@reduxjs/toolkit/src/combineSlices.ts", "../../../../../node_modules/@reduxjs/toolkit/src/formatProdErrorMessage.ts", "../../../src/utils/validate-payload.ts", "../../../src/features/case-assist-configuration/case-assist-configuration-slice.ts", "../../../src/features/case-assist-configuration/case-assist-configuration-state.ts", "../../../src/features/debug/debug-slice.ts", "../../../src/features/search-parameters/search-parameter-actions.ts", "../../../src/features/search-parameters/search-parameter-schema.ts", "../../../src/features/debug/debug-actions.ts", "../../../src/features/debug/debug-state.ts", "../../../src/features/search-hub/search-hub-actions.ts", "../../../src/features/search-hub/search-hub-slice.ts", "../../../src/features/configuration/configuration-actions.ts", "../../../src/utils/version.ts", "../../../src/features/history/history-actions.ts", "../../../src/features/search-hub/search-hub-state.ts", "../../../src/app/engine.ts", "../../../src/api/analytics/analytics-relay-client.ts", "../../../../../node_modules/@coveo/relay/lib/npm/relay.mjs", "../../../../../node_modules/@coveo/relay/node_modules/uuid/dist/esm-browser/index.js", "../../../../../node_modules/@coveo/relay/node_modules/uuid/dist/esm-browser/validate.js", "../../../../../node_modules/@coveo/relay/node_modules/uuid/dist/esm-browser/regex.js", "../../../../../node_modules/@coveo/relay/node_modules/uuid/dist/esm-browser/stringify.js", "../../../../../node_modules/@coveo/relay/node_modules/uuid/dist/esm-browser/rng.js", "../../../../../node_modules/@coveo/relay/node_modules/uuid/dist/esm-browser/v4.js", "../../../../../node_modules/@coveo/relay/node_modules/uuid/dist/esm-browser/native.js", "../../../../../node_modules/@coveo/explorer-messenger/dist/messenger.js", "../../../src/api/analytics/analytics-selectors.ts", "../../../src/api/knowledge/stream-answer-api.ts", "../../../src/app/navigator-context-provider.ts", "../../../src/features/advanced-search-queries/advanced-search-query-selectors.ts", "../../../src/features/configuration/analytics-params.ts", "../../../src/features/context/context-selector.ts", "../../../src/features/generated-answer/generated-answer-actions.ts", "../../../src/features/generated-answer/generated-answer-analytics-actions.ts", "../../../src/features/analytics/analytics-utils.ts", "../../../src/api/analytics/case-assist-analytics.ts", "../../../../../node_modules/coveo.analytics/dist/browser.mjs", "../../../src/api/analytics/base-analytics.ts", "../../../src/api/analytics/coveo-analytics-utils.ts", "../../../src/api/analytics/insight-analytics.ts", "../../../src/features/facets/facet-set/facet-set-analytics-actions-utils.ts", "../../../src/features/facets/automatic-facet-set/automatic-facet-set-state.ts", "../../../src/features/facets/automatic-facet-set/automatic-facet-set-constants.ts", "../../../src/features/facets/category-facet-set/category-facet-set-selectors.ts", "../../../src/features/facets/facet-set/facet-set-selectors.ts", "../../../src/features/facets/category-facet-set/category-facet-utils.ts", "../../../src/features/facets/category-facet-set/category-facet-set-state.ts", "../../../src/features/facets/range-facets/date-facet-set/date-facet-set-state.ts", "../../../src/features/facets/range-facets/numeric-facet-set/numeric-facet-set-state.ts", "../../../src/features/facets/facet-set/facet-set-state.ts", "../../../src/features/query/query-state.ts", "../../../src/features/search/search-state.ts", "../../../src/api/analytics/search-analytics.ts", "../../../src/features/sort-criteria/sort-criteria-state.ts", "../../../src/features/sort-criteria/criteria.ts", "../../../src/api/analytics/coveo.analytics/history-store.ts", "../../../src/api/analytics/coveo.analytics/storage.ts", "../../../src/api/analytics/coveo.analytics/cookie.ts", "../../../src/api/analytics/coveo.analytics/detector.ts", "../../../src/features/folding/folding-utils.ts", "../../../src/features/pipeline/pipeline-state.ts", "../../../src/features/analytics/search-action-cause.ts", "../../../src/features/generated-answer/generated-answer-selectors.ts", "../../../src/features/generated-answer/generated-answer-request.ts", "../../../src/features/generated-answer/generated-response-format.ts", "../../../src/features/pagination/pagination-constants.ts", "../../../src/features/pipeline/select-pipeline.ts", "../../../src/features/query/query-selectors.ts", "../../../src/features/search/search-mappings.ts", "../../../src/api/search/date/relative-date.ts", "../../../src/api/search/date/date-format.ts", "../../../src/features/facets/range-facets/date-facet-set/interfaces/request.ts", "../../../src/features/search/search-selectors.ts", "../../../src/features/result-templates/result-templates-helpers.ts", "../../../src/features/search-hub/search-hub-selectors.ts", "../../../src/features/static-filter-set/static-filter-set-selectors.ts", "../../../src/features/tab-set/tab-set-selectors.ts", "../../../src/utils/facet-utils.ts", "../../../src/features/facets/generic/interfaces/generic-facet-request.ts", "../../../src/utils/fetch-event-source/fetch.ts", "../../../src/utils/fetch-event-source/parse.ts", "../../../src/api/knowledge/answer-slice.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/apiState.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/rtkImports.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/copyWithStructuralSharing.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/countObjectKeys.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/flatten.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/isAbsoluteUrl.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/isDocumentVisible.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/isNotNullish.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/isOnline.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/joinUrls.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/utils/getOrInsert.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/fetchBaseQuery.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/HandledError.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/retry.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/setupListeners.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/endpointDefinitions.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildThunks.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildInitiate.ts", "../../../../../node_modules/@reduxjs/toolkit/src/tsHelpers.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildSlice.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildSelectors.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/createApi.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/defaultSerializeQueryArgs.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/fakeBaseQuery.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/module.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/tsHelpers.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/batchActions.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/cacheCollection.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/cacheLifecycle.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/devMiddleware.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/invalidationByTags.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/polling.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/queryLifecycle.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/windowEventHandling.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/buildMiddleware/index.ts", "../../../../../node_modules/@reduxjs/toolkit/src/query/core/index.ts", "../../../src/features/debug/version-slice.ts", "../../../src/app/analytics-middleware.ts", "../../../src/app/common-reducers.ts", "../../../src/features/configuration/configuration-slice.ts", "../../../src/features/tab-set/tab-set-actions.ts", "../../../src/features/configuration/configuration-state.ts", "../../../src/features/configuration/magic-cookie.ts", "../../../src/app/instantly-callable-middleware.ts", "../../../src/app/logger-middlewares.ts", "../../../src/app/reducer-manager.ts", "../../../src/app/renew-access-token-middleware.ts", "../../../../../node_modules/ts-debounce/src/index.ts", "../../../src/features/error/error-actions.ts", "../../../src/app/store.ts", "../../../src/app/logger.ts", "../../../src/app/thunk-extra-arguments.ts", "../../../src/app/case-assist-engine/case-assist-engine-configuration.ts", "../../../src/app/engine-configuration.ts", "../../../src/controllers/case-field/headless-case-field.ts", "../../../src/features/case-assist/case-assist-analytics-actions.ts", "../../../src/features/case-assist/case-assist-analytics-selectors.ts", "../../../src/features/case-field/case-field-actions.ts", "../../../src/api/search/search-api-client.ts", "../../../src/api/search/api-calls-queue.ts", "../../../src/features/case-field/case-field-slice.ts", "../../../src/features/case-field/case-field-state.ts", "../../../src/features/case-input/case-input-slice.ts", "../../../src/features/case-input/case-input-actions.ts", "../../../src/features/case-input/case-input-state.ts", "../../../src/features/document-suggestion/document-suggestion-actions.ts", "../../../src/features/document-suggestion/document-suggestion-slice.ts", "../../../src/features/document-suggestion/document-suggestion-state.ts", "../../../src/controllers/controller/headless-controller.ts", "../../../src/controllers/case-input/headless-case-input.ts", "../../../src/controllers/document-suggestion-list/case-assist-headless-interactive-result.ts", "../../../src/controllers/core/interactive-result/headless-core-interactive-result.ts", "../../../src/controllers/document-suggestion-list/headless-document-suggestion-list.ts", "../../../src/controllers/quickview/case-assist-headless-quickview.ts", "../../../src/features/result-preview/result-preview-actions.ts", "../../../src/features/result-preview/result-preview-request-builder.ts", "../../../src/controllers/core/quickview/headless-core-quickview.ts", "../../../src/features/result-preview/result-preview-slice.ts", "../../../src/features/search/search-actions.ts", "../../../src/features/breadcrumb/breadcrumb-actions.ts", "../../../src/features/facets/generic/facet-actions.ts", "../../../src/features/instant-results/instant-result-analytics-actions.ts", "../../../src/api/analytics/instant-result-analytics.ts", "../../../src/features/instant-results/instant-results-actions.ts", "../../../src/features/pagination/pagination-actions.ts", "../../../src/features/query/query-actions.ts", "../../../src/features/search-and-folding/search-and-folding-request.ts", "../../../src/features/search/legacy/search-actions.ts", "../../../src/features/search-and-folding/legacy/search-and-folding-request.ts", "../../../src/features/configuration/legacy-analytics-params.ts", "../../../src/features/search/search-analytics-actions.ts", "../../../src/features/advanced-search-queries/advanced-search-queries-state.ts", "../../../src/features/search/legacy/search-actions-thunk-processor.ts", "../../../src/features/did-you-mean/did-you-mean-actions.ts", "../../../src/features/did-you-mean/did-you-mean-analytics-actions.ts", "../../../src/features/history/history-state.ts", "../../../src/features/context/context-state.ts", "../../../src/features/dictionary-field-context/dictionary-field-context-state.ts", "../../../src/features/facet-options/facet-options-state.ts", "../../../src/features/facets/facet-order/facet-order-state.ts", "../../../src/features/pagination/pagination-state.ts", "../../../src/features/query-set/query-set-state.ts", "../../../src/features/static-filter-set/static-filter-set-state.ts", "../../../src/features/tab-set/tab-set-state.ts", "../../../src/features/triggers/trigger-analytics-actions.ts", "../../../src/features/triggers/triggers-actions.ts", "../../../src/features/search/legacy/search-request.ts", "../../../src/features/search/search-actions-thunk-processor.ts", "../../../src/features/search/search-request.ts", "../../../src/features/result-preview/result-preview-state.ts", "../../../src/features/analytics/generic-analytics-actions-loader.ts", "../../../src/features/analytics/analytics-actions.ts", "../../../src/features/case-assist/case-assist-analytics-actions-loader.ts", "../../../src/features/case-field/case-field-actions-loader.ts", "../../../src/features/case-input/case-input-actions-loader.ts", "../../../src/features/document-suggestion/document-suggestion-actions-loader.ts"],
4
4
  "sourcesContent": ["// Shim globalThis because Salesforce Locker Service doesn't support it.\nconst globalThisShim = typeof globalThis !== 'undefined' ? globalThis : window;\n\nexport {globalThisShim as globalThis};\n", "'use strict';\n\nfunction _typeof(obj) {\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nvar isString = function isString(val) {\n return typeof val === 'string';\n};\n\nvar isBlob = function isBlob(val) {\n return val instanceof Blob;\n};\n\npolyfill.call((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === 'object' ? window : undefined || {});\n\nfunction polyfill() {\n if (!('navigator' in this)) {\n this.navigator = {};\n }\n\n if (typeof this.navigator.sendBeacon !== 'function') {\n this.navigator.sendBeacon = sendBeacon.bind(this);\n }\n}\n\nfunction sendBeacon(url, data) {\n var event = this.event && this.event.type;\n var sync = event === 'unload' || event === 'beforeunload';\n var xhr = 'XMLHttpRequest' in this ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');\n xhr.open('POST', url, !sync);\n xhr.withCredentials = true;\n xhr.setRequestHeader('Accept', '*/*');\n\n if (isString(data)) {\n xhr.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8');\n xhr.responseType = 'text';\n } else if (isBlob(data) && data.type) {\n xhr.setRequestHeader('Content-Type', data.type);\n }\n\n try {\n xhr.send(data);\n } catch (error) {\n return false;\n }\n\n return true;\n}\n", "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nfunction _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nfunction _callSuper(t, o, e) {\n return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e));\n}\nfunction _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nfunction _createForOfIteratorHelper(r, e) {\n var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (!t) {\n if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) {\n t && (r = t);\n var n = 0,\n F = function () {};\n return {\n s: F,\n n: function () {\n return n >= r.length ? {\n done: !0\n } : {\n done: !1,\n value: r[n++]\n };\n },\n e: function (r) {\n throw r;\n },\n f: F\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n var o,\n a = !0,\n u = !1;\n return {\n s: function () {\n t = t.call(r);\n },\n n: function () {\n var r = t.next();\n return a = r.done, r;\n },\n e: function (r) {\n u = !0, o = r;\n },\n f: function () {\n try {\n a || null == t.return || t.return();\n } finally {\n if (u) throw o;\n }\n }\n };\n}\nfunction _get() {\n return _get = \"undefined\" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) {\n var p = _superPropBase(e, t);\n if (p) {\n var n = Object.getOwnPropertyDescriptor(p, t);\n return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value;\n }\n }, _get.apply(null, arguments);\n}\nfunction _getPrototypeOf(t) {\n return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n return t.__proto__ || Object.getPrototypeOf(t);\n }, _getPrototypeOf(t);\n}\nfunction _inherits(t, e) {\n if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n t.prototype = Object.create(e && e.prototype, {\n constructor: {\n value: t,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e && _setPrototypeOf(t, e);\n}\nfunction _isNativeReflectConstruct() {\n try {\n var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n } catch (t) {}\n return (_isNativeReflectConstruct = function () {\n return !!t;\n })();\n}\nfunction _possibleConstructorReturn(t, e) {\n if (e && (\"object\" == typeof e || \"function\" == typeof e)) return e;\n if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n return _assertThisInitialized(t);\n}\nfunction _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nfunction _superPropBase(t, o) {\n for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t)););\n return t;\n}\nfunction _superPropGet(t, o, e, r) {\n var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e);\n return 2 & r && \"function\" == typeof p ? function (t) {\n return p.apply(e, t);\n } : p;\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n }\n}\n\n(function (self) {\n return {\n NativeAbortSignal: self.AbortSignal,\n NativeAbortController: self.AbortController\n };\n })(typeof self !== 'undefined' ? self : global);\n\n/**\n * @param {any} reason abort reason\n */\nfunction createAbortEvent(reason) {\n var event;\n try {\n event = new Event('abort');\n } catch (e) {\n if (typeof document !== 'undefined') {\n if (!document.createEvent) {\n // For Internet Explorer 8:\n event = document.createEventObject();\n event.type = 'abort';\n } else {\n // For Internet Explorer 11:\n event = document.createEvent('Event');\n event.initEvent('abort', false, false);\n }\n } else {\n // Fallback where document isn't available:\n event = {\n type: 'abort',\n bubbles: false,\n cancelable: false\n };\n }\n }\n event.reason = reason;\n return event;\n}\n\n/**\n * @param {any} reason abort reason\n */\nfunction normalizeAbortReason(reason) {\n if (reason === undefined) {\n if (typeof document === 'undefined') {\n reason = new Error('This operation was aborted');\n reason.name = 'AbortError';\n } else {\n try {\n reason = new DOMException('signal is aborted without reason');\n // The DOMException does not support setting the name property directly.\n Object.defineProperty(reason, 'name', {\n value: 'AbortError'\n });\n } catch (err) {\n // IE 11 does not support calling the DOMException constructor, use a\n // regular error object on it instead.\n reason = new Error('This operation was aborted');\n reason.name = 'AbortError';\n }\n }\n }\n return reason;\n}\n\nvar Emitter = /*#__PURE__*/function () {\n function Emitter() {\n _classCallCheck(this, Emitter);\n Object.defineProperty(this, 'listeners', {\n value: {},\n writable: true,\n configurable: true\n });\n }\n return _createClass(Emitter, [{\n key: \"addEventListener\",\n value: function addEventListener(type, callback, options) {\n if (!(type in this.listeners)) {\n this.listeners[type] = [];\n }\n this.listeners[type].push({\n callback: callback,\n options: options\n });\n }\n }, {\n key: \"removeEventListener\",\n value: function removeEventListener(type, callback) {\n if (!(type in this.listeners)) {\n return;\n }\n var stack = this.listeners[type];\n for (var i = 0, l = stack.length; i < l; i++) {\n if (stack[i].callback === callback) {\n stack.splice(i, 1);\n return;\n }\n }\n }\n }, {\n key: \"dispatchEvent\",\n value: function dispatchEvent(event) {\n var _this = this;\n if (!(event.type in this.listeners)) {\n return;\n }\n var stack = this.listeners[event.type];\n var stackToCall = stack.slice();\n var _loop = function _loop() {\n var listener = stackToCall[i];\n try {\n listener.callback.call(_this, event);\n } catch (e) {\n Promise.resolve().then(function () {\n throw e;\n });\n }\n if (listener.options && listener.options.once) {\n _this.removeEventListener(event.type, listener.callback);\n }\n };\n for (var i = 0, l = stackToCall.length; i < l; i++) {\n _loop();\n }\n return !event.defaultPrevented;\n }\n }]);\n}();\nvar AbortSignal = /*#__PURE__*/function (_Emitter) {\n function AbortSignal() {\n var _this2;\n _classCallCheck(this, AbortSignal);\n _this2 = _callSuper(this, AbortSignal);\n // Some versions of babel does not transpile super() correctly for IE <= 10, if the parent\n // constructor has failed to run, then \"this.listeners\" will still be undefined and then we call\n // the parent constructor directly instead as a workaround. For general details, see babel bug:\n // https://github.com/babel/babel/issues/3041\n // This hack was added as a fix for the issue described here:\n // https://github.com/Financial-Times/polyfill-library/pull/59#issuecomment-477558042\n if (!_this2.listeners) {\n Emitter.call(_this2);\n }\n\n // Compared to assignment, Object.defineProperty makes properties non-enumerable by default and\n // we want Object.keys(new AbortController().signal) to be [] for compat with the native impl\n Object.defineProperty(_this2, 'aborted', {\n value: false,\n writable: true,\n configurable: true\n });\n Object.defineProperty(_this2, 'onabort', {\n value: null,\n writable: true,\n configurable: true\n });\n Object.defineProperty(_this2, 'reason', {\n value: undefined,\n writable: true,\n configurable: true\n });\n return _this2;\n }\n _inherits(AbortSignal, _Emitter);\n return _createClass(AbortSignal, [{\n key: \"toString\",\n value: function toString() {\n return '[object AbortSignal]';\n }\n }, {\n key: \"dispatchEvent\",\n value: function dispatchEvent(event) {\n if (event.type === 'abort') {\n this.aborted = true;\n if (typeof this.onabort === 'function') {\n this.onabort.call(this, event);\n }\n }\n _superPropGet(AbortSignal, \"dispatchEvent\", this, 3)([event]);\n }\n\n /**\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/AbortSignal/throwIfAborted}\n */\n }, {\n key: \"throwIfAborted\",\n value: function throwIfAborted() {\n var aborted = this.aborted,\n _this$reason = this.reason,\n reason = _this$reason === void 0 ? 'Aborted' : _this$reason;\n if (!aborted) return;\n throw reason;\n }\n\n /**\n * @see {@link https://developer.mozilla.org/zh-CN/docs/Web/API/AbortSignal/timeout_static}\n * @param {number} time The \"active\" time in milliseconds before the returned {@link AbortSignal} will abort.\n * The value must be within range of 0 and {@link Number.MAX_SAFE_INTEGER}.\n * @returns {AbortSignal} The signal will abort with its {@link AbortSignal.reason} property set to a `TimeoutError` {@link DOMException} on timeout,\n * or an `AbortError` {@link DOMException} if the operation was user-triggered.\n */\n }], [{\n key: \"timeout\",\n value: function timeout(time) {\n var controller = new AbortController();\n setTimeout(function () {\n return controller.abort(new DOMException(\"This signal is timeout in \".concat(time, \"ms\"), 'TimeoutError'));\n }, time);\n return controller.signal;\n }\n\n /**\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/any_static}\n * @param {Iterable<AbortSignal>} iterable An {@link Iterable} (such as an {@link Array}) of abort signals.\n * @returns {AbortSignal} - **Already aborted**, if any of the abort signals given is already aborted.\n * The returned {@link AbortSignal}'s reason will be already set to the `reason` of the first abort signal that was already aborted.\n * - **Asynchronously aborted**, when any abort signal in `iterable` aborts.\n * The `reason` will be set to the reason of the first abort signal that is aborted.\n */\n }, {\n key: \"any\",\n value: function any(iterable) {\n var controller = new AbortController();\n /**\n * @this AbortSignal\n */\n function abort() {\n controller.abort(this.reason);\n clean();\n }\n function clean() {\n var _iterator = _createForOfIteratorHelper(iterable),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var signal = _step.value;\n signal.removeEventListener('abort', abort);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n var _iterator2 = _createForOfIteratorHelper(iterable),\n _step2;\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var signal = _step2.value;\n if (signal.aborted) {\n controller.abort(signal.reason);\n break;\n } else signal.addEventListener('abort', abort);\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n return controller.signal;\n }\n }]);\n}(Emitter);\nvar AbortController = /*#__PURE__*/function () {\n function AbortController() {\n _classCallCheck(this, AbortController);\n // Compared to assignment, Object.defineProperty makes properties non-enumerable by default and\n // we want Object.keys(new AbortController()) to be [] for compat with the native impl\n Object.defineProperty(this, 'signal', {\n value: new AbortSignal(),\n writable: true,\n configurable: true\n });\n }\n return _createClass(AbortController, [{\n key: \"abort\",\n value: function abort(reason) {\n var signalReason = normalizeAbortReason(reason);\n var event = createAbortEvent(signalReason);\n this.signal.reason = signalReason;\n this.signal.dispatchEvent(event);\n }\n }, {\n key: \"toString\",\n value: function toString() {\n return '[object AbortController]';\n }\n }]);\n}();\nif (typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n // These are necessary to make sure that we get correct output for:\n // Object.prototype.toString.call(new AbortController())\n AbortController.prototype[Symbol.toStringTag] = 'AbortController';\n AbortSignal.prototype[Symbol.toStringTag] = 'AbortSignal';\n}\n\nfunction polyfillNeeded(self) {\n if (self.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {\n console.log('__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL=true is set, will force install polyfill');\n return true;\n }\n\n // Note that the \"unfetch\" minimal fetch polyfill defines fetch() without\n // defining window.Request, and this polyfill need to work on top of unfetch\n // so the below feature detection needs the !self.AbortController part.\n // The Request.prototype check is also needed because Safari versions 11.1.2\n // up to and including 12.1.x has a window.AbortController present but still\n // does NOT correctly implement abortable fetch:\n // https://bugs.webkit.org/show_bug.cgi?id=174980#c2\n return typeof self.Request === 'function' && !self.Request.prototype.hasOwnProperty('signal') || !self.AbortController;\n}\n\n/**\n * Note: the \"fetch.Request\" default value is available for fetch imported from\n * the \"node-fetch\" package and not in browsers. This is OK since browsers\n * will be importing umd-polyfill.js from that path \"self\" is passed the\n * decorator so the default value will not be used (because browsers that define\n * fetch also has Request). One quirky setup where self.fetch exists but\n * self.Request does not is when the \"unfetch\" minimal fetch polyfill is used\n * on top of IE11; for this case the browser will try to use the fetch.Request\n * default value which in turn will be undefined but then then \"if (Request)\"\n * will ensure that you get a patched fetch but still no Request (as expected).\n * @param {fetch, Request = fetch.Request}\n * @returns {fetch: abortableFetch, Request: AbortableRequest}\n */\nfunction abortableFetchDecorator(patchTargets) {\n if ('function' === typeof patchTargets) {\n patchTargets = {\n fetch: patchTargets\n };\n }\n var _patchTargets = patchTargets,\n fetch = _patchTargets.fetch,\n _patchTargets$Request = _patchTargets.Request,\n NativeRequest = _patchTargets$Request === void 0 ? fetch.Request : _patchTargets$Request,\n NativeAbortController = _patchTargets.AbortController,\n _patchTargets$__FORCE = _patchTargets.__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL,\n __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL = _patchTargets$__FORCE === void 0 ? false : _patchTargets$__FORCE;\n if (!polyfillNeeded({\n fetch: fetch,\n Request: NativeRequest,\n AbortController: NativeAbortController,\n __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL: __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL\n })) {\n return {\n fetch: fetch,\n Request: Request\n };\n }\n var Request = NativeRequest;\n // Note that the \"unfetch\" minimal fetch polyfill defines fetch() without\n // defining window.Request, and this polyfill need to work on top of unfetch\n // hence we only patch it if it's available. Also we don't patch it if signal\n // is already available on the Request prototype because in this case support\n // is present and the patching below can cause a crash since it assigns to\n // request.signal which is technically a read-only property. This latter error\n // happens when you run the main5.js node-fetch example in the repo\n // \"abortcontroller-polyfill-examples\". The exact error is:\n // request.signal = init.signal;\n // ^\n // TypeError: Cannot set property signal of #<Request> which has only a getter\n if (Request && !Request.prototype.hasOwnProperty('signal') || __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL) {\n Request = function Request(input, init) {\n var signal;\n if (init && init.signal) {\n signal = init.signal;\n // Never pass init.signal to the native Request implementation when the polyfill has\n // been installed because if we're running on top of a browser with a\n // working native AbortController (i.e. the polyfill was installed due to\n // __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL being set), then passing our\n // fake AbortSignal to the native fetch will trigger:\n // TypeError: Failed to construct 'Request': member signal is not of type AbortSignal.\n delete init.signal;\n }\n var request = new NativeRequest(input, init);\n if (signal) {\n Object.defineProperty(request, 'signal', {\n writable: false,\n enumerable: false,\n configurable: true,\n value: signal\n });\n }\n return request;\n };\n Request.prototype = NativeRequest.prototype;\n }\n var realFetch = fetch;\n var abortableFetch = function abortableFetch(input, init) {\n var signal = Request && Request.prototype.isPrototypeOf(input) ? input.signal : init ? init.signal : undefined;\n if (signal) {\n var abortError;\n try {\n abortError = new DOMException('Aborted', 'AbortError');\n } catch (err) {\n // IE 11 does not support calling the DOMException constructor, use a\n // regular error object on it instead.\n abortError = new Error('Aborted');\n abortError.name = 'AbortError';\n }\n\n // Return early if already aborted, thus avoiding making an HTTP request\n if (signal.aborted) {\n return Promise.reject(abortError);\n }\n\n // Turn an event into a promise, reject it once `abort` is dispatched\n var cancellation = new Promise(function (_, reject) {\n signal.addEventListener('abort', function () {\n return reject(abortError);\n }, {\n once: true\n });\n });\n if (init && init.signal) {\n // Never pass .signal to the native implementation when the polyfill has\n // been installed because if we're running on top of a browser with a\n // working native AbortController (i.e. the polyfill was installed due to\n // __FORCE_INSTALL_ABORTCONTROLLER_POLYFILL being set), then passing our\n // fake AbortSignal to the native fetch will trigger:\n // TypeError: Failed to execute 'fetch' on 'Window': member signal is not of type AbortSignal.\n delete init.signal;\n }\n // Return the fastest promise (don't need to wait for request to finish)\n return Promise.race([cancellation, realFetch(input, init)]);\n }\n return realFetch(input, init);\n };\n return {\n fetch: abortableFetch,\n Request: Request\n };\n}\n\nexports.AbortController = AbortController;\nexports.AbortSignal = AbortSignal;\nexports.abortableFetch = abortableFetchDecorator;\n", "import {abortableFetch as abortableFetchFactory} from 'abortcontroller-polyfill/dist/cjs-ponyfill';\n\nexport {\n AbortController,\n AbortSignal,\n} from 'abortcontroller-polyfill/dist/cjs-ponyfill';\n\nconst {fetch: abortableFetch} = abortableFetchFactory({\n fetch,\n});\n\nexport {abortableFetch as fetch};\n", "\"use strict\";\n\nvar defaultParseOptions = {\n decodeValues: true,\n map: false,\n silent: false,\n};\n\nfunction isNonEmptyString(str) {\n return typeof str === \"string\" && !!str.trim();\n}\n\nfunction parseString(setCookieValue, options) {\n var parts = setCookieValue.split(\";\").filter(isNonEmptyString);\n\n var nameValuePairStr = parts.shift();\n var parsed = parseNameValuePair(nameValuePairStr);\n var name = parsed.name;\n var value = parsed.value;\n\n options = options\n ? Object.assign({}, defaultParseOptions, options)\n : defaultParseOptions;\n\n try {\n value = options.decodeValues ? decodeURIComponent(value) : value; // decode cookie value\n } catch (e) {\n console.error(\n \"set-cookie-parser encountered an error while decoding a cookie with value '\" +\n value +\n \"'. Set options.decodeValues to false to disable this feature.\",\n e\n );\n }\n\n var cookie = {\n name: name,\n value: value,\n };\n\n parts.forEach(function (part) {\n var sides = part.split(\"=\");\n var key = sides.shift().trimLeft().toLowerCase();\n var value = sides.join(\"=\");\n if (key === \"expires\") {\n cookie.expires = new Date(value);\n } else if (key === \"max-age\") {\n cookie.maxAge = parseInt(value, 10);\n } else if (key === \"secure\") {\n cookie.secure = true;\n } else if (key === \"httponly\") {\n cookie.httpOnly = true;\n } else if (key === \"samesite\") {\n cookie.sameSite = value;\n } else {\n cookie[key] = value;\n }\n });\n\n return cookie;\n}\n\nfunction parseNameValuePair(nameValuePairStr) {\n // Parses name-value-pair according to rfc6265bis draft\n\n var name = \"\";\n var value = \"\";\n var nameValueArr = nameValuePairStr.split(\"=\");\n if (nameValueArr.length > 1) {\n name = nameValueArr.shift();\n value = nameValueArr.join(\"=\"); // everything after the first =, joined by a \"=\" if there was more than one part\n } else {\n value = nameValuePairStr;\n }\n\n return { name: name, value: value };\n}\n\nfunction parse(input, options) {\n options = options\n ? Object.assign({}, defaultParseOptions, options)\n : defaultParseOptions;\n\n if (!input) {\n if (!options.map) {\n return [];\n } else {\n return {};\n }\n }\n\n if (input.headers) {\n if (typeof input.headers.getSetCookie === \"function\") {\n // for fetch responses - they combine headers of the same type in the headers array,\n // but getSetCookie returns an uncombined array\n input = input.headers.getSetCookie();\n } else if (input.headers[\"set-cookie\"]) {\n // fast-path for node.js (which automatically normalizes header names to lower-case\n input = input.headers[\"set-cookie\"];\n } else {\n // slow-path for other environments - see #25\n var sch =\n input.headers[\n Object.keys(input.headers).find(function (key) {\n return key.toLowerCase() === \"set-cookie\";\n })\n ];\n // warn if called on a request-like object with a cookie header rather than a set-cookie header - see #34, 36\n if (!sch && input.headers.cookie && !options.silent) {\n console.warn(\n \"Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning.\"\n );\n }\n input = sch;\n }\n }\n if (!Array.isArray(input)) {\n input = [input];\n }\n\n options = options\n ? Object.assign({}, defaultParseOptions, options)\n : defaultParseOptions;\n\n if (!options.map) {\n return input.filter(isNonEmptyString).map(function (str) {\n return parseString(str, options);\n });\n } else {\n var cookies = {};\n return input.filter(isNonEmptyString).reduce(function (cookies, str) {\n var cookie = parseString(str, options);\n cookies[cookie.name] = cookie;\n return cookies;\n }, cookies);\n }\n}\n\n/*\n Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n that are within a single set-cookie field-value, such as in the Expires portion.\n\n This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n React Native's fetch does this for *every* header, including set-cookie.\n\n Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nfunction splitCookiesString(cookiesString) {\n if (Array.isArray(cookiesString)) {\n return cookiesString;\n }\n if (typeof cookiesString !== \"string\") {\n return [];\n }\n\n var cookiesStrings = [];\n var pos = 0;\n var start;\n var ch;\n var lastComma;\n var nextStart;\n var cookiesSeparatorFound;\n\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1;\n }\n return pos < cookiesString.length;\n }\n\n function notSpecialChar() {\n ch = cookiesString.charAt(pos);\n\n return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n }\n\n while (pos < cookiesString.length) {\n start = pos;\n cookiesSeparatorFound = false;\n\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos);\n if (ch === \",\") {\n // ',' is a cookie separator if we have later first '=', not ';' or ','\n lastComma = pos;\n pos += 1;\n\n skipWhitespace();\n nextStart = pos;\n\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1;\n }\n\n // currently special character\n if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n // we found cookies separator\n cookiesSeparatorFound = true;\n // pos is inside the next cookie, so back up and return it.\n pos = nextStart;\n cookiesStrings.push(cookiesString.substring(start, lastComma));\n start = pos;\n } else {\n // in param ',' or param separator ';',\n // we continue from that comma\n pos = lastComma + 1;\n }\n } else {\n pos += 1;\n }\n }\n\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length));\n }\n }\n\n return cookiesStrings;\n}\n\nmodule.exports = parse;\nmodule.exports.parse = parse;\nmodule.exports.parseString = parseString;\nmodule.exports.splitCookiesString = splitCookiesString;\n", "import { splitCookiesString } from 'set-cookie-parser'\nimport { HeadersList, HeadersObject } from './glossary'\nimport { normalizeHeaderName } from './utils/normalizeHeaderName'\nimport { normalizeHeaderValue } from './utils/normalizeHeaderValue'\nimport { isValidHeaderName } from './utils/isValidHeaderName'\nimport { isValidHeaderValue } from './utils/isValidHeaderValue'\n\nexport const NORMALIZED_HEADERS: unique symbol = Symbol('normalizedHeaders')\n\nexport const RAW_HEADER_NAMES: unique symbol = Symbol('rawHeaderNames')\n\nconst HEADER_VALUE_DELIMITER = ', ' as const\n\nexport class Headers {\n // Normalized header {\"name\":\"a, b\"} storage.\n private [NORMALIZED_HEADERS]: Record<string, string> = {}\n\n // Keeps the mapping between the raw header name\n // and the normalized header name to ease the lookup.\n private [RAW_HEADER_NAMES]: Map<string, string> = new Map()\n\n constructor(init?: HeadersInit | HeadersObject | HeadersList) {\n /**\n * @note Cannot necessarily check if the `init` is an instance of the\n * `Headers` because that class may not be defined in Node or jsdom.\n */\n if (\n ['Headers', 'HeadersPolyfill'].includes(init?.constructor.name) ||\n init instanceof Headers ||\n (typeof globalThis.Headers !== 'undefined' &&\n init instanceof globalThis.Headers)\n ) {\n const initialHeaders = init as Headers\n initialHeaders.forEach((value, name) => {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(init)) {\n init.forEach(([name, value]) => {\n this.append(\n name,\n Array.isArray(value) ? value.join(HEADER_VALUE_DELIMITER) : value\n )\n })\n } else if (init) {\n Object.getOwnPropertyNames(init).forEach((name) => {\n const value = init[name]\n this.append(\n name,\n Array.isArray(value) ? value.join(HEADER_VALUE_DELIMITER) : value\n )\n })\n }\n }\n\n [Symbol.toStringTag] = 'Headers';\n\n [Symbol.iterator]() {\n return this.entries()\n }\n\n *keys(): IterableIterator<string> {\n for (const [name] of this.entries()) {\n yield name\n }\n }\n\n *values(): IterableIterator<string> {\n for (const [, value] of this.entries()) {\n yield value\n }\n }\n\n *entries(): IterableIterator<[string, string]> {\n // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine\n let sortedKeys = Object.keys(this[NORMALIZED_HEADERS]).sort((a, b) =>\n a.localeCompare(b)\n )\n for (const name of sortedKeys) {\n if (name === 'set-cookie') {\n for (const value of this.getSetCookie()) {\n yield [name, value]\n }\n } else {\n yield [name, this.get(name)]\n }\n }\n }\n\n /**\n * Returns a boolean stating whether a `Headers` object contains a certain header.\n */\n has(name: string): boolean {\n if (!isValidHeaderName(name)) {\n throw new TypeError(`Invalid header name \"${name}\"`)\n }\n\n return this[NORMALIZED_HEADERS].hasOwnProperty(normalizeHeaderName(name))\n }\n\n /**\n * Returns a `ByteString` sequence of all the values of a header with a given name.\n */\n get(name: string): string | null {\n if (!isValidHeaderName(name)) {\n throw TypeError(`Invalid header name \"${name}\"`)\n }\n\n return this[NORMALIZED_HEADERS][normalizeHeaderName(name)] ?? null\n }\n\n /**\n * Sets a new value for an existing header inside a `Headers` object, or adds the header if it does not already exist.\n */\n set(name: string, value: string): void {\n if (!isValidHeaderName(name) || !isValidHeaderValue(value)) {\n return\n }\n\n const normalizedName = normalizeHeaderName(name)\n const normalizedValue = normalizeHeaderValue(value)\n\n this[NORMALIZED_HEADERS][normalizedName] =\n normalizeHeaderValue(normalizedValue)\n this[RAW_HEADER_NAMES].set(normalizedName, name)\n }\n\n /**\n * Appends a new value onto an existing header inside a `Headers` object, or adds the header if it does not already exist.\n */\n append(name: string, value: string): void {\n if (!isValidHeaderName(name) || !isValidHeaderValue(value)) {\n return\n }\n\n const normalizedName = normalizeHeaderName(name)\n const normalizedValue = normalizeHeaderValue(value)\n\n let resolvedValue = this.has(normalizedName)\n ? `${this.get(normalizedName)}, ${normalizedValue}`\n : normalizedValue\n\n this.set(name, resolvedValue)\n }\n\n /**\n * Deletes a header from the `Headers` object.\n */\n delete(name: string): void {\n if (!isValidHeaderName(name)) {\n return\n }\n\n if (!this.has(name)) {\n return\n }\n\n const normalizedName = normalizeHeaderName(name)\n delete this[NORMALIZED_HEADERS][normalizedName]\n this[RAW_HEADER_NAMES].delete(normalizedName)\n }\n\n /**\n * Traverses the `Headers` object,\n * calling the given callback for each header.\n */\n forEach<ThisArg = this>(\n callback: (\n this: ThisArg,\n value: string,\n name: string,\n parent: this\n ) => void,\n thisArg?: ThisArg\n ) {\n for (const [name, value] of this.entries()) {\n callback.call(thisArg, value, name, this)\n }\n }\n\n /**\n * Returns an array containing the values\n * of all Set-Cookie headers associated\n * with a response\n */\n getSetCookie(): string[] {\n const setCookieHeader = this.get('set-cookie')\n\n if (setCookieHeader === null) {\n return []\n }\n\n if (setCookieHeader === '') {\n return ['']\n }\n\n return splitCookiesString(setCookieHeader)\n }\n}\n", "const HEADERS_INVALID_CHARACTERS = /[^a-z0-9\\-#$%&'*+.^_`|~]/i\n\nexport function normalizeHeaderName(name: string): string {\n if (HEADERS_INVALID_CHARACTERS.test(name) || name.trim() === '') {\n throw new TypeError('Invalid character in header field name')\n }\n\n return name.trim().toLowerCase()\n}\n", "const charCodesToRemove = [\n String.fromCharCode(0x0a),\n String.fromCharCode(0x0d),\n String.fromCharCode(0x09),\n String.fromCharCode(0x20),\n]\n\nconst HEADER_VALUE_REMOVE_REGEXP = new RegExp(\n `(^[${charCodesToRemove.join('')}]|$[${charCodesToRemove.join('')}])`,\n 'g'\n)\n\n/**\n * Normalize the given header value.\n * @see https://fetch.spec.whatwg.org/#concept-header-value-normalize\n */\nexport function normalizeHeaderValue(value: string): string {\n const nextValue = value.replace(HEADER_VALUE_REMOVE_REGEXP, '')\n return nextValue\n}\n", "/**\n * Validate the given header name.\n * @see https://fetch.spec.whatwg.org/#header-name\n */\nexport function isValidHeaderName(value: unknown) {\n if (typeof value !== 'string') {\n return false\n }\n\n if (value.length === 0) {\n return false\n }\n\n for (let i = 0; i < value.length; i++) {\n const character = value.charCodeAt(i)\n\n if (character > 0x7f || !isToken(character)) {\n return false\n }\n }\n\n return true\n}\n\nfunction isToken(value: string | number): boolean {\n return ![\n 0x7f,\n 0x20,\n '(',\n ')',\n '<',\n '>',\n '@',\n ',',\n ';',\n ':',\n '\\\\',\n '\"',\n '/',\n '[',\n ']',\n '?',\n '=',\n '{',\n '}',\n ].includes(value)\n}\n", "/**\n * Validate the given header value.\n * @see https://fetch.spec.whatwg.org/#header-value\n */\nexport function isValidHeaderValue(value: unknown): boolean {\n if (typeof value !== 'string') {\n return false\n }\n\n if (value.trim() !== value) {\n return false\n }\n\n for (let i = 0; i < value.length; i++) {\n const character = value.charCodeAt(i)\n\n if (\n // NUL.\n character === 0x00 ||\n // HTTP newline bytes.\n character === 0x0a ||\n character === 0x0d\n ) {\n return false\n }\n }\n\n return true\n}\n", "import { RAW_HEADER_NAMES } from './Headers'\n\n/**\n * Returns the object of all raw headers.\n */\nexport function getRawHeaders(headers: Headers) {\n const rawHeaders: Record<string, string> = {}\n\n for (const [name, value] of headers.entries()) {\n rawHeaders[headers[RAW_HEADER_NAMES].get(name)] = value\n }\n\n return rawHeaders\n}\n", "import { HeadersList } from '../glossary'\n\nexport function headersToList(headers: Headers): HeadersList {\n const headersList: HeadersList = []\n\n headers.forEach((value, name) => {\n const resolvedValue = value.includes(',')\n ? value.split(',').map((value) => value.trim())\n : value\n\n headersList.push([name, resolvedValue])\n })\n\n return headersList\n}\n", "import { headersToList } from './headersToList'\n\n/**\n * Converts a given `Headers` instance to its string representation.\n */\nexport function headersToString(headers: Headers): string {\n const list = headersToList(headers)\n const lines = list.map(([name, value]) => {\n const values = ([] as string[]).concat(value)\n return `${name}: ${values.join(', ')}`\n })\n\n return lines.join('\\r\\n')\n}\n", "import { HeadersObject } from '../glossary'\n\n// List of headers that cannot have multiple values,\n// while potentially having a comma in their single value.\nconst singleValueHeaders = ['user-agent']\n\n/**\n * Converts a given `Headers` instance into a plain object.\n * Respects headers with multiple values.\n */\nexport function headersToObject(headers: Headers): HeadersObject {\n const headersObject: HeadersObject = {}\n\n headers.forEach((value, name) => {\n const isMultiValue =\n !singleValueHeaders.includes(name.toLowerCase()) && value.includes(',')\n headersObject[name] = isMultiValue\n ? value.split(',').map((s) => s.trim())\n : value\n })\n\n return headersObject\n}\n", "import { Headers } from '../Headers'\n\n/**\n * Converts a string representation of headers (i.e. from XMLHttpRequest)\n * to a new `Headers` instance.\n */\nexport function stringToHeaders(str: string): Headers {\n const lines = str.trim().split(/[\\r\\n]+/)\n\n return lines.reduce((headers, line) => {\n if (line.trim() === '') {\n return headers\n }\n\n const parts = line.split(': ')\n const name = parts.shift()\n const value = parts.join(': ')\n headers.append(name, value)\n\n return headers\n }, new Headers())\n}\n", "import { Headers } from '../Headers'\nimport { HeadersList } from '../glossary'\n\nexport function listToHeaders(list: HeadersList): Headers {\n const headers = new Headers()\n\n list.forEach(([name, value]) => {\n const values = ([] as string[]).concat(value)\n\n values.forEach((value) => {\n headers.append(name, value)\n })\n })\n\n return headers\n}\n", "import { HeadersObject } from '../glossary'\n\n/**\n * Reduces given headers object instnace.\n */\nexport function reduceHeadersObject<R>(\n headers: HeadersObject,\n reducer: (headers: R, name: string, value: string | string[]) => R,\n initialState: R\n): R {\n return Object.keys(headers).reduce<R>((nextHeaders, name) => {\n return reducer(nextHeaders, name, headers[name])\n }, initialState)\n}\n", "import { Headers } from '../Headers'\nimport { reduceHeadersObject } from './reduceHeadersObject'\n\n/**\n * Converts a given headers object to a new `Headers` instance.\n */\nexport function objectToHeaders(\n headersObject: Record<string, string | string[] | undefined>\n): Headers {\n return reduceHeadersObject(\n headersObject,\n (headers, name, value) => {\n const values = ([] as string[]).concat(value).filter(Boolean)\n\n values.forEach((value) => {\n headers.append(name, value)\n })\n\n return headers\n },\n new Headers()\n )\n}\n", "import { HeadersList, FlatHeadersList } from '../glossary'\n\nexport function flattenHeadersList(list: HeadersList): FlatHeadersList {\n return list.map(([name, values]) => {\n return [name, ([] as string[]).concat(values).join(', ')]\n })\n}\n", "import { HeadersObject, FlatHeadersObject } from '../glossary'\nimport { reduceHeadersObject } from './reduceHeadersObject'\n\nexport function flattenHeadersObject(\n headersObject: HeadersObject\n): FlatHeadersObject {\n return reduceHeadersObject<FlatHeadersObject>(\n headersObject,\n (headers, name, value) => {\n headers[name] = ([] as string[]).concat(value).join(', ')\n return headers\n },\n {}\n )\n}\n", "import {Headers} from 'headers-polyfill';\n\nexport {Headers};\n", "/**\n * Type of jitter to apply to the delay.\n * - `\"none\"`: no jitter is applied\n * - `\"full\"`: full jitter is applied (random value between `0` and `delay`)\n */\nexport type JitterType = \"none\" | \"full\";\n\nexport type BackoffOptions = Partial<IBackOffOptions>;\n\nexport interface IBackOffOptions {\n /**\n * Decides whether the `startingDelay` should be applied before the first call.\n * If `false`, the first call will occur without a delay.\n * @defaultValue `false`\n */\n delayFirstAttempt: boolean;\n /**\n * Decides whether a [jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)\n * should be applied to the delay. Possible values are `\"full\"` and `\"none\"`.\n * @defaultValue `\"none\"`\n */\n jitter: JitterType;\n /**\n * The maximum delay, in milliseconds, between two consecutive attempts.\n * @defaultValue `Infinity`\n */\n maxDelay: number;\n /**\n * The maximum number of times to attempt the function.\n * Must be at least `1`.\n * @defaultValue `10`\n */\n numOfAttempts: number;\n /**\n * The `retry` function can be used to run logic after every failed attempt (e.g. logging a message,\n * assessing the last error, etc.).\n * It is called with the last error and the upcoming attempt number.\n * Returning `true` will retry the function as long as the `numOfAttempts` has not been exceeded.\n * Returning `false` will end the execution.\n * @defaultValue a function that always returns `true`.\n * @param e The last error thrown by the function.\n * @param attemptNumber The upcoming attempt number.\n * @returns `true` to retry the function, `false` to end the execution\n */\n retry: (e: any, attemptNumber: number) => boolean | Promise<boolean>;\n /**\n * The delay, in milliseconds, before executing the function for the first time.\n * @defaultValue `100`\n */\n startingDelay: number;\n /**\n * The `startingDelay` is multiplied by the `timeMultiple` to increase the delay between reattempts.\n * @defaultValue `2`\n */\n timeMultiple: number;\n}\n\nconst defaultOptions: IBackOffOptions = {\n delayFirstAttempt: false,\n jitter: \"none\",\n maxDelay: Infinity,\n numOfAttempts: 10,\n retry: () => true,\n startingDelay: 100,\n timeMultiple: 2\n};\n\nexport function getSanitizedOptions(options: BackoffOptions) {\n const sanitized: IBackOffOptions = { ...defaultOptions, ...options };\n\n if (sanitized.numOfAttempts < 1) {\n sanitized.numOfAttempts = 1;\n }\n\n return sanitized;\n}\n", "export function fullJitter(delay: number) {\n const jitteredDelay = Math.random() * delay;\n return Math.round(jitteredDelay);\n}", "export function noJitter(delay: number) {\n return delay;\n}", "import { IBackOffOptions } from \"../options\";\nimport { fullJitter } from \"./full/full.jitter\";\nimport { noJitter } from \"./no/no.jitter\";\n\nexport type Jitter = (delay: number) => number;\n\nexport function JitterFactory(options: IBackOffOptions): Jitter {\n switch (options.jitter) {\n case \"full\":\n return fullJitter;\n\n case \"none\":\n default:\n return noJitter;\n }\n}\n", "import { IDelay } from \"./delay.interface\";\nimport { IBackOffOptions } from \"../options\";\nimport { JitterFactory } from \"../jitter/jitter.factory\";\n\nexport abstract class Delay implements IDelay {\n protected attempt = 0;\n constructor(private options: IBackOffOptions) {}\n\n public apply() {\n return new Promise(resolve => setTimeout(resolve, this.jitteredDelay));\n }\n\n public setAttemptNumber(attempt: number) {\n this.attempt = attempt;\n }\n\n private get jitteredDelay() {\n const jitter = JitterFactory(this.options);\n return jitter(this.delay);\n }\n\n private get delay() {\n const constant = this.options.startingDelay;\n const base = this.options.timeMultiple;\n const power = this.numOfDelayedAttempts;\n const delay = constant * Math.pow(base, power);\n\n return Math.min(delay, this.options.maxDelay);\n }\n\n protected get numOfDelayedAttempts() {\n return this.attempt;\n }\n}\n", "import { Delay } from \"../delay.base\";\n\nexport class SkipFirstDelay extends Delay {\n public async apply() {\n return this.isFirstAttempt ? true : super.apply();\n }\n\n private get isFirstAttempt() {\n return this.attempt === 0;\n }\n\n protected get numOfDelayedAttempts() {\n return this.attempt - 1;\n }\n}", "import { Delay } from \"../delay.base\";\n\nexport class AlwaysDelay extends Delay {}", "import { IBackOffOptions } from \"../options\";\nimport { SkipFirstDelay } from \"./skip-first/skip-first.delay\";\nimport { AlwaysDelay } from \"./always/always.delay\";\nimport { IDelay } from \"./delay.interface\";\n\nexport function DelayFactory(options: IBackOffOptions, attempt: number): IDelay {\n const delay = initDelayClass(options);\n delay.setAttemptNumber(attempt);\n return delay;\n}\n\nfunction initDelayClass(options: IBackOffOptions) {\n if (!options.delayFirstAttempt) {\n return new SkipFirstDelay(options);\n }\n\n return new AlwaysDelay(options);\n}", "import {\n IBackOffOptions,\n getSanitizedOptions,\n BackoffOptions\n} from \"./options\";\nimport { DelayFactory } from \"./delay/delay.factory\";\n\nexport { BackoffOptions, IBackOffOptions };\n\n/**\n * Executes a function with exponential backoff.\n * @param request the function to be executed\n * @param options options to customize the backoff behavior\n * @returns Promise that resolves to the result of the `request` function\n */\nexport async function backOff<T>(\n request: () => Promise<T>,\n options: BackoffOptions = {}\n): Promise<T> {\n const sanitizedOptions = getSanitizedOptions(options);\n const backOff = new BackOff(request, sanitizedOptions);\n\n return await backOff.execute();\n}\n\nclass BackOff<T> {\n private attemptNumber = 0;\n\n constructor(\n private request: () => Promise<T>,\n private options: IBackOffOptions\n ) {}\n\n public async execute(): Promise<T> {\n while (!this.attemptLimitReached) {\n try {\n await this.applyDelay();\n return await this.request();\n } catch (e) {\n this.attemptNumber++;\n const shouldRetry = await this.options.retry(e, this.attemptNumber);\n\n if (!shouldRetry || this.attemptLimitReached) {\n throw e;\n }\n }\n }\n\n throw new Error(\"Something went wrong.\");\n }\n\n private get attemptLimitReached() {\n return this.attemptNumber >= this.options.numOfAttempts;\n }\n\n private async applyDelay() {\n const delay = DelayFactory(this.options, this.attemptNumber);\n await delay.apply();\n }\n}\n", "!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));", "!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_quarterOfYear=n()}(this,(function(){\"use strict\";var t=\"month\",n=\"quarter\";return function(e,i){var r=i.prototype;r.quarter=function(t){return this.$utils().u(t)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(t-1))};var s=r.add;r.add=function(e,i){return e=Number(e),this.$utils().p(i)===n?this.add(3*e,t):s.bind(this)(e,i)};var u=r.startOf;r.startOf=function(e,i){var r=this.$utils(),s=!!r.u(i)||i;if(r.p(e)===n){var o=this.quarter()-1;return s?this.month(3*o).startOf(t).startOf(\"day\"):this.month(3*o+2).endOf(t).endOf(\"day\")}return u.bind(this)(e,i)}}}));", "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d/,r=/\\d\\d/,i=/\\d\\d?/,o=/\\d*[^-_:/,()\\s\\d]+/,s={},a=function(e){return(e=+e)+(e>68?1900:2e3)};var f=function(e){return function(t){this[e]=+t}},h=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],u=function(e){var t=s[e];return t&&(t.indexOf?t:t.s.concat(t.f))},d=function(e,t){var n,r=s.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},c={A:[o,function(e){this.afternoon=d(e,!1)}],a:[o,function(e){this.afternoon=d(e,!0)}],Q:[n,function(e){this.month=3*(e-1)+1}],S:[n,function(e){this.milliseconds=100*+e}],SS:[r,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[i,f(\"seconds\")],ss:[i,f(\"seconds\")],m:[i,f(\"minutes\")],mm:[i,f(\"minutes\")],H:[i,f(\"hours\")],h:[i,f(\"hours\")],HH:[i,f(\"hours\")],hh:[i,f(\"hours\")],D:[i,f(\"day\")],DD:[r,f(\"day\")],Do:[o,function(e){var t=s.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],w:[i,f(\"week\")],ww:[r,f(\"week\")],M:[i,f(\"month\")],MM:[r,f(\"month\")],MMM:[o,function(e){var t=u(\"months\"),n=(u(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[o,function(e){var t=u(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,f(\"year\")],YY:[r,function(e){this.year=a(e)}],YYYY:[/\\d{4}/,f(\"year\")],Z:h,ZZ:h};function l(n){var r,i;r=n,i=s&&s.formats;for(var o=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=o.length,f=0;f<a;f+=1){var h=o[f],u=c[h],d=u&&u[0],l=u&&u[1];o[f]=l?{regex:d,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=o[n];if(\"string\"==typeof i)r+=i.length;else{var s=i.regex,f=i.parser,h=e.slice(r),u=s.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(a=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,o=e.args;this.$u=r;var a=o[1];if(\"string\"==typeof a){var f=!0===o[2],h=!0===o[3],u=f||h,d=o[2];h&&(d=o[2]),s=this.$locale(),!f&&d&&(s=n.Ls[d]),this.$d=function(e,t,n,r){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var i=l(t)(e),o=i.year,s=i.month,a=i.day,f=i.hours,h=i.minutes,u=i.seconds,d=i.milliseconds,c=i.zone,m=i.week,M=new Date,Y=a||(o||s?1:M.getDate()),p=o||M.getFullYear(),v=0;o&&!s||(v=s>0?s-1:M.getMonth());var D,w=f||0,g=h||0,y=u||0,L=d||0;return c?new Date(Date.UTC(p,v,Y,w,g,y,L+60*c.offset*1e3)):n?new Date(Date.UTC(p,v,Y,w,g,y,L)):(D=new Date(p,v,Y,w,g,y,L),m&&(D=r(D).week(m).toDate()),D)}catch(e){return new Date(\"\")}}(t,a,r,n),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),s={}}else if(a instanceof Array)for(var c=a.length,m=1;m<=c;m+=1){o[1]=a[m-1];var M=n.apply(this,o);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===c&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));", "!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_timezone=e()}(this,(function(){\"use strict\";var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,o){var r,a=function(t,n,i){void 0===i&&(i={});var o=new Date(t),r=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||\"short\",o=t+\"|\"+i,r=e[o];return r||(r=new Intl.DateTimeFormat(\"en-US\",{hour12:!1,timeZone:t,year:\"numeric\",month:\"2-digit\",day:\"2-digit\",hour:\"2-digit\",minute:\"2-digit\",second:\"2-digit\",timeZoneName:i}),e[o]=r),r}(n,i);return r.formatToParts(o)},u=function(e,n){for(var i=a(e,n),r=[],u=0;u<i.length;u+=1){var f=i[u],s=f.type,m=f.value,c=t[s];c>=0&&(r[c]=parseInt(m,10))}var d=r[3],l=24===d?0:d,h=r[0]+\"-\"+r[1]+\"-\"+r[2]+\" \"+l+\":\"+r[4]+\":\"+r[5]+\":000\",v=+e;return(o.utc(h).valueOf()-(v-=v%1e3))/6e4},f=i.prototype;f.tz=function(t,e){void 0===t&&(t=r);var n,i=this.utcOffset(),a=this.toDate(),u=a.toLocaleString(\"en-US\",{timeZone:t}),f=Math.round((a-new Date(u))/1e3/60),s=15*-Math.round(a.getTimezoneOffset()/15)-f;if(!Number(s))n=this.utcOffset(0,e);else if(n=o(u,{locale:this.$L}).$set(\"millisecond\",this.$ms).utcOffset(s,!0),e){var m=n.utcOffset();n=n.add(i-m,\"minute\")}return n.$x.$timezone=t,n},f.offsetName=function(t){var e=this.$x.$timezone||o.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return\"timezonename\"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=o(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\"),{locale:this.$L});return s.call(n,t,e).tz(this.$x.$timezone,!0)},o.tz=function(t,e,n){var i=n&&e,a=n||e||r,f=u(+o(),a);if(\"string\"!=typeof t)return o(t).tz(a);var s=function(t,e,n){var i=t-60*e*1e3,o=u(i,n);if(e===o)return[i,e];var r=u(i-=60*(o-e)*1e3,n);return o===r?[i,o]:[t-60*Math.min(o,r)*1e3,Math.max(o,r)]}(o.utc(t,i).valueOf(),f,a),m=s[0],c=s[1],d=o(m).utcOffset(c);return d.$x.$timezone=a,d},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(t){r=t}}}));", "!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));", "'use strict'\nfunction tryStringify (o) {\n try { return JSON.stringify(o) } catch(e) { return '\"[Circular]\"' }\n}\n\nmodule.exports = format\n\nfunction format(f, args, opts) {\n var ss = (opts && opts.stringify) || tryStringify\n var offset = 1\n if (typeof f === 'object' && f !== null) {\n var len = args.length + offset\n if (len === 1) return f\n var objects = new Array(len)\n objects[0] = ss(f)\n for (var index = 1; index < len; index++) {\n objects[index] = ss(args[index])\n }\n return objects.join(' ')\n }\n if (typeof f !== 'string') {\n return f\n }\n var argLen = args.length\n if (argLen === 0) return f\n var str = ''\n var a = 1 - offset\n var lastPos = -1\n var flen = (f && f.length) || 0\n for (var i = 0; i < flen;) {\n if (f.charCodeAt(i) === 37 && i + 1 < flen) {\n lastPos = lastPos > -1 ? lastPos : 0\n switch (f.charCodeAt(i + 1)) {\n case 100: // 'd'\n case 102: // 'f'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Number(args[a])\n lastPos = i + 2\n i++\n break\n case 105: // 'i'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Math.floor(Number(args[a]))\n lastPos = i + 2\n i++\n break\n case 79: // 'O'\n case 111: // 'o'\n case 106: // 'j'\n if (a >= argLen)\n break\n if (args[a] === undefined) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n var type = typeof args[a]\n if (type === 'string') {\n str += '\\'' + args[a] + '\\''\n lastPos = i + 2\n i++\n break\n }\n if (type === 'function') {\n str += args[a].name || '<anonymous>'\n lastPos = i + 2\n i++\n break\n }\n str += ss(args[a])\n lastPos = i + 2\n i++\n break\n case 115: // 's'\n if (a >= argLen)\n break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += String(args[a])\n lastPos = i + 2\n i++\n break\n case 37: // '%'\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += '%'\n lastPos = i + 2\n i++\n a--\n break\n }\n ++a\n }\n ++i\n }\n if (lastPos === -1)\n return f\n else if (lastPos < flen) {\n str += f.slice(lastPos)\n }\n\n return str\n}\n", "'use strict'\n\nconst format = require('quick-format-unescaped')\n\nmodule.exports = pino\n\nconst _console = pfGlobalThisOrFallback().console || {}\nconst stdSerializers = {\n mapHttpRequest: mock,\n mapHttpResponse: mock,\n wrapRequestSerializer: passthrough,\n wrapResponseSerializer: passthrough,\n wrapErrorSerializer: passthrough,\n req: mock,\n res: mock,\n err: asErrValue,\n errWithCause: asErrValue\n}\nfunction levelToValue (level, logger) {\n return level === 'silent'\n ? Infinity\n : logger.levels.values[level]\n}\nconst baseLogFunctionSymbol = Symbol('pino.logFuncs')\nconst hierarchySymbol = Symbol('pino.hierarchy')\n\nconst logFallbackMap = {\n error: 'log',\n fatal: 'error',\n warn: 'error',\n info: 'log',\n debug: 'log',\n trace: 'log'\n}\n\nfunction appendChildLogger (parentLogger, childLogger) {\n const newEntry = {\n logger: childLogger,\n parent: parentLogger[hierarchySymbol]\n }\n childLogger[hierarchySymbol] = newEntry\n}\n\nfunction setupBaseLogFunctions (logger, levels, proto) {\n const logFunctions = {}\n levels.forEach(level => {\n logFunctions[level] = proto[level] ? proto[level] : (_console[level] || _console[logFallbackMap[level] || 'log'] || noop)\n })\n logger[baseLogFunctionSymbol] = logFunctions\n}\n\nfunction shouldSerialize (serialize, serializers) {\n if (Array.isArray(serialize)) {\n const hasToFilter = serialize.filter(function (k) {\n return k !== '!stdSerializers.err'\n })\n return hasToFilter\n } else if (serialize === true) {\n return Object.keys(serializers)\n }\n\n return false\n}\n\nfunction pino (opts) {\n opts = opts || {}\n opts.browser = opts.browser || {}\n\n const transmit = opts.browser.transmit\n if (transmit && typeof transmit.send !== 'function') { throw Error('pino: transmit option must have a send function') }\n\n const proto = opts.browser.write || _console\n if (opts.browser.write) opts.browser.asObject = true\n const serializers = opts.serializers || {}\n const serialize = shouldSerialize(opts.browser.serialize, serializers)\n let stdErrSerialize = opts.browser.serialize\n\n if (\n Array.isArray(opts.browser.serialize) &&\n opts.browser.serialize.indexOf('!stdSerializers.err') > -1\n ) stdErrSerialize = false\n\n const customLevels = Object.keys(opts.customLevels || {})\n const levels = ['error', 'fatal', 'warn', 'info', 'debug', 'trace'].concat(customLevels)\n\n if (typeof proto === 'function') {\n levels.forEach(function (level) {\n proto[level] = proto\n })\n }\n if (opts.enabled === false || opts.browser.disabled) opts.level = 'silent'\n const level = opts.level || 'info'\n const logger = Object.create(proto)\n if (!logger.log) logger.log = noop\n\n setupBaseLogFunctions(logger, levels, proto)\n // setup root hierarchy entry\n appendChildLogger({}, logger)\n\n Object.defineProperty(logger, 'levelVal', {\n get: getLevelVal\n })\n Object.defineProperty(logger, 'level', {\n get: getLevel,\n set: setLevel\n })\n\n const setOpts = {\n transmit,\n serialize,\n asObject: opts.browser.asObject,\n asObjectBindingsOnly: opts.browser.asObjectBindingsOnly,\n formatters: opts.browser.formatters,\n levels,\n timestamp: getTimeFunction(opts),\n messageKey: opts.messageKey || 'msg',\n onChild: opts.onChild || noop\n }\n logger.levels = getLevels(opts)\n logger.level = level\n\n logger.isLevelEnabled = function (level) {\n if (!this.levels.values[level]) {\n return false\n }\n\n return this.levels.values[level] >= this.levels.values[this.level]\n }\n logger.setMaxListeners = logger.getMaxListeners =\n logger.emit = logger.addListener = logger.on =\n logger.prependListener = logger.once =\n logger.prependOnceListener = logger.removeListener =\n logger.removeAllListeners = logger.listeners =\n logger.listenerCount = logger.eventNames =\n logger.write = logger.flush = noop\n logger.serializers = serializers\n logger._serialize = serialize\n logger._stdErrSerialize = stdErrSerialize\n logger.child = function (...args) { return child.call(this, setOpts, ...args) }\n\n if (transmit) logger._logEvent = createLogEventShape()\n\n function getLevelVal () {\n return levelToValue(this.level, this)\n }\n\n function getLevel () {\n return this._level\n }\n function setLevel (level) {\n if (level !== 'silent' && !this.levels.values[level]) {\n throw Error('unknown level ' + level)\n }\n this._level = level\n\n set(this, setOpts, logger, 'error') // <-- must stay first\n set(this, setOpts, logger, 'fatal')\n set(this, setOpts, logger, 'warn')\n set(this, setOpts, logger, 'info')\n set(this, setOpts, logger, 'debug')\n set(this, setOpts, logger, 'trace')\n\n customLevels.forEach((level) => {\n set(this, setOpts, logger, level)\n })\n }\n\n function child (setOpts, bindings, childOptions) {\n if (!bindings) {\n throw new Error('missing bindings for child Pino')\n }\n childOptions = childOptions || {}\n if (serialize && bindings.serializers) {\n childOptions.serializers = bindings.serializers\n }\n const childOptionsSerializers = childOptions.serializers\n if (serialize && childOptionsSerializers) {\n var childSerializers = Object.assign({}, serializers, childOptionsSerializers)\n var childSerialize = opts.browser.serialize === true\n ? Object.keys(childSerializers)\n : serialize\n delete bindings.serializers\n applySerializers([bindings], childSerialize, childSerializers, this._stdErrSerialize)\n }\n function Child (parent) {\n this._childLevel = (parent._childLevel | 0) + 1\n\n // make sure bindings are available in the `set` function\n this.bindings = bindings\n\n if (childSerializers) {\n this.serializers = childSerializers\n this._serialize = childSerialize\n }\n if (transmit) {\n this._logEvent = createLogEventShape(\n [].concat(parent._logEvent.bindings, bindings)\n )\n }\n }\n Child.prototype = this\n const newLogger = new Child(this)\n\n // must happen before the level is assigned\n appendChildLogger(this, newLogger)\n newLogger.child = function (...args) { return child.call(this, setOpts, ...args) }\n // required to actually initialize the logger functions for any given child\n newLogger.level = childOptions.level || this.level // allow level to be set by childOptions\n setOpts.onChild(newLogger)\n\n return newLogger\n }\n return logger\n}\n\nfunction getLevels (opts) {\n const customLevels = opts.customLevels || {}\n\n const values = Object.assign({}, pino.levels.values, customLevels)\n const labels = Object.assign({}, pino.levels.labels, invertObject(customLevels))\n\n return {\n values,\n labels\n }\n}\n\nfunction invertObject (obj) {\n const inverted = {}\n Object.keys(obj).forEach(function (key) {\n inverted[obj[key]] = key\n })\n return inverted\n}\n\npino.levels = {\n values: {\n fatal: 60,\n error: 50,\n warn: 40,\n info: 30,\n debug: 20,\n trace: 10\n },\n labels: {\n 10: 'trace',\n 20: 'debug',\n 30: 'info',\n 40: 'warn',\n 50: 'error',\n 60: 'fatal'\n }\n}\n\npino.stdSerializers = stdSerializers\npino.stdTimeFunctions = Object.assign({}, { nullTime, epochTime, unixTime, isoTime })\n\nfunction getBindingChain (logger) {\n const bindings = []\n if (logger.bindings) {\n bindings.push(logger.bindings)\n }\n\n // traverse up the tree to get all bindings\n let hierarchy = logger[hierarchySymbol]\n while (hierarchy.parent) {\n hierarchy = hierarchy.parent\n if (hierarchy.logger.bindings) {\n bindings.push(hierarchy.logger.bindings)\n }\n }\n\n return bindings.reverse()\n}\n\nfunction set (self, opts, rootLogger, level) {\n // override the current log functions with either `noop` or the base log function\n Object.defineProperty(self, level, {\n value: (levelToValue(self.level, rootLogger) > levelToValue(level, rootLogger)\n ? noop\n : rootLogger[baseLogFunctionSymbol][level]),\n writable: true,\n enumerable: true,\n configurable: true\n })\n\n if (self[level] === noop) {\n if (!opts.transmit) return\n\n const transmitLevel = opts.transmit.level || self.level\n const transmitValue = levelToValue(transmitLevel, rootLogger)\n const methodValue = levelToValue(level, rootLogger)\n if (methodValue < transmitValue) return\n }\n\n // make sure the log format is correct\n self[level] = createWrap(self, opts, rootLogger, level)\n\n // prepend bindings if it is not the root logger\n const bindings = getBindingChain(self)\n if (bindings.length === 0) {\n // early exit in case for rootLogger\n return\n }\n self[level] = prependBindingsInArguments(bindings, self[level])\n}\n\nfunction prependBindingsInArguments (bindings, logFunc) {\n return function () {\n return logFunc.apply(this, [...bindings, ...arguments])\n }\n}\n\nfunction createWrap (self, opts, rootLogger, level) {\n return (function (write) {\n return function LOG () {\n const ts = opts.timestamp()\n const args = new Array(arguments.length)\n const proto = (Object.getPrototypeOf && Object.getPrototypeOf(this) === _console) ? _console : this\n for (var i = 0; i < args.length; i++) args[i] = arguments[i]\n\n var argsIsSerialized = false\n if (opts.serialize) {\n applySerializers(args, this._serialize, this.serializers, this._stdErrSerialize)\n argsIsSerialized = true\n }\n if (opts.asObject || opts.formatters) {\n write.call(proto, ...asObject(this, level, args, ts, opts))\n } else write.apply(proto, args)\n\n if (opts.transmit) {\n const transmitLevel = opts.transmit.level || self._level\n const transmitValue = levelToValue(transmitLevel, rootLogger)\n const methodValue = levelToValue(level, rootLogger)\n if (methodValue < transmitValue) return\n transmit(this, {\n ts,\n methodLevel: level,\n methodValue,\n transmitLevel,\n transmitValue: rootLogger.levels.values[opts.transmit.level || self._level],\n send: opts.transmit.send,\n val: levelToValue(self._level, rootLogger)\n }, args, argsIsSerialized)\n }\n }\n })(self[baseLogFunctionSymbol][level])\n}\n\nfunction asObject (logger, level, args, ts, opts) {\n const {\n level: levelFormatter,\n log: logObjectFormatter = (obj) => obj\n } = opts.formatters || {}\n const argsCloned = args.slice()\n let msg = argsCloned[0]\n const logObject = {}\n\n let lvl = (logger._childLevel | 0) + 1\n if (lvl < 1) lvl = 1\n\n if (ts) {\n logObject.time = ts\n }\n\n if (levelFormatter) {\n const formattedLevel = levelFormatter(level, logger.levels.values[level])\n Object.assign(logObject, formattedLevel)\n } else {\n logObject.level = logger.levels.values[level]\n }\n\n if (opts.asObjectBindingsOnly) {\n if (msg !== null && typeof msg === 'object') {\n while (lvl-- && typeof argsCloned[0] === 'object') {\n Object.assign(logObject, argsCloned.shift())\n }\n }\n\n const formattedLogObject = logObjectFormatter(logObject)\n return [formattedLogObject, ...argsCloned]\n } else {\n // deliberate, catching objects, arrays\n if (msg !== null && typeof msg === 'object') {\n while (lvl-- && typeof argsCloned[0] === 'object') {\n Object.assign(logObject, argsCloned.shift())\n }\n msg = argsCloned.length ? format(argsCloned.shift(), argsCloned) : undefined\n } else if (typeof msg === 'string') msg = format(argsCloned.shift(), argsCloned)\n if (msg !== undefined) logObject[opts.messageKey] = msg\n\n const formattedLogObject = logObjectFormatter(logObject)\n return [formattedLogObject]\n }\n}\n\nfunction applySerializers (args, serialize, serializers, stdErrSerialize) {\n for (const i in args) {\n if (stdErrSerialize && args[i] instanceof Error) {\n args[i] = pino.stdSerializers.err(args[i])\n } else if (typeof args[i] === 'object' && !Array.isArray(args[i]) && serialize) {\n for (const k in args[i]) {\n if (serialize.indexOf(k) > -1 && k in serializers) {\n args[i][k] = serializers[k](args[i][k])\n }\n }\n }\n }\n}\n\nfunction transmit (logger, opts, args, argsIsSerialized = false) {\n const send = opts.send\n const ts = opts.ts\n const methodLevel = opts.methodLevel\n const methodValue = opts.methodValue\n const val = opts.val\n const bindings = logger._logEvent.bindings\n\n if (!argsIsSerialized) {\n applySerializers(\n args,\n logger._serialize || Object.keys(logger.serializers),\n logger.serializers,\n logger._stdErrSerialize === undefined ? true : logger._stdErrSerialize\n )\n }\n\n logger._logEvent.ts = ts\n logger._logEvent.messages = args.filter(function (arg) {\n // bindings can only be objects, so reference equality check via indexOf is fine\n return bindings.indexOf(arg) === -1\n })\n\n logger._logEvent.level.label = methodLevel\n logger._logEvent.level.value = methodValue\n\n send(methodLevel, logger._logEvent, val)\n\n logger._logEvent = createLogEventShape(bindings)\n}\n\nfunction createLogEventShape (bindings) {\n return {\n ts: 0,\n messages: [],\n bindings: bindings || [],\n level: { label: '', value: 0 }\n }\n}\n\nfunction asErrValue (err) {\n const obj = {\n type: err.constructor.name,\n msg: err.message,\n stack: err.stack\n }\n for (const key in err) {\n if (obj[key] === undefined) {\n obj[key] = err[key]\n }\n }\n return obj\n}\n\nfunction getTimeFunction (opts) {\n if (typeof opts.timestamp === 'function') {\n return opts.timestamp\n }\n if (opts.timestamp === false) {\n return nullTime\n }\n return epochTime\n}\n\nfunction mock () { return {} }\nfunction passthrough (a) { return a }\nfunction noop () {}\n\nfunction nullTime () { return false }\nfunction epochTime () { return Date.now() }\nfunction unixTime () { return Math.round(Date.now() / 1000.0) }\nfunction isoTime () { return new Date(Date.now()).toISOString() } // using Date.now() for testability\n\n/* eslint-disable */\n/* istanbul ignore next */\nfunction pfGlobalThisOrFallback () {\n function defd (o) { return typeof o !== 'undefined' && o }\n try {\n if (typeof globalThis !== 'undefined') return globalThis\n Object.defineProperty(Object.prototype, 'globalThis', {\n get: function () {\n delete Object.prototype.globalThis\n return (this.globalThis = this)\n },\n configurable: true\n })\n return globalThis\n } catch (e) {\n return defd(self) || defd(window) || defd(this) || {}\n }\n}\n/* eslint-enable */\n\nmodule.exports.default = pino\nmodule.exports.pino = pino\n", "/**\n * The Coveo Headless Case Assist sub-package exposes exposes the engine, controllers, actions, and utility functions to build a case assist experience.\n *\n * @example\n * ```typescript\n * import { buildCaseInput, buildCaseAssistEngine } from '@coveo/headless/case-assist';\n *\n * const engine = buildCaseAssistEngine({\n * configuration: ...\n * });\n *\n * const caseInput = buildCaseInput(engine);\n * ```\n * @module Case Assist\n */\n\nexport type {Relay} from '@coveo/relay';\n// 3rd Party Libraries\nexport type {Middleware, Unsubscribe} from '@reduxjs/toolkit';\nexport {\n getAnalyticsNextApiBaseUrl,\n getOrganizationEndpoint,\n} from './api/platform-client.js';\nexport type {Raw} from './api/search/search/raw.js';\nexport type {Result} from './api/search/search/result.js';\nexport type {DocumentSuggestionResponse} from './api/service/case-assist/get-document-suggestions/get-document-suggestions-response.js';\n// Main App\nexport type {\n CaseAssistEngine,\n CaseAssistEngineConfiguration,\n CaseAssistEngineOptions,\n} from './app/case-assist-engine/case-assist-engine.js';\nexport {buildCaseAssistEngine} from './app/case-assist-engine/case-assist-engine.js';\nexport type {CoreEngine, ExternalEngineOptions} from './app/engine.js';\nexport type {\n AnalyticsConfiguration,\n AnalyticsRuntimeEnvironment,\n EngineConfiguration,\n} from './app/engine-configuration.js';\nexport type {LoggerOptions, LogLevel} from './app/logger.js';\nexport type {NavigatorContext} from './app/navigator-context-provider.js';\nexport type {\n CaseField,\n CaseFieldOptions,\n CaseFieldProps,\n CaseFieldState,\n UpdateCaseFieldFetchOptions,\n} from './controllers/case-field/headless-case-field.js';\nexport {buildCaseField} from './controllers/case-field/headless-case-field.js';\nexport type {\n CaseInput,\n CaseInputOptions,\n CaseInputProps,\n CaseInputState,\n UpdateFetchOptions,\n} from './controllers/case-input/headless-case-input.js';\nexport {buildCaseInput} from './controllers/case-input/headless-case-input.js';\n// Controllers\nexport type {\n Controller,\n Subscribable,\n} from './controllers/controller/headless-controller.js';\nexport {buildController} from './controllers/controller/headless-controller.js';\nexport type {\n Quickview,\n QuickviewOptions,\n QuickviewProps,\n QuickviewState,\n} from './controllers/core/quickview/headless-core-quickview.js';\nexport type {\n CaseAssistInteractiveResult,\n CaseAssistInteractiveResultOptions,\n CaseAssistInteractiveResultProps,\n InteractiveResultCore,\n InteractiveResultCoreOptions,\n InteractiveResultCoreProps,\n} from './controllers/document-suggestion-list/case-assist-headless-interactive-result.js';\nexport {buildCaseAssistInteractiveResult as buildInteractiveResult} from './controllers/document-suggestion-list/case-assist-headless-interactive-result.js';\nexport type {\n DocumentSuggestionList,\n DocumentSuggestionListState,\n} from './controllers/document-suggestion-list/headless-document-suggestion-list.js';\nexport {\n buildDocumentSuggestionList,\n buildDocumentSuggestionList as buildDocumentSuggestion,\n} from './controllers/document-suggestion-list/headless-document-suggestion-list.js';\nexport type {\n CaseAssistQuickview,\n CaseAssistQuickviewOptions,\n CaseAssistQuickviewProps,\n CaseAssistQuickviewState,\n} from './controllers/quickview/case-assist-headless-quickview.js';\nexport {buildCaseAssistQuickview as buildQuickview} from './controllers/quickview/case-assist-headless-quickview.js';\nexport * from './features/analytics/generic-analytics-actions-loader.js';\nexport * from './features/case-assist/case-assist-analytics-actions-loader.js';\nexport * from './features/case-field/case-field-actions-loader.js';\nexport type {CaseFieldSuggestion} from './features/case-field/case-field-state.js';\n// Case Assist Action Loaders\nexport * from './features/case-input/case-input-actions-loader.js';\nexport * from './features/document-suggestion/document-suggestion-actions-loader.js';\n// Features\nexport {ResultTemplatesHelpers} from './features/result-templates/result-templates-helpers.js';\nexport type {HighlightKeyword} from './utils/highlight.js';\n", "import {backOff} from 'exponential-backoff';\nimport type {Logger} from 'pino';\nimport {DisconnectedError, UnauthorizedTokenError} from '../utils/errors.js';\nimport type {PlatformEnvironment} from '../utils/url-utils.js';\nimport {clone} from '../utils/utils.js';\nimport {canBeFormUrlEncoded, encodeAsFormUrl} from './form-url-encoder.js';\nimport type {\n PlatformClientOrigin,\n PlatformRequestOptions,\n PreprocessRequest,\n RequestMetadata,\n} from './preprocess-request.js';\n\nexport type HttpMethods = 'POST' | 'GET' | 'DELETE' | 'PUT';\nexport type HTTPContentType =\n | 'application/json'\n | 'application/x-www-form-urlencoded'\n | 'text/html';\n\nfunction isThrottled(status: number): boolean {\n return status === 429;\n}\n\nexport interface PlatformClientCallOptions<T = Record<string, unknown>> {\n origin: PlatformClientOrigin;\n url: string;\n method: HttpMethods;\n contentType: HTTPContentType;\n headers?: Record<string, string>;\n requestParams: T;\n accessToken: string;\n preprocessRequest: PreprocessRequest;\n requestMetadata?: RequestMetadata;\n logger: Logger;\n signal?: AbortSignal;\n}\n\nexport interface PlatformResponse<T> {\n body: T;\n response: Response;\n}\n\nexport type PlatformClientCallError =\n | UnauthorizedTokenError\n | DisconnectedError\n | Error;\n\n// biome-ignore lint/complexity/noStaticOnlyClass: Maybe change this into a function someday. Not worth the effort right now.\nexport class PlatformClient {\n static async call(\n options: PlatformClientCallOptions\n ): Promise<Response | PlatformClientCallError> {\n const defaultRequestOptions = buildDefaultRequestOptions(options);\n const {logger} = options;\n\n const requestInfo = await PlatformClient.preprocessRequest(\n defaultRequestOptions,\n options\n );\n\n logger.info(requestInfo, 'Platform request');\n\n const {url, ...requestData} = requestInfo;\n const request = async () => {\n const response = await fetch(url, requestData);\n if (isThrottled(response.status)) {\n throw response;\n }\n return response;\n };\n\n try {\n const response = await backOff(request, {\n retry: (e: Response) => {\n const shouldRetry = e && isThrottled(e.status);\n shouldRetry && logger.info('Platform retrying request');\n return shouldRetry;\n },\n });\n switch (response.status) {\n case 419:\n case 401:\n logger.info('Platform renewing token');\n throw new UnauthorizedTokenError();\n case 404:\n throw new DisconnectedError(url, response.status);\n default:\n logger.info({response, requestInfo}, 'Platform response');\n return response;\n }\n } catch (error) {\n if ((error as PlatformClientCallError).message === 'Failed to fetch') {\n return new DisconnectedError(url);\n }\n\n return error as PlatformClientCallError;\n }\n }\n\n private static async preprocessRequest(\n defaultRequestOptions: PlatformRequestOptions,\n options: PlatformClientCallOptions\n ) {\n const {origin, preprocessRequest, logger, requestMetadata} = options;\n const {signal: _signal, ...withoutSignal} = defaultRequestOptions;\n const untaintedOutput: PlatformRequestOptions = clone(withoutSignal);\n\n try {\n const processedRequest = await preprocessRequest(\n defaultRequestOptions,\n origin,\n requestMetadata\n );\n return {\n ...defaultRequestOptions,\n ...processedRequest,\n };\n } catch (e) {\n logger.error(\n e as Error,\n 'Platform request preprocessing failed. Returning default request options.'\n );\n }\n return untaintedOutput;\n }\n}\n\n/**\n * Retrieves the endpoint URL for a specific organization.\n *\n * @param organizationId - The ID of the organization.\n * @param environment - The environment of the organization. Defaults to 'prod'.\n * @param endpointType - The type of the endpoint. Defaults to 'platform'.\n * @returns The endpoint URL for the organization.\n */\nexport function getOrganizationEndpoint(\n organizationId: string,\n environment: PlatformEnvironment = 'prod',\n endpointType: 'admin' | 'analytics' | 'platform' = 'platform'\n) {\n const environmentSuffix = environment === 'prod' ? '' : environment;\n const endpointTypePart =\n endpointType === 'platform' ? '' : `.${endpointType}`;\n\n return `https://${organizationId}${endpointTypePart}.org${environmentSuffix}.coveo.com`;\n}\n\nexport function getSearchApiBaseUrl(\n organizationId: string,\n environment: PlatformEnvironment = 'prod'\n) {\n const organizationEndpoint = getOrganizationEndpoint(\n organizationId,\n environment\n );\n\n return `${organizationEndpoint}/rest/search/v2`;\n}\n\nexport function getAnalyticsNextApiBaseUrl(\n organizationId: string,\n environment: PlatformEnvironment = 'prod'\n) {\n const organizationEndpoint = getOrganizationEndpoint(\n organizationId,\n environment,\n 'analytics'\n );\n\n return `${organizationEndpoint}/rest/organizations/${organizationId}/events/v1`;\n}\n\nfunction buildDefaultRequestOptions(\n options: PlatformClientCallOptions\n): PlatformRequestOptions {\n const {url, method, requestParams, contentType, accessToken, signal} =\n options;\n const isMethodWithBody =\n options.method === 'POST' || options.method === 'PUT';\n const body = encodeBody(requestParams, contentType);\n\n return {\n url,\n method,\n headers: {\n 'Content-Type': contentType,\n Authorization: `Bearer ${accessToken}`,\n ...options.headers,\n },\n ...(isMethodWithBody && {body}),\n signal,\n };\n}\n\nfunction encodeBody(body: unknown, contentType: HTTPContentType) {\n if (contentType === 'application/x-www-form-urlencoded') {\n return canBeFormUrlEncoded(body) ? encodeAsFormUrl(body) : '';\n }\n\n return JSON.stringify(body);\n}\n", "export const loadReducerError = new Error('Failed to load reducers.');\n\nexport class UnauthorizedTokenError extends Error {\n constructor() {\n super();\n this.name = 'UnauthorizedTokenError';\n this.message =\n 'The token being used to perform the request is unauthorized. It may be expired or invalid.';\n }\n}\n\nexport class DisconnectedError extends Error {\n public statusCode: number;\n constructor(url: string, statusCode?: number) {\n super();\n this.name = 'Disconnected';\n this.message = `Client could not connect to the following URL: ${url}`;\n this.statusCode = statusCode ?? 0;\n }\n}\n", "import type {Action, Middleware, PayloadAction} from '@reduxjs/toolkit';\nimport type {FetchRecommendationsPayload} from '../features/commerce/recommendations/recommendations-actions.js';\n\nexport const randomID = (prepend?: string, length = 5) =>\n prepend +\n Math.random()\n .toString(36)\n .substring(2, 2 + length);\n\nexport function isArray<T>(value: T | T[]): value is T[] {\n return Array.isArray(value);\n}\n\nexport function isEmptyString(str: string) {\n return str.trim() === '';\n}\n\nexport function removeDuplicates<T>(arr: T[], predicate: (value: T) => string) {\n return [\n ...arr\n .reduce((map, item) => {\n const key = predicate(item);\n\n map.has(key) || map.set(key, item);\n\n return map;\n }, new Map())\n .values(),\n ];\n}\n\nfunction encodedBtoa(stringToEncode: string) {\n return btoa(encodeURI(stringToEncode))!;\n}\n\nexport function omit<T>(key: keyof T, obj: T) {\n const {[key]: _omitted, ...rest} = obj;\n return rest;\n}\n\nexport function getObjectHash<T>(obj: T) {\n return encodedBtoa(JSON.stringify(obj));\n}\n\nconst doNotTrackValues = new Set(['1', 1, 'yes', true]);\n// TODO KIT-2844\n\n/**\n * Logic copied from coveo.analytics.\n *\n * @deprecated V4 - Starting with Event Protocol, Coveo will no longer respect the DNT standard.\n * Instead, we will provide implementers with documentation on privacy best-practices, letting\n * them decide which standards to respect.\n * For more context behind the decision, see: https://coveord.atlassian.net/browse/LENS-1502\n */\nexport function doNotTrack() {\n if (typeof navigator === 'undefined' || typeof window === 'undefined') {\n return false;\n }\n // biome-ignore lint/suspicious/noExplicitAny: <>\n const nav = <any>navigator;\n // biome-ignore lint/suspicious/noExplicitAny: <>\n const win = <any>window;\n return [\n nav.globalPrivacyControl,\n nav.doNotTrack,\n nav.msDoNotTrack,\n win.doNotTrack,\n ].some((value) => doNotTrackValues.has(value));\n}\n\nexport function fromEntries<K extends PropertyKey, V>(\n values: [K, V][]\n): Record<K, V> {\n const newObject: Partial<Record<K, V>> = {};\n for (const [key, value] of values) {\n newObject[key] = value;\n }\n return newObject as Record<K, V>;\n}\n\nexport function resetTimeout(\n // biome-ignore lint/suspicious/noExplicitAny: <>\n callback: (...args: any[]) => void,\n timeoutId?: ReturnType<typeof setTimeout>,\n ms?: number | undefined\n) {\n clearTimeout(timeoutId);\n return setTimeout(callback, ms);\n}\n\nexport function mapObject<TKey extends string, TInitialValue, TNewValue>(\n obj: Record<TKey, TInitialValue>,\n predicate: (value: TInitialValue, key: TKey) => TNewValue\n): Record<TKey, TNewValue> {\n return Object.fromEntries(\n Object.entries(obj).map(([key, value]) => [\n key,\n predicate(value as TInitialValue, key as TKey),\n ])\n ) as Record<TKey, TNewValue>;\n}\n\nexport function filterObject<TKey extends string, TValue>(\n obj: Record<TKey, TValue>,\n predicate: (value: TValue, key: TKey) => boolean\n): Record<TKey, TValue> {\n return Object.fromEntries(\n Object.entries(obj).filter(([key, value]) =>\n predicate(value as TValue, key as TKey)\n )\n ) as Record<TKey, TValue>;\n}\n\n// TODO: Could eventually be replaced with `structuredClone`.\n// However, this is not compatible with salesforce locker service.\nexport function clone<T>(value: T): T {\n if (typeof value !== 'object') {\n return value;\n }\n if (!value) {\n return value;\n }\n // JSON parse/stringify can fail in some cases (ie: recursive objects)\n // add defensive code to prevent the whole app from crashing\n try {\n return JSON.parse(JSON.stringify(value));\n } catch (_) {\n return value;\n }\n}\n\nfunction createDeferredPromise<T>(): {\n promise: Promise<T>;\n resolve(value: T): void;\n reject(error: unknown): void;\n} {\n let resolve: null | ((value: T) => void) = null;\n let reject: null | ((error: unknown) => void) = null;\n const promise = new Promise<T>((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n return {promise, resolve: resolve!, reject: reject!};\n}\n\nexport function createWaitForActionMiddleware<TAction extends Action>(\n isDesiredAction: (action: unknown) => action is TAction\n): {promise: Promise<TAction>; middleware: Middleware} {\n const {promise, resolve} = createDeferredPromise<TAction>();\n\n const middleware: Middleware = () => (next) => (action) => {\n next(action);\n if (isDesiredAction(action)) {\n resolve(action);\n }\n };\n\n return {promise, middleware};\n}\n\nfunction isRecommendationActionPayload<P = void, T extends string = string>(\n action: unknown\n): action is PayloadAction<P, T, {arg: FetchRecommendationsPayload}> {\n if (action === null || action === undefined) {\n return false;\n }\n\n if (typeof action === 'object' && 'meta' in action) {\n return (\n (action as PayloadAction<P, T, {arg: FetchRecommendationsPayload}>).meta\n ?.arg?.slotId !== undefined\n );\n }\n\n return false;\n}\n\nexport function createWaitForActionMiddlewareForRecommendation<\n TAction extends Action,\n>(\n isDesiredAction: (action: unknown) => action is TAction,\n memo: Set<string>\n): {promise: Promise<TAction>; middleware: Middleware} {\n const {promise, resolve} = createDeferredPromise<TAction>();\n let hasBeenResolved = false;\n const hasSlotBeenProcessed = (slotId: string) => memo.has(slotId);\n\n const middleware: Middleware = () => (next) => (action) => {\n next(action);\n\n if (\n isDesiredAction(action) &&\n !hasBeenResolved &&\n isRecommendationActionPayload(action) &&\n !hasSlotBeenProcessed(action.meta.arg.slotId)\n ) {\n hasBeenResolved = true;\n memo.add(action.meta.arg.slotId);\n resolve(action);\n }\n };\n\n return {promise, middleware};\n}\n", "type FormEncodable = Record<string, string | number | boolean>;\n\nexport function encodeAsFormUrl(obj: FormEncodable) {\n const body = [];\n\n for (const property in obj) {\n const key = encodeURIComponent(property);\n const value = encodeURIComponent(obj[property]);\n body.push(`${key}=${value}`);\n }\n\n return body.join('&');\n}\n\nexport function canBeFormUrlEncoded(obj: unknown): obj is FormEncodable {\n if (typeof obj !== 'object') {\n return false;\n }\n\n if (!obj) {\n return false;\n }\n\n return Object.values(obj).every(isPrimitive);\n}\n\nfunction isPrimitive(val: unknown) {\n return (\n typeof val === 'string' ||\n typeof val === 'number' ||\n typeof val === 'boolean'\n );\n}\n", "import {isNullOrUndefined} from '@coveo/bueno';\nimport type {StateFromReducersMapObject} from '@reduxjs/toolkit';\nimport type {Logger} from 'pino';\nimport {NoopPreprocessRequest} from '../../api/preprocess-request.js';\nimport {CaseAssistAPIClient} from '../../api/service/case-assist/case-assist-api-client.js';\nimport {setCaseAssistConfiguration} from '../../features/case-assist-configuration/case-assist-configuration-actions.js';\nimport {caseAssistConfigurationReducer as caseAssistConfiguration} from '../../features/case-assist-configuration/case-assist-configuration-slice.js';\nimport {debugReducer as debug} from '../../features/debug/debug-slice.js';\nimport {setSearchHub} from '../../features/search-hub/search-hub-actions.js';\nimport {searchHubReducer as searchHub} from '../../features/search-hub/search-hub-slice.js';\nimport type {CaseAssistAppState} from '../../state/case-assist-app-state.js';\nimport type {CaseAssistThunkExtraArguments} from '../case-assist-thunk-extra-arguments.js';\nimport {\n buildEngine,\n type CoreEngine,\n type EngineOptions,\n type ExternalEngineOptions,\n warnIfUsingNextAnalyticsModeForServiceFeature,\n} from '../engine.js';\nimport {buildLogger} from '../logger.js';\nimport {buildThunkExtraArguments} from '../thunk-extra-arguments.js';\nimport {\n type CaseAssistEngineConfiguration,\n caseAssistEngineConfigurationSchema,\n} from './case-assist-engine-configuration.js';\n\nexport type {CaseAssistEngineConfiguration};\n\nconst caseassistEngineReducers = {\n debug,\n caseAssistConfiguration,\n searchHub,\n};\ntype CaseAssistEngineReducers = typeof caseassistEngineReducers;\ntype CaseAssistEngineState =\n StateFromReducersMapObject<CaseAssistEngineReducers> &\n Partial<CaseAssistAppState>;\n\n/**\n * The engine for powering case assist experiences.\n *\n * For example implementations, see the following [Coveo Quantic Case Assist components](https://docs.coveo.com/en/quantic/latest/reference/case-assist-components/):\n * * [quanticCaseClassification.js](https://github.com/coveo/ui-kit/blob/main/packages/quantic/force-app/main/default/lwc/quanticCaseClassification/quanticCaseClassification.js)\n * * [quanticDocumentSuggestion](https://github.com/coveo/ui-kit/blob/main/packages/quantic/force-app/main/default/lwc/quanticDocumentSuggestion/quanticDocumentSuggestion.js)\n *\n * @group Engine\n */\nexport interface CaseAssistEngine<State extends object = {}>\n extends CoreEngine<\n State & CaseAssistEngineState,\n CaseAssistThunkExtraArguments\n > {}\n\n/**\n * The case assist engine options.\n *\n * @group Engine\n */\nexport interface CaseAssistEngineOptions\n extends ExternalEngineOptions<CaseAssistEngineState> {\n /**\n * The case assist engine configuration options.\n */\n configuration: CaseAssistEngineConfiguration;\n}\n\n/**\n * Creates a case assist engine instance.\n *\n * @param options - The case assist engine options.\n * @returns A case assist engine instance.\n *\n * @group Engine\n */\nexport function buildCaseAssistEngine(\n options: CaseAssistEngineOptions\n): CaseAssistEngine {\n const logger = buildLogger(options.loggerOptions);\n validateConfiguration(options.configuration, logger);\n\n const caseAssistAPIClient = createCaseAssistAPIClient(\n options.configuration,\n logger\n );\n\n const thunkArguments = {\n ...buildThunkExtraArguments(options.configuration, logger),\n apiClient: caseAssistAPIClient,\n };\n\n const augmentedOptions: EngineOptions<CaseAssistEngineReducers> = {\n ...options,\n reducers: caseassistEngineReducers,\n };\n\n const engine = buildEngine(augmentedOptions, thunkArguments);\n warnIfUsingNextAnalyticsModeForServiceFeature(\n engine.state.configuration.analytics.analyticsMode\n );\n\n const {caseAssistId, locale, searchHub, proxyBaseUrl} = options.configuration;\n\n engine.dispatch(\n setCaseAssistConfiguration({\n caseAssistId,\n locale,\n proxyBaseUrl,\n })\n );\n\n if (!isNullOrUndefined(searchHub)) {\n engine.dispatch(setSearchHub(searchHub));\n }\n\n return {\n ...engine,\n\n get state() {\n return engine.state;\n },\n };\n}\n\nfunction validateConfiguration(\n configuration: CaseAssistEngineConfiguration,\n logger: Logger\n) {\n try {\n caseAssistEngineConfigurationSchema.validate(configuration);\n } catch (error) {\n logger.error(error as Error, 'Case Assist engine configuration error');\n\n throw error;\n }\n}\n\nfunction createCaseAssistAPIClient(\n configuration: CaseAssistEngineConfiguration,\n logger: Logger\n) {\n return new CaseAssistAPIClient({\n logger,\n preprocessRequest: configuration.preprocessRequest || NoopPreprocessRequest,\n });\n}\n", "/**\n * @license\n *\n * Copyright 2025 Coveo Solutions Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// src/schema.ts\nfunction buildSchemaValidationError(errors, context) {\n const message = `\n The following properties are invalid:\n\n ${errors.join(\"\\n\t\")}\n \n ${context}\n `;\n return new SchemaValidationError(message);\n}\nvar SchemaValidationError = class extends Error {\n constructor(message) {\n super(message);\n this.name = \"SchemaValidationError\";\n }\n};\nvar Schema = class {\n constructor(definition) {\n this.definition = definition;\n }\n validate(values = {}, message = \"\") {\n const mergedValues = {\n ...this.default,\n ...values\n };\n const errors = [];\n for (const property in this.definition) {\n const error = this.definition[property].validate(mergedValues[property]);\n error && errors.push(`${property}: ${error}`);\n }\n if (errors.length) {\n throw buildSchemaValidationError(errors, message);\n }\n return mergedValues;\n }\n get default() {\n const defaultValues = {};\n for (const property in this.definition) {\n const defaultValue = this.definition[property].default;\n if (defaultValue !== void 0) {\n defaultValues[property] = defaultValue;\n }\n }\n return defaultValues;\n }\n};\n\n// src/values/value.ts\nvar Value = class {\n constructor(baseConfig = {}) {\n this.baseConfig = baseConfig;\n }\n validate(value) {\n if (this.baseConfig.required && isNullOrUndefined(value)) {\n return \"value is required.\";\n }\n return null;\n }\n get default() {\n return this.baseConfig.default instanceof Function ? this.baseConfig.default() : this.baseConfig.default;\n }\n get required() {\n return this.baseConfig.required === true;\n }\n};\nfunction isUndefined(value) {\n return value === void 0;\n}\nfunction isNull(value) {\n return value === null;\n}\nfunction isNullOrUndefined(value) {\n return isUndefined(value) || isNull(value);\n}\n\n// src/values/boolean-value.ts\nvar BooleanValue = class {\n value;\n constructor(config = {}) {\n this.value = new Value(config);\n }\n validate(value) {\n const valueValidation = this.value.validate(value);\n if (valueValidation) {\n return valueValidation;\n }\n if (!isBooleanOrUndefined(value)) {\n return \"value is not a boolean.\";\n }\n return null;\n }\n get default() {\n return this.value.default;\n }\n get required() {\n return this.value.required;\n }\n};\nfunction isBooleanOrUndefined(value) {\n return isUndefined(value) || isBoolean(value);\n}\nfunction isBoolean(value) {\n return typeof value === \"boolean\";\n}\n\n// src/values/number-value.ts\nvar NumberValue = class {\n constructor(config = {}) {\n this.config = config;\n this.value = new Value(config);\n }\n value;\n validate(value) {\n const valueValidation = this.value.validate(value);\n if (valueValidation) {\n return valueValidation;\n }\n if (!isNumberOrUndefined(value)) {\n return \"value is not a number.\";\n }\n if (value < this.config.min) {\n return `minimum value of ${this.config.min} not respected.`;\n }\n if (value > this.config.max) {\n return `maximum value of ${this.config.max} not respected.`;\n }\n return null;\n }\n get default() {\n return this.value.default;\n }\n get required() {\n return this.value.required;\n }\n};\nfunction isNumberOrUndefined(value) {\n return isUndefined(value) || isNumber(value);\n}\nfunction isNumber(value) {\n return typeof value === \"number\" && !Number.isNaN(value);\n}\n\n// src/values/string-value.ts\nvar ISODateStringRegex = /^\\d{4}(-\\d\\d(-\\d\\d(T\\d\\d:\\d\\d(:\\d\\d)?(\\.\\d+)?(([+-]\\d\\d:\\d\\d)|Z)?)?)?)?$/i;\nvar StringValue = class {\n value;\n config;\n constructor(config = {}) {\n this.config = {\n emptyAllowed: true,\n url: false,\n ...config\n };\n this.value = new Value(this.config);\n }\n validate(value) {\n const { emptyAllowed, url, regex, constrainTo, ISODate } = this.config;\n const valueValidation = this.value.validate(value);\n if (valueValidation) {\n return valueValidation;\n }\n if (isUndefined(value)) {\n return null;\n }\n if (!isString(value)) {\n return \"value is not a string.\";\n }\n if (!emptyAllowed && !value.length) {\n return \"value is an empty string.\";\n }\n if (url) {\n try {\n new URL(value);\n } catch (_) {\n return \"value is not a valid URL.\";\n }\n }\n if (regex && !regex.test(value)) {\n return `value did not match provided regex ${regex}`;\n }\n if (constrainTo && !constrainTo.includes(value)) {\n const values = constrainTo.join(\", \");\n return `value should be one of: ${values}.`;\n }\n if (ISODate && !(ISODateStringRegex.test(value) && new Date(value).toString() !== \"Invalid Date\")) {\n return \"value is not a valid ISO8601 date string\";\n }\n return null;\n }\n get default() {\n return this.value.default;\n }\n get required() {\n return this.value.required;\n }\n};\nfunction isString(value) {\n return Object.prototype.toString.call(value) === \"[object String]\";\n}\n\n// src/values/complex-value.ts\nvar RecordValue = class {\n config;\n constructor(config = {}) {\n this.config = {\n options: { required: false },\n values: {},\n ...config\n };\n }\n validate(input) {\n if (isUndefined(input)) {\n return this.config.options.required ? \"value is required and is currently undefined\" : null;\n }\n if (!isRecord(input)) {\n return \"value is not an object\";\n }\n for (const [k, v] of Object.entries(this.config.values)) {\n if (v.required && isNullOrUndefined(input[k])) {\n return `value does not contain ${k}`;\n }\n }\n let out = \"\";\n for (const [key, validator] of Object.entries(this.config.values)) {\n const value = input[key];\n const invalidValue = validator.validate(value);\n if (invalidValue !== null) {\n out += ` ${invalidValue}`;\n }\n }\n return out === \"\" ? null : out;\n }\n get default() {\n return void 0;\n }\n get required() {\n return !!this.config.options.required;\n }\n};\nfunction isRecord(value) {\n return value !== void 0 && typeof value === \"object\";\n}\nvar ArrayValue = class {\n constructor(config = {}) {\n this.config = config;\n this.value = new Value(this.config);\n }\n value;\n validate(input) {\n if (!isNullOrUndefined(input) && !Array.isArray(input)) {\n return \"value is not an array\";\n }\n const invalid = this.value.validate(input);\n if (invalid !== null) {\n return invalid;\n }\n if (isNullOrUndefined(input)) {\n return null;\n }\n if (this.config.max !== void 0 && input.length > this.config.max) {\n return `value contains more than ${this.config.max}`;\n }\n if (this.config.min !== void 0 && input.length < this.config.min) {\n return `value contains less than ${this.config.min}`;\n }\n if (this.config.each !== void 0) {\n let out = \"\";\n input.forEach((el) => {\n if (this.config.each.required && isNullOrUndefined(el)) {\n out = `value is null or undefined: ${input.join(\",\")}`;\n }\n const isInvalid = this.validatePrimitiveValue(el, this.config.each);\n if (isInvalid !== null) {\n out += ` ${isInvalid}`;\n }\n });\n return out === \"\" ? null : out;\n }\n return null;\n }\n validatePrimitiveValue(v, validator) {\n if (isBoolean(v)) {\n return validator.validate(v);\n } else if (isString(v)) {\n return validator.validate(v);\n } else if (isNumber(v)) {\n return validator.validate(v);\n } else if (isRecord(v)) {\n return validator.validate(v);\n }\n return \"value is not a primitive value\";\n }\n get default() {\n return void 0;\n }\n get required() {\n return this.value.required;\n }\n};\nfunction isArray(value) {\n return Array.isArray(value);\n}\n\n// src/values/enum-value.ts\nvar EnumValue = class {\n constructor(config) {\n this.config = config;\n this.value = new Value(config);\n }\n value;\n validate(value) {\n const invalid = this.value.validate(value);\n if (invalid !== null) {\n return invalid;\n }\n if (isUndefined(value)) {\n return null;\n }\n const valueInEnum = Object.values(this.config.enum).find(\n (enumValue) => enumValue === value\n );\n if (!valueInEnum) {\n return \"value is not in enum.\";\n }\n return null;\n }\n get default() {\n return this.value.default;\n }\n get required() {\n return this.value.required;\n }\n};\nexport {\n ArrayValue,\n BooleanValue,\n EnumValue,\n NumberValue,\n RecordValue,\n Schema,\n SchemaValidationError,\n StringValue,\n Value,\n isArray,\n isBoolean,\n isBooleanOrUndefined,\n isNull,\n isNullOrUndefined,\n isNumber,\n isNumberOrUndefined,\n isRecord,\n isString,\n isUndefined\n};\n", "import type {AnalyticsClientOrigin} from 'coveo.analytics/dist/definitions/client/analyticsRequestClient.js';\nimport type {CommerceApiMethod} from './commerce/commerce-metadata.js';\nimport type {SearchApiMethod, SearchOrigin} from './search/search-metadata.js';\n\nexport interface PlatformRequestOptions extends RequestInit {\n url: string;\n}\n\nexport type PlatformClientOrigin =\n | AnalyticsClientOrigin\n | 'searchApiFetch'\n | 'insightApiFetch'\n | 'caseAssistApiFetch'\n | 'commerceApiFetch';\n\nexport interface RequestMetadata {\n /**\n * Method called on the client.\n */\n method: SearchApiMethod | CommerceApiMethod;\n /**\n * Origin of the client, helps differentiate in between features using the same method.\n */\n origin?: SearchOrigin;\n}\n\nexport type PreprocessRequest = (\n /**\n * The HTTP request sent to the Platform.\n */\n request: PlatformRequestOptions,\n /**\n * Origin of the request.\n */\n clientOrigin: PlatformClientOrigin,\n /**\n * Optional metadata provided for the request.\n */\n metadata?: RequestMetadata\n) => PlatformRequestOptions | Promise<PlatformRequestOptions>;\n\nexport const NoopPreprocessRequest: PreprocessRequest = (request) => request;\n", "import type {AsyncThunkOptions} from '../../../app/async-thunk-options.js';\nimport type {ClientThunkExtraArguments} from '../../../app/thunk-extra-arguments.js';\nimport type {CaseAssistAppState} from '../../../state/case-assist-app-state.js';\nimport {PlatformClient} from '../../platform-client.js';\nimport {\n getHtml,\n type HtmlAPIClientOptions,\n} from '../../search/html/html-api-client.js';\nimport type {HtmlRequest} from '../../search/html/html-request.js';\nimport {buildAPIResponseFromErrorOrThrow} from '../../search/search-api-error-response.js';\nimport {\n buildGetCaseClassificationsRequest,\n type GetCaseClassificationsRequest,\n} from './get-case-classifications/get-case-classifications-request.js';\nimport type {GetCaseClassificationsResponse} from './get-case-classifications/get-case-classifications-response.js';\nimport {\n buildGetDocumentSuggestionsRequest,\n type GetDocumentSuggestionsRequest,\n} from './get-document-suggestions/get-document-suggestions-request.js';\nimport type {GetDocumentSuggestionsResponse} from './get-document-suggestions/get-document-suggestions-response.js';\n\n/**\n * Initialization options for the `CaseAssistAPIClient`.\n */\nexport interface CaseAssistAPIClientOptions extends HtmlAPIClientOptions {}\n\nexport interface AsyncThunkCaseAssistOptions<\n T extends Partial<CaseAssistAppState>,\n> extends AsyncThunkOptions<T, ClientThunkExtraArguments<CaseAssistAPIClient>> {\n rejectValue: CaseAssistAPIErrorStatusResponse;\n}\n\n/**\n * Defines a Case Assist API response. It can represent an error or a successful response.\n */\ntype CaseAssistAPIResponse<TSuccessContent> =\n | CaseAssistAPISuccessResponse<TSuccessContent>\n | CaseAssistAPIErrorResponse;\n\n/**\n * Defines a Case Assist API successful response.\n */\ninterface CaseAssistAPISuccessResponse<TContent> {\n success: TContent;\n}\n\n/**\n * Defines the content of a Case Assist API error response.\n */\nexport interface CaseAssistAPIErrorStatusResponse {\n statusCode: number;\n message: string;\n type: string;\n ignored?: boolean;\n}\n\n/**\n * Defines a Case Assist API error response.\n */\ninterface CaseAssistAPIErrorResponse {\n error: CaseAssistAPIErrorStatusResponse;\n}\n\n/**\n * The client to use to interface with the Case Assist API.\n */\nexport class CaseAssistAPIClient {\n constructor(private options: CaseAssistAPIClientOptions) {}\n\n /**\n * Retrieves the case classifications from the API.\n *\n * See https://platform.cloud.coveo.com/docs?urls.primaryName=Customer%20Service#/Suggestions/postClassify\n *\n * @param req - The request parameters.\n * @returns The case classifications grouped by fields for the given case information.\n */\n async getCaseClassifications(\n req: GetCaseClassificationsRequest\n ): Promise<CaseAssistAPIResponse<GetCaseClassificationsResponse>> {\n const response = await PlatformClient.call({\n ...buildGetCaseClassificationsRequest(req),\n ...this.options,\n });\n\n if (response instanceof Error) {\n return buildAPIResponseFromErrorOrThrow(response);\n }\n\n const body = await response.json();\n return response.ok\n ? {success: body as GetCaseClassificationsResponse}\n : {error: body as CaseAssistAPIErrorStatusResponse};\n }\n\n /**\n * Retrieves the document suggestions from the API.\n *\n * See https://platform.cloud.coveo.com/docs?urls.primaryName=Customer%20Service#/Suggestions/getSuggestDocument\n *\n * @param req - The request parameters.\n * @returns The document suggestions for the given case information and context.\n */\n async getDocumentSuggestions(\n req: GetDocumentSuggestionsRequest\n ): Promise<CaseAssistAPIResponse<GetDocumentSuggestionsResponse>> {\n const response = await PlatformClient.call({\n ...buildGetDocumentSuggestionsRequest(req),\n ...this.options,\n });\n\n if (response instanceof Error) {\n return buildAPIResponseFromErrorOrThrow(response);\n }\n\n const body = await response.json();\n return response.ok\n ? {\n success: body as GetDocumentSuggestionsResponse,\n }\n : {error: body as CaseAssistAPIErrorStatusResponse};\n }\n\n async html(req: HtmlRequest) {\n return getHtml(req, this.options);\n }\n}\n", "import type {Logger} from 'pino';\nimport {URLPath} from '../../../utils/url-utils.js';\nimport {pickNonBaseParams, unwrapError} from '../../api-client-utils.js';\nimport {PlatformClient} from '../../platform-client.js';\nimport type {\n PreprocessRequest,\n RequestMetadata,\n} from '../../preprocess-request.js';\nimport {findEncoding} from '../encoding-finder.js';\nimport type {SearchAPIErrorWithStatusCode} from '../search-api-error-response.js';\nimport {baseSearchRequest} from '../search-api-params.js';\nimport type {HtmlRequest} from './html-request.js';\n\nexport interface HtmlApiClient {\n html: (req: HtmlRequest) => Promise<\n | {\n success: string;\n error?: undefined;\n }\n | {\n error: SearchAPIErrorWithStatusCode;\n success?: undefined;\n }\n >;\n}\n\nexport interface HtmlAPIClientOptions {\n logger: Logger;\n preprocessRequest: PreprocessRequest;\n requestMetadata?: RequestMetadata;\n}\n\nexport const buildContentURL = (req: HtmlRequest, path: string) => {\n const url = new URLPath(`${req.url}${path}`);\n url.addParam('access_token', req.accessToken);\n url.addParam('organizationId', req.organizationId);\n url.addParam('uniqueId', req.uniqueId);\n if (req.authentication) {\n url.addParam('authentication', req.authentication);\n }\n if (req.q !== undefined) {\n url.addParam('q', req.q);\n }\n if (req.enableNavigation !== undefined) {\n url.addParam('enableNavigation', `${req.enableNavigation}`);\n }\n if (req.requestedOutputSize !== undefined) {\n url.addParam('requestedOutputSize', `${req.requestedOutputSize}`);\n }\n return url.href;\n};\n\nexport const getHtml = async (\n req: HtmlRequest,\n options: HtmlAPIClientOptions\n) => {\n const response = await PlatformClient.call({\n ...baseSearchRequest(\n req,\n 'POST',\n 'application/x-www-form-urlencoded',\n '/html'\n ),\n requestParams: pickNonBaseParams(req),\n requestMetadata: {method: 'html'},\n ...options,\n });\n\n if (response instanceof Error) {\n throw response;\n }\n\n const encoding = findEncoding(response);\n const buffer = await response.arrayBuffer();\n const decoder = new TextDecoder(encoding);\n const body = decoder.decode(buffer);\n\n if (isSuccessHtmlResponse(body)) {\n return {success: body};\n }\n\n return {error: unwrapError({response, body})};\n};\n\nfunction isSuccessHtmlResponse(body: unknown): body is string {\n return typeof body === 'string';\n}\n", "export class URLPath {\n private _basePath: string;\n private _params: Record<string, string> = {};\n\n constructor(basePath: string) {\n this._basePath = basePath;\n }\n\n public addParam(name: string, value: string) {\n this._params = {\n ...this.params,\n [name]: value,\n };\n }\n\n get basePath() {\n return this._basePath;\n }\n\n get params() {\n return this._params;\n }\n\n get hasParams() {\n return Object.entries(this._params).length;\n }\n\n get href() {\n return this.hasParams\n ? `${this.basePath}?${Object.entries(this.params)\n .map(([key, value]) => `${key}=${encodeURIComponent(value)}`)\n .join('&')}`\n : this.basePath;\n }\n}\n\ntype PlatformCombination =\n | {env: 'dev'; region: 'us' | 'eu'}\n | {env: 'stg'; region: 'us'}\n | {env: 'hipaa'; region: 'us'}\n | {env: 'prod'; region: 'us' | 'eu' | 'au'};\n\nexport type PlatformEnvironment = PlatformCombination['env'];\n", "import type {PlatformResponse} from './platform-client.js';\nimport type {BaseParam} from './platform-service-params.js';\nimport type {AllSearchAPIResponse} from './search/search-api-client.js';\nimport type {\n SearchAPIErrorWithExceptionInBody,\n SearchAPIErrorWithStatusCode,\n} from './search/search-api-error-response.js';\nimport type {AuthenticationParam} from './search/search-api-params.js';\n\nexport function pickNonBaseParams<\n Params extends BaseParam & AuthenticationParam,\n>(req: Params) {\n const {\n url: _url,\n accessToken: _accessToken,\n organizationId: _organizationId,\n authentication: _authentication,\n ...nonBase\n } = req;\n return nonBase;\n}\n\nexport const unwrapError = (\n payload: PlatformResponse<AllSearchAPIResponse>\n): SearchAPIErrorWithStatusCode => {\n const {response} = payload;\n\n if (response.body) {\n return unwrapSearchApiError(payload);\n }\n\n return unwrapClientError(response);\n};\n\nconst unwrapSearchApiError = (\n payload: PlatformResponse<AllSearchAPIResponse>\n) => {\n if (isSearchAPIException(payload)) {\n return unwrapErrorByException(payload);\n }\n\n if (isSearchAPIErrorWithStatusCode(payload)) {\n return payload.body;\n }\n\n return {message: 'unknown', statusCode: 0, type: 'unknown'};\n};\n\nconst unwrapClientError = (response: Response) => {\n // Transform an error to an object https://stackoverflow.com/a/26199752\n const body = JSON.parse(\n JSON.stringify(response, Object.getOwnPropertyNames(response))\n ) as Error;\n\n return {\n ...body,\n message: `Client side error: ${body.message || ''}`,\n statusCode: 400,\n type: 'ClientError',\n };\n};\n\nfunction isSearchAPIErrorWithStatusCode(\n r: PlatformResponse<AllSearchAPIResponse>\n): r is PlatformResponse<SearchAPIErrorWithStatusCode> {\n return (\n (r as PlatformResponse<SearchAPIErrorWithStatusCode>).body.statusCode !==\n undefined\n );\n}\n\nfunction isSearchAPIException(\n r: PlatformResponse<AllSearchAPIResponse>\n): r is PlatformResponse<SearchAPIErrorWithExceptionInBody> {\n return (\n (r as PlatformResponse<SearchAPIErrorWithExceptionInBody>).body\n .exception !== undefined\n );\n}\n\nconst unwrapErrorByException = (\n res: PlatformResponse<SearchAPIErrorWithExceptionInBody>\n): SearchAPIErrorWithStatusCode => ({\n message: res.body.exception.code,\n statusCode: res.response.status,\n type: res.body.exception.code,\n});\n", "export function findEncoding(response: Response) {\n const contentType = response.headers.get('content-type') || '';\n const charset =\n contentType.split(';').find((part) => part.indexOf('charset=') !== -1) ||\n '';\n\n return charset.split('=')[1] || 'UTF-8';\n}\n", "import type {FacetOptions} from '../../features/facet-options/facet-options.js';\nimport type {AutomaticFacetRequest} from '../../features/facets/automatic-facet-set/interfaces/request.js';\nimport type {AnyFacetRequest} from '../../features/facets/generic/interfaces/generic-facet-request.js';\nimport type {GeneratedContentFormat} from '../../features/generated-answer/generated-response-format.js';\nimport {URLPath} from '../../utils/url-utils.js';\nimport type {HistoryElement} from '../analytics/coveo.analytics/history-store.js';\nimport type {\n HTTPContentType,\n HttpMethods,\n PlatformClientCallOptions,\n} from '../platform-client.js';\nimport type {BaseParam} from '../platform-service-params.js';\n\nexport interface QueryParam {\n q?: string;\n}\n\nexport interface PipelineParam {\n pipeline?: string;\n}\n\nexport interface SearchHubParam {\n searchHub?: string;\n}\n\nexport interface AdvancedQueryParam {\n aq?: string;\n}\n\nexport interface ConstantQueryParam {\n cq?: string;\n}\n\nexport interface LargeQueryParam {\n lq?: string;\n}\n\nexport interface DisjunctionQueryParam {\n dq?: string;\n}\n\nexport interface SortCriteriaParam {\n sortCriteria?: string;\n}\n\nexport interface FirstResultParam {\n firstResult?: number;\n}\n\nexport interface FacetsParam {\n facets?: AnyFacetRequest[];\n}\n\nexport interface EnableDidYouMeanParam {\n enableDidYouMean?: boolean;\n}\n\nexport interface QueryCorrectionParam {\n queryCorrection?: {\n enabled?: boolean;\n options?: {automaticallyCorrect?: 'never' | 'whenNoResults'};\n };\n}\n\nexport interface EnableQuerySyntaxParam {\n enableQuerySyntax?: boolean;\n}\n\nexport interface FieldsToIncludeParam {\n fieldsToInclude?: string[];\n}\n\nexport interface FacetOptionsParam {\n facetOptions?: FacetOptions;\n}\n\nexport interface TabParam {\n tab: string;\n}\n\nexport interface ReferrerParam {\n referrer: string | null;\n}\n\nexport interface RecommendationParam {\n recommendation: string;\n}\n\nexport interface ActionsHistoryParam {\n actionsHistory?: HistoryElement[];\n}\n\nexport interface TimezoneParam {\n timezone: string;\n}\n\nexport interface AnalyticsParam {\n analytics?: {\n actionCause?: string;\n customData?: object;\n clientId: string;\n deviceId?: string;\n pageId?: string;\n clientTimestamp: string;\n documentReferrer: string | null;\n originContext: string;\n userDisplayName?: string;\n documentLocation?: string | null;\n trackingId?: string;\n capture?: boolean;\n source?: string[];\n };\n}\n\nexport interface ExcerptLength {\n excerptLength?: number;\n}\n\nexport interface AuthenticationParam {\n authentication?: string;\n}\nexport interface AutomaticFacetsParams {\n generateAutomaticFacets?: {\n desiredCount: number;\n numberOfValues?: number;\n currentFacets?: AutomaticFacetRequest[];\n };\n}\n\nexport interface PipelineRuleParams {\n pipelineRuleParameters?: PipelineRuleParameters;\n}\n\ntype PipelineRuleParameters = {\n mlGenerativeQuestionAnswering?: GenQAParameters;\n};\n\ntype GenQAParameters = {\n responseFormat: ResponseFormatParameters;\n citationsFieldToInclude: string[];\n};\n\ntype ResponseFormatParameters = {\n contentFormat?: GeneratedContentFormat[];\n};\n\nexport const baseSearchRequest = (\n req: BaseParam & AuthenticationParam,\n method: HttpMethods,\n contentType: HTTPContentType,\n path: string\n): Pick<\n PlatformClientCallOptions,\n 'accessToken' | 'method' | 'contentType' | 'url' | 'origin'\n> => {\n const url = new URLPath(`${req.url}${path}`);\n\n url.addParam('organizationId', req.organizationId);\n\n if (req.authentication) {\n url.addParam('authentication', req.authentication);\n }\n return {\n accessToken: req.accessToken,\n method,\n contentType,\n url: url.href,\n origin: 'searchApiFetch',\n };\n};\n\nexport const getOrganizationIdQueryParam = (req: BaseParam) =>\n `organizationId=${req.organizationId}`;\n\nexport const getAuthenticationQueryParam = (req: AuthenticationParam) =>\n `authentication=${encodeURIComponent(req.authentication!)}`;\n", "import {DisconnectedError} from '../../utils/errors.js';\nimport type {QueryException} from './search/query-exception.js';\n\nexport interface SearchAPIErrorWithStatusCode {\n statusCode: number;\n message: string;\n type: string;\n ignored?: boolean;\n}\n\nexport interface SearchAPIErrorWithExceptionInBody {\n exception: QueryException;\n}\n\nfunction buildDisconnectedError(\n error: DisconnectedError\n): SearchAPIErrorWithStatusCode {\n return {\n statusCode: error.statusCode,\n type: error.name,\n message: error.message,\n };\n}\n\nfunction buildIgnoredAbortedError(\n error: DOMException\n): SearchAPIErrorWithStatusCode {\n return {\n statusCode: error.code,\n type: error.name,\n message: error.message,\n ignored: true,\n };\n}\n\nexport function buildAPIResponseFromErrorOrThrow(\n error: Error | DOMException,\n disableAbortWarning?: boolean\n): {\n error: SearchAPIErrorWithStatusCode;\n} {\n if (disableAbortWarning && error.name === 'AbortError') {\n return {\n error: buildIgnoredAbortedError(error as DOMException),\n };\n }\n if (error instanceof DisconnectedError) {\n return {error: buildDisconnectedError(error)};\n }\n throw error;\n}\n", "import type {\n BaseParam,\n ClientIDParam,\n ContextParam,\n DebugParam,\n LocaleParam,\n} from '../../../platform-service-params.js';\nimport {\n baseCaseAssistRequest,\n type CaseAssistIdParam,\n type FieldsParam,\n prepareSuggestionRequestFields,\n} from '../case-assist-params.js';\n\nexport type GetCaseClassificationsRequest = BaseParam &\n CaseAssistIdParam &\n ClientIDParam &\n LocaleParam &\n FieldsParam &\n ContextParam &\n DebugParam;\n\nexport const buildGetCaseClassificationsRequest = (\n req: GetCaseClassificationsRequest\n) => {\n const queryStringArguments: Record<string, string> = req.debug\n ? {debug: '1'}\n : {};\n\n return {\n ...baseCaseAssistRequest(\n req,\n 'POST',\n 'application/json',\n '/classify',\n queryStringArguments\n ),\n requestParams: prepareRequestParams(req),\n };\n};\n\nconst prepareRequestParams = (req: GetCaseClassificationsRequest) => ({\n clientId: req.clientId,\n locale: req.locale,\n fields: prepareSuggestionRequestFields(req.fields),\n});\n", "import type {\n HTTPContentType,\n HttpMethods,\n PlatformClientCallOptions,\n} from '../../platform-client.js';\nimport type {BaseParam} from '../../platform-service-params.js';\n\nexport interface CaseAssistIdParam {\n caseAssistId: string;\n}\n\ntype CaseFields = {\n [fieldName: string]: {\n value: string;\n };\n};\n\nexport interface FieldsParam {\n fields: CaseFields;\n}\n\nexport type CaseAssistParam = BaseParam & CaseAssistIdParam;\n\n/**\n * Builds a base request for calling the Case Assist API.\n *\n * @param req - The Case Assist request parameters.\n * @param method - The HTTP method used to issue the request.\n * @param contentType - The request content type.\n * @param path - The request path, relative to the Case Assist path.\n * @param queryStringArguments - The arguments to pass in the query string.\n * @returns The built request information.\n */\nexport const baseCaseAssistRequest = (\n req: CaseAssistParam,\n method: HttpMethods,\n contentType: HTTPContentType,\n path: string,\n queryStringArguments: Record<string, string> = {}\n): Pick<\n PlatformClientCallOptions,\n 'accessToken' | 'method' | 'contentType' | 'url' | 'origin'\n> => {\n validateCaseAssistRequestParams(req);\n\n const baseUrl = `${req.url}/rest/organizations/${req.organizationId}/caseassists/${req.caseAssistId}${path}`;\n const queryString = buildQueryString(queryStringArguments);\n const effectiveUrl = queryString ? `${baseUrl}?${queryString}` : baseUrl;\n\n return {\n accessToken: req.accessToken,\n method,\n contentType,\n url: effectiveUrl,\n origin: 'caseAssistApiFetch',\n };\n};\n\nexport const prepareSuggestionRequestFields = (\n fields: CaseFields\n): CaseFields =>\n Object.keys(fields)\n .filter((fieldName) => fields[fieldName].value !== '')\n .reduce((obj: CaseFields, fieldName) => {\n obj[fieldName] = fields[fieldName];\n return obj;\n }, {});\n\nexport const prepareContextFromFields = (\n fields: CaseFields\n): Record<string, string | string[]> =>\n Object.keys(fields)\n .filter((fieldName) => fields[fieldName].value !== '')\n .reduce(\n (obj: Record<string, string | string[]>, fieldName) => {\n obj[fieldName] = fields[fieldName].value;\n return obj;\n },\n {} as Record<string, string | string[]>\n );\n\nconst validateCaseAssistRequestParams = (req: CaseAssistParam) => {\n if (!req.url) {\n throw new Error(\"The 'url' attribute must contain a valid platform URL.\");\n }\n if (!req.organizationId) {\n throw new Error(\n \"The 'organizationId' attribute must contain a valid organization ID.\"\n );\n }\n if (!req.accessToken) {\n throw new Error(\n \"The 'accessToken' attribute must contain a valid platform access token.\"\n );\n }\n if (!req.caseAssistId) {\n throw new Error(\n \"The 'caseAssistId' attribute must contain a valid Case Assist configuration ID.\"\n );\n }\n};\n\nconst buildQueryString = (args: Record<string, string>): string => {\n return Object.keys(args)\n .map((argName) => `${argName}=${encodeURIComponent(args[argName])}`)\n .join('&');\n};\n", "import type {\n BaseParam,\n ClientIDParam,\n ContextParam,\n DebugParam,\n LocaleParam,\n NumberOfResultsParam,\n} from '../../../platform-service-params.js';\nimport type {AnalyticsParam} from '../../../search/search-api-params.js';\nimport {\n baseCaseAssistRequest,\n type CaseAssistIdParam,\n type FieldsParam,\n prepareSuggestionRequestFields,\n} from '../case-assist-params.js';\n\nexport type GetDocumentSuggestionsRequest = BaseParam &\n CaseAssistIdParam &\n ClientIDParam &\n LocaleParam &\n FieldsParam &\n ContextParam &\n NumberOfResultsParam &\n DebugParam &\n AnalyticsParam;\n\nexport const buildGetDocumentSuggestionsRequest = (\n req: GetDocumentSuggestionsRequest\n) => {\n const queryStringArguments: Record<string, string> = {};\n if (req.debug) {\n queryStringArguments.debug = '1';\n }\n if (req.numberOfResults) {\n queryStringArguments.numberOfResults = req.numberOfResults.toString();\n }\n\n return {\n ...baseCaseAssistRequest(\n req,\n 'POST',\n 'application/json',\n '/documents/suggest',\n queryStringArguments\n ),\n requestParams: prepareRequestParams(req),\n };\n};\n\nconst prepareRequestParams = (req: GetDocumentSuggestionsRequest) => ({\n clientId: req.clientId,\n locale: req.locale,\n fields: prepareSuggestionRequestFields(req.fields),\n context: req.context,\n analytics: req.analytics,\n});\n", "import {StringValue} from '@coveo/bueno';\nimport {createAction} from '@reduxjs/toolkit';\nimport {\n nonEmptyString,\n requiredNonEmptyString,\n validatePayload,\n} from '../../utils/validate-payload.js';\n\ninterface SetCaseAssistConfigurationActionCreatorPayload {\n /**\n * The unique identifier of the target case assist configuration. See [Retrieving a Case Assist ID](https://docs.coveo.com/en/3328/service/manage-case-assist-configurations#retrieving-a-case-assist-id).\n */\n caseAssistId: string;\n /**\n * The locale of the current user. Must comply with IETF\u2019s BCP 47 definition: https://www.rfc-editor.org/rfc/bcp/bcp47.txt.\n */\n locale?: string;\n /**\n * The base URL to use to proxy Coveo case assist requests (e.g., `https://example.com/search`).\n *\n * This is an advanced option that you only set if you proxy Coveo case assist through your own\n * server. In most cases, you should not set this option.\n *\n * See [Headless proxy: Case Assist](https://docs.coveo.com/en/headless/latest/usage/proxy#case-assist).\n */\n proxyBaseUrl?: string;\n}\n\nexport const setCaseAssistConfiguration = createAction(\n 'caseAssistConfiguration/set',\n (payload: SetCaseAssistConfigurationActionCreatorPayload) =>\n validatePayload(payload, {\n caseAssistId: requiredNonEmptyString,\n locale: nonEmptyString,\n proxyBaseUrl: new StringValue({required: false, url: true}),\n })\n);\n", "/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nexport function formatProdErrorMessage(code: number) {\n return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}", "declare global {\n interface SymbolConstructor {\n readonly observable: symbol;\n }\n}\nconst $$observable = /* #__PURE__ */(() => typeof Symbol === 'function' && Symbol.observable || '@@observable')();\nexport default $$observable;", "/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\n\nconst randomString = () => Math.random().toString(36).substring(7).split('').join('.');\nconst ActionTypes = {\n INIT: `@@redux/INIT${/* #__PURE__ */randomString()}`,\n REPLACE: `@@redux/REPLACE${/* #__PURE__ */randomString()}`,\n PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nexport default ActionTypes;", "/**\n * @param obj The object to inspect.\n * @returns True if the argument appears to be a plain object.\n */\nexport default function isPlainObject(obj: any): obj is object {\n if (typeof obj !== 'object' || obj === null) return false;\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}", "// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nexport function miniKindOf(val: any): string {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n const type = typeof val;\n switch (type) {\n case 'boolean':\n case 'string':\n case 'number':\n case 'symbol':\n case 'function':\n {\n return type;\n }\n }\n if (Array.isArray(val)) return 'array';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n const constructorName = ctorName(val);\n switch (constructorName) {\n case 'Symbol':\n case 'Promise':\n case 'WeakMap':\n case 'WeakSet':\n case 'Map':\n case 'Set':\n return constructorName;\n }\n\n // other\n return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\nfunction ctorName(val: any): string | null {\n return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\nfunction isError(val: any) {\n return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\nfunction isDate(val: any) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\nexport function kindOf(val: any) {\n let typeOfVal: string = typeof val;\n if (process.env.NODE_ENV !== 'production') {\n typeOfVal = miniKindOf(val);\n }\n return typeOfVal;\n}", "import { formatProdErrorMessage as _formatProdErrorMessage13 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage12 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage11 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage10 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage9 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage8 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage7 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage6 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage5 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage4 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport $$observable from './utils/symbol-observable';\nimport { Store, StoreEnhancer, Dispatch, Observer, ListenerCallback, UnknownIfNonSpecific } from './types/store';\nimport { Action } from './types/actions';\nimport { Reducer } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport { kindOf } from './utils/kindOf';\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n }\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = (preloadedState as StoreEnhancer<Ext, StateExt>);\n preloadedState = undefined;\n }\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n }\n return enhancer(createStore)(reducer, (preloadedState as PreloadedState | undefined));\n }\n let currentReducer = reducer;\n let currentState: S | PreloadedState | undefined = (preloadedState as PreloadedState | undefined);\n let currentListeners: Map<number, ListenerCallback> | null = new Map();\n let nextListeners = currentListeners;\n let listenerIdCounter = 0;\n let isDispatching = false;\n\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = new Map();\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener);\n });\n }\n }\n\n /**\n * Reads the state tree managed by the store.\n *\n * @returns The current state tree of your application.\n */\n function getState(): S {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n return (currentState as S);\n }\n\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param listener A callback to be invoked on every dispatch.\n * @returns A function to remove this change listener.\n */\n function subscribe(listener: () => void) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n let isSubscribed = true;\n ensureCanMutateNextListeners();\n const listenerId = listenerIdCounter++;\n nextListeners.set(listenerId, listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n isSubscribed = false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners = null;\n };\n }\n\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n function dispatch(action: A) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n }\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage9(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n if (typeof action.type !== 'string') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage10(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage11(9) : 'Reducers may not dispatch actions.');\n }\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n const listeners = currentListeners = nextListeners;\n listeners.forEach(listener => {\n listener();\n });\n return action;\n }\n\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param nextReducer The reducer for the store to use instead.\n */\n function replaceReducer(nextReducer: Reducer<S, A>): void {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage12(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n }\n currentReducer = ((nextReducer as unknown) as Reducer<S, A, PreloadedState>);\n\n // This action has a similar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n dispatch(({\n type: ActionTypes.REPLACE\n } as A));\n }\n\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n function observable() {\n const outerSubscribe = subscribe;\n return {\n /**\n * The minimal observable subscription method.\n * @param observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe(observer: unknown) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage13(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n }\n function observeState() {\n const observerAsObserver = (observer as Observer<S>);\n if (observerAsObserver.next) {\n observerAsObserver.next(getState());\n }\n }\n observeState();\n const unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe\n };\n },\n [$$observable]() {\n return this;\n }\n };\n }\n\n // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n dispatch(({\n type: ActionTypes.INIT\n } as A));\n const store = (({\n dispatch: (dispatch as Dispatch<A>),\n subscribe,\n getState,\n replaceReducer,\n [$$observable]: observable\n } as unknown) as Store<S, A, StateExt> & Ext);\n return store;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}>(reducer: Reducer<S, A>, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A, PreloadedState>, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext;\nexport function legacy_createStore<S, A extends Action, Ext extends {} = {}, StateExt extends {} = {}, PreloadedState = S>(reducer: Reducer<S, A>, preloadedState?: PreloadedState | StoreEnhancer<Ext, StateExt> | undefined, enhancer?: StoreEnhancer<Ext, StateExt>): Store<S, A, UnknownIfNonSpecific<StateExt>> & Ext {\n return createStore(reducer, (preloadedState as any), enhancer);\n}", "/**\n * Prints a warning in the console if it exists.\n *\n * @param message The warning message.\n */\nexport default function warning(message: string): void {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && typeof console.error === 'function') {\n console.error(message);\n }\n /* eslint-enable no-console */\n try {\n // This error was thrown as a convenience so that if you enable\n // \"break on all exceptions\" in your console,\n // it would pause the execution at this line.\n throw new Error(message);\n } catch (e) {} // eslint-disable-line no-empty\n}", "import { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport { Action } from './types/actions';\nimport { ActionFromReducersMapObject, PreloadedStateShapeFromReducersMapObject, Reducer, StateFromReducersMapObject } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport warning from './utils/warning';\nimport { kindOf } from './utils/kindOf';\nfunction getUnexpectedStateShapeWarningMessage(inputState: object, reducers: {\n [key: string]: Reducer<any, any, any>;\n}, action: Action, unexpectedKeyCache: {\n [key: string]: true;\n}) {\n const reducerKeys = Object.keys(reducers);\n const argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n if (!isPlainObject(inputState)) {\n return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following ` + `keys: \"${reducerKeys.join('\", \"')}\"`;\n }\n const unexpectedKeys = Object.keys(inputState).filter(key => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n unexpectedKeys.forEach(key => {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n if (unexpectedKeys.length > 0) {\n return `Unexpected ${unexpectedKeys.length > 1 ? 'keys' : 'key'} ` + `\"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. ` + `Expected to find one of the known reducer keys instead: ` + `\"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n }\n}\nfunction assertReducerShape(reducers: {\n [key: string]: Reducer<any, any, any>;\n}) {\n Object.keys(reducers).forEach(key => {\n const reducer = reducers[key];\n const initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n if (typeof initialState === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. ` + `If the state passed to the reducer is undefined, you must ` + `explicitly return the initial state. The initial state may ` + `not be undefined. If you don't want to set a value for this reducer, ` + `you can use null instead of undefined.`);\n }\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. ` + `Don't try to handle '${ActionTypes.INIT}' or other actions in \"redux/*\" ` + `namespace. They are considered private. Instead, you must return the ` + `current state for any unknown actions, unless it is undefined, ` + `in which case you must return the initial state, regardless of the ` + `action type. The initial state may not be undefined, but can be null.`);\n }\n });\n}\n\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @template S Combined state object type.\n *\n * @param reducers An object whose values correspond to different reducer\n * functions that need to be combined into one. One handy way to obtain it\n * is to use `import * as reducers` syntax. The reducers may never\n * return undefined for any action. Instead, they should return their\n * initial state if the state passed to them was undefined, and the current\n * state for any unrecognized action.\n *\n * @returns A reducer function that invokes every reducer inside the passed\n * object, and builds a state object with the same shape.\n */\nexport default function combineReducers<M>(reducers: M): M[keyof M] extends Reducer<any, any, any> | undefined ? Reducer<StateFromReducersMapObject<M>, ActionFromReducersMapObject<M>, Partial<PreloadedStateShapeFromReducersMapObject<M>>> : never;\nexport default function combineReducers(reducers: {\n [key: string]: Reducer<any, any, any>;\n}) {\n const reducerKeys = Object.keys(reducers);\n const finalReducers: {\n [key: string]: Reducer<any, any, any>;\n } = {};\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i];\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(`No reducer provided for key \"${key}\"`);\n }\n }\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n const finalReducerKeys = Object.keys(finalReducers);\n\n // This is used to make sure we don't warn about the same\n // keys multiple times.\n let unexpectedKeyCache: {\n [key: string]: true;\n };\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n let shapeAssertionError: unknown;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n return function combination(state: StateFromReducersMapObject<typeof reducers> = {}, action: Action) {\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n if (process.env.NODE_ENV !== 'production') {\n const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n let hasChanged = false;\n const nextState: StateFromReducersMapObject<typeof reducers> = {};\n for (let i = 0; i < finalReducerKeys.length; i++) {\n const key = finalReducerKeys[i];\n const reducer = finalReducers[key];\n const previousStateForKey = state[key];\n const nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === 'undefined') {\n const actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : '(unknown type)'}, the slice reducer for key \"${key}\" returned undefined. ` + `To ignore an action, you must explicitly return the previous state. ` + `If you want this reducer to hold no value, you can return null instead of undefined.`);\n }\n nextState[key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}", "import { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport { Dispatch } from './types/store';\nimport { ActionCreator, ActionCreatorsMapObject, Action } from './types/actions';\nimport { kindOf } from './utils/kindOf';\nfunction bindActionCreator<A extends Action>(actionCreator: ActionCreator<A>, dispatch: Dispatch<A>) {\n return function (this: any, ...args: any[]) {\n return dispatch(actionCreator.apply(this, args));\n };\n}\n\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use `import * as`\n * syntax. You may also pass a single function.\n *\n * @param dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\nexport default function bindActionCreators<A, C extends ActionCreator<A>>(actionCreator: C, dispatch: Dispatch): C;\nexport default function bindActionCreators<A extends ActionCreator<any>, B extends ActionCreator<any>>(actionCreator: A, dispatch: Dispatch): B;\nexport default function bindActionCreators<A, M extends ActionCreatorsMapObject<A>>(actionCreators: M, dispatch: Dispatch): M;\nexport default function bindActionCreators<M extends ActionCreatorsMapObject, N extends ActionCreatorsMapObject>(actionCreators: M, dispatch: Dispatch): N;\nexport default function bindActionCreators(actionCreators: ActionCreator<any> | ActionCreatorsMapObject, dispatch: Dispatch) {\n if (typeof actionCreators === 'function') {\n return bindActionCreator(actionCreators, dispatch);\n }\n if (typeof actionCreators !== 'object' || actionCreators === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. ` + `Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n }\n const boundActionCreators: ActionCreatorsMapObject = {};\n for (const key in actionCreators) {\n const actionCreator = actionCreators[key];\n if (typeof actionCreator === 'function') {\n boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n }\n }\n return boundActionCreators;\n}", "type Func<T extends any[], R> = (...a: T) => R;\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for the\n * resulting composite function.\n *\n * @param funcs The functions to compose.\n * @returns A function obtained by composing the argument functions from right\n * to left. For example, `compose(f, g, h)` is identical to doing\n * `(...args) => f(g(h(...args)))`.\n */\nexport default function compose(): <R>(a: R) => R;\nexport default function compose<F extends Function>(f: F): F;\n\n/* two functions */\nexport default function compose<A, T extends any[], R>(f1: (a: A) => R, f2: Func<T, A>): Func<T, R>;\n\n/* three functions */\nexport default function compose<A, B, T extends any[], R>(f1: (b: B) => R, f2: (a: A) => B, f3: Func<T, A>): Func<T, R>;\n\n/* four functions */\nexport default function compose<A, B, C, T extends any[], R>(f1: (c: C) => R, f2: (b: B) => C, f3: (a: A) => B, f4: Func<T, A>): Func<T, R>;\n\n/* rest */\nexport default function compose<R>(f1: (a: any) => R, ...funcs: Function[]): (...args: any[]) => R;\nexport default function compose<R>(...funcs: Function[]): (...args: any[]) => R;\nexport default function compose(...funcs: Function[]) {\n if (funcs.length === 0) {\n // infer the argument type so it is usable in inference down the line\n return <T,>(arg: T) => arg;\n }\n if (funcs.length === 1) {\n return funcs[0];\n }\n return funcs.reduce((a, b) => (...args: any) => a(b(...args)));\n}", "import { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport compose from './compose';\nimport { Middleware, MiddlewareAPI } from './types/middleware';\nimport { StoreEnhancer, Dispatch } from './types/store';\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param middlewares The middleware chain to be applied.\n * @returns A store enhancer applying the middleware.\n *\n * @template Ext Dispatch signature added by a middleware.\n * @template S The type of the state supported by a middleware.\n */\nexport default function applyMiddleware(): StoreEnhancer;\nexport default function applyMiddleware<Ext1, S>(middleware1: Middleware<Ext1, S, any>): StoreEnhancer<{\n dispatch: Ext1;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>): StoreEnhancer<{\n dispatch: Ext1 & Ext2;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>): StoreEnhancer<{\n dispatch: Ext1 & Ext2 & Ext3;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>, middleware4: Middleware<Ext4, S, any>): StoreEnhancer<{\n dispatch: Ext1 & Ext2 & Ext3 & Ext4;\n}>;\nexport default function applyMiddleware<Ext1, Ext2, Ext3, Ext4, Ext5, S>(middleware1: Middleware<Ext1, S, any>, middleware2: Middleware<Ext2, S, any>, middleware3: Middleware<Ext3, S, any>, middleware4: Middleware<Ext4, S, any>, middleware5: Middleware<Ext5, S, any>): StoreEnhancer<{\n dispatch: Ext1 & Ext2 & Ext3 & Ext4 & Ext5;\n}>;\nexport default function applyMiddleware<Ext, S = any>(...middlewares: Middleware<any, S, any>[]): StoreEnhancer<{\n dispatch: Ext;\n}>;\nexport default function applyMiddleware(...middlewares: Middleware[]): StoreEnhancer<any> {\n return createStore => (reducer, preloadedState) => {\n const store = createStore(reducer, preloadedState);\n let dispatch: Dispatch = () => {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n const middlewareAPI: MiddlewareAPI = {\n getState: store.getState,\n dispatch: (action, ...args) => dispatch(action, ...args)\n };\n const chain = middlewares.map(middleware => middleware(middlewareAPI));\n dispatch = compose<typeof dispatch>(...chain)(store.dispatch);\n return {\n ...store,\n dispatch\n };\n };\n}", "import { Action } from '../types/actions';\nimport isPlainObject from './isPlainObject';\nexport default function isAction(action: unknown): action is Action<string> {\n return isPlainObject(action) && 'type' in action && typeof (action as Record<'type', unknown>).type === 'string';\n}", "// Should be no imports here!\n\n/**\n * The sentinel value returned by producers to replace the draft with undefined.\n */\nexport const NOTHING: unique symbol = Symbol.for(\"immer-nothing\")\n\n/**\n * To let Immer treat your class instances as plain immutable objects\n * (albeit with a custom prototype), you must define either an instance property\n * or a static property on each of your custom classes.\n *\n * Otherwise, your class instance will never be drafted, which means it won't be\n * safe to mutate in a produce callback.\n */\nexport const DRAFTABLE: unique symbol = Symbol.for(\"immer-draftable\")\n\nexport const DRAFT_STATE: unique symbol = Symbol.for(\"immer-state\")\n", "export const errors =\n\tprocess.env.NODE_ENV !== \"production\"\n\t\t? [\n\t\t\t\t// All error codes, starting by 0:\n\t\t\t\tfunction(plugin: string) {\n\t\t\t\t\treturn `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`\n\t\t\t\t},\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`\n\t\t\t\t},\n\t\t\t\t\"This object has been frozen and should not be mutated\",\n\t\t\t\tfunction(data: any) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" +\n\t\t\t\t\t\tdata\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\t\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n\t\t\t\t\"Immer forbids circular references\",\n\t\t\t\t\"The first or second argument to `produce` must be a function\",\n\t\t\t\t\"The third argument to `produce` must be a function or undefined\",\n\t\t\t\t\"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n\t\t\t\t\"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'current' expects a draft, got: ${thing}`\n\t\t\t\t},\n\t\t\t\t\"Object.defineProperty() cannot be used on an Immer draft\",\n\t\t\t\t\"Object.setPrototypeOf() cannot be used on an Immer draft\",\n\t\t\t\t\"Immer only supports deleting array indices\",\n\t\t\t\t\"Immer only supports setting array indices and the 'length' property\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'original' expects a draft, got: ${thing}`\n\t\t\t\t}\n\t\t\t\t// Note: if more errors are added, the errorOffset in Patches.ts should be increased\n\t\t\t\t// See Patches.ts for additional errors\n\t\t ]\n\t\t: []\n\nexport function die(error: number, ...args: any[]): never {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst e = errors[error]\n\t\tconst msg = typeof e === \"function\" ? e.apply(null, args as any) : e\n\t\tthrow new Error(`[Immer] ${msg}`)\n\t}\n\tthrow new Error(\n\t\t`[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n\t)\n}\n", "import {\n\tDRAFT_STATE,\n\tDRAFTABLE,\n\tObjectish,\n\tDrafted,\n\tAnyObject,\n\tAnyMap,\n\tAnySet,\n\tImmerState,\n\tArchType,\n\tdie,\n\tStrictMode\n} from \"../internal\"\n\nexport const getPrototypeOf = Object.getPrototypeOf\n\n/** Returns true if the given value is an Immer draft */\n/*#__PURE__*/\nexport function isDraft(value: any): boolean {\n\treturn !!value && !!value[DRAFT_STATE]\n}\n\n/** Returns true if the given value can be drafted by Immer */\n/*#__PURE__*/\nexport function isDraftable(value: any): boolean {\n\tif (!value) return false\n\treturn (\n\t\tisPlainObject(value) ||\n\t\tArray.isArray(value) ||\n\t\t!!value[DRAFTABLE] ||\n\t\t!!value.constructor?.[DRAFTABLE] ||\n\t\tisMap(value) ||\n\t\tisSet(value)\n\t)\n}\n\nconst objectCtorString = Object.prototype.constructor.toString()\n/*#__PURE__*/\nexport function isPlainObject(value: any): boolean {\n\tif (!value || typeof value !== \"object\") return false\n\tconst proto = getPrototypeOf(value)\n\tif (proto === null) {\n\t\treturn true\n\t}\n\tconst Ctor =\n\t\tObject.hasOwnProperty.call(proto, \"constructor\") && proto.constructor\n\n\tif (Ctor === Object) return true\n\n\treturn (\n\t\ttypeof Ctor == \"function\" &&\n\t\tFunction.toString.call(Ctor) === objectCtorString\n\t)\n}\n\n/** Get the underlying object that is represented by the given draft */\n/*#__PURE__*/\nexport function original<T>(value: T): T | undefined\nexport function original(value: Drafted<any>): any {\n\tif (!isDraft(value)) die(15, value)\n\treturn value[DRAFT_STATE].base_\n}\n\n/**\n * Each iterates a map, set or array.\n * Or, if any other kind of object, all of its own properties.\n * Regardless whether they are enumerable or symbols\n */\nexport function each<T extends Objectish>(\n\tobj: T,\n\titer: (key: string | number, value: any, source: T) => void\n): void\nexport function each(obj: any, iter: any) {\n\tif (getArchtype(obj) === ArchType.Object) {\n\t\tReflect.ownKeys(obj).forEach(key => {\n\t\t\titer(key, obj[key], obj)\n\t\t})\n\t} else {\n\t\tobj.forEach((entry: any, index: any) => iter(index, entry, obj))\n\t}\n}\n\n/*#__PURE__*/\nexport function getArchtype(thing: any): ArchType {\n\tconst state: undefined | ImmerState = thing[DRAFT_STATE]\n\treturn state\n\t\t? state.type_\n\t\t: Array.isArray(thing)\n\t\t? ArchType.Array\n\t\t: isMap(thing)\n\t\t? ArchType.Map\n\t\t: isSet(thing)\n\t\t? ArchType.Set\n\t\t: ArchType.Object\n}\n\n/*#__PURE__*/\nexport function has(thing: any, prop: PropertyKey): boolean {\n\treturn getArchtype(thing) === ArchType.Map\n\t\t? thing.has(prop)\n\t\t: Object.prototype.hasOwnProperty.call(thing, prop)\n}\n\n/*#__PURE__*/\nexport function get(thing: AnyMap | AnyObject, prop: PropertyKey): any {\n\t// @ts-ignore\n\treturn getArchtype(thing) === ArchType.Map ? thing.get(prop) : thing[prop]\n}\n\n/*#__PURE__*/\nexport function set(thing: any, propOrOldValue: PropertyKey, value: any) {\n\tconst t = getArchtype(thing)\n\tif (t === ArchType.Map) thing.set(propOrOldValue, value)\n\telse if (t === ArchType.Set) {\n\t\tthing.add(value)\n\t} else thing[propOrOldValue] = value\n}\n\n/*#__PURE__*/\nexport function is(x: any, y: any): boolean {\n\t// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n\tif (x === y) {\n\t\treturn x !== 0 || 1 / x === 1 / y\n\t} else {\n\t\treturn x !== x && y !== y\n\t}\n}\n\n/*#__PURE__*/\nexport function isMap(target: any): target is AnyMap {\n\treturn target instanceof Map\n}\n\n/*#__PURE__*/\nexport function isSet(target: any): target is AnySet {\n\treturn target instanceof Set\n}\n/*#__PURE__*/\nexport function latest(state: ImmerState): any {\n\treturn state.copy_ || state.base_\n}\n\n/*#__PURE__*/\nexport function shallowCopy(base: any, strict: StrictMode) {\n\tif (isMap(base)) {\n\t\treturn new Map(base)\n\t}\n\tif (isSet(base)) {\n\t\treturn new Set(base)\n\t}\n\tif (Array.isArray(base)) return Array.prototype.slice.call(base)\n\n\tconst isPlain = isPlainObject(base)\n\n\tif (strict === true || (strict === \"class_only\" && !isPlain)) {\n\t\t// Perform a strict copy\n\t\tconst descriptors = Object.getOwnPropertyDescriptors(base)\n\t\tdelete descriptors[DRAFT_STATE as any]\n\t\tlet keys = Reflect.ownKeys(descriptors)\n\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\tconst key: any = keys[i]\n\t\t\tconst desc = descriptors[key]\n\t\t\tif (desc.writable === false) {\n\t\t\t\tdesc.writable = true\n\t\t\t\tdesc.configurable = true\n\t\t\t}\n\t\t\t// like object.assign, we will read any _own_, get/set accessors. This helps in dealing\n\t\t\t// with libraries that trap values, like mobx or vue\n\t\t\t// unlike object.assign, non-enumerables will be copied as well\n\t\t\tif (desc.get || desc.set)\n\t\t\t\tdescriptors[key] = {\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true, // could live with !!desc.set as well here...\n\t\t\t\t\tenumerable: desc.enumerable,\n\t\t\t\t\tvalue: base[key]\n\t\t\t\t}\n\t\t}\n\t\treturn Object.create(getPrototypeOf(base), descriptors)\n\t} else {\n\t\t// perform a sloppy copy\n\t\tconst proto = getPrototypeOf(base)\n\t\tif (proto !== null && isPlain) {\n\t\t\treturn {...base} // assumption: better inner class optimization than the assign below\n\t\t}\n\t\tconst obj = Object.create(proto)\n\t\treturn Object.assign(obj, base)\n\t}\n}\n\n/**\n * Freezes draftable objects. Returns the original object.\n * By default freezes shallowly, but if the second argument is `true` it will freeze recursively.\n *\n * @param obj\n * @param deep\n */\nexport function freeze<T>(obj: T, deep?: boolean): T\nexport function freeze<T>(obj: any, deep: boolean = false): T {\n\tif (isFrozen(obj) || isDraft(obj) || !isDraftable(obj)) return obj\n\tif (getArchtype(obj) > 1 /* Map or Set */) {\n\t\tobj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections as any\n\t}\n\tObject.freeze(obj)\n\tif (deep)\n\t\t// See #590, don't recurse into non-enumerable / Symbol properties when freezing\n\t\t// So use Object.entries (only string-like, enumerables) instead of each()\n\t\tObject.entries(obj).forEach(([key, value]) => freeze(value, true))\n\treturn obj\n}\n\nfunction dontMutateFrozenCollections() {\n\tdie(2)\n}\n\nexport function isFrozen(obj: any): boolean {\n\treturn Object.isFrozen(obj)\n}\n", "import {\n\tImmerState,\n\tPatch,\n\tDrafted,\n\tImmerBaseState,\n\tAnyMap,\n\tAnySet,\n\tArchType,\n\tdie\n} from \"../internal\"\n\n/** Plugin utilities */\nconst plugins: {\n\tPatches?: {\n\t\tgeneratePatches_(\n\t\t\tstate: ImmerState,\n\t\t\tbasePath: PatchPath,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tgenerateReplacementPatches_(\n\t\t\tbase: any,\n\t\t\treplacement: any,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tapplyPatches_<T>(draft: T, patches: readonly Patch[]): T\n\t}\n\tMapSet?: {\n\t\tproxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T\n\t\tproxySet_<T extends AnySet>(target: T, parent?: ImmerState): T\n\t}\n} = {}\n\ntype Plugins = typeof plugins\n\nexport function getPlugin<K extends keyof Plugins>(\n\tpluginKey: K\n): Exclude<Plugins[K], undefined> {\n\tconst plugin = plugins[pluginKey]\n\tif (!plugin) {\n\t\tdie(0, pluginKey)\n\t}\n\t// @ts-ignore\n\treturn plugin\n}\n\nexport function loadPlugin<K extends keyof Plugins>(\n\tpluginKey: K,\n\timplementation: Plugins[K]\n): void {\n\tif (!plugins[pluginKey]) plugins[pluginKey] = implementation\n}\n/** Map / Set plugin */\n\nexport interface MapState extends ImmerBaseState {\n\ttype_: ArchType.Map\n\tcopy_: AnyMap | undefined\n\tassigned_: Map<any, boolean> | undefined\n\tbase_: AnyMap\n\trevoked_: boolean\n\tdraft_: Drafted<AnyMap, MapState>\n}\n\nexport interface SetState extends ImmerBaseState {\n\ttype_: ArchType.Set\n\tcopy_: AnySet | undefined\n\tbase_: AnySet\n\tdrafts_: Map<any, Drafted> // maps the original value to the draft value in the new set\n\trevoked_: boolean\n\tdraft_: Drafted<AnySet, SetState>\n}\n\n/** Patches plugin */\n\nexport type PatchPath = (string | number)[]\n", "import {\n\tPatch,\n\tPatchListener,\n\tDrafted,\n\tImmer,\n\tDRAFT_STATE,\n\tImmerState,\n\tArchType,\n\tgetPlugin\n} from \"../internal\"\n\n/** Each scope represents a `produce` call. */\n\nexport interface ImmerScope {\n\tpatches_?: Patch[]\n\tinversePatches_?: Patch[]\n\tcanAutoFreeze_: boolean\n\tdrafts_: any[]\n\tparent_?: ImmerScope\n\tpatchListener_?: PatchListener\n\timmer_: Immer\n\tunfinalizedDrafts_: number\n}\n\nlet currentScope: ImmerScope | undefined\n\nexport function getCurrentScope() {\n\treturn currentScope!\n}\n\nfunction createScope(\n\tparent_: ImmerScope | undefined,\n\timmer_: Immer\n): ImmerScope {\n\treturn {\n\t\tdrafts_: [],\n\t\tparent_,\n\t\timmer_,\n\t\t// Whenever the modified draft contains a draft from another scope, we\n\t\t// need to prevent auto-freezing so the unowned draft can be finalized.\n\t\tcanAutoFreeze_: true,\n\t\tunfinalizedDrafts_: 0\n\t}\n}\n\nexport function usePatchesInScope(\n\tscope: ImmerScope,\n\tpatchListener?: PatchListener\n) {\n\tif (patchListener) {\n\t\tgetPlugin(\"Patches\") // assert we have the plugin\n\t\tscope.patches_ = []\n\t\tscope.inversePatches_ = []\n\t\tscope.patchListener_ = patchListener\n\t}\n}\n\nexport function revokeScope(scope: ImmerScope) {\n\tleaveScope(scope)\n\tscope.drafts_.forEach(revokeDraft)\n\t// @ts-ignore\n\tscope.drafts_ = null\n}\n\nexport function leaveScope(scope: ImmerScope) {\n\tif (scope === currentScope) {\n\t\tcurrentScope = scope.parent_\n\t}\n}\n\nexport function enterScope(immer: Immer) {\n\treturn (currentScope = createScope(currentScope, immer))\n}\n\nfunction revokeDraft(draft: Drafted) {\n\tconst state: ImmerState = draft[DRAFT_STATE]\n\tif (state.type_ === ArchType.Object || state.type_ === ArchType.Array)\n\t\tstate.revoke_()\n\telse state.revoked_ = true\n}\n", "import {\n\tImmerScope,\n\tDRAFT_STATE,\n\tisDraftable,\n\tNOTHING,\n\tPatchPath,\n\teach,\n\thas,\n\tfreeze,\n\tImmerState,\n\tisDraft,\n\tSetState,\n\tset,\n\tArchType,\n\tgetPlugin,\n\tdie,\n\trevokeScope,\n\tisFrozen\n} from \"../internal\"\n\nexport function processResult(result: any, scope: ImmerScope) {\n\tscope.unfinalizedDrafts_ = scope.drafts_.length\n\tconst baseDraft = scope.drafts_![0]\n\tconst isReplaced = result !== undefined && result !== baseDraft\n\tif (isReplaced) {\n\t\tif (baseDraft[DRAFT_STATE].modified_) {\n\t\t\trevokeScope(scope)\n\t\t\tdie(4)\n\t\t}\n\t\tif (isDraftable(result)) {\n\t\t\t// Finalize the result in case it contains (or is) a subset of the draft.\n\t\t\tresult = finalize(scope, result)\n\t\t\tif (!scope.parent_) maybeFreeze(scope, result)\n\t\t}\n\t\tif (scope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(\n\t\t\t\tbaseDraft[DRAFT_STATE].base_,\n\t\t\t\tresult,\n\t\t\t\tscope.patches_,\n\t\t\t\tscope.inversePatches_!\n\t\t\t)\n\t\t}\n\t} else {\n\t\t// Finalize the base draft.\n\t\tresult = finalize(scope, baseDraft, [])\n\t}\n\trevokeScope(scope)\n\tif (scope.patches_) {\n\t\tscope.patchListener_!(scope.patches_, scope.inversePatches_!)\n\t}\n\treturn result !== NOTHING ? result : undefined\n}\n\nfunction finalize(rootScope: ImmerScope, value: any, path?: PatchPath) {\n\t// Don't recurse in tho recursive data structures\n\tif (isFrozen(value)) return value\n\n\tconst state: ImmerState = value[DRAFT_STATE]\n\t// A plain object, might need freezing, might contain drafts\n\tif (!state) {\n\t\teach(value, (key, childValue) =>\n\t\t\tfinalizeProperty(rootScope, state, value, key, childValue, path)\n\t\t)\n\t\treturn value\n\t}\n\t// Never finalize drafts owned by another scope.\n\tif (state.scope_ !== rootScope) return value\n\t// Unmodified draft, return the (frozen) original\n\tif (!state.modified_) {\n\t\tmaybeFreeze(rootScope, state.base_, true)\n\t\treturn state.base_\n\t}\n\t// Not finalized yet, let's do that now\n\tif (!state.finalized_) {\n\t\tstate.finalized_ = true\n\t\tstate.scope_.unfinalizedDrafts_--\n\t\tconst result = state.copy_\n\t\t// Finalize all children of the copy\n\t\t// For sets we clone before iterating, otherwise we can get in endless loop due to modifying during iteration, see #628\n\t\t// To preserve insertion order in all cases we then clear the set\n\t\t// And we let finalizeProperty know it needs to re-add non-draft children back to the target\n\t\tlet resultEach = result\n\t\tlet isSet = false\n\t\tif (state.type_ === ArchType.Set) {\n\t\t\tresultEach = new Set(result)\n\t\t\tresult.clear()\n\t\t\tisSet = true\n\t\t}\n\t\teach(resultEach, (key, childValue) =>\n\t\t\tfinalizeProperty(rootScope, state, result, key, childValue, path, isSet)\n\t\t)\n\t\t// everything inside is frozen, we can freeze here\n\t\tmaybeFreeze(rootScope, result, false)\n\t\t// first time finalizing, let's create those patches\n\t\tif (path && rootScope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generatePatches_(\n\t\t\t\tstate,\n\t\t\t\tpath,\n\t\t\t\trootScope.patches_,\n\t\t\t\trootScope.inversePatches_!\n\t\t\t)\n\t\t}\n\t}\n\treturn state.copy_\n}\n\nfunction finalizeProperty(\n\trootScope: ImmerScope,\n\tparentState: undefined | ImmerState,\n\ttargetObject: any,\n\tprop: string | number,\n\tchildValue: any,\n\trootPath?: PatchPath,\n\ttargetIsSet?: boolean\n) {\n\tif (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n\t\tdie(5)\n\tif (isDraft(childValue)) {\n\t\tconst path =\n\t\t\trootPath &&\n\t\t\tparentState &&\n\t\t\tparentState!.type_ !== ArchType.Set && // Set objects are atomic since they have no keys.\n\t\t\t!has((parentState as Exclude<ImmerState, SetState>).assigned_!, prop) // Skip deep patches for assigned keys.\n\t\t\t\t? rootPath!.concat(prop)\n\t\t\t\t: undefined\n\t\t// Drafts owned by `scope` are finalized here.\n\t\tconst res = finalize(rootScope, childValue, path)\n\t\tset(targetObject, prop, res)\n\t\t// Drafts from another scope must prevented to be frozen\n\t\t// if we got a draft back from finalize, we're in a nested produce and shouldn't freeze\n\t\tif (isDraft(res)) {\n\t\t\trootScope.canAutoFreeze_ = false\n\t\t} else return\n\t} else if (targetIsSet) {\n\t\ttargetObject.add(childValue)\n\t}\n\t// Search new objects for unfinalized drafts. Frozen objects should never contain drafts.\n\tif (isDraftable(childValue) && !isFrozen(childValue)) {\n\t\tif (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n\t\t\t// optimization: if an object is not a draft, and we don't have to\n\t\t\t// deepfreeze everything, and we are sure that no drafts are left in the remaining object\n\t\t\t// cause we saw and finalized all drafts already; we can stop visiting the rest of the tree.\n\t\t\t// This benefits especially adding large data tree's without further processing.\n\t\t\t// See add-data.js perf test\n\t\t\treturn\n\t\t}\n\t\tfinalize(rootScope, childValue)\n\t\t// Immer deep freezes plain objects, so if there is no parent state, we freeze as well\n\t\t// Per #590, we never freeze symbolic properties. Just to make sure don't accidentally interfere\n\t\t// with other frameworks.\n\t\tif (\n\t\t\t(!parentState || !parentState.scope_.parent_) &&\n\t\t\ttypeof prop !== \"symbol\" &&\n\t\t\tObject.prototype.propertyIsEnumerable.call(targetObject, prop)\n\t\t)\n\t\t\tmaybeFreeze(rootScope, childValue)\n\t}\n}\n\nfunction maybeFreeze(scope: ImmerScope, value: any, deep = false) {\n\t// we never freeze for a non-root scope; as it would prevent pruning for drafts inside wrapping objects\n\tif (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n\t\tfreeze(value, deep)\n\t}\n}\n", "import {\n\teach,\n\thas,\n\tis,\n\tisDraftable,\n\tshallowCopy,\n\tlatest,\n\tImmerBaseState,\n\tImmerState,\n\tDrafted,\n\tAnyObject,\n\tAnyArray,\n\tObjectish,\n\tgetCurrentScope,\n\tgetPrototypeOf,\n\tDRAFT_STATE,\n\tdie,\n\tcreateProxy,\n\tArchType,\n\tImmerScope\n} from \"../internal\"\n\ninterface ProxyBaseState extends ImmerBaseState {\n\tassigned_: {\n\t\t[property: string]: boolean\n\t}\n\tparent_?: ImmerState\n\trevoke_(): void\n}\n\nexport interface ProxyObjectState extends ProxyBaseState {\n\ttype_: ArchType.Object\n\tbase_: any\n\tcopy_: any\n\tdraft_: Drafted<AnyObject, ProxyObjectState>\n}\n\nexport interface ProxyArrayState extends ProxyBaseState {\n\ttype_: ArchType.Array\n\tbase_: AnyArray\n\tcopy_: AnyArray | null\n\tdraft_: Drafted<AnyArray, ProxyArrayState>\n}\n\ntype ProxyState = ProxyObjectState | ProxyArrayState\n\n/**\n * Returns a new draft of the `base` object.\n *\n * The second argument is the parent draft-state (used internally).\n */\nexport function createProxyProxy<T extends Objectish>(\n\tbase: T,\n\tparent?: ImmerState\n): Drafted<T, ProxyState> {\n\tconst isArray = Array.isArray(base)\n\tconst state: ProxyState = {\n\t\ttype_: isArray ? ArchType.Array : (ArchType.Object as any),\n\t\t// Track which produce call this is associated with.\n\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t// True for both shallow and deep changes.\n\t\tmodified_: false,\n\t\t// Used during finalization.\n\t\tfinalized_: false,\n\t\t// Track which properties have been assigned (true) or deleted (false).\n\t\tassigned_: {},\n\t\t// The parent draft state.\n\t\tparent_: parent,\n\t\t// The base state.\n\t\tbase_: base,\n\t\t// The base proxy.\n\t\tdraft_: null as any, // set below\n\t\t// The base copy with any updated values.\n\t\tcopy_: null,\n\t\t// Called by the `produce` function.\n\t\trevoke_: null as any,\n\t\tisManual_: false\n\t}\n\n\t// the traps must target something, a bit like the 'real' base.\n\t// but also, we need to be able to determine from the target what the relevant state is\n\t// (to avoid creating traps per instance to capture the state in closure,\n\t// and to avoid creating weird hidden properties as well)\n\t// So the trick is to use 'state' as the actual 'target'! (and make sure we intercept everything)\n\t// Note that in the case of an array, we put the state in an array to have better Reflect defaults ootb\n\tlet target: T = state as any\n\tlet traps: ProxyHandler<object | Array<any>> = objectTraps\n\tif (isArray) {\n\t\ttarget = [state] as any\n\t\ttraps = arrayTraps\n\t}\n\n\tconst {revoke, proxy} = Proxy.revocable(target, traps)\n\tstate.draft_ = proxy as any\n\tstate.revoke_ = revoke\n\treturn proxy as any\n}\n\n/**\n * Object drafts\n */\nexport const objectTraps: ProxyHandler<ProxyState> = {\n\tget(state, prop) {\n\t\tif (prop === DRAFT_STATE) return state\n\n\t\tconst source = latest(state)\n\t\tif (!has(source, prop)) {\n\t\t\t// non-existing or non-own property...\n\t\t\treturn readPropFromProto(state, source, prop)\n\t\t}\n\t\tconst value = source[prop]\n\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\treturn value\n\t\t}\n\t\t// Check for existing draft in modified state.\n\t\t// Assigned values are never drafted. This catches any drafts we created, too.\n\t\tif (value === peek(state.base_, prop)) {\n\t\t\tprepareCopy(state)\n\t\t\treturn (state.copy_![prop as any] = createProxy(value, state))\n\t\t}\n\t\treturn value\n\t},\n\thas(state, prop) {\n\t\treturn prop in latest(state)\n\t},\n\townKeys(state) {\n\t\treturn Reflect.ownKeys(latest(state))\n\t},\n\tset(\n\t\tstate: ProxyObjectState,\n\t\tprop: string /* strictly not, but helps TS */,\n\t\tvalue\n\t) {\n\t\tconst desc = getDescriptorFromProto(latest(state), prop)\n\t\tif (desc?.set) {\n\t\t\t// special case: if this write is captured by a setter, we have\n\t\t\t// to trigger it with the correct context\n\t\t\tdesc.set.call(state.draft_, value)\n\t\t\treturn true\n\t\t}\n\t\tif (!state.modified_) {\n\t\t\t// the last check is because we need to be able to distinguish setting a non-existing to undefined (which is a change)\n\t\t\t// from setting an existing property with value undefined to undefined (which is not a change)\n\t\t\tconst current = peek(latest(state), prop)\n\t\t\t// special case, if we assigning the original value to a draft, we can ignore the assignment\n\t\t\tconst currentState: ProxyObjectState = current?.[DRAFT_STATE]\n\t\t\tif (currentState && currentState.base_ === value) {\n\t\t\t\tstate.copy_![prop] = value\n\t\t\t\tstate.assigned_[prop] = false\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (is(value, current) && (value !== undefined || has(state.base_, prop)))\n\t\t\t\treturn true\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t}\n\n\t\tif (\n\t\t\t(state.copy_![prop] === value &&\n\t\t\t\t// special case: handle new props with value 'undefined'\n\t\t\t\t(value !== undefined || prop in state.copy_)) ||\n\t\t\t// special case: NaN\n\t\t\t(Number.isNaN(value) && Number.isNaN(state.copy_![prop]))\n\t\t)\n\t\t\treturn true\n\n\t\t// @ts-ignore\n\t\tstate.copy_![prop] = value\n\t\tstate.assigned_[prop] = true\n\t\treturn true\n\t},\n\tdeleteProperty(state, prop: string) {\n\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\tif (peek(state.base_, prop) !== undefined || prop in state.base_) {\n\t\t\tstate.assigned_[prop] = false\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t} else {\n\t\t\t// if an originally not assigned property was deleted\n\t\t\tdelete state.assigned_[prop]\n\t\t}\n\t\tif (state.copy_) {\n\t\t\tdelete state.copy_[prop]\n\t\t}\n\t\treturn true\n\t},\n\t// Note: We never coerce `desc.value` into an Immer draft, because we can't make\n\t// the same guarantee in ES5 mode.\n\tgetOwnPropertyDescriptor(state, prop) {\n\t\tconst owner = latest(state)\n\t\tconst desc = Reflect.getOwnPropertyDescriptor(owner, prop)\n\t\tif (!desc) return desc\n\t\treturn {\n\t\t\twritable: true,\n\t\t\tconfigurable: state.type_ !== ArchType.Array || prop !== \"length\",\n\t\t\tenumerable: desc.enumerable,\n\t\t\tvalue: owner[prop]\n\t\t}\n\t},\n\tdefineProperty() {\n\t\tdie(11)\n\t},\n\tgetPrototypeOf(state) {\n\t\treturn getPrototypeOf(state.base_)\n\t},\n\tsetPrototypeOf() {\n\t\tdie(12)\n\t}\n}\n\n/**\n * Array drafts\n */\n\nconst arrayTraps: ProxyHandler<[ProxyArrayState]> = {}\neach(objectTraps, (key, fn) => {\n\t// @ts-ignore\n\tarrayTraps[key] = function() {\n\t\targuments[0] = arguments[0][0]\n\t\treturn fn.apply(this, arguments)\n\t}\n})\narrayTraps.deleteProperty = function(state, prop) {\n\tif (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop as any)))\n\t\tdie(13)\n\t// @ts-ignore\n\treturn arrayTraps.set!.call(this, state, prop, undefined)\n}\narrayTraps.set = function(state, prop, value) {\n\tif (\n\t\tprocess.env.NODE_ENV !== \"production\" &&\n\t\tprop !== \"length\" &&\n\t\tisNaN(parseInt(prop as any))\n\t)\n\t\tdie(14)\n\treturn objectTraps.set!.call(this, state[0], prop, value, state[0])\n}\n\n// Access a property without creating an Immer draft.\nfunction peek(draft: Drafted, prop: PropertyKey) {\n\tconst state = draft[DRAFT_STATE]\n\tconst source = state ? latest(state) : draft\n\treturn source[prop]\n}\n\nfunction readPropFromProto(state: ImmerState, source: any, prop: PropertyKey) {\n\tconst desc = getDescriptorFromProto(source, prop)\n\treturn desc\n\t\t? `value` in desc\n\t\t\t? desc.value\n\t\t\t: // This is a very special case, if the prop is a getter defined by the\n\t\t\t // prototype, we should invoke it with the draft as context!\n\t\t\t desc.get?.call(state.draft_)\n\t\t: undefined\n}\n\nfunction getDescriptorFromProto(\n\tsource: any,\n\tprop: PropertyKey\n): PropertyDescriptor | undefined {\n\t// 'in' checks proto!\n\tif (!(prop in source)) return undefined\n\tlet proto = getPrototypeOf(source)\n\twhile (proto) {\n\t\tconst desc = Object.getOwnPropertyDescriptor(proto, prop)\n\t\tif (desc) return desc\n\t\tproto = getPrototypeOf(proto)\n\t}\n\treturn undefined\n}\n\nexport function markChanged(state: ImmerState) {\n\tif (!state.modified_) {\n\t\tstate.modified_ = true\n\t\tif (state.parent_) {\n\t\t\tmarkChanged(state.parent_)\n\t\t}\n\t}\n}\n\nexport function prepareCopy(state: {\n\tbase_: any\n\tcopy_: any\n\tscope_: ImmerScope\n}) {\n\tif (!state.copy_) {\n\t\tstate.copy_ = shallowCopy(\n\t\t\tstate.base_,\n\t\t\tstate.scope_.immer_.useStrictShallowCopy_\n\t\t)\n\t}\n}\n", "import {\n\tIProduceWithPatches,\n\tIProduce,\n\tImmerState,\n\tDrafted,\n\tisDraftable,\n\tprocessResult,\n\tPatch,\n\tObjectish,\n\tDRAFT_STATE,\n\tDraft,\n\tPatchListener,\n\tisDraft,\n\tisMap,\n\tisSet,\n\tcreateProxyProxy,\n\tgetPlugin,\n\tdie,\n\tenterScope,\n\trevokeScope,\n\tleaveScope,\n\tusePatchesInScope,\n\tgetCurrentScope,\n\tNOTHING,\n\tfreeze,\n\tcurrent\n} from \"../internal\"\n\ninterface ProducersFns {\n\tproduce: IProduce\n\tproduceWithPatches: IProduceWithPatches\n}\n\nexport type StrictMode = boolean | \"class_only\";\n\nexport class Immer implements ProducersFns {\n\tautoFreeze_: boolean = true\n\tuseStrictShallowCopy_: StrictMode = false\n\n\tconstructor(config?: {\n\t\tautoFreeze?: boolean\n\t\tuseStrictShallowCopy?: StrictMode\n\t}) {\n\t\tif (typeof config?.autoFreeze === \"boolean\")\n\t\t\tthis.setAutoFreeze(config!.autoFreeze)\n\t\tif (typeof config?.useStrictShallowCopy === \"boolean\")\n\t\t\tthis.setUseStrictShallowCopy(config!.useStrictShallowCopy)\n\t}\n\n\t/**\n\t * The `produce` function takes a value and a \"recipe function\" (whose\n\t * return value often depends on the base state). The recipe function is\n\t * free to mutate its first argument however it wants. All mutations are\n\t * only ever applied to a __copy__ of the base state.\n\t *\n\t * Pass only a function to create a \"curried producer\" which relieves you\n\t * from passing the recipe function every time.\n\t *\n\t * Only plain objects and arrays are made mutable. All other objects are\n\t * considered uncopyable.\n\t *\n\t * Note: This function is __bound__ to its `Immer` instance.\n\t *\n\t * @param {any} base - the initial state\n\t * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n\t * @param {Function} patchListener - optional function that will be called with all the patches produced here\n\t * @returns {any} a new state, or the initial state if nothing was modified\n\t */\n\tproduce: IProduce = (base: any, recipe?: any, patchListener?: any) => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\" && typeof recipe !== \"function\") {\n\t\t\tconst defaultBase = recipe\n\t\t\trecipe = base\n\n\t\t\tconst self = this\n\t\t\treturn function curriedProduce(\n\t\t\t\tthis: any,\n\t\t\t\tbase = defaultBase,\n\t\t\t\t...args: any[]\n\t\t\t) {\n\t\t\t\treturn self.produce(base, (draft: Drafted) => recipe.call(this, draft, ...args)) // prettier-ignore\n\t\t\t}\n\t\t}\n\n\t\tif (typeof recipe !== \"function\") die(6)\n\t\tif (patchListener !== undefined && typeof patchListener !== \"function\")\n\t\t\tdie(7)\n\n\t\tlet result\n\n\t\t// Only plain objects, arrays, and \"immerable classes\" are drafted.\n\t\tif (isDraftable(base)) {\n\t\t\tconst scope = enterScope(this)\n\t\t\tconst proxy = createProxy(base, undefined)\n\t\t\tlet hasError = true\n\t\t\ttry {\n\t\t\t\tresult = recipe(proxy)\n\t\t\t\thasError = false\n\t\t\t} finally {\n\t\t\t\t// finally instead of catch + rethrow better preserves original stack\n\t\t\t\tif (hasError) revokeScope(scope)\n\t\t\t\telse leaveScope(scope)\n\t\t\t}\n\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\treturn processResult(result, scope)\n\t\t} else if (!base || typeof base !== \"object\") {\n\t\t\tresult = recipe(base)\n\t\t\tif (result === undefined) result = base\n\t\t\tif (result === NOTHING) result = undefined\n\t\t\tif (this.autoFreeze_) freeze(result, true)\n\t\t\tif (patchListener) {\n\t\t\t\tconst p: Patch[] = []\n\t\t\t\tconst ip: Patch[] = []\n\t\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip)\n\t\t\t\tpatchListener(p, ip)\n\t\t\t}\n\t\t\treturn result\n\t\t} else die(1, base)\n\t}\n\n\tproduceWithPatches: IProduceWithPatches = (base: any, recipe?: any): any => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\") {\n\t\t\treturn (state: any, ...args: any[]) =>\n\t\t\t\tthis.produceWithPatches(state, (draft: any) => base(draft, ...args))\n\t\t}\n\n\t\tlet patches: Patch[], inversePatches: Patch[]\n\t\tconst result = this.produce(base, recipe, (p: Patch[], ip: Patch[]) => {\n\t\t\tpatches = p\n\t\t\tinversePatches = ip\n\t\t})\n\t\treturn [result, patches!, inversePatches!]\n\t}\n\n\tcreateDraft<T extends Objectish>(base: T): Draft<T> {\n\t\tif (!isDraftable(base)) die(8)\n\t\tif (isDraft(base)) base = current(base)\n\t\tconst scope = enterScope(this)\n\t\tconst proxy = createProxy(base, undefined)\n\t\tproxy[DRAFT_STATE].isManual_ = true\n\t\tleaveScope(scope)\n\t\treturn proxy as any\n\t}\n\n\tfinishDraft<D extends Draft<any>>(\n\t\tdraft: D,\n\t\tpatchListener?: PatchListener\n\t): D extends Draft<infer T> ? T : never {\n\t\tconst state: ImmerState = draft && (draft as any)[DRAFT_STATE]\n\t\tif (!state || !state.isManual_) die(9)\n\t\tconst {scope_: scope} = state\n\t\tusePatchesInScope(scope, patchListener)\n\t\treturn processResult(undefined, scope)\n\t}\n\n\t/**\n\t * Pass true to automatically freeze all copies created by Immer.\n\t *\n\t * By default, auto-freezing is enabled.\n\t */\n\tsetAutoFreeze(value: boolean) {\n\t\tthis.autoFreeze_ = value\n\t}\n\n\t/**\n\t * Pass true to enable strict shallow copy.\n\t *\n\t * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n\t */\n\tsetUseStrictShallowCopy(value: StrictMode) {\n\t\tthis.useStrictShallowCopy_ = value\n\t}\n\n\tapplyPatches<T extends Objectish>(base: T, patches: readonly Patch[]): T {\n\t\t// If a patch replaces the entire state, take that replacement as base\n\t\t// before applying patches\n\t\tlet i: number\n\t\tfor (i = patches.length - 1; i >= 0; i--) {\n\t\t\tconst patch = patches[i]\n\t\t\tif (patch.path.length === 0 && patch.op === \"replace\") {\n\t\t\t\tbase = patch.value\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// If there was a patch that replaced the entire state, start from the\n\t\t// patch after that.\n\t\tif (i > -1) {\n\t\t\tpatches = patches.slice(i + 1)\n\t\t}\n\n\t\tconst applyPatchesImpl = getPlugin(\"Patches\").applyPatches_\n\t\tif (isDraft(base)) {\n\t\t\t// N.B: never hits if some patch a replacement, patches are never drafts\n\t\t\treturn applyPatchesImpl(base, patches)\n\t\t}\n\t\t// Otherwise, produce a copy of the base state.\n\t\treturn this.produce(base, (draft: Drafted) =>\n\t\t\tapplyPatchesImpl(draft, patches)\n\t\t)\n\t}\n}\n\nexport function createProxy<T extends Objectish>(\n\tvalue: T,\n\tparent?: ImmerState\n): Drafted<T, ImmerState> {\n\t// precondition: createProxy should be guarded by isDraftable, so we know we can safely draft\n\tconst draft: Drafted = isMap(value)\n\t\t? getPlugin(\"MapSet\").proxyMap_(value, parent)\n\t\t: isSet(value)\n\t\t? getPlugin(\"MapSet\").proxySet_(value, parent)\n\t\t: createProxyProxy(value, parent)\n\n\tconst scope = parent ? parent.scope_ : getCurrentScope()\n\tscope.drafts_.push(draft)\n\treturn draft\n}\n", "import {\n\tdie,\n\tisDraft,\n\tshallowCopy,\n\teach,\n\tDRAFT_STATE,\n\tset,\n\tImmerState,\n\tisDraftable,\n\tisFrozen\n} from \"../internal\"\n\n/** Takes a snapshot of the current state of a draft and finalizes it (but without freezing). This is a great utility to print the current state during debugging (no Proxies in the way). The output of current can also be safely leaked outside the producer. */\nexport function current<T>(value: T): T\nexport function current(value: any): any {\n\tif (!isDraft(value)) die(10, value)\n\treturn currentImpl(value)\n}\n\nfunction currentImpl(value: any): any {\n\tif (!isDraftable(value) || isFrozen(value)) return value\n\tconst state: ImmerState | undefined = value[DRAFT_STATE]\n\tlet copy: any\n\tif (state) {\n\t\tif (!state.modified_) return state.base_\n\t\t// Optimization: avoid generating new drafts during copying\n\t\tstate.finalized_ = true\n\t\tcopy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_)\n\t} else {\n\t\tcopy = shallowCopy(value, true)\n\t}\n\t// recurse\n\teach(copy, (key, childValue) => {\n\t\tset(copy, key, currentImpl(childValue))\n\t})\n\tif (state) {\n\t\tstate.finalized_ = false\n\t}\n\treturn copy\n}\n", "import {immerable} from \"../immer\"\nimport {\n\tImmerState,\n\tPatch,\n\tSetState,\n\tProxyArrayState,\n\tMapState,\n\tProxyObjectState,\n\tPatchPath,\n\tget,\n\teach,\n\thas,\n\tgetArchtype,\n\tgetPrototypeOf,\n\tisSet,\n\tisMap,\n\tloadPlugin,\n\tArchType,\n\tdie,\n\tisDraft,\n\tisDraftable,\n\tNOTHING,\n\terrors\n} from \"../internal\"\n\nexport function enablePatches() {\n\tconst errorOffset = 16\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\terrors.push(\n\t\t\t'Sets cannot have \"replace\" patches.',\n\t\t\tfunction(op: string) {\n\t\t\t\treturn \"Unsupported patch operation: \" + op\n\t\t\t},\n\t\t\tfunction(path: string) {\n\t\t\t\treturn \"Cannot apply patch, path doesn't resolve: \" + path\n\t\t\t},\n\t\t\t\"Patching reserved attributes like __proto__, prototype and constructor is not allowed\"\n\t\t)\n\t}\n\n\tconst REPLACE = \"replace\"\n\tconst ADD = \"add\"\n\tconst REMOVE = \"remove\"\n\n\tfunction generatePatches_(\n\t\tstate: ImmerState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tswitch (state.type_) {\n\t\t\tcase ArchType.Object:\n\t\t\tcase ArchType.Map:\n\t\t\t\treturn generatePatchesFromAssigned(\n\t\t\t\t\tstate,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t\tcase ArchType.Array:\n\t\t\t\treturn generateArrayPatches(state, basePath, patches, inversePatches)\n\t\t\tcase ArchType.Set:\n\t\t\t\treturn generateSetPatches(\n\t\t\t\t\t(state as any) as SetState,\n\t\t\t\t\tbasePath,\n\t\t\t\t\tpatches,\n\t\t\t\t\tinversePatches\n\t\t\t\t)\n\t\t}\n\t}\n\n\tfunction generateArrayPatches(\n\t\tstate: ProxyArrayState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, assigned_} = state\n\t\tlet copy_ = state.copy_!\n\n\t\t// Reduce complexity by ensuring `base` is never longer.\n\t\tif (copy_.length < base_.length) {\n\t\t\t// @ts-ignore\n\t\t\t;[base_, copy_] = [copy_, base_]\n\t\t\t;[patches, inversePatches] = [inversePatches, patches]\n\t\t}\n\n\t\t// Process replaced indices.\n\t\tfor (let i = 0; i < base_.length; i++) {\n\t\t\tif (assigned_[i] && copy_[i] !== base_[i]) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t\t})\n\t\t\t\tinversePatches.push({\n\t\t\t\t\top: REPLACE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue: clonePatchValueIfNeeded(base_[i])\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\t// Process added indices.\n\t\tfor (let i = base_.length; i < copy_.length; i++) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tpatches.push({\n\t\t\t\top: ADD,\n\t\t\t\tpath,\n\t\t\t\t// Need to maybe clone it, as it can in fact be the original value\n\t\t\t\t// due to the base/copy inversion at the start of this function\n\t\t\t\tvalue: clonePatchValueIfNeeded(copy_[i])\n\t\t\t})\n\t\t}\n\t\tfor (let i = copy_.length - 1; base_.length <= i; --i) {\n\t\t\tconst path = basePath.concat([i])\n\t\t\tinversePatches.push({\n\t\t\t\top: REMOVE,\n\t\t\t\tpath\n\t\t\t})\n\t\t}\n\t}\n\n\t// This is used for both Map objects and normal objects.\n\tfunction generatePatchesFromAssigned(\n\t\tstate: MapState | ProxyObjectState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tconst {base_, copy_} = state\n\t\teach(state.assigned_!, (key, assignedValue) => {\n\t\t\tconst origValue = get(base_, key)\n\t\t\tconst value = get(copy_!, key)\n\t\t\tconst op = !assignedValue ? REMOVE : has(base_, key) ? REPLACE : ADD\n\t\t\tif (origValue === value && op === REPLACE) return\n\t\t\tconst path = basePath.concat(key as any)\n\t\t\tpatches.push(op === REMOVE ? {op, path} : {op, path, value})\n\t\t\tinversePatches.push(\n\t\t\t\top === ADD\n\t\t\t\t\t? {op: REMOVE, path}\n\t\t\t\t\t: op === REMOVE\n\t\t\t\t\t? {op: ADD, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t\t\t: {op: REPLACE, path, value: clonePatchValueIfNeeded(origValue)}\n\t\t\t)\n\t\t})\n\t}\n\n\tfunction generateSetPatches(\n\t\tstate: SetState,\n\t\tbasePath: PatchPath,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t) {\n\t\tlet {base_, copy_} = state\n\n\t\tlet i = 0\n\t\tbase_.forEach((value: any) => {\n\t\t\tif (!copy_!.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t\ti = 0\n\t\tcopy_!.forEach((value: any) => {\n\t\t\tif (!base_.has(value)) {\n\t\t\t\tconst path = basePath.concat([i])\n\t\t\t\tpatches.push({\n\t\t\t\t\top: ADD,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t\tinversePatches.unshift({\n\t\t\t\t\top: REMOVE,\n\t\t\t\t\tpath,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t}\n\t\t\ti++\n\t\t})\n\t}\n\n\tfunction generateReplacementPatches_(\n\t\tbaseValue: any,\n\t\treplacement: any,\n\t\tpatches: Patch[],\n\t\tinversePatches: Patch[]\n\t): void {\n\t\tpatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: replacement === NOTHING ? undefined : replacement\n\t\t})\n\t\tinversePatches.push({\n\t\t\top: REPLACE,\n\t\t\tpath: [],\n\t\t\tvalue: baseValue\n\t\t})\n\t}\n\n\tfunction applyPatches_<T>(draft: T, patches: readonly Patch[]): T {\n\t\tpatches.forEach(patch => {\n\t\t\tconst {path, op} = patch\n\n\t\t\tlet base: any = draft\n\t\t\tfor (let i = 0; i < path.length - 1; i++) {\n\t\t\t\tconst parentType = getArchtype(base)\n\t\t\t\tlet p = path[i]\n\t\t\t\tif (typeof p !== \"string\" && typeof p !== \"number\") {\n\t\t\t\t\tp = \"\" + p\n\t\t\t\t}\n\n\t\t\t\t// See #738, avoid prototype pollution\n\t\t\t\tif (\n\t\t\t\t\t(parentType === ArchType.Object || parentType === ArchType.Array) &&\n\t\t\t\t\t(p === \"__proto__\" || p === \"constructor\")\n\t\t\t\t)\n\t\t\t\t\tdie(errorOffset + 3)\n\t\t\t\tif (typeof base === \"function\" && p === \"prototype\")\n\t\t\t\t\tdie(errorOffset + 3)\n\t\t\t\tbase = get(base, p)\n\t\t\t\tif (typeof base !== \"object\") die(errorOffset + 2, path.join(\"/\"))\n\t\t\t}\n\n\t\t\tconst type = getArchtype(base)\n\t\t\tconst value = deepClonePatchValue(patch.value) // used to clone patch to ensure original patch is not modified, see #411\n\t\t\tconst key = path[path.length - 1]\n\t\t\tswitch (op) {\n\t\t\t\tcase REPLACE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\tdie(errorOffset)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// if value is an object, then it's assigned by reference\n\t\t\t\t\t\t\t// in the following add or remove ops, the value field inside the patch will also be modifyed\n\t\t\t\t\t\t\t// so we use value from the cloned patch\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase ADD:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Array:\n\t\t\t\t\t\t\treturn key === \"-\"\n\t\t\t\t\t\t\t\t? base.push(value)\n\t\t\t\t\t\t\t\t: base.splice(key as any, 0, value)\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.set(key, value)\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\treturn base.add(value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn (base[key] = value)\n\t\t\t\t\t}\n\t\t\t\tcase REMOVE:\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase ArchType.Array:\n\t\t\t\t\t\t\treturn base.splice(key as any, 1)\n\t\t\t\t\t\tcase ArchType.Map:\n\t\t\t\t\t\t\treturn base.delete(key)\n\t\t\t\t\t\tcase ArchType.Set:\n\t\t\t\t\t\t\treturn base.delete(patch.value)\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn delete base[key]\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tdie(errorOffset + 1, op)\n\t\t\t}\n\t\t})\n\n\t\treturn draft\n\t}\n\n\t// optimize: this is quite a performance hit, can we detect intelligently when it is needed?\n\t// E.g. auto-draft when new objects from outside are assigned and modified?\n\t// (See failing test when deepClone just returns obj)\n\tfunction deepClonePatchValue<T>(obj: T): T\n\tfunction deepClonePatchValue(obj: any) {\n\t\tif (!isDraftable(obj)) return obj\n\t\tif (Array.isArray(obj)) return obj.map(deepClonePatchValue)\n\t\tif (isMap(obj))\n\t\t\treturn new Map(\n\t\t\t\tArray.from(obj.entries()).map(([k, v]) => [k, deepClonePatchValue(v)])\n\t\t\t)\n\t\tif (isSet(obj)) return new Set(Array.from(obj).map(deepClonePatchValue))\n\t\tconst cloned = Object.create(getPrototypeOf(obj))\n\t\tfor (const key in obj) cloned[key] = deepClonePatchValue(obj[key])\n\t\tif (has(obj, immerable)) cloned[immerable] = obj[immerable]\n\t\treturn cloned\n\t}\n\n\tfunction clonePatchValueIfNeeded<T>(obj: T): T {\n\t\tif (isDraft(obj)) {\n\t\t\treturn deepClonePatchValue(obj)\n\t\t} else return obj\n\t}\n\n\tloadPlugin(\"Patches\", {\n\t\tapplyPatches_,\n\t\tgeneratePatches_,\n\t\tgenerateReplacementPatches_\n\t})\n}\n", "// types only!\nimport {\n\tImmerState,\n\tAnyMap,\n\tAnySet,\n\tMapState,\n\tSetState,\n\tDRAFT_STATE,\n\tgetCurrentScope,\n\tlatest,\n\tisDraftable,\n\tcreateProxy,\n\tloadPlugin,\n\tmarkChanged,\n\tdie,\n\tArchType,\n\teach\n} from \"../internal\"\n\nexport function enableMapSet() {\n\tclass DraftMap extends Map {\n\t\t[DRAFT_STATE]: MapState\n\n\t\tconstructor(target: AnyMap, parent?: ImmerState) {\n\t\t\tsuper()\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ArchType.Map,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tassigned_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this as any,\n\t\t\t\tisManual_: false,\n\t\t\t\trevoked_: false\n\t\t\t}\n\t\t}\n\n\t\tget size(): number {\n\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t}\n\n\t\thas(key: any): boolean {\n\t\t\treturn latest(this[DRAFT_STATE]).has(key)\n\t\t}\n\n\t\tset(key: any, value: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!latest(state).has(key) || latest(state).get(key) !== value) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t\tstate.copy_!.set(key, value)\n\t\t\t\tstate.assigned_!.set(key, true)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tdelete(key: any): boolean {\n\t\t\tif (!this.has(key)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareMapCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\tif (state.base_.has(key)) {\n\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t} else {\n\t\t\t\tstate.assigned_!.delete(key)\n\t\t\t}\n\t\t\tstate.copy_!.delete(key)\n\t\t\treturn true\n\t\t}\n\n\t\tclear() {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareMapCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.assigned_ = new Map()\n\t\t\t\teach(state.base_, key => {\n\t\t\t\t\tstate.assigned_!.set(key, false)\n\t\t\t\t})\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tforEach(cb: (value: any, key: any, self: any) => void, thisArg?: any) {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tlatest(state).forEach((_value: any, key: any, _map: any) => {\n\t\t\t\tcb.call(thisArg, this.get(key), key, this)\n\t\t\t})\n\t\t}\n\n\t\tget(key: any): any {\n\t\t\tconst state: MapState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tconst value = latest(state).get(key)\n\t\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\tif (value !== state.base_.get(key)) {\n\t\t\t\treturn value // either already drafted or reassigned\n\t\t\t}\n\t\t\t// despite what it looks, this creates a draft only once, see above condition\n\t\t\tconst draft = createProxy(value, state)\n\t\t\tprepareMapCopy(state)\n\t\t\tstate.copy_!.set(key, draft)\n\t\t\treturn draft\n\t\t}\n\n\t\tkeys(): IterableIterator<any> {\n\t\t\treturn latest(this[DRAFT_STATE]).keys()\n\t\t}\n\n\t\tvalues(): IterableIterator<any> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[Symbol.iterator]: () => this.values(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\tentries(): IterableIterator<[any, any]> {\n\t\t\tconst iterator = this.keys()\n\t\t\treturn {\n\t\t\t\t[Symbol.iterator]: () => this.entries(),\n\t\t\t\tnext: () => {\n\t\t\t\t\tconst r = iterator.next()\n\t\t\t\t\t/* istanbul ignore next */\n\t\t\t\t\tif (r.done) return r\n\t\t\t\t\tconst value = this.get(r.value)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: false,\n\t\t\t\t\t\tvalue: [r.value, value]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} as any\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\treturn this.entries()\n\t\t}\n\t}\n\n\tfunction proxyMap_<T extends AnyMap>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftMap(target, parent)\n\t}\n\n\tfunction prepareMapCopy(state: MapState) {\n\t\tif (!state.copy_) {\n\t\t\tstate.assigned_ = new Map()\n\t\t\tstate.copy_ = new Map(state.base_)\n\t\t}\n\t}\n\n\tclass DraftSet extends Set {\n\t\t[DRAFT_STATE]: SetState\n\t\tconstructor(target: AnySet, parent?: ImmerState) {\n\t\t\tsuper()\n\t\t\tthis[DRAFT_STATE] = {\n\t\t\t\ttype_: ArchType.Set,\n\t\t\t\tparent_: parent,\n\t\t\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t\t\tmodified_: false,\n\t\t\t\tfinalized_: false,\n\t\t\t\tcopy_: undefined,\n\t\t\t\tbase_: target,\n\t\t\t\tdraft_: this,\n\t\t\t\tdrafts_: new Map(),\n\t\t\t\trevoked_: false,\n\t\t\t\tisManual_: false\n\t\t\t}\n\t\t}\n\n\t\tget size(): number {\n\t\t\treturn latest(this[DRAFT_STATE]).size\n\t\t}\n\n\t\thas(value: any): boolean {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\t// bit of trickery here, to be able to recognize both the value, and the draft of its value\n\t\t\tif (!state.copy_) {\n\t\t\t\treturn state.base_.has(value)\n\t\t\t}\n\t\t\tif (state.copy_.has(value)) return true\n\t\t\tif (state.drafts_.has(value) && state.copy_.has(state.drafts_.get(value)))\n\t\t\t\treturn true\n\t\t\treturn false\n\t\t}\n\n\t\tadd(value: any): any {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (!this.has(value)) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.add(value)\n\t\t\t}\n\t\t\treturn this\n\t\t}\n\n\t\tdelete(value: any): any {\n\t\t\tif (!this.has(value)) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\tmarkChanged(state)\n\t\t\treturn (\n\t\t\t\tstate.copy_!.delete(value) ||\n\t\t\t\t(state.drafts_.has(value)\n\t\t\t\t\t? state.copy_!.delete(state.drafts_.get(value))\n\t\t\t\t\t: /* istanbul ignore next */ false)\n\t\t\t)\n\t\t}\n\n\t\tclear() {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tif (latest(state).size) {\n\t\t\t\tprepareSetCopy(state)\n\t\t\t\tmarkChanged(state)\n\t\t\t\tstate.copy_!.clear()\n\t\t\t}\n\t\t}\n\n\t\tvalues(): IterableIterator<any> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.values()\n\t\t}\n\n\t\tentries(): IterableIterator<[any, any]> {\n\t\t\tconst state: SetState = this[DRAFT_STATE]\n\t\t\tassertUnrevoked(state)\n\t\t\tprepareSetCopy(state)\n\t\t\treturn state.copy_!.entries()\n\t\t}\n\n\t\tkeys(): IterableIterator<any> {\n\t\t\treturn this.values()\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\treturn this.values()\n\t\t}\n\n\t\tforEach(cb: any, thisArg?: any) {\n\t\t\tconst iterator = this.values()\n\t\t\tlet result = iterator.next()\n\t\t\twhile (!result.done) {\n\t\t\t\tcb.call(thisArg, result.value, result.value, this)\n\t\t\t\tresult = iterator.next()\n\t\t\t}\n\t\t}\n\t}\n\tfunction proxySet_<T extends AnySet>(target: T, parent?: ImmerState): T {\n\t\t// @ts-ignore\n\t\treturn new DraftSet(target, parent)\n\t}\n\n\tfunction prepareSetCopy(state: SetState) {\n\t\tif (!state.copy_) {\n\t\t\t// create drafts for all entries to preserve insertion order\n\t\t\tstate.copy_ = new Set()\n\t\t\tstate.base_.forEach(value => {\n\t\t\t\tif (isDraftable(value)) {\n\t\t\t\t\tconst draft = createProxy(value, state)\n\t\t\t\t\tstate.drafts_.set(value, draft)\n\t\t\t\t\tstate.copy_!.add(draft)\n\t\t\t\t} else {\n\t\t\t\t\tstate.copy_!.add(value)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tfunction assertUnrevoked(state: any /*ES5State | MapState | SetState*/) {\n\t\tif (state.revoked_) die(3, JSON.stringify(latest(state)))\n\t}\n\n\tloadPlugin(\"MapSet\", {proxyMap_, proxySet_})\n}\n", "import {\n\tIProduce,\n\tIProduceWithPatches,\n\tImmer,\n\tDraft,\n\tImmutable\n} from \"./internal\"\n\nexport {\n\tDraft,\n\tWritableDraft,\n\tImmutable,\n\tPatch,\n\tPatchListener,\n\tProducer,\n\toriginal,\n\tcurrent,\n\tisDraft,\n\tisDraftable,\n\tNOTHING as nothing,\n\tDRAFTABLE as immerable,\n\tfreeze,\n\tObjectish,\n\tStrictMode\n} from \"./internal\"\n\nconst immer = new Immer()\n\n/**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\nexport const produce: IProduce = immer.produce\n\n/**\n * Like `produce`, but `produceWithPatches` always returns a tuple\n * [nextState, patches, inversePatches] (instead of just the next state)\n */\nexport const produceWithPatches: IProduceWithPatches = immer.produceWithPatches.bind(\n\timmer\n)\n\n/**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * Always freeze by default, even in production mode\n */\nexport const setAutoFreeze = immer.setAutoFreeze.bind(immer)\n\n/**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\nexport const setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer)\n\n/**\n * Apply an array of Immer patches to the first argument.\n *\n * This function is a producer, which means copy-on-write is in effect.\n */\nexport const applyPatches = immer.applyPatches.bind(immer)\n\n/**\n * Create an Immer draft from the given base state, which may be a draft itself.\n * The draft can be modified until you finalize it with the `finishDraft` function.\n */\nexport const createDraft = immer.createDraft.bind(immer)\n\n/**\n * Finalize an Immer draft from a `createDraft` call, returning the base state\n * (if no changes were made) or a modified copy. The draft must *not* be\n * mutated afterwards.\n *\n * Pass a function as the 2nd argument to generate Immer patches based on the\n * changes that were made.\n */\nexport const finishDraft = immer.finishDraft.bind(immer)\n\n/**\n * This function is actually a no-op, but can be used to cast an immutable type\n * to an draft type and make TypeScript happy\n *\n * @param value\n */\nexport function castDraft<T>(value: T): Draft<T> {\n\treturn value as any\n}\n\n/**\n * This function is actually a no-op, but can be used to cast a mutable type\n * to an immutable type and make TypeScript happy\n * @param value\n */\nexport function castImmutable<T>(value: T): Immutable<T> {\n\treturn value as any\n}\n\nexport {Immer}\n\nexport {enablePatches} from \"./plugins/patches\"\nexport {enableMapSet} from \"./plugins/mapset\"\n", "import type { AnyFunction } from '../types'\r\n\r\n/**\r\n * Runs a check to determine if the given result function behaves as an\r\n * identity function. An identity function is one that returns its\r\n * input unchanged, for example, `x => x`. This check helps ensure\r\n * efficient memoization and prevent unnecessary re-renders by encouraging\r\n * proper use of transformation logic in result functions and\r\n * extraction logic in input selectors.\r\n *\r\n * @param resultFunc - The result function to be checked.\r\n * @param inputSelectorsResults - The results of the input selectors.\r\n * @param outputSelectorResult - The result of the output selector.\r\n *\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks#identityfunctioncheck `identityFunctionCheck`}\r\n *\r\n * @since 5.0.0\r\n * @internal\r\n */\r\nexport const runIdentityFunctionCheck = (\r\n resultFunc: AnyFunction,\r\n inputSelectorsResults: unknown[],\r\n outputSelectorResult: unknown\r\n) => {\r\n if (\r\n inputSelectorsResults.length === 1 &&\r\n inputSelectorsResults[0] === outputSelectorResult\r\n ) {\r\n let isInputSameAsOutput = false\r\n try {\r\n const emptyObject = {}\r\n if (resultFunc(emptyObject) === emptyObject) isInputSameAsOutput = true\r\n } catch {\r\n // Do nothing\r\n }\r\n if (isInputSameAsOutput) {\r\n let stack: string | undefined = undefined\r\n try {\r\n throw new Error()\r\n } catch (e) {\r\n // eslint-disable-next-line @typescript-eslint/no-extra-semi, no-extra-semi\r\n ;({ stack } = e as Error)\r\n }\r\n console.warn(\r\n 'The result function returned its own inputs without modification. e.g' +\r\n '\\n`createSelector([state => state.todos], todos => todos)`' +\r\n '\\nThis could lead to inefficient memoization and unnecessary re-renders.' +\r\n '\\nEnsure transformation logic is in the result function, and extraction logic is in the input selectors.',\r\n { stack }\r\n )\r\n }\r\n }\r\n}\r\n", "import type { CreateSelectorOptions, UnknownMemoizer } from '../types'\r\n\r\n/**\r\n * Runs a stability check to ensure the input selector results remain stable\r\n * when provided with the same arguments. This function is designed to detect\r\n * changes in the output of input selectors, which can impact the performance of memoized selectors.\r\n *\r\n * @param inputSelectorResultsObject - An object containing two arrays: `inputSelectorResults` and `inputSelectorResultsCopy`, representing the results of input selectors.\r\n * @param options - Options object consisting of a `memoize` function and a `memoizeOptions` object.\r\n * @param inputSelectorArgs - List of arguments being passed to the input selectors.\r\n *\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks/#inputstabilitycheck `inputStabilityCheck`}\r\n *\r\n * @since 5.0.0\r\n * @internal\r\n */\r\nexport const runInputStabilityCheck = (\r\n inputSelectorResultsObject: {\r\n inputSelectorResults: unknown[]\r\n inputSelectorResultsCopy: unknown[]\r\n },\r\n options: Required<\r\n Pick<\r\n CreateSelectorOptions<UnknownMemoizer, UnknownMemoizer>,\r\n 'memoize' | 'memoizeOptions'\r\n >\r\n >,\r\n inputSelectorArgs: unknown[] | IArguments\r\n) => {\r\n const { memoize, memoizeOptions } = options\r\n const { inputSelectorResults, inputSelectorResultsCopy } =\r\n inputSelectorResultsObject\r\n const createAnEmptyObject = memoize(() => ({}), ...memoizeOptions)\r\n // if the memoize method thinks the parameters are equal, these *should* be the same reference\r\n const areInputSelectorResultsEqual =\r\n createAnEmptyObject.apply(null, inputSelectorResults) ===\r\n createAnEmptyObject.apply(null, inputSelectorResultsCopy)\r\n if (!areInputSelectorResultsEqual) {\r\n let stack: string | undefined = undefined\r\n try {\r\n throw new Error()\r\n } catch (e) {\r\n // eslint-disable-next-line @typescript-eslint/no-extra-semi, no-extra-semi\r\n ;({ stack } = e as Error)\r\n }\r\n console.warn(\r\n 'An input selector returned a different result when passed same arguments.' +\r\n '\\nThis means your output selector will likely run more frequently than intended.' +\r\n '\\nAvoid returning a new reference inside your input selector, e.g.' +\r\n '\\n`createSelector([state => state.todos.map(todo => todo.id)], todoIds => todoIds.length)`',\r\n {\r\n arguments: inputSelectorArgs,\r\n firstInputs: inputSelectorResults,\r\n secondInputs: inputSelectorResultsCopy,\r\n stack\r\n }\r\n )\r\n }\r\n}\r\n", "import type { DevModeChecks } from '../types'\r\n\r\n/**\r\n * Global configuration for development mode checks. This specifies the default\r\n * frequency at which each development mode check should be performed.\r\n *\r\n * @since 5.0.0\r\n * @internal\r\n */\r\nexport const globalDevModeChecks: DevModeChecks = {\r\n inputStabilityCheck: 'once',\r\n identityFunctionCheck: 'once'\r\n}\r\n\r\n/**\r\n * Overrides the development mode checks settings for all selectors.\r\n *\r\n * Reselect performs additional checks in development mode to help identify and\r\n * warn about potential issues in selector behavior. This function allows you to\r\n * customize the behavior of these checks across all selectors in your application.\r\n *\r\n * **Note**: This setting can still be overridden per selector inside `createSelector`'s `options` object.\r\n * See {@link https://github.com/reduxjs/reselect#2-per-selector-by-passing-an-identityfunctioncheck-option-directly-to-createselector per-selector-configuration}\r\n * and {@linkcode CreateSelectorOptions.identityFunctionCheck identityFunctionCheck} for more details.\r\n *\r\n * _The development mode checks do not run in production builds._\r\n *\r\n * @param devModeChecks - An object specifying the desired settings for development mode checks. You can provide partial overrides. Unspecified settings will retain their current values.\r\n *\r\n * @example\r\n * ```ts\r\n * import { setGlobalDevModeChecks } from 'reselect'\r\n * import { DevModeChecks } from '../types'\r\n *\r\n * // Run only the first time the selector is called. (default)\r\n * setGlobalDevModeChecks({ inputStabilityCheck: 'once' })\r\n *\r\n * // Run every time the selector is called.\r\n * setGlobalDevModeChecks({ inputStabilityCheck: 'always' })\r\n *\r\n * // Never run the input stability check.\r\n * setGlobalDevModeChecks({ inputStabilityCheck: 'never' })\r\n *\r\n * // Run only the first time the selector is called. (default)\r\n * setGlobalDevModeChecks({ identityFunctionCheck: 'once' })\r\n *\r\n * // Run every time the selector is called.\r\n * setGlobalDevModeChecks({ identityFunctionCheck: 'always' })\r\n *\r\n * // Never run the identity function check.\r\n * setGlobalDevModeChecks({ identityFunctionCheck: 'never' })\r\n * ```\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks Development-Only Stability Checks}\r\n * @see {@link https://reselect.js.org/api/development-only-stability-checks#1-globally-through-setglobaldevmodechecks global-configuration}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport const setGlobalDevModeChecks = (\r\n devModeChecks: Partial<DevModeChecks>\r\n) => {\r\n Object.assign(globalDevModeChecks, devModeChecks)\r\n}\r\n", "import { runIdentityFunctionCheck } from './devModeChecks/identityFunctionCheck'\r\nimport { runInputStabilityCheck } from './devModeChecks/inputStabilityCheck'\r\nimport { globalDevModeChecks } from './devModeChecks/setGlobalDevModeChecks'\r\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\r\nimport type {\r\n DevModeChecks,\r\n Selector,\r\n SelectorArray,\r\n DevModeChecksExecutionInfo\r\n} from './types'\r\n\r\nexport const NOT_FOUND = /* @__PURE__ */ Symbol('NOT_FOUND')\r\nexport type NOT_FOUND_TYPE = typeof NOT_FOUND\r\n\r\n/**\r\n * Assert that the provided value is a function. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param func - The value to be checked.\r\n * @param errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsFunction<FunctionType extends Function>(\r\n func: unknown,\r\n errorMessage = `expected a function, instead received ${typeof func}`\r\n): asserts func is FunctionType {\r\n if (typeof func !== 'function') {\r\n throw new TypeError(errorMessage)\r\n }\r\n}\r\n\r\n/**\r\n * Assert that the provided value is an object. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param object - The value to be checked.\r\n * @param errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsObject<ObjectType extends Record<string, unknown>>(\r\n object: unknown,\r\n errorMessage = `expected an object, instead received ${typeof object}`\r\n): asserts object is ObjectType {\r\n if (typeof object !== 'object') {\r\n throw new TypeError(errorMessage)\r\n }\r\n}\r\n\r\n/**\r\n * Assert that the provided array is an array of functions. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param array - The array to be checked.\r\n * @param errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsArrayOfFunctions<FunctionType extends Function>(\r\n array: unknown[],\r\n errorMessage = `expected all items to be functions, instead received the following types: `\r\n): asserts array is FunctionType[] {\r\n if (\r\n !array.every((item): item is FunctionType => typeof item === 'function')\r\n ) {\r\n const itemTypes = array\r\n .map(item =>\r\n typeof item === 'function'\r\n ? `function ${item.name || 'unnamed'}()`\r\n : typeof item\r\n )\r\n .join(', ')\r\n throw new TypeError(`${errorMessage}[${itemTypes}]`)\r\n }\r\n}\r\n\r\n/**\r\n * Ensure that the input is an array. If it's already an array, it's returned as is.\r\n * If it's not an array, it will be wrapped in a new array.\r\n *\r\n * @param item - The item to be checked.\r\n * @returns An array containing the input item. If the input is already an array, it's returned without modification.\r\n */\r\nexport const ensureIsArray = (item: unknown) => {\r\n return Array.isArray(item) ? item : [item]\r\n}\r\n\r\n/**\r\n * Extracts the \"dependencies\" / \"input selectors\" from the arguments of `createSelector`.\r\n *\r\n * @param createSelectorArgs - Arguments passed to `createSelector` as an array.\r\n * @returns An array of \"input selectors\" / \"dependencies\".\r\n * @throws A `TypeError` if any of the input selectors is not function.\r\n */\r\nexport function getDependencies(createSelectorArgs: unknown[]) {\r\n const dependencies = Array.isArray(createSelectorArgs[0])\r\n ? createSelectorArgs[0]\r\n : createSelectorArgs\r\n\r\n assertIsArrayOfFunctions<Selector>(\r\n dependencies,\r\n `createSelector expects all input-selectors to be functions, but received the following types: `\r\n )\r\n\r\n return dependencies as SelectorArray\r\n}\r\n\r\n/**\r\n * Runs each input selector and returns their collective results as an array.\r\n *\r\n * @param dependencies - An array of \"dependencies\" or \"input selectors\".\r\n * @param inputSelectorArgs - An array of arguments being passed to the input selectors.\r\n * @returns An array of input selector results.\r\n */\r\nexport function collectInputSelectorResults(\r\n dependencies: SelectorArray,\r\n inputSelectorArgs: unknown[] | IArguments\r\n) {\r\n const inputSelectorResults = []\r\n const { length } = dependencies\r\n for (let i = 0; i < length; i++) {\r\n // @ts-ignore\r\n // apply arguments instead of spreading and mutate a local list of params for performance.\r\n inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs))\r\n }\r\n return inputSelectorResults\r\n}\r\n\r\n/**\r\n * Retrieves execution information for development mode checks.\r\n *\r\n * @param devModeChecks - Custom Settings for development mode checks. These settings will override the global defaults.\r\n * @param firstRun - Indicates whether it is the first time the selector has run.\r\n * @returns An object containing the execution information for each development mode check.\r\n */\r\nexport const getDevModeChecksExecutionInfo = (\r\n firstRun: boolean,\r\n devModeChecks: Partial<DevModeChecks>\r\n) => {\r\n const { identityFunctionCheck, inputStabilityCheck } = {\r\n ...globalDevModeChecks,\r\n ...devModeChecks\r\n }\r\n return {\r\n identityFunctionCheck: {\r\n shouldRun:\r\n identityFunctionCheck === 'always' ||\r\n (identityFunctionCheck === 'once' && firstRun),\r\n run: runIdentityFunctionCheck\r\n },\r\n inputStabilityCheck: {\r\n shouldRun:\r\n inputStabilityCheck === 'always' ||\r\n (inputStabilityCheck === 'once' && firstRun),\r\n run: runInputStabilityCheck\r\n }\r\n } satisfies DevModeChecksExecutionInfo\r\n}\r\n", "// Original autotracking implementation source:\r\n// - https://gist.github.com/pzuraq/79bf862e0f8cd9521b79c4b6eccdc4f9\r\n// Additional references:\r\n// - https://www.pzuraq.com/blog/how-autotracking-works\r\n// - https://v5.chriskrycho.com/journal/autotracking-elegant-dx-via-cutting-edge-cs/\r\nimport type { EqualityFn } from '../types'\r\nimport { assertIsFunction } from '../utils'\r\n\r\n// The global revision clock. Every time state changes, the clock increments.\r\nexport let $REVISION = 0\r\n\r\n// The current dependency tracker. Whenever we compute a cache, we create a Set\r\n// to track any dependencies that are used while computing. If no cache is\r\n// computing, then the tracker is null.\r\nlet CURRENT_TRACKER: Set<Cell<any> | TrackingCache> | null = null\r\n\r\n// Storage represents a root value in the system - the actual state of our app.\r\nexport class Cell<T> {\r\n revision = $REVISION\r\n\r\n _value: T\r\n _lastValue: T\r\n _isEqual: EqualityFn = tripleEq\r\n\r\n constructor(initialValue: T, isEqual: EqualityFn = tripleEq) {\r\n this._value = this._lastValue = initialValue\r\n this._isEqual = isEqual\r\n }\r\n\r\n // Whenever a storage value is read, it'll add itself to the current tracker if\r\n // one exists, entangling its state with that cache.\r\n get value() {\r\n CURRENT_TRACKER?.add(this)\r\n\r\n return this._value\r\n }\r\n\r\n // Whenever a storage value is updated, we bump the global revision clock,\r\n // assign the revision for this storage to the new value, _and_ we schedule a\r\n // rerender. This is important, and it's what makes autotracking _pull_\r\n // based. We don't actively tell the caches which depend on the storage that\r\n // anything has happened. Instead, we recompute the caches when needed.\r\n set value(newValue) {\r\n if (this.value === newValue) return\r\n\r\n this._value = newValue\r\n this.revision = ++$REVISION\r\n }\r\n}\r\n\r\nfunction tripleEq(a: unknown, b: unknown) {\r\n return a === b\r\n}\r\n\r\n// Caches represent derived state in the system. They are ultimately functions\r\n// that are memoized based on what state they use to produce their output,\r\n// meaning they will only rerun IFF a storage value that could affect the output\r\n// has changed. Otherwise, they'll return the cached value.\r\nexport class TrackingCache {\r\n _cachedValue: any\r\n _cachedRevision = -1\r\n _deps: any[] = []\r\n hits = 0\r\n\r\n fn: () => any\r\n\r\n constructor(fn: () => any) {\r\n this.fn = fn\r\n }\r\n\r\n clear() {\r\n this._cachedValue = undefined\r\n this._cachedRevision = -1\r\n this._deps = []\r\n this.hits = 0\r\n }\r\n\r\n get value() {\r\n // When getting the value for a Cache, first we check all the dependencies of\r\n // the cache to see what their current revision is. If the current revision is\r\n // greater than the cached revision, then something has changed.\r\n if (this.revision > this._cachedRevision) {\r\n const { fn } = this\r\n\r\n // We create a new dependency tracker for this cache. As the cache runs\r\n // its function, any Storage or Cache instances which are used while\r\n // computing will be added to this tracker. In the end, it will be the\r\n // full list of dependencies that this Cache depends on.\r\n const currentTracker = new Set<Cell<any>>()\r\n const prevTracker = CURRENT_TRACKER\r\n\r\n CURRENT_TRACKER = currentTracker\r\n\r\n // try {\r\n this._cachedValue = fn()\r\n // } finally {\r\n CURRENT_TRACKER = prevTracker\r\n this.hits++\r\n this._deps = Array.from(currentTracker)\r\n\r\n // Set the cached revision. This is the current clock count of all the\r\n // dependencies. If any dependency changes, this number will be less\r\n // than the new revision.\r\n this._cachedRevision = this.revision\r\n // }\r\n }\r\n\r\n // If there is a current tracker, it means another Cache is computing and\r\n // using this one, so we add this one to the tracker.\r\n CURRENT_TRACKER?.add(this)\r\n\r\n // Always return the cached value.\r\n return this._cachedValue\r\n }\r\n\r\n get revision() {\r\n // The current revision is the max of all the dependencies' revisions.\r\n return Math.max(...this._deps.map(d => d.revision), 0)\r\n }\r\n}\r\n\r\nexport function getValue<T>(cell: Cell<T>): T {\r\n if (!(cell instanceof Cell)) {\r\n console.warn('Not a valid cell! ', cell)\r\n }\r\n\r\n return cell.value\r\n}\r\n\r\ntype CellValue<T extends Cell<unknown>> = T extends Cell<infer U> ? U : never\r\n\r\nexport function setValue<T extends Cell<unknown>>(\r\n storage: T,\r\n value: CellValue<T>\r\n): void {\r\n if (!(storage instanceof Cell)) {\r\n throw new TypeError(\r\n 'setValue must be passed a tracked store created with `createStorage`.'\r\n )\r\n }\r\n\r\n storage.value = storage._lastValue = value\r\n}\r\n\r\nexport function createCell<T = unknown>(\r\n initialValue: T,\r\n isEqual: EqualityFn = tripleEq\r\n): Cell<T> {\r\n return new Cell(initialValue, isEqual)\r\n}\r\n\r\nexport function createCache<T = unknown>(fn: () => T): TrackingCache {\r\n assertIsFunction(\r\n fn,\r\n 'the first parameter to `createCache` must be a function'\r\n )\r\n\r\n return new TrackingCache(fn)\r\n}\r\n", "import type { Cell } from './autotracking'\r\nimport {\r\n getValue as consumeTag,\r\n createCell as createStorage,\r\n setValue\r\n} from './autotracking'\r\n\r\nexport type Tag = Cell<unknown>\r\n\r\nconst neverEq = (a: any, b: any): boolean => false\r\n\r\nexport function createTag(): Tag {\r\n return createStorage(null, neverEq)\r\n}\r\nexport { consumeTag }\r\nexport function dirtyTag(tag: Tag, value: any): void {\r\n setValue(tag, value)\r\n}\r\n\r\nexport interface Node<\r\n T extends Array<unknown> | Record<string, unknown> =\r\n | Array<unknown>\r\n | Record<string, unknown>\r\n> {\r\n collectionTag: Tag | null\r\n tag: Tag | null\r\n tags: Record<string, Tag>\r\n children: Record<string, Node>\r\n proxy: T\r\n value: T\r\n id: number\r\n}\r\n\r\nexport const consumeCollection = (node: Node): void => {\r\n let tag = node.collectionTag\r\n\r\n if (tag === null) {\r\n tag = node.collectionTag = createTag()\r\n }\r\n\r\n consumeTag(tag)\r\n}\r\n\r\nexport const dirtyCollection = (node: Node): void => {\r\n const tag = node.collectionTag\r\n\r\n if (tag !== null) {\r\n dirtyTag(tag, null)\r\n }\r\n}\r\n", "// Original source:\r\n// - https://github.com/simonihmig/tracked-redux/blob/master/packages/tracked-redux/src/-private/proxy.ts\r\n\r\nimport type { Node, Tag } from './tracking'\r\nimport {\r\n consumeCollection,\r\n consumeTag,\r\n createTag,\r\n dirtyCollection,\r\n dirtyTag\r\n} from './tracking'\r\n\r\nexport const REDUX_PROXY_LABEL = Symbol()\r\n\r\nlet nextId = 0\r\n\r\nconst proto = Object.getPrototypeOf({})\r\n\r\nclass ObjectTreeNode<T extends Record<string, unknown>> implements Node<T> {\r\n proxy: T = new Proxy(this, objectProxyHandler) as unknown as T\r\n tag = createTag()\r\n tags = {} as Record<string, Tag>\r\n children = {} as Record<string, Node>\r\n collectionTag = null\r\n id = nextId++\r\n\r\n constructor(public value: T) {\r\n this.value = value\r\n this.tag.value = value\r\n }\r\n}\r\n\r\nconst objectProxyHandler = {\r\n get(node: Node, key: string | symbol): unknown {\r\n function calculateResult() {\r\n const { value } = node\r\n\r\n const childValue = Reflect.get(value, key)\r\n\r\n if (typeof key === 'symbol') {\r\n return childValue\r\n }\r\n\r\n if (key in proto) {\r\n return childValue\r\n }\r\n\r\n if (typeof childValue === 'object' && childValue !== null) {\r\n let childNode = node.children[key]\r\n\r\n if (childNode === undefined) {\r\n childNode = node.children[key] = createNode(childValue)\r\n }\r\n\r\n if (childNode.tag) {\r\n consumeTag(childNode.tag)\r\n }\r\n\r\n return childNode.proxy\r\n } else {\r\n let tag = node.tags[key]\r\n\r\n if (tag === undefined) {\r\n tag = node.tags[key] = createTag()\r\n tag.value = childValue\r\n }\r\n\r\n consumeTag(tag)\r\n\r\n return childValue\r\n }\r\n }\r\n const res = calculateResult()\r\n return res\r\n },\r\n\r\n ownKeys(node: Node): ArrayLike<string | symbol> {\r\n consumeCollection(node)\r\n return Reflect.ownKeys(node.value)\r\n },\r\n\r\n getOwnPropertyDescriptor(\r\n node: Node,\r\n prop: string | symbol\r\n ): PropertyDescriptor | undefined {\r\n return Reflect.getOwnPropertyDescriptor(node.value, prop)\r\n },\r\n\r\n has(node: Node, prop: string | symbol): boolean {\r\n return Reflect.has(node.value, prop)\r\n }\r\n}\r\n\r\nclass ArrayTreeNode<T extends Array<unknown>> implements Node<T> {\r\n proxy: T = new Proxy([this], arrayProxyHandler) as unknown as T\r\n tag = createTag()\r\n tags = {}\r\n children = {}\r\n collectionTag = null\r\n id = nextId++\r\n\r\n constructor(public value: T) {\r\n this.value = value\r\n this.tag.value = value\r\n }\r\n}\r\n\r\nconst arrayProxyHandler = {\r\n get([node]: [Node], key: string | symbol): unknown {\r\n if (key === 'length') {\r\n consumeCollection(node)\r\n }\r\n\r\n return objectProxyHandler.get(node, key)\r\n },\r\n\r\n ownKeys([node]: [Node]): ArrayLike<string | symbol> {\r\n return objectProxyHandler.ownKeys(node)\r\n },\r\n\r\n getOwnPropertyDescriptor(\r\n [node]: [Node],\r\n prop: string | symbol\r\n ): PropertyDescriptor | undefined {\r\n return objectProxyHandler.getOwnPropertyDescriptor(node, prop)\r\n },\r\n\r\n has([node]: [Node], prop: string | symbol): boolean {\r\n return objectProxyHandler.has(node, prop)\r\n }\r\n}\r\n\r\nexport function createNode<T extends Array<unknown> | Record<string, unknown>>(\r\n value: T\r\n): Node<T> {\r\n if (Array.isArray(value)) {\r\n return new ArrayTreeNode(value)\r\n }\r\n\r\n return new ObjectTreeNode(value) as Node<T>\r\n}\r\n\r\nconst keysMap = new WeakMap<\r\n Array<unknown> | Record<string, unknown>,\r\n Set<string>\r\n>()\r\n\r\nexport function updateNode<T extends Array<unknown> | Record<string, unknown>>(\r\n node: Node<T>,\r\n newValue: T\r\n): void {\r\n const { value, tags, children } = node\r\n\r\n node.value = newValue\r\n\r\n if (\r\n Array.isArray(value) &&\r\n Array.isArray(newValue) &&\r\n value.length !== newValue.length\r\n ) {\r\n dirtyCollection(node)\r\n } else {\r\n if (value !== newValue) {\r\n let oldKeysSize = 0\r\n let newKeysSize = 0\r\n let anyKeysAdded = false\r\n\r\n for (const _key in value) {\r\n oldKeysSize++\r\n }\r\n\r\n for (const key in newValue) {\r\n newKeysSize++\r\n if (!(key in value)) {\r\n anyKeysAdded = true\r\n break\r\n }\r\n }\r\n\r\n const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize\r\n\r\n if (isDifferent) {\r\n dirtyCollection(node)\r\n }\r\n }\r\n }\r\n\r\n for (const key in tags) {\r\n const childValue = (value as Record<string, unknown>)[key]\r\n const newChildValue = (newValue as Record<string, unknown>)[key]\r\n\r\n if (childValue !== newChildValue) {\r\n dirtyCollection(node)\r\n dirtyTag(tags[key], newChildValue)\r\n }\r\n\r\n if (typeof newChildValue === 'object' && newChildValue !== null) {\r\n delete tags[key]\r\n }\r\n }\r\n\r\n for (const key in children) {\r\n const childNode = children[key]\r\n const newChildValue = (newValue as Record<string, unknown>)[key]\r\n\r\n const childValue = childNode.value\r\n\r\n if (childValue === newChildValue) {\r\n continue\r\n } else if (typeof newChildValue === 'object' && newChildValue !== null) {\r\n updateNode(childNode, newChildValue as Record<string, unknown>)\r\n } else {\r\n deleteNode(childNode)\r\n delete children[key]\r\n }\r\n }\r\n}\r\n\r\nfunction deleteNode(node: Node): void {\r\n if (node.tag) {\r\n dirtyTag(node.tag, null)\r\n }\r\n dirtyCollection(node)\r\n for (const key in node.tags) {\r\n dirtyTag(node.tags[key], null)\r\n }\r\n for (const key in node.children) {\r\n deleteNode(node.children[key])\r\n }\r\n}\r\n", "import type {\r\n AnyFunction,\r\n DefaultMemoizeFields,\r\n EqualityFn,\r\n Simplify\r\n} from './types'\r\n\r\nimport type { NOT_FOUND_TYPE } from './utils'\r\nimport { NOT_FOUND } from './utils'\r\n\r\n// Cache implementation based on Erik Rasmussen's `lru-memoize`:\r\n// https://github.com/erikras/lru-memoize\r\n\r\ninterface Entry {\r\n key: unknown\r\n value: unknown\r\n}\r\n\r\ninterface Cache {\r\n get(key: unknown): unknown | NOT_FOUND_TYPE\r\n put(key: unknown, value: unknown): void\r\n getEntries(): Entry[]\r\n clear(): void\r\n}\r\n\r\nfunction createSingletonCache(equals: EqualityFn): Cache {\r\n let entry: Entry | undefined\r\n return {\r\n get(key: unknown) {\r\n if (entry && equals(entry.key, key)) {\r\n return entry.value\r\n }\r\n\r\n return NOT_FOUND\r\n },\r\n\r\n put(key: unknown, value: unknown) {\r\n entry = { key, value }\r\n },\r\n\r\n getEntries() {\r\n return entry ? [entry] : []\r\n },\r\n\r\n clear() {\r\n entry = undefined\r\n }\r\n }\r\n}\r\n\r\nfunction createLruCache(maxSize: number, equals: EqualityFn): Cache {\r\n let entries: Entry[] = []\r\n\r\n function get(key: unknown) {\r\n const cacheIndex = entries.findIndex(entry => equals(key, entry.key))\r\n\r\n // We found a cached entry\r\n if (cacheIndex > -1) {\r\n const entry = entries[cacheIndex]\r\n\r\n // Cached entry not at top of cache, move it to the top\r\n if (cacheIndex > 0) {\r\n entries.splice(cacheIndex, 1)\r\n entries.unshift(entry)\r\n }\r\n\r\n return entry.value\r\n }\r\n\r\n // No entry found in cache, return sentinel\r\n return NOT_FOUND\r\n }\r\n\r\n function put(key: unknown, value: unknown) {\r\n if (get(key) === NOT_FOUND) {\r\n // TODO Is unshift slow?\r\n entries.unshift({ key, value })\r\n if (entries.length > maxSize) {\r\n entries.pop()\r\n }\r\n }\r\n }\r\n\r\n function getEntries() {\r\n return entries\r\n }\r\n\r\n function clear() {\r\n entries = []\r\n }\r\n\r\n return { get, put, getEntries, clear }\r\n}\r\n\r\n/**\r\n * Runs a simple reference equality check.\r\n * What {@linkcode lruMemoize lruMemoize} uses by default.\r\n *\r\n * **Note**: This function was previously known as `defaultEqualityCheck`.\r\n *\r\n * @public\r\n */\r\nexport const referenceEqualityCheck: EqualityFn = (a, b) => a === b\r\n\r\nexport function createCacheKeyComparator(equalityCheck: EqualityFn) {\r\n return function areArgumentsShallowlyEqual(\r\n prev: unknown[] | IArguments | null,\r\n next: unknown[] | IArguments | null\r\n ): boolean {\r\n if (prev === null || next === null || prev.length !== next.length) {\r\n return false\r\n }\r\n\r\n // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\r\n const { length } = prev\r\n for (let i = 0; i < length; i++) {\r\n if (!equalityCheck(prev[i], next[i])) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n }\r\n}\r\n\r\n/**\r\n * Options for configuring the behavior of a function memoized with\r\n * LRU (Least Recently Used) caching.\r\n *\r\n * @template Result - The type of the return value of the memoized function.\r\n *\r\n * @public\r\n */\r\nexport interface LruMemoizeOptions<Result = any> {\r\n /**\r\n * Function used to compare the individual arguments of the\r\n * provided calculation function.\r\n *\r\n * @default referenceEqualityCheck\r\n */\r\n equalityCheck?: EqualityFn\r\n\r\n /**\r\n * If provided, used to compare a newly generated output value against\r\n * previous values in the cache. If a match is found,\r\n * the old value is returned. This addresses the common\r\n * ```ts\r\n * todos.map(todo => todo.id)\r\n * ```\r\n * use case, where an update to another field in the original data causes\r\n * a recalculation due to changed references, but the output is still\r\n * effectively the same.\r\n *\r\n * @since 4.1.0\r\n */\r\n resultEqualityCheck?: EqualityFn<Result>\r\n\r\n /**\r\n * The maximum size of the cache used by the selector.\r\n * A size greater than 1 means the selector will use an\r\n * LRU (Least Recently Used) cache, allowing for the caching of multiple\r\n * results based on different sets of arguments.\r\n *\r\n * @default 1\r\n */\r\n maxSize?: number\r\n}\r\n\r\n/**\r\n * Creates a memoized version of a function with an optional\r\n * LRU (Least Recently Used) cache. The memoized function uses a cache to\r\n * store computed values. Depending on the `maxSize` option, it will use\r\n * either a singleton cache (for a single entry) or an\r\n * LRU cache (for multiple entries).\r\n *\r\n * **Note**: This function was previously known as `defaultMemoize`.\r\n *\r\n * @param func - The function to be memoized.\r\n * @param equalityCheckOrOptions - Either an equality check function or an options object.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/lruMemoize `lruMemoize`}\r\n *\r\n * @public\r\n */\r\nexport function lruMemoize<Func extends AnyFunction>(\r\n func: Func,\r\n equalityCheckOrOptions?: EqualityFn | LruMemoizeOptions<ReturnType<Func>>\r\n) {\r\n const providedOptions =\r\n typeof equalityCheckOrOptions === 'object'\r\n ? equalityCheckOrOptions\r\n : { equalityCheck: equalityCheckOrOptions }\r\n\r\n const {\r\n equalityCheck = referenceEqualityCheck,\r\n maxSize = 1,\r\n resultEqualityCheck\r\n } = providedOptions\r\n\r\n const comparator = createCacheKeyComparator(equalityCheck)\r\n\r\n let resultsCount = 0\r\n\r\n const cache =\r\n maxSize <= 1\r\n ? createSingletonCache(comparator)\r\n : createLruCache(maxSize, comparator)\r\n\r\n function memoized() {\r\n let value = cache.get(arguments) as ReturnType<Func>\r\n if (value === NOT_FOUND) {\r\n // apply arguments instead of spreading for performance.\r\n // @ts-ignore\r\n value = func.apply(null, arguments) as ReturnType<Func>\r\n resultsCount++\r\n\r\n if (resultEqualityCheck) {\r\n const entries = cache.getEntries()\r\n const matchingEntry = entries.find(entry =>\r\n resultEqualityCheck(entry.value as ReturnType<Func>, value)\r\n )\r\n\r\n if (matchingEntry) {\r\n value = matchingEntry.value as ReturnType<Func>\r\n resultsCount !== 0 && resultsCount--\r\n }\r\n }\r\n\r\n cache.put(arguments, value)\r\n }\r\n return value\r\n }\r\n\r\n memoized.clearCache = () => {\r\n cache.clear()\r\n memoized.resetResultsCount()\r\n }\r\n\r\n memoized.resultsCount = () => resultsCount\r\n\r\n memoized.resetResultsCount = () => {\r\n resultsCount = 0\r\n }\r\n\r\n return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n", "import { createNode, updateNode } from './proxy'\r\nimport type { Node } from './tracking'\r\n\r\nimport { createCacheKeyComparator, referenceEqualityCheck } from '../lruMemoize'\r\nimport type { AnyFunction, DefaultMemoizeFields, Simplify } from '../types'\r\nimport { createCache } from './autotracking'\r\n\r\n/**\r\n * Uses an \"auto-tracking\" approach inspired by the work of the Ember Glimmer team.\r\n * It uses a Proxy to wrap arguments and track accesses to nested fields\r\n * in your selector on first read. Later, when the selector is called with\r\n * new arguments, it identifies which accessed fields have changed and\r\n * only recalculates the result if one or more of those accessed fields have changed.\r\n * This allows it to be more precise than the shallow equality checks in `lruMemoize`.\r\n *\r\n * __Design Tradeoffs for `autotrackMemoize`:__\r\n * - Pros:\r\n * - It is likely to avoid excess calculations and recalculate fewer times than `lruMemoize` will,\r\n * which may also result in fewer component re-renders.\r\n * - Cons:\r\n * - It only has a cache size of 1.\r\n * - It is slower than `lruMemoize`, because it has to do more work. (How much slower is dependent on the number of accessed fields in a selector, number of calls, frequency of input changes, etc)\r\n * - It can have some unexpected behavior. Because it tracks nested field accesses,\r\n * cases where you don't access a field will not recalculate properly.\r\n * For example, a badly-written selector like:\r\n * ```ts\r\n * createSelector([state => state.todos], todos => todos)\r\n * ```\r\n * that just immediately returns the extracted value will never update, because it doesn't see any field accesses to check.\r\n *\r\n * __Use Cases for `autotrackMemoize`:__\r\n * - It is likely best used for cases where you need to access specific nested fields\r\n * in data, and avoid recalculating if other fields in the same data objects are immutably updated.\r\n *\r\n * @param func - The function to be memoized.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @example\r\n * <caption>Using `createSelector`</caption>\r\n * ```ts\r\n * import { unstable_autotrackMemoize as autotrackMemoize, createSelector } from 'reselect'\r\n *\r\n * const selectTodoIds = createSelector(\r\n * [(state: RootState) => state.todos],\r\n * (todos) => todos.map(todo => todo.id),\r\n * { memoize: autotrackMemoize }\r\n * )\r\n * ```\r\n *\r\n * @example\r\n * <caption>Using `createSelectorCreator`</caption>\r\n * ```ts\r\n * import { unstable_autotrackMemoize as autotrackMemoize, createSelectorCreator } from 'reselect'\r\n *\r\n * const createSelectorAutotrack = createSelectorCreator({ memoize: autotrackMemoize })\r\n *\r\n * const selectTodoIds = createSelectorAutotrack(\r\n * [(state: RootState) => state.todos],\r\n * (todos) => todos.map(todo => todo.id)\r\n * )\r\n * ```\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/unstable_autotrackMemoize autotrackMemoize}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n * @experimental\r\n */\r\nexport function autotrackMemoize<Func extends AnyFunction>(func: Func) {\r\n // we reference arguments instead of spreading them for performance reasons\r\n\r\n const node: Node<Record<string, unknown>> = createNode(\r\n [] as unknown as Record<string, unknown>\r\n )\r\n\r\n let lastArgs: IArguments | null = null\r\n\r\n const shallowEqual = createCacheKeyComparator(referenceEqualityCheck)\r\n\r\n const cache = createCache(() => {\r\n const res = func.apply(null, node.proxy as unknown as any[])\r\n return res\r\n })\r\n\r\n function memoized() {\r\n if (!shallowEqual(lastArgs, arguments)) {\r\n updateNode(node, arguments as unknown as Record<string, unknown>)\r\n lastArgs = arguments\r\n }\r\n return cache.value\r\n }\r\n\r\n memoized.clearCache = () => {\r\n return cache.clear()\r\n }\r\n\r\n return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n", "// Original source:\r\n// - https://github.com/facebook/react/blob/0b974418c9a56f6c560298560265dcf4b65784bc/packages/react/src/ReactCache.js\r\n\r\nimport type {\r\n AnyFunction,\r\n DefaultMemoizeFields,\r\n EqualityFn,\r\n Simplify\r\n} from './types'\r\n\r\nclass StrongRef<T> {\r\n constructor(private value: T) {}\r\n deref() {\r\n return this.value\r\n }\r\n}\r\n\r\nconst Ref =\r\n typeof WeakRef !== 'undefined'\r\n ? WeakRef\r\n : (StrongRef as unknown as typeof WeakRef)\r\n\r\nconst UNTERMINATED = 0\r\nconst TERMINATED = 1\r\n\r\ninterface UnterminatedCacheNode<T> {\r\n /**\r\n * Status, represents whether the cached computation returned a value or threw an error.\r\n */\r\n s: 0\r\n /**\r\n * Value, either the cached result or an error, depending on status.\r\n */\r\n v: void\r\n /**\r\n * Object cache, a `WeakMap` where non-primitive arguments are stored.\r\n */\r\n o: null | WeakMap<Function | Object, CacheNode<T>>\r\n /**\r\n * Primitive cache, a regular Map where primitive arguments are stored.\r\n */\r\n p: null | Map<string | number | null | void | symbol | boolean, CacheNode<T>>\r\n}\r\n\r\ninterface TerminatedCacheNode<T> {\r\n /**\r\n * Status, represents whether the cached computation returned a value or threw an error.\r\n */\r\n s: 1\r\n /**\r\n * Value, either the cached result or an error, depending on status.\r\n */\r\n v: T\r\n /**\r\n * Object cache, a `WeakMap` where non-primitive arguments are stored.\r\n */\r\n o: null | WeakMap<Function | Object, CacheNode<T>>\r\n /**\r\n * Primitive cache, a regular `Map` where primitive arguments are stored.\r\n */\r\n p: null | Map<string | number | null | void | symbol | boolean, CacheNode<T>>\r\n}\r\n\r\ntype CacheNode<T> = TerminatedCacheNode<T> | UnterminatedCacheNode<T>\r\n\r\nfunction createCacheNode<T>(): CacheNode<T> {\r\n return {\r\n s: UNTERMINATED,\r\n v: undefined,\r\n o: null,\r\n p: null\r\n }\r\n}\r\n\r\n/**\r\n * Configuration options for a memoization function utilizing `WeakMap` for\r\n * its caching mechanism.\r\n *\r\n * @template Result - The type of the return value of the memoized function.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport interface WeakMapMemoizeOptions<Result = any> {\r\n /**\r\n * If provided, used to compare a newly generated output value against previous values in the cache.\r\n * If a match is found, the old value is returned. This addresses the common\r\n * ```ts\r\n * todos.map(todo => todo.id)\r\n * ```\r\n * use case, where an update to another field in the original data causes a recalculation\r\n * due to changed references, but the output is still effectively the same.\r\n *\r\n * @since 5.0.0\r\n */\r\n resultEqualityCheck?: EqualityFn<Result>\r\n}\r\n\r\n/**\r\n * Creates a tree of `WeakMap`-based cache nodes based on the identity of the\r\n * arguments it's been called with (in this case, the extracted values from your input selectors).\r\n * This allows `weakMapMemoize` to have an effectively infinite cache size.\r\n * Cache results will be kept in memory as long as references to the arguments still exist,\r\n * and then cleared out as the arguments are garbage-collected.\r\n *\r\n * __Design Tradeoffs for `weakMapMemoize`:__\r\n * - Pros:\r\n * - It has an effectively infinite cache size, but you have no control over\r\n * how long values are kept in cache as it's based on garbage collection and `WeakMap`s.\r\n * - Cons:\r\n * - There's currently no way to alter the argument comparisons.\r\n * They're based on strict reference equality.\r\n * - It's roughly the same speed as `lruMemoize`, although likely a fraction slower.\r\n *\r\n * __Use Cases for `weakMapMemoize`:__\r\n * - This memoizer is likely best used for cases where you need to call the\r\n * same selector instance with many different arguments, such as a single\r\n * selector instance that is used in a list item component and called with\r\n * item IDs like:\r\n * ```ts\r\n * useSelector(state => selectSomeData(state, props.category))\r\n * ```\r\n * @param func - The function to be memoized.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @example\r\n * <caption>Using `createSelector`</caption>\r\n * ```ts\r\n * import { createSelector, weakMapMemoize } from 'reselect'\r\n *\r\n * interface RootState {\r\n * items: { id: number; category: string; name: string }[]\r\n * }\r\n *\r\n * const selectItemsByCategory = createSelector(\r\n * [\r\n * (state: RootState) => state.items,\r\n * (state: RootState, category: string) => category\r\n * ],\r\n * (items, category) => items.filter(item => item.category === category),\r\n * {\r\n * memoize: weakMapMemoize,\r\n * argsMemoize: weakMapMemoize\r\n * }\r\n * )\r\n * ```\r\n *\r\n * @example\r\n * <caption>Using `createSelectorCreator`</caption>\r\n * ```ts\r\n * import { createSelectorCreator, weakMapMemoize } from 'reselect'\r\n *\r\n * const createSelectorWeakMap = createSelectorCreator({ memoize: weakMapMemoize, argsMemoize: weakMapMemoize })\r\n *\r\n * const selectItemsByCategory = createSelectorWeakMap(\r\n * [\r\n * (state: RootState) => state.items,\r\n * (state: RootState, category: string) => category\r\n * ],\r\n * (items, category) => items.filter(item => item.category === category)\r\n * )\r\n * ```\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/weakMapMemoize `weakMapMemoize`}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n * @experimental\r\n */\r\nexport function weakMapMemoize<Func extends AnyFunction>(\r\n func: Func,\r\n options: WeakMapMemoizeOptions<ReturnType<Func>> = {}\r\n) {\r\n let fnNode = createCacheNode()\r\n const { resultEqualityCheck } = options\r\n\r\n let lastResult: WeakRef<object> | undefined\r\n\r\n let resultsCount = 0\r\n\r\n function memoized() {\r\n let cacheNode = fnNode\r\n const { length } = arguments\r\n for (let i = 0, l = length; i < l; i++) {\r\n const arg = arguments[i]\r\n if (\r\n typeof arg === 'function' ||\r\n (typeof arg === 'object' && arg !== null)\r\n ) {\r\n // Objects go into a WeakMap\r\n let objectCache = cacheNode.o\r\n if (objectCache === null) {\r\n cacheNode.o = objectCache = new WeakMap()\r\n }\r\n const objectNode = objectCache.get(arg)\r\n if (objectNode === undefined) {\r\n cacheNode = createCacheNode()\r\n objectCache.set(arg, cacheNode)\r\n } else {\r\n cacheNode = objectNode\r\n }\r\n } else {\r\n // Primitives go into a regular Map\r\n let primitiveCache = cacheNode.p\r\n if (primitiveCache === null) {\r\n cacheNode.p = primitiveCache = new Map()\r\n }\r\n const primitiveNode = primitiveCache.get(arg)\r\n if (primitiveNode === undefined) {\r\n cacheNode = createCacheNode()\r\n primitiveCache.set(arg, cacheNode)\r\n } else {\r\n cacheNode = primitiveNode\r\n }\r\n }\r\n }\r\n\r\n const terminatedNode = cacheNode as unknown as TerminatedCacheNode<any>\r\n\r\n let result\r\n\r\n if (cacheNode.s === TERMINATED) {\r\n result = cacheNode.v\r\n } else {\r\n // Allow errors to propagate\r\n result = func.apply(null, arguments as unknown as any[])\r\n resultsCount++\r\n\r\n if (resultEqualityCheck) {\r\n const lastResultValue = lastResult?.deref?.() ?? lastResult\r\n\r\n if (\r\n lastResultValue != null &&\r\n resultEqualityCheck(lastResultValue as ReturnType<Func>, result)\r\n ) {\r\n result = lastResultValue\r\n\r\n resultsCount !== 0 && resultsCount--\r\n }\r\n\r\n const needsWeakRef =\r\n (typeof result === 'object' && result !== null) ||\r\n typeof result === 'function'\r\n\r\n lastResult = needsWeakRef ? new Ref(result) : result\r\n }\r\n }\r\n\r\n terminatedNode.s = TERMINATED\r\n\r\n terminatedNode.v = result\r\n return result\r\n }\r\n\r\n memoized.clearCache = () => {\r\n fnNode = createCacheNode()\r\n memoized.resetResultsCount()\r\n }\r\n\r\n memoized.resultsCount = () => resultsCount\r\n\r\n memoized.resetResultsCount = () => {\r\n resultsCount = 0\r\n }\r\n\r\n return memoized as Func & Simplify<DefaultMemoizeFields>\r\n}\r\n", "import { weakMapMemoize } from './weakMapMemoize'\r\n\r\nimport type {\r\n Combiner,\r\n CreateSelectorOptions,\r\n DropFirstParameter,\r\n ExtractMemoizerFields,\r\n GetParamsFromSelectors,\r\n GetStateFromSelectors,\r\n InterruptRecursion,\r\n OutputSelector,\r\n Selector,\r\n SelectorArray,\r\n SetRequired,\r\n Simplify,\r\n UnknownMemoizer\r\n} from './types'\r\n\r\nimport {\r\n assertIsFunction,\r\n collectInputSelectorResults,\r\n ensureIsArray,\r\n getDependencies,\r\n getDevModeChecksExecutionInfo\r\n} from './utils'\r\n\r\n/**\r\n * An instance of `createSelector`, customized with a given memoize implementation.\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n * @template StateType - The type of state that the selectors created with this selector creator will operate on.\r\n *\r\n * @public\r\n */\r\nexport interface CreateSelectorFunction<\r\n MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n StateType = any\r\n> {\r\n /**\r\n * Creates a memoized selector function.\r\n *\r\n * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments and a `combiner` function.\r\n * @returns A memoized output selector.\r\n *\r\n * @template InputSelectors - The type of the input selectors as an array.\r\n * @template Result - The return type of the `combiner` as well as the output selector.\r\n * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n *\r\n * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n */\r\n <InputSelectors extends SelectorArray<StateType>, Result>(\r\n ...createSelectorArgs: [\r\n ...inputSelectors: InputSelectors,\r\n combiner: Combiner<InputSelectors, Result>\r\n ]\r\n ): OutputSelector<\r\n InputSelectors,\r\n Result,\r\n MemoizeFunction,\r\n ArgsMemoizeFunction\r\n > &\r\n InterruptRecursion\r\n\r\n /**\r\n * Creates a memoized selector function.\r\n *\r\n * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments, a `combiner` function and an `options` object.\r\n * @returns A memoized output selector.\r\n *\r\n * @template InputSelectors - The type of the input selectors as an array.\r\n * @template Result - The return type of the `combiner` as well as the output selector.\r\n * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n *\r\n * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n */\r\n <\r\n InputSelectors extends SelectorArray<StateType>,\r\n Result,\r\n OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n >(\r\n ...createSelectorArgs: [\r\n ...inputSelectors: InputSelectors,\r\n combiner: Combiner<InputSelectors, Result>,\r\n createSelectorOptions: Simplify<\r\n CreateSelectorOptions<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n >\r\n >\r\n ]\r\n ): OutputSelector<\r\n InputSelectors,\r\n Result,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n > &\r\n InterruptRecursion\r\n\r\n /**\r\n * Creates a memoized selector function.\r\n *\r\n * @param inputSelectors - An array of input selectors.\r\n * @param combiner - A function that Combines the input selectors and returns an output selector. Otherwise known as the result function.\r\n * @param createSelectorOptions - An optional options object that allows for further customization per selector.\r\n * @returns A memoized output selector.\r\n *\r\n * @template InputSelectors - The type of the input selectors array.\r\n * @template Result - The return type of the `combiner` as well as the output selector.\r\n * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n *\r\n * @see {@link https://reselect.js.org/api/createselector `createSelector`}\r\n */\r\n <\r\n InputSelectors extends SelectorArray<StateType>,\r\n Result,\r\n OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n >(\r\n inputSelectors: [...InputSelectors],\r\n combiner: Combiner<InputSelectors, Result>,\r\n createSelectorOptions?: Simplify<\r\n CreateSelectorOptions<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n >\r\n >\r\n ): OutputSelector<\r\n InputSelectors,\r\n Result,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n > &\r\n InterruptRecursion\r\n\r\n /**\r\n * Creates a \"pre-typed\" version of {@linkcode createSelector createSelector}\r\n * where the `state` type is predefined.\r\n *\r\n * This allows you to set the `state` type once, eliminating the need to\r\n * specify it with every {@linkcode createSelector createSelector} call.\r\n *\r\n * @returns A pre-typed `createSelector` with the state type already defined.\r\n *\r\n * @example\r\n * ```ts\r\n * import { createSelector } from 'reselect'\r\n *\r\n * export interface RootState {\r\n * todos: { id: number; completed: boolean }[]\r\n * alerts: { id: number; read: boolean }[]\r\n * }\r\n *\r\n * export const createAppSelector = createSelector.withTypes<RootState>()\r\n *\r\n * const selectTodoIds = createAppSelector(\r\n * [\r\n * // Type of `state` is set to `RootState`, no need to manually set the type\r\n * state => state.todos\r\n * ],\r\n * todos => todos.map(({ id }) => id)\r\n * )\r\n * ```\r\n * @template OverrideStateType - The specific type of state used by all selectors created with this selector creator.\r\n *\r\n * @see {@link https://reselect.js.org/api/createselector#defining-a-pre-typed-createselector `createSelector.withTypes`}\r\n *\r\n * @since 5.1.0\r\n */\r\n withTypes: <OverrideStateType extends StateType>() => CreateSelectorFunction<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction,\r\n OverrideStateType\r\n >\r\n}\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization function\r\n * and options for customizing memoization behavior.\r\n *\r\n * @param options - An options object containing the `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). It also provides additional options for customizing memoization. While the `memoize` property is mandatory, the rest are optional.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @example\r\n * ```ts\r\n * const customCreateSelector = createSelectorCreator({\r\n * memoize: customMemoize, // Function to be used to memoize `resultFunc`\r\n * memoizeOptions: [memoizeOption1, memoizeOption2], // Options passed to `customMemoize` as the second argument onwards\r\n * argsMemoize: customArgsMemoize, // Function to be used to memoize the selector's arguments\r\n * argsMemoizeOptions: [argsMemoizeOption1, argsMemoizeOption2] // Options passed to `customArgsMemoize` as the second argument onwards\r\n * })\r\n *\r\n * const customSelector = customCreateSelector(\r\n * [inputSelector1, inputSelector2],\r\n * resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`\r\n * )\r\n *\r\n * customSelector(\r\n * ...selectorArgs // Will be memoized by `customArgsMemoize`\r\n * )\r\n * ```\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelectorCreator#using-options-since-500 `createSelectorCreator`}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport function createSelectorCreator<\r\n MemoizeFunction extends UnknownMemoizer,\r\n ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n>(\r\n options: Simplify<\r\n SetRequired<\r\n CreateSelectorOptions<\r\n typeof weakMapMemoize,\r\n typeof weakMapMemoize,\r\n MemoizeFunction,\r\n ArgsMemoizeFunction\r\n >,\r\n 'memoize'\r\n >\r\n >\r\n): CreateSelectorFunction<MemoizeFunction, ArgsMemoizeFunction>\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization function\r\n * and options for customizing memoization behavior.\r\n *\r\n * @param memoize - The `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @example\r\n * ```ts\r\n * const customCreateSelector = createSelectorCreator(customMemoize, // Function to be used to memoize `resultFunc`\r\n * option1, // Will be passed as second argument to `customMemoize`\r\n * option2, // Will be passed as third argument to `customMemoize`\r\n * option3 // Will be passed as fourth argument to `customMemoize`\r\n * )\r\n *\r\n * const customSelector = customCreateSelector(\r\n * [inputSelector1, inputSelector2],\r\n * resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`\r\n * )\r\n * ```\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelectorCreator#using-memoize-and-memoizeoptions `createSelectorCreator`}\r\n *\r\n * @public\r\n */\r\nexport function createSelectorCreator<MemoizeFunction extends UnknownMemoizer>(\r\n memoize: MemoizeFunction,\r\n ...memoizeOptionsFromArgs: DropFirstParameter<MemoizeFunction>\r\n): CreateSelectorFunction<MemoizeFunction>\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization\r\n * function and options for customizing memoization behavior.\r\n *\r\n * @param memoizeOrOptions - Either A `memoize` function or an `options` object containing the `memoize` function.\r\n * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n * @template MemoizeOrOptions - The type of the first argument. It can either be a `memoize` function or an `options` object containing the `memoize` function.\r\n */\r\nexport function createSelectorCreator<\r\n MemoizeFunction extends UnknownMemoizer,\r\n ArgsMemoizeFunction extends UnknownMemoizer,\r\n MemoizeOrOptions extends\r\n | MemoizeFunction\r\n | SetRequired<\r\n CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n 'memoize'\r\n >\r\n>(\r\n memoizeOrOptions: MemoizeOrOptions,\r\n ...memoizeOptionsFromArgs: MemoizeOrOptions extends SetRequired<\r\n CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n 'memoize'\r\n >\r\n ? never\r\n : DropFirstParameter<MemoizeFunction>\r\n) {\r\n /** options initially passed into `createSelectorCreator`. */\r\n const createSelectorCreatorOptions: SetRequired<\r\n CreateSelectorOptions<MemoizeFunction, ArgsMemoizeFunction>,\r\n 'memoize'\r\n > = typeof memoizeOrOptions === 'function'\r\n ? {\r\n memoize: memoizeOrOptions as MemoizeFunction,\r\n memoizeOptions: memoizeOptionsFromArgs\r\n }\r\n : memoizeOrOptions\r\n\r\n const createSelector = <\r\n InputSelectors extends SelectorArray,\r\n Result,\r\n OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n >(\r\n ...createSelectorArgs: [\r\n ...inputSelectors: [...InputSelectors],\r\n combiner: Combiner<InputSelectors, Result>,\r\n createSelectorOptions?: CreateSelectorOptions<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n >\r\n ]\r\n ) => {\r\n let recomputations = 0\r\n let dependencyRecomputations = 0\r\n let lastResult: Result\r\n\r\n // Due to the intricacies of rest params, we can't do an optional arg after `...createSelectorArgs`.\r\n // So, start by declaring the default value here.\r\n // (And yes, the words 'memoize' and 'options' appear too many times in this next sequence.)\r\n let directlyPassedOptions: CreateSelectorOptions<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n > = {}\r\n\r\n // Normally, the result func or \"combiner\" is the last arg\r\n let resultFunc = createSelectorArgs.pop() as\r\n | Combiner<InputSelectors, Result>\r\n | CreateSelectorOptions<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n >\r\n\r\n // If the result func is actually an _object_, assume it's our options object\r\n if (typeof resultFunc === 'object') {\r\n directlyPassedOptions = resultFunc\r\n // and pop the real result func off\r\n resultFunc = createSelectorArgs.pop() as Combiner<InputSelectors, Result>\r\n }\r\n\r\n assertIsFunction(\r\n resultFunc,\r\n `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`\r\n )\r\n\r\n // Determine which set of options we're using. Prefer options passed directly,\r\n // but fall back to options given to `createSelectorCreator`.\r\n const combinedOptions = {\r\n ...createSelectorCreatorOptions,\r\n ...directlyPassedOptions\r\n }\r\n\r\n const {\r\n memoize,\r\n memoizeOptions = [],\r\n argsMemoize = weakMapMemoize,\r\n argsMemoizeOptions = [],\r\n devModeChecks = {}\r\n } = combinedOptions\r\n\r\n // Simplifying assumption: it's unlikely that the first options arg of the provided memoizer\r\n // is an array. In most libs I've looked at, it's an equality function or options object.\r\n // Based on that, if `memoizeOptions` _is_ an array, we assume it's a full\r\n // user-provided array of options. Otherwise, it must be just the _first_ arg, and so\r\n // we wrap it in an array so we can apply it.\r\n const finalMemoizeOptions = ensureIsArray(memoizeOptions)\r\n const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions)\r\n const dependencies = getDependencies(createSelectorArgs) as InputSelectors\r\n\r\n const memoizedResultFunc = memoize(function recomputationWrapper() {\r\n recomputations++\r\n // apply arguments instead of spreading for performance.\r\n // @ts-ignore\r\n return (resultFunc as Combiner<InputSelectors, Result>).apply(\r\n null,\r\n arguments as unknown as Parameters<Combiner<InputSelectors, Result>>\r\n )\r\n }, ...finalMemoizeOptions) as Combiner<InputSelectors, Result> &\r\n ExtractMemoizerFields<OverrideMemoizeFunction>\r\n\r\n let firstRun = true\r\n\r\n // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\r\n const selector = argsMemoize(function dependenciesChecker() {\r\n dependencyRecomputations++\r\n /** Return values of input selectors which the `resultFunc` takes as arguments. */\r\n const inputSelectorResults = collectInputSelectorResults(\r\n dependencies,\r\n arguments\r\n )\r\n\r\n // apply arguments instead of spreading for performance.\r\n // @ts-ignore\r\n lastResult = memoizedResultFunc.apply(null, inputSelectorResults)\r\n\r\n if (process.env.NODE_ENV !== 'production') {\r\n const { identityFunctionCheck, inputStabilityCheck } =\r\n getDevModeChecksExecutionInfo(firstRun, devModeChecks)\r\n if (identityFunctionCheck.shouldRun) {\r\n identityFunctionCheck.run(\r\n resultFunc as Combiner<InputSelectors, Result>,\r\n inputSelectorResults,\r\n lastResult\r\n )\r\n }\r\n\r\n if (inputStabilityCheck.shouldRun) {\r\n // make a second copy of the params, to check if we got the same results\r\n const inputSelectorResultsCopy = collectInputSelectorResults(\r\n dependencies,\r\n arguments\r\n )\r\n\r\n inputStabilityCheck.run(\r\n { inputSelectorResults, inputSelectorResultsCopy },\r\n { memoize, memoizeOptions: finalMemoizeOptions },\r\n arguments\r\n )\r\n }\r\n\r\n if (firstRun) firstRun = false\r\n }\r\n\r\n return lastResult\r\n }, ...finalArgsMemoizeOptions) as unknown as Selector<\r\n GetStateFromSelectors<InputSelectors>,\r\n Result,\r\n GetParamsFromSelectors<InputSelectors>\r\n > &\r\n ExtractMemoizerFields<OverrideArgsMemoizeFunction>\r\n\r\n return Object.assign(selector, {\r\n resultFunc,\r\n memoizedResultFunc,\r\n dependencies,\r\n dependencyRecomputations: () => dependencyRecomputations,\r\n resetDependencyRecomputations: () => {\r\n dependencyRecomputations = 0\r\n },\r\n lastResult: () => lastResult,\r\n recomputations: () => recomputations,\r\n resetRecomputations: () => {\r\n recomputations = 0\r\n },\r\n memoize,\r\n argsMemoize\r\n }) as OutputSelector<\r\n InputSelectors,\r\n Result,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n >\r\n }\r\n\r\n Object.assign(createSelector, {\r\n withTypes: () => createSelector\r\n })\r\n\r\n return createSelector as CreateSelectorFunction<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction\r\n >\r\n}\r\n\r\n/**\r\n * Accepts one or more \"input selectors\" (either as separate arguments or a single array),\r\n * a single \"result function\" / \"combiner\", and an optional options object, and\r\n * generates a memoized selector function.\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelector `createSelector`}\r\n *\r\n * @public\r\n */\r\nexport const createSelector =\r\n /* #__PURE__ */ createSelectorCreator(weakMapMemoize)\r\n", "import { createSelector } from './createSelectorCreator'\r\n\r\nimport type { CreateSelectorFunction } from './createSelectorCreator'\r\nimport type {\r\n InterruptRecursion,\r\n ObjectValuesToTuple,\r\n OutputSelector,\r\n Selector,\r\n Simplify,\r\n UnknownMemoizer\r\n} from './types'\r\nimport { assertIsObject } from './utils'\r\nimport type { weakMapMemoize } from './weakMapMemoize'\r\n\r\n/**\r\n * Represents a mapping of selectors to their return types.\r\n *\r\n * @template TObject - An object type where each property is a selector function.\r\n *\r\n * @public\r\n */\r\nexport type SelectorResultsMap<TObject extends SelectorsObject> = {\r\n [Key in keyof TObject]: ReturnType<TObject[Key]>\r\n}\r\n\r\n/**\r\n * Represents a mapping of selectors for each key in a given root state.\r\n *\r\n * This type is a utility that takes a root state object type and\r\n * generates a corresponding set of selectors. Each selector is associated\r\n * with a key in the root state, allowing for the selection\r\n * of specific parts of the state.\r\n *\r\n * @template RootState - The type of the root state object.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport type RootStateSelectors<RootState = any> = {\r\n [Key in keyof RootState]: Selector<RootState, RootState[Key], []>\r\n}\r\n\r\n/**\r\n * @deprecated Please use {@linkcode StructuredSelectorCreator.withTypes createStructuredSelector.withTypes<RootState>()} instead. This type will be removed in the future.\r\n * @template RootState - The type of the root state object.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport type TypedStructuredSelectorCreator<RootState = any> =\r\n /**\r\n * A convenience function that simplifies returning an object\r\n * made up of selector results.\r\n *\r\n * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n * @returns A memoized structured selector.\r\n *\r\n * @example\r\n * <caption>Modern Use Case</caption>\r\n * ```ts\r\n * import { createSelector, createStructuredSelector } from 'reselect'\r\n *\r\n * interface RootState {\r\n * todos: {\r\n * id: number\r\n * completed: boolean\r\n * title: string\r\n * description: string\r\n * }[]\r\n * alerts: { id: number; read: boolean }[]\r\n * }\r\n *\r\n * // This:\r\n * const structuredSelector = createStructuredSelector(\r\n * {\r\n * todos: (state: RootState) => state.todos,\r\n * alerts: (state: RootState) => state.alerts,\r\n * todoById: (state: RootState, id: number) => state.todos[id]\r\n * },\r\n * createSelector\r\n * )\r\n *\r\n * // Is essentially the same as this:\r\n * const selector = createSelector(\r\n * [\r\n * (state: RootState) => state.todos,\r\n * (state: RootState) => state.alerts,\r\n * (state: RootState, id: number) => state.todos[id]\r\n * ],\r\n * (todos, alerts, todoById) => {\r\n * return {\r\n * todos,\r\n * alerts,\r\n * todoById\r\n * }\r\n * }\r\n * )\r\n * ```\r\n *\r\n * @example\r\n * <caption>In your component:</caption>\r\n * ```tsx\r\n * import type { RootState } from 'createStructuredSelector/modernUseCase'\r\n * import { structuredSelector } from 'createStructuredSelector/modernUseCase'\r\n * import type { FC } from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * interface Props {\r\n * id: number\r\n * }\r\n *\r\n * const MyComponent: FC<Props> = ({ id }) => {\r\n * const { todos, alerts, todoById } = useSelector((state: RootState) =>\r\n * structuredSelector(state, id)\r\n * )\r\n *\r\n * return (\r\n * <div>\r\n * Next to do is:\r\n * <h2>{todoById.title}</h2>\r\n * <p>Description: {todoById.description}</p>\r\n * <ul>\r\n * <h3>All other to dos:</h3>\r\n * {todos.map(todo => (\r\n * <li key={todo.id}>{todo.title}</li>\r\n * ))}\r\n * </ul>\r\n * </div>\r\n * )\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * <caption>Simple Use Case</caption>\r\n * ```ts\r\n * const selectA = state => state.a\r\n * const selectB = state => state.b\r\n *\r\n * // The result function in the following selector\r\n * // is simply building an object from the input selectors\r\n * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({\r\n * a,\r\n * b\r\n * }))\r\n *\r\n * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }\r\n * ```\r\n *\r\n * @template InputSelectorsObject - The shape of the input selectors object.\r\n * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.\r\n * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.\r\n *\r\n * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n */\r\n <\r\n InputSelectorsObject extends RootStateSelectors<RootState> = RootStateSelectors<RootState>,\r\n MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n >(\r\n inputSelectorsObject: InputSelectorsObject,\r\n selectorCreator?: CreateSelectorFunction<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction\r\n >\r\n ) => OutputSelector<\r\n ObjectValuesToTuple<InputSelectorsObject>,\r\n Simplify<SelectorResultsMap<InputSelectorsObject>>,\r\n MemoizeFunction,\r\n ArgsMemoizeFunction\r\n > &\r\n InterruptRecursion\r\n\r\n/**\r\n * Represents an object where each property is a selector function.\r\n *\r\n * @template StateType - The type of state that all the selectors operate on.\r\n *\r\n * @public\r\n */\r\nexport type SelectorsObject<StateType = any> = Record<\r\n string,\r\n Selector<StateType>\r\n>\r\n\r\n/**\r\n * It provides a way to create structured selectors.\r\n * The structured selector can take multiple input selectors\r\n * and map their output to an object with specific keys.\r\n *\r\n * @template StateType - The type of state that the structured selectors created with this structured selector creator will operate on.\r\n *\r\n * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n *\r\n * @public\r\n */\r\nexport interface StructuredSelectorCreator<StateType = any> {\r\n /**\r\n * A convenience function that simplifies returning an object\r\n * made up of selector results.\r\n *\r\n * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n * @returns A memoized structured selector.\r\n *\r\n * @example\r\n * <caption>Modern Use Case</caption>\r\n * ```ts\r\n * import { createSelector, createStructuredSelector } from 'reselect'\r\n *\r\n * interface RootState {\r\n * todos: {\r\n * id: number\r\n * completed: boolean\r\n * title: string\r\n * description: string\r\n * }[]\r\n * alerts: { id: number; read: boolean }[]\r\n * }\r\n *\r\n * // This:\r\n * const structuredSelector = createStructuredSelector(\r\n * {\r\n * todos: (state: RootState) => state.todos,\r\n * alerts: (state: RootState) => state.alerts,\r\n * todoById: (state: RootState, id: number) => state.todos[id]\r\n * },\r\n * createSelector\r\n * )\r\n *\r\n * // Is essentially the same as this:\r\n * const selector = createSelector(\r\n * [\r\n * (state: RootState) => state.todos,\r\n * (state: RootState) => state.alerts,\r\n * (state: RootState, id: number) => state.todos[id]\r\n * ],\r\n * (todos, alerts, todoById) => {\r\n * return {\r\n * todos,\r\n * alerts,\r\n * todoById\r\n * }\r\n * }\r\n * )\r\n * ```\r\n *\r\n * @example\r\n * <caption>In your component:</caption>\r\n * ```tsx\r\n * import type { RootState } from 'createStructuredSelector/modernUseCase'\r\n * import { structuredSelector } from 'createStructuredSelector/modernUseCase'\r\n * import type { FC } from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * interface Props {\r\n * id: number\r\n * }\r\n *\r\n * const MyComponent: FC<Props> = ({ id }) => {\r\n * const { todos, alerts, todoById } = useSelector((state: RootState) =>\r\n * structuredSelector(state, id)\r\n * )\r\n *\r\n * return (\r\n * <div>\r\n * Next to do is:\r\n * <h2>{todoById.title}</h2>\r\n * <p>Description: {todoById.description}</p>\r\n * <ul>\r\n * <h3>All other to dos:</h3>\r\n * {todos.map(todo => (\r\n * <li key={todo.id}>{todo.title}</li>\r\n * ))}\r\n * </ul>\r\n * </div>\r\n * )\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * <caption>Simple Use Case</caption>\r\n * ```ts\r\n * const selectA = state => state.a\r\n * const selectB = state => state.b\r\n *\r\n * // The result function in the following selector\r\n * // is simply building an object from the input selectors\r\n * const structuredSelector = createSelector(selectA, selectB, (a, b) => ({\r\n * a,\r\n * b\r\n * }))\r\n *\r\n * const result = structuredSelector({ a: 1, b: 2 }) // will produce { x: 1, y: 2 }\r\n * ```\r\n *\r\n * @template InputSelectorsObject - The shape of the input selectors object.\r\n * @template MemoizeFunction - The type of the memoize function that is used to create the structured selector. It defaults to `weakMapMemoize`.\r\n * @template ArgsMemoizeFunction - The type of the of the memoize function that is used to memoize the arguments passed into the generated structured selector. It defaults to `weakMapMemoize`.\r\n *\r\n * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n */\r\n <\r\n InputSelectorsObject extends SelectorsObject<StateType>,\r\n MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n >(\r\n inputSelectorsObject: InputSelectorsObject,\r\n selectorCreator?: CreateSelectorFunction<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction\r\n >\r\n ): OutputSelector<\r\n ObjectValuesToTuple<InputSelectorsObject>,\r\n Simplify<SelectorResultsMap<InputSelectorsObject>>,\r\n MemoizeFunction,\r\n ArgsMemoizeFunction\r\n > &\r\n InterruptRecursion\r\n\r\n /**\r\n * Creates a \"pre-typed\" version of\r\n * {@linkcode createStructuredSelector createStructuredSelector}\r\n * where the `state` type is predefined.\r\n *\r\n * This allows you to set the `state` type once, eliminating the need to\r\n * specify it with every\r\n * {@linkcode createStructuredSelector createStructuredSelector} call.\r\n *\r\n * @returns A pre-typed `createStructuredSelector` with the state type already defined.\r\n *\r\n * @example\r\n * ```ts\r\n * import { createStructuredSelector } from 'reselect'\r\n *\r\n * export interface RootState {\r\n * todos: { id: number; completed: boolean }[]\r\n * alerts: { id: number; read: boolean }[]\r\n * }\r\n *\r\n * export const createStructuredAppSelector =\r\n * createStructuredSelector.withTypes<RootState>()\r\n *\r\n * const structuredAppSelector = createStructuredAppSelector({\r\n * // Type of `state` is set to `RootState`, no need to manually set the type\r\n * todos: state => state.todos,\r\n * alerts: state => state.alerts,\r\n * todoById: (state, id: number) => state.todos[id]\r\n * })\r\n *\r\n * ```\r\n * @template OverrideStateType - The specific type of state used by all structured selectors created with this structured selector creator.\r\n *\r\n * @see {@link https://reselect.js.org/api/createstructuredselector#defining-a-pre-typed-createstructuredselector `createSelector.withTypes`}\r\n *\r\n * @since 5.1.0\r\n */\r\n withTypes: <\r\n OverrideStateType extends StateType\r\n >() => StructuredSelectorCreator<OverrideStateType>\r\n}\r\n\r\n/**\r\n * A convenience function that simplifies returning an object\r\n * made up of selector results.\r\n *\r\n * @param inputSelectorsObject - A key value pair consisting of input selectors.\r\n * @param selectorCreator - A custom selector creator function. It defaults to `createSelector`.\r\n * @returns A memoized structured selector.\r\n *\r\n * @example\r\n * <caption>Modern Use Case</caption>\r\n * ```ts\r\n * import { createSelector, createStructuredSelector } from 'reselect'\r\n *\r\n * interface RootState {\r\n * todos: {\r\n * id: number\r\n * completed: boolean\r\n * title: string\r\n * description: string\r\n * }[]\r\n * alerts: { id: number; read: boolean }[]\r\n * }\r\n *\r\n * // This:\r\n * const structuredSelector = createStructuredSelector(\r\n * {\r\n * todos: (state: RootState) => state.todos,\r\n * alerts: (state: RootState) => state.alerts,\r\n * todoById: (state: RootState, id: number) => state.todos[id]\r\n * },\r\n * createSelector\r\n * )\r\n *\r\n * // Is essentially the same as this:\r\n * const selector = createSelector(\r\n * [\r\n * (state: RootState) => state.todos,\r\n * (state: RootState) => state.alerts,\r\n * (state: RootState, id: number) => state.todos[id]\r\n * ],\r\n * (todos, alerts, todoById) => {\r\n * return {\r\n * todos,\r\n * alerts,\r\n * todoById\r\n * }\r\n * }\r\n * )\r\n * ```\r\n *\r\n * @see {@link https://reselect.js.org/api/createStructuredSelector `createStructuredSelector`}\r\n *\r\n * @public\r\n */\r\nexport const createStructuredSelector: StructuredSelectorCreator =\r\n Object.assign(\r\n <\r\n InputSelectorsObject extends SelectorsObject,\r\n MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n >(\r\n inputSelectorsObject: InputSelectorsObject,\r\n selectorCreator: CreateSelectorFunction<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction\r\n > = createSelector as CreateSelectorFunction<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction\r\n >\r\n ) => {\r\n assertIsObject(\r\n inputSelectorsObject,\r\n 'createStructuredSelector expects first argument to be an object ' +\r\n `where each property is a selector, instead received a ${typeof inputSelectorsObject}`\r\n )\r\n const inputSelectorKeys = Object.keys(inputSelectorsObject)\r\n const dependencies = inputSelectorKeys.map(\r\n key => inputSelectorsObject[key]\r\n )\r\n const structuredSelector = selectorCreator(\r\n dependencies,\r\n (...inputSelectorResults: any[]) => {\r\n return inputSelectorResults.reduce((composition, value, index) => {\r\n composition[inputSelectorKeys[index]] = value\r\n return composition\r\n }, {})\r\n }\r\n )\r\n return structuredSelector\r\n },\r\n { withTypes: () => createStructuredSelector }\r\n ) as StructuredSelectorCreator\r\n", "// src/index.ts\nfunction createThunkMiddleware(extraArgument) {\n const middleware = ({ dispatch, getState }) => (next) => (action) => {\n if (typeof action === \"function\") {\n return action(dispatch, getState, extraArgument);\n }\n return next(action);\n };\n return middleware;\n}\nvar thunk = createThunkMiddleware();\nvar withExtraArgument = createThunkMiddleware;\nexport {\n thunk,\n withExtraArgument\n};\n", "// This must remain here so that the `mangleErrors.cjs` build script\n// does not have to import this into each source file it rewrites.\nimport { formatProdErrorMessage } from './formatProdErrorMessage';\nexport * from 'redux';\nexport { produce as createNextState, current, freeze, original, isDraft } from 'immer';\nexport type { Draft } from 'immer';\nexport { createSelector, createSelectorCreator, lruMemoize, weakMapMemoize } from 'reselect';\nexport type { Selector, OutputSelector } from 'reselect';\nexport { createDraftSafeSelector, createDraftSafeSelectorCreator } from './createDraftSafeSelector';\nexport type { ThunkAction, ThunkDispatch, ThunkMiddleware } from 'redux-thunk';\nexport {\n// js\nconfigureStore } from './configureStore';\nexport type {\n// types\nConfigureStoreOptions, EnhancedStore } from './configureStore';\nexport type { DevToolsEnhancerOptions } from './devtoolsExtension';\nexport {\n// js\ncreateAction, isActionCreator, isFSA as isFluxStandardAction } from './createAction';\nexport type {\n// types\nPayloadAction, PayloadActionCreator, ActionCreatorWithNonInferrablePayload, ActionCreatorWithOptionalPayload, ActionCreatorWithPayload, ActionCreatorWithoutPayload, ActionCreatorWithPreparedPayload, PrepareAction } from './createAction';\nexport {\n// js\ncreateReducer } from './createReducer';\nexport type {\n// types\nActions, CaseReducer, CaseReducers } from './createReducer';\nexport {\n// js\ncreateSlice, buildCreateSlice, asyncThunkCreator, ReducerType } from './createSlice';\nexport type {\n// types\nCreateSliceOptions, Slice, CaseReducerActions, SliceCaseReducers, ValidateSliceCaseReducers, CaseReducerWithPrepare, ReducerCreators, SliceSelectors } from './createSlice';\nexport type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware';\nexport { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware';\nexport {\n// js\ncreateImmutableStateInvariantMiddleware, isImmutableDefault } from './immutableStateInvariantMiddleware';\nexport type {\n// types\nImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware';\nexport {\n// js\ncreateSerializableStateInvariantMiddleware, findNonSerializableValue, isPlain } from './serializableStateInvariantMiddleware';\nexport type {\n// types\nSerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware';\nexport type {\n// types\nActionReducerMapBuilder } from './mapBuilders';\nexport { Tuple } from './utils';\nexport { createEntityAdapter } from './entities/create_adapter';\nexport type { EntityState, EntityAdapter, EntitySelectors, EntityStateAdapter, EntityId, Update, IdSelector, Comparer } from './entities/models';\nexport { createAsyncThunk, unwrapResult, miniSerializeError } from './createAsyncThunk';\nexport type { AsyncThunk, AsyncThunkOptions, AsyncThunkAction, AsyncThunkPayloadCreatorReturnValue, AsyncThunkPayloadCreator, GetState, GetThunkAPI, SerializedError, CreateAsyncThunkFunction } from './createAsyncThunk';\nexport {\n// js\nisAllOf, isAnyOf, isPending, isRejected, isFulfilled, isAsyncThunkAction, isRejectedWithValue } from './matchers';\nexport type {\n// types\nActionMatchingAllOf, ActionMatchingAnyOf } from './matchers';\nexport { nanoid } from './nanoid';\nexport type { ListenerEffect, ListenerMiddleware, ListenerEffectAPI, ListenerMiddlewareInstance, CreateListenerMiddlewareOptions, ListenerErrorHandler, TypedStartListening, TypedAddListener, TypedStopListening, TypedRemoveListener, UnsubscribeListener, UnsubscribeListenerOptions, ForkedTaskExecutor, ForkedTask, ForkedTaskAPI, AsyncTaskExecutor, SyncTaskExecutor, TaskCancelled, TaskRejected, TaskResolved, TaskResult } from './listenerMiddleware/index';\nexport type { AnyListenerPredicate } from './listenerMiddleware/types';\nexport { createListenerMiddleware, addListener, removeListener, clearAllListeners, TaskAbortError } from './listenerMiddleware/index';\nexport type { AddMiddleware, DynamicDispatch, DynamicMiddlewareInstance, GetDispatchType as GetDispatch, MiddlewareApiConfig } from './dynamicMiddleware/types';\nexport { createDynamicMiddleware } from './dynamicMiddleware/index';\nexport { SHOULD_AUTOBATCH, prepareAutoBatched, autoBatchEnhancer } from './autoBatchEnhancer';\nexport type { AutoBatchOptions } from './autoBatchEnhancer';\nexport { combineSlices } from './combineSlices';\nexport type { CombinedSliceReducer, WithSlice } from './combineSlices';\nexport type { ExtractDispatchExtensions as TSHelpersExtractDispatchExtensions, SafePromise } from './tsHelpers';\nexport { formatProdErrorMessage } from './formatProdErrorMessage';", "import { current, isDraft } from 'immer';\nimport { createSelectorCreator, weakMapMemoize } from 'reselect';\nexport const createDraftSafeSelectorCreator: typeof createSelectorCreator = (...args: unknown[]) => {\n const createSelector = (createSelectorCreator as any)(...args);\n const createDraftSafeSelector = Object.assign((...args: unknown[]) => {\n const selector = createSelector(...args);\n const wrappedSelector = (value: unknown, ...rest: unknown[]) => selector(isDraft(value) ? current(value) : value, ...rest);\n Object.assign(wrappedSelector, selector);\n return wrappedSelector as any;\n }, {\n withTypes: () => createDraftSafeSelector\n });\n return createDraftSafeSelector;\n};\n\n/**\n * \"Draft-Safe\" version of `reselect`'s `createSelector`:\n * If an `immer`-drafted object is passed into the resulting selector's first argument,\n * the selector will act on the current draft value, instead of returning a cached value\n * that might be possibly outdated if the draft has been modified since.\n * @public\n */\nexport const createDraftSafeSelector = /* @__PURE__ */\ncreateDraftSafeSelectorCreator(weakMapMemoize);", "import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6, formatProdErrorMessage as _formatProdErrorMessage7 } from \"@reduxjs/toolkit\";\nimport type { Reducer, ReducersMapObject, Middleware, Action, StoreEnhancer, Store, UnknownAction } from 'redux';\nimport { applyMiddleware, createStore, compose, combineReducers, isPlainObject } from 'redux';\nimport type { DevToolsEnhancerOptions as DevToolsOptions } from './devtoolsExtension';\nimport { composeWithDevTools } from './devtoolsExtension';\nimport type { ThunkMiddlewareFor, GetDefaultMiddleware } from './getDefaultMiddleware';\nimport { buildGetDefaultMiddleware } from './getDefaultMiddleware';\nimport type { ExtractDispatchExtensions, ExtractStoreExtensions, ExtractStateExtensions, UnknownIfNonSpecific } from './tsHelpers';\nimport type { Tuple } from './utils';\nimport type { GetDefaultEnhancers } from './getDefaultEnhancers';\nimport { buildGetDefaultEnhancers } from './getDefaultEnhancers';\n\n/**\n * Options for `configureStore()`.\n *\n * @public\n */\nexport interface ConfigureStoreOptions<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<Middlewares<S>>, E extends Tuple<Enhancers> = Tuple<Enhancers>, P = S> {\n /**\n * A single reducer function that will be used as the root reducer, or an\n * object of slice reducers that will be passed to `combineReducers()`.\n */\n reducer: Reducer<S, A, P> | ReducersMapObject<S, A, P>;\n\n /**\n * An array of Redux middleware to install, or a callback receiving `getDefaultMiddleware` and returning a Tuple of middleware.\n * If not supplied, defaults to the set of middleware returned by `getDefaultMiddleware()`.\n *\n * @example `middleware: (gDM) => gDM().concat(logger, apiMiddleware, yourCustomMiddleware)`\n * @see https://redux-toolkit.js.org/api/getDefaultMiddleware#intended-usage\n */\n middleware?: (getDefaultMiddleware: GetDefaultMiddleware<S>) => M;\n\n /**\n * Whether to enable Redux DevTools integration. Defaults to `true`.\n *\n * Additional configuration can be done by passing Redux DevTools options\n */\n devTools?: boolean | DevToolsOptions;\n\n /**\n * The initial state, same as Redux's createStore.\n * You may optionally specify it to hydrate the state\n * from the server in universal apps, or to restore a previously serialized\n * user session. If you use `combineReducers()` to produce the root reducer\n * function (either directly or indirectly by passing an object as `reducer`),\n * this must be an object with the same shape as the reducer map keys.\n */\n // we infer here, and instead complain if the reducer doesn't match\n preloadedState?: P;\n\n /**\n * The store enhancers to apply. See Redux's `createStore()`.\n * All enhancers will be included before the DevTools Extension enhancer.\n * If you need to customize the order of enhancers, supply a callback\n * function that will receive a `getDefaultEnhancers` function that returns a Tuple,\n * and should return a Tuple of enhancers (such as `getDefaultEnhancers().concat(offline)`).\n * If you only need to add middleware, you can use the `middleware` parameter instead.\n */\n enhancers?: (getDefaultEnhancers: GetDefaultEnhancers<M>) => E;\n}\nexport type Middlewares<S> = ReadonlyArray<Middleware<{}, S>>;\ntype Enhancers = ReadonlyArray<StoreEnhancer>;\n\n/**\n * A Redux store returned by `configureStore()`. Supports dispatching\n * side-effectful _thunks_ in addition to plain actions.\n *\n * @public\n */\nexport type EnhancedStore<S = any, A extends Action = UnknownAction, E extends Enhancers = Enhancers> = ExtractStoreExtensions<E> & Store<S, A, UnknownIfNonSpecific<ExtractStateExtensions<E>>>;\n\n/**\n * A friendly abstraction over the standard Redux `createStore()` function.\n *\n * @param options The store configuration.\n * @returns A configured Redux store.\n *\n * @public\n */\nexport function configureStore<S = any, A extends Action = UnknownAction, M extends Tuple<Middlewares<S>> = Tuple<[ThunkMiddlewareFor<S>]>, E extends Tuple<Enhancers> = Tuple<[StoreEnhancer<{\n dispatch: ExtractDispatchExtensions<M>;\n}>, StoreEnhancer]>, P = S>(options: ConfigureStoreOptions<S, A, M, E, P>): EnhancedStore<S, A, E> {\n const getDefaultMiddleware = buildGetDefaultMiddleware<S>();\n const {\n reducer = undefined,\n middleware,\n devTools = true,\n preloadedState = undefined,\n enhancers = undefined\n } = options || {};\n let rootReducer: Reducer<S, A, P>;\n if (typeof reducer === 'function') {\n rootReducer = reducer;\n } else if (isPlainObject(reducer)) {\n rootReducer = combineReducers(reducer) as unknown as Reducer<S, A, P>;\n } else {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(1) : '`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers');\n }\n if (process.env.NODE_ENV !== 'production' && middleware && typeof middleware !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(2) : '`middleware` field must be a callback');\n }\n let finalMiddleware: Tuple<Middlewares<S>>;\n if (typeof middleware === 'function') {\n finalMiddleware = middleware(getDefaultMiddleware);\n if (process.env.NODE_ENV !== 'production' && !Array.isArray(finalMiddleware)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(3) : 'when using a middleware builder function, an array of middleware must be returned');\n }\n } else {\n finalMiddleware = getDefaultMiddleware();\n }\n if (process.env.NODE_ENV !== 'production' && finalMiddleware.some((item: any) => typeof item !== 'function')) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(4) : 'each middleware provided to configureStore must be a function');\n }\n let finalCompose = compose;\n if (devTools) {\n finalCompose = composeWithDevTools({\n // Enable capture of stack traces for dispatched Redux actions\n trace: process.env.NODE_ENV !== 'production',\n ...(typeof devTools === 'object' && devTools)\n });\n }\n const middlewareEnhancer = applyMiddleware(...finalMiddleware);\n const getDefaultEnhancers = buildGetDefaultEnhancers<M>(middlewareEnhancer);\n if (process.env.NODE_ENV !== 'production' && enhancers && typeof enhancers !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(5) : '`enhancers` field must be a callback');\n }\n let storeEnhancers = typeof enhancers === 'function' ? enhancers(getDefaultEnhancers) : getDefaultEnhancers();\n if (process.env.NODE_ENV !== 'production' && !Array.isArray(storeEnhancers)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(6) : '`enhancers` callback must return an array');\n }\n if (process.env.NODE_ENV !== 'production' && storeEnhancers.some((item: any) => typeof item !== 'function')) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(7) : 'each enhancer provided to configureStore must be a function');\n }\n if (process.env.NODE_ENV !== 'production' && finalMiddleware.length && !storeEnhancers.includes(middlewareEnhancer)) {\n console.error('middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`');\n }\n const composedEnhancer: StoreEnhancer<any> = finalCompose(...storeEnhancers);\n return createStore(rootReducer, preloadedState as P, composedEnhancer);\n}", "import type { Action, ActionCreator, StoreEnhancer } from 'redux';\nimport { compose } from 'redux';\n\n/**\n * @public\n */\nexport interface DevToolsEnhancerOptions {\n /**\n * the instance name to be showed on the monitor page. Default value is `document.title`.\n * If not specified and there's no document title, it will consist of `tabId` and `instanceId`.\n */\n name?: string;\n /**\n * action creators functions to be available in the Dispatcher.\n */\n actionCreators?: ActionCreator<any>[] | {\n [key: string]: ActionCreator<any>;\n };\n /**\n * if more than one action is dispatched in the indicated interval, all new actions will be collected and sent at once.\n * It is the joint between performance and speed. When set to `0`, all actions will be sent instantly.\n * Set it to a higher value when experiencing perf issues (also `maxAge` to a lower value).\n *\n * @default 500 ms.\n */\n latency?: number;\n /**\n * (> 1) - maximum allowed actions to be stored in the history tree. The oldest actions are removed once maxAge is reached. It's critical for performance.\n *\n * @default 50\n */\n maxAge?: number;\n /**\n * Customizes how actions and state are serialized and deserialized. Can be a boolean or object. If given a boolean, the behavior is the same as if you\n * were to pass an object and specify `options` as a boolean. Giving an object allows fine-grained customization using the `replacer` and `reviver`\n * functions.\n */\n serialize?: boolean | {\n /**\n * - `undefined` - will use regular `JSON.stringify` to send data (it's the fast mode).\n * - `false` - will handle also circular references.\n * - `true` - will handle also date, regex, undefined, error objects, symbols, maps, sets and functions.\n * - object, which contains `date`, `regex`, `undefined`, `error`, `symbol`, `map`, `set` and `function` keys.\n * For each of them you can indicate if to include (by setting as `true`).\n * For `function` key you can also specify a custom function which handles serialization.\n * See [`jsan`](https://github.com/kolodny/jsan) for more details.\n */\n options?: undefined | boolean | {\n date?: true;\n regex?: true;\n undefined?: true;\n error?: true;\n symbol?: true;\n map?: true;\n set?: true;\n function?: true | ((fn: (...args: any[]) => any) => string);\n };\n /**\n * [JSON replacer function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The_replacer_parameter) used for both actions and states stringify.\n * In addition, you can specify a data type by adding a [`__serializedType__`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/helpers/index.js#L4)\n * key. So you can deserialize it back while importing or persisting data.\n * Moreover, it will also [show a nice preview showing the provided custom type](https://cloud.githubusercontent.com/assets/7957859/21814330/a17d556a-d761-11e6-85ef-159dd12f36c5.png):\n */\n replacer?: (key: string, value: unknown) => any;\n /**\n * [JSON `reviver` function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter)\n * used for parsing the imported actions and states. See [`remotedev-serialize`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/immutable/serialize.js#L8-L41)\n * as an example on how to serialize special data types and get them back.\n */\n reviver?: (key: string, value: unknown) => any;\n /**\n * Automatically serialize/deserialize immutablejs via [remotedev-serialize](https://github.com/zalmoxisus/remotedev-serialize).\n * Just pass the Immutable library. It will support all ImmutableJS structures. You can even export them into a file and get them back.\n * The only exception is `Record` class, for which you should pass this in addition the references to your classes in `refs`.\n */\n immutable?: any;\n /**\n * ImmutableJS `Record` classes used to make possible restore its instances back when importing, persisting...\n */\n refs?: any;\n };\n /**\n * function which takes `action` object and id number as arguments, and should return `action` object back.\n */\n actionSanitizer?: <A extends Action>(action: A, id: number) => A;\n /**\n * function which takes `state` object and index as arguments, and should return `state` object back.\n */\n stateSanitizer?: <S>(state: S, index: number) => S;\n /**\n * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\n * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\n */\n actionsDenylist?: string | string[];\n /**\n * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\n * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\n */\n actionsAllowlist?: string | string[];\n /**\n * called for every action before sending, takes `state` and `action` object, and returns `true` in case it allows sending the current data to the monitor.\n * Use it as a more advanced version of `actionsDenylist`/`actionsAllowlist` parameters.\n */\n predicate?: <S, A extends Action>(state: S, action: A) => boolean;\n /**\n * if specified as `false`, it will not record the changes till clicking on `Start recording` button.\n * Available only for Redux enhancer, for others use `autoPause`.\n *\n * @default true\n */\n shouldRecordChanges?: boolean;\n /**\n * if specified, whenever clicking on `Pause recording` button and there are actions in the history log, will add this action type.\n * If not specified, will commit when paused. Available only for Redux enhancer.\n *\n * @default \"@@PAUSED\"\"\n */\n pauseActionType?: string;\n /**\n * auto pauses when the extension’s window is not opened, and so has zero impact on your app when not in use.\n * Not available for Redux enhancer (as it already does it but storing the data to be sent).\n *\n * @default false\n */\n autoPause?: boolean;\n /**\n * if specified as `true`, it will not allow any non-monitor actions to be dispatched till clicking on `Unlock changes` button.\n * Available only for Redux enhancer.\n *\n * @default false\n */\n shouldStartLocked?: boolean;\n /**\n * if set to `false`, will not recompute the states on hot reloading (or on replacing the reducers). Available only for Redux enhancer.\n *\n * @default true\n */\n shouldHotReload?: boolean;\n /**\n * if specified as `true`, whenever there's an exception in reducers, the monitors will show the error message, and next actions will not be dispatched.\n *\n * @default false\n */\n shouldCatchErrors?: boolean;\n /**\n * If you want to restrict the extension, specify the features you allow.\n * If not specified, all of the features are enabled. When set as an object, only those included as `true` will be allowed.\n * Note that except `true`/`false`, `import` and `export` can be set as `custom` (which is by default for Redux enhancer), meaning that the importing/exporting occurs on the client side.\n * Otherwise, you'll get/set the data right from the monitor part.\n */\n features?: {\n /**\n * start/pause recording of dispatched actions\n */\n pause?: boolean;\n /**\n * lock/unlock dispatching actions and side effects\n */\n lock?: boolean;\n /**\n * persist states on page reloading\n */\n persist?: boolean;\n /**\n * export history of actions in a file\n */\n export?: boolean | 'custom';\n /**\n * import history of actions from a file\n */\n import?: boolean | 'custom';\n /**\n * jump back and forth (time travelling)\n */\n jump?: boolean;\n /**\n * skip (cancel) actions\n */\n skip?: boolean;\n /**\n * drag and drop actions in the history list\n */\n reorder?: boolean;\n /**\n * dispatch custom actions or action creators\n */\n dispatch?: boolean;\n /**\n * generate tests for the selected actions\n */\n test?: boolean;\n };\n /**\n * Set to true or a stacktrace-returning function to record call stack traces for dispatched actions.\n * Defaults to false.\n */\n trace?: boolean | (<A extends Action>(action: A) => string);\n /**\n * The maximum number of stack trace entries to record per action. Defaults to 10.\n */\n traceLimit?: number;\n}\ntype Compose = typeof compose;\ninterface ComposeWithDevTools {\n (options: DevToolsEnhancerOptions): Compose;\n <StoreExt extends {}>(...funcs: StoreEnhancer<StoreExt>[]): StoreEnhancer<StoreExt>;\n}\n\n/**\n * @public\n */\nexport const composeWithDevTools: ComposeWithDevTools = typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function () {\n if (arguments.length === 0) return undefined;\n if (typeof arguments[0] === 'object') return compose;\n return compose.apply(null, arguments as any as Function[]);\n};\n\n/**\n * @public\n */\nexport const devToolsEnhancer: {\n (options: DevToolsEnhancerOptions): StoreEnhancer<any>;\n} = typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION__ ? (window as any).__REDUX_DEVTOOLS_EXTENSION__ : function () {\n return function (noop) {\n return noop;\n };\n};", "import type { Middleware, UnknownAction } from 'redux';\nimport type { ThunkMiddleware } from 'redux-thunk';\nimport { thunk as thunkMiddleware, withExtraArgument } from 'redux-thunk';\nimport type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware';\nimport { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware';\nimport type { ImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware';\n/* PROD_START_REMOVE_UMD */\nimport { createImmutableStateInvariantMiddleware } from './immutableStateInvariantMiddleware';\n/* PROD_STOP_REMOVE_UMD */\n\nimport type { SerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware';\nimport { createSerializableStateInvariantMiddleware } from './serializableStateInvariantMiddleware';\nimport type { ExcludeFromTuple } from './tsHelpers';\nimport { Tuple } from './utils';\nfunction isBoolean(x: any): x is boolean {\n return typeof x === 'boolean';\n}\ninterface ThunkOptions<E = any> {\n extraArgument: E;\n}\ninterface GetDefaultMiddlewareOptions {\n thunk?: boolean | ThunkOptions;\n immutableCheck?: boolean | ImmutableStateInvariantMiddlewareOptions;\n serializableCheck?: boolean | SerializableStateInvariantMiddlewareOptions;\n actionCreatorCheck?: boolean | ActionCreatorInvariantMiddlewareOptions;\n}\nexport type ThunkMiddlewareFor<S, O extends GetDefaultMiddlewareOptions = {}> = O extends {\n thunk: false;\n} ? never : O extends {\n thunk: {\n extraArgument: infer E;\n };\n} ? ThunkMiddleware<S, UnknownAction, E> : ThunkMiddleware<S, UnknownAction>;\nexport type GetDefaultMiddleware<S = any> = <O extends GetDefaultMiddlewareOptions = {\n thunk: true;\n immutableCheck: true;\n serializableCheck: true;\n actionCreatorCheck: true;\n}>(options?: O) => Tuple<ExcludeFromTuple<[ThunkMiddlewareFor<S, O>], never>>;\nexport const buildGetDefaultMiddleware = <S = any,>(): GetDefaultMiddleware<S> => function getDefaultMiddleware(options) {\n const {\n thunk = true,\n immutableCheck = true,\n serializableCheck = true,\n actionCreatorCheck = true\n } = options ?? {};\n let middlewareArray = new Tuple<Middleware[]>();\n if (thunk) {\n if (isBoolean(thunk)) {\n middlewareArray.push(thunkMiddleware);\n } else {\n middlewareArray.push(withExtraArgument(thunk.extraArgument));\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n if (immutableCheck) {\n /* PROD_START_REMOVE_UMD */\n let immutableOptions: ImmutableStateInvariantMiddlewareOptions = {};\n if (!isBoolean(immutableCheck)) {\n immutableOptions = immutableCheck;\n }\n middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));\n /* PROD_STOP_REMOVE_UMD */\n }\n if (serializableCheck) {\n let serializableOptions: SerializableStateInvariantMiddlewareOptions = {};\n if (!isBoolean(serializableCheck)) {\n serializableOptions = serializableCheck;\n }\n middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));\n }\n if (actionCreatorCheck) {\n let actionCreatorOptions: ActionCreatorInvariantMiddlewareOptions = {};\n if (!isBoolean(actionCreatorCheck)) {\n actionCreatorOptions = actionCreatorCheck;\n }\n middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));\n }\n }\n return middlewareArray as any;\n};", "import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport { isAction } from 'redux';\nimport type { IsUnknownOrNonInferrable, IfMaybeUndefined, IfVoid, IsAny } from './tsHelpers';\nimport { hasMatchFunction } from './tsHelpers';\n\n/**\n * An action with a string type and an associated payload. This is the\n * type of action returned by `createAction()` action creators.\n *\n * @template P The type of the action's payload.\n * @template T the type used for the action type.\n * @template M The type of the action's meta (optional)\n * @template E The type of the action's error (optional)\n *\n * @public\n */\nexport type PayloadAction<P = void, T extends string = string, M = never, E = never> = {\n payload: P;\n type: T;\n} & ([M] extends [never] ? {} : {\n meta: M;\n}) & ([E] extends [never] ? {} : {\n error: E;\n});\n\n/**\n * A \"prepare\" method to be used as the second parameter of `createAction`.\n * Takes any number of arguments and returns a Flux Standard Action without\n * type (will be added later) that *must* contain a payload (might be undefined).\n *\n * @public\n */\nexport type PrepareAction<P> = ((...args: any[]) => {\n payload: P;\n}) | ((...args: any[]) => {\n payload: P;\n meta: any;\n}) | ((...args: any[]) => {\n payload: P;\n error: any;\n}) | ((...args: any[]) => {\n payload: P;\n meta: any;\n error: any;\n});\n\n/**\n * Internal version of `ActionCreatorWithPreparedPayload`. Not to be used externally.\n *\n * @internal\n */\nexport type _ActionCreatorWithPreparedPayload<PA extends PrepareAction<any> | void, T extends string = string> = PA extends PrepareAction<infer P> ? ActionCreatorWithPreparedPayload<Parameters<PA>, P, T, ReturnType<PA> extends {\n error: infer E;\n} ? E : never, ReturnType<PA> extends {\n meta: infer M;\n} ? M : never> : void;\n\n/**\n * Basic type for all action creators.\n *\n * @inheritdoc {redux#ActionCreator}\n */\nexport type BaseActionCreator<P, T extends string, M = never, E = never> = {\n type: T;\n match: (action: unknown) => action is PayloadAction<P, T, M, E>;\n};\n\n/**\n * An action creator that takes multiple arguments that are passed\n * to a `PrepareAction` method to create the final Action.\n * @typeParam Args arguments for the action creator function\n * @typeParam P `payload` type\n * @typeParam T `type` name\n * @typeParam E optional `error` type\n * @typeParam M optional `meta` type\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithPreparedPayload<Args extends unknown[], P, T extends string = string, E = never, M = never> extends BaseActionCreator<P, T, M, E> {\n /**\n * Calling this {@link redux#ActionCreator} with `Args` will return\n * an Action with a payload of type `P` and (depending on the `PrepareAction`\n * method used) a `meta`- and `error` property of types `M` and `E` respectively.\n */\n (...args: Args): PayloadAction<P, T, M, E>;\n}\n\n/**\n * An action creator of type `T` that takes an optional payload of type `P`.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithOptionalPayload<P, T extends string = string> extends BaseActionCreator<P, T> {\n /**\n * Calling this {@link redux#ActionCreator} with an argument will\n * return a {@link PayloadAction} of type `T` with a payload of `P`.\n * Calling it without an argument will return a PayloadAction with a payload of `undefined`.\n */\n (payload?: P): PayloadAction<P, T>;\n}\n\n/**\n * An action creator of type `T` that takes no payload.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithoutPayload<T extends string = string> extends BaseActionCreator<undefined, T> {\n /**\n * Calling this {@link redux#ActionCreator} will\n * return a {@link PayloadAction} of type `T` with a payload of `undefined`\n */\n (noArgument: void): PayloadAction<undefined, T>;\n}\n\n/**\n * An action creator of type `T` that requires a payload of type P.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithPayload<P, T extends string = string> extends BaseActionCreator<P, T> {\n /**\n * Calling this {@link redux#ActionCreator} with an argument will\n * return a {@link PayloadAction} of type `T` with a payload of `P`\n */\n (payload: P): PayloadAction<P, T>;\n}\n\n/**\n * An action creator of type `T` whose `payload` type could not be inferred. Accepts everything as `payload`.\n *\n * @inheritdoc {redux#ActionCreator}\n *\n * @public\n */\nexport interface ActionCreatorWithNonInferrablePayload<T extends string = string> extends BaseActionCreator<unknown, T> {\n /**\n * Calling this {@link redux#ActionCreator} with an argument will\n * return a {@link PayloadAction} of type `T` with a payload\n * of exactly the type of the argument.\n */\n <PT extends unknown>(payload: PT): PayloadAction<PT, T>;\n}\n\n/**\n * An action creator that produces actions with a `payload` attribute.\n *\n * @typeParam P the `payload` type\n * @typeParam T the `type` of the resulting action\n * @typeParam PA if the resulting action is preprocessed by a `prepare` method, the signature of said method.\n *\n * @public\n */\nexport type PayloadActionCreator<P = void, T extends string = string, PA extends PrepareAction<P> | void = void> = IfPrepareActionMethodProvided<PA, _ActionCreatorWithPreparedPayload<PA, T>,\n// else\nIsAny<P, ActionCreatorWithPayload<any, T>, IsUnknownOrNonInferrable<P, ActionCreatorWithNonInferrablePayload<T>,\n// else\nIfVoid<P, ActionCreatorWithoutPayload<T>,\n// else\nIfMaybeUndefined<P, ActionCreatorWithOptionalPayload<P, T>,\n// else\nActionCreatorWithPayload<P, T>>>>>>;\n\n/**\n * A utility function to create an action creator for the given action type\n * string. The action creator accepts a single argument, which will be included\n * in the action object as a field called payload. The action creator function\n * will also have its toString() overridden so that it returns the action type.\n *\n * @param type The action type to use for created actions.\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\n * If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\n *\n * @public\n */\nexport function createAction<P = void, T extends string = string>(type: T): PayloadActionCreator<P, T>;\n\n/**\n * A utility function to create an action creator for the given action type\n * string. The action creator accepts a single argument, which will be included\n * in the action object as a field called payload. The action creator function\n * will also have its toString() overridden so that it returns the action type.\n *\n * @param type The action type to use for created actions.\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\n * If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\n *\n * @public\n */\nexport function createAction<PA extends PrepareAction<any>, T extends string = string>(type: T, prepareAction: PA): PayloadActionCreator<ReturnType<PA>['payload'], T, PA>;\nexport function createAction(type: string, prepareAction?: Function): any {\n function actionCreator(...args: any[]) {\n if (prepareAction) {\n let prepared = prepareAction(...args);\n if (!prepared) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(0) : 'prepareAction did not return an object');\n }\n return {\n type,\n payload: prepared.payload,\n ...('meta' in prepared && {\n meta: prepared.meta\n }),\n ...('error' in prepared && {\n error: prepared.error\n })\n };\n }\n return {\n type,\n payload: args[0]\n };\n }\n actionCreator.toString = () => `${type}`;\n actionCreator.type = type;\n actionCreator.match = (action: unknown): action is PayloadAction => isAction(action) && action.type === type;\n return actionCreator;\n}\n\n/**\n * Returns true if value is an RTK-like action creator, with a static type property and match method.\n */\nexport function isActionCreator(action: unknown): action is BaseActionCreator<unknown, string> & Function {\n return typeof action === 'function' && 'type' in action &&\n // hasMatchFunction only wants Matchers but I don't see the point in rewriting it\n hasMatchFunction(action as any);\n}\n\n/**\n * Returns true if value is an action with a string type and valid Flux Standard Action keys.\n */\nexport function isFSA(action: unknown): action is {\n type: string;\n payload?: unknown;\n error?: unknown;\n meta?: unknown;\n} {\n return isAction(action) && Object.keys(action).every(isValidKey);\n}\nfunction isValidKey(key: string) {\n return ['type', 'payload', 'error', 'meta'].indexOf(key) > -1;\n}\n\n// helper types for more readable typings\n\ntype IfPrepareActionMethodProvided<PA extends PrepareAction<any> | void, True, False> = PA extends (...args: any[]) => any ? True : False;", "import type { Middleware, StoreEnhancer } from 'redux';\nimport type { Tuple } from './utils';\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>) {\n Object.assign(target, ...args);\n}\n\n/**\n * return True if T is `any`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsAny<T, True, False = never> =\n// test if we are going the left AND right path in the condition\ntrue | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;\n\n/**\n * return True if T is `unknown`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsUnknown<T, True, False = never> = unknown extends T ? IsAny<T, False, True> : False;\nexport type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>;\n\n/**\n * @internal\n */\nexport type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IfVoid<P, True, False> = [void] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IsEmptyObj<T, True, False = never> = T extends any ? keyof T extends never ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>> : False : never;\n\n/**\n * returns True if TS version is above 3.5, False if below.\n * uses feature detection to detect TS version >= 3.5\n * * versions below 3.5 will return `{}` for unresolvable interference\n * * versions above will return `unknown`\n *\n * @internal\n */\nexport type AtLeastTS35<True, False> = [True, False][IsUnknown<ReturnType<<T>() => T>, 0, 1>];\n\n/**\n * @internal\n */\nexport type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<IsUnknown<T, True, False>, IsEmptyObj<T, True, IsUnknown<T, True, False>>>;\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\n\n// Appears to have a convenient side effect of ignoring `never` even if that's not what you specified\nexport type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [infer Head, ...infer Tail] ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]> : Acc;\ntype ExtractDispatchFromMiddlewareTuple<MiddlewareTuple extends readonly any[], Acc extends {}> = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple<Tail, Acc & (Head extends Middleware<infer D> ? IsAny<D, {}, D> : {})> : Acc;\nexport type ExtractDispatchExtensions<M> = M extends Tuple<infer MiddlewareTuple> ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}> : M extends ReadonlyArray<Middleware> ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never;\ntype ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStoreExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<infer Ext> ? IsAny<Ext, {}, Ext> : {})> : Acc;\nexport type ExtractStoreExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<infer Ext> ? Ext extends {} ? IsAny<Ext, {}, Ext> : {} : {}> : never;\ntype ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStateExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<any, infer StateExt> ? IsAny<StateExt, {}, StateExt> : {})> : Acc;\nexport type ExtractStateExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<any, infer StateExt> ? StateExt extends {} ? IsAny<StateExt, {}, StateExt> : {} : {}> : never;\n\n/**\n * Helper type. Passes T out again, but boxes it in a way that it cannot\n * \"widen\" the type by accident if it is a generic that should be inferred\n * from elsewhere.\n *\n * @internal\n */\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type WithOptionalProp<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport interface TypeGuard<T> {\n (value: any): value is T;\n}\nexport interface HasMatchFunction<T> {\n match: TypeGuard<T>;\n}\nexport const hasMatchFunction = <T,>(v: Matcher<T>): v is HasMatchFunction<T> => {\n return v && typeof (v as HasMatchFunction<T>).match === 'function';\n};\n\n/** @public */\nexport type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>;\n\n/** @public */\nexport type ActionFromMatcher<M extends Matcher<any>> = M extends Matcher<infer T> ? T : never;\nexport type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type Tail<T extends any[]> = T extends [any, ...infer Tail] ? Tail : never;\nexport type UnknownIfNonSpecific<T> = {} extends T ? unknown : T;\n\n/**\n * A Promise that will never reject.\n * @see https://github.com/reduxjs/redux-toolkit/issues/4101\n */\nexport type SafePromise<T> = Promise<T> & {\n __linterBrands: 'SafePromise';\n};\n\n/**\n * Properly wraps a Promise as a {@link SafePromise} with .catch(fallback).\n */\nexport function asSafePromise<Resolved, Rejected>(promise: Promise<Resolved>, fallback: (error: unknown) => Rejected) {\n return promise.catch(fallback) as SafePromise<Resolved | Rejected>;\n}", "import type { Middleware } from 'redux';\nimport { isActionCreator as isRTKAction } from './createAction';\nexport interface ActionCreatorInvariantMiddlewareOptions {\n /**\n * The function to identify whether a value is an action creator.\n * The default checks for a function with a static type property and match method.\n */\n isActionCreator?: (action: unknown) => action is Function & {\n type?: unknown;\n };\n}\nexport function getMessage(type?: unknown) {\n const splitType = type ? `${type}`.split('/') : [];\n const actionName = splitType[splitType.length - 1] || 'actionCreator';\n return `Detected an action creator with type \"${type || 'unknown'}\" being dispatched. \nMake sure you're calling the action creator before dispatching, i.e. \\`dispatch(${actionName}())\\` instead of \\`dispatch(${actionName})\\`. This is necessary even if the action has no payload.`;\n}\nexport function createActionCreatorInvariantMiddleware(options: ActionCreatorInvariantMiddlewareOptions = {}): Middleware {\n if (process.env.NODE_ENV === 'production') {\n return () => next => action => next(action);\n }\n const {\n isActionCreator = isRTKAction\n } = options;\n return () => next => action => {\n if (isActionCreator(action)) {\n console.warn(getMessage(action.type));\n }\n return next(action);\n };\n}", "import { produce as createNextState, isDraftable } from 'immer';\nexport function getTimeMeasureUtils(maxDelay: number, fnName: string) {\n let elapsed = 0;\n return {\n measureTime<T>(fn: () => T): T {\n const started = Date.now();\n try {\n return fn();\n } finally {\n const finished = Date.now();\n elapsed += finished - started;\n }\n },\n warnIfExceeded() {\n if (elapsed > maxDelay) {\n console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. \nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds, so you don't need to worry about that.`);\n }\n }\n };\n}\nexport function delay(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\nexport class Tuple<Items extends ReadonlyArray<unknown> = []> extends Array<Items[number]> {\n constructor(length: number);\n constructor(...items: Items);\n constructor(...items: any[]) {\n super(...items);\n Object.setPrototypeOf(this, Tuple.prototype);\n }\n static override get [Symbol.species]() {\n return Tuple as any;\n }\n override concat<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...Items, ...AdditionalItems]>;\n override concat<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;\n override concat<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;\n override concat(...arr: any[]) {\n return super.concat.apply(this, arr);\n }\n prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: Tuple<AdditionalItems>): Tuple<[...AdditionalItems, ...Items]>;\n prepend<AdditionalItems extends ReadonlyArray<unknown>>(items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;\n prepend<AdditionalItems extends ReadonlyArray<unknown>>(...items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;\n prepend(...arr: any[]) {\n if (arr.length === 1 && Array.isArray(arr[0])) {\n return new Tuple(...arr[0].concat(this));\n }\n return new Tuple(...arr.concat(this));\n }\n}\nexport function freezeDraftable<T>(val: T) {\n return isDraftable(val) ? createNextState(val, () => {}) : val;\n}\nexport function getOrInsert<K extends object, V>(map: WeakMap<K, V>, key: K, value: V): V;\nexport function getOrInsert<K, V>(map: Map<K, V>, key: K, value: V): V;\nexport function getOrInsert<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, value: V): V {\n if (map.has(key)) return map.get(key) as V;\n return map.set(key, value).get(key) as V;\n}\nexport function getOrInsertComputed<K extends object, V>(map: WeakMap<K, V>, key: K, compute: (key: K) => V): V;\nexport function getOrInsertComputed<K, V>(map: Map<K, V>, key: K, compute: (key: K) => V): V;\nexport function getOrInsertComputed<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, compute: (key: K) => V): V {\n if (map.has(key)) return map.get(key) as V;\n return map.set(key, compute(key)).get(key) as V;\n}", "import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Middleware } from 'redux';\nimport type { IgnorePaths } from './serializableStateInvariantMiddleware';\nimport { getTimeMeasureUtils } from './utils';\ntype EntryProcessor = (key: string, value: any) => any;\n\n/**\n * The default `isImmutable` function.\n *\n * @public\n */\nexport function isImmutableDefault(value: unknown): boolean {\n return typeof value !== 'object' || value == null || Object.isFrozen(value);\n}\nexport function trackForMutations(isImmutable: IsImmutableFunc, ignorePaths: IgnorePaths | undefined, obj: any) {\n const trackedProperties = trackProperties(isImmutable, ignorePaths, obj);\n return {\n detectMutations() {\n return detectMutations(isImmutable, ignorePaths, trackedProperties, obj);\n }\n };\n}\ninterface TrackedProperty {\n value: any;\n children: Record<string, any>;\n}\nfunction trackProperties(isImmutable: IsImmutableFunc, ignorePaths: IgnorePaths = [], obj: Record<string, any>, path: string = '', checkedObjects: Set<Record<string, any>> = new Set()) {\n const tracked: Partial<TrackedProperty> = {\n value: obj\n };\n if (!isImmutable(obj) && !checkedObjects.has(obj)) {\n checkedObjects.add(obj);\n tracked.children = {};\n for (const key in obj) {\n const childPath = path ? path + '.' + key : key;\n if (ignorePaths.length && ignorePaths.indexOf(childPath) !== -1) {\n continue;\n }\n tracked.children[key] = trackProperties(isImmutable, ignorePaths, obj[key], childPath);\n }\n }\n return tracked as TrackedProperty;\n}\nfunction detectMutations(isImmutable: IsImmutableFunc, ignoredPaths: IgnorePaths = [], trackedProperty: TrackedProperty, obj: any, sameParentRef: boolean = false, path: string = ''): {\n wasMutated: boolean;\n path?: string;\n} {\n const prevObj = trackedProperty ? trackedProperty.value : undefined;\n const sameRef = prevObj === obj;\n if (sameParentRef && !sameRef && !Number.isNaN(obj)) {\n return {\n wasMutated: true,\n path\n };\n }\n if (isImmutable(prevObj) || isImmutable(obj)) {\n return {\n wasMutated: false\n };\n }\n\n // Gather all keys from prev (tracked) and after objs\n const keysToDetect: Record<string, boolean> = {};\n for (let key in trackedProperty.children) {\n keysToDetect[key] = true;\n }\n for (let key in obj) {\n keysToDetect[key] = true;\n }\n const hasIgnoredPaths = ignoredPaths.length > 0;\n for (let key in keysToDetect) {\n const nestedPath = path ? path + '.' + key : key;\n if (hasIgnoredPaths) {\n const hasMatches = ignoredPaths.some(ignored => {\n if (ignored instanceof RegExp) {\n return ignored.test(nestedPath);\n }\n return nestedPath === ignored;\n });\n if (hasMatches) {\n continue;\n }\n }\n const result = detectMutations(isImmutable, ignoredPaths, trackedProperty.children[key], obj[key], sameRef, nestedPath);\n if (result.wasMutated) {\n return result;\n }\n }\n return {\n wasMutated: false\n };\n}\ntype IsImmutableFunc = (value: any) => boolean;\n\n/**\n * Options for `createImmutableStateInvariantMiddleware()`.\n *\n * @public\n */\nexport interface ImmutableStateInvariantMiddlewareOptions {\n /**\n Callback function to check if a value is considered to be immutable.\n This function is applied recursively to every value contained in the state.\n The default implementation will return true for primitive types\n (like numbers, strings, booleans, null and undefined).\n */\n isImmutable?: IsImmutableFunc;\n /**\n An array of dot-separated path strings that match named nodes from\n the root state to ignore when checking for immutability.\n Defaults to undefined\n */\n ignoredPaths?: IgnorePaths;\n /** Print a warning if checks take longer than N ms. Default: 32ms */\n warnAfter?: number;\n}\n\n/**\n * Creates a middleware that checks whether any state was mutated in between\n * dispatches or during a dispatch. If any mutations are detected, an error is\n * thrown.\n *\n * @param options Middleware options.\n *\n * @public\n */\nexport function createImmutableStateInvariantMiddleware(options: ImmutableStateInvariantMiddlewareOptions = {}): Middleware {\n if (process.env.NODE_ENV === 'production') {\n return () => next => action => next(action);\n } else {\n function stringify(obj: any, serializer?: EntryProcessor, indent?: string | number, decycler?: EntryProcessor): string {\n return JSON.stringify(obj, getSerialize(serializer, decycler), indent);\n }\n function getSerialize(serializer?: EntryProcessor, decycler?: EntryProcessor): EntryProcessor {\n let stack: any[] = [],\n keys: any[] = [];\n if (!decycler) decycler = function (_: string, value: any) {\n if (stack[0] === value) return '[Circular ~]';\n return '[Circular ~.' + keys.slice(0, stack.indexOf(value)).join('.') + ']';\n };\n return function (this: any, key: string, value: any) {\n if (stack.length > 0) {\n var thisPos = stack.indexOf(this);\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n if (~stack.indexOf(value)) value = decycler!.call(this, key, value);\n } else stack.push(value);\n return serializer == null ? value : serializer.call(this, key, value);\n };\n }\n let {\n isImmutable = isImmutableDefault,\n ignoredPaths,\n warnAfter = 32\n } = options;\n const track = trackForMutations.bind(null, isImmutable, ignoredPaths);\n return ({\n getState\n }) => {\n let state = getState();\n let tracker = track(state);\n let result;\n return next => action => {\n const measureUtils = getTimeMeasureUtils(warnAfter, 'ImmutableStateInvariantMiddleware');\n measureUtils.measureTime(() => {\n state = getState();\n result = tracker.detectMutations();\n // Track before potentially not meeting the invariant\n tracker = track(state);\n if (result.wasMutated) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(19) : `A state mutation was detected between dispatches, in the path '${result.path || ''}'. This may cause incorrect behavior. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n }\n });\n const dispatchedAction = next(action);\n measureUtils.measureTime(() => {\n state = getState();\n result = tracker.detectMutations();\n // Track before potentially not meeting the invariant\n tracker = track(state);\n if (result.wasMutated) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(20) : `A state mutation was detected inside a dispatch, in the path: ${result.path || ''}. Take a look at the reducer(s) handling the action ${stringify(action)}. (https://redux.js.org/style-guide/style-guide#do-not-mutate-state)`);\n }\n });\n measureUtils.warnIfExceeded();\n return dispatchedAction;\n };\n };\n }\n}", "import type { Middleware } from 'redux';\nimport { isAction, isPlainObject } from 'redux';\nimport { getTimeMeasureUtils } from './utils';\n\n/**\n * Returns true if the passed value is \"plain\", i.e. a value that is either\n * directly JSON-serializable (boolean, number, string, array, plain object)\n * or `undefined`.\n *\n * @param val The value to check.\n *\n * @public\n */\nexport function isPlain(val: any) {\n const type = typeof val;\n return val == null || type === 'string' || type === 'boolean' || type === 'number' || Array.isArray(val) || isPlainObject(val);\n}\ninterface NonSerializableValue {\n keyPath: string;\n value: unknown;\n}\nexport type IgnorePaths = readonly (string | RegExp)[];\n\n/**\n * @public\n */\nexport function findNonSerializableValue(value: unknown, path: string = '', isSerializable: (value: unknown) => boolean = isPlain, getEntries?: (value: unknown) => [string, any][], ignoredPaths: IgnorePaths = [], cache?: WeakSet<object>): NonSerializableValue | false {\n let foundNestedSerializable: NonSerializableValue | false;\n if (!isSerializable(value)) {\n return {\n keyPath: path || '<root>',\n value: value\n };\n }\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n if (cache?.has(value)) return false;\n const entries = getEntries != null ? getEntries(value) : Object.entries(value);\n const hasIgnoredPaths = ignoredPaths.length > 0;\n for (const [key, nestedValue] of entries) {\n const nestedPath = path ? path + '.' + key : key;\n if (hasIgnoredPaths) {\n const hasMatches = ignoredPaths.some(ignored => {\n if (ignored instanceof RegExp) {\n return ignored.test(nestedPath);\n }\n return nestedPath === ignored;\n });\n if (hasMatches) {\n continue;\n }\n }\n if (!isSerializable(nestedValue)) {\n return {\n keyPath: nestedPath,\n value: nestedValue\n };\n }\n if (typeof nestedValue === 'object') {\n foundNestedSerializable = findNonSerializableValue(nestedValue, nestedPath, isSerializable, getEntries, ignoredPaths, cache);\n if (foundNestedSerializable) {\n return foundNestedSerializable;\n }\n }\n }\n if (cache && isNestedFrozen(value)) cache.add(value);\n return false;\n}\nexport function isNestedFrozen(value: object) {\n if (!Object.isFrozen(value)) return false;\n for (const nestedValue of Object.values(value)) {\n if (typeof nestedValue !== 'object' || nestedValue === null) continue;\n if (!isNestedFrozen(nestedValue)) return false;\n }\n return true;\n}\n\n/**\n * Options for `createSerializableStateInvariantMiddleware()`.\n *\n * @public\n */\nexport interface SerializableStateInvariantMiddlewareOptions {\n /**\n * The function to check if a value is considered serializable. This\n * function is applied recursively to every value contained in the\n * state. Defaults to `isPlain()`.\n */\n isSerializable?: (value: any) => boolean;\n /**\n * The function that will be used to retrieve entries from each\n * value. If unspecified, `Object.entries` will be used. Defaults\n * to `undefined`.\n */\n getEntries?: (value: any) => [string, any][];\n\n /**\n * An array of action types to ignore when checking for serializability.\n * Defaults to []\n */\n ignoredActions?: string[];\n\n /**\n * An array of dot-separated path strings or regular expressions to ignore\n * when checking for serializability, Defaults to\n * ['meta.arg', 'meta.baseQueryMeta']\n */\n ignoredActionPaths?: (string | RegExp)[];\n\n /**\n * An array of dot-separated path strings or regular expressions to ignore\n * when checking for serializability, Defaults to []\n */\n ignoredPaths?: (string | RegExp)[];\n /**\n * Execution time warning threshold. If the middleware takes longer\n * than `warnAfter` ms, a warning will be displayed in the console.\n * Defaults to 32ms.\n */\n warnAfter?: number;\n\n /**\n * Opt out of checking state. When set to `true`, other state-related params will be ignored.\n */\n ignoreState?: boolean;\n\n /**\n * Opt out of checking actions. When set to `true`, other action-related params will be ignored.\n */\n ignoreActions?: boolean;\n\n /**\n * Opt out of caching the results. The cache uses a WeakSet and speeds up repeated checking processes.\n * The cache is automatically disabled if no browser support for WeakSet is present.\n */\n disableCache?: boolean;\n}\n\n/**\n * Creates a middleware that, after every state change, checks if the new\n * state is serializable. If a non-serializable value is found within the\n * state, an error is printed to the console.\n *\n * @param options Middleware options.\n *\n * @public\n */\nexport function createSerializableStateInvariantMiddleware(options: SerializableStateInvariantMiddlewareOptions = {}): Middleware {\n if (process.env.NODE_ENV === 'production') {\n return () => next => action => next(action);\n } else {\n const {\n isSerializable = isPlain,\n getEntries,\n ignoredActions = [],\n ignoredActionPaths = ['meta.arg', 'meta.baseQueryMeta'],\n ignoredPaths = [],\n warnAfter = 32,\n ignoreState = false,\n ignoreActions = false,\n disableCache = false\n } = options;\n const cache: WeakSet<object> | undefined = !disableCache && WeakSet ? new WeakSet() : undefined;\n return storeAPI => next => action => {\n if (!isAction(action)) {\n return next(action);\n }\n const result = next(action);\n const measureUtils = getTimeMeasureUtils(warnAfter, 'SerializableStateInvariantMiddleware');\n if (!ignoreActions && !(ignoredActions.length && ignoredActions.indexOf(action.type as any) !== -1)) {\n measureUtils.measureTime(() => {\n const foundActionNonSerializableValue = findNonSerializableValue(action, '', isSerializable, getEntries, ignoredActionPaths, cache);\n if (foundActionNonSerializableValue) {\n const {\n keyPath,\n value\n } = foundActionNonSerializableValue;\n console.error(`A non-serializable value was detected in an action, in the path: \\`${keyPath}\\`. Value:`, value, '\\nTake a look at the logic that dispatched this action: ', action, '\\n(See https://redux.js.org/faq/actions#why-should-type-be-a-string-or-at-least-serializable-why-should-my-action-types-be-constants)', '\\n(To allow non-serializable values see: https://redux-toolkit.js.org/usage/usage-guide#working-with-non-serializable-data)');\n }\n });\n }\n if (!ignoreState) {\n measureUtils.measureTime(() => {\n const state = storeAPI.getState();\n const foundStateNonSerializableValue = findNonSerializableValue(state, '', isSerializable, getEntries, ignoredPaths, cache);\n if (foundStateNonSerializableValue) {\n const {\n keyPath,\n value\n } = foundStateNonSerializableValue;\n console.error(`A non-serializable value was detected in the state, in the path: \\`${keyPath}\\`. Value:`, value, `\nTake a look at the reducer(s) handling this action type: ${action.type}.\n(See https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state)`);\n }\n });\n measureUtils.warnIfExceeded();\n }\n return result;\n };\n }\n}", "import type { StoreEnhancer } from 'redux';\nexport const SHOULD_AUTOBATCH = 'RTK_autoBatch';\nexport const prepareAutoBatched = <T,>() => (payload: T): {\n payload: T;\n meta: unknown;\n} => ({\n payload,\n meta: {\n [SHOULD_AUTOBATCH]: true\n }\n});\nconst createQueueWithTimer = (timeout: number) => {\n return (notify: () => void) => {\n setTimeout(notify, timeout);\n };\n};\nexport type AutoBatchOptions = {\n type: 'tick';\n} | {\n type: 'timer';\n timeout: number;\n} | {\n type: 'raf';\n} | {\n type: 'callback';\n queueNotification: (notify: () => void) => void;\n};\n\n/**\n * A Redux store enhancer that watches for \"low-priority\" actions, and delays\n * notifying subscribers until either the queued callback executes or the\n * next \"standard-priority\" action is dispatched.\n *\n * This allows dispatching multiple \"low-priority\" actions in a row with only\n * a single subscriber notification to the UI after the sequence of actions\n * is finished, thus improving UI re-render performance.\n *\n * Watches for actions with the `action.meta[SHOULD_AUTOBATCH]` attribute.\n * This can be added to `action.meta` manually, or by using the\n * `prepareAutoBatched` helper.\n *\n * By default, it will queue a notification for the end of the event loop tick.\n * However, you can pass several other options to configure the behavior:\n * - `{type: 'tick'}`: queues using `queueMicrotask`\n * - `{type: 'timer', timeout: number}`: queues using `setTimeout`\n * - `{type: 'raf'}`: queues using `requestAnimationFrame` (default)\n * - `{type: 'callback', queueNotification: (notify: () => void) => void}`: lets you provide your own callback\n *\n *\n */\nexport const autoBatchEnhancer = (options: AutoBatchOptions = {\n type: 'raf'\n}): StoreEnhancer => next => (...args) => {\n const store = next(...args);\n let notifying = true;\n let shouldNotifyAtEndOfTick = false;\n let notificationQueued = false;\n const listeners = new Set<() => void>();\n const queueCallback = options.type === 'tick' ? queueMicrotask : options.type === 'raf' ?\n // requestAnimationFrame won't exist in SSR environments. Fall back to a vague approximation just to keep from erroring.\n typeof window !== 'undefined' && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10) : options.type === 'callback' ? options.queueNotification : createQueueWithTimer(options.timeout);\n const notifyListeners = () => {\n // We're running at the end of the event loop tick.\n // Run the real listener callbacks to actually update the UI.\n notificationQueued = false;\n if (shouldNotifyAtEndOfTick) {\n shouldNotifyAtEndOfTick = false;\n listeners.forEach(l => l());\n }\n };\n return Object.assign({}, store, {\n // Override the base `store.subscribe` method to keep original listeners\n // from running if we're delaying notifications\n subscribe(listener: () => void) {\n // Each wrapped listener will only call the real listener if\n // the `notifying` flag is currently active when it's called.\n // This lets the base store work as normal, while the actual UI\n // update becomes controlled by this enhancer.\n const wrappedListener: typeof listener = () => notifying && listener();\n const unsubscribe = store.subscribe(wrappedListener);\n listeners.add(listener);\n return () => {\n unsubscribe();\n listeners.delete(listener);\n };\n },\n // Override the base `store.dispatch` method so that we can check actions\n // for the `shouldAutoBatch` flag and determine if batching is active\n dispatch(action: any) {\n try {\n // If the action does _not_ have the `shouldAutoBatch` flag,\n // we resume/continue normal notify-after-each-dispatch behavior\n notifying = !action?.meta?.[SHOULD_AUTOBATCH];\n // If a `notifyListeners` microtask was queued, you can't cancel it.\n // Instead, we set a flag so that it's a no-op when it does run\n shouldNotifyAtEndOfTick = !notifying;\n if (shouldNotifyAtEndOfTick) {\n // We've seen at least 1 action with `SHOULD_AUTOBATCH`. Try to queue\n // a microtask to notify listeners at the end of the event loop tick.\n // Make sure we only enqueue this _once_ per tick.\n if (!notificationQueued) {\n notificationQueued = true;\n queueCallback(notifyListeners);\n }\n }\n // Go ahead and process the action as usual, including reducers.\n // If normal notification behavior is enabled, the store will notify\n // all of its own listeners, and the wrapper callbacks above will\n // see `notifying` is true and pass on to the real listener callbacks.\n // If we're \"batching\" behavior, then the wrapped callbacks will\n // bail out, causing the base store notification behavior to be no-ops.\n return store.dispatch(action);\n } finally {\n // Assume we're back to normal behavior after each action\n notifying = true;\n }\n }\n });\n};", "import type { StoreEnhancer } from 'redux';\nimport type { AutoBatchOptions } from './autoBatchEnhancer';\nimport { autoBatchEnhancer } from './autoBatchEnhancer';\nimport { Tuple } from './utils';\nimport type { Middlewares } from './configureStore';\nimport type { ExtractDispatchExtensions } from './tsHelpers';\ntype GetDefaultEnhancersOptions = {\n autoBatch?: boolean | AutoBatchOptions;\n};\nexport type GetDefaultEnhancers<M extends Middlewares<any>> = (options?: GetDefaultEnhancersOptions) => Tuple<[StoreEnhancer<{\n dispatch: ExtractDispatchExtensions<M>;\n}>]>;\nexport const buildGetDefaultEnhancers = <M extends Middlewares<any>,>(middlewareEnhancer: StoreEnhancer<{\n dispatch: ExtractDispatchExtensions<M>;\n}>): GetDefaultEnhancers<M> => function getDefaultEnhancers(options) {\n const {\n autoBatch = true\n } = options ?? {};\n let enhancerArray = new Tuple<StoreEnhancer[]>(middlewareEnhancer);\n if (autoBatch) {\n enhancerArray.push(autoBatchEnhancer(typeof autoBatch === 'object' ? autoBatch : undefined));\n }\n return enhancerArray as any;\n};", "import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Draft } from 'immer';\nimport { produce as createNextState, isDraft, isDraftable } from 'immer';\nimport type { Action, Reducer, UnknownAction } from 'redux';\nimport type { ActionReducerMapBuilder } from './mapBuilders';\nimport { executeReducerBuilderCallback } from './mapBuilders';\nimport type { NoInfer, TypeGuard } from './tsHelpers';\nimport { freezeDraftable } from './utils';\n\n/**\n * Defines a mapping from action types to corresponding action object shapes.\n *\n * @deprecated This should not be used manually - it is only used for internal\n * inference purposes and should not have any further value.\n * It might be removed in the future.\n * @public\n */\nexport type Actions<T extends keyof any = string> = Record<T, Action>;\nexport type ActionMatcherDescription<S, A extends Action> = {\n matcher: TypeGuard<A>;\n reducer: CaseReducer<S, NoInfer<A>>;\n};\nexport type ReadonlyActionMatcherDescriptionCollection<S> = ReadonlyArray<ActionMatcherDescription<S, any>>;\nexport type ActionMatcherDescriptionCollection<S> = Array<ActionMatcherDescription<S, any>>;\n\n/**\n * A *case reducer* is a reducer function for a specific action type. Case\n * reducers can be composed to full reducers using `createReducer()`.\n *\n * Unlike a normal Redux reducer, a case reducer is never called with an\n * `undefined` state to determine the initial state. Instead, the initial\n * state is explicitly specified as an argument to `createReducer()`.\n *\n * In addition, a case reducer can choose to mutate the passed-in `state`\n * value directly instead of returning a new state. This does not actually\n * cause the store state to be mutated directly; instead, thanks to\n * [immer](https://github.com/mweststrate/immer), the mutations are\n * translated to copy operations that result in a new state.\n *\n * @public\n */\nexport type CaseReducer<S = any, A extends Action = UnknownAction> = (state: Draft<S>, action: A) => NoInfer<S> | void | Draft<NoInfer<S>>;\n\n/**\n * A mapping from action types to case reducers for `createReducer()`.\n *\n * @deprecated This should not be used manually - it is only used\n * for internal inference purposes and using it manually\n * would lead to type erasure.\n * It might be removed in the future.\n * @public\n */\nexport type CaseReducers<S, AS extends Actions> = { [T in keyof AS]: AS[T] extends Action ? CaseReducer<S, AS[T]> : void };\nexport type NotFunction<T> = T extends Function ? never : T;\nfunction isStateFunction<S>(x: unknown): x is () => S {\n return typeof x === 'function';\n}\nexport type ReducerWithInitialState<S extends NotFunction<any>> = Reducer<S> & {\n getInitialState: () => S;\n};\n\n/**\n * A utility function that allows defining a reducer as a mapping from action\n * type to *case reducer* functions that handle these action types. The\n * reducer's initial state is passed as the first argument.\n *\n * @remarks\n * The body of every case reducer is implicitly wrapped with a call to\n * `produce()` from the [immer](https://github.com/mweststrate/immer) library.\n * This means that rather than returning a new state object, you can also\n * mutate the passed-in state object directly; these mutations will then be\n * automatically and efficiently translated into copies, giving you both\n * convenience and immutability.\n *\n * @overloadSummary\n * This function accepts a callback that receives a `builder` object as its argument.\n * That builder provides `addCase`, `addMatcher` and `addDefaultCase` functions that may be\n * called to define what actions this reducer will handle.\n *\n * @param initialState - `State | (() => State)`: The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\n * @param builderCallback - `(builder: Builder) => void` A callback that receives a *builder* object to define\n * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\n * @example\n```ts\nimport {\n createAction,\n createReducer,\n UnknownAction,\n PayloadAction,\n} from \"@reduxjs/toolkit\";\n\nconst increment = createAction<number>(\"increment\");\nconst decrement = createAction<number>(\"decrement\");\n\nfunction isActionWithNumberPayload(\n action: UnknownAction\n): action is PayloadAction<number> {\n return typeof action.payload === \"number\";\n}\n\nconst reducer = createReducer(\n {\n counter: 0,\n sumOfNumberPayloads: 0,\n unhandledActions: 0,\n },\n (builder) => {\n builder\n .addCase(increment, (state, action) => {\n // action is inferred correctly here\n state.counter += action.payload;\n })\n // You can chain calls, or have separate `builder.addCase()` lines each time\n .addCase(decrement, (state, action) => {\n state.counter -= action.payload;\n })\n // You can apply a \"matcher function\" to incoming actions\n .addMatcher(isActionWithNumberPayload, (state, action) => {})\n // and provide a default case if no other handlers matched\n .addDefaultCase((state, action) => {});\n }\n);\n```\n * @public\n */\nexport function createReducer<S extends NotFunction<any>>(initialState: S | (() => S), mapOrBuilderCallback: (builder: ActionReducerMapBuilder<S>) => void): ReducerWithInitialState<S> {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof mapOrBuilderCallback === 'object') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(8) : \"The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer\");\n }\n }\n let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = executeReducerBuilderCallback(mapOrBuilderCallback);\n\n // Ensure the initial state gets frozen either way (if draftable)\n let getInitialState: () => S;\n if (isStateFunction(initialState)) {\n getInitialState = () => freezeDraftable(initialState());\n } else {\n const frozenInitialState = freezeDraftable(initialState);\n getInitialState = () => frozenInitialState;\n }\n function reducer(state = getInitialState(), action: any): S {\n let caseReducers = [actionsMap[action.type], ...finalActionMatchers.filter(({\n matcher\n }) => matcher(action)).map(({\n reducer\n }) => reducer)];\n if (caseReducers.filter(cr => !!cr).length === 0) {\n caseReducers = [finalDefaultCaseReducer];\n }\n return caseReducers.reduce((previousState, caseReducer): S => {\n if (caseReducer) {\n if (isDraft(previousState)) {\n // If it's already a draft, we must already be inside a `createNextState` call,\n // likely because this is being wrapped in `createReducer`, `createSlice`, or nested\n // inside an existing draft. It's safe to just pass the draft to the mutator.\n const draft = previousState as Draft<S>; // We can assume this is already a draft\n const result = caseReducer(draft, action);\n if (result === undefined) {\n return previousState;\n }\n return result as S;\n } else if (!isDraftable(previousState)) {\n // If state is not draftable (ex: a primitive, such as 0), we want to directly\n // return the caseReducer func and not wrap it with produce.\n const result = caseReducer(previousState as any, action);\n if (result === undefined) {\n if (previousState === null) {\n return previousState;\n }\n throw Error('A case reducer on a non-draftable value must not return undefined');\n }\n return result as S;\n } else {\n // @ts-ignore createNextState() produces an Immutable<Draft<S>> rather\n // than an Immutable<S>, and TypeScript cannot find out how to reconcile\n // these two types.\n return createNextState(previousState, (draft: Draft<S>) => {\n return caseReducer(draft, action);\n });\n }\n }\n return previousState;\n }, state);\n }\n reducer.getInitialState = getInitialState;\n return reducer as ReducerWithInitialState<S>;\n}", "import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6 } from \"@reduxjs/toolkit\";\nimport type { Action } from 'redux';\nimport type { CaseReducer, CaseReducers, ActionMatcherDescriptionCollection } from './createReducer';\nimport type { TypeGuard } from './tsHelpers';\nexport type TypedActionCreator<Type extends string> = {\n (...args: any[]): Action<Type>;\n type: Type;\n};\n\n/**\n * A builder for an action <-> reducer map.\n *\n * @public\n */\nexport interface ActionReducerMapBuilder<State> {\n /**\n * Adds a case reducer to handle a single exact action type.\n * @remarks\n * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\n * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n * @param reducer - The actual case reducer function.\n */\n addCase<ActionCreator extends TypedActionCreator<string>>(actionCreator: ActionCreator, reducer: CaseReducer<State, ReturnType<ActionCreator>>): ActionReducerMapBuilder<State>;\n /**\n * Adds a case reducer to handle a single exact action type.\n * @remarks\n * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\n * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n * @param reducer - The actual case reducer function.\n */\n addCase<Type extends string, A extends Action<Type>>(type: Type, reducer: CaseReducer<State, A>): ActionReducerMapBuilder<State>;\n\n /**\n * Allows you to match your incoming actions against your own filter function instead of only the `action.type` property.\n * @remarks\n * If multiple matcher reducers match, all of them will be executed in the order\n * they were defined in - even if a case reducer already matched.\n * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\n * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)\n * function\n * @param reducer - The actual case reducer function.\n *\n * @example\n ```ts\n import {\n createAction,\n createReducer,\n AsyncThunk,\n UnknownAction,\n } from \"@reduxjs/toolkit\";\n type GenericAsyncThunk = AsyncThunk<unknown, unknown, any>;\n type PendingAction = ReturnType<GenericAsyncThunk[\"pending\"]>;\n type RejectedAction = ReturnType<GenericAsyncThunk[\"rejected\"]>;\n type FulfilledAction = ReturnType<GenericAsyncThunk[\"fulfilled\"]>;\n const initialState: Record<string, string> = {};\n const resetAction = createAction(\"reset-tracked-loading-state\");\n function isPendingAction(action: UnknownAction): action is PendingAction {\n return typeof action.type === \"string\" && action.type.endsWith(\"/pending\");\n }\n const reducer = createReducer(initialState, (builder) => {\n builder\n .addCase(resetAction, () => initialState)\n // matcher can be defined outside as a type predicate function\n .addMatcher(isPendingAction, (state, action) => {\n state[action.meta.requestId] = \"pending\";\n })\n .addMatcher(\n // matcher can be defined inline as a type predicate function\n (action): action is RejectedAction => action.type.endsWith(\"/rejected\"),\n (state, action) => {\n state[action.meta.requestId] = \"rejected\";\n }\n )\n // matcher can just return boolean and the matcher can receive a generic argument\n .addMatcher<FulfilledAction>(\n (action) => action.type.endsWith(\"/fulfilled\"),\n (state, action) => {\n state[action.meta.requestId] = \"fulfilled\";\n }\n );\n });\n ```\n */\n addMatcher<A>(matcher: TypeGuard<A> | ((action: any) => boolean), reducer: CaseReducer<State, A extends Action ? A : A & Action>): Omit<ActionReducerMapBuilder<State>, 'addCase'>;\n\n /**\n * Adds a \"default case\" reducer that is executed if no case reducer and no matcher\n * reducer was executed for this action.\n * @param reducer - The fallback \"default case\" reducer function.\n *\n * @example\n ```ts\n import { createReducer } from '@reduxjs/toolkit'\n const initialState = { otherActions: 0 }\n const reducer = createReducer(initialState, builder => {\n builder\n // .addCase(...)\n // .addMatcher(...)\n .addDefaultCase((state, action) => {\n state.otherActions++\n })\n })\n ```\n */\n addDefaultCase(reducer: CaseReducer<State, Action>): {};\n}\nexport function executeReducerBuilderCallback<S>(builderCallback: (builder: ActionReducerMapBuilder<S>) => void): [CaseReducers<S, any>, ActionMatcherDescriptionCollection<S>, CaseReducer<S, Action> | undefined] {\n const actionsMap: CaseReducers<S, any> = {};\n const actionMatchers: ActionMatcherDescriptionCollection<S> = [];\n let defaultCaseReducer: CaseReducer<S, Action> | undefined;\n const builder = {\n addCase(typeOrActionCreator: string | TypedActionCreator<any>, reducer: CaseReducer<S>) {\n if (process.env.NODE_ENV !== 'production') {\n /*\n to keep the definition by the user in line with actual behavior,\n we enforce `addCase` to always be called before calling `addMatcher`\n as matching cases take precedence over matchers\n */\n if (actionMatchers.length > 0) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(26) : '`builder.addCase` should only be called before calling `builder.addMatcher`');\n }\n if (defaultCaseReducer) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(27) : '`builder.addCase` should only be called before calling `builder.addDefaultCase`');\n }\n }\n const type = typeof typeOrActionCreator === 'string' ? typeOrActionCreator : typeOrActionCreator.type;\n if (!type) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(28) : '`builder.addCase` cannot be called with an empty action type');\n }\n if (type in actionsMap) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(29) : '`builder.addCase` cannot be called with two reducers for the same action type ' + `'${type}'`);\n }\n actionsMap[type] = reducer;\n return builder;\n },\n addMatcher<A>(matcher: TypeGuard<A>, reducer: CaseReducer<S, A extends Action ? A : A & Action>) {\n if (process.env.NODE_ENV !== 'production') {\n if (defaultCaseReducer) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(30) : '`builder.addMatcher` should only be called before calling `builder.addDefaultCase`');\n }\n }\n actionMatchers.push({\n matcher,\n reducer\n });\n return builder;\n },\n addDefaultCase(reducer: CaseReducer<S, Action>) {\n if (process.env.NODE_ENV !== 'production') {\n if (defaultCaseReducer) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(31) : '`builder.addDefaultCase` can only be called once');\n }\n }\n defaultCaseReducer = reducer;\n return builder;\n }\n };\n builderCallback(builder);\n return [actionsMap, actionMatchers, defaultCaseReducer];\n}", "import type { ActionFromMatcher, Matcher, UnionToIntersection } from './tsHelpers';\nimport { hasMatchFunction } from './tsHelpers';\nimport type { AsyncThunk, AsyncThunkFulfilledActionCreator, AsyncThunkPendingActionCreator, AsyncThunkRejectedActionCreator } from './createAsyncThunk';\n\n/** @public */\nexport type ActionMatchingAnyOf<Matchers extends Matcher<any>[]> = ActionFromMatcher<Matchers[number]>;\n\n/** @public */\nexport type ActionMatchingAllOf<Matchers extends Matcher<any>[]> = UnionToIntersection<ActionMatchingAnyOf<Matchers>>;\nconst matches = (matcher: Matcher<any>, action: any) => {\n if (hasMatchFunction(matcher)) {\n return matcher.match(action);\n } else {\n return matcher(action);\n }\n};\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action matches any one of the supplied type guards or action\n * creators.\n *\n * @param matchers The type guards or action creators to match against.\n *\n * @public\n */\nexport function isAnyOf<Matchers extends Matcher<any>[]>(...matchers: Matchers) {\n return (action: any): action is ActionMatchingAnyOf<Matchers> => {\n return matchers.some(matcher => matches(matcher, action));\n };\n}\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action matches all of the supplied type guards or action\n * creators.\n *\n * @param matchers The type guards or action creators to match against.\n *\n * @public\n */\nexport function isAllOf<Matchers extends Matcher<any>[]>(...matchers: Matchers) {\n return (action: any): action is ActionMatchingAllOf<Matchers> => {\n return matchers.every(matcher => matches(matcher, action));\n };\n}\n\n/**\n * @param action A redux action\n * @param validStatus An array of valid meta.requestStatus values\n *\n * @internal\n */\nexport function hasExpectedRequestMetadata(action: any, validStatus: readonly string[]) {\n if (!action || !action.meta) return false;\n const hasValidRequestId = typeof action.meta.requestId === 'string';\n const hasValidRequestStatus = validStatus.indexOf(action.meta.requestStatus) > -1;\n return hasValidRequestId && hasValidRequestStatus;\n}\nfunction isAsyncThunkArray(a: [any] | AnyAsyncThunk[]): a is AnyAsyncThunk[] {\n return typeof a[0] === 'function' && 'pending' in a[0] && 'fulfilled' in a[0] && 'rejected' in a[0];\n}\nexport type UnknownAsyncThunkPendingAction = ReturnType<AsyncThunkPendingActionCreator<unknown>>;\nexport type PendingActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is pending.\n *\n * @public\n */\nexport function isPending(): (action: any) => action is UnknownAsyncThunkPendingAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is pending.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isPending<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is PendingActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a pending thunk action\n * @public\n */\nexport function isPending(action: any): action is UnknownAsyncThunkPendingAction;\nexport function isPending<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n if (asyncThunks.length === 0) {\n return (action: any) => hasExpectedRequestMetadata(action, ['pending']);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isPending()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.pending));\n}\nexport type UnknownAsyncThunkRejectedAction = ReturnType<AsyncThunkRejectedActionCreator<unknown, unknown>>;\nexport type RejectedActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is rejected.\n *\n * @public\n */\nexport function isRejected(): (action: any) => action is UnknownAsyncThunkRejectedAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is rejected.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isRejected<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a rejected thunk action\n * @public\n */\nexport function isRejected(action: any): action is UnknownAsyncThunkRejectedAction;\nexport function isRejected<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n if (asyncThunks.length === 0) {\n return (action: any) => hasExpectedRequestMetadata(action, ['rejected']);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isRejected()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.rejected));\n}\nexport type UnknownAsyncThunkRejectedWithValueAction = ReturnType<AsyncThunkRejectedActionCreator<unknown, unknown>>;\nexport type RejectedWithValueActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['rejected']> & (T extends AsyncThunk<any, any, {\n rejectValue: infer RejectedValue;\n}> ? {\n payload: RejectedValue;\n} : unknown);\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is rejected with value.\n *\n * @public\n */\nexport function isRejectedWithValue(): (action: any) => action is UnknownAsyncThunkRejectedAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is rejected with value.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isRejectedWithValue<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is RejectedWithValueActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a rejected thunk action with value\n * @public\n */\nexport function isRejectedWithValue(action: any): action is UnknownAsyncThunkRejectedAction;\nexport function isRejectedWithValue<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n const hasFlag = (action: any): action is any => {\n return action && action.meta && action.meta.rejectedWithValue;\n };\n if (asyncThunks.length === 0) {\n return isAllOf(isRejected(...asyncThunks), hasFlag);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isRejectedWithValue()(asyncThunks[0]);\n }\n return isAllOf(isRejected(...asyncThunks), hasFlag);\n}\nexport type UnknownAsyncThunkFulfilledAction = ReturnType<AsyncThunkFulfilledActionCreator<unknown, unknown>>;\nexport type FulfilledActionFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['fulfilled']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator, and that\n * the action is fulfilled.\n *\n * @public\n */\nexport function isFulfilled(): (action: any) => action is UnknownAsyncThunkFulfilledAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators,\n * and that the action is fulfilled.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isFulfilled<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is FulfilledActionFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a fulfilled thunk action\n * @public\n */\nexport function isFulfilled(action: any): action is UnknownAsyncThunkFulfilledAction;\nexport function isFulfilled<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n if (asyncThunks.length === 0) {\n return (action: any) => hasExpectedRequestMetadata(action, ['fulfilled']);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isFulfilled()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.map(asyncThunk => asyncThunk.fulfilled));\n}\nexport type UnknownAsyncThunkAction = UnknownAsyncThunkPendingAction | UnknownAsyncThunkRejectedAction | UnknownAsyncThunkFulfilledAction;\nexport type AnyAsyncThunk = {\n pending: {\n match: (action: any) => action is any;\n };\n fulfilled: {\n match: (action: any) => action is any;\n };\n rejected: {\n match: (action: any) => action is any;\n };\n};\nexport type ActionsFromAsyncThunk<T extends AnyAsyncThunk> = ActionFromMatcher<T['pending']> | ActionFromMatcher<T['fulfilled']> | ActionFromMatcher<T['rejected']>;\n\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action was created by an async thunk action creator.\n *\n * @public\n */\nexport function isAsyncThunkAction(): (action: any) => action is UnknownAsyncThunkAction;\n/**\n * A higher-order function that returns a function that may be used to check\n * whether an action belongs to one of the provided async thunk action creators.\n *\n * @param asyncThunks (optional) The async thunk action creators to match against.\n *\n * @public\n */\nexport function isAsyncThunkAction<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks): (action: any) => action is ActionsFromAsyncThunk<AsyncThunks[number]>;\n/**\n * Tests if `action` is a thunk action\n * @public\n */\nexport function isAsyncThunkAction(action: any): action is UnknownAsyncThunkAction;\nexport function isAsyncThunkAction<AsyncThunks extends [AnyAsyncThunk, ...AnyAsyncThunk[]]>(...asyncThunks: AsyncThunks | [any]) {\n if (asyncThunks.length === 0) {\n return (action: any) => hasExpectedRequestMetadata(action, ['pending', 'fulfilled', 'rejected']);\n }\n if (!isAsyncThunkArray(asyncThunks)) {\n return isAsyncThunkAction()(asyncThunks[0]);\n }\n return isAnyOf(...asyncThunks.flatMap(asyncThunk => [asyncThunk.pending, asyncThunk.rejected, asyncThunk.fulfilled]));\n}", "// Borrowed from https://github.com/ai/nanoid/blob/3.0.2/non-secure/index.js\n// This alphabet uses `A-Za-z0-9_-` symbols. A genetic algorithm helped\n// optimize the gzip compression for this alphabet.\nlet urlAlphabet = 'ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW';\n\n/**\r\n *\r\n * @public\r\n */\nexport let nanoid = (size = 21) => {\n let id = '';\n // A compact alternative for `for (var i = 0; i < step; i++)`.\n let i = size;\n while (i--) {\n // `| 0` is more compact and faster than `Math.floor()`.\n id += urlAlphabet[Math.random() * 64 | 0];\n }\n return id;\n};", "import type { Dispatch, UnknownAction } from 'redux';\nimport type { ThunkDispatch } from 'redux-thunk';\nimport type { ActionCreatorWithPreparedPayload } from './createAction';\nimport { createAction } from './createAction';\nimport { isAnyOf } from './matchers';\nimport { nanoid } from './nanoid';\nimport type { FallbackIfUnknown, Id, IsAny, IsUnknown, SafePromise } from './tsHelpers';\nexport type BaseThunkAPI<S, E, D extends Dispatch = Dispatch, RejectedValue = unknown, RejectedMeta = unknown, FulfilledMeta = unknown> = {\n dispatch: D;\n getState: () => S;\n extra: E;\n requestId: string;\n signal: AbortSignal;\n abort: (reason?: string) => void;\n rejectWithValue: IsUnknown<RejectedMeta, (value: RejectedValue) => RejectWithValue<RejectedValue, RejectedMeta>, (value: RejectedValue, meta: RejectedMeta) => RejectWithValue<RejectedValue, RejectedMeta>>;\n fulfillWithValue: IsUnknown<FulfilledMeta, <FulfilledValue>(value: FulfilledValue) => FulfilledValue, <FulfilledValue>(value: FulfilledValue, meta: FulfilledMeta) => FulfillWithMeta<FulfilledValue, FulfilledMeta>>;\n};\n\n/**\n * @public\n */\nexport interface SerializedError {\n name?: string;\n message?: string;\n stack?: string;\n code?: string;\n}\nconst commonProperties: Array<keyof SerializedError> = ['name', 'message', 'stack', 'code'];\nclass RejectWithValue<Payload, RejectedMeta> {\n /*\n type-only property to distinguish between RejectWithValue and FulfillWithMeta\n does not exist at runtime\n */\n private readonly _type!: 'RejectWithValue';\n constructor(public readonly payload: Payload, public readonly meta: RejectedMeta) {}\n}\nclass FulfillWithMeta<Payload, FulfilledMeta> {\n /*\n type-only property to distinguish between RejectWithValue and FulfillWithMeta\n does not exist at runtime\n */\n private readonly _type!: 'FulfillWithMeta';\n constructor(public readonly payload: Payload, public readonly meta: FulfilledMeta) {}\n}\n\n/**\n * Serializes an error into a plain object.\n * Reworked from https://github.com/sindresorhus/serialize-error\n *\n * @public\n */\nexport const miniSerializeError = (value: any): SerializedError => {\n if (typeof value === 'object' && value !== null) {\n const simpleError: SerializedError = {};\n for (const property of commonProperties) {\n if (typeof value[property] === 'string') {\n simpleError[property] = value[property];\n }\n }\n return simpleError;\n }\n return {\n message: String(value)\n };\n};\nexport type AsyncThunkConfig = {\n state?: unknown;\n dispatch?: ThunkDispatch<unknown, unknown, UnknownAction>;\n extra?: unknown;\n rejectValue?: unknown;\n serializedErrorType?: unknown;\n pendingMeta?: unknown;\n fulfilledMeta?: unknown;\n rejectedMeta?: unknown;\n};\nexport type GetState<ThunkApiConfig> = ThunkApiConfig extends {\n state: infer State;\n} ? State : unknown;\ntype GetExtra<ThunkApiConfig> = ThunkApiConfig extends {\n extra: infer Extra;\n} ? Extra : unknown;\ntype GetDispatch<ThunkApiConfig> = ThunkApiConfig extends {\n dispatch: infer Dispatch;\n} ? FallbackIfUnknown<Dispatch, ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>> : ThunkDispatch<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, UnknownAction>;\nexport type GetThunkAPI<ThunkApiConfig> = BaseThunkAPI<GetState<ThunkApiConfig>, GetExtra<ThunkApiConfig>, GetDispatch<ThunkApiConfig>, GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>, GetFulfilledMeta<ThunkApiConfig>>;\ntype GetRejectValue<ThunkApiConfig> = ThunkApiConfig extends {\n rejectValue: infer RejectValue;\n} ? RejectValue : unknown;\ntype GetPendingMeta<ThunkApiConfig> = ThunkApiConfig extends {\n pendingMeta: infer PendingMeta;\n} ? PendingMeta : unknown;\ntype GetFulfilledMeta<ThunkApiConfig> = ThunkApiConfig extends {\n fulfilledMeta: infer FulfilledMeta;\n} ? FulfilledMeta : unknown;\ntype GetRejectedMeta<ThunkApiConfig> = ThunkApiConfig extends {\n rejectedMeta: infer RejectedMeta;\n} ? RejectedMeta : unknown;\ntype GetSerializedErrorType<ThunkApiConfig> = ThunkApiConfig extends {\n serializedErrorType: infer GetSerializedErrorType;\n} ? GetSerializedErrorType : SerializedError;\ntype MaybePromise<T> = T | Promise<T> | (T extends any ? Promise<T> : never);\n\n/**\n * A type describing the return value of the `payloadCreator` argument to `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig extends AsyncThunkConfig> = MaybePromise<IsUnknown<GetFulfilledMeta<ThunkApiConfig>, Returned, FulfillWithMeta<Returned, GetFulfilledMeta<ThunkApiConfig>>> | RejectWithValue<GetRejectValue<ThunkApiConfig>, GetRejectedMeta<ThunkApiConfig>>>;\n/**\n * A type describing the `payloadCreator` argument to `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunkPayloadCreator<Returned, ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = (arg: ThunkArg, thunkAPI: GetThunkAPI<ThunkApiConfig>) => AsyncThunkPayloadCreatorReturnValue<Returned, ThunkApiConfig>;\n\n/**\n * A ThunkAction created by `createAsyncThunk`.\n * Dispatching it returns a Promise for either a\n * fulfilled or rejected action.\n * Also, the returned value contains an `abort()` method\n * that allows the asyncAction to be cancelled from the outside.\n *\n * @public\n */\nexport type AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = (dispatch: NonNullable<GetDispatch<ThunkApiConfig>>, getState: () => GetState<ThunkApiConfig>, extra: GetExtra<ThunkApiConfig>) => SafePromise<ReturnType<AsyncThunkFulfilledActionCreator<Returned, ThunkArg>> | ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>>> & {\n abort: (reason?: string) => void;\n requestId: string;\n arg: ThunkArg;\n unwrap: () => Promise<Returned>;\n};\ntype AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = IsAny<ThunkArg,\n// any handling\n(arg: ThunkArg) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>,\n// unknown handling\nunknown extends ThunkArg ? (arg: ThunkArg) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument not specified or specified as void or undefined\n: [ThunkArg] extends [void] | [undefined] ? () => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument contains void\n: [void] extends [ThunkArg] // make optional\n? (arg?: ThunkArg) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig> // argument contains undefined\n: [undefined] extends [ThunkArg] ? WithStrictNullChecks<\n// with strict nullChecks: make optional\n(arg?: ThunkArg) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>,\n// without strict null checks this will match everything, so don't make it optional\n(arg: ThunkArg) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>> // default case: normal argument\n: (arg: ThunkArg) => AsyncThunkAction<Returned, ThunkArg, ThunkApiConfig>>;\n\n/**\n * Options object for `createAsyncThunk`.\n *\n * @public\n */\nexport type AsyncThunkOptions<ThunkArg = void, ThunkApiConfig extends AsyncThunkConfig = {}> = {\n /**\n * A method to control whether the asyncThunk should be executed. Has access to the\n * `arg`, `api.getState()` and `api.extra` arguments.\n *\n * @returns `false` if it should be skipped\n */\n condition?(arg: ThunkArg, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): MaybePromise<boolean | undefined>;\n /**\n * If `condition` returns `false`, the asyncThunk will be skipped.\n * This option allows you to control whether a `rejected` action with `meta.condition == false`\n * will be dispatched or not.\n *\n * @default `false`\n */\n dispatchConditionRejection?: boolean;\n serializeError?: (x: unknown) => GetSerializedErrorType<ThunkApiConfig>;\n\n /**\n * A function to use when generating the `requestId` for the request sequence.\n *\n * @default `nanoid`\n */\n idGenerator?: (arg: ThunkArg) => string;\n} & IsUnknown<GetPendingMeta<ThunkApiConfig>, {\n /**\n * A method to generate additional properties to be added to `meta` of the pending action.\n *\n * Using this optional overload will not modify the types correctly, this overload is only in place to support JavaScript users.\n * Please use the `ThunkApiConfig` parameter `pendingMeta` to get access to a correctly typed overload\n */\n getPendingMeta?(base: {\n arg: ThunkArg;\n requestId: string;\n }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;\n}, {\n /**\n * A method to generate additional properties to be added to `meta` of the pending action.\n */\n getPendingMeta(base: {\n arg: ThunkArg;\n requestId: string;\n }, api: Pick<GetThunkAPI<ThunkApiConfig>, 'getState' | 'extra'>): GetPendingMeta<ThunkApiConfig>;\n}>;\nexport type AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[string, ThunkArg, GetPendingMeta<ThunkApiConfig>?], undefined, string, never, {\n arg: ThunkArg;\n requestId: string;\n requestStatus: 'pending';\n} & GetPendingMeta<ThunkApiConfig>>;\nexport type AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[Error | null, string, ThunkArg, GetRejectValue<ThunkApiConfig>?, GetRejectedMeta<ThunkApiConfig>?], GetRejectValue<ThunkApiConfig> | undefined, string, GetSerializedErrorType<ThunkApiConfig>, {\n arg: ThunkArg;\n requestId: string;\n requestStatus: 'rejected';\n aborted: boolean;\n condition: boolean;\n} & (({\n rejectedWithValue: false;\n} & { [K in keyof GetRejectedMeta<ThunkApiConfig>]?: undefined }) | ({\n rejectedWithValue: true;\n} & GetRejectedMeta<ThunkApiConfig>))>;\nexport type AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig = {}> = ActionCreatorWithPreparedPayload<[Returned, string, ThunkArg, GetFulfilledMeta<ThunkApiConfig>?], Returned, string, never, {\n arg: ThunkArg;\n requestId: string;\n requestStatus: 'fulfilled';\n} & GetFulfilledMeta<ThunkApiConfig>>;\n\n/**\n * A type describing the return value of `createAsyncThunk`.\n * Might be useful for wrapping `createAsyncThunk` in custom abstractions.\n *\n * @public\n */\nexport type AsyncThunk<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig> = AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig> & {\n pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig>;\n rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig>;\n fulfilled: AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>;\n // matchSettled?\n settled: (action: any) => action is ReturnType<AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig> | AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig>>;\n typePrefix: string;\n};\nexport type OverrideThunkApiConfigs<OldConfig, NewConfig> = Id<NewConfig & Omit<OldConfig, keyof NewConfig>>;\nexport type CreateAsyncThunkFunction<CurriedThunkApiConfig extends AsyncThunkConfig> = {\n /**\n *\n * @param typePrefix\n * @param payloadCreator\n * @param options\n *\n * @public\n */\n // separate signature without `AsyncThunkConfig` for better inference\n <Returned, ThunkArg = void>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, options?: AsyncThunkOptions<ThunkArg, CurriedThunkApiConfig>): AsyncThunk<Returned, ThunkArg, CurriedThunkApiConfig>;\n\n /**\n *\n * @param typePrefix\n * @param payloadCreator\n * @param options\n *\n * @public\n */\n <Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>, options?: AsyncThunkOptions<ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>): AsyncThunk<Returned, ThunkArg, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n};\ntype CreateAsyncThunk<CurriedThunkApiConfig extends AsyncThunkConfig> = CreateAsyncThunkFunction<CurriedThunkApiConfig> & {\n withTypes<ThunkApiConfig extends AsyncThunkConfig>(): CreateAsyncThunk<OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n};\nexport const createAsyncThunk = /* @__PURE__ */(() => {\n function createAsyncThunk<Returned, ThunkArg, ThunkApiConfig extends AsyncThunkConfig>(typePrefix: string, payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>, options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>): AsyncThunk<Returned, ThunkArg, ThunkApiConfig> {\n type RejectedValue = GetRejectValue<ThunkApiConfig>;\n type PendingMeta = GetPendingMeta<ThunkApiConfig>;\n type FulfilledMeta = GetFulfilledMeta<ThunkApiConfig>;\n type RejectedMeta = GetRejectedMeta<ThunkApiConfig>;\n const fulfilled: AsyncThunkFulfilledActionCreator<Returned, ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/fulfilled', (payload: Returned, requestId: string, arg: ThunkArg, meta?: FulfilledMeta) => ({\n payload,\n meta: {\n ...(meta as any || {}),\n arg,\n requestId,\n requestStatus: 'fulfilled' as const\n }\n }));\n const pending: AsyncThunkPendingActionCreator<ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/pending', (requestId: string, arg: ThunkArg, meta?: PendingMeta) => ({\n payload: undefined,\n meta: {\n ...(meta as any || {}),\n arg,\n requestId,\n requestStatus: 'pending' as const\n }\n }));\n const rejected: AsyncThunkRejectedActionCreator<ThunkArg, ThunkApiConfig> = createAction(typePrefix + '/rejected', (error: Error | null, requestId: string, arg: ThunkArg, payload?: RejectedValue, meta?: RejectedMeta) => ({\n payload,\n error: (options && options.serializeError || miniSerializeError)(error || 'Rejected') as GetSerializedErrorType<ThunkApiConfig>,\n meta: {\n ...(meta as any || {}),\n arg,\n requestId,\n rejectedWithValue: !!payload,\n requestStatus: 'rejected' as const,\n aborted: error?.name === 'AbortError',\n condition: error?.name === 'ConditionError'\n }\n }));\n function actionCreator(arg: ThunkArg): AsyncThunkAction<Returned, ThunkArg, Required<ThunkApiConfig>> {\n return (dispatch, getState, extra) => {\n const requestId = options?.idGenerator ? options.idGenerator(arg) : nanoid();\n const abortController = new AbortController();\n let abortHandler: (() => void) | undefined;\n let abortReason: string | undefined;\n function abort(reason?: string) {\n abortReason = reason;\n abortController.abort();\n }\n const promise = async function () {\n let finalAction: ReturnType<typeof fulfilled | typeof rejected>;\n try {\n let conditionResult = options?.condition?.(arg, {\n getState,\n extra\n });\n if (isThenable(conditionResult)) {\n conditionResult = await conditionResult;\n }\n if (conditionResult === false || abortController.signal.aborted) {\n // eslint-disable-next-line no-throw-literal\n throw {\n name: 'ConditionError',\n message: 'Aborted due to condition callback returning false.'\n };\n }\n const abortedPromise = new Promise<never>((_, reject) => {\n abortHandler = () => {\n reject({\n name: 'AbortError',\n message: abortReason || 'Aborted'\n });\n };\n abortController.signal.addEventListener('abort', abortHandler);\n });\n dispatch(pending(requestId, arg, options?.getPendingMeta?.({\n requestId,\n arg\n }, {\n getState,\n extra\n })) as any);\n finalAction = await Promise.race([abortedPromise, Promise.resolve(payloadCreator(arg, {\n dispatch,\n getState,\n extra,\n requestId,\n signal: abortController.signal,\n abort,\n rejectWithValue: ((value: RejectedValue, meta?: RejectedMeta) => {\n return new RejectWithValue(value, meta);\n }) as any,\n fulfillWithValue: ((value: unknown, meta?: FulfilledMeta) => {\n return new FulfillWithMeta(value, meta);\n }) as any\n })).then(result => {\n if (result instanceof RejectWithValue) {\n throw result;\n }\n if (result instanceof FulfillWithMeta) {\n return fulfilled(result.payload, requestId, arg, result.meta);\n }\n return fulfilled(result as any, requestId, arg);\n })]);\n } catch (err) {\n finalAction = err instanceof RejectWithValue ? rejected(null, requestId, arg, err.payload, err.meta) : rejected(err as any, requestId, arg);\n } finally {\n if (abortHandler) {\n abortController.signal.removeEventListener('abort', abortHandler);\n }\n }\n // We dispatch the result action _after_ the catch, to avoid having any errors\n // here get swallowed by the try/catch block,\n // per https://twitter.com/dan_abramov/status/770914221638942720\n // and https://github.com/reduxjs/redux-toolkit/blob/e85eb17b39a2118d859f7b7746e0f3fee523e089/docs/tutorials/advanced-tutorial.md#async-error-handling-logic-in-thunks\n\n const skipDispatch = options && !options.dispatchConditionRejection && rejected.match(finalAction) && (finalAction as any).meta.condition;\n if (!skipDispatch) {\n dispatch(finalAction as any);\n }\n return finalAction;\n }();\n return Object.assign(promise as SafePromise<any>, {\n abort,\n requestId,\n arg,\n unwrap() {\n return promise.then<any>(unwrapResult);\n }\n });\n };\n }\n return Object.assign(actionCreator as AsyncThunkActionCreator<Returned, ThunkArg, ThunkApiConfig>, {\n pending,\n rejected,\n fulfilled,\n settled: isAnyOf(rejected, fulfilled),\n typePrefix\n });\n }\n createAsyncThunk.withTypes = () => createAsyncThunk;\n return createAsyncThunk as CreateAsyncThunk<AsyncThunkConfig>;\n})();\ninterface UnwrappableAction {\n payload: any;\n meta?: any;\n error?: any;\n}\ntype UnwrappedActionPayload<T extends UnwrappableAction> = Exclude<T, {\n error: any;\n}>['payload'];\n\n/**\n * @public\n */\nexport function unwrapResult<R extends UnwrappableAction>(action: R): UnwrappedActionPayload<R> {\n if (action.meta && action.meta.rejectedWithValue) {\n throw action.payload;\n }\n if (action.error) {\n throw action.error;\n }\n return action.payload;\n}\ntype WithStrictNullChecks<True, False> = undefined extends boolean ? False : True;\nfunction isThenable(value: any): value is PromiseLike<any> {\n return value !== null && typeof value === 'object' && typeof value.then === 'function';\n}", "import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3, formatProdErrorMessage as _formatProdErrorMessage4, formatProdErrorMessage as _formatProdErrorMessage5, formatProdErrorMessage as _formatProdErrorMessage6, formatProdErrorMessage as _formatProdErrorMessage7, formatProdErrorMessage as _formatProdErrorMessage8 } from \"@reduxjs/toolkit\";\nimport type { Action, Reducer, UnknownAction } from 'redux';\nimport type { Selector } from 'reselect';\nimport type { InjectConfig } from './combineSlices';\nimport type { ActionCreatorWithoutPayload, PayloadAction, PayloadActionCreator, PrepareAction, _ActionCreatorWithPreparedPayload } from './createAction';\nimport { createAction } from './createAction';\nimport type { AsyncThunk, AsyncThunkConfig, AsyncThunkOptions, AsyncThunkPayloadCreator, OverrideThunkApiConfigs } from './createAsyncThunk';\nimport { createAsyncThunk as _createAsyncThunk } from './createAsyncThunk';\nimport type { ActionMatcherDescriptionCollection, CaseReducer, ReducerWithInitialState } from './createReducer';\nimport { createReducer } from './createReducer';\nimport type { ActionReducerMapBuilder, TypedActionCreator } from './mapBuilders';\nimport { executeReducerBuilderCallback } from './mapBuilders';\nimport type { Id, TypeGuard } from './tsHelpers';\nimport { getOrInsertComputed } from './utils';\nconst asyncThunkSymbol = /* @__PURE__ */Symbol.for('rtk-slice-createasyncthunk');\n// type is annotated because it's too long to infer\nexport const asyncThunkCreator: {\n [asyncThunkSymbol]: typeof _createAsyncThunk;\n} = {\n [asyncThunkSymbol]: _createAsyncThunk\n};\ntype InjectIntoConfig<NewReducerPath extends string> = InjectConfig & {\n reducerPath?: NewReducerPath;\n};\n\n/**\n * The return value of `createSlice`\n *\n * @public\n */\nexport interface Slice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {\n /**\n * The slice name.\n */\n name: Name;\n\n /**\n * The slice reducer path.\n */\n reducerPath: ReducerPath;\n\n /**\n * The slice's reducer.\n */\n reducer: Reducer<State>;\n\n /**\n * Action creators for the types of actions that are handled by the slice\n * reducer.\n */\n actions: CaseReducerActions<CaseReducers, Name>;\n\n /**\n * The individual case reducer functions that were passed in the `reducers` parameter.\n * This enables reuse and testing if they were defined inline when calling `createSlice`.\n */\n caseReducers: SliceDefinedCaseReducers<CaseReducers>;\n\n /**\n * Provides access to the initial state value given to the slice.\n * If a lazy state initializer was provided, it will be called and a fresh value returned.\n */\n getInitialState: () => State;\n\n /**\n * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)\n */\n getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State>>;\n\n /**\n * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)\n */\n getSelectors<RootState>(selectState: (rootState: RootState) => State): Id<SliceDefinedSelectors<State, Selectors, RootState>>;\n\n /**\n * Selectors that assume the slice's state is `rootState[slice.reducerPath]` (which is usually the case)\n *\n * Equivalent to `slice.getSelectors((state: RootState) => state[slice.reducerPath])`.\n */\n get selectors(): Id<SliceDefinedSelectors<State, Selectors, { [K in ReducerPath]: State }>>;\n\n /**\n * Inject slice into provided reducer (return value from `combineSlices`), and return injected slice.\n */\n injectInto<NewReducerPath extends string = ReducerPath>(this: this, injectable: {\n inject: (slice: {\n reducerPath: string;\n reducer: Reducer;\n }, config?: InjectConfig) => void;\n }, config?: InjectIntoConfig<NewReducerPath>): InjectedSlice<State, CaseReducers, Name, NewReducerPath, Selectors>;\n\n /**\n * Select the slice state, using the slice's current reducerPath.\n *\n * Will throw an error if slice is not found.\n */\n selectSlice(state: { [K in ReducerPath]: State }): State;\n}\n\n/**\n * A slice after being called with `injectInto(reducer)`.\n *\n * Selectors can now be called with an `undefined` value, in which case they use the slice's initial state.\n */\ntype InjectedSlice<State = any, CaseReducers extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> = Omit<Slice<State, CaseReducers, Name, ReducerPath, Selectors>, 'getSelectors' | 'selectors'> & {\n /**\n * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)\n */\n getSelectors(): Id<SliceDefinedSelectors<State, Selectors, State | undefined>>;\n\n /**\n * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)\n */\n getSelectors<RootState>(selectState: (rootState: RootState) => State | undefined): Id<SliceDefinedSelectors<State, Selectors, RootState>>;\n\n /**\n * Selectors that assume the slice's state is `rootState[slice.name]` (which is usually the case)\n *\n * Equivalent to `slice.getSelectors((state: RootState) => state[slice.name])`.\n */\n get selectors(): Id<SliceDefinedSelectors<State, Selectors, { [K in ReducerPath]?: State | undefined }>>;\n\n /**\n * Select the slice state, using the slice's current reducerPath.\n *\n * Returns initial state if slice is not found.\n */\n selectSlice(state: { [K in ReducerPath]?: State | undefined }): State;\n};\n\n/**\n * Options for `createSlice()`.\n *\n * @public\n */\nexport interface CreateSliceOptions<State = any, CR extends SliceCaseReducers<State> = SliceCaseReducers<State>, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors<State> = SliceSelectors<State>> {\n /**\n * The slice's name. Used to namespace the generated action types.\n */\n name: Name;\n\n /**\n * The slice's reducer path. Used when injecting into a combined slice reducer.\n */\n reducerPath?: ReducerPath;\n\n /**\n * The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\n */\n initialState: State | (() => State);\n\n /**\n * A mapping from action types to action-type-specific *case reducer*\n * functions. For every action type, a matching action creator will be\n * generated using `createAction()`.\n */\n reducers: ValidateSliceCaseReducers<State, CR> | ((creators: ReducerCreators<State>) => CR);\n\n /**\n * A callback that receives a *builder* object to define\n * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\n *\n *\n * @example\n ```ts\n import { createAction, createSlice, Action } from '@reduxjs/toolkit'\n const incrementBy = createAction<number>('incrementBy')\n const decrement = createAction('decrement')\n interface RejectedAction extends Action {\n error: Error\n }\n function isRejectedAction(action: Action): action is RejectedAction {\n return action.type.endsWith('rejected')\n }\n createSlice({\n name: 'counter',\n initialState: 0,\n reducers: {},\n extraReducers: builder => {\n builder\n .addCase(incrementBy, (state, action) => {\n // action is inferred correctly here if using TS\n })\n // You can chain calls, or have separate `builder.addCase()` lines each time\n .addCase(decrement, (state, action) => {})\n // You can match a range of action types\n .addMatcher(\n isRejectedAction,\n // `action` will be inferred as a RejectedAction due to isRejectedAction being defined as a type guard\n (state, action) => {}\n )\n // and provide a default case if no other handlers matched\n .addDefaultCase((state, action) => {})\n }\n })\n ```\n */\n extraReducers?: (builder: ActionReducerMapBuilder<State>) => void;\n\n /**\n * A map of selectors that receive the slice's state and any additional arguments, and return a result.\n */\n selectors?: Selectors;\n}\nexport enum ReducerType {\n reducer = 'reducer',\n reducerWithPrepare = 'reducerWithPrepare',\n asyncThunk = 'asyncThunk',\n}\ntype ReducerDefinition<T extends ReducerType = ReducerType> = {\n _reducerDefinitionType: T;\n};\nexport type CaseReducerDefinition<S = any, A extends Action = UnknownAction> = CaseReducer<S, A> & ReducerDefinition<ReducerType.reducer>;\n\n/**\n * A CaseReducer with a `prepare` method.\n *\n * @public\n */\nexport type CaseReducerWithPrepare<State, Action extends PayloadAction> = {\n reducer: CaseReducer<State, Action>;\n prepare: PrepareAction<Action['payload']>;\n};\nexport interface CaseReducerWithPrepareDefinition<State, Action extends PayloadAction> extends CaseReducerWithPrepare<State, Action>, ReducerDefinition<ReducerType.reducerWithPrepare> {}\ntype AsyncThunkSliceReducerConfig<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = {\n pending?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['pending']>>;\n rejected?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected']>>;\n fulfilled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['fulfilled']>>;\n settled?: CaseReducer<State, ReturnType<AsyncThunk<Returned, ThunkArg, ThunkApiConfig>['rejected' | 'fulfilled']>>;\n options?: AsyncThunkOptions<ThunkArg, ThunkApiConfig>;\n};\ntype AsyncThunkSliceReducerDefinition<State, ThunkArg extends any, Returned = unknown, ThunkApiConfig extends AsyncThunkConfig = {}> = AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig> & ReducerDefinition<ReducerType.asyncThunk> & {\n payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>;\n};\n\n/**\n * Providing these as part of the config would cause circular types, so we disallow passing them\n */\ntype PreventCircular<ThunkApiConfig> = { [K in keyof ThunkApiConfig]: K extends 'state' | 'dispatch' ? never : ThunkApiConfig[K] };\ninterface AsyncThunkCreator<State, CurriedThunkApiConfig extends PreventCircular<AsyncThunkConfig> = PreventCircular<AsyncThunkConfig>> {\n <Returned, ThunkArg = void>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, CurriedThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, CurriedThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, CurriedThunkApiConfig>;\n <Returned, ThunkArg, ThunkApiConfig extends PreventCircular<AsyncThunkConfig> = {}>(payloadCreator: AsyncThunkPayloadCreator<Returned, ThunkArg, ThunkApiConfig>, config?: AsyncThunkSliceReducerConfig<State, ThunkArg, Returned, ThunkApiConfig>): AsyncThunkSliceReducerDefinition<State, ThunkArg, Returned, ThunkApiConfig>;\n withTypes<ThunkApiConfig extends PreventCircular<AsyncThunkConfig>>(): AsyncThunkCreator<State, OverrideThunkApiConfigs<CurriedThunkApiConfig, ThunkApiConfig>>;\n}\nexport interface ReducerCreators<State> {\n reducer(caseReducer: CaseReducer<State, PayloadAction>): CaseReducerDefinition<State, PayloadAction>;\n reducer<Payload>(caseReducer: CaseReducer<State, PayloadAction<Payload>>): CaseReducerDefinition<State, PayloadAction<Payload>>;\n asyncThunk: AsyncThunkCreator<State>;\n preparedReducer<Prepare extends PrepareAction<any>>(prepare: Prepare, reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>): {\n _reducerDefinitionType: ReducerType.reducerWithPrepare;\n prepare: Prepare;\n reducer: CaseReducer<State, ReturnType<_ActionCreatorWithPreparedPayload<Prepare>>>;\n };\n}\n\n/**\n * The type describing a slice's `reducers` option.\n *\n * @public\n */\nexport type SliceCaseReducers<State> = Record<string, ReducerDefinition> | Record<string, CaseReducer<State, PayloadAction<any>> | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>>;\n\n/**\n * The type describing a slice's `selectors` option.\n */\nexport type SliceSelectors<State> = {\n [K: string]: (sliceState: State, ...args: any[]) => any;\n};\ntype SliceActionType<SliceName extends string, ActionName extends keyof any> = ActionName extends string | number ? `${SliceName}/${ActionName}` : string;\n\n/**\n * Derives the slice's `actions` property from the `reducers` options\n *\n * @public\n */\nexport type CaseReducerActions<CaseReducers extends SliceCaseReducers<any>, SliceName extends string> = { [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends {\n prepare: any;\n} ? ActionCreatorForCaseReducerWithPrepare<Definition, SliceActionType<SliceName, Type>> : Definition extends AsyncThunkSliceReducerDefinition<any, infer ThunkArg, infer Returned, infer ThunkApiConfig> ? AsyncThunk<Returned, ThunkArg, ThunkApiConfig> : Definition extends {\n reducer: any;\n} ? ActionCreatorForCaseReducer<Definition['reducer'], SliceActionType<SliceName, Type>> : ActionCreatorForCaseReducer<Definition, SliceActionType<SliceName, Type>> : never };\n\n/**\n * Get a `PayloadActionCreator` type for a passed `CaseReducerWithPrepare`\n *\n * @internal\n */\ntype ActionCreatorForCaseReducerWithPrepare<CR extends {\n prepare: any;\n}, Type extends string> = _ActionCreatorWithPreparedPayload<CR['prepare'], Type>;\n\n/**\n * Get a `PayloadActionCreator` type for a passed `CaseReducer`\n *\n * @internal\n */\ntype ActionCreatorForCaseReducer<CR, Type extends string> = CR extends (state: any, action: infer Action) => any ? Action extends {\n payload: infer P;\n} ? PayloadActionCreator<P, Type> : ActionCreatorWithoutPayload<Type> : ActionCreatorWithoutPayload<Type>;\n\n/**\n * Extracts the CaseReducers out of a `reducers` object, even if they are\n * tested into a `CaseReducerWithPrepare`.\n *\n * @internal\n */\ntype SliceDefinedCaseReducers<CaseReducers extends SliceCaseReducers<any>> = { [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends AsyncThunkSliceReducerDefinition<any, any, any> ? Id<Pick<Required<Definition>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>> : Definition extends {\n reducer: infer Reducer;\n} ? Reducer : Definition : never };\ntype RemappedSelector<S extends Selector, NewState> = S extends Selector<any, infer R, infer P> ? Selector<NewState, R, P> & {\n unwrapped: S;\n} : never;\n\n/**\n * Extracts the final selector type from the `selectors` object.\n *\n * Removes the `string` index signature from the default value.\n */\ntype SliceDefinedSelectors<State, Selectors extends SliceSelectors<State>, RootState> = { [K in keyof Selectors as string extends K ? never : K]: RemappedSelector<Selectors[K], RootState> };\n\n/**\n * Used on a SliceCaseReducers object.\n * Ensures that if a CaseReducer is a `CaseReducerWithPrepare`, that\n * the `reducer` and the `prepare` function use the same type of `payload`.\n *\n * Might do additional such checks in the future.\n *\n * This type is only ever useful if you want to write your own wrapper around\n * `createSlice`. Please don't use it otherwise!\n *\n * @public\n */\nexport type ValidateSliceCaseReducers<S, ACR extends SliceCaseReducers<S>> = ACR & { [T in keyof ACR]: ACR[T] extends {\n reducer(s: S, action?: infer A): any;\n} ? {\n prepare(...a: never[]): Omit<A, 'type'>;\n} : {} };\nfunction getType(slice: string, actionKey: string): string {\n return `${slice}/${actionKey}`;\n}\ninterface BuildCreateSliceConfig {\n creators?: {\n asyncThunk?: typeof asyncThunkCreator;\n };\n}\nexport function buildCreateSlice({\n creators\n}: BuildCreateSliceConfig = {}) {\n const cAT = creators?.asyncThunk?.[asyncThunkSymbol];\n return function createSlice<State, CaseReducers extends SliceCaseReducers<State>, Name extends string, Selectors extends SliceSelectors<State>, ReducerPath extends string = Name>(options: CreateSliceOptions<State, CaseReducers, Name, ReducerPath, Selectors>): Slice<State, CaseReducers, Name, ReducerPath, Selectors> {\n const {\n name,\n reducerPath = name as unknown as ReducerPath\n } = options;\n if (!name) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(11) : '`name` is a required option for createSlice');\n }\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n if (options.initialState === undefined) {\n console.error('You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`');\n }\n }\n const reducers = (typeof options.reducers === 'function' ? options.reducers(buildReducerCreators<State>()) : options.reducers) || {};\n const reducerNames = Object.keys(reducers);\n const context: ReducerHandlingContext<State> = {\n sliceCaseReducersByName: {},\n sliceCaseReducersByType: {},\n actionCreators: {},\n sliceMatchers: []\n };\n const contextMethods: ReducerHandlingContextMethods<State> = {\n addCase(typeOrActionCreator: string | TypedActionCreator<any>, reducer: CaseReducer<State>) {\n const type = typeof typeOrActionCreator === 'string' ? typeOrActionCreator : typeOrActionCreator.type;\n if (!type) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(12) : '`context.addCase` cannot be called with an empty action type');\n }\n if (type in context.sliceCaseReducersByType) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(13) : '`context.addCase` cannot be called with two reducers for the same action type: ' + type);\n }\n context.sliceCaseReducersByType[type] = reducer;\n return contextMethods;\n },\n addMatcher(matcher, reducer) {\n context.sliceMatchers.push({\n matcher,\n reducer\n });\n return contextMethods;\n },\n exposeAction(name, actionCreator) {\n context.actionCreators[name] = actionCreator;\n return contextMethods;\n },\n exposeCaseReducer(name, reducer) {\n context.sliceCaseReducersByName[name] = reducer;\n return contextMethods;\n }\n };\n reducerNames.forEach(reducerName => {\n const reducerDefinition = reducers[reducerName];\n const reducerDetails: ReducerDetails = {\n reducerName,\n type: getType(name, reducerName),\n createNotation: typeof options.reducers === 'function'\n };\n if (isAsyncThunkSliceReducerDefinition<State>(reducerDefinition)) {\n handleThunkCaseReducerDefinition(reducerDetails, reducerDefinition, contextMethods, cAT);\n } else {\n handleNormalReducerDefinition<State>(reducerDetails, reducerDefinition as any, contextMethods);\n }\n });\n function buildReducer() {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof options.extraReducers === 'object') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(14) : \"The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice\");\n }\n }\n const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = undefined] = typeof options.extraReducers === 'function' ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];\n const finalCaseReducers = {\n ...extraReducers,\n ...context.sliceCaseReducersByType\n };\n return createReducer(options.initialState, builder => {\n for (let key in finalCaseReducers) {\n builder.addCase(key, finalCaseReducers[key] as CaseReducer<any>);\n }\n for (let sM of context.sliceMatchers) {\n builder.addMatcher(sM.matcher, sM.reducer);\n }\n for (let m of actionMatchers) {\n builder.addMatcher(m.matcher, m.reducer);\n }\n if (defaultCaseReducer) {\n builder.addDefaultCase(defaultCaseReducer);\n }\n });\n }\n const selectSelf = (state: State) => state;\n const injectedSelectorCache = new Map<boolean, WeakMap<(rootState: any) => State | undefined, Record<string, (rootState: any) => any>>>();\n let _reducer: ReducerWithInitialState<State>;\n function reducer(state: State | undefined, action: UnknownAction) {\n if (!_reducer) _reducer = buildReducer();\n return _reducer(state, action);\n }\n function getInitialState() {\n if (!_reducer) _reducer = buildReducer();\n return _reducer.getInitialState();\n }\n function makeSelectorProps<CurrentReducerPath extends string = ReducerPath>(reducerPath: CurrentReducerPath, injected = false): Pick<Slice<State, CaseReducers, Name, CurrentReducerPath, Selectors>, 'getSelectors' | 'selectors' | 'selectSlice' | 'reducerPath'> {\n function selectSlice(state: { [K in CurrentReducerPath]: State }) {\n let sliceState = state[reducerPath];\n if (typeof sliceState === 'undefined') {\n if (injected) {\n sliceState = getInitialState();\n } else if (process.env.NODE_ENV !== 'production') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(15) : 'selectSlice returned undefined for an uninjected slice reducer');\n }\n }\n return sliceState;\n }\n function getSelectors(selectState: (rootState: any) => State = selectSelf) {\n const selectorCache = getOrInsertComputed(injectedSelectorCache, injected, () => new WeakMap());\n return getOrInsertComputed(selectorCache, selectState, () => {\n const map: Record<string, Selector<any, any>> = {};\n for (const [name, selector] of Object.entries(options.selectors ?? {})) {\n map[name] = wrapSelector(selector, selectState, getInitialState, injected);\n }\n return map;\n }) as any;\n }\n return {\n reducerPath,\n getSelectors,\n get selectors() {\n return getSelectors(selectSlice);\n },\n selectSlice\n };\n }\n const slice: Slice<State, CaseReducers, Name, ReducerPath, Selectors> = {\n name,\n reducer,\n actions: context.actionCreators as any,\n caseReducers: context.sliceCaseReducersByName as any,\n getInitialState,\n ...makeSelectorProps(reducerPath),\n injectInto(injectable, {\n reducerPath: pathOpt,\n ...config\n } = {}) {\n const newReducerPath = pathOpt ?? reducerPath;\n injectable.inject({\n reducerPath: newReducerPath,\n reducer\n }, config);\n return {\n ...slice,\n ...makeSelectorProps(newReducerPath, true)\n } as any;\n }\n };\n return slice;\n };\n}\nfunction wrapSelector<State, NewState, S extends Selector<State>>(selector: S, selectState: Selector<NewState, State>, getInitialState: () => State, injected?: boolean) {\n function wrapper(rootState: NewState, ...args: any[]) {\n let sliceState = selectState(rootState);\n if (typeof sliceState === 'undefined') {\n if (injected) {\n sliceState = getInitialState();\n } else if (process.env.NODE_ENV !== 'production') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(16) : 'selectState returned undefined for an uninjected slice reducer');\n }\n }\n return selector(sliceState, ...args);\n }\n wrapper.unwrapped = selector;\n return wrapper as RemappedSelector<S, NewState>;\n}\n\n/**\n * A function that accepts an initial state, an object full of reducer\n * functions, and a \"slice name\", and automatically generates\n * action creators and action types that correspond to the\n * reducers and state.\n *\n * @public\n */\nexport const createSlice = /* @__PURE__ */buildCreateSlice();\ninterface ReducerHandlingContext<State> {\n sliceCaseReducersByName: Record<string, CaseReducer<State, any> | Pick<AsyncThunkSliceReducerDefinition<State, any, any, any>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>>;\n sliceCaseReducersByType: Record<string, CaseReducer<State, any>>;\n sliceMatchers: ActionMatcherDescriptionCollection<State>;\n actionCreators: Record<string, Function>;\n}\ninterface ReducerHandlingContextMethods<State> {\n /**\n * Adds a case reducer to handle a single action type.\n * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n * @param reducer - The actual case reducer function.\n */\n addCase<ActionCreator extends TypedActionCreator<string>>(actionCreator: ActionCreator, reducer: CaseReducer<State, ReturnType<ActionCreator>>): ReducerHandlingContextMethods<State>;\n /**\n * Adds a case reducer to handle a single action type.\n * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\n * @param reducer - The actual case reducer function.\n */\n addCase<Type extends string, A extends Action<Type>>(type: Type, reducer: CaseReducer<State, A>): ReducerHandlingContextMethods<State>;\n\n /**\n * Allows you to match incoming actions against your own filter function instead of only the `action.type` property.\n * @remarks\n * If multiple matcher reducers match, all of them will be executed in the order\n * they were defined in - even if a case reducer already matched.\n * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\n * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)\n * function\n * @param reducer - The actual case reducer function.\n *\n */\n addMatcher<A>(matcher: TypeGuard<A>, reducer: CaseReducer<State, A extends Action ? A : A & Action>): ReducerHandlingContextMethods<State>;\n /**\n * Add an action to be exposed under the final `slice.actions` key.\n * @param name The key to be exposed as.\n * @param actionCreator The action to expose.\n * @example\n * context.exposeAction(\"addPost\", createAction<Post>(\"addPost\"));\n *\n * export const { addPost } = slice.actions\n *\n * dispatch(addPost(post))\n */\n exposeAction(name: string, actionCreator: Function): ReducerHandlingContextMethods<State>;\n /**\n * Add a case reducer to be exposed under the final `slice.caseReducers` key.\n * @param name The key to be exposed as.\n * @param reducer The reducer to expose.\n * @example\n * context.exposeCaseReducer(\"addPost\", (state, action: PayloadAction<Post>) => {\n * state.push(action.payload)\n * })\n *\n * slice.caseReducers.addPost([], addPost(post))\n */\n exposeCaseReducer(name: string, reducer: CaseReducer<State, any> | Pick<AsyncThunkSliceReducerDefinition<State, any, any, any>, 'fulfilled' | 'rejected' | 'pending' | 'settled'>): ReducerHandlingContextMethods<State>;\n}\ninterface ReducerDetails {\n /** The key the reducer was defined under */\n reducerName: string;\n /** The predefined action type, i.e. `${slice.name}/${reducerName}` */\n type: string;\n /** Whether create. notation was used when defining reducers */\n createNotation: boolean;\n}\nfunction buildReducerCreators<State>(): ReducerCreators<State> {\n function asyncThunk(payloadCreator: AsyncThunkPayloadCreator<any, any>, config: AsyncThunkSliceReducerConfig<State, any>): AsyncThunkSliceReducerDefinition<State, any> {\n return {\n _reducerDefinitionType: ReducerType.asyncThunk,\n payloadCreator,\n ...config\n };\n }\n asyncThunk.withTypes = () => asyncThunk;\n return {\n reducer(caseReducer: CaseReducer<State, any>) {\n return Object.assign({\n // hack so the wrapping function has the same name as the original\n // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original\n [caseReducer.name](...args: Parameters<typeof caseReducer>) {\n return caseReducer(...args);\n }\n }[caseReducer.name], {\n _reducerDefinitionType: ReducerType.reducer\n } as const);\n },\n preparedReducer(prepare, reducer) {\n return {\n _reducerDefinitionType: ReducerType.reducerWithPrepare,\n prepare,\n reducer\n };\n },\n asyncThunk: asyncThunk as any\n };\n}\nfunction handleNormalReducerDefinition<State>({\n type,\n reducerName,\n createNotation\n}: ReducerDetails, maybeReducerWithPrepare: CaseReducer<State, {\n payload: any;\n type: string;\n}> | CaseReducerWithPrepare<State, PayloadAction<any, string, any, any>>, context: ReducerHandlingContextMethods<State>) {\n let caseReducer: CaseReducer<State, any>;\n let prepareCallback: PrepareAction<any> | undefined;\n if ('reducer' in maybeReducerWithPrepare) {\n if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(17) : 'Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.');\n }\n caseReducer = maybeReducerWithPrepare.reducer;\n prepareCallback = maybeReducerWithPrepare.prepare;\n } else {\n caseReducer = maybeReducerWithPrepare;\n }\n context.addCase(type, caseReducer).exposeCaseReducer(reducerName, caseReducer).exposeAction(reducerName, prepareCallback ? createAction(type, prepareCallback) : createAction(type));\n}\nfunction isAsyncThunkSliceReducerDefinition<State>(reducerDefinition: any): reducerDefinition is AsyncThunkSliceReducerDefinition<State, any, any, any> {\n return reducerDefinition._reducerDefinitionType === ReducerType.asyncThunk;\n}\nfunction isCaseReducerWithPrepareDefinition<State>(reducerDefinition: any): reducerDefinition is CaseReducerWithPrepareDefinition<State, any> {\n return reducerDefinition._reducerDefinitionType === ReducerType.reducerWithPrepare;\n}\nfunction handleThunkCaseReducerDefinition<State>({\n type,\n reducerName\n}: ReducerDetails, reducerDefinition: AsyncThunkSliceReducerDefinition<State, any, any, any>, context: ReducerHandlingContextMethods<State>, cAT: typeof _createAsyncThunk | undefined) {\n if (!cAT) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(18) : 'Cannot use `create.asyncThunk` in the built-in `createSlice`. ' + 'Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.');\n }\n const {\n payloadCreator,\n fulfilled,\n pending,\n rejected,\n settled,\n options\n } = reducerDefinition;\n const thunk = cAT(type, payloadCreator, options as any);\n context.exposeAction(reducerName, thunk);\n if (fulfilled) {\n context.addCase(thunk.fulfilled, fulfilled);\n }\n if (pending) {\n context.addCase(thunk.pending, pending);\n }\n if (rejected) {\n context.addCase(thunk.rejected, rejected);\n }\n if (settled) {\n context.addMatcher(thunk.settled, settled);\n }\n context.exposeCaseReducer(reducerName, {\n fulfilled: fulfilled || noop,\n pending: pending || noop,\n rejected: rejected || noop,\n settled: settled || noop\n });\n}\nfunction noop() {}", "import type { EntityId, EntityState, EntityStateAdapter, EntityStateFactory } from './models';\nexport function getInitialEntityState<T, Id extends EntityId>(): EntityState<T, Id> {\n return {\n ids: [],\n entities: {} as Record<Id, T>\n };\n}\nexport function createInitialStateFactory<T, Id extends EntityId>(stateAdapter: EntityStateAdapter<T, Id>): EntityStateFactory<T, Id> {\n function getInitialState(state?: undefined, entities?: readonly T[] | Record<Id, T>): EntityState<T, Id>;\n function getInitialState<S extends object>(additionalState: S, entities?: readonly T[] | Record<Id, T>): EntityState<T, Id> & S;\n function getInitialState(additionalState: any = {}, entities?: readonly T[] | Record<Id, T>): any {\n const state = Object.assign(getInitialEntityState(), additionalState);\n return entities ? stateAdapter.setAll(state, entities) : state;\n }\n return {\n getInitialState\n };\n}", "import type { CreateSelectorFunction, Selector } from 'reselect';\nimport { createDraftSafeSelector } from '../createDraftSafeSelector';\nimport type { EntityId, EntitySelectors, EntityState } from './models';\ntype AnyFunction = (...args: any) => any;\ntype AnyCreateSelectorFunction = CreateSelectorFunction<<F extends AnyFunction>(f: F) => F, <F extends AnyFunction>(f: F) => F>;\nexport type GetSelectorsOptions = {\n createSelector?: AnyCreateSelectorFunction;\n};\nexport function createSelectorsFactory<T, Id extends EntityId>() {\n function getSelectors(selectState?: undefined, options?: GetSelectorsOptions): EntitySelectors<T, EntityState<T, Id>, Id>;\n function getSelectors<V>(selectState: (state: V) => EntityState<T, Id>, options?: GetSelectorsOptions): EntitySelectors<T, V, Id>;\n function getSelectors<V>(selectState?: (state: V) => EntityState<T, Id>, options: GetSelectorsOptions = {}): EntitySelectors<T, any, Id> {\n const {\n createSelector = createDraftSafeSelector as AnyCreateSelectorFunction\n } = options;\n const selectIds = (state: EntityState<T, Id>) => state.ids;\n const selectEntities = (state: EntityState<T, Id>) => state.entities;\n const selectAll = createSelector(selectIds, selectEntities, (ids, entities): T[] => ids.map(id => entities[id]!));\n const selectId = (_: unknown, id: Id) => id;\n const selectById = (entities: Record<Id, T>, id: Id) => entities[id];\n const selectTotal = createSelector(selectIds, ids => ids.length);\n if (!selectState) {\n return {\n selectIds,\n selectEntities,\n selectAll,\n selectTotal,\n selectById: createSelector(selectEntities, selectId, selectById)\n };\n }\n const selectGlobalizedEntities = createSelector(selectState as Selector<V, EntityState<T, Id>>, selectEntities);\n return {\n selectIds: createSelector(selectState, selectIds),\n selectEntities: selectGlobalizedEntities,\n selectAll: createSelector(selectState, selectAll),\n selectTotal: createSelector(selectState, selectTotal),\n selectById: createSelector(selectGlobalizedEntities, selectId, selectById)\n };\n }\n return {\n getSelectors\n };\n}", "import { produce as createNextState, isDraft } from 'immer';\nimport type { Draft } from 'immer';\nimport type { EntityId, DraftableEntityState, PreventAny } from './models';\nimport type { PayloadAction } from '../createAction';\nimport { isFSA } from '../createAction';\nexport const isDraftTyped = isDraft as <T>(value: T | Draft<T>) => value is Draft<T>;\nexport function createSingleArgumentStateOperator<T, Id extends EntityId>(mutator: (state: DraftableEntityState<T, Id>) => void) {\n const operator = createStateOperator((_: undefined, state: DraftableEntityState<T, Id>) => mutator(state));\n return function operation<S extends DraftableEntityState<T, Id>>(state: PreventAny<S, T, Id>): S {\n return operator(state as S, undefined);\n };\n}\nexport function createStateOperator<T, Id extends EntityId, R>(mutator: (arg: R, state: DraftableEntityState<T, Id>) => void) {\n return function operation<S extends DraftableEntityState<T, Id>>(state: S, arg: R | PayloadAction<R>): S {\n function isPayloadActionArgument(arg: R | PayloadAction<R>): arg is PayloadAction<R> {\n return isFSA(arg);\n }\n const runMutator = (draft: DraftableEntityState<T, Id>) => {\n if (isPayloadActionArgument(arg)) {\n mutator(arg.payload, draft);\n } else {\n mutator(arg, draft);\n }\n };\n if (isDraftTyped<DraftableEntityState<T, Id>>(state)) {\n // we must already be inside a `createNextState` call, likely because\n // this is being wrapped in `createReducer` or `createSlice`.\n // It's safe to just pass the draft to the mutator.\n runMutator(state);\n\n // since it's a draft, we'll just return it\n return state;\n }\n return createNextState(state, runMutator);\n };\n}", "import type { Draft } from 'immer';\nimport { current, isDraft } from 'immer';\nimport type { DraftableEntityState, EntityId, IdSelector, Update } from './models';\nexport function selectIdValue<T, Id extends EntityId>(entity: T, selectId: IdSelector<T, Id>) {\n const key = selectId(entity);\n if (process.env.NODE_ENV !== 'production' && key === undefined) {\n console.warn('The entity passed to the `selectId` implementation returned undefined.', 'You should probably provide your own `selectId` implementation.', 'The entity that was passed:', entity, 'The `selectId` implementation:', selectId.toString());\n }\n return key;\n}\nexport function ensureEntitiesArray<T, Id extends EntityId>(entities: readonly T[] | Record<Id, T>): readonly T[] {\n if (!Array.isArray(entities)) {\n entities = Object.values(entities);\n }\n return entities;\n}\nexport function getCurrent<T>(value: T | Draft<T>): T {\n return (isDraft(value) ? current(value) : value) as T;\n}\nexport function splitAddedUpdatedEntities<T, Id extends EntityId>(newEntities: readonly T[] | Record<Id, T>, selectId: IdSelector<T, Id>, state: DraftableEntityState<T, Id>): [T[], Update<T, Id>[], Id[]] {\n newEntities = ensureEntitiesArray(newEntities);\n const existingIdsArray = getCurrent(state.ids);\n const existingIds = new Set<Id>(existingIdsArray);\n const added: T[] = [];\n const updated: Update<T, Id>[] = [];\n for (const entity of newEntities) {\n const id = selectIdValue(entity, selectId);\n if (existingIds.has(id)) {\n updated.push({\n id,\n changes: entity\n });\n } else {\n added.push(entity);\n }\n }\n return [added, updated, existingIdsArray];\n}", "import type { Draft } from 'immer';\nimport type { EntityStateAdapter, IdSelector, Update, EntityId, DraftableEntityState } from './models';\nimport { createStateOperator, createSingleArgumentStateOperator } from './state_adapter';\nimport { selectIdValue, ensureEntitiesArray, splitAddedUpdatedEntities } from './utils';\nexport function createUnsortedStateAdapter<T, Id extends EntityId>(selectId: IdSelector<T, Id>): EntityStateAdapter<T, Id> {\n type R = DraftableEntityState<T, Id>;\n function addOneMutably(entity: T, state: R): void {\n const key = selectIdValue(entity, selectId);\n if (key in state.entities) {\n return;\n }\n state.ids.push(key as Id & Draft<Id>);\n (state.entities as Record<Id, T>)[key] = entity;\n }\n function addManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n newEntities = ensureEntitiesArray(newEntities);\n for (const entity of newEntities) {\n addOneMutably(entity, state);\n }\n }\n function setOneMutably(entity: T, state: R): void {\n const key = selectIdValue(entity, selectId);\n if (!(key in state.entities)) {\n state.ids.push(key as Id & Draft<Id>);\n }\n ;\n (state.entities as Record<Id, T>)[key] = entity;\n }\n function setManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n newEntities = ensureEntitiesArray(newEntities);\n for (const entity of newEntities) {\n setOneMutably(entity, state);\n }\n }\n function setAllMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n newEntities = ensureEntitiesArray(newEntities);\n state.ids = [];\n state.entities = {} as Record<Id, T>;\n addManyMutably(newEntities, state);\n }\n function removeOneMutably(key: Id, state: R): void {\n return removeManyMutably([key], state);\n }\n function removeManyMutably(keys: readonly Id[], state: R): void {\n let didMutate = false;\n keys.forEach(key => {\n if (key in state.entities) {\n delete (state.entities as Record<Id, T>)[key];\n didMutate = true;\n }\n });\n if (didMutate) {\n state.ids = (state.ids as Id[]).filter(id => id in state.entities) as Id[] | Draft<Id[]>;\n }\n }\n function removeAllMutably(state: R): void {\n Object.assign(state, {\n ids: [],\n entities: {}\n });\n }\n function takeNewKey(keys: {\n [id: string]: Id;\n }, update: Update<T, Id>, state: R): boolean {\n const original: T | undefined = (state.entities as Record<Id, T>)[update.id];\n if (original === undefined) {\n return false;\n }\n const updated: T = Object.assign({}, original, update.changes);\n const newKey = selectIdValue(updated, selectId);\n const hasNewKey = newKey !== update.id;\n if (hasNewKey) {\n keys[update.id] = newKey;\n delete (state.entities as Record<Id, T>)[update.id];\n }\n ;\n (state.entities as Record<Id, T>)[newKey] = updated;\n return hasNewKey;\n }\n function updateOneMutably(update: Update<T, Id>, state: R): void {\n return updateManyMutably([update], state);\n }\n function updateManyMutably(updates: ReadonlyArray<Update<T, Id>>, state: R): void {\n const newKeys: {\n [id: string]: Id;\n } = {};\n const updatesPerEntity: {\n [id: string]: Update<T, Id>;\n } = {};\n updates.forEach(update => {\n // Only apply updates to entities that currently exist\n if (update.id in state.entities) {\n // If there are multiple updates to one entity, merge them together\n updatesPerEntity[update.id] = {\n id: update.id,\n // Spreads ignore falsy values, so this works even if there isn't\n // an existing update already at this key\n changes: {\n ...updatesPerEntity[update.id]?.changes,\n ...update.changes\n }\n };\n }\n });\n updates = Object.values(updatesPerEntity);\n const didMutateEntities = updates.length > 0;\n if (didMutateEntities) {\n const didMutateIds = updates.filter(update => takeNewKey(newKeys, update, state)).length > 0;\n if (didMutateIds) {\n state.ids = Object.values(state.entities).map(e => selectIdValue(e as T, selectId));\n }\n }\n }\n function upsertOneMutably(entity: T, state: R): void {\n return upsertManyMutably([entity], state);\n }\n function upsertManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n const [added, updated] = splitAddedUpdatedEntities<T, Id>(newEntities, selectId, state);\n updateManyMutably(updated, state);\n addManyMutably(added, state);\n }\n return {\n removeAll: createSingleArgumentStateOperator(removeAllMutably),\n addOne: createStateOperator(addOneMutably),\n addMany: createStateOperator(addManyMutably),\n setOne: createStateOperator(setOneMutably),\n setMany: createStateOperator(setManyMutably),\n setAll: createStateOperator(setAllMutably),\n updateOne: createStateOperator(updateOneMutably),\n updateMany: createStateOperator(updateManyMutably),\n upsertOne: createStateOperator(upsertOneMutably),\n upsertMany: createStateOperator(upsertManyMutably),\n removeOne: createStateOperator(removeOneMutably),\n removeMany: createStateOperator(removeManyMutably)\n };\n}", "import type { IdSelector, Comparer, EntityStateAdapter, Update, EntityId, DraftableEntityState } from './models';\nimport { createStateOperator } from './state_adapter';\nimport { createUnsortedStateAdapter } from './unsorted_state_adapter';\nimport { selectIdValue, ensureEntitiesArray, splitAddedUpdatedEntities, getCurrent } from './utils';\n\n// Borrowed from Replay\nexport function findInsertIndex<T>(sortedItems: T[], item: T, comparisonFunction: Comparer<T>): number {\n let lowIndex = 0;\n let highIndex = sortedItems.length;\n while (lowIndex < highIndex) {\n let middleIndex = lowIndex + highIndex >>> 1;\n const currentItem = sortedItems[middleIndex];\n const res = comparisonFunction(item, currentItem);\n if (res >= 0) {\n lowIndex = middleIndex + 1;\n } else {\n highIndex = middleIndex;\n }\n }\n return lowIndex;\n}\nexport function insert<T>(sortedItems: T[], item: T, comparisonFunction: Comparer<T>): T[] {\n const insertAtIndex = findInsertIndex(sortedItems, item, comparisonFunction);\n sortedItems.splice(insertAtIndex, 0, item);\n return sortedItems;\n}\nexport function createSortedStateAdapter<T, Id extends EntityId>(selectId: IdSelector<T, Id>, comparer: Comparer<T>): EntityStateAdapter<T, Id> {\n type R = DraftableEntityState<T, Id>;\n const {\n removeOne,\n removeMany,\n removeAll\n } = createUnsortedStateAdapter(selectId);\n function addOneMutably(entity: T, state: R): void {\n return addManyMutably([entity], state);\n }\n function addManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R, existingIds?: Id[]): void {\n newEntities = ensureEntitiesArray(newEntities);\n const existingKeys = new Set<Id>(existingIds ?? getCurrent(state.ids));\n const models = newEntities.filter(model => !existingKeys.has(selectIdValue(model, selectId)));\n if (models.length !== 0) {\n mergeFunction(state, models);\n }\n }\n function setOneMutably(entity: T, state: R): void {\n return setManyMutably([entity], state);\n }\n function setManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n newEntities = ensureEntitiesArray(newEntities);\n if (newEntities.length !== 0) {\n for (const item of newEntities) {\n delete (state.entities as Record<Id, T>)[selectId(item)];\n }\n mergeFunction(state, newEntities);\n }\n }\n function setAllMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n newEntities = ensureEntitiesArray(newEntities);\n state.entities = {} as Record<Id, T>;\n state.ids = [];\n addManyMutably(newEntities, state, []);\n }\n function updateOneMutably(update: Update<T, Id>, state: R): void {\n return updateManyMutably([update], state);\n }\n function updateManyMutably(updates: ReadonlyArray<Update<T, Id>>, state: R): void {\n let appliedUpdates = false;\n let replacedIds = false;\n for (let update of updates) {\n const entity: T | undefined = (state.entities as Record<Id, T>)[update.id];\n if (!entity) {\n continue;\n }\n appliedUpdates = true;\n Object.assign(entity, update.changes);\n const newId = selectId(entity);\n if (update.id !== newId) {\n // We do support the case where updates can change an item's ID.\n // This makes things trickier - go ahead and swap the IDs in state now.\n replacedIds = true;\n delete (state.entities as Record<Id, T>)[update.id];\n const oldIndex = (state.ids as Id[]).indexOf(update.id);\n state.ids[oldIndex] = newId;\n (state.entities as Record<Id, T>)[newId] = entity;\n }\n }\n if (appliedUpdates) {\n mergeFunction(state, [], appliedUpdates, replacedIds);\n }\n }\n function upsertOneMutably(entity: T, state: R): void {\n return upsertManyMutably([entity], state);\n }\n function upsertManyMutably(newEntities: readonly T[] | Record<Id, T>, state: R): void {\n const [added, updated, existingIdsArray] = splitAddedUpdatedEntities<T, Id>(newEntities, selectId, state);\n if (updated.length) {\n updateManyMutably(updated, state);\n }\n if (added.length) {\n addManyMutably(added, state, existingIdsArray);\n }\n }\n function areArraysEqual(a: readonly unknown[], b: readonly unknown[]) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] === b[i]) {\n continue;\n }\n return false;\n }\n return true;\n }\n type MergeFunction = (state: R, addedItems: readonly T[], appliedUpdates?: boolean, replacedIds?: boolean) => void;\n const mergeFunction: MergeFunction = (state, addedItems, appliedUpdates, replacedIds) => {\n const currentEntities = getCurrent(state.entities);\n const currentIds = getCurrent(state.ids);\n const stateEntities = state.entities as Record<Id, T>;\n let ids: Iterable<Id> = currentIds;\n if (replacedIds) {\n ids = new Set(currentIds);\n }\n let sortedEntities: T[] = [];\n for (const id of ids) {\n const entity = currentEntities[id];\n if (entity) {\n sortedEntities.push(entity);\n }\n }\n const wasPreviouslyEmpty = sortedEntities.length === 0;\n\n // Insert/overwrite all new/updated\n for (const item of addedItems) {\n stateEntities[selectId(item)] = item;\n if (!wasPreviouslyEmpty) {\n // Binary search insertion generally requires fewer comparisons\n insert(sortedEntities, item, comparer);\n }\n }\n if (wasPreviouslyEmpty) {\n // All we have is the incoming values, sort them\n sortedEntities = addedItems.slice().sort(comparer);\n } else if (appliedUpdates) {\n // We should have a _mostly_-sorted array already\n sortedEntities.sort(comparer);\n }\n const newSortedIds = sortedEntities.map(selectId);\n if (!areArraysEqual(currentIds, newSortedIds)) {\n state.ids = newSortedIds;\n }\n };\n return {\n removeOne,\n removeMany,\n removeAll,\n addOne: createStateOperator(addOneMutably),\n updateOne: createStateOperator(updateOneMutably),\n upsertOne: createStateOperator(upsertOneMutably),\n setOne: createStateOperator(setOneMutably),\n setMany: createStateOperator(setManyMutably),\n setAll: createStateOperator(setAllMutably),\n addMany: createStateOperator(addManyMutably),\n updateMany: createStateOperator(updateManyMutably),\n upsertMany: createStateOperator(upsertManyMutably)\n };\n}", "import type { EntityAdapter, EntityId, EntityAdapterOptions } from './models';\nimport { createInitialStateFactory } from './entity_state';\nimport { createSelectorsFactory } from './state_selectors';\nimport { createSortedStateAdapter } from './sorted_state_adapter';\nimport { createUnsortedStateAdapter } from './unsorted_state_adapter';\nimport type { WithRequiredProp } from '../tsHelpers';\nexport function createEntityAdapter<T, Id extends EntityId>(options: WithRequiredProp<EntityAdapterOptions<T, Id>, 'selectId'>): EntityAdapter<T, Id>;\nexport function createEntityAdapter<T extends {\n id: EntityId;\n}>(options?: Omit<EntityAdapterOptions<T, T['id']>, 'selectId'>): EntityAdapter<T, T['id']>;\n\n/**\n *\n * @param options\n *\n * @public\n */\nexport function createEntityAdapter<T>(options: EntityAdapterOptions<T, EntityId> = {}): EntityAdapter<T, EntityId> {\n const {\n selectId,\n sortComparer\n }: Required<EntityAdapterOptions<T, EntityId>> = {\n sortComparer: false,\n selectId: (instance: any) => instance.id,\n ...options\n };\n const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId);\n const stateFactory = createInitialStateFactory(stateAdapter);\n const selectorsFactory = createSelectorsFactory<T, EntityId>();\n return {\n selectId,\n sortComparer,\n ...stateFactory,\n ...selectorsFactory,\n ...stateAdapter\n };\n}", "import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport type { Action, Dispatch, MiddlewareAPI, UnknownAction } from 'redux';\nimport { isAction } from 'redux';\nimport type { ThunkDispatch } from 'redux-thunk';\nimport { createAction } from '../createAction';\nimport { nanoid } from '../nanoid';\nimport { TaskAbortError, listenerCancelled, listenerCompleted, taskCancelled, taskCompleted } from './exceptions';\nimport { createDelay, createPause, raceWithSignal, runTask, validateActive } from './task';\nimport type { AbortSignalWithReason, AddListenerOverloads, AnyListenerPredicate, CreateListenerMiddlewareOptions, FallbackAddListenerOptions, ForkOptions, ForkedTask, ForkedTaskExecutor, ListenerEntry, ListenerErrorHandler, ListenerErrorInfo, ListenerMiddleware, ListenerMiddlewareInstance, TakePattern, TaskResult, TypedAddListener, TypedCreateListenerEntry, TypedRemoveListener, UnsubscribeListener, UnsubscribeListenerOptions } from './types';\nimport { abortControllerWithReason, addAbortSignalListener, assertFunction, catchRejection, noop } from './utils';\nexport { TaskAbortError } from './exceptions';\nexport type { AsyncTaskExecutor, CreateListenerMiddlewareOptions, ForkedTask, ForkedTaskAPI, ForkedTaskExecutor, ListenerEffect, ListenerEffectAPI, ListenerErrorHandler, ListenerMiddleware, ListenerMiddlewareInstance, SyncTaskExecutor, TaskCancelled, TaskRejected, TaskResolved, TaskResult, TypedAddListener, TypedRemoveListener, TypedStartListening, TypedStopListening, UnsubscribeListener, UnsubscribeListenerOptions } from './types';\n\n//Overly-aggressive byte-shaving\nconst {\n assign\n} = Object;\n/**\n * @internal\n */\nconst INTERNAL_NIL_TOKEN = {} as const;\nconst alm = 'listenerMiddleware' as const;\nconst createFork = (parentAbortSignal: AbortSignalWithReason<unknown>, parentBlockingPromises: Promise<any>[]) => {\n const linkControllers = (controller: AbortController) => addAbortSignalListener(parentAbortSignal, () => abortControllerWithReason(controller, parentAbortSignal.reason));\n return <T,>(taskExecutor: ForkedTaskExecutor<T>, opts?: ForkOptions): ForkedTask<T> => {\n assertFunction(taskExecutor, 'taskExecutor');\n const childAbortController = new AbortController();\n linkControllers(childAbortController);\n const result = runTask<T>(async (): Promise<T> => {\n validateActive(parentAbortSignal);\n validateActive(childAbortController.signal);\n const result = (await taskExecutor({\n pause: createPause(childAbortController.signal),\n delay: createDelay(childAbortController.signal),\n signal: childAbortController.signal\n })) as T;\n validateActive(childAbortController.signal);\n return result;\n }, () => abortControllerWithReason(childAbortController, taskCompleted));\n if (opts?.autoJoin) {\n parentBlockingPromises.push(result.catch(noop));\n }\n return {\n result: createPause<TaskResult<T>>(parentAbortSignal)(result),\n cancel() {\n abortControllerWithReason(childAbortController, taskCancelled);\n }\n };\n };\n};\nconst createTakePattern = <S,>(startListening: AddListenerOverloads<UnsubscribeListener, S, Dispatch>, signal: AbortSignal): TakePattern<S> => {\n /**\n * A function that takes a ListenerPredicate and an optional timeout,\n * and resolves when either the predicate returns `true` based on an action\n * state combination or when the timeout expires.\n * If the parent listener is canceled while waiting, this will throw a\n * TaskAbortError.\n */\n const take = async <P extends AnyListenerPredicate<S>,>(predicate: P, timeout: number | undefined) => {\n validateActive(signal);\n\n // Placeholder unsubscribe function until the listener is added\n let unsubscribe: UnsubscribeListener = () => {};\n const tuplePromise = new Promise<[Action, S, S]>((resolve, reject) => {\n // Inside the Promise, we synchronously add the listener.\n let stopListening = startListening({\n predicate: predicate as any,\n effect: (action, listenerApi): void => {\n // One-shot listener that cleans up as soon as the predicate passes\n listenerApi.unsubscribe();\n // Resolve the promise with the same arguments the predicate saw\n resolve([action, listenerApi.getState(), listenerApi.getOriginalState()]);\n }\n });\n unsubscribe = () => {\n stopListening();\n reject();\n };\n });\n const promises: (Promise<null> | Promise<[Action, S, S]>)[] = [tuplePromise];\n if (timeout != null) {\n promises.push(new Promise<null>(resolve => setTimeout(resolve, timeout, null)));\n }\n try {\n const output = await raceWithSignal(signal, Promise.race(promises));\n validateActive(signal);\n return output;\n } finally {\n // Always clean up the listener\n unsubscribe();\n }\n };\n return ((predicate: AnyListenerPredicate<S>, timeout: number | undefined) => catchRejection(take(predicate, timeout))) as TakePattern<S>;\n};\nconst getListenerEntryPropsFrom = (options: FallbackAddListenerOptions) => {\n let {\n type,\n actionCreator,\n matcher,\n predicate,\n effect\n } = options;\n if (type) {\n predicate = createAction(type).match;\n } else if (actionCreator) {\n type = actionCreator!.type;\n predicate = actionCreator.match;\n } else if (matcher) {\n predicate = matcher;\n } else if (predicate) {\n // pass\n } else {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(21) : 'Creating or removing a listener requires one of the known fields for matching an action');\n }\n assertFunction(effect, 'options.listener');\n return {\n predicate,\n type,\n effect\n };\n};\n\n/** Accepts the possible options for creating a listener, and returns a formatted listener entry */\nexport const createListenerEntry: TypedCreateListenerEntry<unknown> = /* @__PURE__ */assign((options: FallbackAddListenerOptions) => {\n const {\n type,\n predicate,\n effect\n } = getListenerEntryPropsFrom(options);\n const entry: ListenerEntry<unknown> = {\n id: nanoid(),\n effect,\n type,\n predicate,\n pending: new Set<AbortController>(),\n unsubscribe: () => {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(22) : 'Unsubscribe not initialized');\n }\n };\n return entry;\n}, {\n withTypes: () => createListenerEntry\n}) as unknown as TypedCreateListenerEntry<unknown>;\nconst findListenerEntry = (listenerMap: Map<string, ListenerEntry>, options: FallbackAddListenerOptions) => {\n const {\n type,\n effect,\n predicate\n } = getListenerEntryPropsFrom(options);\n return Array.from(listenerMap.values()).find(entry => {\n const matchPredicateOrType = typeof type === 'string' ? entry.type === type : entry.predicate === predicate;\n return matchPredicateOrType && entry.effect === effect;\n });\n};\nconst cancelActiveListeners = (entry: ListenerEntry<unknown, Dispatch<UnknownAction>>) => {\n entry.pending.forEach(controller => {\n abortControllerWithReason(controller, listenerCancelled);\n });\n};\nconst createClearListenerMiddleware = (listenerMap: Map<string, ListenerEntry>) => {\n return () => {\n listenerMap.forEach(cancelActiveListeners);\n listenerMap.clear();\n };\n};\n\n/**\n * Safely reports errors to the `errorHandler` provided.\n * Errors that occur inside `errorHandler` are notified in a new task.\n * Inspired by [rxjs reportUnhandledError](https://github.com/ReactiveX/rxjs/blob/6fafcf53dc9e557439b25debaeadfd224b245a66/src/internal/util/reportUnhandledError.ts)\n * @param errorHandler\n * @param errorToNotify\n */\nconst safelyNotifyError = (errorHandler: ListenerErrorHandler, errorToNotify: unknown, errorInfo: ListenerErrorInfo): void => {\n try {\n errorHandler(errorToNotify, errorInfo);\n } catch (errorHandlerError) {\n // We cannot let an error raised here block the listener queue.\n // The error raised here will be picked up by `window.onerror`, `process.on('error')` etc...\n setTimeout(() => {\n throw errorHandlerError;\n }, 0);\n }\n};\n\n/**\n * @public\n */\nexport const addListener = /* @__PURE__ */assign(/* @__PURE__ */createAction(`${alm}/add`), {\n withTypes: () => addListener\n}) as unknown as TypedAddListener<unknown>;\n\n/**\n * @public\n */\nexport const clearAllListeners = /* @__PURE__ */createAction(`${alm}/removeAll`);\n\n/**\n * @public\n */\nexport const removeListener = /* @__PURE__ */assign(/* @__PURE__ */createAction(`${alm}/remove`), {\n withTypes: () => removeListener\n}) as unknown as TypedRemoveListener<unknown>;\nconst defaultErrorHandler: ListenerErrorHandler = (...args: unknown[]) => {\n console.error(`${alm}/error`, ...args);\n};\n\n/**\n * @public\n */\nexport const createListenerMiddleware = <StateType = unknown, DispatchType extends Dispatch<Action> = ThunkDispatch<StateType, unknown, UnknownAction>, ExtraArgument = unknown>(middlewareOptions: CreateListenerMiddlewareOptions<ExtraArgument> = {}) => {\n const listenerMap = new Map<string, ListenerEntry>();\n const {\n extra,\n onError = defaultErrorHandler\n } = middlewareOptions;\n assertFunction(onError, 'onError');\n const insertEntry = (entry: ListenerEntry) => {\n entry.unsubscribe = () => listenerMap.delete(entry.id);\n listenerMap.set(entry.id, entry);\n return (cancelOptions?: UnsubscribeListenerOptions) => {\n entry.unsubscribe();\n if (cancelOptions?.cancelActive) {\n cancelActiveListeners(entry);\n }\n };\n };\n const startListening = ((options: FallbackAddListenerOptions) => {\n const entry = findListenerEntry(listenerMap, options) ?? createListenerEntry(options as any);\n return insertEntry(entry);\n }) as AddListenerOverloads<any>;\n assign(startListening, {\n withTypes: () => startListening\n });\n const stopListening = (options: FallbackAddListenerOptions & UnsubscribeListenerOptions): boolean => {\n const entry = findListenerEntry(listenerMap, options);\n if (entry) {\n entry.unsubscribe();\n if (options.cancelActive) {\n cancelActiveListeners(entry);\n }\n }\n return !!entry;\n };\n assign(stopListening, {\n withTypes: () => stopListening\n });\n const notifyListener = async (entry: ListenerEntry<unknown, Dispatch<UnknownAction>>, action: unknown, api: MiddlewareAPI, getOriginalState: () => StateType) => {\n const internalTaskController = new AbortController();\n const take = createTakePattern(startListening as AddListenerOverloads<any>, internalTaskController.signal);\n const autoJoinPromises: Promise<any>[] = [];\n try {\n entry.pending.add(internalTaskController);\n await Promise.resolve(entry.effect(action,\n // Use assign() rather than ... to avoid extra helper functions added to bundle\n assign({}, api, {\n getOriginalState,\n condition: (predicate: AnyListenerPredicate<any>, timeout?: number) => take(predicate, timeout).then(Boolean),\n take,\n delay: createDelay(internalTaskController.signal),\n pause: createPause<any>(internalTaskController.signal),\n extra,\n signal: internalTaskController.signal,\n fork: createFork(internalTaskController.signal, autoJoinPromises),\n unsubscribe: entry.unsubscribe,\n subscribe: () => {\n listenerMap.set(entry.id, entry);\n },\n cancelActiveListeners: () => {\n entry.pending.forEach((controller, _, set) => {\n if (controller !== internalTaskController) {\n abortControllerWithReason(controller, listenerCancelled);\n set.delete(controller);\n }\n });\n },\n cancel: () => {\n abortControllerWithReason(internalTaskController, listenerCancelled);\n entry.pending.delete(internalTaskController);\n },\n throwIfCancelled: () => {\n validateActive(internalTaskController.signal);\n }\n })));\n } catch (listenerError) {\n if (!(listenerError instanceof TaskAbortError)) {\n safelyNotifyError(onError, listenerError, {\n raisedBy: 'effect'\n });\n }\n } finally {\n await Promise.all(autoJoinPromises);\n abortControllerWithReason(internalTaskController, listenerCompleted); // Notify that the task has completed\n entry.pending.delete(internalTaskController);\n }\n };\n const clearListenerMiddleware = createClearListenerMiddleware(listenerMap);\n const middleware: ListenerMiddleware<StateType, DispatchType, ExtraArgument> = api => next => action => {\n if (!isAction(action)) {\n // we only want to notify listeners for action objects\n return next(action);\n }\n if (addListener.match(action)) {\n return startListening(action.payload as any);\n }\n if (clearAllListeners.match(action)) {\n clearListenerMiddleware();\n return;\n }\n if (removeListener.match(action)) {\n return stopListening(action.payload);\n }\n\n // Need to get this state _before_ the reducer processes the action\n let originalState: StateType | typeof INTERNAL_NIL_TOKEN = api.getState();\n\n // `getOriginalState` can only be called synchronously.\n // @see https://github.com/reduxjs/redux-toolkit/discussions/1648#discussioncomment-1932820\n const getOriginalState = (): StateType => {\n if (originalState === INTERNAL_NIL_TOKEN) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(23) : `${alm}: getOriginalState can only be called synchronously`);\n }\n return originalState as StateType;\n };\n let result: unknown;\n try {\n // Actually forward the action to the reducer before we handle listeners\n result = next(action);\n if (listenerMap.size > 0) {\n const currentState = api.getState();\n // Work around ESBuild+TS transpilation issue\n const listenerEntries = Array.from(listenerMap.values());\n for (const entry of listenerEntries) {\n let runListener = false;\n try {\n runListener = entry.predicate(action, currentState, originalState);\n } catch (predicateError) {\n runListener = false;\n safelyNotifyError(onError, predicateError, {\n raisedBy: 'predicate'\n });\n }\n if (!runListener) {\n continue;\n }\n notifyListener(entry, action, api, getOriginalState);\n }\n }\n } finally {\n // Remove `originalState` store from this scope.\n originalState = INTERNAL_NIL_TOKEN;\n }\n return result;\n };\n return {\n middleware,\n startListening,\n stopListening,\n clearListeners: clearListenerMiddleware\n } as ListenerMiddlewareInstance<StateType, DispatchType, ExtraArgument>;\n};", "import type { SerializedError } from '@reduxjs/toolkit';\nconst task = 'task';\nconst listener = 'listener';\nconst completed = 'completed';\nconst cancelled = 'cancelled';\n\n/* TaskAbortError error codes */\nexport const taskCancelled = `task-${cancelled}` as const;\nexport const taskCompleted = `task-${completed}` as const;\nexport const listenerCancelled = `${listener}-${cancelled}` as const;\nexport const listenerCompleted = `${listener}-${completed}` as const;\nexport class TaskAbortError implements SerializedError {\n name = 'TaskAbortError';\n message: string;\n constructor(public code: string | undefined) {\n this.message = `${task} ${cancelled} (reason: ${code})`;\n }\n}", "import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { AbortSignalWithReason } from './types';\nexport const assertFunction: (func: unknown, expected: string) => asserts func is (...args: unknown[]) => unknown = (func: unknown, expected: string) => {\n if (typeof func !== 'function') {\n throw new TypeError(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(32) : `${expected} is not a function`);\n }\n};\nexport const noop = () => {};\nexport const catchRejection = <T,>(promise: Promise<T>, onError = noop): Promise<T> => {\n promise.catch(onError);\n return promise;\n};\nexport const addAbortSignalListener = (abortSignal: AbortSignal, callback: (evt: Event) => void) => {\n abortSignal.addEventListener('abort', callback, {\n once: true\n });\n return () => abortSignal.removeEventListener('abort', callback);\n};\n\n/**\n * Calls `abortController.abort(reason)` and patches `signal.reason`.\n * if it is not supported.\n *\n * At the time of writing `signal.reason` is available in FF chrome, edge node 17 and deno.\n * @param abortController\n * @param reason\n * @returns\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/reason\n */\nexport const abortControllerWithReason = <T,>(abortController: AbortController, reason: T): void => {\n type Consumer<T> = (val: T) => void;\n const signal = abortController.signal as AbortSignalWithReason<T>;\n if (signal.aborted) {\n return;\n }\n\n // Patch `reason` if necessary.\n // - We use defineProperty here because reason is a getter of `AbortSignal.__proto__`.\n // - We need to patch 'reason' before calling `.abort()` because listeners to the 'abort'\n // event are are notified immediately.\n if (!('reason' in signal)) {\n Object.defineProperty(signal, 'reason', {\n enumerable: true,\n value: reason,\n configurable: true,\n writable: true\n });\n }\n ;\n (abortController.abort as Consumer<typeof reason>)(reason);\n};", "import { TaskAbortError } from './exceptions';\nimport type { AbortSignalWithReason, TaskResult } from './types';\nimport { addAbortSignalListener, catchRejection, noop } from './utils';\n\n/**\n * Synchronously raises {@link TaskAbortError} if the task tied to the input `signal` has been cancelled.\n * @param signal\n * @param reason\n * @see {TaskAbortError}\n */\nexport const validateActive = (signal: AbortSignal): void => {\n if (signal.aborted) {\n const {\n reason\n } = signal as AbortSignalWithReason<string>;\n throw new TaskAbortError(reason);\n }\n};\n\n/**\n * Generates a race between the promise(s) and the AbortSignal\n * This avoids `Promise.race()`-related memory leaks:\n * https://github.com/nodejs/node/issues/17469#issuecomment-349794909\n */\nexport function raceWithSignal<T>(signal: AbortSignalWithReason<string>, promise: Promise<T>): Promise<T> {\n let cleanup = noop;\n return new Promise<T>((resolve, reject) => {\n const notifyRejection = () => reject(new TaskAbortError(signal.reason));\n if (signal.aborted) {\n notifyRejection();\n return;\n }\n cleanup = addAbortSignalListener(signal, notifyRejection);\n promise.finally(() => cleanup()).then(resolve, reject);\n }).finally(() => {\n // after this point, replace `cleanup` with a noop, so there is no reference to `signal` any more\n cleanup = noop;\n });\n}\n\n/**\n * Runs a task and returns promise that resolves to {@link TaskResult}.\n * Second argument is an optional `cleanUp` function that always runs after task.\n *\n * **Note:** `runTask` runs the executor in the next microtask.\n * @returns\n */\nexport const runTask = async <T,>(task: () => Promise<T>, cleanUp?: () => void): Promise<TaskResult<T>> => {\n try {\n await Promise.resolve();\n const value = await task();\n return {\n status: 'ok',\n value\n };\n } catch (error: any) {\n return {\n status: error instanceof TaskAbortError ? 'cancelled' : 'rejected',\n error\n };\n } finally {\n cleanUp?.();\n }\n};\n\n/**\n * Given an input `AbortSignal` and a promise returns another promise that resolves\n * as soon the input promise is provided or rejects as soon as\n * `AbortSignal.abort` is `true`.\n * @param signal\n * @returns\n */\nexport const createPause = <T,>(signal: AbortSignal) => {\n return (promise: Promise<T>): Promise<T> => {\n return catchRejection(raceWithSignal(signal, promise).then(output => {\n validateActive(signal);\n return output;\n }));\n };\n};\n\n/**\n * Given an input `AbortSignal` and `timeoutMs` returns a promise that resolves\n * after `timeoutMs` or rejects as soon as `AbortSignal.abort` is `true`.\n * @param signal\n * @returns\n */\nexport const createDelay = (signal: AbortSignal) => {\n const pause = createPause<void>(signal);\n return (timeoutMs: number): Promise<void> => {\n return pause(new Promise<void>(resolve => setTimeout(resolve, timeoutMs)));\n };\n};", "import type { Dispatch, Middleware, UnknownAction } from 'redux';\nimport { compose } from 'redux';\nimport { createAction } from '../createAction';\nimport { isAllOf } from '../matchers';\nimport { nanoid } from '../nanoid';\nimport { getOrInsertComputed } from '../utils';\nimport type { AddMiddleware, DynamicMiddleware, DynamicMiddlewareInstance, MiddlewareEntry, WithMiddleware } from './types';\nexport type { DynamicMiddlewareInstance, GetDispatchType as GetDispatch, MiddlewareApiConfig } from './types';\nconst createMiddlewareEntry = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(middleware: Middleware<any, State, DispatchType>): MiddlewareEntry<State, DispatchType> => ({\n middleware,\n applied: new Map()\n});\nconst matchInstance = (instanceId: string) => (action: any): action is {\n meta: {\n instanceId: string;\n };\n} => action?.meta?.instanceId === instanceId;\nexport const createDynamicMiddleware = <State = any, DispatchType extends Dispatch<UnknownAction> = Dispatch<UnknownAction>>(): DynamicMiddlewareInstance<State, DispatchType> => {\n const instanceId = nanoid();\n const middlewareMap = new Map<Middleware<any, State, DispatchType>, MiddlewareEntry<State, DispatchType>>();\n const withMiddleware = Object.assign(createAction('dynamicMiddleware/add', (...middlewares: Middleware<any, State, DispatchType>[]) => ({\n payload: middlewares,\n meta: {\n instanceId\n }\n })), {\n withTypes: () => withMiddleware\n }) as WithMiddleware<State, DispatchType>;\n const addMiddleware = Object.assign(function addMiddleware(...middlewares: Middleware<any, State, DispatchType>[]) {\n middlewares.forEach(middleware => {\n getOrInsertComputed(middlewareMap, middleware, createMiddlewareEntry);\n });\n }, {\n withTypes: () => addMiddleware\n }) as AddMiddleware<State, DispatchType>;\n const getFinalMiddleware: Middleware<{}, State, DispatchType> = api => {\n const appliedMiddleware = Array.from(middlewareMap.values()).map(entry => getOrInsertComputed(entry.applied, api, entry.middleware));\n return compose(...appliedMiddleware);\n };\n const isWithMiddleware = isAllOf(withMiddleware, matchInstance(instanceId));\n const middleware: DynamicMiddleware<State, DispatchType> = api => next => action => {\n if (isWithMiddleware(action)) {\n addMiddleware(...action.payload);\n return api.dispatch;\n }\n return getFinalMiddleware(api)(next)(action);\n };\n return {\n middleware,\n addMiddleware,\n withMiddleware,\n instanceId\n };\n};", "import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport type { Reducer, StateFromReducersMapObject, UnknownAction } from 'redux';\nimport { combineReducers } from 'redux';\nimport { nanoid } from './nanoid';\nimport type { Id, NonUndefined, Tail, UnionToIntersection, WithOptionalProp } from './tsHelpers';\nimport { getOrInsertComputed } from './utils';\ntype SliceLike<ReducerPath extends string, State> = {\n reducerPath: ReducerPath;\n reducer: Reducer<State>;\n};\ntype AnySliceLike = SliceLike<string, any>;\ntype SliceLikeReducerPath<A extends AnySliceLike> = A extends SliceLike<infer ReducerPath, any> ? ReducerPath : never;\ntype SliceLikeState<A extends AnySliceLike> = A extends SliceLike<any, infer State> ? State : never;\nexport type WithSlice<A extends AnySliceLike> = { [Path in SliceLikeReducerPath<A>]: SliceLikeState<A> };\ntype ReducerMap = Record<string, Reducer>;\ntype ExistingSliceLike<DeclaredState> = { [ReducerPath in keyof DeclaredState]: SliceLike<ReducerPath & string, NonUndefined<DeclaredState[ReducerPath]>> }[keyof DeclaredState];\nexport type InjectConfig = {\n /**\n * Allow replacing reducer with a different reference. Normally, an error will be thrown if a different reducer instance to the one already injected is used.\n */\n overrideExisting?: boolean;\n};\n\n/**\n * A reducer that allows for slices/reducers to be injected after initialisation.\n */\nexport interface CombinedSliceReducer<InitialState, DeclaredState = InitialState> extends Reducer<DeclaredState, UnknownAction, Partial<DeclaredState>> {\n /**\n * Provide a type for slices that will be injected lazily.\n *\n * One way to do this would be with interface merging:\n * ```ts\n *\n * export interface LazyLoadedSlices {}\n *\n * export const rootReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n *\n * // elsewhere\n *\n * declare module './reducer' {\n * export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n * }\n *\n * const withBoolean = rootReducer.inject(booleanSlice);\n *\n * // elsewhere again\n *\n * declare module './reducer' {\n * export interface LazyLoadedSlices {\n * customName: CustomState\n * }\n * }\n *\n * const withCustom = rootReducer.inject({ reducerPath: \"customName\", reducer: customSlice.reducer })\n * ```\n */\n withLazyLoadedSlices<Lazy = {}>(): CombinedSliceReducer<InitialState, Id<DeclaredState & Partial<Lazy>>>;\n\n /**\n * Inject a slice.\n *\n * Accepts an individual slice, RTKQ API instance, or a \"slice-like\" { reducerPath, reducer } object.\n *\n * ```ts\n * rootReducer.inject(booleanSlice)\n * rootReducer.inject(baseApi)\n * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })\n * ```\n *\n */\n inject<Sl extends Id<ExistingSliceLike<DeclaredState>>>(slice: Sl, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<Sl>>>;\n\n /**\n * Inject a slice.\n *\n * Accepts an individual slice, RTKQ API instance, or a \"slice-like\" { reducerPath, reducer } object.\n *\n * ```ts\n * rootReducer.inject(booleanSlice)\n * rootReducer.inject(baseApi)\n * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })\n * ```\n *\n */\n inject<ReducerPath extends string, State>(slice: SliceLike<ReducerPath, State & (ReducerPath extends keyof DeclaredState ? never : State)>, config?: InjectConfig): CombinedSliceReducer<InitialState, Id<DeclaredState & WithSlice<SliceLike<ReducerPath, State>>>>;\n\n /**\n * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n *\n * ```ts\n * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n * // ^? boolean | undefined\n *\n * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n * // if action hasn't been dispatched since slice was injected, this would usually be undefined\n * // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n * return state.boolean;\n * // ^? boolean\n * })\n * ```\n *\n * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.\n *\n * ```ts\n *\n * export interface LazyLoadedSlices {};\n *\n * export const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n *\n * export const rootReducer = combineSlices({ inner: innerReducer });\n *\n * export type RootState = ReturnType<typeof rootReducer>;\n *\n * // elsewhere\n *\n * declare module \"./reducer.ts\" {\n * export interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n * }\n *\n * const withBool = innerReducer.inject(booleanSlice);\n *\n * const selectBoolean = withBool.selector(\n * (state) => state.boolean,\n * (rootState: RootState) => state.inner\n * );\n * // now expects to be passed RootState instead of innerReducer state\n *\n * ```\n *\n * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n *\n * ```ts\n * const injectedReducer = rootReducer.inject(booleanSlice);\n * const selectBoolean = injectedReducer.selector((state) => {\n * console.log(injectedReducer.selector.original(state).boolean) // possibly undefined\n * return state.boolean\n * })\n * ```\n */\n selector: {\n /**\n * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n *\n * ```ts\n * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n * // ^? boolean | undefined\n *\n * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n * // if action hasn't been dispatched since slice was injected, this would usually be undefined\n * // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n * return state.boolean;\n * // ^? boolean\n * })\n * ```\n *\n * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n *\n * ```ts\n * const injectedReducer = rootReducer.inject(booleanSlice);\n * const selectBoolean = injectedReducer.selector((state) => {\n * console.log(injectedReducer.selector.original(state).boolean) // undefined\n * return state.boolean\n * })\n * ```\n */\n <Selector extends (state: DeclaredState, ...args: any[]) => unknown>(selectorFn: Selector): (state: WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;\n\n /**\n * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\n *\n * ```ts\n * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\n * // ^? boolean | undefined\n *\n * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\n * // if action hasn't been dispatched since slice was injected, this would usually be undefined\n * // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\n * return state.boolean;\n * // ^? boolean\n * })\n * ```\n *\n * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.\n *\n * ```ts\n *\n * interface LazyLoadedSlices {};\n *\n * const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices<LazyLoadedSlices>();\n *\n * const rootReducer = combineSlices({ inner: innerReducer });\n *\n * type RootState = ReturnType<typeof rootReducer>;\n *\n * // elsewhere\n *\n * declare module \"./reducer.ts\" {\n * interface LazyLoadedSlices extends WithSlice<typeof booleanSlice> {}\n * }\n *\n * const withBool = innerReducer.inject(booleanSlice);\n *\n * const selectBoolean = withBool.selector(\n * (state) => state.boolean,\n * (rootState: RootState) => state.inner\n * );\n * // now expects to be passed RootState instead of innerReducer state\n *\n * ```\n *\n * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\n *\n * ```ts\n * const injectedReducer = rootReducer.inject(booleanSlice);\n * const selectBoolean = injectedReducer.selector((state) => {\n * console.log(injectedReducer.selector.original(state).boolean) // possibly undefined\n * return state.boolean\n * })\n * ```\n */\n <Selector extends (state: DeclaredState, ...args: any[]) => unknown, RootState>(selectorFn: Selector, selectState: (rootState: RootState, ...args: Tail<Parameters<Selector>>) => WithOptionalProp<Parameters<Selector>[0], Exclude<keyof DeclaredState, keyof InitialState>>): (state: RootState, ...args: Tail<Parameters<Selector>>) => ReturnType<Selector>;\n /**\n * Returns the unproxied state. Useful for debugging.\n * @param state state Proxy, that ensures injected reducers have value\n * @returns original, unproxied state\n * @throws if value passed is not a state Proxy\n */\n original: (state: DeclaredState) => InitialState & Partial<DeclaredState>;\n };\n}\ntype InitialState<Slices extends Array<AnySliceLike | ReducerMap>> = UnionToIntersection<Slices[number] extends infer Slice ? Slice extends AnySliceLike ? WithSlice<Slice> : StateFromReducersMapObject<Slice> : never>;\nconst isSliceLike = (maybeSliceLike: AnySliceLike | ReducerMap): maybeSliceLike is AnySliceLike => 'reducerPath' in maybeSliceLike && typeof maybeSliceLike.reducerPath === 'string';\nconst getReducers = (slices: Array<AnySliceLike | ReducerMap>) => slices.flatMap(sliceOrMap => isSliceLike(sliceOrMap) ? [[sliceOrMap.reducerPath, sliceOrMap.reducer] as const] : Object.entries(sliceOrMap));\nconst ORIGINAL_STATE = Symbol.for('rtk-state-proxy-original');\nconst isStateProxy = (value: any) => !!value && !!value[ORIGINAL_STATE];\nconst stateProxyMap = new WeakMap<object, object>();\nconst createStateProxy = <State extends object,>(state: State, reducerMap: Partial<Record<string, Reducer>>) => getOrInsertComputed(stateProxyMap, state, () => new Proxy(state, {\n get: (target, prop, receiver) => {\n if (prop === ORIGINAL_STATE) return target;\n const result = Reflect.get(target, prop, receiver);\n if (typeof result === 'undefined') {\n const reducer = reducerMap[prop.toString()];\n if (reducer) {\n // ensure action type is random, to prevent reducer treating it differently\n const reducerResult = reducer(undefined, {\n type: nanoid()\n });\n if (typeof reducerResult === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(24) : `The slice reducer for key \"${prop.toString()}\" returned undefined when called for selector(). ` + `If the state passed to the reducer is undefined, you must ` + `explicitly return the initial state. The initial state may ` + `not be undefined. If you don't want to set a value for this reducer, ` + `you can use null instead of undefined.`);\n }\n return reducerResult;\n }\n }\n return result;\n }\n})) as State;\nconst original = (state: any) => {\n if (!isStateProxy(state)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(25) : 'original must be used on state Proxy');\n }\n return state[ORIGINAL_STATE];\n};\nconst noopReducer: Reducer<Record<string, any>> = (state = {}) => state;\nexport function combineSlices<Slices extends Array<AnySliceLike | ReducerMap>>(...slices: Slices): CombinedSliceReducer<Id<InitialState<Slices>>> {\n const reducerMap = Object.fromEntries<Reducer>(getReducers(slices));\n const getReducer = () => Object.keys(reducerMap).length ? combineReducers(reducerMap) : noopReducer;\n let reducer = getReducer();\n function combinedReducer(state: Record<string, unknown>, action: UnknownAction) {\n return reducer(state, action);\n }\n combinedReducer.withLazyLoadedSlices = () => combinedReducer;\n const inject = (slice: AnySliceLike, config: InjectConfig = {}): typeof combinedReducer => {\n const {\n reducerPath,\n reducer: reducerToInject\n } = slice;\n const currentReducer = reducerMap[reducerPath];\n if (!config.overrideExisting && currentReducer && currentReducer !== reducerToInject) {\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n console.error(`called \\`inject\\` to override already-existing reducer ${reducerPath} without specifying \\`overrideExisting: true\\``);\n }\n return combinedReducer;\n }\n reducerMap[reducerPath] = reducerToInject;\n reducer = getReducer();\n return combinedReducer;\n };\n const selector = Object.assign(function makeSelector<State extends object, RootState, Args extends any[]>(selectorFn: (state: State, ...args: Args) => any, selectState?: (rootState: RootState, ...args: Args) => State) {\n return function selector(state: State, ...args: Args) {\n return selectorFn(createStateProxy(selectState ? selectState(state as any, ...args) : state, reducerMap), ...args);\n };\n }, {\n original\n });\n return Object.assign(combinedReducer, {\n inject,\n selector\n }) as any;\n}", "/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nexport function formatProdErrorMessage(code: number) {\n return `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}", "import {\n ArrayValue,\n RecordValue,\n Schema,\n type SchemaDefinition,\n SchemaValidationError,\n type SchemaValue,\n StringValue,\n} from '@coveo/bueno';\nimport type {SerializedError} from '@reduxjs/toolkit';\nimport type {CoreEngine, CoreEngineNext} from '../app/engine.js';\n\nexport const requiredNonEmptyString = new StringValue({\n required: true,\n emptyAllowed: false,\n});\n\nexport const nonEmptyString = new StringValue({\n required: false,\n emptyAllowed: false,\n});\n\nexport const requiredEmptyAllowedString = new StringValue({\n required: true,\n emptyAllowed: true,\n});\n\nexport const nonRequiredEmptyAllowedString = new StringValue({\n required: false,\n emptyAllowed: true,\n});\n\nexport const nonEmptyStringArray = new ArrayValue({\n each: requiredNonEmptyString,\n required: true,\n});\n\nexport const optionalNonEmptyVersionString = new StringValue({\n required: false,\n emptyAllowed: false,\n regex: /^\\d+\\.\\d+\\.\\d+$/,\n});\n\nexport const optionalTrackingId = new StringValue({\n required: false,\n emptyAllowed: false,\n regex: /^[a-zA-Z0-9_\\-.]{1,100}$/,\n});\n\nexport const requiredTrackingId = new StringValue({\n required: true,\n emptyAllowed: false,\n regex: /^[a-zA-Z0-9_\\-.]{1,100}$/,\n});\n\nexport const serializeSchemaValidationError = ({\n message,\n name,\n stack,\n}: SchemaValidationError): SerializedError => ({message, name, stack});\n\n/**\n * Validates an action payload and throws an error if invalid\n * @param payload the action payload\n * @param definition Either a Bueno SchemaDefinition or a SchemaValue\n */\nexport const validatePayloadAndThrow = <P>(\n payload: P,\n definition: SchemaDefinition<Required<P>> | SchemaValue<P>\n) => {\n const isSchemaValue = 'required' in definition;\n if (isSchemaValue) {\n return {\n payload: new Schema({\n value: definition as SchemaValue<P>,\n }).validate({value: payload}).value as P,\n };\n }\n\n const asRecordValue = new RecordValue({\n options: {required: true},\n values: definition as SchemaDefinition<Record<string, Object>>,\n });\n\n const isInvalid = asRecordValue.validate(payload);\n if (isInvalid) {\n throw new SchemaValidationError(isInvalid);\n }\n return {payload};\n};\n\n/**\n * Validates an action payload and return an `error` alongside the payload if it's invalid\n * @param payload the action payload\n * @param definition Either a Bueno SchemaDefinition or a SchemaValue\n */\nexport const validatePayload = <P>(\n payload: P,\n definition: SchemaDefinition<Required<P>> | SchemaValue<P>\n): {payload: P; error?: SerializedError} => {\n try {\n return validatePayloadAndThrow(payload, definition);\n } catch (error) {\n return {\n payload,\n error: serializeSchemaValidationError(error as Error),\n };\n }\n};\n\nexport const validateInitialState = <T extends object>(\n engine: CoreEngine | CoreEngineNext,\n schema: Schema<T>,\n obj: T | undefined,\n functionName: string\n) => {\n const message = `Check the initialState of ${functionName}`;\n return validateObject(\n engine,\n schema,\n obj,\n message,\n 'Controller initialization error'\n );\n};\n\nexport const validateOptions = <T extends object>(\n engine: CoreEngine<object> | CoreEngineNext<object>,\n schema: Schema<T>,\n obj: Partial<T> | undefined,\n functionName: string\n) => {\n const message = `Check the options of ${functionName}`;\n return validateObject(\n engine,\n schema,\n obj,\n message,\n 'Controller initialization error'\n );\n};\n\nconst validateObject = <T extends object>(\n engine: CoreEngine<object> | CoreEngineNext<object>,\n schema: Schema<T>,\n obj: T | undefined,\n validationMessage: string,\n errorMessage: string\n) => {\n try {\n return schema.validate(obj, validationMessage);\n } catch (error) {\n engine.logger.error(error as Error, errorMessage);\n throw error;\n }\n};\n", "import {createReducer} from '@reduxjs/toolkit';\nimport {setCaseAssistConfiguration} from './case-assist-configuration-actions.js';\nimport {getCaseAssistConfigurationInitialState} from './case-assist-configuration-state.js';\n\nexport const caseAssistConfigurationReducer = createReducer(\n getCaseAssistConfigurationInitialState(),\n\n (builder) => {\n builder.addCase(setCaseAssistConfiguration, (state, action) => {\n state.caseAssistId = action.payload.caseAssistId;\n state.locale = action.payload.locale;\n state.apiBaseUrl = action.payload.proxyBaseUrl;\n });\n }\n);\n", "export const getCaseAssistConfigurationInitialState =\n (): CaseAssistConfigurationState => ({\n caseAssistId: '',\n locale: 'en-US',\n });\n\nexport interface CaseAssistConfigurationState {\n /**\n * The unique identifier of the target case assist configuration. See [Retrieving a Case Assist ID](https://docs.coveo.com/en/3328/service/manage-case-assist-configurations#retrieving-a-case-assist-id).\n */\n caseAssistId: string;\n /**\n * The locale of the current user. Must comply with IETF\u2019s BCP 47 definition: https://www.rfc-editor.org/rfc/bcp/bcp47.txt.\n */\n locale?: string;\n /**\n * The base URL to use to proxy Coveo case assist requests (e.g., `https://example.com/search`).\n *\n * This is an advanced option that you only set if you proxy Coveo case assist through your own\n * server. In most cases, you should not set this option.\n *\n * See [Headless proxy: Case Assist](https://docs.coveo.com/en/headless/latest/usage/proxy#case-assist).\n */\n apiBaseUrl?: string;\n}\n", "import {createReducer} from '@reduxjs/toolkit';\nimport {restoreSearchParameters} from '../search-parameters/search-parameter-actions.js';\nimport {disableDebug, enableDebug} from './debug-actions.js';\nimport {getDebugInitialState} from './debug-state.js';\n\nexport const debugReducer = createReducer(getDebugInitialState(), (builder) => {\n builder\n .addCase(enableDebug, () => true)\n .addCase(disableDebug, () => false)\n .addCase(restoreSearchParameters, (state, action) => {\n return action.payload.debug ?? state;\n });\n});\n", "import {createAction} from '@reduxjs/toolkit';\nimport {\n requiredNonEmptyString,\n validatePayload,\n} from '../../utils/validate-payload.js';\nimport type {DateRangeRequest} from '../facets/range-facets/date-facet-set/interfaces/request.js';\nimport type {NumericRangeRequest} from '../facets/range-facets/numeric-facet-set/interfaces/request.js';\nimport {searchParametersDefinition} from './search-parameter-schema.js';\n\n/**\n * The parameters affecting the search response.\n */\nexport interface SearchParameters {\n /**\n * The advanced query expression.\n */\n aq?: string;\n\n /**\n * A record of the category facets, where the key is the facet id, and value is an array containing the parts of the selected path.\n */\n cf?: Record<string, string[]>;\n\n /**\n * The constant query expression.\n */\n cq?: string;\n\n /**\n * Determines whether to return debug information for a query.\n */\n debug?: boolean;\n\n /**\n * A record of the date facets, where the key is the facet id, and value is an array containing the date ranges to request.\n */\n df?: Record<string, DateRangeRequest[]>;\n\n /**\n * Whether to interpret advanced [Coveo Cloud query syntax](https://docs.coveo.com/en/1814/) in the query.\n */\n enableQuerySyntax?: boolean;\n\n /**\n * A record of the facets, where the key is the facet id, and value is an array containing the selected values.\n */\n f?: Record<string, string[]>;\n\n /**\n * A record of the excluded facets, where the key is the facet id, and value is an array containing the excluded values.\n */\n fExcluded?: Record<string, string[]>;\n\n /**\n * A zero-based index of the first result.\n */\n firstResult?: number;\n\n /**\n * A record of the numeric facets, where the key is the facet id, and value is an array containing the numeric ranges to request.\n */\n nf?: Record<string, NumericRangeRequest[]>;\n /**\n * A record of the manual numeric facets, where the key is the facet id, and the value is the selected numeric range.\n */\n mnf?: Record<string, NumericRangeRequest>;\n\n /**\n * The number of results to return.\n */\n numberOfResults?: number;\n\n /**\n * The query.\n */\n q?: string;\n\n /**\n * The sort expression to order returned results by.\n */\n sortCriteria?: string;\n\n /**\n * A record of the static filters, where the key is the static filter id, and value is an array containing the selected static filter captions.\n */\n sf?: Record<string, string[]>;\n\n /**\n * The active tab id.\n * @deprecated Restoring the tab with the restoreSearchParameters action can cause components to be visible/hidden on the wrong tab. The `restoreTab` action is also deprecated and will be removed in V4. Use alternative tab management methods instead.\n */\n tab?: string;\n\n /**\n * A record of the automatic facets, where the key is the facet id, and value is an array containing the selected values.\n */\n af?: Record<string, string[]>;\n}\n\n/**\n * The unique identifier of a tab.\n */\ntype TabId = string;\n\nexport const restoreSearchParameters = createAction(\n 'searchParameters/restore',\n (payload: SearchParameters) =>\n validatePayload(payload, searchParametersDefinition)\n);\n\n/**\n * Restores a tab from the search parameters.\n * @deprecated This action will be removed in V4. Use alternative tab management methods instead.\n */\nexport const restoreTab = createAction(\n 'searchParameters/restoreTab',\n (payload: TabId) => validatePayload(payload, requiredNonEmptyString)\n);\n", "import {\n BooleanValue,\n NumberValue,\n RecordValue,\n type SchemaDefinition,\n StringValue,\n} from '@coveo/bueno';\nimport type {SearchParameters} from './search-parameter-actions.js';\n\nexport const searchParametersDefinition: SchemaDefinition<\n Required<SearchParameters>\n> = {\n q: new StringValue(),\n enableQuerySyntax: new BooleanValue(),\n aq: new StringValue(),\n cq: new StringValue(),\n firstResult: new NumberValue({min: 0}),\n numberOfResults: new NumberValue({min: 0}),\n sortCriteria: new StringValue(),\n f: new RecordValue(),\n fExcluded: new RecordValue(),\n cf: new RecordValue(),\n nf: new RecordValue(),\n mnf: new RecordValue(),\n df: new RecordValue(),\n debug: new BooleanValue(),\n sf: new RecordValue(),\n tab: new StringValue(),\n af: new RecordValue(),\n};\n", "import {createAction} from '@reduxjs/toolkit';\n\nexport const enableDebug = createAction('debug/enable');\nexport const disableDebug = createAction('debug/disable');\n", "export const getDebugInitialState = () => false;\n", "import {StringValue} from '@coveo/bueno';\nimport {createAction} from '@reduxjs/toolkit';\nimport {validatePayload} from '../../utils/validate-payload.js';\n\nexport const setSearchHub = createAction('searchHub/set', (payload: string) =>\n validatePayload(\n payload,\n new StringValue({required: true, emptyAllowed: true})\n )\n);\n", "import {createReducer} from '@reduxjs/toolkit';\nimport {updateSearchConfiguration} from '../configuration/configuration-actions.js';\nimport {change} from '../history/history-actions.js';\nimport {setSearchHub} from './search-hub-actions.js';\nimport {getSearchHubInitialState} from './search-hub-state.js';\n\nexport const searchHubReducer = createReducer(\n getSearchHubInitialState(),\n (builder) => {\n builder\n .addCase(setSearchHub, (_, action) => action.payload)\n .addCase(\n change.fulfilled,\n (state, action) => action.payload?.searchHub ?? state\n )\n .addCase(\n updateSearchConfiguration,\n (state, action) => action.payload.searchHub || state\n );\n }\n);\n", "import {\n ArrayValue,\n BooleanValue,\n RecordValue,\n type SchemaDefinition,\n StringValue,\n Value,\n} from '@coveo/bueno';\nimport {createAction} from '@reduxjs/toolkit';\nimport type {IRuntimeEnvironment} from 'coveo.analytics';\nimport type {PlatformEnvironment} from '../../utils/url-utils.js';\nimport {\n nonEmptyString,\n optionalNonEmptyVersionString,\n optionalTrackingId,\n requiredNonEmptyString,\n validatePayload,\n} from '../../utils/validate-payload.js';\nimport {COVEO_FRAMEWORK, type CoveoFramework} from '../../utils/version.js';\n\nconst originSchemaOnConfigUpdate = () => nonEmptyString;\n\nconst originSchemaOnUpdate = () => requiredNonEmptyString;\n\nexport interface UpdateBasicConfigurationActionCreatorPayload {\n /**\n * The access token to use to authenticate requests against the Coveo Cloud endpoints. Typically, this will be an API key or search token that grants the privileges to execute queries and push usage analytics data in the target Coveo Cloud organization.\n */\n accessToken?: string;\n\n /**\n * The environment in which the organization is hosted.\n *\n * The `dev` and `stg` environments are only available internally for Coveo employees (e.g., Professional Services).\n */\n environment?: PlatformEnvironment;\n\n /**\n * The unique identifier of the target Coveo Cloud organization (e.g., `mycoveocloudorganizationg8tp8wu3`)\n */\n organizationId?: string;\n}\n\nexport const updateBasicConfiguration = createAction(\n 'configuration/updateBasicConfiguration',\n (payload: UpdateBasicConfigurationActionCreatorPayload) =>\n validatePayload(payload, {\n accessToken: nonEmptyString,\n environment: new StringValue<PlatformEnvironment>({\n required: false,\n constrainTo: ['prod', 'hipaa', 'stg', 'dev'],\n }),\n organizationId: nonEmptyString,\n })\n);\n\nexport interface UpdateSearchConfigurationActionCreatorPayload {\n /**\n * The base URL to use to proxy Coveo search requests (e.g., `https://example.com/search`).\n *\n * This is an advanced option that you only set if you proxy Coveo searchrequests through your own\n * server. In most cases, you should not set this option.\n *\n * See [Headless proxy: Search](https://docs.coveo.com/en/headless/latest/usage/proxy#search).\n */\n proxyBaseUrl?: string;\n\n /**\n * The name of the query pipeline to use for the query (e.g., `External Search`).\n */\n pipeline?: string;\n\n /**\n * The first level of origin of the request, typically the identifier of the graphical search interface from which the request originates (e.g., `ExternalSearch`).\n */\n searchHub?: string;\n\n /**\n * The locale of the current user. Must comply with IETF\u2019s BCP 47 definition: https://www.rfc-editor.org/rfc/bcp/bcp47.txt.\n */\n locale?: string;\n\n /**\n * The [tz database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) identifier of the time zone of the user.\n */\n timezone?: string;\n /**\n * Specifies the name of the authentication providers to use to perform queries.\n *\n * See [SAML Authentication](https://docs.coveo.com/en/91/).\n */\n authenticationProviders?: string[];\n}\n\nexport const updateSearchConfiguration = createAction(\n 'configuration/updateSearchConfiguration',\n (payload: UpdateSearchConfigurationActionCreatorPayload) => {\n return validatePayload(payload, {\n proxyBaseUrl: new StringValue({required: false, url: true}),\n pipeline: new StringValue({required: false, emptyAllowed: true}),\n searchHub: nonEmptyString,\n timezone: nonEmptyString,\n locale: nonEmptyString,\n authenticationProviders: new ArrayValue({\n required: false,\n each: requiredNonEmptyString,\n }),\n });\n }\n);\n\nexport interface UpdateAnalyticsConfigurationActionCreatorPayload {\n /**\n * Whether to enable usage analytics tracking.\n */\n enabled?: boolean;\n\n /**\n * Sets the Origin Context dimension on the analytic events.\n *\n * You can use this dimension to specify the context of your application.\n * Suggested values are \"Search\", \"InternalSearch\" and \"CommunitySearch\"\n */\n originContext?: string;\n\n /**\n * The origin level 2 usage analytics event metadata whose value should typically be the identifier of the tab from which the usage analytics event originates (e.g., `All`).\n */\n originLevel2?: string;\n\n /**\n * The origin level 3 usage analytics event metadata whose value should typically be the URL of the page that linked to the search interface that\u2019s making the request (e.g., `https://connect.coveo.com/s/`).\n */\n originLevel3?: string;\n\n /**\n * The base URL to use to proxy Coveo analytics requests (e.g., `https://example.com/analytics`).\n *\n * This is an advanced option that you only set if you proxy Coveo analytics requests through your own\n * server. In most cases, you should not set this option.\n *\n * See [Headless proxy: Analytics](https://docs.coveo.com/en/headless/latest/usage/proxy#analytics).\n */\n proxyBaseUrl?: string;\n\n /**\n * The Coveo analytics runtime to use, see https://github.com/coveo/coveo.analytics.js for more info.\n */\n runtimeEnvironment?: AnalyticsRuntimeEnvironment;\n /**\n * Whether analytics events should be logged anonymously.\n * If set to true, the Usage Analytics Write API will not extract the name and userDisplayName, if present, from the search token\n */\n anonymous?: boolean;\n /**\n * The name of the device that the end user is using. It should be explicitly configured in the context of a native mobile app.\n */\n deviceId?: string;\n /**\n * Specifies the user display name for the usage analytics logs.\n */\n userDisplayName?: string;\n /**\n * Specifies the URL of the current page or component.\n */\n documentLocation?: string;\n /**\n * The unique identifier of the tracking target.\n */\n trackingId?: string;\n /**\n * The analytics client to use.\n * - `legacy`: The legacy analytics client, i.e., the Coveo Analytics.js library.\n * - `next`: The next analytics client, i.e., the Coveo Event Protocol with the Relay library.\n *\n * @default 'next'\n */\n analyticsMode?: 'legacy' | 'next';\n /**\n * Specifies the frameworks and version used around Headless (e.g. @coveo/atomic).\n * @internal\n */\n source?: Partial<Record<CoveoFramework, string>>;\n}\n\nexport type AnalyticsRuntimeEnvironment = IRuntimeEnvironment;\n\nexport const analyticsConfigurationSchema: SchemaDefinition<\n Required<UpdateAnalyticsConfigurationActionCreatorPayload>\n> = {\n enabled: new BooleanValue({default: true}),\n originContext: originSchemaOnConfigUpdate(),\n originLevel2: originSchemaOnConfigUpdate(),\n originLevel3: originSchemaOnConfigUpdate(),\n proxyBaseUrl: new StringValue({required: false, url: true}),\n runtimeEnvironment: new Value(),\n anonymous: new BooleanValue({default: false}),\n deviceId: nonEmptyString,\n userDisplayName: nonEmptyString,\n documentLocation: nonEmptyString,\n trackingId: optionalTrackingId,\n analyticsMode: new StringValue<'legacy' | 'next'>({\n constrainTo: ['legacy', 'next'],\n required: false,\n default: 'next',\n }),\n source: new RecordValue({\n options: {required: false},\n values: COVEO_FRAMEWORK.reduce(\n (acc, framework) => {\n acc[framework] = optionalNonEmptyVersionString;\n return acc;\n },\n {} as Record<CoveoFramework, StringValue>\n ),\n }),\n};\n\nexport const updateAnalyticsConfiguration = createAction(\n 'configuration/updateAnalyticsConfiguration',\n (payload: UpdateAnalyticsConfigurationActionCreatorPayload) => {\n return validatePayload(payload, analyticsConfigurationSchema);\n }\n);\n\nexport const disableAnalytics = createAction('configuration/analytics/disable');\nexport const enableAnalytics = createAction('configuration/analytics/enable');\n\nexport interface SetOriginLevel2ActionCreatorPayload {\n /**\n * The origin level 2 usage analytics event metadata whose value should typically be the identifier of the tab (e.g., `All`).\n */\n originLevel2: string;\n}\n\nexport const setOriginLevel2 = createAction(\n 'configuration/analytics/originlevel2',\n (payload: SetOriginLevel2ActionCreatorPayload) =>\n validatePayload(payload, {originLevel2: originSchemaOnUpdate()})\n);\n\nexport interface SetOriginLevel3ActionCreatorPayload {\n /**\n * The origin level 3 usage analytics event metadata whose value should typically be the URL of the page that linked to the search interface (e.g., `https://connect.coveo.com/s/`).\n */\n originLevel3: string;\n}\n\nexport const setOriginLevel3 = createAction(\n 'configuration/analytics/originlevel3',\n (payload: SetOriginLevel3ActionCreatorPayload) =>\n validatePayload(payload, {originLevel3: originSchemaOnUpdate()})\n);\n", "export const VERSION = process.env.VERSION || 'Test version';\n\nexport const COVEO_FRAMEWORK = ['@coveo/atomic', '@coveo/quantic'] as const;\n\nexport type CoveoFramework = (typeof COVEO_FRAMEWORK)[number];\n", "import {createAction, createAsyncThunk} from '@reduxjs/toolkit';\nimport type {SearchAppState} from '../../state/search-app-state.js';\nimport type {HistoryState} from './history-state.js';\n\nexport const undo = createAction('history/undo');\nexport const redo = createAction('history/redo');\n\nexport const snapshot = createAction<HistoryState>('history/snapshot');\n\nexport const back = createAsyncThunk('history/back', async (_, {dispatch}) => {\n dispatch(undo());\n await dispatch(change());\n});\n\nexport const forward = createAsyncThunk(\n 'history/forward',\n async (_, {dispatch}) => {\n dispatch(redo());\n await dispatch(change());\n }\n);\n\nexport const change = createAsyncThunk(\n 'history/change',\n async (_, {getState}) => {\n const s = getState() as SearchAppState;\n return s.history.present;\n }\n);\n", "export const getSearchHubInitialState = () => 'default';\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {Relay} from '@coveo/relay';\nimport type {\n Dispatch,\n Middleware,\n Reducer,\n ReducersMapObject,\n StateFromReducersMapObject,\n ThunkDispatch,\n UnknownAction,\n Unsubscribe,\n} from '@reduxjs/toolkit';\nimport type {Logger} from 'pino';\nimport {getRelayInstanceFromState} from '../api/analytics/analytics-relay-client.js';\nimport {answerApi} from '../api/knowledge/stream-answer-api.js';\nimport {\n disableAnalytics,\n enableAnalytics,\n type UpdateAnalyticsConfigurationActionCreatorPayload,\n updateAnalyticsConfiguration,\n updateBasicConfiguration,\n} from '../features/configuration/configuration-actions.js';\nimport type {\n ConfigurationState,\n CoreConfigurationState,\n} from '../features/configuration/configuration-state.js';\nimport {versionReducer as version} from '../features/debug/version-slice.js';\nimport type {SearchParametersState} from '../state/search-app-state.js';\nimport {doNotTrack} from '../utils/utils.js';\nimport {analyticsMiddleware} from './analytics-middleware.js';\nimport {configuration} from './common-reducers.js';\nimport type {EngineConfiguration} from './engine-configuration.js';\nimport {instantlyCallableThunkActionMiddleware} from './instantly-callable-middleware.js';\nimport type {LoggerOptions} from './logger.js';\nimport {logActionErrorMiddleware} from './logger-middlewares.js';\nimport {\n getNavigatorContext,\n type NavigatorContext,\n type NavigatorContextProvider,\n} from './navigator-context-provider.js';\nimport {createReducerManager, type ReducerManager} from './reducer-manager.js';\nimport {createRenewAccessTokenMiddleware} from './renew-access-token-middleware.js';\nimport {stateKey} from './state-key.js';\nimport {type CoreExtraArguments, configureStore, type Store} from './store.js';\nimport type {ThunkExtraArguments} from './thunk-extra-arguments.js';\n\nexport type CoreState<\n Configuration extends CoreConfigurationState = CoreConfigurationState,\n> = {\n configuration: Configuration;\n version: string;\n} & Partial<SearchParametersState>;\n\ntype EngineDispatch<\n State,\n ExtraArguments extends ThunkExtraArguments,\n> = ThunkDispatch<State, ExtraArguments, UnknownAction> &\n Dispatch<UnknownAction>;\n\nexport interface CoreEngine<\n State extends object = {},\n ExtraArguments extends ThunkExtraArguments = ThunkExtraArguments,\n Configuration extends CoreConfigurationState = CoreConfigurationState,\n> {\n /**\n * Dispatches an action directly. This is the only way to trigger a state change.\n * Each headless controller dispatches its own actions.\n *\n * @param action An action supported by the headless engine.\n *\n * @returns For convenience, the action object that was just dispatched.\n */\n dispatch: EngineDispatch<State & CoreState<Configuration>, ExtraArguments>;\n /**\n * Adds a change listener. It will be called any time an action is\n * dispatched, and some part of the state tree may potentially have changed.\n * You may then access the new `state`.\n *\n * @param listener A callback to be invoked on every dispatch.\n * @returns A function to remove this change listener.\n */\n subscribe(listener: () => void): Unsubscribe;\n /**\n * The complete headless state tree.\n */\n state: State & CoreState<Configuration>;\n /**\n * The Relay instance used by Headless.\n */\n relay: Relay;\n /**\n * The redux store.\n */\n store: Store;\n /**\n * The logger instance used by headless.\n * */\n logger: Logger;\n /**\n * Adds the specified reducers to the store.\n *\n * @param reducers - An object containing the reducers to attach to the engine.\n */\n addReducers(reducers: ReducersMapObject): void;\n /**\n * Enable analytics tracking\n */\n enableAnalytics(): void;\n /**\n * Disable analytics tracking\n */\n disableAnalytics(): void;\n /**\n * The navigator context (referer, location, UserAgent)\n */\n navigatorContext: NavigatorContext;\n}\n\nexport type CoreEngineNext<\n State extends object = {},\n ExtraArguments extends ThunkExtraArguments = ThunkExtraArguments,\n Configuration extends CoreConfigurationState = CoreConfigurationState,\n> = Omit<CoreEngine<State, ExtraArguments>, 'state' | 'store'> & {\n /**\n * The readonly internal state of the headless engine.\n *\n * @internal\n */\n readonly [stateKey]: State & CoreState<Configuration>;\n\n /**\n * The readonly global headless engine configuration\n */\n readonly configuration: Configuration;\n};\n\nexport interface EngineOptions<Reducers extends ReducersMapObject>\n extends ExternalEngineOptions<StateFromReducersMapObject<Reducers>> {\n /**\n * Map object of reducers.\n * A reducer is a pure function that takes the previous state and an action, and returns the next state.\n * ```\n * (previousState, action) => nextState\n * ```\n * [Redux documentation on reducers.](https://redux.js.org/glossary#reducer)\n */\n reducers: Reducers;\n /**\n * An optional cross reducer (aka: root reducer) that can be combined with the slice reducers.\n *\n * [Redux documentation on root reducers.](https://redux.js.org/usage/structuring-reducers/beyond-combinereducers)\n */\n crossReducer?: Reducer;\n}\n\nexport interface ExternalEngineOptions<State extends object> {\n /**\n * The global headless engine configuration options.\n */\n configuration: EngineConfiguration;\n\n /**\n * The initial headless state.\n * You may optionally specify it to hydrate the state\n * from the server in universal apps, or to restore a previously serialized\n * user session.\n */\n preloadedState?: State;\n /**\n * List of additional middlewares.\n * A middleware is a higher-order function that composes a dispatch function to return a new dispatch function.\n * It is useful for logging actions, performing side effects like routing, or turning an asynchronous API call into a series of synchronous actions.\n *\n * @example\n * ```\n * type MiddlewareAPI = { dispatch: Dispatch, getState: () => State }\n * type Middleware = (api: MiddlewareAPI) => (next: Dispatch) => Dispatch\n * ```\n * [Redux documentation on middlewares.](https://redux.js.org/glossary#middleware)\n */\n middlewares?: Middleware<{}, State>[];\n /**\n * The logger options.\n */\n loggerOptions?: LoggerOptions;\n /**\n * An optional function returning navigation context. (referer, location, UserAgent)\n */\n navigatorContextProvider?: NavigatorContextProvider;\n}\n\nfunction getUpdateAnalyticsConfigurationPayload(\n configuration: EngineConfiguration,\n logger: Logger\n): UpdateAnalyticsConfigurationActionCreatorPayload | null {\n const {analytics} = configuration;\n const {analyticsClientMiddleware: _, ...payload} = analytics ?? {};\n\n const payloadWithURL = {\n ...payload,\n ...(analytics?.proxyBaseUrl && {\n apiBaseUrl: analytics.proxyBaseUrl,\n nexApiBaseUrl: analytics.proxyBaseUrl,\n }),\n };\n\n // TODO KIT-2844\n if (payloadWithURL.analyticsMode !== 'next' && doNotTrack()) {\n logger.info('Analytics disabled since doNotTrack is active.');\n return {\n ...payloadWithURL,\n enabled: false,\n };\n }\n\n return payloadWithURL;\n}\n\nexport function buildEngine<\n Reducers extends ReducersMapObject,\n ExtraArguments extends ThunkExtraArguments,\n>(\n options: EngineOptions<Reducers>,\n thunkExtraArguments: ExtraArguments\n): CoreEngine<\n StateFromReducersMapObject<Reducers>,\n CoreExtraArguments & ExtraArguments,\n ConfigurationState\n> {\n const reducers = {\n ...options.reducers,\n configuration,\n version,\n };\n const engine = buildCoreEngine(\n {...options, reducers},\n thunkExtraArguments,\n configuration\n );\n const {accessToken, environment, organizationId} = options.configuration;\n\n engine.dispatch(\n updateBasicConfiguration({\n accessToken,\n environment,\n organizationId,\n })\n );\n\n const analyticsPayload = getUpdateAnalyticsConfigurationPayload(\n options.configuration,\n engine.logger\n );\n if (analyticsPayload) {\n engine.dispatch(updateAnalyticsConfiguration(analyticsPayload));\n }\n\n return engine;\n}\n\nexport function buildCoreEngine<\n Reducers extends ReducersMapObject,\n ExtraArguments extends ThunkExtraArguments,\n Configuration extends CoreConfigurationState,\n>(\n options: EngineOptions<Reducers>,\n thunkExtraArguments: ExtraArguments,\n configurationReducer: Reducer<Configuration>\n): CoreEngine<\n StateFromReducersMapObject<Reducers>,\n ExtraArguments,\n Configuration\n> {\n const {reducers, navigatorContextProvider} = options;\n const reducerManager = createReducerManager(\n {...reducers, configurationReducer},\n options.preloadedState ?? {}\n );\n if (options.crossReducer) {\n reducerManager.addCrossReducer(options.crossReducer);\n }\n const logger = thunkExtraArguments.logger;\n const thunkExtraArgumentsWithRelay: CoreExtraArguments & ExtraArguments = {\n ...thunkExtraArguments,\n get relay() {\n return getRelayInstanceFromState(engine.state, navigatorContextProvider);\n },\n get navigatorContext() {\n return getNavigatorContext(this.relay, navigatorContextProvider);\n },\n };\n const store = createStore(\n options,\n thunkExtraArgumentsWithRelay,\n reducerManager\n );\n\n const engine = {\n addReducers(reducers: ReducersMapObject) {\n if (reducerManager.containsAll(reducers)) {\n return;\n }\n\n reducerManager.add(reducers);\n store.replaceReducer(reducerManager.combinedReducer);\n },\n\n dispatch: store.dispatch,\n\n subscribe: store.subscribe,\n\n enableAnalytics() {\n store.dispatch(enableAnalytics());\n },\n\n disableAnalytics() {\n store.dispatch(disableAnalytics());\n },\n\n get state() {\n return store.getState();\n },\n\n get relay() {\n return getRelayInstanceFromState(this.state, navigatorContextProvider);\n },\n\n get navigatorContext() {\n return getNavigatorContext(this.relay, navigatorContextProvider);\n },\n\n logger,\n\n store,\n };\n return engine;\n}\n\nfunction createStore<\n Reducers extends ReducersMapObject,\n ExtraArguments extends CoreExtraArguments,\n>(\n options: EngineOptions<Reducers>,\n thunkExtraArguments: ExtraArguments,\n reducerManager: ReducerManager\n) {\n const {preloadedState, configuration} = options;\n const name = configuration.name || 'coveo-headless';\n const middlewares = createMiddleware(options, thunkExtraArguments.logger);\n\n return configureStore({\n preloadedState,\n reducer: reducerManager.combinedReducer,\n middlewares,\n thunkExtraArguments,\n name,\n });\n}\n\nfunction createMiddleware<Reducers extends ReducersMapObject>(\n options: EngineOptions<Reducers>,\n logger: Logger\n) {\n const {renewAccessToken} = options.configuration;\n const renewTokenMiddleware = createRenewAccessTokenMiddleware(\n logger,\n renewAccessToken\n );\n\n return [\n instantlyCallableThunkActionMiddleware,\n renewTokenMiddleware,\n logActionErrorMiddleware(logger),\n analyticsMiddleware,\n ].concat(answerApi.middleware, options.middlewares || []);\n}\n\nexport const nextAnalyticsUsageWithServiceFeatureWarning =\n '[Warning] A component from the Coveo Headless library has been instantiated with the Analytics Mode: \"Next\".\\n' +\n 'However, this mode is not available for Coveo for Service features, and this configuration may not work as expected.\\n' +\n 'Please switch back to the \"legacy\" analytics mode to ensure proper functionality.\\n' +\n 'For more information, refer to the documentation: https://docs.coveo.com/en/o3r90189/build-a-search-ui/event-protocol';\n\nexport function warnIfUsingNextAnalyticsModeForServiceFeature(\n analyticsMode: 'next' | 'legacy'\n) {\n if (analyticsMode === 'next') {\n console.warn(nextAnalyticsUsageWithServiceFeatureWarning);\n }\n}\n", "import {createRelay} from '@coveo/relay';\nimport {createSelector} from '@reduxjs/toolkit';\nimport type {NavigatorContextProvider} from '../../app/navigator-context-provider.js';\nimport type {\n CommerceConfigurationSection,\n ConfigurationSection,\n} from '../../state/state-sections.js';\nimport {getAnalyticsNextApiBaseUrl} from '../platform-client.js';\nimport {getAnalyticsSource} from './analytics-selectors.js';\n\ntype StateNeededByRelay = ConfigurationSection | CommerceConfigurationSection;\n\nexport const getRelayInstanceFromState = createSelector(\n (state: StateNeededByRelay) => state.configuration.organizationId,\n (state: StateNeededByRelay) => state.configuration.environment,\n (state: StateNeededByRelay) => state.configuration.accessToken,\n (state: StateNeededByRelay) => state.configuration.analytics,\n (state: StateNeededByRelay) =>\n getAnalyticsSource(state.configuration.analytics),\n (\n _state: StateNeededByRelay,\n navigatorContextProvider?: NavigatorContextProvider\n ) => getEnvironment(navigatorContextProvider),\n (\n organizationId,\n platformEnvironment,\n token,\n {trackingId, apiBaseUrl, enabled},\n source,\n environment\n ) =>\n createRelay({\n mode: enabled ? 'emit' : 'disabled',\n url:\n apiBaseUrl ??\n getAnalyticsNextApiBaseUrl(organizationId, platformEnvironment),\n token,\n trackingId: trackingId ?? null,\n source,\n environment,\n })\n);\n\nconst getEnvironment = (customProvider?: NavigatorContextProvider) => {\n if (!customProvider) {\n return undefined;\n }\n\n const customContext = customProvider();\n\n return {\n getLocation: () => customContext.location,\n getReferrer: () => customContext.referrer,\n getUserAgent: () => customContext.userAgent,\n generateUUID: () => customContext.clientId,\n };\n};\n", "import { validate, v4 } from 'uuid';\nimport { createExplorerMessenger } from '@coveo/explorer-messenger';\n\nfunction emit({ config, environment, event, listenerManager, }) {\n const { url, token, mode } = config;\n const isEnabled = mode !== \"disabled\";\n if (isEnabled) {\n listenerManager.call(event);\n environment.send(url, token, event);\n }\n}\n\nconst clientIdKey = \"visitorId\";\n\nfunction createClientIdManager(environmentManager) {\n return {\n getClientId: () => {\n const environment = environmentManager.get();\n const storage = environment.storage;\n const existingClientId = storage.getItem(clientIdKey);\n const clientId = existingClientId && validate(existingClientId)\n ? existingClientId\n : environment.generateUUID();\n storage.setItem(clientIdKey, clientId);\n return clientId;\n },\n };\n}\n\nconst version = \"1.2.6\";\n\n/**\n * Can be used to both check if the first bit is set (for any utf-8 multibyte part),\n * and to detect \"following bytes\" (which start with `10xx_xxxx`)\n */\nconst UTF8_HIGH_BIT = 0b1000_0000;\n/** Header for a 2-byte code point: `110x_xxxx`. Can also be used as bit-mask to check for \"following bytes\". */\nconst UTF8_HEADER_2 = 0b1100_0000;\n/** Header for a 3-byte code point: `1110_xxxx`. Can also be used as bit-mask to check for \"header 2\". */\nconst UTF8_HEADER_3 = 0b1110_0000;\n/** Header for a 4-byte code point: `1111_0xxx`. Can also be used as bit-mask to check for \"header 3\". */\nconst UTF8_HEADER_4 = 0b1111_0000;\n/** Bit-mask for \"header 4\". */\nconst UTF8_HEADER_4_MASK = 0b1111_1000;\nfunction utf8ByteCountFromFirstByte(firstByte) {\n if ((firstByte & UTF8_HEADER_4_MASK) === UTF8_HEADER_4) {\n return 4;\n }\n if ((firstByte & UTF8_HEADER_4) === UTF8_HEADER_3) {\n return 3;\n }\n if ((firstByte & UTF8_HEADER_3) === UTF8_HEADER_2) {\n return 2;\n }\n return 1;\n}\n/**\n * Truncate a URL to an arbitrary length, taking care to not break inside a percent escape or UTF-8 multibyte sequence.\n *\n * @param input The input to truncate to the specified limit.\n * @param limit The limit to apply; if negative, no truncation is applied.\n * @returns The URL, possibly truncated to a length near limit (at most 11 characters less than limit).\n */\nfunction truncateUrl(input, limit) {\n if (limit < 0 || input.length <= limit) {\n return input;\n }\n // A valid escape sequence is a percent followed by 2 hexadecimal characters; check if we split one up.\n let end = input.indexOf(\"%\", limit - 2);\n if (end < 0 || end > limit) {\n end = limit;\n }\n else {\n limit = end;\n }\n // Check that truncating at end won't break up an UTF-8 multibyte sequence half-way,\n // by peeking backwards to find the first byte of an UTF-8 sequence (if present).\n while (end > 2 && input.charAt(end - 3) == \"%\") {\n const peekByte = Number.parseInt(input.substring(end - 2, end), 16);\n // Note: if parsing fails, NaN gets coerced to 0 by the bitwise and.\n if ((peekByte & UTF8_HIGH_BIT) != UTF8_HIGH_BIT) {\n break;\n }\n end -= 3;\n // Check if we reached the first byte by checking it is not a \"follow byte\": 10xx_xxxx.\n if ((peekByte & UTF8_HEADER_2) != UTF8_HIGH_BIT) {\n // If the full code point is there, keep it.\n if (limit - end >= utf8ByteCountFromFirstByte(peekByte) * 3) {\n end = limit;\n }\n // Otherwise, end is already set at the correct point to truncate at (the start of the multibyte sequence).\n break;\n }\n }\n return input.substring(0, end);\n}\n\nfunction getEventConfig(config) {\n const { trackingId } = config;\n return { trackingId };\n}\nfunction getSource(config) {\n return (config.source || []).concat([`relay@${version}`]);\n}\nfunction createMeta(type, config, environment, clientIdManager) {\n const { getReferrer, getLocation, getUserAgent } = environment;\n const eventConfig = getEventConfig(config);\n const clientId = clientIdManager.getClientId();\n return Object.freeze({\n type,\n config: eventConfig,\n ts: Date.now(),\n source: getSource(config),\n clientId,\n userAgent: getUserAgent(),\n referrer: truncate(getReferrer()),\n location: truncate(getLocation()),\n });\n}\nfunction truncate(url) {\n const limit = 1024;\n return url !== null ? truncateUrl(url, limit) : null;\n}\n\nfunction createRelayEvent(type, payload, config, environment, clientIdManager) {\n return {\n ...payload,\n meta: createMeta(type, config, environment, clientIdManager),\n };\n}\n\nconst ANY_EVENT_TYPE = \"*\";\nfunction createListenerManager() {\n const listeners = [];\n function getListenerIndex({ type, callback }) {\n return listeners.findIndex((listener) => listener.type === type && listener.callback === callback);\n }\n function isMatchesType(listener, type) {\n return listener.type === \"*\" || type === listener.type;\n }\n function add(listener) {\n if (getListenerIndex(listener) < 0) {\n listeners.push(listener);\n }\n return () => remove(listener.type, listener.callback);\n }\n function call(event) {\n listeners.forEach((listener) => {\n if (isMatchesType(listener, event.meta.type)) {\n try {\n listener.callback(event);\n }\n catch (e) {\n console.error(e);\n }\n }\n });\n }\n function removeMultiple(type) {\n if (type === ANY_EVENT_TYPE) {\n listeners.length = 0;\n }\n else {\n for (let i = listeners.length - 1; i >= 0; i--) {\n if (listeners[i].type === type) {\n listeners.splice(i, 1);\n }\n }\n }\n }\n function removeOne(listener) {\n const index = getListenerIndex(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n }\n function remove(type, callback) {\n if (callback) {\n removeOne({ type, callback });\n }\n else {\n removeMultiple(type);\n }\n }\n return {\n add,\n call,\n remove,\n };\n}\n\nfunction pick({ url, token, trackingId, ...rest }) {\n return Object.freeze({\n url,\n token,\n trackingId,\n ...(!!rest.mode && { mode: rest.mode }),\n ...(!!rest.source && { source: rest.source }),\n ...(!!rest.environment && { environment: rest.environment }),\n });\n}\nfunction createConfigManager(initialConfig) {\n let _config = pick(initialConfig);\n return {\n get: () => _config,\n update: (updatedConfig) => {\n _config = pick({ ..._config, ...updatedConfig });\n },\n };\n}\n\nconst cookieManager = createCookieManager();\nfunction createCookieManager() {\n const prefix = \"coveo_\";\n const getDomain = (host) => {\n const parts = host.split(\".\").slice(-2);\n return parts.length == 2 ? parts.join(\".\") : \"\";\n };\n return {\n getItem(key) {\n const cookiePrefix = `${prefix}${key}=`;\n const cookieArray = document.cookie.split(\";\");\n for (const cookie of cookieArray) {\n const prettifyCookie = cookie.replace(/^\\s+/, \"\");\n if (prettifyCookie.lastIndexOf(cookiePrefix, 0) === 0) {\n return prettifyCookie.substring(cookiePrefix.length, prettifyCookie.length);\n }\n }\n return null;\n },\n setItem(key, data, expire) {\n const domain = getDomain(window.location.hostname);\n const expireSection = `;expires=${new Date(new Date().getTime() + expire).toUTCString()}`;\n const domainSection = domain ? `;domain=${domain}` : \"\";\n document.cookie = `${prefix}${key}=${data}${expireSection}${domainSection};path=/;SameSite=Lax`;\n },\n removeItem(key) {\n this.setItem(key, \"\", -1);\n },\n };\n}\n\nfunction createBrowserStorage() {\n return {\n getItem(key) {\n return cookieManager.getItem(key) || localStorage.getItem(key);\n },\n removeItem(key) {\n cookieManager.removeItem(key);\n localStorage.removeItem(key);\n },\n setItem(key, data) {\n const oneYear = 31556952000;\n localStorage.setItem(key, data);\n cookieManager.setItem(key, data, oneYear);\n },\n };\n}\n\nfunction getReferrer() {\n const referrer = document.referrer;\n return referrer === \"\" ? null : referrer;\n}\nfunction buildBrowserEnvironment() {\n return {\n runtime: \"browser\",\n send: (url, token, event) => {\n const response = navigator.sendBeacon(`${url}?access_token=${token}`, new Blob([JSON.stringify([event])], {\n type: \"application/json\",\n }));\n const messenger = createExplorerMessenger();\n messenger.sendMessage({ kind: \"EVENT_PROTOCOL\", event, url, token });\n if (!response) {\n throw new Error(`Failed to send the event(s) because the payload size exceeded the maximum allowed size (32 KB). Please contact support if the problem persists.`);\n }\n },\n getReferrer: () => getReferrer(),\n getLocation: () => window.location.href,\n getUserAgent: () => navigator.userAgent,\n generateUUID: () => v4(),\n storage: createBrowserStorage(),\n };\n}\n\n// From: https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#feature-detecting_localstorage\nfunction localStorageAvailable() {\n try {\n const x = \"__storage_test__\";\n localStorage.setItem(x, x);\n localStorage.removeItem(x);\n return true;\n }\n catch (e) {\n return (e instanceof DOMException &&\n e.name === \"QuotaExceededError\" &&\n // acknowledge QuotaExceededError only if there's something already stored\n localStorage &&\n localStorage.length !== 0);\n }\n}\n\nfunction createNullStorage() {\n return {\n getItem() {\n return null;\n },\n removeItem() {\n return;\n },\n setItem() {\n return;\n },\n };\n}\n\nfunction buildNullEnvironment() {\n return {\n runtime: \"null\",\n send: () => undefined,\n getReferrer: () => null,\n getLocation: () => null,\n getUserAgent: () => null,\n generateUUID: () => \"\",\n storage: createNullStorage(),\n };\n}\n\nfunction buildEnvironment(configManager) {\n const active = configManager.get().mode !== \"disabled\";\n const environmentFromConfig = configManager.get().environment;\n const nullEnvironment = buildNullEnvironment();\n if (active && environmentFromConfig) {\n return {\n storage: nullEnvironment.storage,\n ...environmentFromConfig,\n runtime: \"custom\",\n };\n }\n if (active && isBrowser() && localStorageAvailable()) {\n return buildBrowserEnvironment();\n }\n return nullEnvironment;\n}\nfunction isBrowser() {\n try {\n return typeof window === \"object\";\n }\n catch {\n return false;\n }\n}\nfunction createEnvironmentManager(configManager) {\n return {\n get: () => Object.freeze(buildEnvironment(configManager)),\n };\n}\n\n/**\n * Initializes the Relay library object.\n * @param {RelayConfig} initialConfig\n * @returns {Relay}\n */\nfunction createRelay(initialConfig) {\n const configManager = createConfigManager(initialConfig);\n const listenerManager = createListenerManager();\n const environmentManager = createEnvironmentManager(configManager);\n const clientIdManager = createClientIdManager(environmentManager);\n return {\n emit: (type, payload) => {\n const config = configManager.get();\n const environment = environmentManager.get();\n const event = createRelayEvent(type, payload, config, environment, clientIdManager);\n return emit({\n config,\n environment,\n event,\n listenerManager,\n });\n },\n getMeta: (type) => createMeta(type, configManager.get(), environmentManager.get(), clientIdManager),\n on: (type, callback) => listenerManager.add({ type, callback }),\n off: (type, callback) => listenerManager.remove(type, callback),\n updateConfig: (config) => configManager.update(config),\n version,\n };\n}\n\nexport { buildBrowserEnvironment, clientIdKey, createRelay };\n", "export { default as MAX } from './max.js';\nexport { default as NIL } from './nil.js';\nexport { default as parse } from './parse.js';\nexport { default as stringify } from './stringify.js';\nexport { default as v1 } from './v1.js';\nexport { default as v1ToV6 } from './v1ToV6.js';\nexport { default as v3 } from './v3.js';\nexport { default as v4 } from './v4.js';\nexport { default as v5 } from './v5.js';\nexport { default as v6 } from './v6.js';\nexport { default as v6ToV1 } from './v6ToV1.js';\nexport { default as v7 } from './v7.js';\nexport { default as validate } from './validate.js';\nexport { default as version } from './version.js';\n", "import REGEX from './regex.js';\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\nexport default validate;\n", "export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;\n", "import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n", "let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n", "import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n", "const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n", "function createExplorerMessenger() {\n const isBrowser = typeof window !== \"undefined\";\n return {\n sendMessage(message) {\n isBrowser && window.postMessage(message, \"*\");\n }\n };\n}\nexport {\n createExplorerMessenger\n};\n", "import {createSelector} from '@reduxjs/toolkit';\nimport type {CoreAnalyticsState} from '../../features/configuration/configuration-state.js';\nimport {VERSION} from '../../utils/version.js';\n\nexport const getAnalyticsSource = createSelector(\n (state: CoreAnalyticsState) => state.source,\n (source) =>\n Object.entries(source)\n .map(\n ([frameworkName, frameworkVersion]) =>\n `${frameworkName}@${frameworkVersion}`\n )\n .concat(`@coveo/headless@${VERSION}`)\n);\n", "import {\n createSelector,\n type ThunkDispatch,\n type UnknownAction,\n} from '@reduxjs/toolkit';\nimport {\n defaultNodeJSNavigatorContextProvider,\n type NavigatorContext,\n} from '../../app/navigator-context-provider.js';\nimport {selectAdvancedSearchQueries} from '../../features/advanced-search-queries/advanced-search-query-selectors.js';\nimport {fromAnalyticsStateToAnalyticsParams} from '../../features/configuration/analytics-params.js';\nimport {selectContext} from '../../features/context/context-selector.js';\nimport {\n setAnswerContentFormat,\n setCannotAnswer,\n updateCitations,\n updateMessage,\n} from '../../features/generated-answer/generated-answer-actions.js';\nimport {logGeneratedAnswerStreamEnd} from '../../features/generated-answer/generated-answer-analytics-actions.js';\nimport {selectFieldsToIncludeInCitation} from '../../features/generated-answer/generated-answer-selectors.js';\nimport type {GeneratedContentFormat} from '../../features/generated-answer/generated-response-format.js';\nimport {maximumNumberOfResultsFromIndex} from '../../features/pagination/pagination-constants.js';\nimport {selectPipeline} from '../../features/pipeline/select-pipeline.js';\nimport {selectQuery} from '../../features/query/query-selectors.js';\nimport {\n initialSearchMappings,\n mapFacetRequest,\n} from '../../features/search/search-mappings.js';\nimport {selectSearchActionCause} from '../../features/search/search-selectors.js';\nimport {selectSearchHub} from '../../features/search-hub/search-hub-selectors.js';\nimport {selectStaticFilterExpressions} from '../../features/static-filter-set/static-filter-set-selectors.js';\nimport {\n selectActiveTab,\n selectActiveTabExpression,\n} from '../../features/tab-set/tab-set-selectors.js';\nimport type {SearchAppState} from '../../state/search-app-state.js';\nimport type {\n ConfigurationSection,\n GeneratedAnswerSection,\n InsightConfigurationSection,\n TabSection,\n} from '../../state/state-sections.js';\nimport {getFacets} from '../../utils/facet-utils.js';\nimport {fetchEventSource} from '../../utils/fetch-event-source/fetch.js';\nimport type {EventSourceMessage} from '../../utils/fetch-event-source/parse.js';\nimport type {GeneratedAnswerCitation} from '../generated-answer/generated-answer-event-payload.js';\nimport {getOrganizationEndpoint} from '../platform-client.js';\nimport type {SearchRequest} from '../search/search/search-request.js';\nimport {answerSlice} from './answer-slice.js';\n\nexport type StateNeededByAnswerAPI = {\n searchHub: string;\n pipeline: string;\n answer: ReturnType<typeof answerApi.reducer>;\n} & ConfigurationSection &\n Partial<SearchAppState> &\n Partial<InsightConfigurationSection> &\n GeneratedAnswerSection &\n Partial<TabSection>;\n\nexport interface GeneratedAnswerStream {\n answerId?: string;\n contentFormat?: GeneratedContentFormat;\n answer?: string;\n citations?: GeneratedAnswerCitation[];\n generated?: boolean;\n isStreaming: boolean;\n isLoading: boolean;\n error?: {message: string; code: number};\n}\n\ninterface StreamPayload\n extends Pick<GeneratedAnswerStream, 'contentFormat' | 'citations'> {\n textDelta?: string;\n padding?: string;\n answerGenerated?: boolean;\n}\n\ntype PayloadType =\n | 'genqa.headerMessageType'\n | 'genqa.messageType'\n | 'genqa.citationsType'\n | 'genqa.endOfStreamType';\n\nconst handleHeaderMessage = (\n draft: GeneratedAnswerStream,\n payload: Pick<GeneratedAnswerStream, 'contentFormat'>\n) => {\n const {contentFormat} = payload;\n draft.contentFormat = contentFormat;\n draft.isStreaming = true;\n draft.isLoading = false;\n};\n\nconst handleMessage = (\n draft: GeneratedAnswerStream,\n payload: Pick<StreamPayload, 'textDelta'>\n) => {\n if (draft.answer === undefined) {\n draft.answer = payload.textDelta;\n } else if (typeof payload.textDelta === 'string') {\n draft.answer = draft.answer.concat(payload.textDelta);\n }\n};\n\nconst handleCitations = (\n draft: GeneratedAnswerStream,\n payload: Pick<StreamPayload, 'citations'>\n) => {\n draft.citations = payload.citations;\n};\n\nconst handleEndOfStream = (\n draft: GeneratedAnswerStream,\n payload: Pick<StreamPayload, 'answerGenerated'>\n) => {\n draft.generated = payload.answerGenerated;\n draft.isStreaming = false;\n};\n\ninterface MessageType {\n payloadType: PayloadType;\n payload: string;\n finishReason?: string;\n errorMessage?: string;\n code?: number;\n}\n\nconst handleError = (\n draft: GeneratedAnswerStream,\n message: Required<MessageType>\n) => {\n draft.error = {\n message: message.errorMessage,\n code: message.code!,\n };\n draft.isStreaming = false;\n draft.isLoading = false;\n // Throwing an error here breaks the client and prevents the error from reaching the state.\n console.error(`${message.errorMessage} - code ${message.code}`);\n};\n\nexport const updateCacheWithEvent = (\n event: EventSourceMessage,\n draft: GeneratedAnswerStream,\n dispatch: ThunkDispatch<StateNeededByAnswerAPI, unknown, UnknownAction>\n) => {\n const message: Required<MessageType> = JSON.parse(event.data);\n if (message.finishReason === 'ERROR' && message.errorMessage) {\n handleError(draft, message);\n }\n\n const parsedPayload: StreamPayload = message.payload.length\n ? JSON.parse(message.payload)\n : {};\n\n switch (message.payloadType) {\n case 'genqa.headerMessageType':\n if (parsedPayload.contentFormat) {\n handleHeaderMessage(draft, parsedPayload);\n dispatch(setAnswerContentFormat(parsedPayload.contentFormat));\n }\n break;\n case 'genqa.messageType':\n if (parsedPayload.textDelta) {\n handleMessage(draft, parsedPayload);\n dispatch(updateMessage({textDelta: parsedPayload.textDelta}));\n }\n break;\n case 'genqa.citationsType':\n if (parsedPayload.citations) {\n handleCitations(draft, parsedPayload);\n dispatch(updateCitations({citations: parsedPayload.citations}));\n }\n break;\n case 'genqa.endOfStreamType':\n handleEndOfStream(draft, parsedPayload);\n dispatch(\n logGeneratedAnswerStreamEnd(parsedPayload.answerGenerated ?? false)\n );\n break;\n }\n};\n\nexport const answerApi = answerSlice.injectEndpoints({\n overrideExisting: true,\n endpoints: (builder) => ({\n getAnswer: builder.query<GeneratedAnswerStream, Partial<SearchRequest>>({\n queryFn: () => ({\n data: {\n contentFormat: undefined,\n answer: undefined,\n citations: undefined,\n error: undefined,\n generated: false,\n isStreaming: true,\n isLoading: true,\n },\n }),\n serializeQueryArgs: ({endpointName, queryArgs}) => {\n // RTK Query serialize our endpoints and they're serialized state arguments as the key in the store.\n // Keys must match, because if anything in the query changes, it's not the same query anymore.\n // Analytics data is excluded entirely as it contains volatile fields that change during streaming.\n const {analytics: _analytics, ...queryArgsWithoutAnalytics} = queryArgs;\n\n // Standard RTK key, with analytics excluded\n return `${endpointName}(${JSON.stringify(queryArgsWithoutAnalytics)})`;\n },\n async onCacheEntryAdded(\n args,\n {getState, cacheDataLoaded, updateCachedData, dispatch}\n ) {\n await cacheDataLoaded;\n /**\n * createApi has to be called prior to creating the redux store and is used as part of the store setup sequence.\n * It cannot use the inferred state used by Redux, thus the casting.\n * https://redux-toolkit.js.org/rtk-query/usage-with-typescript#typing-dispatch-and-getstate\n */\n const {configuration, generatedAnswer, insightConfiguration} =\n getState() as unknown as StateNeededByAnswerAPI;\n const {organizationId, environment, accessToken} = configuration;\n const platformEndpoint = getOrganizationEndpoint(\n organizationId,\n environment\n );\n const insightGenerateEndpoint = `${platformEndpoint}/rest/organizations/${organizationId}/insight/v1/configs/${insightConfiguration?.insightId}/answer/${generatedAnswer.answerConfigurationId}/generate`;\n const generateEndpoint = `${platformEndpoint}/rest/organizations/${organizationId}/answer/v1/configs/${generatedAnswer.answerConfigurationId}/generate`;\n await fetchEventSource(\n insightConfiguration ? insightGenerateEndpoint : generateEndpoint,\n {\n method: 'POST',\n body: JSON.stringify(args),\n headers: {\n Authorization: `Bearer ${accessToken}`,\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'Accept-Encoding': '*',\n },\n fetch,\n onopen: async (res) => {\n const answerId = res.headers.get('x-answer-id');\n if (answerId) {\n updateCachedData((draft) => {\n draft.answerId = answerId;\n });\n }\n },\n onmessage: (event) => {\n updateCachedData((draft) => {\n updateCacheWithEvent(event, draft, dispatch);\n });\n },\n onerror: (error) => {\n throw error;\n },\n onclose: () => {\n updateCachedData((draft) => {\n dispatch(setCannotAnswer(!draft.generated));\n });\n },\n }\n );\n },\n }),\n }),\n});\n\nexport const selectAnswerTriggerParams = createSelector(\n (state) => selectQuery(state)?.q,\n (state) => state.search.requestId,\n (state) => state.generatedAnswer.cannotAnswer,\n (state) => state.configuration.analytics.analyticsMode,\n (state) => state.search.searchAction?.actionCause,\n (q, requestId, cannotAnswer, analyticsMode, actionCause) => ({\n q,\n requestId,\n cannotAnswer,\n analyticsMode,\n actionCause,\n })\n);\n\nlet generateFacetParams: Record<string, ReturnType<typeof getFacets>> = {};\n\nconst getGeneratedFacetParams = (q: string, state: StateNeededByAnswerAPI) => ({\n ...generateFacetParams,\n [q]: getFacets(state)\n ?.map((facetRequest) =>\n mapFacetRequest(facetRequest, initialSearchMappings())\n )\n .sort((a, b) =>\n a.facetId > b.facetId ? 1 : b.facetId > a.facetId ? -1 : 0\n ),\n});\n\nconst getNumberOfResultsWithinIndexLimit = (state: StateNeededByAnswerAPI) => {\n if (!state.pagination) {\n return undefined;\n }\n\n const isOverIndexLimit =\n state.pagination.firstResult + state.pagination.numberOfResults >\n maximumNumberOfResultsFromIndex;\n\n if (isOverIndexLimit) {\n return maximumNumberOfResultsFromIndex - state.pagination.firstResult;\n }\n return state.pagination.numberOfResults;\n};\n\nconst buildAdvancedSearchQueryParams = (state: StateNeededByAnswerAPI) => {\n const advancedSearchQueryParams = selectAdvancedSearchQueries(state);\n const mergedCq = mergeAdvancedCQParams(state);\n\n return {\n ...advancedSearchQueryParams,\n ...(mergedCq && {cq: mergedCq}),\n };\n};\n\nconst mergeAdvancedCQParams = (state: StateNeededByAnswerAPI) => {\n const activeTabExpression = selectActiveTabExpression(state.tabSet);\n const filterExpressions = selectStaticFilterExpressions(state);\n const {cq} = selectAdvancedSearchQueries(state);\n\n return [activeTabExpression, ...filterExpressions, cq]\n .filter((expression) => !!expression)\n .join(' AND ');\n};\n\nexport const constructAnswerQueryParams = (\n state: StateNeededByAnswerAPI,\n usage: 'fetch' | 'select',\n navigatorContext: NavigatorContext\n) => {\n const q = selectQuery(state)?.q;\n\n const {aq, cq, dq, lq} = buildAdvancedSearchQueryParams(state);\n\n const context = selectContext(state);\n\n // For 'select' usage, exclude volatile analytics fields to match serializeQueryArgs behavior\n const analyticsParams =\n usage === 'select'\n ? {}\n : fromAnalyticsStateToAnalyticsParams(\n state.configuration.analytics,\n navigatorContext,\n {actionCause: selectSearchActionCause(state)}\n );\n\n const searchHub = selectSearchHub(state);\n const pipeline = selectPipeline(state);\n const citationsFieldToInclude = selectFieldsToIncludeInCitation(state) ?? [];\n\n if (q && usage === 'fetch') {\n generateFacetParams = getGeneratedFacetParams(q, state);\n }\n\n return {\n q,\n ...(aq && {aq}),\n ...(cq && {cq}),\n ...(dq && {dq}),\n ...(lq && {lq}),\n ...(state.query && {enableQuerySyntax: state.query.enableQuerySyntax}),\n ...(context?.contextValues && {\n context: context.contextValues,\n }),\n pipelineRuleParameters: {\n mlGenerativeQuestionAnswering: {\n responseFormat: state.generatedAnswer.responseFormat,\n citationsFieldToInclude,\n },\n },\n ...(searchHub?.length && {searchHub}),\n ...(pipeline?.length && {pipeline}),\n ...(generateFacetParams[q!]?.length && {\n facets: generateFacetParams[q!],\n }),\n ...(state.fields && {fieldsToInclude: state.fields.fieldsToInclude}),\n ...(state.didYouMean && {\n queryCorrection: {\n enabled:\n state.didYouMean.enableDidYouMean &&\n state.didYouMean.queryCorrectionMode === 'next',\n options: {\n automaticallyCorrect: state.didYouMean.automaticallyCorrectQuery\n ? ('whenNoResults' as const)\n : ('never' as const),\n },\n },\n enableDidYouMean:\n state.didYouMean.enableDidYouMean &&\n state.didYouMean.queryCorrectionMode === 'legacy',\n }),\n ...(state.pagination && {\n numberOfResults: getNumberOfResultsWithinIndexLimit(state),\n firstResult: state.pagination.firstResult,\n }),\n tab: selectActiveTab(state.tabSet),\n ...analyticsParams,\n };\n};\n\nexport const fetchAnswer = (\n state: StateNeededByAnswerAPI,\n navigatorContext: NavigatorContext\n) =>\n answerApi.endpoints.getAnswer.initiate(\n constructAnswerQueryParams(state, 'fetch', navigatorContext)\n );\n\nexport const selectAnswer = (\n state: StateNeededByAnswerAPI,\n navigatorContext?: NavigatorContext\n) =>\n answerApi.endpoints.getAnswer.select(\n constructAnswerQueryParams(\n state,\n 'select',\n navigatorContext || defaultNodeJSNavigatorContextProvider()\n )\n )(state);\n", "import type {Relay} from '@coveo/relay';\n\n/**\n * The `NavigatorContext` interface represents the context of the browser client.\n */\nexport interface NavigatorContext {\n /**\n * The`X-Forwarded-For` header.\n * This header is used to identify the originating IP address of a client.\n * See [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For)\n *\n * **Note:** This property is only relevant for Server-Side Rendering (SSR) use cases.\n */\n forwardedFor?: string;\n /**\n * The URL of the page that referred the user to the current page.\n * See [Referer](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer)\n */\n referrer: string | null;\n /**\n * The user agent string of the browser that made the request.\n * See [User-Agent](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent)\n */\n userAgent: string | null;\n /**\n * The URL of the current page.\n */\n location: string | null;\n /** The unique identifier of the browser client in a Coveo-powered page.\n * See [clientId](https://docs.coveo.com/en/masb0234).\n */\n clientId: string;\n /**\n * Whether to capture analytics events.\n *\n * Must be left undefined or set to `false` if the `clientId` is an empty string, otherwise requests will fail.\n */\n capture?: boolean;\n}\n\nexport type NavigatorContextProvider = () => NavigatorContext;\nexport type BrowserNavigatorContextProvider = (\n clientId: string\n) => NavigatorContext;\n\nexport const defaultNodeJSNavigatorContextProvider: NavigatorContextProvider =\n () => ({\n referrer: null,\n userAgent: null,\n location: null,\n clientId: '',\n });\n\nexport const getNavigatorContext = (\n relay: Relay,\n customProvider?: NavigatorContextProvider\n): NavigatorContext => {\n const {referrer, userAgent, location, clientId} = relay.getMeta('');\n const customContext = customProvider ? customProvider() : {};\n\n return {...customContext, referrer, userAgent, location, clientId};\n};\n", "import {createSelector} from '@reduxjs/toolkit';\nimport type {AdvancedSearchQueriesState} from './advanced-search-queries-state.js';\n\nexport const selectAdvancedSearchQueries = createSelector(\n (state: {advancedSearchQueries?: AdvancedSearchQueriesState}) =>\n state.advancedSearchQueries,\n (advancedSearchQueries) => {\n if (!advancedSearchQueries) {\n return {};\n }\n const {aq, cq, dq, lq} = advancedSearchQueries;\n return {\n ...(aq && {aq}),\n ...(cq && {cq}),\n ...(dq && {dq}),\n ...(lq && {lq}),\n };\n }\n);\n", "import type {EventDescription} from 'coveo.analytics';\nimport {getAnalyticsSource} from '../../api/analytics/analytics-selectors.js';\nimport type {AnalyticsParam} from '../../api/search/search-api-params.js';\nimport type {NavigatorContext} from '../../app/navigator-context-provider.js';\nimport type {AnalyticsState} from './configuration-state.js';\n\nexport const fromAnalyticsStateToAnalyticsParams = (\n s: AnalyticsState,\n navigatorContext: NavigatorContext,\n eventDescription?: EventDescription\n): AnalyticsParam => {\n return {\n analytics: {\n clientId: navigatorContext.clientId,\n clientTimestamp: new Date().toISOString(),\n documentReferrer: navigatorContext.referrer,\n documentLocation: navigatorContext.location,\n originContext: s.originContext,\n ...(eventDescription && {\n actionCause: eventDescription.actionCause,\n }),\n ...(eventDescription && {\n customData: eventDescription.customData,\n }),\n ...(s.userDisplayName && {userDisplayName: s.userDisplayName}),\n ...(s.deviceId && {deviceId: s.deviceId}),\n ...(s.trackingId && {trackingId: s.trackingId}),\n ...{\n capture: navigatorContext.capture ?? navigatorContext.clientId !== '',\n },\n ...{source: getAnalyticsSource(s)},\n },\n };\n};\n", "import {createSelector} from '@reduxjs/toolkit';\nimport type {ContextState} from './context-state.js';\n\nexport const selectContext = createSelector(\n (state: {context?: ContextState}) => state.context,\n (context) => context\n);\n", "import {\n ArrayValue,\n BooleanValue,\n NumberValue,\n RecordValue,\n StringValue,\n} from '@coveo/bueno';\nimport {createAction, createAsyncThunk} from '@reduxjs/toolkit';\nimport type {AsyncThunkGeneratedAnswerOptions} from '../../api/generated-answer/generated-answer-client.js';\nimport type {\n GeneratedAnswerCitationsPayload,\n GeneratedAnswerEndOfStreamPayload,\n GeneratedAnswerHeaderMessagePayload,\n GeneratedAnswerMessagePayload,\n GeneratedAnswerPayloadType,\n GeneratedAnswerStreamEventData,\n} from '../../api/generated-answer/generated-answer-event-payload.js';\nimport type {GeneratedAnswerStreamRequest} from '../../api/generated-answer/generated-answer-request.js';\nimport type {\n ConfigurationSection,\n DebugSection,\n GeneratedAnswerSection,\n SearchSection,\n} from '../../state/state-sections.js';\nimport {\n nonEmptyStringArray,\n validatePayload,\n} from '../../utils/validate-payload.js';\nimport {logGeneratedAnswerStreamEnd} from './generated-answer-analytics-actions.js';\nimport {buildStreamingRequest} from './generated-answer-request.js';\nimport {\n type GeneratedContentFormat,\n type GeneratedResponseFormat,\n generatedContentFormat,\n} from './generated-response-format.js';\n\ntype StateNeededByGeneratedAnswerStream = ConfigurationSection &\n SearchSection &\n GeneratedAnswerSection &\n DebugSection;\n\nconst stringValue = new StringValue({required: true});\nconst optionalStringValue = new StringValue();\nconst booleanValue = new BooleanValue({required: true});\nconst citationSchema = {\n id: stringValue,\n title: stringValue,\n uri: stringValue,\n permanentid: stringValue,\n clickUri: optionalStringValue,\n};\n\nconst answerContentFormatSchema = new StringValue<GeneratedContentFormat>({\n required: true,\n constrainTo: generatedContentFormat,\n});\n\nexport interface GeneratedAnswerErrorPayload {\n message?: string;\n code?: number;\n}\n\nexport const setIsVisible = createAction(\n 'generatedAnswer/setIsVisible',\n (payload: boolean) => validatePayload(payload, booleanValue)\n);\n\nexport const setIsEnabled = createAction(\n 'generatedAnswer/setIsEnabled',\n (payload: boolean) => validatePayload(payload, booleanValue)\n);\n\nexport const updateMessage = createAction(\n 'generatedAnswer/updateMessage',\n (payload: GeneratedAnswerMessagePayload) =>\n validatePayload(payload, {\n textDelta: stringValue,\n })\n);\n\nexport const updateCitations = createAction(\n 'generatedAnswer/updateCitations',\n (payload: GeneratedAnswerCitationsPayload) =>\n validatePayload(payload, {\n citations: new ArrayValue({\n required: true,\n each: new RecordValue({\n values: citationSchema,\n }),\n }),\n })\n);\n\nexport const updateError = createAction(\n 'generatedAnswer/updateError',\n (payload: GeneratedAnswerErrorPayload) =>\n validatePayload(payload, {\n message: optionalStringValue,\n code: new NumberValue({min: 0}),\n })\n);\n\nexport const resetAnswer = createAction('generatedAnswer/resetAnswer');\n\nexport const likeGeneratedAnswer = createAction('generatedAnswer/like');\n\nexport const dislikeGeneratedAnswer = createAction('generatedAnswer/dislike');\n\nexport const openGeneratedAnswerFeedbackModal = createAction(\n 'generatedAnswer/feedbackModal/open'\n);\n\nexport const expandGeneratedAnswer = createAction('generatedAnswer/expand');\n\nexport const collapseGeneratedAnswer = createAction('generatedAnswer/collapse');\n\nexport const setId = createAction(\n 'generatedAnswer/setId',\n (payload: {id: string}) =>\n validatePayload(payload, {\n id: new StringValue({\n required: true,\n }),\n })\n);\n\nexport const closeGeneratedAnswerFeedbackModal = createAction(\n 'generatedAnswer/feedbackModal/close'\n);\n\nexport const sendGeneratedAnswerFeedback = createAction(\n 'generatedAnswer/sendFeedback'\n);\n\nexport const setIsLoading = createAction(\n 'generatedAnswer/setIsLoading',\n (payload: boolean) => validatePayload(payload, booleanValue)\n);\n\nexport const setIsStreaming = createAction(\n 'generatedAnswer/setIsStreaming',\n (payload: boolean) => validatePayload(payload, booleanValue)\n);\n\nexport const setAnswerContentFormat = createAction(\n 'generatedAnswer/setAnswerContentFormat',\n (payload: GeneratedContentFormat) =>\n validatePayload(payload, answerContentFormatSchema)\n);\n\nexport const updateResponseFormat = createAction(\n 'generatedAnswer/updateResponseFormat',\n (payload: GeneratedResponseFormat) =>\n validatePayload(payload, {\n contentFormat: new ArrayValue<GeneratedContentFormat>({\n each: answerContentFormatSchema,\n default: ['text/plain'],\n }),\n })\n);\n\nexport const updateAnswerConfigurationId = createAction(\n 'knowledge/updateAnswerConfigurationId',\n (payload: string) => validatePayload(payload, stringValue)\n);\n\nexport const registerFieldsToIncludeInCitations = createAction(\n 'generatedAnswer/registerFieldsToIncludeInCitations',\n (payload: string[]) => validatePayload<string[]>(payload, nonEmptyStringArray)\n);\n\nexport const setIsAnswerGenerated = createAction(\n 'generatedAnswer/setIsAnswerGenerated',\n (payload: boolean) => validatePayload(payload, booleanValue)\n);\n\nexport const setCannotAnswer = createAction(\n 'generatedAnswer/setCannotAnswer',\n (payload: boolean) => validatePayload(payload, booleanValue)\n);\n\ninterface StreamAnswerArgs {\n setAbortControllerRef: (ref: AbortController) => void;\n}\n\nexport const streamAnswer = createAsyncThunk<\n void,\n StreamAnswerArgs,\n AsyncThunkGeneratedAnswerOptions<StateNeededByGeneratedAnswerStream>\n>('generatedAnswer/streamAnswer', async (params, config) => {\n const state = config.getState();\n const {dispatch, extra, getState} = config;\n const {search} = getState();\n const {queryExecuted} = search;\n\n const {setAbortControllerRef} = params;\n\n const request = await buildStreamingRequest(state);\n\n const handleStreamPayload = (\n payloadType: GeneratedAnswerPayloadType,\n payload: string\n ) => {\n switch (payloadType) {\n case 'genqa.headerMessageType': {\n const header = JSON.parse(\n payload\n ) as GeneratedAnswerHeaderMessagePayload;\n dispatch(setAnswerContentFormat(header.contentFormat));\n break;\n }\n case 'genqa.messageType':\n dispatch(\n updateMessage(JSON.parse(payload) as GeneratedAnswerMessagePayload)\n );\n break;\n case 'genqa.citationsType':\n dispatch(\n updateCitations(\n JSON.parse(payload) as GeneratedAnswerCitationsPayload\n )\n );\n break;\n case 'genqa.endOfStreamType': {\n const isAnswerGenerated = (\n JSON.parse(payload) as GeneratedAnswerEndOfStreamPayload\n ).answerGenerated;\n const cannotAnswer = queryExecuted.length !== 0 && !isAnswerGenerated;\n\n dispatch(setCannotAnswer(cannotAnswer));\n dispatch(setIsStreaming(false));\n dispatch(setIsAnswerGenerated(isAnswerGenerated));\n dispatch(logGeneratedAnswerStreamEnd(isAnswerGenerated));\n break;\n }\n default:\n if (state.debug) {\n extra.logger.warn(`Unknown payloadType: \"${payloadType}\"`);\n }\n }\n };\n\n dispatch(setIsLoading(true));\n\n const currentStreamRequestMatchesOriginalStreamRequest = (\n request: GeneratedAnswerStreamRequest\n ) => {\n return (\n request.streamId ===\n config.getState().search.extendedResults.generativeQuestionAnsweringId\n );\n };\n const abortController = extra.streamingClient?.streamGeneratedAnswer(\n request,\n {\n write: (data: GeneratedAnswerStreamEventData) => {\n if (currentStreamRequestMatchesOriginalStreamRequest(request)) {\n dispatch(setIsLoading(false));\n if (data.payload && data.payloadType) {\n handleStreamPayload(data.payloadType, data.payload);\n }\n }\n },\n abort: (error: GeneratedAnswerErrorPayload) => {\n if (currentStreamRequestMatchesOriginalStreamRequest(request)) {\n dispatch(updateError(error));\n }\n },\n close: () => {\n if (currentStreamRequestMatchesOriginalStreamRequest(request)) {\n dispatch(setIsStreaming(false));\n }\n },\n resetAnswer: () => {\n if (currentStreamRequestMatchesOriginalStreamRequest(request)) {\n dispatch(resetAnswer());\n }\n },\n }\n );\n if (abortController) {\n setAbortControllerRef(abortController);\n } else {\n dispatch(setIsLoading(false));\n }\n});\n", "import type {Rga} from '@coveo/relay-event-types';\nimport {\n type CustomAction,\n citationDocumentIdentifier,\n type LegacySearchAction,\n makeAnalyticsAction,\n partialCitationInformation,\n} from '../analytics/analytics-utils.js';\nimport {SearchPageEvents} from '../analytics/search-action-cause.js';\nimport type {SearchAction} from '../search/search-actions.js';\nimport {\n citationSourceSelector,\n generativeQuestionAnsweringIdSelector,\n} from './generated-answer-selectors.js';\n\nexport type GeneratedAnswerFeedbackOption = 'yes' | 'unknown' | 'no';\n\nexport type GeneratedAnswerFeedback = {\n helpful: boolean;\n documented: GeneratedAnswerFeedbackOption;\n correctTopic: GeneratedAnswerFeedbackOption;\n hallucinationFree: GeneratedAnswerFeedbackOption;\n readable: GeneratedAnswerFeedbackOption;\n details?: string;\n documentUrl?: string;\n};\n\nexport const parseEvaluationDetails = (\n detail: 'yes' | 'no' | 'unknown'\n): boolean | undefined => {\n if (detail === 'yes') {\n return true;\n }\n if (detail === 'no') {\n return false;\n }\n return undefined;\n};\n\n//TODO: KIT-2859\nexport const logRetryGeneratedAnswer = (): LegacySearchAction =>\n makeAnalyticsAction('analytics/generatedAnswer/retry', (client) =>\n client.makeRetryGeneratedAnswer()\n );\n\nexport const logOpenGeneratedAnswerSource = (\n citationId: string\n): CustomAction =>\n makeAnalyticsAction({\n prefix: 'analytics/generatedAnswer/openAnswerSource',\n __legacy__getBuilder: (client, state) => {\n const {id: rgaID, answerAPIEnabled} =\n generativeQuestionAnsweringIdSelector(state);\n const citation = citationSourceSelector(state, citationId);\n if (!rgaID || !citation) {\n return null;\n }\n\n return client.makeGeneratedAnswerCitationClick(\n partialCitationInformation(citation, state),\n {\n ...(answerAPIEnabled\n ? {answerAPIStreamId: rgaID}\n : {generativeQuestionAnsweringId: rgaID}),\n citationId: citation.id,\n documentId: citationDocumentIdentifier(citation),\n }\n );\n },\n analyticsType: 'Rga.CitationClick',\n analyticsPayloadBuilder: (state): Rga.CitationClick | undefined => {\n const citation = citationSourceSelector(state, citationId);\n return {\n answerId: state.search?.response.searchUid || '',\n citationId,\n itemMetadata: {\n uniqueFieldName: 'permanentid',\n uniqueFieldValue: citation?.permanentid ?? '',\n title: citation?.title,\n url: citation?.clickUri,\n },\n };\n },\n });\n\nexport const logHoverCitation = (\n citationId: string,\n citationHoverTimeInMs: number\n): CustomAction =>\n makeAnalyticsAction({\n prefix: 'analytics/generatedAnswer/hoverCitation',\n __legacy__getBuilder: (client, state) => {\n const {id: rgaID, answerAPIEnabled} =\n generativeQuestionAnsweringIdSelector(state);\n const citation = citationSourceSelector(state, citationId);\n\n if (!rgaID || !citation) {\n return null;\n }\n return client.makeGeneratedAnswerSourceHover({\n ...(answerAPIEnabled\n ? {answerAPIStreamId: rgaID}\n : {generativeQuestionAnsweringId: rgaID}),\n permanentId: citation.permanentid,\n citationId: citation.id,\n citationHoverTimeMs: citationHoverTimeInMs,\n });\n },\n analyticsType: 'Rga.CitationHover',\n analyticsPayloadBuilder: (state): Rga.CitationHover | undefined => {\n const citation = citationSourceSelector(state, citationId);\n return {\n answerId: state.search?.response.searchUid || '',\n citationId,\n itemMetadata: {\n uniqueFieldName: 'permanentid',\n uniqueFieldValue: citation?.permanentid ?? '',\n title: citation?.title,\n url: citation?.clickUri,\n },\n citationHoverTimeInMs,\n };\n },\n });\n\nexport const logLikeGeneratedAnswer = (): CustomAction =>\n makeAnalyticsAction({\n prefix: 'analytics/generatedAnswer/like',\n __legacy__getBuilder: (client, state) => {\n const {id: rgaID, answerAPIEnabled} =\n generativeQuestionAnsweringIdSelector(state);\n if (!rgaID) {\n return null;\n }\n return client.makeLikeGeneratedAnswer({\n ...(answerAPIEnabled\n ? {answerAPIStreamId: rgaID}\n : {generativeQuestionAnsweringId: rgaID}),\n });\n },\n analyticsType: 'Rga.AnswerAction',\n analyticsPayloadBuilder: (state): Rga.AnswerAction | undefined => {\n return {\n answerId: state.search?.response.searchUid || '',\n action: 'like',\n };\n },\n });\n\nexport const logDislikeGeneratedAnswer = (): CustomAction =>\n makeAnalyticsAction({\n prefix: 'analytics/generatedAnswer/dislike',\n __legacy__getBuilder: (client, state) => {\n const {id: rgaID, answerAPIEnabled} =\n generativeQuestionAnsweringIdSelector(state);\n if (!rgaID) {\n return null;\n }\n return client.makeDislikeGeneratedAnswer({\n ...(answerAPIEnabled\n ? {answerAPIStreamId: rgaID}\n : {generativeQuestionAnsweringId: rgaID}),\n });\n },\n analyticsType: 'Rga.AnswerAction',\n analyticsPayloadBuilder: (state): Rga.AnswerAction | undefined => {\n return {\n answerId: state.search?.response.searchUid || '',\n action: 'dislike',\n };\n },\n });\n\nexport const logGeneratedAnswerFeedback = (\n feedback: GeneratedAnswerFeedback\n): CustomAction =>\n makeAnalyticsAction({\n prefix: 'analytics/generatedAnswer/sendFeedback',\n __legacy__getBuilder: (client, state) => {\n const {id: rgaID, answerAPIEnabled} =\n generativeQuestionAnsweringIdSelector(state);\n if (!rgaID) {\n return null;\n }\n return client.makeGeneratedAnswerFeedbackSubmitV2({\n ...(answerAPIEnabled\n ? {answerAPIStreamId: rgaID}\n : {generativeQuestionAnsweringId: rgaID}),\n ...feedback,\n });\n },\n analyticsType: 'Rga.SubmitFeedback',\n analyticsPayloadBuilder: (state): Rga.SubmitFeedback | undefined => {\n const {\n helpful,\n readable,\n documented,\n hallucinationFree,\n correctTopic,\n documentUrl,\n details,\n } = feedback;\n return {\n answerId: state.search?.response.searchUid || '',\n helpful,\n details: {\n readable: parseEvaluationDetails(readable),\n documented: parseEvaluationDetails(documented),\n correctTopic: parseEvaluationDetails(correctTopic),\n hallucinationFree: parseEvaluationDetails(hallucinationFree),\n },\n additionalNotes: details,\n correctAnswerUrl: documentUrl,\n };\n },\n });\n\n//TODO: SFINT-5435\nexport const logGeneratedAnswerStreamEnd = (\n answerGenerated: boolean\n): CustomAction =>\n makeAnalyticsAction({\n prefix: 'analytics/generatedAnswer/streamEnd',\n __legacy__getBuilder: (client, state) => {\n const {id: rgaID, answerAPIEnabled} =\n generativeQuestionAnsweringIdSelector(state);\n const answerTextIsEmpty = answerGenerated\n ? !state.generatedAnswer?.answer ||\n !state.generatedAnswer?.answer.length\n : undefined;\n if (!rgaID) {\n return null;\n }\n return client.makeGeneratedAnswerStreamEnd({\n ...(answerAPIEnabled\n ? {answerAPIStreamId: rgaID}\n : {generativeQuestionAnsweringId: rgaID}),\n answerGenerated,\n answerTextIsEmpty,\n });\n },\n analyticsType: 'Rga.AnswerReceived',\n analyticsPayloadBuilder: (state): Rga.AnswerReceived | undefined => {\n return {\n answerId: state.search?.response.searchUid || '',\n answerGenerated: answerGenerated ?? false,\n };\n },\n });\n\nexport const logGeneratedAnswerShowAnswers = (): CustomAction =>\n makeAnalyticsAction({\n prefix: 'analytics/generatedAnswer/show',\n __legacy__getBuilder: (client, state) => {\n const {id: rgaID, answerAPIEnabled} =\n generativeQuestionAnsweringIdSelector(state);\n if (!rgaID) {\n return null;\n }\n return client.makeGeneratedAnswerShowAnswers({\n ...(answerAPIEnabled\n ? {answerAPIStreamId: rgaID}\n : {generativeQuestionAnsweringId: rgaID}),\n });\n },\n analyticsType: 'Rga.AnswerAction',\n analyticsPayloadBuilder: (state): Rga.AnswerAction | undefined => {\n return {\n answerId: state.search?.response.searchUid || '',\n action: 'show',\n };\n },\n });\n\nexport const logGeneratedAnswerHideAnswers = (): CustomAction =>\n makeAnalyticsAction({\n prefix: 'analytics/generatedAnswer/hide',\n __legacy__getBuilder: (client, state) => {\n const {id: rgaID, answerAPIEnabled} =\n generativeQuestionAnsweringIdSelector(state);\n if (!rgaID) {\n return null;\n }\n return client.makeGeneratedAnswerHideAnswers({\n ...(answerAPIEnabled\n ? {answerAPIStreamId: rgaID}\n : {generativeQuestionAnsweringId: rgaID}),\n });\n },\n analyticsType: 'Rga.AnswerAction',\n analyticsPayloadBuilder: (state): Rga.AnswerAction | undefined => {\n return {\n answerId: state.search?.response.searchUid || '',\n action: 'hide',\n };\n },\n });\n\nexport const logGeneratedAnswerExpand = (): CustomAction =>\n makeAnalyticsAction({\n prefix: 'analytics/generatedAnswer/expand',\n __legacy__getBuilder: (client, state) => {\n const {id: rgaID, answerAPIEnabled} =\n generativeQuestionAnsweringIdSelector(state);\n if (!rgaID) {\n return null;\n }\n return client.makeGeneratedAnswerExpand({\n ...(answerAPIEnabled\n ? {answerAPIStreamId: rgaID}\n : {generativeQuestionAnsweringId: rgaID}),\n });\n },\n analyticsType: 'Rga.AnswerAction',\n analyticsPayloadBuilder: (state): Rga.AnswerAction | undefined => {\n return {\n answerId: state.search?.response.searchUid || '',\n action: 'expand',\n };\n },\n });\n\nexport const logGeneratedAnswerCollapse = (): CustomAction =>\n makeAnalyticsAction({\n prefix: 'analytics/generatedAnswer/collapse',\n __legacy__getBuilder: (client, state) => {\n const {id: rgaID, answerAPIEnabled} =\n generativeQuestionAnsweringIdSelector(state);\n if (!rgaID) {\n return null;\n }\n return client.makeGeneratedAnswerCollapse({\n ...(answerAPIEnabled\n ? {answerAPIStreamId: rgaID}\n : {generativeQuestionAnsweringId: rgaID}),\n });\n },\n analyticsType: 'Rga.AnswerAction',\n analyticsPayloadBuilder: (state): Rga.AnswerAction | undefined => {\n return {\n answerId: state.search?.response.searchUid || '',\n action: 'collapse',\n };\n },\n });\n\nexport const logCopyGeneratedAnswer = (): CustomAction =>\n makeAnalyticsAction({\n prefix: 'analytics/generatedAnswer/copy',\n __legacy__getBuilder: (client, state) => {\n const {id: rgaID, answerAPIEnabled} =\n generativeQuestionAnsweringIdSelector(state);\n if (!rgaID) {\n return null;\n }\n return client.makeGeneratedAnswerCopyToClipboard({\n ...(answerAPIEnabled\n ? {answerAPIStreamId: rgaID}\n : {generativeQuestionAnsweringId: rgaID}),\n });\n },\n analyticsType: 'Rga.AnswerAction',\n analyticsPayloadBuilder: (state): Rga.AnswerAction | undefined => {\n return {\n answerId: state.search?.response.searchUid || '',\n action: 'copyToClipboard',\n };\n },\n });\n\nexport const retryGeneratedAnswer = (): SearchAction => ({\n actionCause: SearchPageEvents.retryGeneratedAnswer,\n});\n\nexport const generatedAnswerAnalyticsClient = {\n logCopyGeneratedAnswer,\n logGeneratedAnswerHideAnswers,\n logGeneratedAnswerShowAnswers,\n logGeneratedAnswerStreamEnd,\n logGeneratedAnswerFeedback,\n logDislikeGeneratedAnswer,\n logLikeGeneratedAnswer,\n logHoverCitation,\n logOpenGeneratedAnswerSource,\n logRetryGeneratedAnswer,\n logGeneratedAnswerExpand,\n logGeneratedAnswerCollapse,\n};\n", "/** biome-ignore-all lint/suspicious/noConfusingVoidType: <> */\nimport {\n isNullOrUndefined,\n RecordValue,\n Schema,\n StringValue,\n} from '@coveo/bueno';\nimport type {createRelay} from '@coveo/relay';\nimport type {ItemMetaData} from '@coveo/relay-event-types';\nimport {\n type AsyncThunk,\n type AsyncThunkPayloadCreator,\n createAsyncThunk,\n} from '@reduxjs/toolkit';\nimport type {\n AnalyticsClientSendEventHook,\n CaseAssistClient,\n CoveoInsightClient,\n CoveoSearchPageClient,\n EventBuilder,\n EventDescription,\n SearchPageClientProvider,\n} from 'coveo.analytics';\nimport type {AnalyticsClient} from 'coveo.analytics/dist/definitions/client/analytics.js';\nimport type {SearchEventResponse} from 'coveo.analytics/dist/definitions/events.js';\nimport type {\n DocumentIdentifier,\n PartialDocumentInformation,\n} from 'coveo.analytics/dist/definitions/searchPage/searchPageEvents.js';\nimport type {Logger} from 'pino';\nimport {getRelayInstanceFromState} from '../../api/analytics/analytics-relay-client.js';\nimport {\n CaseAssistAnalyticsProvider,\n configureCaseAssistAnalytics,\n type StateNeededByCaseAssistAnalytics,\n} from '../../api/analytics/case-assist-analytics.js';\nimport {\n configureInsightAnalytics,\n InsightAnalyticsProvider,\n type StateNeededByInsightAnalyticsProvider,\n} from '../../api/analytics/insight-analytics.js';\nimport type {StateNeededByInstantResultsAnalyticsProvider} from '../../api/analytics/instant-result-analytics.js';\nimport {\n configureLegacyAnalytics,\n SearchAnalyticsProvider,\n type StateNeededBySearchAnalyticsProvider,\n} from '../../api/analytics/search-analytics.js';\nimport type {GeneratedAnswerCitation} from '../../api/generated-answer/generated-answer-event-payload.js';\nimport type {PreprocessRequest} from '../../api/preprocess-request.js';\nimport type {Raw} from '../../api/search/search/raw.js';\nimport type {Result} from '../../api/search/search/result.js';\nimport type {ThunkExtraArguments} from '../../app/thunk-extra-arguments.js';\nimport type {RecommendationAppState} from '../../state/recommendation-app-state.js';\nimport type {SearchAppState} from '../../state/search-app-state.js';\nimport type {\n ConfigurationSection,\n PipelineSection,\n} from '../../state/state-sections.js';\nimport {requiredNonEmptyString} from '../../utils/validate-payload.js';\nimport type {ResultWithFolding} from '../folding/folding-slice.js';\nimport {getAllIncludedResultsFrom} from '../folding/folding-utils.js';\nimport {getPipelineInitialState} from '../pipeline/pipeline-state.js';\n\ntype PreparableAnalyticsActionOptions<\n StateNeeded extends ConfigurationSection,\n> = {\n analyticsClientMiddleware: AnalyticsClientSendEventHook;\n preprocessRequest: PreprocessRequest | undefined;\n logger: Logger;\n getState(): StateNeeded;\n};\n\nexport type AnalyticsAsyncThunk<\n StateNeeded extends\n ConfigurationSection = StateNeededBySearchAnalyticsProvider,\n> = AsyncThunk<void, void, AsyncThunkAnalyticsOptions<StateNeeded>>;\n\nexport function makeBasicNewSearchAnalyticsAction(\n actionCause: string,\n getState: () => StateNeededBySearchAnalyticsProvider\n) {\n return {\n ...new SearchAnalyticsProvider(getState).getBaseMetadata(),\n actionCause,\n type: actionCause,\n };\n}\n\ntype PreparedAnalyticsAction<\n StateNeeded extends\n ConfigurationSection = StateNeededBySearchAnalyticsProvider,\n> = {\n description?: EventDescription;\n action: AnalyticsAsyncThunk<StateNeeded>;\n};\n\ntype PrepareAnalyticsFunction<\n StateNeeded extends\n ConfigurationSection = StateNeededBySearchAnalyticsProvider,\n> = (\n options: PreparableAnalyticsActionOptions<StateNeeded>\n) => Promise<PreparedAnalyticsAction<StateNeeded>>;\n\ntype PreparableAnalyticsAction<\n StateNeeded extends\n ConfigurationSection = StateNeededBySearchAnalyticsProvider,\n> = AnalyticsAsyncThunk<StateNeeded> & {\n prepare: PrepareAnalyticsFunction<StateNeeded>;\n};\n\nexport type LegacySearchAction =\n PreparableAnalyticsAction<StateNeededBySearchAnalyticsProvider>;\n\nexport type CustomAction =\n PreparableAnalyticsAction<StateNeededBySearchAnalyticsProvider>;\n\nexport type ClickAction =\n PreparableAnalyticsAction<StateNeededBySearchAnalyticsProvider>;\n\nexport type InstantResultsSearchAction =\n PreparableAnalyticsAction<StateNeededByInstantResultsAnalyticsProvider>;\n\nexport type InstantResultsClickAction =\n PreparableAnalyticsAction<StateNeededByInstantResultsAnalyticsProvider>;\n\nexport type InsightAction =\n PreparableAnalyticsAction<StateNeededByInsightAnalyticsProvider>;\n\nexport type CaseAssistAction =\n PreparableAnalyticsAction<StateNeededByCaseAssistAnalytics>;\n\ntype AsyncThunkAnalyticsOptions<\n T extends StateNeededBySearchAnalyticsProvider,\n> = {\n state: T;\n extra: ThunkExtraArguments;\n};\n\nfunction makeInstantlyCallable<T extends object>(action: T) {\n return Object.assign(action, {instantlyCallable: true}) as T;\n}\n\nfunction makePreparableAnalyticsAction<\n EventType extends void,\n StateNeeded extends ConfigurationSection,\n>(\n prefix: string,\n buildEvent: (\n options: PreparableAnalyticsActionOptions<StateNeeded>\n ) => Promise<{\n log: (\n options: AsyncThunkAnalyticsOptions<StateNeeded>\n ) => Promise<EventType>;\n description?: EventDescription;\n }>\n): PreparableAnalyticsAction<StateNeeded> {\n const createAnalyticsAction = (\n body: AsyncThunkPayloadCreator<\n EventType,\n void,\n AsyncThunkAnalyticsOptions<StateNeeded>\n >\n ) =>\n makeInstantlyCallable(\n createAsyncThunk<\n EventType,\n void,\n AsyncThunkAnalyticsOptions<StateNeeded>\n >(prefix, body) as unknown as AnalyticsAsyncThunk<StateNeeded>\n );\n\n const rootAction = createAnalyticsAction(async (_, {getState, extra}) => {\n const {analyticsClientMiddleware, preprocessRequest, logger} = extra;\n return await (\n await buildEvent({\n getState,\n analyticsClientMiddleware,\n preprocessRequest,\n logger,\n })\n ).log({state: getState(), extra});\n });\n\n const prepare: PrepareAnalyticsFunction<StateNeeded> = async ({\n getState,\n analyticsClientMiddleware,\n preprocessRequest,\n logger,\n }) => {\n const {description, log} = await buildEvent({\n getState,\n analyticsClientMiddleware,\n preprocessRequest,\n logger,\n });\n return {\n description,\n action: createAnalyticsAction(\n async (_, {getState: getNewState, extra: newExtra}) => {\n return await log({state: getNewState(), extra: newExtra});\n }\n ),\n };\n };\n\n Object.assign(rootAction, {\n prepare,\n });\n\n return rootAction as PreparableAnalyticsAction<StateNeeded>;\n}\n\ntype AnalyticsActionOptions<\n LegacyStateNeeded extends StateNeededBySearchAnalyticsProvider,\n StateNeeded extends StateNeededBySearchAnalyticsProvider,\n LegacyGetBuilderType,\n LegacyProvider,\n Client,\n PayloadType,\n> = Omit<\n LegacyAnalyticsOptions<LegacyStateNeeded, Client, LegacyProvider>,\n '__legacy__getBuilder'\n> &\n Partial<NextAnalyticsOptions<StateNeeded, PayloadType>> & {\n __legacy__getBuilder: LegacyGetBuilderType;\n };\n\ninterface NextAnalyticsOptions<\n StateNeeded extends InternalLegacyStateNeeded,\n PayloadType,\n> {\n analyticsType: string;\n analyticsPayloadBuilder: (state: StateNeeded) => PayloadType;\n}\ninterface LegacyAnalyticsOptions<\n StateNeeded extends InternalLegacyStateNeeded,\n Client,\n Provider,\n> {\n prefix: string;\n __legacy__getBuilder: (\n client: Client,\n state: StateNeeded\n ) => Promise<EventBuilder | null> | null;\n __legacy__provider?: (getState: () => StateNeeded) => Provider;\n}\n\ninterface ProviderClass<StateNeeded, LegacyProvider> {\n new (param: () => StateNeeded): LegacyProvider;\n}\n\nconst makeAnalyticsActionFactory = <\n LegacyStateNeededByProvider extends InternalLegacyStateNeeded,\n StateNeededByProvider extends InternalLegacyStateNeeded,\n Client extends CommonClient,\n LegacyProvider extends LegacyProviderCommon,\n LegacyGetBuilderType = LegacyAnalyticsOptions<\n LegacyStateNeededByProvider,\n Client,\n LegacyProvider\n >['__legacy__getBuilder'],\n Configurator extends AnalyticsConfiguratorFromStateNeeded<\n LegacyStateNeededByProvider,\n Client,\n LegacyProvider\n > = AnalyticsConfiguratorFromStateNeeded<\n LegacyStateNeededByProvider,\n Client,\n LegacyProvider\n >,\n>(\n configurator: Configurator,\n legacyGetBuilderConverter: (\n original: LegacyGetBuilderType\n ) => LegacyAnalyticsOptions<\n LegacyStateNeededByProvider,\n Client,\n LegacyProvider\n >['__legacy__getBuilder'],\n providerClass: ProviderClass<LegacyStateNeededByProvider, LegacyProvider>\n) => {\n function makeAnalyticsAction<\n LegacyStateNeeded extends\n LegacyStateNeededByProvider = LegacyStateNeededByProvider,\n ComputedLegacyAnalyticsOptions extends LegacyAnalyticsOptions<\n LegacyStateNeeded,\n Client,\n LegacyProvider\n > = LegacyAnalyticsOptions<LegacyStateNeeded, Client, LegacyProvider>,\n >(\n prefix: string,\n __legacy__getBuilder: LegacyGetBuilderType,\n __legacy__provider?: ComputedLegacyAnalyticsOptions['__legacy__provider']\n ): PreparableAnalyticsAction<LegacyStateNeeded>;\n function makeAnalyticsAction<\n LegacyStateNeeded extends\n LegacyStateNeededByProvider = LegacyStateNeededByProvider,\n StateNeeded extends StateNeededByProvider = StateNeededByProvider,\n PayloadType = {},\n >({\n prefix,\n __legacy__getBuilder,\n __legacy__provider,\n analyticsPayloadBuilder,\n analyticsType,\n }: AnalyticsActionOptions<\n LegacyStateNeeded,\n StateNeeded,\n LegacyGetBuilderType,\n LegacyProvider,\n Client,\n PayloadType\n >): PreparableAnalyticsAction<StateNeeded>;\n function makeAnalyticsAction<\n LegacyStateNeeded extends\n LegacyStateNeededByProvider = LegacyStateNeededByProvider,\n ComputedLegacyAnalyticsOptions extends LegacyAnalyticsOptions<\n LegacyStateNeeded,\n Client,\n LegacyProvider\n > = LegacyAnalyticsOptions<LegacyStateNeeded, Client, LegacyProvider>,\n StateNeeded extends StateNeededByProvider = StateNeededByProvider,\n PayloadType = {},\n >(\n ...params:\n | [\n ComputedLegacyAnalyticsOptions['prefix'],\n LegacyGetBuilderType,\n ComputedLegacyAnalyticsOptions['__legacy__provider']?,\n ]\n | [\n AnalyticsActionOptions<\n LegacyStateNeeded,\n StateNeeded,\n LegacyGetBuilderType,\n LegacyProvider,\n Client,\n PayloadType\n >,\n ]\n ): PreparableAnalyticsAction<LegacyStateNeeded & StateNeeded> {\n const options =\n params.length === 1\n ? {\n ...params[0],\n __legacy__getBuilder: legacyGetBuilderConverter(\n params[0].__legacy__getBuilder\n ),\n analyticsConfigurator: configurator,\n providerClass: providerClass,\n }\n : {\n prefix: params[0],\n __legacy__getBuilder: legacyGetBuilderConverter(params[1]),\n __legacy__provider: params[2],\n analyticsConfigurator: configurator,\n providerClass: providerClass,\n };\n return internalMakeAnalyticsAction(options);\n }\n return makeAnalyticsAction;\n};\n\nconst shouldSendLegacyEvent = (state: ConfigurationSection) =>\n state.configuration.analytics.analyticsMode === 'legacy';\nconst shouldSendNextEvent = (state: ConfigurationSection) =>\n state.configuration.analytics.analyticsMode === 'next';\n\ntype CommonClient = {coveoAnalyticsClient: AnalyticsClient};\n\ntype AnalyticsConfiguratorFromStateNeeded<\n StateNeeded extends InternalLegacyStateNeeded,\n ReturnType extends CommonClient,\n LegacyProvider,\n> = (\n options: AnalyticsConfiguratorOptions<StateNeeded, LegacyProvider>\n) => ReturnType;\ninterface AnalyticsConfiguratorOptions<\n StateNeeded extends InternalLegacyStateNeeded,\n LegacyProvider,\n> {\n logger: Logger;\n analyticsClientMiddleware?: AnalyticsClientSendEventHook;\n preprocessRequest?: PreprocessRequest;\n provider?: LegacyProvider;\n getState(): StateNeeded;\n}\n\ntype InternalMakeAnalyticsActionOptions<\n LegacyStateNeeded extends InternalLegacyStateNeeded,\n StateNeeded extends InternalLegacyStateNeeded,\n PayloadType,\n AnalyticsConfigurator extends AnalyticsConfiguratorFromStateNeeded<\n LegacyStateNeeded,\n Client,\n LegacyProvider\n >,\n Client extends CommonClient,\n LegacyProvider,\n> = LegacyAnalyticsOptions<LegacyStateNeeded, Client, LegacyProvider> &\n Partial<NextAnalyticsOptions<StateNeeded, PayloadType>> & {\n analyticsConfigurator: AnalyticsConfigurator;\n } & {\n providerClass: ProviderClass<LegacyStateNeeded, LegacyProvider>;\n };\n\ntype InternalLegacyStateNeeded =\n | StateNeededBySearchAnalyticsProvider\n | StateNeededByCaseAssistAnalytics;\n\ninterface LegacyProviderCommon {\n getSearchUID: () => string;\n}\n\nconst internalMakeAnalyticsAction = <\n LegacyStateNeeded extends InternalLegacyStateNeeded,\n StateNeeded extends InternalLegacyStateNeeded,\n PayloadType,\n Client extends CommonClient,\n LegacyProvider extends LegacyProviderCommon,\n>({\n prefix,\n __legacy__getBuilder,\n __legacy__provider,\n analyticsPayloadBuilder,\n analyticsType,\n analyticsConfigurator,\n providerClass,\n}: InternalMakeAnalyticsActionOptions<\n LegacyStateNeeded,\n StateNeeded,\n PayloadType,\n AnalyticsConfiguratorFromStateNeeded<\n LegacyStateNeeded,\n Client,\n LegacyProvider\n >,\n Client,\n LegacyProvider\n>): PreparableAnalyticsAction<LegacyStateNeeded & StateNeeded> => {\n __legacy__provider ??= (getState) => new providerClass(getState);\n return makePreparableAnalyticsAction(\n prefix,\n async ({\n getState,\n analyticsClientMiddleware,\n preprocessRequest,\n logger,\n }) => {\n const loggers: ((\n state: LegacyStateNeeded & StateNeeded\n ) => Promise<void>)[] = [];\n const analyticsAction: {\n log: (\n options: AsyncThunkAnalyticsOptions<LegacyStateNeeded & StateNeeded>\n ) => Promise<void>;\n description?: EventDescription;\n } = {\n log: async ({state}) => {\n for (const log of loggers) {\n await log(state);\n }\n },\n };\n const state = getState();\n const client = analyticsConfigurator({\n getState,\n logger,\n analyticsClientMiddleware,\n preprocessRequest,\n provider: __legacy__provider!(getState),\n });\n const builder = await __legacy__getBuilder(client, getState());\n analyticsAction.description = builder?.description;\n loggers.push(async (state: LegacyStateNeeded & StateNeeded) => {\n if (shouldSendLegacyEvent(state)) {\n await logLegacyEvent<LegacyStateNeeded, LegacyProvider>(\n builder,\n __legacy__provider!,\n state,\n logger,\n client.coveoAnalyticsClient\n );\n }\n });\n const {emit} = getRelayInstanceFromState(state);\n loggers.push(async (state: LegacyStateNeeded & StateNeeded) => {\n if (\n shouldSendNextEvent(state) &&\n analyticsType &&\n analyticsPayloadBuilder\n ) {\n const payload = analyticsPayloadBuilder(state);\n await logNextEvent(emit, analyticsType, payload);\n }\n });\n return analyticsAction;\n }\n );\n};\n\nasync function logLegacyEvent<\n StateNeeded extends InternalLegacyStateNeeded,\n Provider extends LegacyProviderCommon,\n>(\n builder: EventBuilder | null,\n __legacy__provider: (getState: () => StateNeeded) => Provider,\n state: StateNeeded,\n logger: Logger,\n client: AnalyticsClient\n) {\n __legacy__provider(() => state);\n const response = await builder?.log({\n searchUID: __legacy__provider!(() => state).getSearchUID(),\n });\n logger.info({client, response}, 'Analytics response');\n}\n\ntype LogFunction<Client, StateNeeded> = (\n client: Client,\n state: StateNeeded\n) => Promise<void | SearchEventResponse> | void | null;\n\nconst fromLogToLegacyBuilderFactory = (actionCause: string) => {\n const fromLogToLegacyBuilder = <Client extends CommonClient, StateNeeded>(\n log: (\n client: Client,\n state: StateNeeded\n ) => Promise<void | SearchEventResponse> | void | null\n ): ((client: Client, state: StateNeeded) => Promise<EventBuilder>) => {\n return (client, state) =>\n Promise.resolve({\n description: {actionCause: actionCause},\n log: async (_metadata: {searchUID: string}) => {\n log(client, state);\n },\n });\n };\n return fromLogToLegacyBuilder;\n};\n\nexport const makeAnalyticsAction = makeAnalyticsActionFactory<\n StateNeededBySearchAnalyticsProvider,\n StateNeededBySearchAnalyticsProvider,\n CoveoSearchPageClient,\n SearchPageClientProvider\n>(configureLegacyAnalytics, (original) => original, SearchAnalyticsProvider);\n\nexport const makeCaseAssistAnalyticsAction = makeAnalyticsActionFactory<\n StateNeededByCaseAssistAnalytics,\n StateNeededByCaseAssistAnalytics,\n CaseAssistClient,\n CaseAssistAnalyticsProvider,\n LogFunction<CaseAssistClient, StateNeededByCaseAssistAnalytics>\n>(\n configureCaseAssistAnalytics,\n fromLogToLegacyBuilderFactory('caseAssist'),\n CaseAssistAnalyticsProvider\n);\n\nexport const makeInsightAnalyticsActionFactory = (actionCause: string) => {\n const makeInsightAnalyticsAction = makeAnalyticsActionFactory<\n StateNeededByInsightAnalyticsProvider,\n StateNeededByInsightAnalyticsProvider,\n CoveoInsightClient,\n InsightAnalyticsProvider,\n LogFunction<CoveoInsightClient, StateNeededByInsightAnalyticsProvider>\n >(\n configureInsightAnalytics,\n fromLogToLegacyBuilderFactory(actionCause),\n InsightAnalyticsProvider\n );\n return makeInsightAnalyticsAction;\n};\n\nexport const partialDocumentInformation = (\n result: Result,\n state: Partial<SearchAppState>\n): PartialDocumentInformation => {\n const paginationBasedIndex = (index: number) =>\n index + (state.pagination?.firstResult ?? 0);\n\n let resultIndex = -1;\n\n const parentResults = state.search?.results as ResultWithFolding[];\n resultIndex = findPositionWithUniqueId(result, parentResults);\n\n if (resultIndex < 0) {\n resultIndex = findPositionInChildResults(result, parentResults);\n }\n\n if (resultIndex < 0) {\n // \u00AF\\_(\u30C4)_/\u00AF\n resultIndex = 0;\n }\n\n return buildPartialDocumentInformation(\n result,\n paginationBasedIndex(resultIndex),\n state\n );\n};\n\nexport const partialRecommendationInformation = (\n result: Result,\n state: Partial<RecommendationAppState>\n): PartialDocumentInformation => {\n const resultIndex =\n state.recommendation?.recommendations.findIndex(\n ({uniqueId}) => result.uniqueId === uniqueId\n ) || 0;\n\n return buildPartialDocumentInformation(result, resultIndex, state);\n};\n\nexport const partialCitationInformation = (\n citation: GeneratedAnswerCitation,\n state: Partial<SearchAppState>\n): PartialDocumentInformation => {\n return {\n sourceName: getCitationSourceName(citation),\n documentPosition: 1,\n documentTitle: citation.title,\n documentUri: citation.uri,\n documentUrl: citation.clickUri,\n queryPipeline: state.pipeline || getPipelineInitialState(),\n };\n};\n\nfunction getCitationSourceName(citation: GeneratedAnswerCitation) {\n const source = citation.source;\n if (isNullOrUndefined(source)) {\n return 'unknown';\n }\n return source;\n}\n\nexport const citationDocumentIdentifier = (\n citation: GeneratedAnswerCitation\n) => {\n return {\n contentIdKey: 'permanentid',\n contentIdValue: citation.permanentid || '',\n };\n};\n\nfunction buildPartialDocumentInformation(\n result: Result,\n resultIndex: number,\n state: Partial<PipelineSection>\n): PartialDocumentInformation {\n const collection = result.raw.collection;\n const collectionName =\n typeof collection === 'string' ? collection : 'default';\n\n return {\n collectionName,\n documentAuthor: getDocumentAuthor(result),\n documentPosition: resultIndex + 1,\n documentTitle: result.title,\n documentUri: result.uri,\n documentUriHash: result.raw.urihash,\n documentUrl: result.clickUri,\n rankingModifier: result.rankingModifier || '',\n sourceName: getSourceName(result),\n queryPipeline: state.pipeline || getPipelineInitialState(),\n };\n}\n\nexport const documentIdentifier = (result: Result): DocumentIdentifier => {\n if (!result.raw.permanentid) {\n console.warn(\n 'Missing field permanentid on result. This might cause many issues with your Coveo deployment. See https://docs.coveo.com/en/1913 and https://docs.coveo.com/en/1640 for more information.',\n result\n );\n }\n return {\n contentIDKey: 'permanentid',\n contentIDValue: result.raw.permanentid || '',\n };\n};\n\nconst rawPartialDefinition = {\n urihash: new StringValue(),\n sourcetype: new StringValue(),\n permanentid: new StringValue(),\n};\n\nexport const resultPartialDefinition = {\n uniqueId: requiredNonEmptyString,\n raw: new RecordValue({values: rawPartialDefinition}),\n title: requiredNonEmptyString,\n uri: requiredNonEmptyString,\n clickUri: requiredNonEmptyString,\n rankingModifier: new StringValue({required: false, emptyAllowed: true}),\n};\n\nfunction partialRawPayload(raw: Raw): Partial<Raw> {\n return Object.assign(\n {},\n ...Object.keys(rawPartialDefinition).map((key) => ({[key]: raw[key]}))\n );\n}\n\nfunction partialResultPayload(result: Result): Partial<Result> {\n return Object.assign(\n {},\n ...Object.keys(resultPartialDefinition).map((key) => ({\n [key]: result[key as keyof typeof resultPartialDefinition],\n })),\n {raw: partialRawPayload(result.raw)}\n );\n}\n\nfunction getDocumentAuthor(result: Result) {\n const author = result.raw.author;\n if (isNullOrUndefined(author)) {\n return 'unknown';\n }\n\n return Array.isArray(author) ? author.join(';') : `${author}`;\n}\n\nfunction getSourceName(result: Result) {\n const source = result.raw.source;\n if (isNullOrUndefined(source)) {\n return 'unknown';\n }\n return source;\n}\n\nexport const validateResultPayload = (result: Result) =>\n new Schema(resultPartialDefinition).validate(partialResultPayload(result));\n\nfunction findPositionInChildResults(\n targetResult: Result,\n parentResults: ResultWithFolding[]\n) {\n for (const [i, parent] of parentResults.entries()) {\n const children = getAllIncludedResultsFrom(parent);\n const childIndex = findPositionWithUniqueId(targetResult, children);\n if (childIndex !== -1) {\n return i;\n }\n }\n\n return -1;\n}\n\nfunction findPositionWithUniqueId(\n targetResult: Result,\n results: ResultWithFolding[] | Result[] = []\n) {\n return results.findIndex(({uniqueId}) => uniqueId === targetResult.uniqueId);\n}\n\nasync function logNextEvent<PayloadType>(\n emitEvent: ReturnType<typeof createRelay>['emit'],\n type: string,\n payload: PayloadType\n): Promise<void> {\n //@ts-expect-error will be fixed when relay updates\n await emitEvent(type, payload);\n return;\n}\n\nexport const analyticsEventItemMetadata = (\n result: Result,\n state: Partial<SearchAppState>\n): ItemMetaData => {\n const identifier = documentIdentifier(result);\n const information = partialDocumentInformation(result, state);\n return {\n uniqueFieldName: identifier.contentIDKey,\n uniqueFieldValue: identifier.contentIDValue,\n title: information.documentTitle,\n author: information.documentAuthor,\n url: information.documentUri,\n };\n};\n", "import {\n type AnalyticsClientSendEventHook,\n CaseAssistClient,\n type CaseAssistClientProvider,\n} from 'coveo.analytics';\nimport type {Logger} from 'pino';\nimport type {\n CaseAssistConfigurationSection,\n CaseFieldSection,\n CaseInputSection,\n ConfigurationSection,\n DocumentSuggestionSection,\n SearchHubSection,\n} from '../../state/state-sections.js';\nimport {getOrganizationEndpoint} from '../platform-client.js';\nimport type {PreprocessRequest} from '../preprocess-request.js';\nimport {BaseAnalyticsProvider} from './base-analytics.js';\nimport {\n wrapAnalyticsClientSendEventHook,\n wrapPreprocessRequest,\n} from './coveo-analytics-utils.js';\n\nexport type StateNeededByCaseAssistAnalytics = ConfigurationSection &\n Partial<CaseAssistConfigurationSection> &\n Partial<SearchHubSection> &\n Partial<CaseFieldSection> &\n Partial<CaseInputSection> &\n Partial<DocumentSuggestionSection>;\n\nexport class CaseAssistAnalyticsProvider\n extends BaseAnalyticsProvider<StateNeededByCaseAssistAnalytics>\n implements CaseAssistClientProvider\n{\n public getSearchUID() {\n return this.state.documentSuggestion?.status.lastResponseId ?? '';\n }\n}\n\ninterface ConfigureCaseAssistAnalyticsOptions {\n getState: () => StateNeededByCaseAssistAnalytics;\n logger: Logger;\n analyticsClientMiddleware?: AnalyticsClientSendEventHook;\n preprocessRequest?: PreprocessRequest;\n provider?: CaseAssistClientProvider;\n}\n\nexport const configureCaseAssistAnalytics = ({\n logger,\n getState,\n analyticsClientMiddleware = (_, p) => p,\n preprocessRequest,\n provider = new CaseAssistAnalyticsProvider(getState),\n}: ConfigureCaseAssistAnalyticsOptions) => {\n const state = getState();\n const token = state.configuration.accessToken;\n const endpoint =\n state.configuration.analytics.apiBaseUrl ??\n getOrganizationEndpoint(\n state.configuration.organizationId,\n state.configuration.environment,\n 'analytics'\n );\n const runtimeEnvironment = state.configuration.analytics.runtimeEnvironment;\n const enableAnalytics = state.configuration.analytics.enabled;\n const client = new CaseAssistClient(\n {\n enableAnalytics,\n token,\n endpoint,\n runtimeEnvironment,\n preprocessRequest: wrapPreprocessRequest(logger, preprocessRequest),\n beforeSendHooks: [\n wrapAnalyticsClientSendEventHook(logger, analyticsClientMiddleware),\n (type, payload) => {\n logger.info(\n {\n ...payload,\n type,\n endpoint,\n token,\n },\n 'Analytics request'\n );\n return payload;\n },\n ],\n },\n provider\n );\n\n if (!enableAnalytics) {\n client.disable();\n }\n return client;\n};\n", "/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\nvar EventType;\n(function (EventType) {\n EventType[\"search\"] = \"search\";\n EventType[\"click\"] = \"click\";\n EventType[\"custom\"] = \"custom\";\n EventType[\"view\"] = \"view\";\n EventType[\"collect\"] = \"collect\";\n})(EventType || (EventType = {}));\n\nfunction hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction hasNavigator() {\n return typeof navigator !== 'undefined';\n}\nfunction hasDocument() {\n return typeof document !== 'undefined';\n}\nfunction hasLocalStorage() {\n try {\n return typeof localStorage !== 'undefined';\n }\n catch (error) {\n return false;\n }\n}\nfunction hasSessionStorage() {\n try {\n return typeof sessionStorage !== 'undefined';\n }\n catch (error) {\n return false;\n }\n}\nfunction hasCookieStorage() {\n return hasNavigator() && navigator.cookieEnabled;\n}\n\nconst eventTypesForDefaultValues = [EventType.click, EventType.custom, EventType.search, EventType.view];\nconst addDefaultValues = (eventType, payload) => {\n return eventTypesForDefaultValues.indexOf(eventType) !== -1\n ? Object.assign({ language: hasDocument() ? document.documentElement.lang : 'unknown', userAgent: hasNavigator() ? navigator.userAgent : 'unknown' }, payload) : payload;\n};\n\nclass Cookie {\n static set(name, value, expire) {\n var domain, expirationDate, domainParts, host;\n if (expire) {\n expirationDate = new Date();\n expirationDate.setTime(expirationDate.getTime() + expire);\n }\n host = window.location.hostname;\n if (host.indexOf('.') === -1) {\n writeCookie(name, value, expirationDate);\n }\n else {\n domainParts = host.split('.');\n domain = domainParts[domainParts.length - 2] + '.' + domainParts[domainParts.length - 1];\n writeCookie(name, value, expirationDate, domain);\n }\n }\n static get(name) {\n var cookiePrefix = name + '=';\n var cookieArray = document.cookie.split(';');\n for (var i = 0; i < cookieArray.length; i++) {\n var cookie = cookieArray[i];\n cookie = cookie.replace(/^\\s+/, '');\n if (cookie.lastIndexOf(cookiePrefix, 0) === 0) {\n return cookie.substring(cookiePrefix.length, cookie.length);\n }\n }\n return null;\n }\n static erase(name) {\n Cookie.set(name, '', -1);\n }\n}\nfunction writeCookie(name, value, expirationDate, domain) {\n document.cookie =\n `${name}=${value}` +\n (expirationDate ? `;expires=${expirationDate.toUTCString()}` : '') +\n (domain ? `;domain=${domain}` : '') +\n ';path=/;SameSite=Lax';\n}\n\nfunction getAvailableStorage() {\n if (hasLocalStorage()) {\n return localStorage;\n }\n if (hasCookieStorage()) {\n return new CookieStorage();\n }\n if (hasSessionStorage()) {\n return sessionStorage;\n }\n return new NullStorage();\n}\nclass CookieStorage {\n getItem(key) {\n return Cookie.get(`${CookieStorage.prefix}${key}`);\n }\n removeItem(key) {\n Cookie.erase(`${CookieStorage.prefix}${key}`);\n }\n setItem(key, data, expire) {\n Cookie.set(`${CookieStorage.prefix}${key}`, data, expire);\n }\n}\nCookieStorage.prefix = 'coveo_';\nclass CookieAndLocalStorage {\n constructor() {\n this.cookieStorage = new CookieStorage();\n }\n getItem(key) {\n return localStorage.getItem(key) || this.cookieStorage.getItem(key);\n }\n removeItem(key) {\n this.cookieStorage.removeItem(key);\n localStorage.removeItem(key);\n }\n setItem(key, data) {\n localStorage.setItem(key, data);\n this.cookieStorage.setItem(key, data, 31556926000);\n }\n}\nclass NullStorage {\n getItem(key) {\n return null;\n }\n removeItem(key) {\n }\n setItem(key, data) {\n }\n}\n\nconst STORE_KEY = '__coveo.analytics.history';\nconst MAX_NUMBER_OF_HISTORY_ELEMENTS = 20;\nconst MIN_THRESHOLD_FOR_DUPLICATE_VALUE = 1000 * 60;\nconst MAX_VALUE_SIZE = 75;\nclass HistoryStore {\n constructor(store) {\n this.store = store || getAvailableStorage();\n }\n addElement(elem) {\n elem.internalTime = new Date().getTime();\n elem = this.cropQueryElement(this.stripEmptyQuery(elem));\n let currentHistory = this.getHistoryWithInternalTime();\n if (currentHistory != null) {\n if (this.isValidEntry(elem)) {\n this.setHistory([elem].concat(currentHistory));\n }\n }\n else {\n this.setHistory([elem]);\n }\n }\n addElementAsync(elem) {\n return __awaiter(this, void 0, void 0, function* () {\n elem.internalTime = new Date().getTime();\n elem = this.cropQueryElement(this.stripEmptyQuery(elem));\n let currentHistory = yield this.getHistoryWithInternalTimeAsync();\n if (currentHistory != null) {\n if (this.isValidEntry(elem)) {\n this.setHistory([elem].concat(currentHistory));\n }\n }\n else {\n this.setHistory([elem]);\n }\n });\n }\n getHistory() {\n const history = this.getHistoryWithInternalTime();\n return this.stripEmptyQueries(this.stripInternalTime(history));\n }\n getHistoryAsync() {\n return __awaiter(this, void 0, void 0, function* () {\n const history = yield this.getHistoryWithInternalTimeAsync();\n return this.stripEmptyQueries(this.stripInternalTime(history));\n });\n }\n getHistoryWithInternalTime() {\n try {\n const elements = this.store.getItem(STORE_KEY);\n if (elements && typeof elements === 'string') {\n return JSON.parse(elements);\n }\n else {\n return [];\n }\n }\n catch (e) {\n return [];\n }\n }\n getHistoryWithInternalTimeAsync() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const elements = yield this.store.getItem(STORE_KEY);\n if (elements) {\n return JSON.parse(elements);\n }\n else {\n return [];\n }\n }\n catch (e) {\n return [];\n }\n });\n }\n setHistory(history) {\n try {\n this.store.setItem(STORE_KEY, JSON.stringify(history.slice(0, MAX_NUMBER_OF_HISTORY_ELEMENTS)));\n }\n catch (e) {\n }\n }\n clear() {\n try {\n this.store.removeItem(STORE_KEY);\n }\n catch (e) {\n }\n }\n getMostRecentElement() {\n let currentHistory = this.getHistoryWithInternalTime();\n if (Array.isArray(currentHistory)) {\n const sorted = currentHistory.sort((first, second) => {\n return (second.internalTime || 0) - (first.internalTime || 0);\n });\n return sorted[0];\n }\n return null;\n }\n cropQueryElement(part) {\n if (part.name && part.value && part.name.toLowerCase() === 'query') {\n part.value = part.value.slice(0, MAX_VALUE_SIZE);\n }\n return part;\n }\n isValidEntry(elem) {\n let lastEntry = this.getMostRecentElement();\n if (lastEntry && lastEntry.value == elem.value) {\n return (elem.internalTime || 0) - (lastEntry.internalTime || 0) > MIN_THRESHOLD_FOR_DUPLICATE_VALUE;\n }\n return true;\n }\n stripInternalTime(history) {\n if (Array.isArray(history)) {\n return history.map((part) => {\n const { name, time, value } = part;\n return { name, time, value };\n });\n }\n return [];\n }\n stripEmptyQuery(part) {\n const { name, time, value } = part;\n if (name && typeof value === 'string' && name.toLowerCase() === 'query' && value.trim() === '') {\n return { name, time };\n }\n return part;\n }\n stripEmptyQueries(history) {\n return history.map((part) => this.stripEmptyQuery(part));\n }\n}\n\nvar history = /*#__PURE__*/Object.freeze({\n __proto__: null,\n HistoryStore: HistoryStore,\n MAX_NUMBER_OF_HISTORY_ELEMENTS: MAX_NUMBER_OF_HISTORY_ELEMENTS,\n MAX_VALUE_SIZE: MAX_VALUE_SIZE,\n MIN_THRESHOLD_FOR_DUPLICATE_VALUE: MIN_THRESHOLD_FOR_DUPLICATE_VALUE,\n STORE_KEY: STORE_KEY,\n default: HistoryStore\n});\n\nconst enhanceViewEvent = (eventType, payload) => __awaiter(void 0, void 0, void 0, function* () {\n if (eventType === EventType.view) {\n yield addPageViewToHistory(payload.contentIdValue);\n return Object.assign({ location: window.location.toString(), referrer: document.referrer, title: document.title }, payload);\n }\n return payload;\n});\nconst addPageViewToHistory = (pageViewValue) => __awaiter(void 0, void 0, void 0, function* () {\n const store = new HistoryStore();\n const historyElement = {\n name: 'PageView',\n value: pageViewValue,\n time: new Date().toISOString(),\n };\n yield store.addElementAsync(historyElement);\n});\n\n// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nfunction rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}\n\nvar REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nfunction unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n const bytes = [];\n\n for (let i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nconst DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nconst URL$1 = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nfunction v35(name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n var _namespace;\n\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {\n throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n } // Compute hash of namespace and value, Per 4.3\n // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n // hashfunc([...namespace, ... value])`\n\n\n let bytes = new Uint8Array(16 + value.length);\n bytes.set(namespace);\n bytes.set(value, namespace.length);\n bytes = hashfunc(bytes);\n bytes[6] = bytes[6] & 0x0f | version;\n bytes[8] = bytes[8] & 0x3f | 0x80;\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(bytes);\n } // Function#name is not settable on some platforms (#270)\n\n\n try {\n generateUUID.name = name; // eslint-disable-next-line no-empty\n } catch (err) {} // For CommonJS default export support\n\n\n generateUUID.DNS = DNS;\n generateUUID.URL = URL$1;\n return generateUUID;\n}\n\nconst randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nvar native = {\n randomUUID\n};\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\n// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n switch (s) {\n case 0:\n return x & y ^ ~x & z;\n\n case 1:\n return x ^ y ^ z;\n\n case 2:\n return x & y ^ x & z ^ y & z;\n\n case 3:\n return x ^ y ^ z;\n }\n}\n\nfunction ROTL(x, n) {\n return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n const msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (let i = 0; i < msg.length; ++i) {\n bytes.push(msg.charCodeAt(i));\n }\n } else if (!Array.isArray(bytes)) {\n // Convert Array-like to Array\n bytes = Array.prototype.slice.call(bytes);\n }\n\n bytes.push(0x80);\n const l = bytes.length / 4 + 2;\n const N = Math.ceil(l / 16);\n const M = new Array(N);\n\n for (let i = 0; i < N; ++i) {\n const arr = new Uint32Array(16);\n\n for (let j = 0; j < 16; ++j) {\n arr[j] = bytes[i * 64 + j * 4] << 24 | bytes[i * 64 + j * 4 + 1] << 16 | bytes[i * 64 + j * 4 + 2] << 8 | bytes[i * 64 + j * 4 + 3];\n }\n\n M[i] = arr;\n }\n\n M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n M[N - 1][14] = Math.floor(M[N - 1][14]);\n M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n for (let i = 0; i < N; ++i) {\n const W = new Uint32Array(80);\n\n for (let t = 0; t < 16; ++t) {\n W[t] = M[i][t];\n }\n\n for (let t = 16; t < 80; ++t) {\n W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n }\n\n let a = H[0];\n let b = H[1];\n let c = H[2];\n let d = H[3];\n let e = H[4];\n\n for (let t = 0; t < 80; ++t) {\n const s = Math.floor(t / 20);\n const T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t] >>> 0;\n e = d;\n d = c;\n c = ROTL(b, 30) >>> 0;\n b = a;\n a = T;\n }\n\n H[0] = H[0] + a >>> 0;\n H[1] = H[1] + b >>> 0;\n H[2] = H[2] + c >>> 0;\n H[3] = H[3] + d >>> 0;\n H[4] = H[4] + e >>> 0;\n }\n\n return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nconst v5 = v35('v5', 0x50, sha1);\nvar uuidv5 = v5;\n\nconst libVersion = \"2.30.45\" ;\n\nconst getFormattedLocation = (location) => `${location.protocol}//${location.hostname}${location.pathname.indexOf('/') === 0 ? location.pathname : `/${location.pathname}`}${location.search}`;\n\nconst BasePluginEventTypes = {\n pageview: 'pageview',\n event: 'event',\n};\nclass Plugin {\n constructor({ client, uuidGenerator = v4 }) {\n this.client = client;\n this.uuidGenerator = uuidGenerator;\n }\n}\nclass BasePlugin extends Plugin {\n constructor({ client, uuidGenerator = v4 }) {\n super({ client, uuidGenerator });\n this.actionData = {};\n this.pageViewId = uuidGenerator();\n this.nextPageViewId = this.pageViewId;\n this.currentLocation = getFormattedLocation(window.location);\n this.lastReferrer = hasDocument() ? document.referrer : '';\n this.addHooks();\n }\n getApi(name) {\n switch (name) {\n case 'setAction':\n return this.setAction;\n default:\n return null;\n }\n }\n setAction(action, options) {\n this.action = action;\n this.actionData = options;\n }\n clearData() {\n this.clearPluginData();\n this.action = undefined;\n this.actionData = {};\n }\n getLocationInformation(eventType, payload) {\n return Object.assign({ hitType: eventType }, this.getNextValues(eventType, payload));\n }\n updateLocationInformation(eventType, payload) {\n this.updateLocationForNextPageView(eventType, payload);\n }\n getDefaultContextInformation(eventType) {\n const documentContext = {\n title: hasDocument() ? document.title : '',\n encoding: hasDocument() ? document.characterSet : 'UTF-8',\n };\n const screenContext = {\n screenResolution: `${screen.width}x${screen.height}`,\n screenColor: `${screen.colorDepth}-bit`,\n };\n const navigatorContext = {\n language: navigator.language,\n userAgent: navigator.userAgent,\n };\n const eventContext = {\n time: Date.now(),\n eventId: this.uuidGenerator(),\n };\n return Object.assign(Object.assign(Object.assign(Object.assign({}, eventContext), screenContext), navigatorContext), documentContext);\n }\n updateLocationForNextPageView(eventType, payload) {\n const { pageViewId, referrer, location } = this.getNextValues(eventType, payload);\n this.lastReferrer = referrer;\n this.pageViewId = pageViewId;\n this.currentLocation = location;\n if (eventType === BasePluginEventTypes.pageview) {\n this.nextPageViewId = this.uuidGenerator();\n this.hasSentFirstPageView = true;\n }\n }\n getNextValues(eventType, payload) {\n return {\n pageViewId: eventType === BasePluginEventTypes.pageview ? this.nextPageViewId : this.pageViewId,\n referrer: eventType === BasePluginEventTypes.pageview && this.hasSentFirstPageView\n ? this.currentLocation\n : this.lastReferrer,\n location: eventType === BasePluginEventTypes.pageview\n ? this.getCurrentLocationFromPayload(payload)\n : this.currentLocation,\n };\n }\n getCurrentLocationFromPayload(payload) {\n if (!!payload.page) {\n const removeStartingSlash = (page) => page.replace(/^\\/?(.*)$/, '/$1');\n const extractHostnamePart = (location) => location.split('/').slice(0, 3).join('/');\n return `${extractHostnamePart(this.currentLocation)}${removeStartingSlash(payload.page)}`;\n }\n else {\n return getFormattedLocation(window.location);\n }\n }\n}\n\nclass CoveoLinkParam {\n constructor(clientId, timestamp) {\n if (!validate(clientId))\n throw Error('Not a valid uuid');\n this.clientId = clientId;\n this.creationDate = Math.floor(timestamp / 1000);\n }\n toString() {\n return this.clientId.replace(/-/g, '') + '.' + this.creationDate.toString();\n }\n get expired() {\n const age = Math.floor(Date.now() / 1000) - this.creationDate;\n return age < 0 || age > CoveoLinkParam.expirationTime;\n }\n validate(referrerString, referrerList) {\n return !this.expired && this.matchReferrer(referrerString, referrerList);\n }\n matchReferrer(referrerString, referrerList) {\n try {\n const url = new URL(referrerString);\n return referrerList.some((value) => {\n const hostRegExp = new RegExp(value.replace(/\\\\/g, '\\\\\\\\').replace(/\\./g, '\\\\.').replace(/\\*/g, '.*') + '$');\n return hostRegExp.test(url.host);\n });\n }\n catch (error) {\n return false;\n }\n }\n static fromString(input) {\n const parts = input.split('.');\n if (parts.length !== 2) {\n return null;\n }\n const [clientIdPart, creationDate] = parts;\n if (clientIdPart.length !== 32 || isNaN(parseInt(creationDate))) {\n return null;\n }\n const clientId = clientIdPart.substring(0, 8) +\n '-' +\n clientIdPart.substring(8, 12) +\n '-' +\n clientIdPart.substring(12, 16) +\n '-' +\n clientIdPart.substring(16, 20) +\n '-' +\n clientIdPart.substring(20, 32);\n if (validate(clientId)) {\n return new CoveoLinkParam(clientId, Number.parseInt(creationDate) * 1000);\n }\n else {\n return null;\n }\n }\n}\nCoveoLinkParam.cvo_cid = 'cvo_cid';\nCoveoLinkParam.expirationTime = 120;\nclass LinkPlugin extends Plugin {\n constructor({ client, uuidGenerator = v4 }) {\n super({ client, uuidGenerator });\n }\n getApi(name) {\n switch (name) {\n case 'decorate':\n return this.decorate;\n case 'acceptFrom':\n return this.acceptFrom;\n default:\n return null;\n }\n }\n decorate(urlString) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.client.getCurrentVisitorId) {\n throw new Error('Could not retrieve current clientId');\n }\n try {\n const url = new URL(urlString);\n const clientId = yield this.client.getCurrentVisitorId();\n url.searchParams.set(CoveoLinkParam.cvo_cid, new CoveoLinkParam(clientId, Date.now()).toString());\n return url.toString();\n }\n catch (error) {\n throw new Error('Invalid URL provided');\n }\n });\n }\n acceptFrom(acceptedReferrers) {\n this.client.setAcceptedLinkReferrers(acceptedReferrers);\n }\n}\nLinkPlugin.Id = 'link';\n\nconst keysOf = Object.keys;\nfunction isObject(o) {\n return o !== null && typeof o === 'object' && !Array.isArray(o);\n}\nconst UTF8_HIGH_BIT = 128;\nconst UTF8_HEADER_2 = 192;\nconst UTF8_HEADER_3 = 224;\nconst UTF8_HEADER_4 = 240;\nfunction utf8ByteCountFromFirstByte(firstByte) {\n if ((firstByte & 248) === UTF8_HEADER_4) {\n return 4;\n }\n if ((firstByte & UTF8_HEADER_4) === UTF8_HEADER_3) {\n return 3;\n }\n if ((firstByte & UTF8_HEADER_3) === UTF8_HEADER_2) {\n return 2;\n }\n return 1;\n}\nfunction truncateUrl(input, limit) {\n if (limit < 0 || input.length <= limit) {\n return input;\n }\n let end = input.indexOf('%', limit - 2);\n if (end < 0 || end > limit) {\n end = limit;\n }\n else {\n limit = end;\n }\n while (end > 2 && input.charAt(end - 3) == '%') {\n const peekByte = Number.parseInt(input.substring(end - 2, end), 16);\n if ((peekByte & UTF8_HIGH_BIT) != UTF8_HIGH_BIT) {\n break;\n }\n end -= 3;\n if ((peekByte & UTF8_HEADER_2) != UTF8_HIGH_BIT) {\n if (limit - end >= utf8ByteCountFromFirstByte(peekByte) * 3) {\n end = limit;\n }\n break;\n }\n }\n return input.substring(0, end);\n}\n\nconst ticketKeysMapping = {\n id: 'svc_ticket_id',\n subject: 'svc_ticket_subject',\n description: 'svc_ticket_description',\n category: 'svc_ticket_category',\n productId: 'svc_ticket_product_id',\n custom: 'svc_ticket_custom',\n};\nconst ticketKeysMappingValues = keysOf(ticketKeysMapping).map((key) => ticketKeysMapping[key]);\nconst ticketSubKeysMatchGroup = [...ticketKeysMappingValues].join('|');\nconst ticketKeyRegex = new RegExp(`^(${ticketSubKeysMatchGroup}$)`);\nconst serviceActionsKeysMapping = {\n svcAction: 'svc_action',\n svcActionData: 'svc_action_data',\n};\nconst convertTicketToMeasurementProtocol = (ticket) => {\n return keysOf(ticket)\n .filter((key) => ticket[key] !== undefined)\n .reduce((mappedTicket, key) => {\n const newKey = ticketKeysMapping[key] || key;\n return Object.assign(Object.assign({}, mappedTicket), { [newKey]: ticket[key] });\n }, {});\n};\nconst isTicketKey = (key) => ticketKeyRegex.test(key);\nconst isServiceKey = [isTicketKey];\n\nconst productKeysMapping = {\n id: 'id',\n name: 'nm',\n brand: 'br',\n category: 'ca',\n variant: 'va',\n price: 'pr',\n quantity: 'qt',\n coupon: 'cc',\n position: 'ps',\n group: 'group',\n};\nconst impressionKeysMapping = {\n id: 'id',\n name: 'nm',\n brand: 'br',\n category: 'ca',\n variant: 'va',\n position: 'ps',\n price: 'pr',\n group: 'group',\n};\nconst productActionsKeysMapping = {\n action: 'pa',\n list: 'pal',\n listSource: 'pls',\n};\nconst transactionActionsKeysMapping = {\n id: 'ti',\n revenue: 'tr',\n tax: 'tt',\n shipping: 'ts',\n coupon: 'tcc',\n affiliation: 'ta',\n step: 'cos',\n option: 'col',\n};\nconst coveoCommerceExtensionKeys = [\n 'loyaltyCardId',\n 'loyaltyTier',\n 'thirdPartyPersona',\n 'companyName',\n 'favoriteStore',\n 'storeName',\n 'userIndustry',\n 'userRole',\n 'userDepartment',\n 'businessUnit',\n];\nconst quoteActionsKeysMapping = {\n id: 'quoteId',\n affiliation: 'quoteAffiliation',\n};\nconst reviewActionsKeysMapping = {\n id: 'reviewId',\n rating: 'reviewRating',\n comment: 'reviewComment',\n};\nconst commerceActionKeysMappingPerAction = {\n add: productActionsKeysMapping,\n bookmark_add: productActionsKeysMapping,\n bookmark_remove: productActionsKeysMapping,\n click: productActionsKeysMapping,\n checkout: productActionsKeysMapping,\n checkout_option: productActionsKeysMapping,\n detail: productActionsKeysMapping,\n impression: productActionsKeysMapping,\n remove: productActionsKeysMapping,\n refund: Object.assign(Object.assign({}, productActionsKeysMapping), transactionActionsKeysMapping),\n purchase: Object.assign(Object.assign({}, productActionsKeysMapping), transactionActionsKeysMapping),\n quickview: productActionsKeysMapping,\n quote: Object.assign(Object.assign({}, productActionsKeysMapping), quoteActionsKeysMapping),\n review: Object.assign(Object.assign({}, productActionsKeysMapping), reviewActionsKeysMapping),\n};\nconst productKeysMappingValues = keysOf(productKeysMapping).map((key) => productKeysMapping[key]);\nconst impressionKeysMappingValues = keysOf(impressionKeysMapping).map((key) => impressionKeysMapping[key]);\nconst productActionsKeysMappingValues = keysOf(productActionsKeysMapping).map((key) => productActionsKeysMapping[key]);\nconst transactionActionsKeysMappingValues = keysOf(transactionActionsKeysMapping).map((key) => transactionActionsKeysMapping[key]);\nconst reviewKeysMappingValues = keysOf(reviewActionsKeysMapping).map((key) => reviewActionsKeysMapping[key]);\nconst quoteKeysMappingValues = keysOf(quoteActionsKeysMapping).map((key) => quoteActionsKeysMapping[key]);\nconst productSubKeysMatchGroup = [...productKeysMappingValues, 'custom'].join('|');\nconst impressionSubKeysMatchGroup = [...impressionKeysMappingValues, 'custom'].join('|');\nconst productPrefixMatchGroup = '(pr[0-9]+)';\nconst impressionPrefixMatchGroup = '(il[0-9]+pi[0-9]+)';\nconst productKeyRegex = new RegExp(`^${productPrefixMatchGroup}(${productSubKeysMatchGroup})$`);\nconst impressionKeyRegex = new RegExp(`^(${impressionPrefixMatchGroup}(${impressionSubKeysMatchGroup}))|(il[0-9]+nm)$`);\nconst productActionsKeyRegex = new RegExp(`^(${productActionsKeysMappingValues.join('|')})$`);\nconst transactionActionsKeyRegex = new RegExp(`^(${transactionActionsKeysMappingValues.join('|')})$`);\nconst customProductKeyRegex = new RegExp(`^${productPrefixMatchGroup}custom$`);\nconst customImpressionKeyRegex = new RegExp(`^${impressionPrefixMatchGroup}custom$`);\nconst coveoCommerceExtensionKeysRegex = new RegExp(`^(${[...coveoCommerceExtensionKeys, ...reviewKeysMappingValues, ...quoteKeysMappingValues].join('|')})$`);\nconst isProductKey = (key) => productKeyRegex.test(key);\nconst isImpressionKey = (key) => impressionKeyRegex.test(key);\nconst isProductActionsKey = (key) => productActionsKeyRegex.test(key);\nconst isTransactionActionsKeyRegex = (key) => transactionActionsKeyRegex.test(key);\nconst isCoveoCommerceExtensionKey = (key) => coveoCommerceExtensionKeysRegex.test(key);\nconst isCommerceKey = [\n isImpressionKey,\n isProductKey,\n isProductActionsKey,\n isTransactionActionsKeyRegex,\n isCoveoCommerceExtensionKey,\n];\nconst isCustomCommerceKey = [customProductKeyRegex, customImpressionKeyRegex];\n\nconst globalParamKeysMapping = {\n anonymizeIp: 'aip',\n};\nconst eventKeysMapping = {\n eventCategory: 'ec',\n eventAction: 'ea',\n eventLabel: 'el',\n eventValue: 'ev',\n page: 'dp',\n visitorId: 'cid',\n clientId: 'cid',\n userId: 'uid',\n currencyCode: 'cu',\n};\nconst contextInformationMapping = {\n hitType: 't',\n pageViewId: 'pid',\n encoding: 'de',\n location: 'dl',\n referrer: 'dr',\n screenColor: 'sd',\n screenResolution: 'sr',\n title: 'dt',\n userAgent: 'ua',\n language: 'ul',\n eventId: 'z',\n time: 'tm',\n};\nconst coveoExtensionsKeys = [\n 'contentId',\n 'contentIdKey',\n 'contentType',\n 'searchHub',\n 'tab',\n 'searchUid',\n 'permanentId',\n 'contentLocale',\n 'trackingId',\n];\nconst baseMeasurementProtocolKeysMapping = Object.assign(Object.assign(Object.assign(Object.assign({}, globalParamKeysMapping), eventKeysMapping), contextInformationMapping), coveoExtensionsKeys.reduce((all, key) => (Object.assign(Object.assign({}, all), { [key]: key })), {}));\n\nconst measurementProtocolKeysMapping = Object.assign(Object.assign({}, baseMeasurementProtocolKeysMapping), serviceActionsKeysMapping);\nconst convertKeysToMeasurementProtocol = (params) => {\n const keysMappingForAction = (!!params.action && commerceActionKeysMappingPerAction[params.action]) || {};\n return keysOf(params).reduce((mappedKeys, key) => {\n const newKey = keysMappingForAction[key] || measurementProtocolKeysMapping[key] || key;\n return Object.assign(Object.assign({}, mappedKeys), { [newKey]: params[key] });\n }, {});\n};\nconst measurementProtocolKeysMappingValues = keysOf(measurementProtocolKeysMapping).map((key) => measurementProtocolKeysMapping[key]);\nconst isKnownMeasurementProtocolKey = (key) => measurementProtocolKeysMappingValues.indexOf(key) !== -1;\nconst isCustomKey = (key) => key === 'custom';\nconst isMeasurementProtocolKey = (key) => {\n return [...isCommerceKey, ...isServiceKey, isKnownMeasurementProtocolKey, isCustomKey].some((test) => test(key));\n};\nconst convertCustomMeasurementProtocolKeys = (data) => {\n return keysOf(data).reduce((all, current) => {\n const match = getFirstCustomMeasurementProtocolKeyMatch(current);\n if (match) {\n return Object.assign(Object.assign({}, all), convertCustomObject(match, data[current]));\n }\n else {\n return Object.assign(Object.assign({}, all), { [current]: data[current] });\n }\n }, {});\n};\nconst getFirstCustomMeasurementProtocolKeyMatch = (key) => {\n let matchedKey = undefined;\n [...isCustomCommerceKey].every((regex) => {\n var _a;\n matchedKey = (_a = regex.exec(key)) === null || _a === void 0 ? void 0 : _a[1];\n return !Boolean(matchedKey);\n });\n return matchedKey;\n};\nconst convertCustomObject = (prefix, customData) => {\n return keysOf(customData).reduce((allCustom, currentCustomKey) => (Object.assign(Object.assign({}, allCustom), { [`${prefix}${currentCustomKey}`]: customData[currentCustomKey] })), {});\n};\n\nclass AnalyticsBeaconClient {\n constructor(opts) {\n this.opts = opts;\n }\n sendEvent(eventType, originalPayload) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.isAvailable()) {\n throw new Error(`navigator.sendBeacon is not supported in this browser. Consider adding a polyfill like \"sendbeacon-polyfill\".`);\n }\n const { baseUrl, preprocessRequest } = this.opts;\n const paramsFragments = yield this.getQueryParamsForEventType(eventType);\n const { url, payload } = yield this.preProcessRequestAsPotentialJSONString(`${baseUrl}/analytics/${eventType}?${paramsFragments}`, originalPayload, preprocessRequest);\n const parsedRequestData = this.encodeForEventType(eventType, payload);\n const body = new Blob([parsedRequestData], {\n type: 'application/x-www-form-urlencoded',\n });\n navigator.sendBeacon(url, body);\n return;\n });\n }\n isAvailable() {\n return 'sendBeacon' in navigator;\n }\n deleteHttpCookieVisitorId() {\n return Promise.resolve();\n }\n preProcessRequestAsPotentialJSONString(originalURL, originalPayload, preprocessRequest) {\n return __awaiter(this, void 0, void 0, function* () {\n let returnedUrl = originalURL;\n let returnedPayload = originalPayload;\n if (preprocessRequest) {\n const processedRequest = yield preprocessRequest({ url: originalURL, body: JSON.stringify(originalPayload) }, 'analyticsBeacon');\n const { url: processedURL, body: processedBody } = processedRequest;\n returnedUrl = processedURL || originalURL;\n try {\n returnedPayload = JSON.parse(processedBody);\n }\n catch (e) {\n console.error('Unable to process the request body as a JSON string', e);\n }\n }\n return {\n payload: returnedPayload,\n url: returnedUrl,\n };\n });\n }\n encodeForEventType(eventType, payload) {\n return this.isEventTypeLegacy(eventType)\n ? this.encodeEventToJson(eventType, payload)\n : this.encodeEventToJson(eventType, payload, this.opts.token);\n }\n getQueryParamsForEventType(eventType) {\n return __awaiter(this, void 0, void 0, function* () {\n const { token, visitorIdProvider } = this.opts;\n const visitorId = yield visitorIdProvider.getCurrentVisitorId();\n return [\n token && this.isEventTypeLegacy(eventType) ? `access_token=${token}` : '',\n visitorId ? `visitorId=${visitorId}` : '',\n 'discardVisitInfo=true',\n ]\n .filter((p) => !!p)\n .join('&');\n });\n }\n isEventTypeLegacy(eventType) {\n return [EventType.click, EventType.custom, EventType.search, EventType.view].indexOf(eventType) !== -1;\n }\n encodeEventToJson(eventType, payload, access_token) {\n let encoded = `${eventType}Event=${encodeURIComponent(JSON.stringify(payload))}`;\n if (access_token) {\n encoded = `access_token=${encodeURIComponent(access_token)}&${encoded}`;\n }\n return encoded;\n }\n}\n\nclass NoopAnalyticsClient {\n sendEvent(_, __) {\n return __awaiter(this, void 0, void 0, function* () {\n return Promise.resolve();\n });\n }\n deleteHttpCookieVisitorId() {\n return __awaiter(this, void 0, void 0, function* () {\n return Promise.resolve();\n });\n }\n}\n\nconst fetch$1 = globalThis.fetch;\n\nclass AnalyticsFetchClient {\n constructor(opts) {\n this.opts = opts;\n }\n sendEvent(eventType, payload) {\n return __awaiter(this, void 0, void 0, function* () {\n const { baseUrl, visitorIdProvider, preprocessRequest } = this.opts;\n const visitorIdParam = this.shouldAppendVisitorId(eventType) ? yield this.getVisitorIdParam() : '';\n const defaultOptions = {\n url: `${baseUrl}/analytics/${eventType}${visitorIdParam}`,\n credentials: 'include',\n mode: 'cors',\n headers: this.getHeaders(),\n method: 'POST',\n body: JSON.stringify(payload),\n };\n const _a = Object.assign(Object.assign({}, defaultOptions), (preprocessRequest ? yield preprocessRequest(defaultOptions, 'analyticsFetch') : {})), { url } = _a, fetchData = __rest(_a, [\"url\"]);\n let response;\n try {\n response = yield fetch$1(url, fetchData);\n }\n catch (error) {\n console.error('An error has occured when sending the event.', error);\n return;\n }\n if (response.ok) {\n const visit = (yield response.json());\n if (visit.visitorId) {\n visitorIdProvider.setCurrentVisitorId(visit.visitorId);\n }\n return visit;\n }\n else {\n try {\n response.json();\n }\n catch (_b) {\n }\n console.error(`An error has occured when sending the \"${eventType}\" event.`, response, payload);\n throw new Error(`An error has occurred when sending the \"${eventType}\" event. Check the console logs for more details.`);\n }\n });\n }\n deleteHttpCookieVisitorId() {\n return __awaiter(this, void 0, void 0, function* () {\n const { baseUrl } = this.opts;\n const url = `${baseUrl}/analytics/visit`;\n yield fetch$1(url, { headers: this.getHeaders(), method: 'DELETE' });\n });\n }\n shouldAppendVisitorId(eventType) {\n return [EventType.click, EventType.custom, EventType.search, EventType.view].indexOf(eventType) !== -1;\n }\n getVisitorIdParam() {\n return __awaiter(this, void 0, void 0, function* () {\n const { visitorIdProvider } = this.opts;\n const visitorId = yield visitorIdProvider.getCurrentVisitorId();\n return visitorId ? `?visitor=${visitorId}` : '';\n });\n }\n getHeaders() {\n const { token } = this.opts;\n return Object.assign(Object.assign({}, (token ? { Authorization: `Bearer ${token}` } : {})), { 'Content-Type': `application/json` });\n }\n}\n\nclass BrowserRuntime {\n constructor(clientOptions, getUnprocessedRequests) {\n if (hasLocalStorage() && hasCookieStorage()) {\n this.storage = new CookieAndLocalStorage();\n }\n else if (hasLocalStorage()) {\n this.storage = localStorage;\n }\n else {\n console.warn('BrowserRuntime detected no valid storage available.', this);\n this.storage = new NullStorage();\n }\n this.client = new AnalyticsFetchClient(clientOptions);\n this.beaconClient = new AnalyticsBeaconClient(clientOptions);\n window.addEventListener('beforeunload', () => {\n const requests = getUnprocessedRequests();\n for (let { eventType, payload } of requests) {\n this.beaconClient.sendEvent(eventType, payload);\n }\n });\n }\n getClientDependingOnEventType(eventType) {\n return eventType === 'click' && this.beaconClient.isAvailable() ? this.beaconClient : this.client;\n }\n}\nclass NodeJSRuntime {\n constructor(clientOptions, storage) {\n this.storage = storage || new NullStorage();\n this.client = new AnalyticsFetchClient(clientOptions);\n }\n getClientDependingOnEventType(eventType) {\n return this.client;\n }\n}\nclass NoopRuntime {\n constructor() {\n this.storage = new NullStorage();\n this.client = new NoopAnalyticsClient();\n }\n getClientDependingOnEventType(eventType) {\n return this.client;\n }\n}\n\nconst API_KEY_PREFIX = 'xx';\nconst isApiKey = (token) => (token === null || token === void 0 ? void 0 : token.startsWith(API_KEY_PREFIX)) || false;\n\nconst ReactNativeRuntimeWarning = `\n We've detected you're using React Native but have not provided the corresponding runtime, \n for an optimal experience please use the \"coveo.analytics/react-native\" subpackage.\n Follow the Readme on how to set it up: https://github.com/coveo/coveo.analytics.js#using-react-native\n `;\nfunction isReactNative() {\n return typeof navigator != 'undefined' && navigator.product == 'ReactNative';\n}\n\nconst doNotTrackValues = ['1', 1, 'yes', true];\nfunction doNotTrack() {\n const checks = [];\n if (hasWindow()) {\n checks.push(window.doNotTrack);\n }\n if (hasNavigator()) {\n checks.push(navigator.doNotTrack, navigator.msDoNotTrack, navigator.globalPrivacyControl);\n }\n return checks.some((value) => doNotTrackValues.indexOf(value) !== -1);\n}\n\nconst Version = 'v15';\nconst Endpoints = {\n default: 'https://analytics.cloud.coveo.com/rest/ua',\n production: 'https://analytics.cloud.coveo.com/rest/ua',\n hipaa: 'https://analyticshipaa.cloud.coveo.com/rest/ua',\n};\nfunction buildBaseUrl(endpoint = Endpoints.default, apiVersion = Version, isCustomEndpoint = false) {\n endpoint = endpoint.replace(/\\/$/, '');\n if (isCustomEndpoint) {\n return `${endpoint}/${apiVersion}`;\n }\n const hasUARestEndpoint = endpoint.endsWith('/rest') || endpoint.endsWith('/rest/ua');\n return `${endpoint}${hasUARestEndpoint ? '' : '/rest'}/${apiVersion}`;\n}\nconst COVEO_NAMESPACE = '38824e1f-37f5-42d3-8372-a4b8fa9df946';\nclass CoveoAnalyticsClient {\n get defaultOptions() {\n return {\n endpoint: Endpoints.default,\n isCustomEndpoint: false,\n token: '',\n version: Version,\n beforeSendHooks: [],\n afterSendHooks: [],\n };\n }\n get version() {\n return libVersion;\n }\n constructor(opts) {\n this.acceptedLinkReferrers = [];\n if (!opts) {\n throw new Error('You have to pass options to this constructor');\n }\n this.options = Object.assign(Object.assign({}, this.defaultOptions), opts);\n this.visitorId = '';\n this.bufferedRequests = [];\n this.beforeSendHooks = [enhanceViewEvent, addDefaultValues].concat(this.options.beforeSendHooks);\n this.afterSendHooks = this.options.afterSendHooks;\n this.eventTypeMapping = {};\n const clientsOptions = {\n baseUrl: this.baseUrl,\n token: this.options.token,\n visitorIdProvider: this,\n preprocessRequest: this.options.preprocessRequest,\n };\n if (doNotTrack()) {\n this.runtime = new NoopRuntime();\n }\n else {\n this.runtime = this.options.runtimeEnvironment || this.initRuntime(clientsOptions);\n }\n this.addEventTypeMapping(EventType.view, { newEventType: EventType.view, addClientIdParameter: true });\n this.addEventTypeMapping(EventType.click, { newEventType: EventType.click, addClientIdParameter: true });\n this.addEventTypeMapping(EventType.custom, { newEventType: EventType.custom, addClientIdParameter: true });\n this.addEventTypeMapping(EventType.search, { newEventType: EventType.search, addClientIdParameter: true });\n }\n initRuntime(clientsOptions) {\n if (hasWindow() && hasDocument()) {\n return new BrowserRuntime(clientsOptions, () => {\n const copy = [...this.bufferedRequests];\n this.bufferedRequests = [];\n return copy;\n });\n }\n else if (isReactNative()) {\n console.warn(ReactNativeRuntimeWarning);\n }\n return new NodeJSRuntime(clientsOptions);\n }\n get storage() {\n return this.runtime.storage;\n }\n determineVisitorId() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n return ((hasWindow() && this.extractClientIdFromLink(window.location.href)) ||\n (yield this.storage.getItem('visitorId')) ||\n v4());\n }\n catch (err) {\n console.log('Could not get visitor ID from the current runtime environment storage. Using a random ID instead.', err);\n return v4();\n }\n });\n }\n getCurrentVisitorId() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.visitorId) {\n const id = yield this.determineVisitorId();\n yield this.setCurrentVisitorId(id);\n }\n return this.visitorId;\n });\n }\n setCurrentVisitorId(visitorId) {\n return __awaiter(this, void 0, void 0, function* () {\n this.visitorId = visitorId;\n yield this.storage.setItem('visitorId', visitorId);\n });\n }\n setClientId(value, namespace) {\n return __awaiter(this, void 0, void 0, function* () {\n if (validate(value)) {\n this.setCurrentVisitorId(value.toLowerCase());\n }\n else {\n if (!namespace) {\n throw Error('Cannot generate uuid client id without a specific namespace string.');\n }\n this.setCurrentVisitorId(uuidv5(value, uuidv5(namespace, COVEO_NAMESPACE)));\n }\n });\n }\n getParameters(eventType, ...payload) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield this.resolveParameters(eventType, ...payload);\n });\n }\n getPayload(eventType, ...payload) {\n return __awaiter(this, void 0, void 0, function* () {\n const parametersToSend = yield this.resolveParameters(eventType, ...payload);\n return yield this.resolvePayloadForParameters(eventType, parametersToSend);\n });\n }\n get currentVisitorId() {\n const visitorId = this.visitorId || this.storage.getItem('visitorId');\n if (typeof visitorId !== 'string') {\n this.setCurrentVisitorId(v4());\n }\n return this.visitorId;\n }\n set currentVisitorId(visitorId) {\n this.visitorId = visitorId;\n this.storage.setItem('visitorId', visitorId);\n }\n extractClientIdFromLink(urlString) {\n if (doNotTrack()) {\n return null;\n }\n try {\n const linkParam = new URL(urlString).searchParams.get(CoveoLinkParam.cvo_cid);\n if (linkParam == null) {\n return null;\n }\n const linker = CoveoLinkParam.fromString(linkParam);\n if (!linker || !hasDocument() || !linker.validate(document.referrer, this.acceptedLinkReferrers)) {\n return null;\n }\n return linker.clientId;\n }\n catch (error) {\n }\n return null;\n }\n resolveParameters(eventType, ...payload) {\n return __awaiter(this, void 0, void 0, function* () {\n const { variableLengthArgumentsNames = [], addVisitorIdParameter = false, usesMeasurementProtocol = false, addClientIdParameter = false, } = this.eventTypeMapping[eventType] || {};\n const processVariableArgumentNamesStep = (currentPayload) => variableLengthArgumentsNames.length > 0\n ? this.parseVariableArgumentsPayload(variableLengthArgumentsNames, currentPayload)\n : currentPayload[0];\n const addVisitorIdStep = (currentPayload) => __awaiter(this, void 0, void 0, function* () {\n return (Object.assign(Object.assign({}, currentPayload), { visitorId: addVisitorIdParameter ? yield this.getCurrentVisitorId() : '' }));\n });\n const addClientIdStep = (currentPayload) => __awaiter(this, void 0, void 0, function* () {\n if (addClientIdParameter) {\n return Object.assign(Object.assign({}, currentPayload), { clientId: yield this.getCurrentVisitorId() });\n }\n return currentPayload;\n });\n const setAnonymousUserStep = (currentPayload) => usesMeasurementProtocol ? this.ensureAnonymousUserWhenUsingApiKey(currentPayload) : currentPayload;\n const processBeforeSendHooksStep = (currentPayload) => this.beforeSendHooks.reduce((promisePayload, current) => __awaiter(this, void 0, void 0, function* () {\n const payload = yield promisePayload;\n return yield current(eventType, payload);\n }), currentPayload);\n const parametersToSend = yield [\n processVariableArgumentNamesStep,\n addVisitorIdStep,\n addClientIdStep,\n setAnonymousUserStep,\n processBeforeSendHooksStep,\n ].reduce((payloadPromise, step) => __awaiter(this, void 0, void 0, function* () {\n const payload = yield payloadPromise;\n return yield step(payload);\n }), Promise.resolve(payload));\n return parametersToSend;\n });\n }\n resolvePayloadForParameters(eventType, parameters) {\n return __awaiter(this, void 0, void 0, function* () {\n const { usesMeasurementProtocol = false } = this.eventTypeMapping[eventType] || {};\n const addTrackingIdStep = (currentPayload) => this.setTrackingIdIfTrackingIdNotPresent(currentPayload);\n const cleanPayloadStep = (currentPayload) => this.removeEmptyPayloadValues(currentPayload, eventType);\n const validateParams = (currentPayload) => this.validateParams(currentPayload, eventType);\n const processMeasurementProtocolConversionStep = (currentPayload) => usesMeasurementProtocol ? convertKeysToMeasurementProtocol(currentPayload) : currentPayload;\n const removeUnknownParameters = (currentPayload) => usesMeasurementProtocol ? this.removeUnknownParameters(currentPayload) : currentPayload;\n const processCustomParameters = (currentPayload) => usesMeasurementProtocol\n ? this.processCustomParameters(currentPayload)\n : this.mapCustomParametersToCustomData(currentPayload);\n const payloadToSend = yield [\n addTrackingIdStep,\n cleanPayloadStep,\n validateParams,\n processMeasurementProtocolConversionStep,\n removeUnknownParameters,\n processCustomParameters,\n ].reduce((payloadPromise, step) => __awaiter(this, void 0, void 0, function* () {\n const payload = yield payloadPromise;\n return yield step(payload);\n }), Promise.resolve(parameters));\n return payloadToSend;\n });\n }\n makeEvent(eventType, ...payload) {\n return __awaiter(this, void 0, void 0, function* () {\n const { newEventType: eventTypeToSend = eventType } = this.eventTypeMapping[eventType] || {};\n const parametersToSend = yield this.resolveParameters(eventType, ...payload);\n const payloadToSend = yield this.resolvePayloadForParameters(eventType, parametersToSend);\n return {\n eventType: eventTypeToSend,\n payload: payloadToSend,\n log: (remainingPayload) => __awaiter(this, void 0, void 0, function* () {\n this.bufferedRequests.push({\n eventType: eventTypeToSend,\n payload: Object.assign(Object.assign({}, payloadToSend), remainingPayload),\n });\n yield Promise.all(this.afterSendHooks.map((hook) => hook(eventType, Object.assign(Object.assign({}, parametersToSend), remainingPayload))));\n yield this.deferExecution();\n return (yield this.sendFromBuffer());\n }),\n };\n });\n }\n sendEvent(eventType, ...payload) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeEvent(eventType, ...payload)).log({});\n });\n }\n deferExecution() {\n return new Promise((resolve) => setTimeout(resolve, 0));\n }\n sendFromBuffer() {\n return __awaiter(this, void 0, void 0, function* () {\n const popped = this.bufferedRequests.shift();\n if (popped) {\n const { eventType, payload } = popped;\n return this.runtime.getClientDependingOnEventType(eventType).sendEvent(eventType, payload);\n }\n });\n }\n clear() {\n this.storage.removeItem('visitorId');\n const store = new HistoryStore();\n store.clear();\n }\n deleteHttpOnlyVisitorId() {\n this.runtime.client.deleteHttpCookieVisitorId();\n }\n makeSearchEvent(request) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.makeEvent(EventType.search, request);\n });\n }\n sendSearchEvent(_a) {\n var { searchQueryUid } = _a, preparedRequest = __rest(_a, [\"searchQueryUid\"]);\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeSearchEvent(preparedRequest)).log({ searchQueryUid });\n });\n }\n makeClickEvent(request) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.makeEvent(EventType.click, request);\n });\n }\n sendClickEvent(_a) {\n var { searchQueryUid } = _a, preparedRequest = __rest(_a, [\"searchQueryUid\"]);\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeClickEvent(preparedRequest)).log({ searchQueryUid });\n });\n }\n makeCustomEvent(request) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.makeEvent(EventType.custom, request);\n });\n }\n sendCustomEvent(_a) {\n var { lastSearchQueryUid } = _a, preparedRequest = __rest(_a, [\"lastSearchQueryUid\"]);\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeCustomEvent(preparedRequest)).log({ lastSearchQueryUid });\n });\n }\n makeViewEvent(request) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.makeEvent(EventType.view, request);\n });\n }\n sendViewEvent(request) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeViewEvent(request)).log({});\n });\n }\n getVisit() {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield fetch(`${this.baseUrl}/analytics/visit`);\n const visit = (yield response.json());\n this.visitorId = visit.visitorId;\n return visit;\n });\n }\n getHealth() {\n return __awaiter(this, void 0, void 0, function* () {\n const response = yield fetch(`${this.baseUrl}/analytics/monitoring/health`);\n return (yield response.json());\n });\n }\n registerBeforeSendEventHook(hook) {\n this.beforeSendHooks.push(hook);\n }\n registerAfterSendEventHook(hook) {\n this.afterSendHooks.push(hook);\n }\n addEventTypeMapping(eventType, eventConfig) {\n this.eventTypeMapping[eventType] = eventConfig;\n }\n setAcceptedLinkReferrers(hosts) {\n if (Array.isArray(hosts) && hosts.every((host) => typeof host == 'string'))\n this.acceptedLinkReferrers = hosts;\n else\n throw Error('Parameter should be an array of domain strings');\n }\n parseVariableArgumentsPayload(fieldsOrder, payload) {\n const parsedArguments = {};\n for (let i = 0, length = payload.length; i < length; i++) {\n const currentArgument = payload[i];\n if (typeof currentArgument === 'string') {\n parsedArguments[fieldsOrder[i]] = currentArgument;\n }\n else if (typeof currentArgument === 'object') {\n return Object.assign(Object.assign({}, parsedArguments), currentArgument);\n }\n }\n return parsedArguments;\n }\n isKeyAllowedEmpty(evtType, key) {\n const keysThatCanBeEmpty = {\n [EventType.search]: ['queryText'],\n };\n const match = keysThatCanBeEmpty[evtType] || [];\n return match.indexOf(key) !== -1;\n }\n removeEmptyPayloadValues(payload, eventType) {\n const isNotEmptyValue = (value) => typeof value !== 'undefined' && value !== null && value !== '';\n return Object.keys(payload)\n .filter((key) => this.isKeyAllowedEmpty(eventType, key) || isNotEmptyValue(payload[key]))\n .reduce((newPayload, key) => (Object.assign(Object.assign({}, newPayload), { [key]: payload[key] })), {});\n }\n removeUnknownParameters(payload) {\n const newPayload = Object.keys(payload)\n .filter((key) => {\n if (isMeasurementProtocolKey(key)) {\n return true;\n }\n else {\n console.log(key, 'is not processed by coveoua');\n }\n })\n .reduce((newPayload, key) => (Object.assign(Object.assign({}, newPayload), { [key]: payload[key] })), {});\n return newPayload;\n }\n processCustomParameters(payload) {\n const { custom } = payload, rest = __rest(payload, [\"custom\"]);\n let lowercasedCustom = {};\n if (custom && isObject(custom)) {\n lowercasedCustom = this.lowercaseKeys(custom);\n }\n const newPayload = convertCustomMeasurementProtocolKeys(rest);\n return Object.assign(Object.assign({}, lowercasedCustom), newPayload);\n }\n mapCustomParametersToCustomData(payload) {\n const { custom } = payload, rest = __rest(payload, [\"custom\"]);\n if (custom && isObject(custom)) {\n const lowercasedCustom = this.lowercaseKeys(custom);\n return Object.assign(Object.assign({}, rest), { customData: Object.assign(Object.assign({}, lowercasedCustom), payload.customData) });\n }\n else {\n return payload;\n }\n }\n lowercaseKeys(custom) {\n const keys = Object.keys(custom);\n let result = {};\n keys.forEach((key) => {\n result[key.toLowerCase()] = custom[key];\n });\n return result;\n }\n validateParams(payload, eventType) {\n const { anonymizeIp } = payload, rest = __rest(payload, [\"anonymizeIp\"]);\n if (anonymizeIp !== undefined) {\n if (['0', 'false', 'undefined', 'null', '{}', '[]', ''].indexOf(`${anonymizeIp}`.toLowerCase()) == -1) {\n rest.anonymizeIp = 1;\n }\n }\n if (eventType == EventType.view ||\n eventType == EventType.click ||\n eventType == EventType.search ||\n eventType == EventType.custom) {\n rest.originLevel3 = this.limit(rest.originLevel3, 1024);\n }\n if (eventType == EventType.view) {\n rest.location = this.limit(rest.location, 1024);\n }\n if (eventType == 'pageview' || eventType == 'event') {\n rest.referrer = this.limit(rest.referrer, 2048);\n rest.location = this.limit(rest.location, 2048);\n rest.page = this.limit(rest.page, 2048);\n }\n return rest;\n }\n ensureAnonymousUserWhenUsingApiKey(payload) {\n const { userId } = payload, rest = __rest(payload, [\"userId\"]);\n if (isApiKey(this.options.token) && !userId) {\n rest['userId'] = 'anonymous';\n return rest;\n }\n else {\n return payload;\n }\n }\n setTrackingIdIfTrackingIdNotPresent(payload) {\n const { trackingId } = payload, rest = __rest(payload, [\"trackingId\"]);\n if (trackingId) {\n return payload;\n }\n if (rest.hasOwnProperty('custom') && isObject(rest.custom)) {\n if (rest.custom.hasOwnProperty('context_website') || rest.custom.hasOwnProperty('siteName')) {\n rest['trackingId'] = rest.custom.context_website || rest.custom.siteName;\n }\n }\n if (rest.hasOwnProperty('customData') && isObject(rest.customData)) {\n if (rest.customData.hasOwnProperty('context_website') || rest.customData.hasOwnProperty('siteName')) {\n rest['trackingId'] = rest.customData.context_website || rest.customData.siteName;\n }\n }\n return rest;\n }\n limit(input, length) {\n return typeof input === 'string' ? truncateUrl(input, length) : input;\n }\n get baseUrl() {\n return buildBaseUrl(this.options.endpoint, this.options.version, this.options.isCustomEndpoint);\n }\n}\n\nvar InsightEvents;\n(function (InsightEvents) {\n InsightEvents[\"contextChanged\"] = \"contextChanged\";\n InsightEvents[\"expandToFullUI\"] = \"expandToFullUI\";\n InsightEvents[\"openUserActions\"] = \"openUserActions\";\n InsightEvents[\"showPrecedingSessions\"] = \"showPrecedingSessions\";\n InsightEvents[\"showFollowingSessions\"] = \"showFollowingSessions\";\n InsightEvents[\"clickViewedDocument\"] = \"clickViewedDocument\";\n InsightEvents[\"clickPageView\"] = \"clickPageView\";\n InsightEvents[\"createArticle\"] = \"createArticle\";\n})(InsightEvents || (InsightEvents = {}));\n\nvar SearchPageEvents;\n(function (SearchPageEvents) {\n SearchPageEvents[\"interfaceLoad\"] = \"interfaceLoad\";\n SearchPageEvents[\"interfaceChange\"] = \"interfaceChange\";\n SearchPageEvents[\"didyoumeanAutomatic\"] = \"didyoumeanAutomatic\";\n SearchPageEvents[\"didyoumeanClick\"] = \"didyoumeanClick\";\n SearchPageEvents[\"resultsSort\"] = \"resultsSort\";\n SearchPageEvents[\"searchboxSubmit\"] = \"searchboxSubmit\";\n SearchPageEvents[\"searchboxClear\"] = \"searchboxClear\";\n SearchPageEvents[\"searchboxAsYouType\"] = \"searchboxAsYouType\";\n SearchPageEvents[\"breadcrumbFacet\"] = \"breadcrumbFacet\";\n SearchPageEvents[\"breadcrumbResetAll\"] = \"breadcrumbResetAll\";\n SearchPageEvents[\"documentQuickview\"] = \"documentQuickview\";\n SearchPageEvents[\"documentOpen\"] = \"documentOpen\";\n SearchPageEvents[\"omniboxAnalytics\"] = \"omniboxAnalytics\";\n SearchPageEvents[\"omniboxFromLink\"] = \"omniboxFromLink\";\n SearchPageEvents[\"searchFromLink\"] = \"searchFromLink\";\n SearchPageEvents[\"triggerNotify\"] = \"notify\";\n SearchPageEvents[\"triggerExecute\"] = \"execute\";\n SearchPageEvents[\"triggerQuery\"] = \"query\";\n SearchPageEvents[\"undoTriggerQuery\"] = \"undoQuery\";\n SearchPageEvents[\"triggerRedirect\"] = \"redirect\";\n SearchPageEvents[\"pagerResize\"] = \"pagerResize\";\n SearchPageEvents[\"pagerNumber\"] = \"pagerNumber\";\n SearchPageEvents[\"pagerNext\"] = \"pagerNext\";\n SearchPageEvents[\"pagerPrevious\"] = \"pagerPrevious\";\n SearchPageEvents[\"pagerScrolling\"] = \"pagerScrolling\";\n SearchPageEvents[\"staticFilterClearAll\"] = \"staticFilterClearAll\";\n SearchPageEvents[\"staticFilterSelect\"] = \"staticFilterSelect\";\n SearchPageEvents[\"staticFilterDeselect\"] = \"staticFilterDeselect\";\n SearchPageEvents[\"facetClearAll\"] = \"facetClearAll\";\n SearchPageEvents[\"facetSearch\"] = \"facetSearch\";\n SearchPageEvents[\"facetSelect\"] = \"facetSelect\";\n SearchPageEvents[\"facetSelectAll\"] = \"facetSelectAll\";\n SearchPageEvents[\"facetDeselect\"] = \"facetDeselect\";\n SearchPageEvents[\"facetExclude\"] = \"facetExclude\";\n SearchPageEvents[\"facetUnexclude\"] = \"facetUnexclude\";\n SearchPageEvents[\"facetUpdateSort\"] = \"facetUpdateSort\";\n SearchPageEvents[\"facetShowMore\"] = \"showMoreFacetResults\";\n SearchPageEvents[\"facetShowLess\"] = \"showLessFacetResults\";\n SearchPageEvents[\"queryError\"] = \"query\";\n SearchPageEvents[\"queryErrorBack\"] = \"errorBack\";\n SearchPageEvents[\"queryErrorClear\"] = \"errorClearQuery\";\n SearchPageEvents[\"queryErrorRetry\"] = \"errorRetry\";\n SearchPageEvents[\"recommendation\"] = \"recommendation\";\n SearchPageEvents[\"recommendationInterfaceLoad\"] = \"recommendationInterfaceLoad\";\n SearchPageEvents[\"recommendationOpen\"] = \"recommendationOpen\";\n SearchPageEvents[\"likeSmartSnippet\"] = \"likeSmartSnippet\";\n SearchPageEvents[\"dislikeSmartSnippet\"] = \"dislikeSmartSnippet\";\n SearchPageEvents[\"expandSmartSnippet\"] = \"expandSmartSnippet\";\n SearchPageEvents[\"collapseSmartSnippet\"] = \"collapseSmartSnippet\";\n SearchPageEvents[\"openSmartSnippetFeedbackModal\"] = \"openSmartSnippetFeedbackModal\";\n SearchPageEvents[\"closeSmartSnippetFeedbackModal\"] = \"closeSmartSnippetFeedbackModal\";\n SearchPageEvents[\"sendSmartSnippetReason\"] = \"sendSmartSnippetReason\";\n SearchPageEvents[\"expandSmartSnippetSuggestion\"] = \"expandSmartSnippetSuggestion\";\n SearchPageEvents[\"collapseSmartSnippetSuggestion\"] = \"collapseSmartSnippetSuggestion\";\n SearchPageEvents[\"showMoreSmartSnippetSuggestion\"] = \"showMoreSmartSnippetSuggestion\";\n SearchPageEvents[\"showLessSmartSnippetSuggestion\"] = \"showLessSmartSnippetSuggestion\";\n SearchPageEvents[\"openSmartSnippetSource\"] = \"openSmartSnippetSource\";\n SearchPageEvents[\"openSmartSnippetSuggestionSource\"] = \"openSmartSnippetSuggestionSource\";\n SearchPageEvents[\"openSmartSnippetInlineLink\"] = \"openSmartSnippetInlineLink\";\n SearchPageEvents[\"openSmartSnippetSuggestionInlineLink\"] = \"openSmartSnippetSuggestionInlineLink\";\n SearchPageEvents[\"recentQueryClick\"] = \"recentQueriesClick\";\n SearchPageEvents[\"clearRecentQueries\"] = \"clearRecentQueries\";\n SearchPageEvents[\"recentResultClick\"] = \"recentResultClick\";\n SearchPageEvents[\"clearRecentResults\"] = \"clearRecentResults\";\n SearchPageEvents[\"noResultsBack\"] = \"noResultsBack\";\n SearchPageEvents[\"showMoreFoldedResults\"] = \"showMoreFoldedResults\";\n SearchPageEvents[\"showLessFoldedResults\"] = \"showLessFoldedResults\";\n SearchPageEvents[\"copyToClipboard\"] = \"copyToClipboard\";\n SearchPageEvents[\"caseSendEmail\"] = \"Case.SendEmail\";\n SearchPageEvents[\"feedItemTextPost\"] = \"FeedItem.TextPost\";\n SearchPageEvents[\"caseAttach\"] = \"caseAttach\";\n SearchPageEvents[\"caseDetach\"] = \"caseDetach\";\n SearchPageEvents[\"retryGeneratedAnswer\"] = \"retryGeneratedAnswer\";\n SearchPageEvents[\"likeGeneratedAnswer\"] = \"likeGeneratedAnswer\";\n SearchPageEvents[\"dislikeGeneratedAnswer\"] = \"dislikeGeneratedAnswer\";\n SearchPageEvents[\"openGeneratedAnswerSource\"] = \"openGeneratedAnswerSource\";\n SearchPageEvents[\"generatedAnswerStreamEnd\"] = \"generatedAnswerStreamEnd\";\n SearchPageEvents[\"generatedAnswerSourceHover\"] = \"generatedAnswerSourceHover\";\n SearchPageEvents[\"generatedAnswerCopyToClipboard\"] = \"generatedAnswerCopyToClipboard\";\n SearchPageEvents[\"generatedAnswerHideAnswers\"] = \"generatedAnswerHideAnswers\";\n SearchPageEvents[\"generatedAnswerShowAnswers\"] = \"generatedAnswerShowAnswers\";\n SearchPageEvents[\"generatedAnswerExpand\"] = \"generatedAnswerExpand\";\n SearchPageEvents[\"generatedAnswerCollapse\"] = \"generatedAnswerCollapse\";\n SearchPageEvents[\"generatedAnswerFeedbackSubmit\"] = \"generatedAnswerFeedbackSubmit\";\n SearchPageEvents[\"rephraseGeneratedAnswer\"] = \"rephraseGeneratedAnswer\";\n SearchPageEvents[\"generatedAnswerFeedbackSubmitV2\"] = \"generatedAnswerFeedbackSubmitV2\";\n SearchPageEvents[\"generatedAnswerCitationClick\"] = \"generatedAnswerCitationClick\";\n})(SearchPageEvents || (SearchPageEvents = {}));\nconst CustomEventsTypes = {\n [SearchPageEvents.triggerNotify]: 'queryPipelineTriggers',\n [SearchPageEvents.triggerExecute]: 'queryPipelineTriggers',\n [SearchPageEvents.triggerQuery]: 'queryPipelineTriggers',\n [SearchPageEvents.triggerRedirect]: 'queryPipelineTriggers',\n [SearchPageEvents.queryError]: 'errors',\n [SearchPageEvents.queryErrorBack]: 'errors',\n [SearchPageEvents.queryErrorClear]: 'errors',\n [SearchPageEvents.queryErrorRetry]: 'errors',\n [SearchPageEvents.pagerNext]: 'getMoreResults',\n [SearchPageEvents.pagerPrevious]: 'getMoreResults',\n [SearchPageEvents.pagerNumber]: 'getMoreResults',\n [SearchPageEvents.pagerResize]: 'getMoreResults',\n [SearchPageEvents.pagerScrolling]: 'getMoreResults',\n [SearchPageEvents.facetSearch]: 'facet',\n [SearchPageEvents.facetShowLess]: 'facet',\n [SearchPageEvents.facetShowMore]: 'facet',\n [SearchPageEvents.recommendation]: 'recommendation',\n [SearchPageEvents.likeSmartSnippet]: 'smartSnippet',\n [SearchPageEvents.dislikeSmartSnippet]: 'smartSnippet',\n [SearchPageEvents.expandSmartSnippet]: 'smartSnippet',\n [SearchPageEvents.collapseSmartSnippet]: 'smartSnippet',\n [SearchPageEvents.openSmartSnippetFeedbackModal]: 'smartSnippet',\n [SearchPageEvents.closeSmartSnippetFeedbackModal]: 'smartSnippet',\n [SearchPageEvents.sendSmartSnippetReason]: 'smartSnippet',\n [SearchPageEvents.expandSmartSnippetSuggestion]: 'smartSnippetSuggestions',\n [SearchPageEvents.collapseSmartSnippetSuggestion]: 'smartSnippetSuggestions',\n [SearchPageEvents.showMoreSmartSnippetSuggestion]: 'smartSnippetSuggestions',\n [SearchPageEvents.showLessSmartSnippetSuggestion]: 'smartSnippetSuggestions',\n [SearchPageEvents.clearRecentQueries]: 'recentQueries',\n [SearchPageEvents.recentResultClick]: 'recentlyClickedDocuments',\n [SearchPageEvents.clearRecentResults]: 'recentlyClickedDocuments',\n [SearchPageEvents.showLessFoldedResults]: 'folding',\n [SearchPageEvents.caseDetach]: 'case',\n [SearchPageEvents.likeGeneratedAnswer]: 'generatedAnswer',\n [SearchPageEvents.dislikeGeneratedAnswer]: 'generatedAnswer',\n [SearchPageEvents.openGeneratedAnswerSource]: 'generatedAnswer',\n [SearchPageEvents.generatedAnswerStreamEnd]: 'generatedAnswer',\n [SearchPageEvents.generatedAnswerSourceHover]: 'generatedAnswer',\n [SearchPageEvents.generatedAnswerCopyToClipboard]: 'generatedAnswer',\n [SearchPageEvents.generatedAnswerHideAnswers]: 'generatedAnswer',\n [SearchPageEvents.generatedAnswerShowAnswers]: 'generatedAnswer',\n [SearchPageEvents.generatedAnswerExpand]: 'generatedAnswer',\n [SearchPageEvents.generatedAnswerCollapse]: 'generatedAnswer',\n [SearchPageEvents.generatedAnswerFeedbackSubmit]: 'generatedAnswer',\n [SearchPageEvents.generatedAnswerFeedbackSubmitV2]: 'generatedAnswer',\n [InsightEvents.expandToFullUI]: 'interface',\n [InsightEvents.openUserActions]: 'User Actions',\n [InsightEvents.showPrecedingSessions]: 'User Actions',\n [InsightEvents.showFollowingSessions]: 'User Actions',\n [InsightEvents.clickViewedDocument]: 'User Actions',\n [InsightEvents.clickPageView]: 'User Actions',\n [InsightEvents.createArticle]: 'createArticle',\n};\n\nclass NoopAnalytics {\n constructor() {\n this.runtime = new NoopRuntime();\n this.currentVisitorId = '';\n }\n getPayload() {\n return Promise.resolve();\n }\n getParameters() {\n return Promise.resolve();\n }\n makeEvent(eventType) {\n return Promise.resolve({ eventType: eventType, payload: null, log: () => Promise.resolve() });\n }\n sendEvent() {\n return Promise.resolve();\n }\n makeSearchEvent() {\n return this.makeEvent(EventType.search);\n }\n sendSearchEvent() {\n return Promise.resolve();\n }\n makeClickEvent() {\n return this.makeEvent(EventType.click);\n }\n sendClickEvent() {\n return Promise.resolve();\n }\n makeCustomEvent() {\n return this.makeEvent(EventType.custom);\n }\n sendCustomEvent() {\n return Promise.resolve();\n }\n makeViewEvent() {\n return this.makeEvent(EventType.view);\n }\n sendViewEvent() {\n return Promise.resolve();\n }\n getVisit() {\n return Promise.resolve({ id: '', visitorId: '' });\n }\n getHealth() {\n return Promise.resolve({ status: '' });\n }\n registerBeforeSendEventHook() { }\n registerAfterSendEventHook() { }\n addEventTypeMapping() { }\n get version() {\n return libVersion;\n }\n}\n\nfunction filterConsecutiveRepeatedValues(rawData) {\n let prev = '';\n return rawData.filter((value) => {\n const isDifferent = value !== prev;\n prev = value;\n return isDifferent;\n });\n}\nfunction removeSemicolons(rawData) {\n return rawData.map((value) => {\n return value.replace(/;/g, '');\n });\n}\nfunction getDataString(data) {\n const ANALYTICS_LENGTH_LIMIT = 256;\n const formattedData = data.join(';');\n if (formattedData.length <= ANALYTICS_LENGTH_LIMIT) {\n return formattedData;\n }\n return getDataString(data.slice(1));\n}\nconst formatArrayForCoveoCustomData = (rawData) => {\n const dataWithoutSemicolons = removeSemicolons(rawData);\n const dataWithoutRepeatedValues = filterConsecutiveRepeatedValues(dataWithoutSemicolons);\n return getDataString(dataWithoutRepeatedValues);\n};\n\nfunction formatOmniboxMetadata(meta) {\n const partialQueries = typeof meta.partialQueries === 'string'\n ? meta.partialQueries\n : formatArrayForCoveoCustomData(meta.partialQueries);\n const suggestions = typeof meta.suggestions === 'string' ? meta.suggestions : formatArrayForCoveoCustomData(meta.suggestions);\n return Object.assign(Object.assign({}, meta), { partialQueries,\n suggestions });\n}\n\nclass CoveoSearchPageClient {\n constructor(opts, provider) {\n this.opts = opts;\n this.provider = provider;\n const shouldDisableAnalytics = opts.enableAnalytics === false || doNotTrack();\n this.coveoAnalyticsClient = shouldDisableAnalytics ? new NoopAnalytics() : new CoveoAnalyticsClient(opts);\n }\n disable() {\n this.coveoAnalyticsClient = new NoopAnalytics();\n }\n enable() {\n this.coveoAnalyticsClient = new CoveoAnalyticsClient(this.opts);\n }\n makeInterfaceLoad() {\n return this.makeSearchEvent(SearchPageEvents.interfaceLoad);\n }\n logInterfaceLoad() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeInterfaceLoad()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeRecommendationInterfaceLoad() {\n return this.makeSearchEvent(SearchPageEvents.recommendationInterfaceLoad);\n }\n logRecommendationInterfaceLoad() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeRecommendationInterfaceLoad()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeRecommendation() {\n return this.makeCustomEvent(SearchPageEvents.recommendation);\n }\n logRecommendation() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeRecommendation()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeRecommendationOpen(info, identifier) {\n return this.makeClickEvent(SearchPageEvents.recommendationOpen, info, identifier);\n }\n logRecommendationOpen(info, identifier) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeRecommendationOpen(info, identifier)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeStaticFilterClearAll(meta) {\n return this.makeSearchEvent(SearchPageEvents.staticFilterClearAll, meta);\n }\n logStaticFilterClearAll(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeStaticFilterClearAll(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeStaticFilterSelect(meta) {\n return this.makeSearchEvent(SearchPageEvents.staticFilterSelect, meta);\n }\n logStaticFilterSelect(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeStaticFilterSelect(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeStaticFilterDeselect(meta) {\n return this.makeSearchEvent(SearchPageEvents.staticFilterDeselect, meta);\n }\n logStaticFilterDeselect(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeStaticFilterDeselect(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeFetchMoreResults() {\n return this.makeCustomEvent(SearchPageEvents.pagerScrolling, { type: 'getMoreResults' });\n }\n logFetchMoreResults() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeFetchMoreResults()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeInterfaceChange(metadata) {\n return this.makeSearchEvent(SearchPageEvents.interfaceChange, metadata);\n }\n logInterfaceChange(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeInterfaceChange(metadata)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeDidYouMeanAutomatic() {\n return this.makeSearchEvent(SearchPageEvents.didyoumeanAutomatic);\n }\n logDidYouMeanAutomatic() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeDidYouMeanAutomatic()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeDidYouMeanClick() {\n return this.makeSearchEvent(SearchPageEvents.didyoumeanClick);\n }\n logDidYouMeanClick() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeDidYouMeanClick()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeResultsSort(metadata) {\n return this.makeSearchEvent(SearchPageEvents.resultsSort, metadata);\n }\n logResultsSort(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeResultsSort(metadata)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeSearchboxSubmit() {\n return this.makeSearchEvent(SearchPageEvents.searchboxSubmit);\n }\n logSearchboxSubmit() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeSearchboxSubmit()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeSearchboxClear() {\n return this.makeSearchEvent(SearchPageEvents.searchboxClear);\n }\n logSearchboxClear() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeSearchboxClear()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeSearchboxAsYouType() {\n return this.makeSearchEvent(SearchPageEvents.searchboxAsYouType);\n }\n logSearchboxAsYouType() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeSearchboxAsYouType()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeBreadcrumbFacet(metadata) {\n return this.makeSearchEvent(SearchPageEvents.breadcrumbFacet, metadata);\n }\n logBreadcrumbFacet(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeBreadcrumbFacet(metadata)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeBreadcrumbResetAll() {\n return this.makeSearchEvent(SearchPageEvents.breadcrumbResetAll);\n }\n logBreadcrumbResetAll() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeBreadcrumbResetAll()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeDocumentQuickview(info, identifier) {\n return this.makeClickEvent(SearchPageEvents.documentQuickview, info, identifier);\n }\n logDocumentQuickview(info, identifier) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeDocumentQuickview(info, identifier)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeDocumentOpen(info, identifier) {\n return this.makeClickEvent(SearchPageEvents.documentOpen, info, identifier);\n }\n logDocumentOpen(info, identifier) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeDocumentOpen(info, identifier)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeOmniboxAnalytics(meta) {\n return this.makeSearchEvent(SearchPageEvents.omniboxAnalytics, formatOmniboxMetadata(meta));\n }\n logOmniboxAnalytics(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeOmniboxAnalytics(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeOmniboxFromLink(meta) {\n return this.makeSearchEvent(SearchPageEvents.omniboxFromLink, formatOmniboxMetadata(meta));\n }\n logOmniboxFromLink(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeOmniboxFromLink(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeSearchFromLink() {\n return this.makeSearchEvent(SearchPageEvents.searchFromLink);\n }\n logSearchFromLink() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeSearchFromLink()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeTriggerNotify(meta) {\n return this.makeCustomEvent(SearchPageEvents.triggerNotify, meta);\n }\n logTriggerNotify(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeTriggerNotify(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeTriggerExecute(meta) {\n return this.makeCustomEvent(SearchPageEvents.triggerExecute, meta);\n }\n logTriggerExecute(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeTriggerExecute(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeTriggerQuery() {\n return this.makeCustomEvent(SearchPageEvents.triggerQuery, { query: this.provider.getSearchEventRequestPayload().queryText }, 'queryPipelineTriggers');\n }\n logTriggerQuery() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeTriggerQuery()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeUndoTriggerQuery(meta) {\n return this.makeSearchEvent(SearchPageEvents.undoTriggerQuery, meta);\n }\n logUndoTriggerQuery(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeUndoTriggerQuery(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeTriggerRedirect(meta) {\n return this.makeCustomEvent(SearchPageEvents.triggerRedirect, Object.assign(Object.assign({}, meta), { query: this.provider.getSearchEventRequestPayload().queryText }));\n }\n logTriggerRedirect(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeTriggerRedirect(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makePagerResize(meta) {\n return this.makeCustomEvent(SearchPageEvents.pagerResize, meta);\n }\n logPagerResize(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makePagerResize(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makePagerNumber(meta) {\n return this.makeCustomEvent(SearchPageEvents.pagerNumber, meta);\n }\n logPagerNumber(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makePagerNumber(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makePagerNext(meta) {\n return this.makeCustomEvent(SearchPageEvents.pagerNext, meta);\n }\n logPagerNext(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makePagerNext(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makePagerPrevious(meta) {\n return this.makeCustomEvent(SearchPageEvents.pagerPrevious, meta);\n }\n logPagerPrevious(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makePagerPrevious(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makePagerScrolling() {\n return this.makeCustomEvent(SearchPageEvents.pagerScrolling);\n }\n logPagerScrolling() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makePagerScrolling()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeFacetClearAll(meta) {\n return this.makeSearchEvent(SearchPageEvents.facetClearAll, meta);\n }\n logFacetClearAll(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeFacetClearAll(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeFacetSearch(meta) {\n return this.makeSearchEvent(SearchPageEvents.facetSearch, meta);\n }\n logFacetSearch(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeFacetSearch(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeFacetSelect(meta) {\n return this.makeSearchEvent(SearchPageEvents.facetSelect, meta);\n }\n logFacetSelect(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeFacetSelect(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeFacetDeselect(meta) {\n return this.makeSearchEvent(SearchPageEvents.facetDeselect, meta);\n }\n logFacetDeselect(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeFacetDeselect(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeFacetExclude(meta) {\n return this.makeSearchEvent(SearchPageEvents.facetExclude, meta);\n }\n logFacetExclude(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeFacetExclude(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeFacetUnexclude(meta) {\n return this.makeSearchEvent(SearchPageEvents.facetUnexclude, meta);\n }\n logFacetUnexclude(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeFacetUnexclude(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeFacetSelectAll(meta) {\n return this.makeSearchEvent(SearchPageEvents.facetSelectAll, meta);\n }\n logFacetSelectAll(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeFacetSelectAll(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeFacetUpdateSort(meta) {\n return this.makeSearchEvent(SearchPageEvents.facetUpdateSort, meta);\n }\n logFacetUpdateSort(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeFacetUpdateSort(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeFacetShowMore(meta) {\n return this.makeCustomEvent(SearchPageEvents.facetShowMore, meta);\n }\n logFacetShowMore(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeFacetShowMore(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeFacetShowLess(meta) {\n return this.makeCustomEvent(SearchPageEvents.facetShowLess, meta);\n }\n logFacetShowLess(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeFacetShowLess(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeQueryError(meta) {\n return this.makeCustomEvent(SearchPageEvents.queryError, meta);\n }\n logQueryError(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeQueryError(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeQueryErrorBack() {\n return __awaiter(this, void 0, void 0, function* () {\n const customEventBuilder = yield this.makeCustomEvent(SearchPageEvents.queryErrorBack);\n return {\n description: customEventBuilder.description,\n log: () => __awaiter(this, void 0, void 0, function* () {\n yield customEventBuilder.log({ searchUID: this.provider.getSearchUID() });\n return this.logSearchEvent(SearchPageEvents.queryErrorBack);\n }),\n };\n });\n }\n logQueryErrorBack() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeQueryErrorBack()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeQueryErrorRetry() {\n return __awaiter(this, void 0, void 0, function* () {\n const customEventBuilder = yield this.makeCustomEvent(SearchPageEvents.queryErrorRetry);\n return {\n description: customEventBuilder.description,\n log: () => __awaiter(this, void 0, void 0, function* () {\n yield customEventBuilder.log({ searchUID: this.provider.getSearchUID() });\n return this.logSearchEvent(SearchPageEvents.queryErrorRetry);\n }),\n };\n });\n }\n logQueryErrorRetry() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeQueryErrorRetry()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeQueryErrorClear() {\n return __awaiter(this, void 0, void 0, function* () {\n const customEventBuilder = yield this.makeCustomEvent(SearchPageEvents.queryErrorClear);\n return {\n description: customEventBuilder.description,\n log: () => __awaiter(this, void 0, void 0, function* () {\n yield customEventBuilder.log({ searchUID: this.provider.getSearchUID() });\n return this.logSearchEvent(SearchPageEvents.queryErrorClear);\n }),\n };\n });\n }\n logQueryErrorClear() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeQueryErrorClear()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeLikeSmartSnippet() {\n return this.makeCustomEvent(SearchPageEvents.likeSmartSnippet);\n }\n logLikeSmartSnippet() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeLikeSmartSnippet()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeDislikeSmartSnippet() {\n return this.makeCustomEvent(SearchPageEvents.dislikeSmartSnippet);\n }\n logDislikeSmartSnippet() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeDislikeSmartSnippet()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeExpandSmartSnippet() {\n return this.makeCustomEvent(SearchPageEvents.expandSmartSnippet);\n }\n logExpandSmartSnippet() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeExpandSmartSnippet()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeCollapseSmartSnippet() {\n return this.makeCustomEvent(SearchPageEvents.collapseSmartSnippet);\n }\n logCollapseSmartSnippet() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeCollapseSmartSnippet()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeOpenSmartSnippetFeedbackModal() {\n return this.makeCustomEvent(SearchPageEvents.openSmartSnippetFeedbackModal);\n }\n logOpenSmartSnippetFeedbackModal() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeOpenSmartSnippetFeedbackModal()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeCloseSmartSnippetFeedbackModal() {\n return this.makeCustomEvent(SearchPageEvents.closeSmartSnippetFeedbackModal);\n }\n logCloseSmartSnippetFeedbackModal() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeCloseSmartSnippetFeedbackModal()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeSmartSnippetFeedbackReason(reason, details) {\n return this.makeCustomEvent(SearchPageEvents.sendSmartSnippetReason, { reason, details });\n }\n logSmartSnippetFeedbackReason(reason, details) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeSmartSnippetFeedbackReason(reason, details)).log({\n searchUID: this.provider.getSearchUID(),\n });\n });\n }\n makeExpandSmartSnippetSuggestion(snippet) {\n return this.makeCustomEvent(SearchPageEvents.expandSmartSnippetSuggestion, 'documentId' in snippet ? snippet : { documentId: snippet });\n }\n logExpandSmartSnippetSuggestion(snippet) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeExpandSmartSnippetSuggestion(snippet)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeCollapseSmartSnippetSuggestion(snippet) {\n return this.makeCustomEvent(SearchPageEvents.collapseSmartSnippetSuggestion, 'documentId' in snippet ? snippet : { documentId: snippet });\n }\n logCollapseSmartSnippetSuggestion(snippet) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeCollapseSmartSnippetSuggestion(snippet)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeShowMoreSmartSnippetSuggestion(snippet) {\n return this.makeCustomEvent(SearchPageEvents.showMoreSmartSnippetSuggestion, snippet);\n }\n logShowMoreSmartSnippetSuggestion(snippet) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeShowMoreSmartSnippetSuggestion(snippet)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeShowLessSmartSnippetSuggestion(snippet) {\n return this.makeCustomEvent(SearchPageEvents.showLessSmartSnippetSuggestion, snippet);\n }\n logShowLessSmartSnippetSuggestion(snippet) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeShowLessSmartSnippetSuggestion(snippet)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeOpenSmartSnippetSource(info, identifier) {\n return this.makeClickEvent(SearchPageEvents.openSmartSnippetSource, info, identifier);\n }\n logOpenSmartSnippetSource(info, identifier) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeOpenSmartSnippetSource(info, identifier)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeOpenSmartSnippetSuggestionSource(info, snippet) {\n return this.makeClickEvent(SearchPageEvents.openSmartSnippetSuggestionSource, info, { contentIDKey: snippet.documentId.contentIdKey, contentIDValue: snippet.documentId.contentIdValue }, snippet);\n }\n makeCopyToClipboard(info, identifier) {\n return this.makeClickEvent(SearchPageEvents.copyToClipboard, info, identifier);\n }\n logCopyToClipboard(info, identifier) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeCopyToClipboard(info, identifier)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n logOpenSmartSnippetSuggestionSource(info, snippet) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeOpenSmartSnippetSuggestionSource(info, snippet)).log({\n searchUID: this.provider.getSearchUID(),\n });\n });\n }\n makeOpenSmartSnippetInlineLink(info, identifierAndLink) {\n return this.makeClickEvent(SearchPageEvents.openSmartSnippetInlineLink, info, { contentIDKey: identifierAndLink.contentIDKey, contentIDValue: identifierAndLink.contentIDValue }, identifierAndLink);\n }\n logOpenSmartSnippetInlineLink(info, identifierAndLink) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeOpenSmartSnippetInlineLink(info, identifierAndLink)).log({\n searchUID: this.provider.getSearchUID(),\n });\n });\n }\n makeOpenSmartSnippetSuggestionInlineLink(info, snippetAndLink) {\n return this.makeClickEvent(SearchPageEvents.openSmartSnippetSuggestionInlineLink, info, {\n contentIDKey: snippetAndLink.documentId.contentIdKey,\n contentIDValue: snippetAndLink.documentId.contentIdValue,\n }, snippetAndLink);\n }\n logOpenSmartSnippetSuggestionInlineLink(info, snippetAndLink) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeOpenSmartSnippetSuggestionInlineLink(info, snippetAndLink)).log({\n searchUID: this.provider.getSearchUID(),\n });\n });\n }\n makeRecentQueryClick() {\n return this.makeSearchEvent(SearchPageEvents.recentQueryClick);\n }\n logRecentQueryClick() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeRecentQueryClick()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeClearRecentQueries() {\n return this.makeCustomEvent(SearchPageEvents.clearRecentQueries);\n }\n logClearRecentQueries() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeClearRecentQueries()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeRecentResultClick(info, identifier) {\n return this.makeCustomEvent(SearchPageEvents.recentResultClick, { info, identifier });\n }\n logRecentResultClick(info, identifier) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeRecentResultClick(info, identifier)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeClearRecentResults() {\n return this.makeCustomEvent(SearchPageEvents.clearRecentResults);\n }\n logClearRecentResults() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeClearRecentResults()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeNoResultsBack() {\n return this.makeSearchEvent(SearchPageEvents.noResultsBack);\n }\n logNoResultsBack() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeNoResultsBack()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeShowMoreFoldedResults(info, identifier) {\n return this.makeClickEvent(SearchPageEvents.showMoreFoldedResults, info, identifier);\n }\n logShowMoreFoldedResults(info, identifier) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeShowMoreFoldedResults(info, identifier)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeShowLessFoldedResults() {\n return this.makeCustomEvent(SearchPageEvents.showLessFoldedResults);\n }\n logShowLessFoldedResults() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeShowLessFoldedResults()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeEventDescription(preparedEvent, actionCause) {\n var _a;\n return { actionCause, customData: (_a = preparedEvent.payload) === null || _a === void 0 ? void 0 : _a.customData };\n }\n makeCustomEvent(event, metadata, eventType = CustomEventsTypes[event]) {\n return __awaiter(this, void 0, void 0, function* () {\n this.coveoAnalyticsClient.getParameters;\n const customData = Object.assign(Object.assign({}, this.provider.getBaseMetadata()), metadata);\n const request = Object.assign(Object.assign({}, (yield this.getBaseEventRequest(customData))), { eventType, eventValue: event });\n const preparedEvent = yield this.coveoAnalyticsClient.makeCustomEvent(request);\n return {\n description: this.makeEventDescription(preparedEvent, event),\n log: ({ searchUID }) => preparedEvent.log({ lastSearchQueryUid: searchUID }),\n };\n });\n }\n logCustomEvent(event, metadata, eventType = CustomEventsTypes[event]) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeCustomEvent(event, metadata, eventType)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeCustomEventWithType(eventValue, eventType, metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n const customData = Object.assign(Object.assign({}, this.provider.getBaseMetadata()), metadata);\n const payload = Object.assign(Object.assign({}, (yield this.getBaseEventRequest(customData))), { eventType,\n eventValue });\n const preparedEvent = yield this.coveoAnalyticsClient.makeCustomEvent(payload);\n return {\n description: this.makeEventDescription(preparedEvent, eventValue),\n log: ({ searchUID }) => preparedEvent.log({ lastSearchQueryUid: searchUID }),\n };\n });\n }\n logCustomEventWithType(eventValue, eventType, metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeCustomEventWithType(eventValue, eventType, metadata)).log({\n searchUID: this.provider.getSearchUID(),\n });\n });\n }\n logSearchEvent(event, metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeSearchEvent(event, metadata)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeSearchEvent(event, metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n const request = yield this.getBaseSearchEventRequest(event, metadata);\n const preparedEvent = yield this.coveoAnalyticsClient.makeSearchEvent(request);\n return {\n description: this.makeEventDescription(preparedEvent, event),\n log: ({ searchUID }) => preparedEvent.log({ searchQueryUid: searchUID }),\n };\n });\n }\n makeClickEvent(event, info, identifier, metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n const request = Object.assign(Object.assign(Object.assign({}, info), (yield this.getBaseEventRequest(Object.assign(Object.assign({}, identifier), metadata)))), { queryPipeline: this.provider.getPipeline(), actionCause: event });\n const preparedEvent = yield this.coveoAnalyticsClient.makeClickEvent(request);\n return {\n description: this.makeEventDescription(preparedEvent, event),\n log: ({ searchUID }) => preparedEvent.log({ searchQueryUid: searchUID }),\n };\n });\n }\n logClickEvent(event, info, identifier, metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeClickEvent(event, info, identifier, metadata)).log({\n searchUID: this.provider.getSearchUID(),\n });\n });\n }\n getBaseSearchEventRequest(event, metadata) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function* () {\n return Object.assign(Object.assign(Object.assign({}, (yield this.getBaseEventRequest(Object.assign(Object.assign({}, metadata), (_b = (_a = this.provider).getGeneratedAnswerMetadata) === null || _b === void 0 ? void 0 : _b.call(_a))))), this.provider.getSearchEventRequestPayload()), { queryPipeline: this.provider.getPipeline(), actionCause: event });\n });\n }\n getBaseEventRequest(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n const customData = Object.assign(Object.assign({}, this.provider.getBaseMetadata()), metadata);\n return Object.assign(Object.assign(Object.assign({}, this.getOrigins()), this.getSplitTestRun()), { customData, language: this.provider.getLanguage(), facetState: this.provider.getFacetState ? this.provider.getFacetState() : [], anonymous: this.provider.getIsAnonymous(), clientId: yield this.getClientId() });\n });\n }\n getOrigins() {\n var _a, _b;\n return {\n originContext: (_b = (_a = this.provider).getOriginContext) === null || _b === void 0 ? void 0 : _b.call(_a),\n originLevel1: this.provider.getOriginLevel1(),\n originLevel2: this.provider.getOriginLevel2(),\n originLevel3: this.provider.getOriginLevel3(),\n };\n }\n getClientId() {\n return this.coveoAnalyticsClient instanceof CoveoAnalyticsClient\n ? this.coveoAnalyticsClient.getCurrentVisitorId()\n : undefined;\n }\n getSplitTestRun() {\n const splitTestRunName = this.provider.getSplitTestRunName ? this.provider.getSplitTestRunName() : '';\n const splitTestRunVersion = this.provider.getSplitTestRunVersion ? this.provider.getSplitTestRunVersion() : '';\n return Object.assign(Object.assign({}, (splitTestRunName && { splitTestRunName })), (splitTestRunVersion && { splitTestRunVersion }));\n }\n makeLikeGeneratedAnswer(metadata) {\n return this.makeCustomEvent(SearchPageEvents.likeGeneratedAnswer, metadata);\n }\n logLikeGeneratedAnswer(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeLikeGeneratedAnswer(metadata)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeDislikeGeneratedAnswer(metadata) {\n return this.makeCustomEvent(SearchPageEvents.dislikeGeneratedAnswer, metadata);\n }\n logDislikeGeneratedAnswer(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeDislikeGeneratedAnswer(metadata)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeOpenGeneratedAnswerSource(metadata) {\n return this.makeCustomEvent(SearchPageEvents.openGeneratedAnswerSource, metadata);\n }\n logOpenGeneratedAnswerSource(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeOpenGeneratedAnswerSource(metadata)).log({\n searchUID: this.provider.getSearchUID(),\n });\n });\n }\n makeGeneratedAnswerCitationClick(info, citation) {\n return this.makeClickEvent(SearchPageEvents.generatedAnswerCitationClick, Object.assign(Object.assign({}, info), { documentPosition: 1 }), { contentIDKey: citation.documentId.contentIdKey, contentIDValue: citation.documentId.contentIdValue }, citation);\n }\n logGeneratedAnswerCitationClick(info, citation) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeGeneratedAnswerCitationClick(info, citation)).log({\n searchUID: this.provider.getSearchUID(),\n });\n });\n }\n makeGeneratedAnswerSourceHover(metadata) {\n return this.makeCustomEvent(SearchPageEvents.generatedAnswerSourceHover, metadata);\n }\n logGeneratedAnswerSourceHover(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeGeneratedAnswerSourceHover(metadata)).log({\n searchUID: this.provider.getSearchUID(),\n });\n });\n }\n makeGeneratedAnswerCopyToClipboard(metadata) {\n return this.makeCustomEvent(SearchPageEvents.generatedAnswerCopyToClipboard, metadata);\n }\n logGeneratedAnswerCopyToClipboard(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeGeneratedAnswerCopyToClipboard(metadata)).log({\n searchUID: this.provider.getSearchUID(),\n });\n });\n }\n makeGeneratedAnswerHideAnswers(metadata) {\n return this.makeCustomEvent(SearchPageEvents.generatedAnswerHideAnswers, metadata);\n }\n logGeneratedAnswerHideAnswers(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeGeneratedAnswerHideAnswers(metadata)).log({\n searchUID: this.provider.getSearchUID(),\n });\n });\n }\n makeGeneratedAnswerShowAnswers(metadata) {\n return this.makeCustomEvent(SearchPageEvents.generatedAnswerShowAnswers, metadata);\n }\n logGeneratedAnswerShowAnswers(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeGeneratedAnswerShowAnswers(metadata)).log({\n searchUID: this.provider.getSearchUID(),\n });\n });\n }\n makeGeneratedAnswerExpand(metadata) {\n return this.makeCustomEvent(SearchPageEvents.generatedAnswerExpand, metadata);\n }\n logGeneratedAnswerExpand(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeGeneratedAnswerExpand(metadata)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeGeneratedAnswerCollapse(metadata) {\n return this.makeCustomEvent(SearchPageEvents.generatedAnswerCollapse, metadata);\n }\n logGeneratedAnswerCollapse(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeGeneratedAnswerCollapse(metadata)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeGeneratedAnswerFeedbackSubmit(meta) {\n return this.makeCustomEvent(SearchPageEvents.generatedAnswerFeedbackSubmit, meta);\n }\n logGeneratedAnswerFeedbackSubmit(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeGeneratedAnswerFeedbackSubmit(meta)).log({\n searchUID: this.provider.getSearchUID(),\n });\n });\n }\n makeGeneratedAnswerFeedbackSubmitV2(metadata) {\n return this.makeCustomEvent(SearchPageEvents.generatedAnswerFeedbackSubmitV2, metadata);\n }\n logGeneratedAnswerFeedbackSubmitV2(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeGeneratedAnswerFeedbackSubmitV2(meta)).log({\n searchUID: this.provider.getSearchUID(),\n });\n });\n }\n makeRephraseGeneratedAnswer(meta) {\n return this.makeSearchEvent(SearchPageEvents.rephraseGeneratedAnswer, meta);\n }\n logRephraseGeneratedAnswer(meta) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeRephraseGeneratedAnswer(meta)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeRetryGeneratedAnswer() {\n return this.makeSearchEvent(SearchPageEvents.retryGeneratedAnswer);\n }\n logRetryGeneratedAnswer() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeRetryGeneratedAnswer()).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n makeGeneratedAnswerStreamEnd(metadata) {\n return this.makeCustomEvent(SearchPageEvents.generatedAnswerStreamEnd, metadata);\n }\n logGeneratedAnswerStreamEnd(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.makeGeneratedAnswerStreamEnd(metadata)).log({ searchUID: this.provider.getSearchUID() });\n });\n }\n}\n\nconst SVCPluginEventTypes = Object.assign({}, BasePluginEventTypes);\nconst allSVCEventTypes = Object.keys(SVCPluginEventTypes).map((key) => SVCPluginEventTypes[key]);\nclass SVCPlugin extends BasePlugin {\n constructor({ client, uuidGenerator = v4 }) {\n super({ client, uuidGenerator });\n this.ticket = {};\n }\n getApi(name) {\n const superCall = super.getApi(name);\n if (superCall !== null)\n return superCall;\n switch (name) {\n case 'setTicket':\n return this.setTicket;\n default:\n return null;\n }\n }\n addHooks() {\n this.addHooksForEvent();\n this.addHooksForPageView();\n this.addHooksForSVCEvents();\n }\n setTicket(ticket) {\n this.ticket = ticket;\n }\n clearPluginData() {\n this.ticket = {};\n }\n addHooksForSVCEvents() {\n this.client.registerBeforeSendEventHook((eventType, ...[payload]) => {\n return allSVCEventTypes.indexOf(eventType) !== -1 ? this.addSVCDataToPayload(eventType, payload) : payload;\n });\n this.client.registerAfterSendEventHook((eventType, ...[payload]) => {\n if (allSVCEventTypes.indexOf(eventType) !== -1) {\n this.updateLocationInformation(eventType, payload);\n }\n return payload;\n });\n }\n addHooksForPageView() {\n this.client.addEventTypeMapping(SVCPluginEventTypes.pageview, {\n newEventType: EventType.collect,\n variableLengthArgumentsNames: ['page'],\n addVisitorIdParameter: true,\n usesMeasurementProtocol: true,\n });\n }\n addHooksForEvent() {\n this.client.addEventTypeMapping(SVCPluginEventTypes.event, {\n newEventType: EventType.collect,\n variableLengthArgumentsNames: ['eventCategory', 'eventAction', 'eventLabel', 'eventValue'],\n addVisitorIdParameter: true,\n usesMeasurementProtocol: true,\n });\n }\n addSVCDataToPayload(eventType, payload) {\n var _a;\n const svcPayload = Object.assign(Object.assign(Object.assign(Object.assign({}, this.getLocationInformation(eventType, payload)), this.getDefaultContextInformation(eventType)), (this.action ? { svcAction: this.action } : {})), (Object.keys((_a = this.actionData) !== null && _a !== void 0 ? _a : {}).length > 0 ? { svcActionData: this.actionData } : {}));\n const ticketPayload = this.getTicketPayload();\n this.clearData();\n return Object.assign(Object.assign(Object.assign({}, ticketPayload), svcPayload), payload);\n }\n getTicketPayload() {\n return convertTicketToMeasurementProtocol(this.ticket);\n }\n}\nSVCPlugin.Id = 'svc';\n\nvar CaseAssistEvents;\n(function (CaseAssistEvents) {\n CaseAssistEvents[\"click\"] = \"click\";\n CaseAssistEvents[\"flowStart\"] = \"flowStart\";\n})(CaseAssistEvents || (CaseAssistEvents = {}));\nvar CaseAssistActions;\n(function (CaseAssistActions) {\n CaseAssistActions[\"enterInterface\"] = \"ticket_create_start\";\n CaseAssistActions[\"fieldUpdate\"] = \"ticket_field_update\";\n CaseAssistActions[\"fieldSuggestionClick\"] = \"ticket_classification_click\";\n CaseAssistActions[\"documentSuggestionClick\"] = \"documentSuggestionClick\";\n CaseAssistActions[\"documentSuggestionQuickview\"] = \"documentSuggestionQuickview\";\n CaseAssistActions[\"suggestionRate\"] = \"suggestion_rate\";\n CaseAssistActions[\"nextCaseStep\"] = \"ticket_next_stage\";\n CaseAssistActions[\"caseCancelled\"] = \"ticket_cancel\";\n CaseAssistActions[\"caseSolved\"] = \"ticket_cancel\";\n CaseAssistActions[\"caseCreated\"] = \"ticket_create\";\n})(CaseAssistActions || (CaseAssistActions = {}));\nvar CaseCancelledReasons;\n(function (CaseCancelledReasons) {\n CaseCancelledReasons[\"quit\"] = \"Quit\";\n CaseCancelledReasons[\"solved\"] = \"Solved\";\n})(CaseCancelledReasons || (CaseCancelledReasons = {}));\n\nclass CaseAssistClient {\n constructor(options, provider) {\n var _a;\n this.options = options;\n this.provider = provider;\n const analyticsEnabled = ((_a = options.enableAnalytics) !== null && _a !== void 0 ? _a : true) && !doNotTrack();\n this.coveoAnalyticsClient = analyticsEnabled ? new CoveoAnalyticsClient(options) : new NoopAnalytics();\n this.svc = new SVCPlugin({ client: this.coveoAnalyticsClient });\n }\n disable() {\n this.coveoAnalyticsClient = new NoopAnalytics();\n this.svc = new SVCPlugin({ client: this.coveoAnalyticsClient });\n }\n enable() {\n this.coveoAnalyticsClient = new CoveoAnalyticsClient(this.options);\n this.svc = new SVCPlugin({ client: this.coveoAnalyticsClient });\n }\n logEnterInterface(meta) {\n this.svc.setAction(CaseAssistActions.enterInterface);\n this.svc.setTicket(meta.ticket);\n return this.sendFlowStartEvent();\n }\n logUpdateCaseField(meta) {\n this.svc.setAction(CaseAssistActions.fieldUpdate, {\n fieldName: meta.fieldName,\n });\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n logSelectFieldSuggestion(meta) {\n this.svc.setAction(CaseAssistActions.fieldSuggestionClick, meta.suggestion);\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n logSelectDocumentSuggestion(meta) {\n return this.logClickEvent(CaseAssistActions.documentSuggestionClick, meta.suggestion.suggestion, {\n contentIDKey: 'permanentId',\n contentIDValue: meta.suggestion.permanentId,\n });\n }\n logQuickviewDocumentSuggestion(meta) {\n return this.logClickEvent(CaseAssistActions.documentSuggestionQuickview, meta.suggestion.suggestion, {\n contentIDKey: 'permanentId',\n contentIDValue: meta.suggestion.permanentId,\n });\n }\n logRateDocumentSuggestion(meta) {\n this.svc.setAction(CaseAssistActions.suggestionRate, Object.assign({ rate: meta.rating }, meta.suggestion));\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n logMoveToNextCaseStep(meta) {\n this.svc.setAction(CaseAssistActions.nextCaseStep, {\n stage: meta === null || meta === void 0 ? void 0 : meta.stage,\n });\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n logCaseCancelled(meta) {\n this.svc.setAction(CaseAssistActions.caseCancelled, {\n reason: CaseCancelledReasons.quit,\n });\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n logCaseSolved(meta) {\n this.svc.setAction(CaseAssistActions.caseSolved, {\n reason: CaseCancelledReasons.solved,\n });\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n logCaseCreated(meta) {\n this.svc.setAction(CaseAssistActions.caseCreated);\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n sendFlowStartEvent() {\n return this.coveoAnalyticsClient.sendEvent('event', 'svc', CaseAssistEvents.flowStart, this.provider\n ? {\n searchHub: this.provider.getOriginLevel1(),\n }\n : null);\n }\n sendClickEvent() {\n return this.coveoAnalyticsClient.sendEvent('event', 'svc', CaseAssistEvents.click, this.provider\n ? {\n searchHub: this.provider.getOriginLevel1(),\n }\n : null);\n }\n getBaseEventRequest(metadata) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function* () {\n const customData = Object.assign({}, metadata);\n return Object.assign(Object.assign({}, this.getOrigins()), { customData, language: (_a = this.provider) === null || _a === void 0 ? void 0 : _a.getLanguage(), anonymous: (_b = this.provider) === null || _b === void 0 ? void 0 : _b.getIsAnonymous(), clientId: yield this.getClientId() });\n });\n }\n getClientId() {\n return this.coveoAnalyticsClient instanceof CoveoAnalyticsClient\n ? this.coveoAnalyticsClient.getCurrentVisitorId()\n : undefined;\n }\n getOrigins() {\n var _a, _b, _c, _d, _e;\n return {\n originContext: (_b = (_a = this.provider) === null || _a === void 0 ? void 0 : _a.getOriginContext) === null || _b === void 0 ? void 0 : _b.call(_a),\n originLevel1: (_c = this.provider) === null || _c === void 0 ? void 0 : _c.getOriginLevel1(),\n originLevel2: (_d = this.provider) === null || _d === void 0 ? void 0 : _d.getOriginLevel2(),\n originLevel3: (_e = this.provider) === null || _e === void 0 ? void 0 : _e.getOriginLevel3(),\n };\n }\n logClickEvent(event, info, identifier, metadata) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function* () {\n const payload = Object.assign(Object.assign(Object.assign({}, info), (yield this.getBaseEventRequest(Object.assign(Object.assign({}, identifier), metadata)))), { searchQueryUid: (_b = (_a = this.provider) === null || _a === void 0 ? void 0 : _a.getSearchUID()) !== null && _b !== void 0 ? _b : '', actionCause: event });\n return this.coveoAnalyticsClient.sendClickEvent(payload);\n });\n }\n}\n\nconst extractContextFromMetadata = (meta) => {\n const context = {};\n if (meta.caseContext) {\n Object.keys(meta.caseContext).forEach((contextKey) => {\n var _a;\n const value = (_a = meta.caseContext) === null || _a === void 0 ? void 0 : _a[contextKey];\n if (value) {\n const keyToBeSent = `context_${contextKey}`;\n context[keyToBeSent] = value;\n }\n });\n }\n return context;\n};\nconst generateMetadataToSend = (metadata, includeContext = true) => {\n const { caseContext, caseId, caseNumber } = metadata, metadataWithoutContext = __rest(metadata, [\"caseContext\", \"caseId\", \"caseNumber\"]);\n const context = extractContextFromMetadata(metadata);\n return Object.assign(Object.assign(Object.assign({ CaseId: caseId, CaseNumber: caseNumber }, metadataWithoutContext), (!!context.context_Case_Subject && { CaseSubject: context.context_Case_Subject })), (includeContext && context));\n};\nclass CoveoInsightClient {\n constructor(opts, provider) {\n this.opts = opts;\n this.provider = provider;\n const shouldDisableAnalytics = opts.enableAnalytics === false || doNotTrack();\n this.coveoAnalyticsClient = shouldDisableAnalytics ? new NoopAnalytics() : new CoveoAnalyticsClient(opts);\n }\n disable() {\n this.coveoAnalyticsClient = new NoopAnalytics();\n }\n enable() {\n this.coveoAnalyticsClient = new CoveoAnalyticsClient(this.opts);\n }\n logInterfaceLoad(metadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.interfaceLoad, metadataToSend);\n }\n return this.logSearchEvent(SearchPageEvents.interfaceLoad);\n }\n logInterfaceChange(metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.interfaceChange, metadataToSend);\n }\n logStaticFilterDeselect(metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.staticFilterDeselect, metadataToSend);\n }\n logFetchMoreResults(metadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logCustomEvent(SearchPageEvents.pagerScrolling, Object.assign(Object.assign({}, metadataToSend), { type: 'getMoreResults' }));\n }\n return this.logCustomEvent(SearchPageEvents.pagerScrolling, { type: 'getMoreResults' });\n }\n logBreadcrumbFacet(metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.breadcrumbFacet, metadataToSend);\n }\n logBreadcrumbResetAll(metadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.breadcrumbResetAll, metadataToSend);\n }\n return this.logSearchEvent(SearchPageEvents.breadcrumbResetAll);\n }\n logFacetSelect(metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.facetSelect, metadataToSend);\n }\n logFacetExclude(metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.facetExclude, metadataToSend);\n }\n logFacetDeselect(metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.facetDeselect, metadataToSend);\n }\n logFacetUpdateSort(metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.facetUpdateSort, metadataToSend);\n }\n logFacetClearAll(metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.facetClearAll, metadataToSend);\n }\n logFacetShowMore(metadata) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.facetShowMore, metadataToSend);\n }\n logFacetShowLess(metadata) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.facetShowLess, metadataToSend);\n }\n logQueryError(metadata) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.queryError, metadataToSend);\n }\n logPagerNumber(metadata) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.pagerNumber, metadataToSend);\n }\n logPagerNext(metadata) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.pagerNext, metadataToSend);\n }\n logPagerPrevious(metadata) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.pagerPrevious, metadataToSend);\n }\n logDidYouMeanAutomatic(metadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.didyoumeanAutomatic, metadataToSend);\n }\n return this.logSearchEvent(SearchPageEvents.didyoumeanAutomatic);\n }\n logDidYouMeanClick(metadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.didyoumeanClick, metadataToSend);\n }\n return this.logSearchEvent(SearchPageEvents.didyoumeanClick);\n }\n logResultsSort(metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.resultsSort, metadataToSend);\n }\n logSearchboxSubmit(metadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.searchboxSubmit, metadataToSend);\n }\n return this.logSearchEvent(SearchPageEvents.searchboxSubmit);\n }\n logContextChanged(metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(InsightEvents.contextChanged, metadataToSend);\n }\n logExpandToFullUI(metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logCustomEvent(InsightEvents.expandToFullUI, metadataToSend);\n }\n logOpenUserActions(metadata) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(InsightEvents.openUserActions, metadataToSend);\n }\n logShowPrecedingSessions(metadata) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(InsightEvents.showPrecedingSessions, metadataToSend);\n }\n logShowFollowingSessions(metadata) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(InsightEvents.showFollowingSessions, metadataToSend);\n }\n logViewedDocumentClick(document, metadata) {\n return this.logCustomEvent(InsightEvents.clickViewedDocument, Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), { document }));\n }\n logPageViewClick(pageView, metadata) {\n return this.logCustomEvent(InsightEvents.clickPageView, Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), { pageView }));\n }\n logCreateArticle(createArticleMetadata, metadata) {\n return this.logCustomEvent(InsightEvents.createArticle, metadata ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), createArticleMetadata) : createArticleMetadata);\n }\n logDocumentOpen(info, identifier, metadata) {\n return this.logClickEvent(SearchPageEvents.documentOpen, info, identifier, metadata ? generateMetadataToSend(metadata, false) : undefined);\n }\n logCopyToClipboard(info, identifier, metadata) {\n return this.logClickEvent(SearchPageEvents.copyToClipboard, info, identifier, metadata ? generateMetadataToSend(metadata, false) : undefined);\n }\n logCaseSendEmail(info, identifier, metadata) {\n return this.logClickEvent(SearchPageEvents.caseSendEmail, info, identifier, metadata ? generateMetadataToSend(metadata, false) : undefined);\n }\n logFeedItemTextPost(info, identifier, metadata) {\n return this.logClickEvent(SearchPageEvents.feedItemTextPost, info, identifier, metadata ? generateMetadataToSend(metadata, false) : undefined);\n }\n logDocumentQuickview(info, identifier, caseMetadata) {\n const metadata = {\n documentTitle: info.documentTitle,\n documentURL: info.documentUrl,\n };\n return this.logClickEvent(SearchPageEvents.documentQuickview, info, identifier, caseMetadata ? Object.assign(Object.assign({}, generateMetadataToSend(caseMetadata, false)), metadata) : metadata);\n }\n logCaseAttach(info, identifier, caseMetadata) {\n const metadata = {\n documentTitle: info.documentTitle,\n documentURL: info.documentUrl,\n resultUriHash: info.documentUriHash,\n };\n return this.logClickEvent(SearchPageEvents.caseAttach, info, identifier, caseMetadata ? Object.assign(Object.assign({}, generateMetadataToSend(caseMetadata, false)), metadata) : metadata);\n }\n logCaseDetach(resultUriHash, metadata) {\n return this.logCustomEvent(SearchPageEvents.caseDetach, metadata ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), { resultUriHash }) : { resultUriHash });\n }\n logLikeSmartSnippet(metadata) {\n return this.logCustomEvent(SearchPageEvents.likeSmartSnippet, metadata ? generateMetadataToSend(metadata, false) : undefined);\n }\n logDislikeSmartSnippet(metadata) {\n return this.logCustomEvent(SearchPageEvents.dislikeSmartSnippet, metadata ? generateMetadataToSend(metadata, false) : undefined);\n }\n logExpandSmartSnippet(metadata) {\n return this.logCustomEvent(SearchPageEvents.expandSmartSnippet, metadata ? generateMetadataToSend(metadata, false) : undefined);\n }\n logCollapseSmartSnippet(metadata) {\n return this.logCustomEvent(SearchPageEvents.collapseSmartSnippet, metadata ? generateMetadataToSend(metadata, false) : undefined);\n }\n logOpenSmartSnippetFeedbackModal(metadata) {\n return this.logCustomEvent(SearchPageEvents.openSmartSnippetFeedbackModal, metadata ? generateMetadataToSend(metadata, false) : undefined);\n }\n logCloseSmartSnippetFeedbackModal(metadata) {\n return this.logCustomEvent(SearchPageEvents.closeSmartSnippetFeedbackModal, metadata ? generateMetadataToSend(metadata, false) : undefined);\n }\n logSmartSnippetFeedbackReason(reason, details, metadata) {\n return this.logCustomEvent(SearchPageEvents.sendSmartSnippetReason, metadata ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), { reason, details }) : { reason, details });\n }\n logExpandSmartSnippetSuggestion(snippet, metadata) {\n const snippetMetadata = 'documentId' in snippet ? snippet : { documentId: snippet };\n return this.logCustomEvent(SearchPageEvents.expandSmartSnippetSuggestion, metadata ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), snippetMetadata) : snippetMetadata);\n }\n logCollapseSmartSnippetSuggestion(snippet, metadata) {\n const snippetMetadata = 'documentId' in snippet ? snippet : { documentId: snippet };\n return this.logCustomEvent(SearchPageEvents.collapseSmartSnippetSuggestion, metadata ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), snippetMetadata) : snippetMetadata);\n }\n logOpenSmartSnippetSource(info, identifier, metadata) {\n return this.logClickEvent(SearchPageEvents.openSmartSnippetSource, info, identifier, metadata ? generateMetadataToSend(metadata, false) : undefined);\n }\n logOpenSmartSnippetSuggestionSource(info, snippet, metadata) {\n return this.logClickEvent(SearchPageEvents.openSmartSnippetSuggestionSource, info, { contentIDKey: snippet.documentId.contentIdKey, contentIDValue: snippet.documentId.contentIdValue }, metadata ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), snippet) : snippet);\n }\n logOpenSmartSnippetInlineLink(info, identifierAndLink, metadata) {\n return this.logClickEvent(SearchPageEvents.openSmartSnippetInlineLink, info, { contentIDKey: identifierAndLink.contentIDKey, contentIDValue: identifierAndLink.contentIDValue }, metadata ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), identifierAndLink) : identifierAndLink);\n }\n logOpenSmartSnippetSuggestionInlineLink(info, snippetAndLink, metadata) {\n return this.logClickEvent(SearchPageEvents.openSmartSnippetSuggestionInlineLink, info, {\n contentIDKey: snippetAndLink.documentId.contentIdKey,\n contentIDValue: snippetAndLink.documentId.contentIdValue,\n }, metadata ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), snippetAndLink) : snippetAndLink);\n }\n logLikeGeneratedAnswer(generatedAnswerMetadata, metadata) {\n return this.logCustomEvent(SearchPageEvents.likeGeneratedAnswer, metadata\n ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), generatedAnswerMetadata) : generatedAnswerMetadata);\n }\n logDislikeGeneratedAnswer(generatedAnswerMetadata, metadata) {\n return this.logCustomEvent(SearchPageEvents.dislikeGeneratedAnswer, metadata\n ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), generatedAnswerMetadata) : generatedAnswerMetadata);\n }\n logOpenGeneratedAnswerSource(generatedAnswerSourceMetadata, metadata) {\n return this.logCustomEvent(SearchPageEvents.openGeneratedAnswerSource, metadata\n ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), generatedAnswerSourceMetadata) : generatedAnswerSourceMetadata);\n }\n logGeneratedAnswerCitationClick(info, citation, metadata) {\n return this.logClickEvent(SearchPageEvents.generatedAnswerCitationClick, Object.assign(Object.assign({}, info), { documentPosition: 1 }), { contentIDKey: citation.documentId.contentIdKey, contentIDValue: citation.documentId.contentIdValue }, metadata ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), citation) : citation);\n }\n logGeneratedAnswerSourceHover(generatedAnswerSourceMetadata, metadata) {\n return this.logCustomEvent(SearchPageEvents.generatedAnswerSourceHover, metadata\n ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), generatedAnswerSourceMetadata) : generatedAnswerSourceMetadata);\n }\n logGeneratedAnswerCopyToClipboard(generatedAnswerMetadata, metadata) {\n return this.logCustomEvent(SearchPageEvents.generatedAnswerCopyToClipboard, metadata\n ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), generatedAnswerMetadata) : generatedAnswerMetadata);\n }\n logGeneratedAnswerHideAnswers(generatedAnswerMetadata, metadata) {\n return this.logCustomEvent(SearchPageEvents.generatedAnswerHideAnswers, metadata\n ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), generatedAnswerMetadata) : generatedAnswerMetadata);\n }\n logGeneratedAnswerShowAnswers(generatedAnswerMetadata, metadata) {\n return this.logCustomEvent(SearchPageEvents.generatedAnswerShowAnswers, metadata\n ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), generatedAnswerMetadata) : generatedAnswerMetadata);\n }\n logGeneratedAnswerExpand(generatedAnswerMetadata, metadata) {\n return this.logCustomEvent(SearchPageEvents.generatedAnswerExpand, metadata\n ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), generatedAnswerMetadata) : generatedAnswerMetadata);\n }\n logGeneratedAnswerCollapse(generatedAnswerMetadata, metadata) {\n return this.logCustomEvent(SearchPageEvents.generatedAnswerCollapse, metadata\n ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), generatedAnswerMetadata) : generatedAnswerMetadata);\n }\n logGeneratedAnswerFeedbackSubmit(generatedAnswerFeedbackMetadata, metadata) {\n return this.logCustomEvent(SearchPageEvents.generatedAnswerFeedbackSubmit, metadata\n ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), generatedAnswerFeedbackMetadata) : generatedAnswerFeedbackMetadata);\n }\n logGeneratedAnswerFeedbackSubmitV2(generatedAnswerFeedbackMetadata, metadata) {\n return this.logCustomEvent(SearchPageEvents.generatedAnswerFeedbackSubmitV2, metadata\n ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), generatedAnswerFeedbackMetadata) : generatedAnswerFeedbackMetadata);\n }\n logRephraseGeneratedAnswer(generatedAnswerRephraseMetadata, metadata) {\n return this.logSearchEvent(SearchPageEvents.rephraseGeneratedAnswer, metadata\n ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), generatedAnswerRephraseMetadata) : generatedAnswerRephraseMetadata);\n }\n logRetryGeneratedAnswer(metadata) {\n return this.logSearchEvent(SearchPageEvents.retryGeneratedAnswer, metadata ? Object.assign({}, generateMetadataToSend(metadata, false)) : {});\n }\n logGeneratedAnswerStreamEnd(generatedAnswerStreamEndMetadata, metadata) {\n return this.logCustomEvent(SearchPageEvents.generatedAnswerStreamEnd, metadata\n ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), generatedAnswerStreamEndMetadata) : generatedAnswerStreamEndMetadata);\n }\n logCustomEvent(event, metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n const customData = Object.assign(Object.assign({}, this.provider.getBaseMetadata()), metadata);\n const payload = Object.assign(Object.assign({}, (yield this.getBaseCustomEventRequest(customData))), { eventType: CustomEventsTypes[event], eventValue: event });\n return this.coveoAnalyticsClient.sendCustomEvent(payload);\n });\n }\n logSearchEvent(event, metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.coveoAnalyticsClient.sendSearchEvent(yield this.getBaseSearchEventRequest(event, metadata));\n });\n }\n logClickEvent(event, info, identifier, metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n const payload = Object.assign(Object.assign(Object.assign({}, info), (yield this.getBaseEventRequest(Object.assign(Object.assign({}, identifier), metadata)))), { searchQueryUid: this.provider.getSearchUID(), queryPipeline: this.provider.getPipeline(), actionCause: event });\n return this.coveoAnalyticsClient.sendClickEvent(payload);\n });\n }\n logShowMoreFoldedResults(info, identifier, metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.logClickEvent(SearchPageEvents.showMoreFoldedResults, info, identifier, metadata ? generateMetadataToSend(metadata, false) : undefined);\n });\n }\n logShowLessFoldedResults(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.logCustomEvent(SearchPageEvents.showLessFoldedResults, metadata ? generateMetadataToSend(metadata, false) : undefined);\n });\n }\n logTriggerNotify(triggerNotifyMetadata, metadata) {\n return this.logCustomEvent(SearchPageEvents.triggerNotify, metadata ? Object.assign(Object.assign({}, generateMetadataToSend(metadata, false)), triggerNotifyMetadata) : triggerNotifyMetadata);\n }\n getBaseCustomEventRequest(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n return Object.assign(Object.assign({}, (yield this.getBaseEventRequest(metadata))), { lastSearchQueryUid: this.provider.getSearchUID() });\n });\n }\n getBaseSearchEventRequest(event, metadata) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function* () {\n return Object.assign(Object.assign(Object.assign({}, (yield this.getBaseEventRequest(Object.assign(Object.assign({}, metadata), (_b = (_a = this.provider).getGeneratedAnswerMetadata) === null || _b === void 0 ? void 0 : _b.call(_a))))), this.provider.getSearchEventRequestPayload()), { searchQueryUid: this.provider.getSearchUID(), queryPipeline: this.provider.getPipeline(), actionCause: event });\n });\n }\n getBaseEventRequest(metadata) {\n return __awaiter(this, void 0, void 0, function* () {\n const customData = Object.assign(Object.assign({}, this.provider.getBaseMetadata()), metadata);\n return Object.assign(Object.assign({}, this.getOrigins()), { customData, language: this.provider.getLanguage(), facetState: this.provider.getFacetState ? this.provider.getFacetState() : [], anonymous: this.provider.getIsAnonymous(), clientId: yield this.getClientId() });\n });\n }\n getOrigins() {\n var _a, _b;\n return {\n originContext: (_b = (_a = this.provider).getOriginContext) === null || _b === void 0 ? void 0 : _b.call(_a),\n originLevel1: this.provider.getOriginLevel1(),\n originLevel2: this.provider.getOriginLevel2(),\n originLevel3: this.provider.getOriginLevel3(),\n };\n }\n getClientId() {\n return this.coveoAnalyticsClient instanceof CoveoAnalyticsClient\n ? this.coveoAnalyticsClient.getCurrentVisitorId()\n : undefined;\n }\n}\n\nexport { CaseAssistClient, CoveoAnalyticsClient, CoveoInsightClient, CoveoSearchPageClient, history };\n", "import {getSearchHubInitialState} from '../../features/search-hub/search-hub-state.js';\nimport type {\n ConfigurationSection,\n ContextSection,\n PipelineSection,\n QuerySection,\n SearchHubSection,\n} from '../../state/state-sections.js';\nimport {VERSION} from '../../utils/version.js';\n\nconst getLanguage = (state: ConfigurationSection) => {\n const langKey = state.configuration.search.locale.split('-')[0];\n if (!langKey || langKey.length !== 2) {\n return 'en';\n }\n return langKey;\n};\n\nexport type StateNeededByBaseAnalyticsProvider = ConfigurationSection &\n Partial<SearchHubSection & PipelineSection & QuerySection & ContextSection>;\n\nexport abstract class BaseAnalyticsProvider<\n T extends StateNeededByBaseAnalyticsProvider,\n> {\n protected readonly state: T;\n constructor(protected getState: () => T) {\n this.state = getState();\n }\n\n public abstract getSearchUID(): string;\n\n public getLanguage() {\n return getLanguage(this.state);\n }\n\n public getBaseMetadata() {\n const {context, configuration} = this.state;\n const contextValues = context?.contextValues || {};\n const formattedObject: Record<string, string | string[]> = {};\n for (const [key, value] of Object.entries(contextValues)) {\n const formattedKey = `context_${key}`;\n formattedObject[formattedKey] = value;\n }\n if (configuration.analytics.analyticsMode === 'legacy') {\n formattedObject.coveoHeadlessVersion = VERSION;\n }\n return formattedObject;\n }\n\n public getOriginContext() {\n return this.state.configuration.analytics.originContext;\n }\n\n public getOriginLevel1() {\n return this.state.searchHub || getSearchHubInitialState();\n }\n\n public getOriginLevel2() {\n return this.state.configuration.analytics.originLevel2;\n }\n\n public getOriginLevel3() {\n return this.state.configuration.analytics.originLevel3;\n }\n\n public getIsAnonymous() {\n return this.state.configuration.analytics.anonymous;\n }\n}\n", "import {\n type AnalyticsClientSendEventHook,\n CoveoAnalyticsClient,\n type IRuntimeEnvironment,\n} from 'coveo.analytics';\nimport type {Logger} from 'pino';\nimport {clone} from '../../utils/utils.js';\nimport type {PreprocessRequest} from '../preprocess-request.js';\n\nexport const getVisitorID = (options: {\n runtimeEnvironment?: IRuntimeEnvironment;\n}) => new CoveoAnalyticsClient(options).getCurrentVisitorId();\n\nexport const wrapPreprocessRequest = (\n logger: Logger,\n preprocessRequest?: PreprocessRequest\n) => {\n return typeof preprocessRequest === 'function'\n ? (...args: Parameters<PreprocessRequest>) => {\n const untaintedOutput = clone(args[0]);\n try {\n return preprocessRequest.apply(preprocessRequest, args);\n } catch (e) {\n logger.error(\n e as Error,\n 'Error in analytics preprocessRequest. Returning original request.'\n );\n return untaintedOutput;\n }\n }\n : undefined;\n};\n\nexport const wrapAnalyticsClientSendEventHook = (\n logger: Logger,\n hook: AnalyticsClientSendEventHook\n) => {\n return (...args: Parameters<AnalyticsClientSendEventHook>) => {\n const untaintedOutput = clone(args[1]);\n try {\n return hook.apply(hook, args);\n } catch (e) {\n logger.error(\n e as Error,\n 'Error in analytics hook. Returning original request.'\n );\n return untaintedOutput;\n }\n };\n};\n", "import {\n type AnalyticsClientSendEventHook,\n CoveoInsightClient,\n type InsightClientProvider,\n} from 'coveo.analytics';\nimport type {SearchEventRequest} from 'coveo.analytics/dist/definitions/events.js';\nimport type {Logger} from 'pino';\nimport {\n buildFacetStateMetadata,\n getStateNeededForFacetMetadata,\n type SectionNeededForFacetMetadata,\n} from '../../features/facets/facet-set/facet-set-analytics-actions-utils.js';\nimport {getQueryInitialState} from '../../features/query/query-state.js';\nimport {getSearchInitialState} from '../../features/search/search-state.js';\nimport type {InsightAppState} from '../../state/insight-app-state.js';\nimport type {\n ConfigurationSection,\n GeneratedAnswerSection,\n PipelineSection,\n QuerySection,\n SearchHubSection,\n SearchSection,\n TriggerSection,\n} from '../../state/state-sections.js';\nimport {getOrganizationEndpoint} from '../platform-client.js';\nimport type {PreprocessRequest} from '../preprocess-request.js';\nimport {BaseAnalyticsProvider} from './base-analytics.js';\nimport {\n wrapAnalyticsClientSendEventHook,\n wrapPreprocessRequest,\n} from './coveo-analytics-utils.js';\n\nexport type StateNeededByInsightAnalyticsProvider = ConfigurationSection &\n Partial<InsightAppState> &\n Partial<\n SearchHubSection &\n SearchSection &\n PipelineSection &\n QuerySection &\n TriggerSection &\n SectionNeededForFacetMetadata &\n GeneratedAnswerSection\n >;\n\nexport class InsightAnalyticsProvider\n extends BaseAnalyticsProvider<StateNeededByInsightAnalyticsProvider>\n implements InsightClientProvider\n{\n public getSearchUID(): string {\n const newState = this.getState();\n return (\n newState.search?.searchResponseId ||\n newState.search?.response.searchUid ||\n getSearchInitialState().response.searchUid\n );\n }\n public getPipeline(): string {\n return (\n this.state.pipeline || this.state.search?.response.pipeline || 'default'\n );\n }\n public getSearchEventRequestPayload(): Omit<\n SearchEventRequest,\n 'actionCause' | 'searchQueryUid'\n > {\n return {\n queryText: this.queryText,\n responseTime: this.responseTime,\n results: this.mapResultsToAnalyticsDocument(),\n numberOfResults: this.numberOfResults,\n };\n }\n\n public getFacetState() {\n return buildFacetStateMetadata(getStateNeededForFacetMetadata(this.state));\n }\n\n public getBaseMetadata() {\n const state = this.getState();\n const baseObject = super.getBaseMetadata();\n\n const generativeQuestionAnsweringId =\n state.search?.response?.extendedResults?.generativeQuestionAnsweringId;\n\n if (generativeQuestionAnsweringId) {\n baseObject.generativeQuestionAnsweringId = generativeQuestionAnsweringId;\n }\n\n return baseObject;\n }\n\n public getGeneratedAnswerMetadata() {\n const state = this.getState();\n return {\n ...(state.generatedAnswer?.isVisible !== undefined && {\n showGeneratedAnswer: state.generatedAnswer.isVisible,\n }),\n };\n }\n\n private get queryText() {\n return this.state.query?.q || getQueryInitialState().q;\n }\n\n private get responseTime() {\n return this.state.search?.duration || getSearchInitialState().duration;\n }\n\n private mapResultsToAnalyticsDocument() {\n return this.state.search?.response.results.map((r) => ({\n documentUri: r.uri,\n documentUriHash: r.raw.urihash,\n }));\n }\n\n private get numberOfResults() {\n return (\n this.state.search?.response.results.length ||\n getSearchInitialState().response.results.length\n );\n }\n}\n\ninterface ConfigureInsightAnalyticsOptions {\n logger: Logger;\n analyticsClientMiddleware?: AnalyticsClientSendEventHook;\n preprocessRequest?: PreprocessRequest;\n provider?: InsightClientProvider;\n getState(): StateNeededByInsightAnalyticsProvider;\n}\n\nexport const configureInsightAnalytics = ({\n logger,\n getState,\n analyticsClientMiddleware = (_, p) => p,\n preprocessRequest,\n provider = new InsightAnalyticsProvider(getState),\n}: ConfigureInsightAnalyticsOptions) => {\n const state = getState();\n const token = state.configuration.accessToken;\n const apiBaseUrl =\n state.configuration.analytics.apiBaseUrl ??\n getOrganizationEndpoint(\n state.configuration.organizationId,\n state.configuration.environment,\n 'analytics'\n );\n const runtimeEnvironment = state.configuration.analytics.runtimeEnvironment;\n const enabled = state.configuration.analytics.enabled;\n\n const client = new CoveoInsightClient(\n {\n enableAnalytics: enabled,\n token,\n endpoint: apiBaseUrl,\n runtimeEnvironment,\n preprocessRequest: wrapPreprocessRequest(logger, preprocessRequest),\n beforeSendHooks: [\n wrapAnalyticsClientSendEventHook(logger, analyticsClientMiddleware),\n (type, payload) => {\n logger.info(\n {\n ...payload,\n type,\n endpoint: apiBaseUrl,\n token,\n },\n 'Analytics request'\n );\n return payload;\n },\n ],\n },\n provider\n );\n\n if (!enabled) {\n client.disable();\n }\n\n return client;\n};\n", "import type {FacetStateMetadata} from 'coveo.analytics/dist/definitions/searchPage/searchPageEvents.js';\nimport type {\n AutomaticFacetSection,\n CategoryFacetSection,\n DateFacetSection,\n FacetSection,\n NumericFacetSection,\n} from '../../../state/state-sections.js';\nimport {getAutomaticFacetSetInitialState} from '../automatic-facet-set/automatic-facet-set-state.js';\nimport type {AutomaticFacetResponse} from '../automatic-facet-set/interfaces/response.js';\nimport {categoryFacetRequestSelectedValuesSelector} from '../category-facet-set/category-facet-set-selectors.js';\nimport {getCategoryFacetSetInitialState} from '../category-facet-set/category-facet-set-state.js';\nimport type {CategoryFacetRequest} from '../category-facet-set/interfaces/request.js';\nimport type {FacetType} from '../facet-api/request.js';\nimport type {\n AnyFacetRequest,\n AnyFacetValueRequest,\n} from '../generic/interfaces/generic-facet-request.js';\nimport {getDateFacetSetInitialState} from '../range-facets/date-facet-set/date-facet-set-state.js';\nimport type {\n DateFacetRequest,\n DateRangeRequest,\n} from '../range-facets/date-facet-set/interfaces/request.js';\nimport type {\n NumericFacetRequest,\n NumericRangeRequest,\n} from '../range-facets/numeric-facet-set/interfaces/request.js';\nimport {getNumericFacetSetInitialState} from '../range-facets/numeric-facet-set/numeric-facet-set-state.js';\nimport {getFacetSetInitialState} from './facet-set-state.js';\nimport type {FacetRequest, FacetValueRequest} from './interfaces/request.js';\n\nexport type SectionNeededForFacetMetadata = FacetSection &\n CategoryFacetSection &\n DateFacetSection &\n NumericFacetSection &\n AutomaticFacetSection;\n\nexport type FacetSelectionChangeMetadata = {\n facetId: string;\n facetValue: string;\n};\n\nexport const buildFacetBaseMetadata = (\n facetId: string,\n state: SectionNeededForFacetMetadata\n) => {\n const facet = getFacetRequest(state, facetId);\n\n const facetField = facet ? facet.field : '';\n const facetTitle = getFacetTitle(facetField, facetId);\n\n return {facetId, facetField, facetTitle};\n};\n\nexport function buildFacetSelectionChangeMetadata(\n payload: FacetSelectionChangeMetadata,\n state: SectionNeededForFacetMetadata\n) {\n const {facetId, facetValue} = payload;\n const base = buildFacetBaseMetadata(facetId, state);\n const facetType = getFacetType(state, facetId);\n return {\n ...base,\n facetValue:\n facetType === 'hierarchical'\n ? getCategoryFacetSelectedValue(state, facetId)\n : facetValue,\n };\n}\n\nexport function getStateNeededForFacetMetadata(\n s: Partial<SectionNeededForFacetMetadata>\n): SectionNeededForFacetMetadata {\n return {\n facetSet: s.facetSet ?? getFacetSetInitialState(),\n categoryFacetSet: s.categoryFacetSet ?? getCategoryFacetSetInitialState(),\n dateFacetSet: s.dateFacetSet ?? getDateFacetSetInitialState(),\n numericFacetSet: s.numericFacetSet ?? getNumericFacetSetInitialState(),\n automaticFacetSet:\n s.automaticFacetSet ?? getAutomaticFacetSetInitialState(),\n };\n}\n\nexport const buildFacetStateMetadata = (\n state: SectionNeededForFacetMetadata\n) => {\n const facetState: FacetStateMetadata[] = [];\n\n getFacetRequests(state).forEach((facetRequest, facetIndex) => {\n const facetType = getFacetType(state, facetRequest.facetId);\n const facetRequestAnalytics = mapFacetRequestToAnalytics(\n facetRequest,\n facetIndex + 1\n );\n\n if (isCategoryFacetRequest(facetRequest)) {\n const hasSelectedValue = !!categoryFacetRequestSelectedValuesSelector(\n state,\n facetRequest.facetId\n ).length;\n\n if (!hasSelectedValue) {\n return;\n }\n\n facetState.push({\n ...facetRequestAnalytics,\n ...mapCategoryFacetValueToAnalytics(state, facetRequest.facetId),\n facetType,\n state: 'selected',\n });\n\n return;\n }\n\n facetRequest.currentValues.forEach((facetValue, facetValueIndex) => {\n if (facetValue.state === 'idle') {\n return;\n }\n\n const facetValueAnalytics = mapFacetValueToAnalytics(\n facetValue,\n facetValueIndex + 1,\n facetType\n );\n\n const facetDisplayValueAnalytics = isSpecificFacetRequest(facetRequest)\n ? mapFacetDisplayValueToAnalytics(facetValue as FacetValueRequest)\n : mapRangeDisplayFacetValueToAnalytics(\n facetValue as NumericRangeRequest | DateRangeRequest\n );\n\n facetState.push({\n ...facetRequestAnalytics,\n ...facetValueAnalytics,\n ...facetDisplayValueAnalytics,\n });\n });\n });\n\n getAutomaticFacets(state).forEach((facet, facetIndex) => {\n const facetAnalytics = mapAutomaticFacetToAnalytics(facet, facetIndex + 1);\n\n facet.values.forEach((facetValue, facetValueIndex) => {\n if (facetValue.state === 'idle') {\n return;\n }\n\n const facetValueAnalytics = mapFacetValueToAnalytics(\n facetValue,\n facetValueIndex + 1,\n 'specific'\n );\n\n const facetDisplayValueAnalytics =\n mapFacetDisplayValueToAnalytics(facetValue);\n\n facetState.push({\n ...facetAnalytics,\n ...facetValueAnalytics,\n ...facetDisplayValueAnalytics,\n });\n });\n });\n\n return facetState;\n};\n\nconst isSpecificFacetRequest = (\n request: AnyFacetRequest\n): request is FacetRequest => request.type === 'specific';\n\nconst isCategoryFacetRequest = (\n request: AnyFacetRequest\n): request is CategoryFacetRequest => request.type === 'hierarchical';\n\nconst getFacetRequests = (state: SectionNeededForFacetMetadata) => {\n return [\n ...Object.values(state.facetSet),\n ...Object.values(state.categoryFacetSet),\n ...Object.values(state.dateFacetSet),\n ...Object.values(state.numericFacetSet),\n ].map((facet) => facet.request);\n};\n\nconst getAutomaticFacets = (\n state: SectionNeededForFacetMetadata\n): AutomaticFacetResponse[] => {\n return [...Object.values(state.automaticFacetSet.set)].map(\n (facet) => facet.response\n );\n};\n\nconst mapFacetValueToAnalytics = (\n facetValue: AnyFacetValueRequest,\n valuePosition: number,\n facetType: FacetType\n) => {\n return {\n state: facetValue.state,\n valuePosition,\n facetType,\n };\n};\n\nconst mapRangeDisplayFacetValueToAnalytics = (\n facetValue: NumericRangeRequest | DateRangeRequest\n) => {\n return {\n displayValue: `${facetValue.start}..${facetValue.end}`,\n value: `${facetValue.start}..${facetValue.end}`,\n start: facetValue.start,\n end: facetValue.end,\n endInclusive: facetValue.endInclusive,\n };\n};\n\nconst mapFacetDisplayValueToAnalytics = (facetValue: FacetValueRequest) => {\n return {\n displayValue: facetValue.value,\n value: facetValue.value,\n };\n};\n\nconst getCategoryFacetSelectedValue = (\n state: SectionNeededForFacetMetadata,\n facetId: string\n) => {\n const selectedCategoryFacetValues =\n categoryFacetRequestSelectedValuesSelector(state, facetId);\n return selectedCategoryFacetValues\n .map((selectedCategoryFacetValue) => selectedCategoryFacetValue.value)\n .join(';');\n};\n\nconst mapCategoryFacetValueToAnalytics = (\n state: SectionNeededForFacetMetadata,\n facetId: string\n) => {\n const valuePosition = 1;\n const value = getCategoryFacetSelectedValue(state, facetId);\n return {\n value,\n valuePosition,\n displayValue: value,\n };\n};\n\nconst mapAutomaticFacetToAnalytics = (\n facet: AutomaticFacetResponse,\n facetPosition: number\n) => {\n return {\n title: getFacetTitle(facet.field, facet.field),\n field: facet.field,\n id: facet.field,\n facetPosition,\n };\n};\n\nconst mapFacetRequestToAnalytics = (\n request: AnyFacetRequest,\n facetPosition: number\n) => {\n return {\n title: getFacetTitle(request.field, request.facetId),\n field: request.field,\n id: request.facetId,\n facetPosition,\n };\n};\n\nconst getFacetTitle = (field: string, facetId: string) => {\n return `${field}_${facetId}`;\n};\n\nconst getFacetRequest = (\n state: SectionNeededForFacetMetadata,\n facetId: string\n):\n | FacetRequest\n | CategoryFacetRequest\n | DateFacetRequest\n | NumericFacetRequest\n | undefined => {\n return (\n state.facetSet[facetId]?.request ||\n state.categoryFacetSet[facetId]?.request ||\n state.dateFacetSet[facetId]?.request ||\n state.numericFacetSet[facetId]?.request ||\n state.automaticFacetSet.set[facetId]?.response\n );\n};\n\nconst getFacetType = (\n state: SectionNeededForFacetMetadata,\n facetId: string\n) => {\n const facet = getFacetRequest(state, facetId);\n return facet ? facet.type : 'specific';\n};\n", "import {\n DESIRED_COUNT_DEFAULT,\n NUMBER_OF_VALUE_DEFAULT,\n} from './automatic-facet-set-constants.js';\nimport type {AutomaticFacetResponse} from './interfaces/response.js';\n\nexport type AutomaticFacetSlice = {\n response: AutomaticFacetResponse;\n};\n\nexport type AutomaticFacetSetState = {\n /**\n * The desired count of facets.\n *\n * Minimum: `1`\n * Maximum: `20`\n * @defaultValue `5`\n */\n desiredCount: number;\n /**\n * The desired number of automatically generated facet values.\n *\n * Minimum: `1`\n * @defaultValue `8`\n */\n numberOfValues: number;\n /**\n * A map of automatic facet field to an automatic facet slice containing the response.\n */\n set: Record<string, AutomaticFacetSlice>;\n};\n\nexport function getAutomaticFacetSetInitialState(): AutomaticFacetSetState {\n return {\n desiredCount: DESIRED_COUNT_DEFAULT,\n numberOfValues: NUMBER_OF_VALUE_DEFAULT,\n set: {},\n };\n}\n", "export const DESIRED_COUNT_MINIMUM = 1;\nexport const DESIRED_COUNT_MAXIMUM = 20;\nexport const DESIRED_COUNT_DEFAULT = 5;\n\nexport const NUMBER_OF_VALUE_MINIMUM = 1;\nexport const NUMBER_OF_VALUE_DEFAULT = 8;\n", "import type {\n CategoryFacetSection,\n SearchSection,\n} from '../../../state/state-sections.js';\nimport {baseFacetResponseSelector} from '../facet-set/facet-set-selectors.js';\nimport type {AnyFacetResponse} from '../generic/interfaces/generic-facet-response.js';\nimport {findActiveValueAncestry} from './category-facet-utils.js';\nimport type {CategoryFacetResponse} from './interfaces/response.js';\n\nfunction isCategoryFacetResponse(\n state: CategoryFacetSection,\n response: AnyFacetResponse | undefined\n): response is CategoryFacetResponse {\n return !!response && response.facetId in state.categoryFacetSet;\n}\n\nexport const categoryFacetResponseSelector = (\n state: CategoryFacetSection & Partial<SearchSection>,\n facetId: string\n) => {\n const response = baseFacetResponseSelector(state, facetId);\n if (isCategoryFacetResponse(state, response)) {\n return response;\n }\n\n return undefined;\n};\n\nexport const categoryFacetRequestSelector = (\n state: CategoryFacetSection,\n id: string\n) => {\n return state.categoryFacetSet[id]?.request;\n};\n\nexport const categoryFacetResponseSelectedValuesSelector = (\n state: CategoryFacetSection & Partial<SearchSection>,\n facetId: string\n) => {\n const facetResponse = categoryFacetResponseSelector(state, facetId);\n return findActiveValueAncestry(facetResponse?.values ?? []);\n};\n\nexport const categoryFacetRequestSelectedValuesSelector = (\n state: CategoryFacetSection,\n facetId: string\n) => {\n const facetRequest = categoryFacetRequestSelector(state, facetId);\n return findActiveValueAncestry(facetRequest?.currentValues ?? []);\n};\n", "import type {\n FacetSection,\n SearchSection,\n} from '../../../state/state-sections.js';\nimport type {AnyFacetResponse} from '../generic/interfaces/generic-facet-response.js';\nimport type {FacetResponse, FacetValue} from './interfaces/response.js';\n\nfunction isFacetResponse(\n state: FacetSection,\n response: AnyFacetResponse | undefined\n): response is FacetResponse {\n return !!response && response.facetId in state.facetSet;\n}\n\nexport const baseFacetResponseSelector = (\n state: Partial<SearchSection>,\n id: string\n) => state.search?.response.facets.find((response) => response.facetId === id);\n\nexport const facetRequestSelector = (state: FacetSection, id: string) =>\n state.facetSet[id]?.request;\n\nexport const facetResponseSelector = (\n state: SearchSection & FacetSection,\n facetId: string\n) => {\n const response = baseFacetResponseSelector(state, facetId);\n return isFacetResponse(state, response) ? response : undefined;\n};\n\nexport const facetResponseSelectedValuesSelector = (\n state: SearchSection & FacetSection,\n facetId: string\n) =>\n facetResponseSelector(state, facetId)?.values.filter(\n (value) => value.state === 'selected'\n ) || [];\n\nexport const facetResponseActiveValuesSelector = (\n state: SearchSection & FacetSection,\n facetId: string\n): FacetValue[] =>\n facetResponseSelector(state, facetId)?.values.filter(\n (value) => value.state !== 'idle'\n ) || [];\n\nexport const isFacetLoadingResponseSelector = (state: SearchSection) =>\n state.search.isLoading;\n", "import type {CategoryFacetValue as CommerceCategoryFacetValue} from '../../commerce/facets/facet-set/interfaces/response.js';\nimport type {CategoryFacetValueCommon} from './interfaces/commons.js';\nimport type {CategoryFacetValueRequest} from './interfaces/request.js';\nimport type {CategoryFacetValue} from './interfaces/response.js';\n\ntype GenericCategoryFacetValue = CategoryFacetValueRequest | CategoryFacetValue;\n\ntype CategoryFacetValuePartition<T extends GenericCategoryFacetValue> = {\n parents: T[];\n values: T[];\n};\n\nexport function partitionIntoParentsAndValues<\n T extends GenericCategoryFacetValue,\n>(nestedValues: T[] | undefined): CategoryFacetValuePartition<T> {\n if (!nestedValues) {\n return {parents: [], values: []};\n }\n\n let parents: T[] = [];\n let values = nestedValues;\n\n while (values.length && values[0].children.length) {\n parents = [...parents, ...values];\n values = values[0].children as T[];\n }\n\n const selectedLeafValue = values.find((v) => v.state === 'selected');\n\n if (selectedLeafValue) {\n parents = [...parents, selectedLeafValue];\n values = [];\n }\n\n return {parents, values};\n}\n\nexport function findActiveValueAncestry(\n valuesAsTress: CategoryFacetValueRequest[]\n): CategoryFacetValueRequest[];\nexport function findActiveValueAncestry(\n valuesAsTress: CommerceCategoryFacetValue[]\n): CommerceCategoryFacetValue[];\nexport function findActiveValueAncestry(\n valuesAsTress: CategoryFacetValue[]\n): CategoryFacetValue[];\nexport function findActiveValueAncestry(\n valuesAsTree: CategoryFacetValueCommon[]\n): CategoryFacetValueCommon[] {\n const {activeValue, ancestryMap} =\n getActiveValueAndAncestryFromValueTree(valuesAsTree);\n return activeValue ? getActiveValueAncestry(activeValue, ancestryMap) : [];\n}\n\nfunction getActiveValueAndAncestryFromValueTree(\n valuesAsTrees: CategoryFacetValueCommon[]\n) {\n const valueToVisit: CategoryFacetValueCommon[] = [...valuesAsTrees];\n const ancestryMap = new Map<\n CategoryFacetValueCommon,\n CategoryFacetValueCommon\n >();\n while (valueToVisit.length > 0) {\n const currentValue: CategoryFacetValueCommon = valueToVisit.shift()!;\n if (currentValue.state === 'selected') {\n return {activeValue: currentValue, ancestryMap};\n }\n if (ancestryMap) {\n for (const childValue of currentValue.children) {\n ancestryMap.set(childValue, currentValue);\n }\n }\n valueToVisit.unshift(...currentValue.children);\n }\n return {};\n}\n\nfunction getActiveValueAncestry(\n activeValue: CategoryFacetValueCommon | undefined,\n valueToParentMap: Map<CategoryFacetValueCommon, CategoryFacetValueCommon>\n): CategoryFacetValueCommon[] {\n const activeValueAncestry: CategoryFacetValueCommon[] = [];\n if (!activeValue) {\n return [];\n }\n let lastParent: CategoryFacetValueCommon | undefined = activeValue;\n do {\n activeValueAncestry.unshift(lastParent);\n lastParent = valueToParentMap.get(lastParent);\n } while (lastParent);\n return activeValueAncestry;\n}\n", "import type {CategoryFacetRequest} from './interfaces/request.js';\n\nexport type CategoryFacetSlice = {\n request: CategoryFacetRequest;\n initialNumberOfValues: number;\n};\n\nexport type CategoryFacetSetState = Record<string, CategoryFacetSlice>;\n\nexport function getCategoryFacetSetInitialState(): CategoryFacetSetState {\n return {};\n}\n", "import type {DateFacetRequest} from './interfaces/request.js';\n\nexport type DateFacetSlice = {\n request: DateFacetRequest;\n};\n\nexport type DateFacetSetState = Record<string, DateFacetSlice>;\n\nexport function getDateFacetSetSliceInitialState(\n request: DateFacetRequest\n): DateFacetSlice {\n return {request};\n}\n\nexport function getDateFacetSetInitialState(): DateFacetSetState {\n return {};\n}\n", "import type {NumericFacetRequest} from './interfaces/request.js';\n\nexport type NumericFacetSlice = {\n request: NumericFacetRequest;\n};\n\nexport type NumericFacetSetState = Record<string, NumericFacetSlice>;\n\nexport function getNumericFacetSetSliceInitialState(\n request: NumericFacetRequest\n): NumericFacetSlice {\n return {request};\n}\n\nexport function getNumericFacetSetInitialState(): NumericFacetSetState {\n return {};\n}\n", "import type {FacetRequest} from './interfaces/request.js';\n\nexport type FacetSlice = {\n request: FacetRequest;\n hasBreadcrumbs: boolean;\n};\n\n/**\n * A map of specific facet identifier (typically, the facet field) to a facet request\n */\nexport type FacetSetState = Record<string, FacetSlice>;\n\nexport function getFacetSetSliceInitialState(\n request: FacetRequest\n): FacetSlice {\n return {request, hasBreadcrumbs: true};\n}\n\nexport function getFacetSetInitialState(): FacetSetState {\n return {};\n}\n", "export interface QueryState {\n /**\n * The basic query expression (e.g., `acme tornado seeds`).\n */\n q: string;\n /**\n * Whether to interpret advanced [Coveo Cloud query syntax](https://docs.coveo.com/en/1814/) in the query.\n */\n enableQuerySyntax: boolean;\n}\n\nexport const getQueryInitialState: () => QueryState = () => ({\n q: '',\n enableQuerySyntax: false,\n});\n", "import type {ExtendedResults} from '../../api/search/search/extended-results.js';\nimport type {QuestionsAnswers} from '../../api/search/search/question-answering.js';\nimport type {Result} from '../../api/search/search/result.js';\nimport type {SearchResponseSuccess} from '../../api/search/search/search-response.js';\nimport type {SearchAPIErrorWithStatusCode} from '../../api/search/search-api-error-response.js';\nimport type {SearchAction} from './search-actions.js';\n\nexport interface SearchState {\n /** The search response. For a full description, refer to {@link https://docs.coveo.com/en/13/cloud-v2-api-reference/search-api#operation/searchUsingPost}*/\n response: SearchResponseSuccess;\n /**\n * The time it took to execute the request against the Coveo platform.\n */\n duration: number;\n /**\n * The query (searchbox content) that was executed against the Coveo platform.\n */\n queryExecuted: string;\n /**\n * The error returned by the Coveo platform while executing the search request, if any. `null` otherwise.\n */\n error: SearchAPIErrorWithStatusCode | null;\n /**\n * Specifies if the query was automatically corrected by Headless.\n * This happens when there is no result returned by the API for a particular misspelling.\n */\n automaticallyCorrected: boolean;\n /**\n * `true` if the search request is currently being executed against the Coveo platform, `false` otherwise.\n */\n isLoading: boolean;\n /**\n * The list of results.\n */\n results: Result[];\n /**\n * The unique ID of the response, taken from the response's `searchUid`. This value will not change when loading more results or fetching new facet values.\n */\n searchResponseId: string;\n /**\n * The unique ID of the latest request, generated by Headless each time a search is executed. This value is not to be confused with `searchResponseId` or `searchUid`, which are generated by the Coveo platform.\n */\n requestId: string;\n /**\n * The question and answers related to the smart snippet.\n */\n questionAnswer: QuestionsAnswers;\n /**\n * The extended results.\n */\n extendedResults: ExtendedResults;\n /**\n * The action that triggered the search request.\n */\n searchAction: SearchAction | undefined;\n}\n\nexport function emptyQuestionAnswer() {\n return {\n answerSnippet: '',\n documentId: {\n contentIdKey: '',\n contentIdValue: '',\n },\n question: '',\n relatedQuestions: [],\n score: 0,\n };\n}\n\nexport function getSearchInitialState(): SearchState {\n return {\n response: {\n results: [],\n searchUid: '',\n totalCountFiltered: 0,\n facets: [],\n generateAutomaticFacets: {facets: []},\n queryCorrections: [],\n triggers: [],\n questionAnswer: emptyQuestionAnswer(),\n pipeline: '',\n splitTestRun: '',\n termsToHighlight: {},\n phrasesToHighlight: {},\n extendedResults: {},\n },\n duration: 0,\n queryExecuted: '',\n error: null,\n automaticallyCorrected: false,\n isLoading: false,\n results: [],\n searchResponseId: '',\n requestId: '',\n questionAnswer: emptyQuestionAnswer(),\n extendedResults: {},\n searchAction: undefined,\n };\n}\n", "import {\n type AnalyticsClientSendEventHook,\n CoveoSearchPageClient,\n type SearchPageClientProvider,\n} from 'coveo.analytics';\nimport type {SearchEventRequest} from 'coveo.analytics/dist/definitions/events.js';\nimport type {Logger} from 'pino';\nimport {\n buildFacetStateMetadata,\n getStateNeededForFacetMetadata,\n} from '../../features/facets/facet-set/facet-set-analytics-actions-utils.js';\nimport type {FacetSortCriterion} from '../../features/facets/facet-set/interfaces/request.js';\nimport type {DateFacetValue} from '../../features/facets/range-facets/date-facet-set/interfaces/response.js';\nimport type {RangeFacetSortCriterion} from '../../features/facets/range-facets/generic/interfaces/request.js';\nimport type {NumericFacetValue} from '../../features/facets/range-facets/numeric-facet-set/interfaces/response.js';\nimport {getQueryInitialState} from '../../features/query/query-state.js';\nimport type {OmniboxSuggestionMetadata} from '../../features/query-suggest/query-suggest-analytics-actions.js';\nimport {getSearchInitialState} from '../../features/search/search-state.js';\nimport {getSortCriteriaInitialState} from '../../features/sort-criteria/sort-criteria-state.js';\nimport type {StaticFilterValueMetadata} from '../../features/static-filter-set/static-filter-set-actions.js';\nimport type {SearchAppState} from '../../state/search-app-state.js';\nimport type {ConfigurationSection} from '../../state/state-sections.js';\nimport {getOrganizationEndpoint} from '../platform-client.js';\nimport type {PreprocessRequest} from '../preprocess-request.js';\nimport {BaseAnalyticsProvider} from './base-analytics.js';\nimport HistoryStore from './coveo.analytics/history-store.js';\nimport {\n wrapAnalyticsClientSendEventHook,\n wrapPreprocessRequest,\n} from './coveo-analytics-utils.js';\n\nexport type StateNeededBySearchAnalyticsProvider = ConfigurationSection &\n Partial<Omit<SearchAppState, 'configuration'>>;\n\nexport class SearchAnalyticsProvider\n extends BaseAnalyticsProvider<StateNeededBySearchAnalyticsProvider>\n implements SearchPageClientProvider\n{\n private static fallbackPipelineName = 'default';\n\n public getFacetState() {\n return buildFacetStateMetadata(\n getStateNeededForFacetMetadata(this.getState())\n );\n }\n\n public getPipeline() {\n return (\n this.state.pipeline ||\n this.state.search?.response.pipeline ||\n SearchAnalyticsProvider.fallbackPipelineName\n );\n }\n\n public getSearchEventRequestPayload(): Omit<\n SearchEventRequest,\n 'actionCause' | 'searchQueryUid'\n > {\n return {\n queryText: this.queryText,\n responseTime: this.responseTime,\n results: this.resultURIs,\n numberOfResults: this.numberOfResults,\n };\n }\n\n public getSearchUID(): string {\n const newState = this.getState();\n return (\n newState.search?.searchResponseId ||\n newState.search?.response.searchUid ||\n getSearchInitialState().response.searchUid\n );\n }\n\n public getSplitTestRunName(): string | undefined {\n return this.state.search?.response.splitTestRun;\n }\n\n public getSplitTestRunVersion(): string | undefined {\n const hasSplitTestRun = !!this.getSplitTestRunName();\n const effectivePipelineWithSplitTestRun =\n this.state.search?.response.pipeline ||\n this.state.pipeline ||\n SearchAnalyticsProvider.fallbackPipelineName;\n\n return hasSplitTestRun ? effectivePipelineWithSplitTestRun : undefined;\n }\n\n public getBaseMetadata() {\n const state = this.getState();\n const baseObject = super.getBaseMetadata();\n\n const generativeQuestionAnsweringId =\n state.search?.response?.extendedResults?.generativeQuestionAnsweringId;\n\n if (generativeQuestionAnsweringId) {\n baseObject.generativeQuestionAnsweringId = generativeQuestionAnsweringId;\n }\n\n return baseObject;\n }\n\n public getFacetMetadata(facetId: string, facetValue: string) {\n const facetRequest = this.getFacetRequest(facetId);\n const facetField = facetRequest?.field ?? '';\n return {\n ...this.getBaseMetadata(),\n facetId,\n facetField,\n facetValue,\n facetTitle: `${facetField}_${facetId}`,\n };\n }\n\n public getFacetClearAllMetadata(facetId: string) {\n const facetRequest = this.getFacetRequest(facetId);\n const facetField = facetRequest?.field ?? '';\n return {\n ...this.getBaseMetadata(),\n facetId,\n facetField,\n facetTitle: `${facetField}_${facetId}`,\n };\n }\n\n public getFacetUpdateSortMetadata(\n facetId: string,\n criteria: FacetSortCriterion | RangeFacetSortCriterion\n ) {\n const facetRequest = this.getFacetRequest(facetId);\n const facetField = facetRequest?.field ?? '';\n return {\n ...this.getBaseMetadata(),\n facetId,\n facetField,\n criteria,\n facetTitle: `${facetField}_${facetId}`,\n };\n }\n\n public getRangeBreadcrumbFacetMetadata(\n facetId: string,\n facetValue: DateFacetValue | NumericFacetValue\n ) {\n const facetRequest = this.getFacetRequest(facetId);\n const facetField = facetRequest?.field ?? '';\n return {\n ...this.getBaseMetadata(),\n facetId,\n facetField,\n facetRangeEnd: facetValue.end,\n facetRangeEndInclusive: facetValue.endInclusive,\n facetRangeStart: facetValue.start,\n facetTitle: `${facetField}_${facetId}`,\n };\n }\n\n private getFacetRequest = (id: string) => {\n return (\n this.state.facetSet?.[id]?.request ||\n this.state.categoryFacetSet?.[id]?.request ||\n this.state.dateFacetSet?.[id]?.request ||\n this.state.numericFacetSet?.[id]?.request ||\n this.state.automaticFacetSet?.set[id]?.response\n );\n };\n\n public getResultSortMetadata() {\n return {\n ...this.getBaseMetadata(),\n resultsSortBy: this.state.sortCriteria ?? getSortCriteriaInitialState(),\n };\n }\n\n public getStaticFilterToggleMetadata(\n staticFilterId: string,\n staticFilterValue: StaticFilterValueMetadata\n ) {\n return {\n ...this.getBaseMetadata(),\n staticFilterId,\n staticFilterValue,\n };\n }\n\n public getStaticFilterClearAllMetadata(staticFilterId: string) {\n return {\n ...this.getBaseMetadata(),\n staticFilterId,\n };\n }\n\n public getUndoTriggerQueryMetadata(undoneQuery: string) {\n return {\n ...this.getBaseMetadata(),\n undoneQuery,\n };\n }\n\n public getCategoryBreadcrumbFacetMetadata(\n categoryFacetId: string,\n categoryFacetPath: string[]\n ) {\n const facetRequest = this.getFacetRequest(categoryFacetId);\n const categoryFacetField = facetRequest?.field ?? '';\n return {\n ...this.getBaseMetadata(),\n categoryFacetId,\n categoryFacetField,\n categoryFacetPath,\n categoryFacetTitle: `${categoryFacetField}_${categoryFacetId}`,\n };\n }\n\n public getOmniboxAnalyticsMetadata(id: string, suggestion: string) {\n const querySuggest = this.state.querySuggest?.[id];\n const suggestions = querySuggest!.completions.map(\n (completion) => completion.expression\n );\n\n const lastIndex = querySuggest!.partialQueries.length - 1;\n const partialQuery = querySuggest!.partialQueries[lastIndex] || '';\n const querySuggestResponseId = querySuggest!.responseId;\n return {\n ...this.getBaseMetadata(),\n suggestionRanking: suggestions.indexOf(suggestion),\n partialQuery,\n partialQueries:\n querySuggest!.partialQueries.length > 0\n ? querySuggest!.partialQueries\n : '',\n suggestions: suggestions.length > 0 ? suggestions : '',\n querySuggestResponseId,\n };\n }\n\n public getInterfaceChangeMetadata() {\n return {\n ...this.getBaseMetadata(),\n interfaceChangeTo: this.state.configuration.analytics.originLevel2,\n };\n }\n\n public getOmniboxFromLinkMetadata(metadata: OmniboxSuggestionMetadata) {\n return {\n ...this.getBaseMetadata(),\n ...metadata,\n };\n }\n\n public getGeneratedAnswerMetadata() {\n const state = this.getState();\n const formattedObject: Record<string, string | boolean> = {};\n if (state.generatedAnswer?.isVisible !== undefined) {\n formattedObject.showGeneratedAnswer = state.generatedAnswer.isVisible;\n }\n return formattedObject;\n }\n\n private get resultURIs() {\n return this.results?.map((r) => ({\n documentUri: r.uri,\n documentUriHash: r.raw.urihash,\n }));\n }\n\n protected get results() {\n return this.state.search?.response.results;\n }\n\n protected get queryText() {\n return this.state.query?.q || getQueryInitialState().q;\n }\n\n protected get responseTime() {\n return this.state.search?.duration || getSearchInitialState().duration;\n }\n\n protected get numberOfResults() {\n return (\n this.state.search?.response.totalCountFiltered ||\n getSearchInitialState().response.totalCountFiltered\n );\n }\n}\n\ninterface LegacyConfigureAnalyticsOptions {\n logger: Logger;\n analyticsClientMiddleware?: AnalyticsClientSendEventHook;\n preprocessRequest?: PreprocessRequest;\n provider?: SearchPageClientProvider;\n getState(): StateNeededBySearchAnalyticsProvider;\n}\n\n//TODO: KIT-2859\nexport const configureLegacyAnalytics = ({\n logger,\n getState,\n analyticsClientMiddleware = (_, p) => p,\n preprocessRequest,\n provider = new SearchAnalyticsProvider(getState),\n}: LegacyConfigureAnalyticsOptions) => {\n const state = getState();\n const token = state.configuration.accessToken;\n const endpoint =\n state.configuration.analytics.apiBaseUrl ??\n getOrganizationEndpoint(\n state.configuration.organizationId,\n state.configuration.environment,\n 'analytics'\n );\n const runtimeEnvironment = state.configuration.analytics.runtimeEnvironment;\n const enableAnalytics = state.configuration.analytics.enabled;\n const client = new CoveoSearchPageClient(\n {\n token,\n endpoint,\n runtimeEnvironment,\n preprocessRequest: wrapPreprocessRequest(logger, preprocessRequest),\n beforeSendHooks: [\n wrapAnalyticsClientSendEventHook(logger, analyticsClientMiddleware),\n (type, payload) => {\n logger.info(\n {\n ...payload,\n type,\n endpoint,\n token,\n },\n 'Analytics request'\n );\n return payload;\n },\n ],\n },\n provider\n );\n\n if (!enableAnalytics) {\n client.disable();\n }\n return client;\n};\n\nexport const getPageID = () => {\n const actions = HistoryStore.getInstance().getHistory();\n const lastPageView = actions.reverse().find((action) => {\n return action.name === 'PageView' && action.value;\n });\n\n if (!lastPageView) {\n return '';\n }\n\n return lastPageView.value!;\n};\n", "import {\n buildCriterionExpression,\n buildRelevanceSortCriterion,\n} from './criteria.js';\n\nexport type SortCriteriaState = string;\n\nexport function getSortCriteriaInitialState(): SortCriteriaState {\n return buildCriterionExpression(buildRelevanceSortCriterion());\n}\n", "import {EnumValue, isArray, RecordValue, StringValue} from '@coveo/bueno';\n\n/**\n * The available sort orders.\n */\nexport enum SortOrder {\n Ascending = 'ascending',\n Descending = 'descending',\n}\n\n/**\n * The available criteria that can be used to sort query results.\n */\nexport enum SortBy {\n /**\n * Uses standard index ranking factors (adjacency, TDIDF) and custom ranking expressions (QREs and QRFs) to compute a ranking score for each query result item, and sorts the query results by descending score value.\n */\n Relevancy = 'relevancy',\n /**\n * Uses only custom ranking expressions (QREs and QRFs) to compute a ranking score for each query result item, and sorts the query results by descending score value.\n */\n QRE = 'qre',\n /**\n * Uses the date field to sort the query results. This field typically contains the last modification date of each item. May be in ascending or descending order.\n */\n Date = 'date',\n /**\n * Uses the value of a specific sortable field to sort the query results. May be in ascending or descending order.\n */\n Field = 'field',\n /**\n * Does not sort the query results; the index will return result items in an essentially random order.\n */\n NoSort = 'nosort',\n}\n\n/**\n * Uses standard index ranking factors (adjacency, TDIDF) and custom ranking expressions (QREs and QRFs) to compute a ranking score for each query result item, and sorts the query results by descending score value.\n */\nexport type SortByRelevancy = {by: SortBy.Relevancy};\n/**\n * Uses only custom ranking expressions (QREs and QRFs) to compute a ranking score for each query result item, and sorts the query results by descending score value.\n */\nexport type SortByQRE = {by: SortBy.QRE};\n/**\n * Uses the date field to sort the query results. This field typically contains the last modification date of each item. May be in ascending or descending order.\n */\nexport type SortByDate = {by: SortBy.Date; order: SortOrder};\n/**\n * Uses the value of a specific sortable field to sort the query results. May be in ascending or descending order.\n */\nexport type SortByField = {by: SortBy.Field; field: string; order: SortOrder};\n/**\n * Does not sort the query results; the index will return result items in an essentially random order.\n */\nexport type SortByNoSort = {by: SortBy.NoSort};\n\n/** Represents a criterion that can be used to sort query results. */\nexport type SortCriterion =\n | SortByRelevancy\n | SortByQRE\n | SortByDate\n | SortByField\n | SortByNoSort;\n\n/**\n * Builds a sort expression that can be understood and executed by the Coveo Platform.\n * @param criterion The criterion to translate to a valid sort query expression.\n */\nexport const buildCriterionExpression = (\n criterion: SortCriterion | SortCriterion[]\n): string => {\n if (isArray(criterion)) {\n return criterion.map((c) => buildCriterionExpression(c)).join(',');\n }\n\n switch (criterion.by) {\n case SortBy.Relevancy:\n case SortBy.QRE:\n case SortBy.NoSort:\n return criterion.by;\n case SortBy.Date:\n return `date ${criterion.order}`;\n case SortBy.Field:\n return `@${criterion.field} ${criterion.order}`;\n default:\n return '';\n }\n};\n\n/**\n * Utility function that builds a valid `SortByRelevancy` criterion.\n * @returns A `SortByRelevancy` criterion.\n */\nexport const buildRelevanceSortCriterion = (): SortByRelevancy => ({\n by: SortBy.Relevancy,\n});\n\n/**\n * Utility function that builds a valid `SortByDate` criterion.\n * @param order The order (ascending/descending) on which to sort.\n * @returns A `SortByDate` criterion.\n */\nexport const buildDateSortCriterion = (order: SortOrder): SortByDate => ({\n by: SortBy.Date,\n order,\n});\n\n/**\n * Utility function that builds a valid `SortByField` criterion.\n * @param field The sortable field on which to sort.\n * @param order The order (ascending/descending) on which to sort.\n * @returns A `SortByField` criterion.\n */\nexport const buildFieldSortCriterion = (\n field: string,\n order: SortOrder\n): SortByField => ({\n by: SortBy.Field,\n order,\n field,\n});\n\n/**\n * Utility function that builds a valid `SortByQRE` criterion.\n * @returns A `SortByQRE` criterion.\n */\nexport const buildQueryRankingExpressionSortCriterion = (): SortByQRE => ({\n by: SortBy.QRE,\n});\n\n/**\n * Utility function that builds a valid `SortByNoSort` criterion.\n * @returns A `SortByNoSort` criterion.\n */\nexport const buildNoSortCriterion = (): SortByNoSort => ({by: SortBy.NoSort});\n\nexport const criterionDefinition = new RecordValue({\n values: {\n by: new EnumValue({enum: SortBy, required: true}),\n order: new EnumValue({enum: SortOrder}),\n field: new StringValue(),\n },\n});\n", "import {getAvailableStorage, type WebStorage} from './storage.js';\n\nexport const STORE_KEY: string = '__coveo.analytics.history';\nexport const MAX_NUMBER_OF_HISTORY_ELEMENTS: number = 20;\nconst MIN_THRESHOLD_FOR_DUPLICATE_VALUE: number = 1000 * 60;\nexport const MAX_VALUE_SIZE = 75;\n\nclass HistoryStore {\n private static instance: HistoryStore | null = null;\n public static getInstance(store?: WebStorage): HistoryStore {\n if (!HistoryStore.instance) {\n HistoryStore.instance = new HistoryStore(store);\n }\n return HistoryStore.instance;\n }\n private store: WebStorage;\n private constructor(store?: WebStorage) {\n this.store = store || getAvailableStorage();\n }\n\n /**\n * @deprecated Synchronous method is deprecated, use addElementAsync instead. This method will NOT work with react-native.\n */\n addElement(elem: HistoryElement) {\n elem.internalTime = new Date().getTime();\n elem = this.cropQueryElement(this.stripEmptyQuery(elem));\n const currentHistory = this.getHistoryWithInternalTime();\n if (currentHistory !== null) {\n if (this.isValidEntry(elem)) {\n this.setHistory([elem].concat(currentHistory));\n }\n } else {\n this.setHistory([elem]);\n }\n }\n\n async addElementAsync(elem: HistoryElement) {\n elem.internalTime = new Date().getTime();\n elem = this.cropQueryElement(this.stripEmptyQuery(elem));\n const currentHistory = await this.getHistoryWithInternalTimeAsync();\n if (currentHistory !== null) {\n if (this.isValidEntry(elem)) {\n this.setHistory([elem].concat(currentHistory));\n }\n } else {\n this.setHistory([elem]);\n }\n }\n\n /**\n * @deprecated Synchronous method is deprecated, use getHistoryAsync instead. This method will NOT work with react-native.\n */\n getHistory(): HistoryElement[] {\n const history = this.getHistoryWithInternalTime();\n return this.stripEmptyQueries(this.stripInternalTime(history));\n }\n\n async getHistoryAsync(): Promise<HistoryElement[]> {\n const history = await this.getHistoryWithInternalTimeAsync();\n return this.stripEmptyQueries(this.stripInternalTime(history));\n }\n\n private getHistoryWithInternalTime(): HistoryElement[] {\n try {\n const elements = this.store.getItem(STORE_KEY);\n if (elements && typeof elements === 'string') {\n return JSON.parse(elements) as HistoryElement[];\n } else {\n return [];\n }\n } catch (e) {\n // When using the Storage APIs (localStorage/sessionStorage)\n // Safari says that those APIs are available but throws when making\n // a call to them.\n return [];\n }\n }\n\n private async getHistoryWithInternalTimeAsync(): Promise<HistoryElement[]> {\n try {\n const elements = await this.store.getItem(STORE_KEY);\n if (elements) {\n return JSON.parse(elements) as HistoryElement[];\n } else {\n return [];\n }\n } catch (e) {\n // When using the Storage APIs (localStorage/sessionStorage)\n // Safari says that those APIs are available but throws when making\n // a call to them.\n return [];\n }\n }\n\n setHistory(history: HistoryElement[]) {\n try {\n this.store.setItem(\n STORE_KEY,\n JSON.stringify(history.slice(0, MAX_NUMBER_OF_HISTORY_ELEMENTS))\n );\n } catch (e) {\n /* refer to this.getHistory() */\n }\n }\n\n clear() {\n try {\n this.store.removeItem(STORE_KEY);\n } catch (e) {\n /* refer to this.getHistory() */\n }\n }\n\n getMostRecentElement(): HistoryElement | null {\n const currentHistory = this.getHistoryWithInternalTime();\n if (Array.isArray(currentHistory)) {\n const sorted = currentHistory.sort(\n (first: HistoryElement, second: HistoryElement) => {\n // Internal time might not be set for all history element (on upgrade).\n // Ensure to return the most recent element for which we have a value for internalTime.\n return (second.internalTime || 0) - (first.internalTime || 0);\n }\n );\n return sorted[0];\n }\n return null;\n }\n\n private cropQueryElement(part: HistoryElement) {\n if (part.name && part.value && part.name.toLowerCase() === 'query') {\n part.value = part.value.slice(0, MAX_VALUE_SIZE);\n }\n\n return part;\n }\n\n private isValidEntry(elem: HistoryElement): boolean {\n const lastEntry = this.getMostRecentElement();\n\n if (lastEntry && lastEntry.value === elem.value) {\n return (\n (elem.internalTime || 0) - (lastEntry.internalTime || 0) >\n MIN_THRESHOLD_FOR_DUPLICATE_VALUE\n );\n }\n return true;\n }\n\n private stripInternalTime(history: HistoryElement[]): HistoryElement[] {\n if (Array.isArray(history)) {\n return history.map((part) => {\n const {name, time, value} = part;\n return {name, time, value};\n });\n }\n return [];\n }\n\n private stripEmptyQuery(part: HistoryElement) {\n const {name, time, value} = part;\n if (\n name &&\n typeof value === 'string' &&\n name.toLowerCase() === 'query' &&\n value.trim() === ''\n ) {\n return {name, time};\n }\n\n return part;\n }\n\n private stripEmptyQueries(history: HistoryElement[]): HistoryElement[] {\n return history.map((part) => this.stripEmptyQuery(part));\n }\n}\n\nexport interface HistoryElement {\n name: string;\n value?: string;\n time: string;\n internalTime?: number;\n}\n\n\n\nexport default HistoryStore;\n", "import {Cookie} from './cookie.js';\nimport {\n hasCookieStorage,\n hasLocalStorage,\n hasSessionStorage,\n} from './detector.js';\n\nexport const preferredStorage: WebStorage | null = null;\n\nexport interface WebStorage {\n getItem(key: string): string | null | Promise<string | null>;\n removeItem(key: string): void;\n setItem(key: string, data: string): void | Promise<void>;\n}\n\nexport function getAvailableStorage(): WebStorage {\n if (preferredStorage) {\n return preferredStorage;\n }\n if (hasLocalStorage()) {\n return localStorage;\n }\n if (hasCookieStorage()) {\n return new CookieStorage();\n }\n if (hasSessionStorage()) {\n return sessionStorage;\n }\n return new NullStorage();\n}\n\nexport class CookieStorage implements WebStorage {\n static prefix = 'coveo_';\n getItem(key: string): string | null {\n return Cookie.get(`${CookieStorage.prefix}${key}`);\n }\n removeItem(key: string) {\n Cookie.erase(`${CookieStorage.prefix}${key}`);\n }\n setItem(key: string, data: string, expire?: number): void {\n Cookie.set(`${CookieStorage.prefix}${key}`, data, expire);\n }\n}\n\nexport class CookieAndLocalStorage implements WebStorage {\n private cookieStorage = new CookieStorage();\n\n getItem(key: string): string | null {\n return localStorage.getItem(key) || this.cookieStorage.getItem(key);\n }\n\n removeItem(key: string): void {\n this.cookieStorage.removeItem(key);\n localStorage.removeItem(key);\n }\n\n setItem(key: string, data: string): void {\n localStorage.setItem(key, data);\n this.cookieStorage.setItem(key, data, 31556926000); // 1 year first party cookie\n }\n}\n\nexport class NullStorage implements WebStorage {\n getItem(_key: string): string | null {\n return null;\n }\n removeItem(_key: string) {\n /**/\n }\n setItem(_key: string, _data: string): void {\n /**/\n }\n}\n", "// Code originally modified from : https://developers.livechatinc.com/blog/setting-cookies-to-subdomains-in-javascript/\nexport class Cookie {\n static set(name: string, value: string, expire?: number) {\n let domain: string, expirationDate: Date | undefined, domainParts: string[];\n if (expire) {\n expirationDate = new Date();\n expirationDate.setTime(expirationDate.getTime() + expire);\n }\n const host = window.location.hostname;\n\n // Check if it's an IPv4 address\n const ipv4Regex = /^(\\d{1,3}\\.){3}\\d{1,3}$/;\n // Check if it's an IPv6 address\n const ipv6Regex = /^([0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}$/;\n\n if (ipv4Regex.test(host) || ipv6Regex.test(host)) {\n // IP address - set cookie without domain\n writeCookie(name, value, expirationDate);\n } else if (host.indexOf('.') === -1) {\n // no \".\" in a domain - single domain name, it's localhost or something similar\n writeCookie(name, value, expirationDate);\n } else {\n domainParts = host.split('.');\n // we always have at least 2 domain parts\n domain =\n domainParts[domainParts.length - 2] +\n '.' +\n domainParts[domainParts.length - 1];\n writeCookie(name, value, expirationDate, domain);\n }\n }\n\n static get(name: string) {\n const cookiePrefix = name + '=';\n const cookieArray = document.cookie.split(';');\n for (let i = 0; i < cookieArray.length; i++) {\n let cookie = cookieArray[i];\n cookie = cookie.replace(/^\\s+/, ''); //strip whitespace from front of cookie only\n if (cookie.lastIndexOf(cookiePrefix, 0) === 0) {\n return cookie.substring(cookiePrefix.length, cookie.length);\n }\n }\n return null;\n }\n\n static erase(name: string) {\n Cookie.set(name, '', -1);\n }\n}\n\nfunction writeCookie(\n name: string,\n value: string,\n expirationDate?: Date,\n domain?: string\n) {\n document.cookie =\n `${name}=${value}` +\n (expirationDate ? `;expires=${expirationDate.toUTCString()}` : '') +\n (domain ? `;domain=${domain}` : '') +\n ';path=/;SameSite=Lax';\n}\n", "export function hasNavigator(): boolean {\n return typeof navigator !== 'undefined';\n}\n\nexport function hasDocument(): boolean {\n return typeof document !== 'undefined';\n}\n\nexport function hasLocalStorage(): boolean {\n try {\n return typeof localStorage !== 'undefined';\n } catch (error) {\n return false;\n }\n}\n\nexport function hasSessionStorage(): boolean {\n try {\n return typeof sessionStorage !== 'undefined';\n } catch (error) {\n return false;\n }\n}\n\nexport function hasCookieStorage(): boolean {\n return Boolean(hasNavigator() && navigator.cookieEnabled);\n}\n", "import {removeDuplicates} from '../../utils/utils.js';\nimport type {ResultWithFolding} from './folding-slice.js';\n\nexport function getAllIncludedResultsFrom(relevantResult: ResultWithFolding) {\n const foldedResults = getChildResultsRecursively(relevantResult);\n\n const parentResults = [relevantResult, ...foldedResults]\n .filter((result) => result.parentResult)\n .map((result) => result.parentResult!);\n\n const resultsInCollection = removeDuplicates(\n [relevantResult, ...foldedResults, ...parentResults],\n (result) => result.uniqueId\n );\n\n return resultsInCollection;\n}\n\nfunction getChildResultsRecursively(\n result: ResultWithFolding\n): ResultWithFolding[] {\n if (!result.childResults) {\n return [];\n }\n return result.childResults.flatMap((childResult) => [\n childResult,\n ...getChildResultsRecursively(childResult),\n ]);\n}\n", "export const getPipelineInitialState = () => '';\n", "export enum SearchPageEvents {\n /**\n * Identifies the search event that gets logged when the initial query is performed as a result of loading a search interface.\n */\n interfaceLoad = 'interfaceLoad',\n /**\n * Identifies the search event that gets logged when a new tab is selected in the search interface.\n */\n interfaceChange = 'interfaceChange',\n /**\n * Identifies the search event that gets logged when `enableAutoCorrection: true` and the query is automatically corrected.\n */\n didYouMeanAutomatic = 'didYouMeanAutomatic',\n /**\n * Identifies the search event that gets logged when the query suggestion with the corrected term is selected and successfully updates the query.\n */\n didYouMeanClick = 'didYouMeanClick',\n /**\n * Identifies the search event that gets logged when a sorting method is selected.\n */\n resultsSort = 'resultsSort',\n /**\n * Identifies the search event that gets logged when a submit button is selected on a search box.\n */\n searchboxSubmit = 'searchboxSubmit',\n /**\n * The search-as-you-type event that gets logged when a query is automatically generated, and results are displayed while a user is entering text in the search box before they voluntarily submit the query.\n */\n searchboxAsYouType = 'searchboxAsYouType',\n /**\n * The event that gets logged when a breadcrumb facet is selected and the query is updated.\n */\n breadcrumbFacet = 'breadcrumbFacet',\n /**\n * Identifies the search event that gets logged when the event to clear the current breadcrumbs is triggered.\n */\n breadcrumbResetAll = 'breadcrumbResetAll',\n /**\n * Identifies the click event that gets logged when a user clicks on a search result to open an item.\n */\n documentOpen = 'documentOpen',\n /**\n * Identifies the search event that gets logged when a user clicks a query suggestion based on the usage analytics recorded queries.\n */\n omniboxAnalytics = 'omniboxAnalytics',\n /**\n * Identifies the search event that gets logged when a suggested search query is selected from a standalone searchbox.\n */\n omniboxFromLink = 'omniboxFromLink',\n /**\n * Identifies the search event that gets logged when the search page loads with a query, such as when a user clicks a link pointing to a search results page with a query or enters a query in a standalone search box that points to a search page.\n */\n searchFromLink = 'searchFromLink',\n /**\n * Identifies the custom event that gets logged when a user action triggers a new query set in the effective query pipeline on the search page.\n */\n triggerQuery = 'query',\n /**\n * Identifies the search cause that gets logged for pagination and other user navigation that do not express a new search intent.\n */\n browseResults = 'browseResults',\n /**\n * Identifies the search event that gets logged when a static filter check box is deselected and the query is updated.\n */\n staticFilterDeselect = 'staticFilterDeselect',\n /**\n * Identifies the search event that gets logged when the Clear Facet button is selected.\n */\n facetClearAll = 'facetClearAll',\n /**\n * Identifies the search event that gets logged when a facet check box is selected and the query is updated.\n */\n facetSelect = 'facetSelect',\n /**\n * Identifies the search event that gets logged when a facet check box is deselected and the query is updated.\n */\n facetDeselect = 'facetDeselect',\n /**\n * Identifies the search event that gets logged when a user clicks a facet value to filter out results containing the facet value.\n */\n facetExclude = 'facetExclude',\n /**\n * Identifies the search event that gets logged when a user clicks a facet value to not filter out results containing the facet value.\n */\n facetUnexclude = 'facetUnexclude',\n /**\n * Identifies the search event that gets logged when the sort criteria on a facet is updated.\n */\n facetUpdateSort = 'facetUpdateSort',\n /**\n * Identifies the search event that gets logged when the document suggestions are fetched.\n */\n documentSuggestion = 'documentSuggestion',\n /**\n * The custom event that gets logged when an end-user expands a facet to see additional values.\n */\n facetShowMore = 'showMoreFacetResults',\n /**\n * The custom event that gets logged when an end-user collapses a facet to see less values.\n */\n facetShowLess = 'showLessFacetResults',\n /**\n * Identifies the custom event that gets logged when a user query encounters an error during execution.\n */\n //eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values\n queryError = 'query',\n /**\n * Identifies the search event that gets logged when a user action (that is not a query) reloads the Recommendations panel with new recommendations.\n */\n recommendationInterfaceLoad = 'recommendationInterfaceLoad',\n /**\n * Identifies the custom event that gets logged when a user identifies a smart snippet answer as relevant.\n */\n likeSmartSnippet = 'likeSmartSnippet',\n /**\n * Identifies the custom event that gets logged when a user identifies a smart snippet answer as irrelevant.\n */\n dislikeSmartSnippet = 'dislikeSmartSnippet',\n /**\n * Identifies the custom event that gets logged when a user expand a smart snippet answer.\n */\n expandSmartSnippet = 'expandSmartSnippet',\n /**\n * Identifies the custom event that gets logged when a user collapse a smart snippet answer.\n */\n collapseSmartSnippet = 'collapseSmartSnippet',\n /**\n * Identifies the custom event that gets logged when a user open a smart snippet explanation modal for feedback.\n */\n openSmartSnippetFeedbackModal = 'openSmartSnippetFeedbackModal',\n /**\n * Identifies the custom event that gets logged when a user close a smart snippet explanation modal for feedback.\n */\n closeSmartSnippetFeedbackModal = 'closeSmartSnippetFeedbackModal',\n /**\n * Identifies the custom event that gets logged when a user sends an explanation for a smart snippet irrelevant answer.\n */\n sendSmartSnippetReason = 'sendSmartSnippetReason',\n /**\n * Identifies the custom event that gets logged when a snippet suggestion for a related question is expanded.\n */\n expandSmartSnippetSuggestion = 'expandSmartSnippetSuggestion',\n /**\n * Identifies the custom event that gets logged when a snippet suggestion for a related question is collapsed.\n */\n collapseSmartSnippetSuggestion = 'collapseSmartSnippetSuggestion',\n /**\n * Identifies the custom event that gets logged when a user clicks on the source of an answer in a smart snippet.\n */\n openSmartSnippetSource = 'openSmartSnippetSource',\n /**\n * Identifies the custom event that gets logged when a user clicks on the source of a snippet suggestion for a related question.\n */\n openSmartSnippetSuggestionSource = 'openSmartSnippetSuggestionSource',\n /**\n * Identifies the click event that gets logged when a user clicks the Show More link under a search result that support the folding component.\n */\n showMoreFoldedResults = 'showMoreFoldedResults',\n /**\n * Identifies the custom event that gets logged when a user clicks the Show Less link under a search result that support the folding component.\n */\n showLessFoldedResults = 'showLessFoldedResults',\n /**\n * Identifies the click event that gets logged when a user clicks the Copy To Clipboard result action.\n */\n copyToClipboard = 'copyToClipboard',\n /**\n * Identifies the click event that gets logged when a user clicks the Send As Email result action.\n */\n caseSendEmail = 'Case.SendEmail',\n /**\n * Identifies the click event that gets logged when a user clicks the Post To Feed result action.\n */\n feedItemTextPost = 'FeedItem.TextPost',\n /**\n * Identifies the click event that gets logged when a user clicks the Attach To Case result action.\n */\n caseAttach = 'caseAttach',\n /**\n * Identifies the custom event that gets logged when a user clicks the Detach From Case result action.\n */\n caseDetach = 'caseDetach',\n /**\n * Identifies the cause of a search request being retried in order to regenerate an answer stream that failed.\n */\n retryGeneratedAnswer = 'retryGeneratedAnswer',\n /**\n * Identifies the custom event that gets logged when a user identifies a generated answer as relevant.\n */\n likeGeneratedAnswer = 'likeGeneratedAnswer',\n /**\n * Identifies the custom event that gets logged when a user identifies a generated answer as irrelevant.\n */\n dislikeGeneratedAnswer = 'dislikeGeneratedAnswer',\n /**\n * Identifies the custom event that gets logged when a user opens a generated answer citation.\n */\n openGeneratedAnswerSource = 'openGeneratedAnswerSource',\n /**\n * Identified the custom event that gets logged when a generated answer stream is completed.\n */\n generatedAnswerStreamEnd = 'generatedAnswerStreamEnd',\n /**\n * Identifies the search event that gets logged when the query context is updated as a result of updating one of the case context fields.\n */\n contextChanged = 'contextChanged',\n /**\n * Identifies the custom event that gets logged when a user hovers over a generated answer citation.\n */\n generatedAnswerSourceHover = 'generatedAnswerSourceHover',\n /**\n * Identifies the custom event that gets logged when a user submits feedback on a generated answer.\n */\n generatedAnswerFeedbackSubmit = 'generatedAnswerFeedbackSubmit',\n /**\n * Identifies the custom event that gets logged when a user deactivates the RGA feature.\n */\n generatedAnswerHideAnswers = 'generatedAnswerHideAnswers',\n /**\n * Identifies the custom event that gets logged when a user activates the RGA feature.\n */\n generatedAnswerShowAnswers = 'generatedAnswerShowAnswers',\n /**\n * Identifies the custom event that gets logged when a user expands a generated answer.\n */\n generatedAnswerExpand = 'generatedAnswerExpand',\n /**\n * Identifies the custom event that gets logged when a user collapses a generated answer.\n */\n generatedAnswerCollapse = 'generatedAnswerCollapse',\n /**\n * Identifies the custom event that gets logged when a user clicks the copy to clipboard button of a generated answer.\n */\n generatedAnswerCopyToClipboard = 'generatedAnswerCopyToClipboard',\n /**\n * Identifies the custom event that gets logged when the user opens the full search page from the insight panel.\n */\n expandToFullUI = 'expandToFullUI',\n /**\n * Identifies the custom event that gets logged when the user clicks the create article button.\n */\n createArticle = 'createArticle',\n}\n", "import {isNullOrUndefined} from '@coveo/bueno';\nimport {createSelector} from '@reduxjs/toolkit';\nimport {\n type StateNeededByAnswerAPI,\n selectAnswer,\n} from '../../api/knowledge/stream-answer-api.js';\nimport type {GeneratedAnswerCitation} from '../../controllers/generated-answer/headless-generated-answer.js';\nimport type {SearchAppState} from '../../state/search-app-state.js';\nimport type {\n GeneratedAnswerSection,\n SearchSection,\n} from '../../state/state-sections.js';\n\nexport const generativeQuestionAnsweringIdSelector = (\n state: Partial<SearchAppState>\n): {answerAPIEnabled: boolean; id: string | undefined} => {\n if (isGeneratedAnswerSection(state)) {\n return {answerAPIEnabled: true, id: selectAnswer(state).data?.answerId};\n }\n\n if (isSearchSection(state)) {\n return {\n answerAPIEnabled: false,\n id: state.search.response.extendedResults.generativeQuestionAnsweringId,\n };\n }\n\n return {answerAPIEnabled: false, id: undefined};\n};\n\nconst isSearchSection = (\n state: Partial<SearchAppState> | StateNeededByAnswerAPI\n): state is SearchSection => 'search' in state;\n\nconst isGeneratedAnswerSection = (\n state: Partial<SearchAppState>\n): state is StateNeededByAnswerAPI =>\n 'answer' in state &&\n 'generatedAnswer' in state &&\n !isNullOrUndefined(state.generatedAnswer?.answerConfigurationId);\n\nexport const selectFieldsToIncludeInCitation = (\n state: Partial<GeneratedAnswerSection>\n) => state.generatedAnswer?.fieldsToIncludeInCitations;\n\nexport const citationSourceSelector = createSelector(\n (state: Partial<GeneratedAnswerSection>) => state.generatedAnswer?.citations,\n (_state: Partial<GeneratedAnswerSection>, citationId: string) => citationId,\n (citations, citationId) =>\n citations?.find(\n (citation: GeneratedAnswerCitation) => citation.id === citationId\n )\n);\n", "import type {GeneratedAnswerStreamRequest} from '../../api/generated-answer/generated-answer-request.js';\nimport {getOrganizationEndpoint} from '../../api/platform-client.js';\nimport type {\n ConfigurationSection,\n GeneratedAnswerSection,\n SearchSection,\n} from '../../state/state-sections.js';\n\ntype StateNeededByGeneratedAnswerStream = ConfigurationSection &\n SearchSection &\n GeneratedAnswerSection;\n\nexport const buildStreamingRequest = async (\n state: StateNeededByGeneratedAnswerStream\n): Promise<GeneratedAnswerStreamRequest> => ({\n accessToken: state.configuration.accessToken,\n organizationId: state.configuration.organizationId,\n url: getOrganizationEndpoint(\n state.configuration.organizationId,\n state.configuration.environment\n ),\n streamId: state.search.extendedResults?.generativeQuestionAnsweringId,\n});\n", "export const generatedContentFormat = ['text/plain', 'text/markdown'] as const;\n\nexport type GeneratedContentFormat = (typeof generatedContentFormat)[number];\n\nexport interface GeneratedResponseFormat {\n /**\n * The content formats that are supported for rendering the answer. If no values are provided, `text/plain` is used.\n * Formats:\n * - `text/plain`: The answer can be streamed as plain text.\n * - `text/markdown`: The answer can be streamed as a Markdown document.\n */\n contentFormat?: GeneratedContentFormat[];\n}\n", "export const minimumPage = 1;\nexport const maximumNumberOfResultsFromIndex = 5000;\n", "import {createSelector} from '@reduxjs/toolkit';\n\nexport const selectPipeline = createSelector(\n (state: {pipeline?: string}) => state.pipeline,\n (pipeline) => pipeline\n);\n", "import {createSelector} from '@reduxjs/toolkit';\nimport type {QueryState} from './query-state.js';\n\nexport const selectQuery = createSelector(\n (state: {query?: QueryState}) => state.query,\n (query) => query\n);\n", "import {\n formatRelativeDateForSearchApi,\n isRelativeDateFormat,\n} from '../../api/search/date/relative-date.js';\nimport type {SearchRequest} from '../../api/search/search/search-request.js';\nimport type {SearchResponseSuccess} from '../../api/search/search/search-response.js';\nimport type {SearchAPIClientResponse} from '../../api/search/search-api-client.js';\nimport type {SearchAPIErrorWithStatusCode} from '../../api/search/search-api-error-response.js';\nimport type {FacetsParam} from '../../api/search/search-api-params.js';\nimport type {AnyFacetRequest} from '../facets/generic/interfaces/generic-facet-request.js';\nimport type {AnyFacetResponse} from '../facets/generic/interfaces/generic-facet-response.js';\nimport {\n type DateRangeRequest,\n isDateFacetRequest,\n} from '../facets/range-facets/date-facet-set/interfaces/request.js';\nimport type {\n DateFacetResponse,\n DateFacetValue,\n} from '../facets/range-facets/date-facet-set/interfaces/response.js';\n\nfunction formatStartFacetValue(value: string) {\n return `start${value}`;\n}\n\nfunction formatEndFacetValue(value: string) {\n return `end${value}`;\n}\n\nexport interface SearchMappings {\n dateFacetValueMap: Record<string, Record<string, string>>;\n}\n\nexport const initialSearchMappings: () => SearchMappings = () => ({\n dateFacetValueMap: {},\n});\n\nfunction mapDateRangeRequest(\n value: DateRangeRequest,\n facetId: string,\n mappings: SearchMappings\n) {\n let start = value.start;\n let end = value.end;\n if (isRelativeDateFormat(start)) {\n start = formatRelativeDateForSearchApi(start);\n mappings.dateFacetValueMap[facetId][formatStartFacetValue(start)] =\n value.start;\n }\n if (isRelativeDateFormat(end)) {\n end = formatRelativeDateForSearchApi(end);\n mappings.dateFacetValueMap[facetId][formatEndFacetValue(end)] = value.end;\n }\n\n return {...value, start, end};\n}\n\nexport function mapFacetRequest(\n facetRequest: AnyFacetRequest,\n mappings: SearchMappings\n) {\n if (isDateFacetRequest(facetRequest)) {\n const {facetId, currentValues} = facetRequest;\n mappings.dateFacetValueMap[facetId] = {};\n return {\n ...facetRequest,\n currentValues: currentValues.map((value) =>\n mapDateRangeRequest(value, facetId, mappings)\n ),\n };\n }\n\n return facetRequest;\n}\n\nexport interface MappedSearchRequest<T extends FacetsParam = SearchRequest> {\n request: T;\n mappings: SearchMappings;\n}\n\nexport function mapSearchRequest<T extends FacetsParam = SearchRequest>(\n searchRequest: T\n): MappedSearchRequest<T> {\n const mappings = initialSearchMappings();\n const request: T = {\n ...searchRequest,\n facets: searchRequest.facets?.map((facetRequest) =>\n mapFacetRequest(facetRequest, mappings)\n ),\n };\n return {request, mappings};\n}\n\nfunction mapDateRangeResponse(\n value: DateFacetValue,\n facetId: string,\n mappings: SearchMappings\n) {\n return {\n ...value,\n start:\n mappings.dateFacetValueMap[facetId][formatStartFacetValue(value.start)] ||\n value.start,\n end:\n mappings.dateFacetValueMap[facetId][formatEndFacetValue(value.end)] ||\n value.end,\n };\n}\n\nfunction isDateFacetResponse(\n facetResponse: AnyFacetResponse,\n mappings: SearchMappings\n): facetResponse is DateFacetResponse {\n return facetResponse.facetId in mappings.dateFacetValueMap;\n}\n\nfunction mapFacetResponse(\n facetResponse: AnyFacetResponse,\n mappings: SearchMappings\n) {\n if (isDateFacetResponse(facetResponse, mappings)) {\n return {\n ...facetResponse,\n values: facetResponse.values.map((value) =>\n mapDateRangeResponse(value, facetResponse.facetId, mappings)\n ),\n };\n }\n return facetResponse;\n}\n\nexport type ErrorResponse = {\n error: SearchAPIErrorWithStatusCode;\n};\nexport type SuccessResponse = {\n success: SearchResponseSuccess;\n};\n\nexport function mapSearchResponse<\n ResponseSuccess extends SearchAPIClientResponse<SearchResponseSuccess>,\n>(\n response: ResponseSuccess,\n mappings: SearchMappings\n): SuccessResponse | ErrorResponse {\n if ('success' in response) {\n const success: SearchResponseSuccess = {\n ...response.success,\n facets: response.success.facets?.map((facetResponse) =>\n mapFacetResponse(facetResponse, mappings)\n ),\n };\n return {success};\n }\n\n return response;\n}\n", "import {NumberValue, Schema, StringValue} from '@coveo/bueno';\nimport dayjs, {type QUnitType} from 'dayjs';\nimport quarterOfYear from 'dayjs/plugin/quarterOfYear.js';\nimport {\n assertDateAboveAPIMinimum,\n formatDateForSearchApi,\n} from './date-format.js';\n\ndayjs.extend(quarterOfYear);\n\n/**\n * The period to set the date relative to.\n */\nexport type RelativeDatePeriod = 'past' | 'now' | 'next';\nconst validRelativeDatePeriods = ['past', 'now', 'next'];\n\n/**\n * The unit of time in which the date is set relative to.\n */\nexport type RelativeDateUnit =\n | 'minute'\n | 'hour'\n | 'day'\n | 'week'\n | 'month'\n | 'quarter'\n | 'year';\nconst validRelativeDateUnits = [\n 'minute',\n 'hour',\n 'day',\n 'week',\n 'month',\n 'quarter',\n 'year',\n];\n\n/**\n * Defines a date relative to the current moment.\n */\nexport interface RelativeDate {\n /**\n * The relative period of time.\n */\n period: RelativeDatePeriod;\n /**\n * The unit of time in which the date is set relative to. When `period` is set as `now`, the `unit` does not have to be defined.\n */\n unit?: RelativeDateUnit;\n /**\n * The amount of the `unit` of time. When `period` is set as `now`, the `amount` does not have to be defined.\n */\n amount?: number;\n}\n\nconst buildRelativeDateDefinition = (period: RelativeDatePeriod) => {\n const isNow = period === 'now';\n return {\n amount: new NumberValue({required: !isNow, min: 1}),\n unit: new StringValue({\n required: !isNow,\n constrainTo: validRelativeDateUnits,\n }),\n period: new StringValue({\n required: true,\n constrainTo: validRelativeDatePeriods,\n }),\n };\n};\n\n/**\n * Validates a relative date and throws if it's invalid.\n * @param date The relative date, in `RelativeDate` or string format\n */\nexport function validateRelativeDate(date: RelativeDate | string) {\n if (typeof date === 'string' && !isRelativeDateFormat(date)) {\n throw new Error(\n `The value \"${date}\" is not respecting the relative date format \"period-amount-unit\"`\n );\n }\n\n const relativeDate =\n typeof date === 'string' ? parseRelativeDate(date) : date;\n\n new Schema(buildRelativeDateDefinition(relativeDate.period)).validate(\n relativeDate\n );\n\n const dayJsDate = relativeToAbsoluteDate(relativeDate);\n const stringifiedDate = JSON.stringify(relativeDate);\n if (!dayJsDate.isValid()) {\n throw new Error(`Date is invalid: ${stringifiedDate}`);\n }\n\n assertDateAboveAPIMinimum(dayJsDate);\n}\n\nexport function serializeRelativeDate(relativeDate: RelativeDate) {\n const {period, amount, unit} = relativeDate;\n\n switch (period) {\n case 'past':\n case 'next':\n return `${period}-${amount}-${unit}`;\n case 'now':\n return period;\n }\n}\n\nfunction relativeToAbsoluteDate(relativeDate: RelativeDate) {\n const {period, amount, unit} = relativeDate;\n switch (period) {\n case 'past':\n return dayjs().subtract(amount!, unit as QUnitType);\n case 'next':\n return dayjs().add(amount!, unit as QUnitType);\n case 'now':\n return dayjs();\n }\n}\n\nexport function formatRelativeDateForSearchApi(relativeDate: string) {\n return formatDateForSearchApi(\n relativeToAbsoluteDate(parseRelativeDate(relativeDate))\n );\n}\n\nfunction splitDate(date: string) {\n return date.toLocaleLowerCase().split('-');\n}\n\nexport function isRelativeDateFormat(date: string) {\n const [period, amount, unit] = splitDate(date);\n if (period === 'now') {\n return true;\n }\n\n if (!validRelativeDatePeriods.includes(period)) {\n return false;\n }\n\n if (!validRelativeDateUnits.includes(unit)) {\n return false;\n }\n\n const intAmount = parseInt(amount);\n if (Number.isNaN(intAmount) || intAmount <= 0) {\n return false;\n }\n\n return true;\n}\n\nexport function isRelativeDate(date: unknown): date is RelativeDate {\n return !!date && typeof date === 'object' && 'period' in date!;\n}\n\nfunction parseRelativeDate(date: string): RelativeDate {\n const [period, amount, unit] = splitDate(date);\n if (period === 'now') {\n return {\n period: 'now',\n };\n }\n\n return {\n period: period as RelativeDatePeriod,\n amount: amount ? parseInt(amount) : undefined,\n unit: unit ? (unit as RelativeDateUnit) : undefined,\n };\n}\n\n/**\n * Deserializes a relative date string value into a valid `RelativeDate` object.\n * Throws an error if the date is invalid.\n * @param date The string serialized with the format \"period-amount-unit\"\n * @returns The parsed `RelativeDate` object.\n */\nexport function deserializeRelativeDate(date: string) {\n validateRelativeDate(date);\n return parseRelativeDate(date);\n}\n", "import dayjs, {type ConfigType} from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat.js';\n\ndayjs.extend(customParseFormat);\n\n/**\n * The date format supported by the Search API.\n */\nexport const API_DATE_FORMAT = 'YYYY/MM/DD@HH:mm:ss';\nconst API_DATE_MINIMUM = '1401-01-01';\n\nexport type AbsoluteDate = string | number | Date;\n\nexport function parseDate(date: ConfigType, format?: string) {\n const parsedDate = dayjs(date, format);\n if (!parsedDate.isValid() && !format) {\n return dayjs(date, API_DATE_FORMAT);\n }\n return parsedDate;\n}\n\nexport function formatDateForSearchApi(date: dayjs.Dayjs) {\n return date.format(API_DATE_FORMAT);\n}\n\nexport function isSearchApiDate(date: string) {\n return formatDateForSearchApi(parseDate(date)) === date;\n}\n\nexport function validateAbsoluteDate(date: AbsoluteDate, dateFormat?: string) {\n const dayJSDate = parseDate(date, dateFormat);\n\n if (!dayJSDate.isValid()) {\n const provideFormat =\n '. Please provide a date format string in the configuration options. See https://day.js.org/docs/en/parse/string-format for more information.';\n const withFormat = ` with the format \"${dateFormat}\"`;\n throw new Error(\n `Could not parse the provided date \"${date}\"${\n dateFormat ? withFormat : provideFormat\n }`\n );\n }\n\n assertDateAboveAPIMinimum(dayJSDate);\n}\n\nexport function assertDateAboveAPIMinimum(date: dayjs.Dayjs) {\n if (date.isBefore(API_DATE_MINIMUM)) {\n throw new Error(\n `Date is before year 1401, which is unsupported by the API: ${date}`\n );\n }\n}\n", "import type {CurrentValues, Type} from '../../../facet-api/request.js';\nimport type {FacetValueState} from '../../../facet-api/value.js';\nimport type {AnyFacetRequest} from '../../../generic/interfaces/generic-facet-request.js';\nimport type {BaseRangeFacetRequest} from '../../generic/interfaces/request.js';\n\n/**\n * The options defining a value to display in a `DateFacet`.\n */\nexport interface DateRangeRequest {\n /**\n * The starting value for the date range, formatted as `YYYY/MM/DD@HH:mm:ss` or the [Relative Date](https://docs.coveo.com/en/headless/latest/reference/search/controllers/date-facet/relative-date-format/) format \"period-amount-unit\".\n */\n start: string;\n\n /**\n * The ending value for the date range, formatted as `YYYY/MM/DD@HH:mm:ss` or the [Relative Date](https://docs.coveo.com/en/headless/latest/reference/search/controllers/date-facet/relative-date-format/) format \"period-amount-unit\".\n */\n end: string;\n\n /**\n * Whether to include the `end` value in the range.\n */\n endInclusive: boolean;\n\n /**\n * The current facet value state.\n */\n state: FacetValueState;\n\n /**\n * The previous facet value state in the search interface.\n */\n previousState?: FacetValueState;\n}\n\nexport function isDateFacetRequest(\n request: AnyFacetRequest\n): request is DateFacetRequest {\n return request.type === 'dateRange';\n}\n\nexport interface DateFacetRequest\n extends BaseRangeFacetRequest,\n CurrentValues<DateRangeRequest>,\n Type<'dateRange'> {}\n", "import {createSelector} from '@reduxjs/toolkit';\nimport type {SearchSection} from '../../state/state-sections.js';\nimport {getResultProperty} from '../result-templates/result-templates-helpers.js';\nimport type {SearchState} from './search-state.js';\n\nexport function firstSearchExecutedSelector(state: SearchSection) {\n return state.search.response.searchUid !== '';\n}\n\nexport function resultFromFieldSelector(\n state: SearchSection,\n contentIdKey: string,\n contentIdValue: string\n) {\n return state.search.results.find(\n (result) => getResultProperty(result, contentIdKey) === contentIdValue\n );\n}\n\nexport const selectSearchActionCause = createSelector(\n (state: {search?: SearchState}) => state.search,\n (state) => {\n return state?.searchAction?.actionCause || '';\n }\n);\n", "import {isNullOrUndefined} from '@coveo/bueno';\nimport type {Result} from '../../api/search/search/result.js';\nimport {isArray} from '../../utils/utils.js';\nimport type {ResultTemplateCondition} from './result-templates-manager.js';\n\n/**\n * Extracts a property from a result object.\n * @param result (Result) The target result.\n * @param property (string) The property to extract.\n * @returns (unknown) The value of the specified property in the specified result, or null if the property does not exist.\n */\nexport const getResultProperty = (result: Result, property: string) => {\n const anyResult = result as unknown as Record<string, unknown>;\n if (!isNullOrUndefined(anyResult[property])) {\n return anyResult[property];\n }\n\n if (!isNullOrUndefined(result.raw[property])) {\n return result.raw[property];\n }\n\n return null;\n};\n\n/**\n * Creates a condition that verifies if the specified fields are defined.\n * @param fieldNames (string[]) A list of fields that must be defined.\n * @returns (ResultTemplateCondition) A function that takes a result and checks if every field in the specified list is defined.\n */\nexport const fieldsMustBeDefined = (\n fieldNames: string[]\n): ResultTemplateCondition => {\n return (result: Result) => {\n return fieldNames.every(\n (fieldName) => !isNullOrUndefined(getResultProperty(result, fieldName))\n );\n };\n};\n\n/**\n * Creates a condition that verifies if the specified fields are not defined.\n * @param fieldNames (string[]) A list of fields that must not be defined.\n * @returns (ResultTemplateCondition) A function that takes a result and checks if every field in the specified list is not defined.\n */\nexport const fieldsMustNotBeDefined = (\n fieldNames: string[]\n): ResultTemplateCondition => {\n return (result: Result) => {\n return fieldNames.every((fieldName) =>\n isNullOrUndefined(getResultProperty(result, fieldName))\n );\n };\n};\n\n/**\n * Creates a condition that verifies if a field's value contains any of the specified values.\n * @param fieldName (string) The name of the field to check.\n * @param valuesToMatch (string[]) A list of possible values to match.\n * @returns (ResultTemplateCondition) A function that takes a result and checks if the value for the specified field matches any value in the specified list.\n */\nexport const fieldMustMatch = (\n fieldName: string,\n valuesToMatch: string[]\n): ResultTemplateCondition => {\n return (result: Result) => {\n const fieldValues = getFieldValuesFromResult(fieldName, result);\n return valuesToMatch.some((valueToMatch) =>\n fieldValues.some(\n (fieldValue) =>\n `${fieldValue}`.toLowerCase() === valueToMatch.toLowerCase()\n )\n );\n };\n};\n\n/**\n * Creates a condition that verifies that a field's value does not contain any of the specified values.\n * @param fieldName (string) The name of the field to check.\n * @param blacklistedValues (string[]) A list of all disallowed values.\n * @returns (ResultTemplateCondition) A function that takes a result and checks that the value for the specified field does not match any value in the given list.\n */\nexport const fieldMustNotMatch = (\n fieldName: string,\n blacklistedValues: string[]\n): ResultTemplateCondition => {\n return (result: Result) => {\n const fieldValues = getFieldValuesFromResult(fieldName, result);\n return blacklistedValues.every((blacklistedValue) =>\n fieldValues.every(\n (fieldValue) =>\n `${fieldValue}`.toLowerCase() !== blacklistedValue.toLowerCase()\n )\n );\n };\n};\n\nconst getFieldValuesFromResult = (fieldName: string, result: Result) => {\n const rawValue = getResultProperty(result, fieldName);\n return isArray(rawValue) ? rawValue : [rawValue];\n};\n\nexport const ResultTemplatesHelpers = {\n getResultProperty,\n fieldsMustBeDefined,\n fieldsMustNotBeDefined,\n fieldMustMatch,\n fieldMustNotMatch,\n};\n", "import {createSelector} from '@reduxjs/toolkit';\n\nexport const selectSearchHub = createSelector(\n (state: {searchHub?: string}) => state.searchHub,\n (searchHub) => searchHub\n);\n", "import {createSelector} from '@reduxjs/toolkit';\nimport type {StaticFilterSection} from '../../state/state-sections.js';\n\n/**\n * Given a static filter state, returns an array of selected filter expressions.\n * @param state The static filter state that contains the static filter set.\n * @returns An array of filter expressions.\n */\nexport const selectStaticFilterExpressions = createSelector(\n (state: Partial<StaticFilterSection>) => state.staticFilterSet,\n (staticFilterSet) => {\n const filters = Object.values(staticFilterSet || {});\n return filters.map((filter) => {\n const selected = filter.values.filter(\n (value) => value.state === 'selected' && !!value.expression.trim()\n );\n\n const expression = selected.map((value) => value.expression).join(' OR ');\n return selected.length > 1 ? `(${expression})` : expression;\n });\n }\n);\n", "import {createSelector} from '@reduxjs/toolkit';\nimport type {TabSetState} from './tab-set-state.js';\n\nexport const selectActiveTab = createSelector(\n (state?: TabSetState) => state,\n (tabSetState?: TabSetState): string => {\n if (!tabSetState) {\n return '';\n }\n\n for (const tabId in tabSetState) {\n if (tabSetState[tabId].isActive) {\n return tabSetState[tabId].id;\n }\n }\n return '';\n }\n);\n\nexport const selectActiveTabExpression = createSelector(\n (state?: TabSetState) => state,\n (tabSetState?: TabSetState): string => {\n const activeTabId = selectActiveTab(tabSetState);\n return activeTabId && tabSetState\n ? tabSetState[activeTabId].expression\n : '';\n }\n);\n", "import type {FacetSetState} from '../features/facets/facet-set/facet-set-state.js';\nimport {getFacetRequests} from '../features/facets/generic/interfaces/generic-facet-request.js';\nimport type {AnyFacetValue} from '../features/facets/generic/interfaces/generic-facet-response.js';\nimport type {RangeFacetSetState} from '../features/facets/range-facets/generic/interfaces/range-facet.js';\nimport type {SearchAppState} from '../state/search-app-state.js';\nimport type {ConfigurationSection} from '../state/state-sections.js';\n\ntype StateNeededBySearchRequest = ConfigurationSection &\n Partial<SearchAppState>;\n\ntype SortCriteria = {\n type: string;\n order: string;\n};\n\nexport function sortFacets<T extends {facetId: string}>(\n facets: T[],\n sortOrder: string[]\n) {\n const payloadMap: Record<string, T> = {};\n facets.forEach((f) => {\n payloadMap[f.facetId] = f;\n });\n\n const sortedFacets: T[] = [];\n sortOrder.forEach((facetId) => {\n if (facetId in payloadMap) {\n sortedFacets.push(payloadMap[facetId]);\n delete payloadMap[facetId];\n }\n });\n const remainingFacets = Object.values(payloadMap);\n\n return [...sortedFacets, ...remainingFacets];\n}\n\nfunction getRangeFacetRequests<T extends RangeFacetSetState>(state: T) {\n return getFacetRequests(state).map((request) => {\n const currentValues = request.currentValues as AnyFacetValue[];\n const hasActiveValues = currentValues.some(({state}) => state !== 'idle');\n\n if (request.generateAutomaticRanges && !hasActiveValues) {\n return {...request, currentValues: []};\n }\n\n return request;\n });\n}\n\nexport const sortCriteriaMap: Record<string, SortCriteria> = {\n alphanumericDescending: {type: 'alphanumeric', order: 'descending'},\n alphanumericNaturalDescending: {\n type: 'alphanumericNatural',\n order: 'descending',\n },\n};\n\nfunction getSpecificFacetRequests<T extends FacetSetState>(state: T) {\n return getFacetRequests(state).map((request) => {\n /* The Search API does not support 'alphanumericDescending' as a string value and instead relies on a new sort mechanism to specify sort order.\n At the moment, this is only supported for alphanumeric sorting, but will likely transition to this pattern for other types in the future. */\n const sortCriteria =\n sortCriteriaMap[request.sortCriteria as keyof typeof sortCriteriaMap];\n if (sortCriteria) {\n return {\n ...request,\n sortCriteria,\n };\n }\n return request;\n });\n}\n\nfunction getAllFacets(state: StateNeededBySearchRequest) {\n return [\n ...getSpecificFacetRequests(state.facetSet ?? {}),\n ...getRangeFacetRequests(state.numericFacetSet ?? {}),\n ...getRangeFacetRequests(state.dateFacetSet ?? {}),\n ...getFacetRequests(state.categoryFacetSet ?? {}),\n ];\n}\n\nfunction getAllEnabledFacets(state: StateNeededBySearchRequest) {\n return getAllFacets(state).filter(\n ({facetId}) => state.facetOptions?.facets[facetId]?.enabled ?? true\n );\n}\n\nexport function getFacets(state: StateNeededBySearchRequest) {\n return sortFacets(getAllEnabledFacets(state), state.facetOrder ?? []);\n}\n", "import type {\n CategoryFacetRequest,\n CategoryFacetValueRequest,\n} from '../../category-facet-set/interfaces/request.js';\nimport type {\n FacetRequest,\n FacetValueRequest,\n} from '../../facet-set/interfaces/request.js';\nimport type {DateRangeRequest} from '../../range-facets/date-facet-set/interfaces/request.js';\nimport type {RangeFacetRequest} from '../../range-facets/generic/interfaces/range-facet.js';\nimport type {NumericRangeRequest} from '../../range-facets/numeric-facet-set/interfaces/request.js';\nimport type {AnyFacetSetState} from './generic-facet-section.js';\n\nexport type AnyFacetRequest =\n | FacetRequest\n | RangeFacetRequest\n | CategoryFacetRequest;\n\nexport type AnyFacetValueRequest =\n | FacetValueRequest\n | CategoryFacetValueRequest\n | NumericRangeRequest\n | DateRangeRequest;\n\ntype InferRequestFromFacetSetState<T extends AnyFacetSetState> =\n T[string]['request'];\n\nexport function getFacetRequests<T extends AnyFacetSetState>(state: T) {\n return Object.values(state).map(\n (slice) => slice.request\n ) as InferRequestFromFacetSetState<T>[];\n}\n", "/** biome-ignore-all lint/suspicious/noConfusingVoidType: <> */\nimport {\n type EventSourceMessage,\n getBytes,\n getLines,\n getMessages,\n} from './parse.js';\n\nconst EventStreamContentType = 'text/event-stream';\n\nconst DefaultRetryInterval = 1000;\nconst LastEventId = 'last-event-id';\n\nfunction isBrowser() {\n return typeof window !== 'undefined';\n}\n\ninterface FetchEventSourceInit extends RequestInit {\n /**\n * The request headers. FetchEventSource only supports the Record<string,string> format.\n */\n headers?: Record<string, string>;\n\n /**\n * Called when a response is received. Use this to validate that the response\n * actually matches what you expect (and throw if it doesn't.) If not provided,\n * will default to a basic validation to ensure the content-type is text/event-stream.\n */\n onopen?: (response: Response) => Promise<void>;\n\n /**\n * Called when a message is received. NOTE: Unlike the default browser\n * EventSource.onmessage, this callback is called for _all_ events,\n * even ones with a custom `event` field.\n */\n onmessage?: (ev: EventSourceMessage) => void;\n\n /**\n * Called when a response finishes. If you don't expect the server to kill\n * the connection, you can throw an exception here and retry using onerror.\n */\n onclose?: () => void;\n\n /**\n * Called when there is any error making the request / processing messages /\n * handling callbacks etc. Use this to control the retry strategy: if the\n * error is fatal, rethrow the error inside the callback to stop the entire\n * operation. Otherwise, you can return an interval (in milliseconds) after\n * which the request will automatically retry (with the last-event-id).\n * If this callback is not specified, or it returns undefined, fetchEventSource\n * will treat every error as retryable and will try again after 1 second.\n */\n onerror?: (err: unknown) => number | null | undefined | void;\n\n /**\n * If true, will keep the request open even if the document is hidden.\n * By default, fetchEventSource will close the request and reopen it\n * automatically when the document becomes visible again.\n */\n openWhenHidden?: boolean;\n\n /** The Fetch function to use. Defaults to window.fetch */\n fetch?: typeof fetch;\n}\n\nexport function fetchEventSource(\n input: RequestInfo,\n {\n signal: inputSignal,\n headers: inputHeaders,\n onopen: inputOnOpen,\n onmessage,\n onclose,\n onerror,\n openWhenHidden,\n fetch: inputFetch,\n ...rest\n }: FetchEventSourceInit\n) {\n return new Promise<void>((resolve, reject) => {\n // make a copy of the input headers since we may modify it below:\n const headers = {...inputHeaders};\n if (!headers.accept) {\n headers.accept = EventStreamContentType;\n }\n\n let curRequestController: AbortController | null;\n function onVisibilityChange() {\n curRequestController?.abort(); // close existing request on every visibility change\n if (!document.hidden) {\n create(); // page is now visible again, recreate request.\n }\n }\n\n if (!openWhenHidden && isBrowser()) {\n document.addEventListener('visibilitychange', onVisibilityChange);\n }\n\n let retryInterval = DefaultRetryInterval;\n let retryTimer: string | number | NodeJS.Timeout;\n function dispose() {\n if (isBrowser()) {\n document.removeEventListener('visibilitychange', onVisibilityChange);\n }\n clearTimeout(retryTimer);\n curRequestController?.abort();\n }\n\n // if the incoming signal aborts, dispose resources and resolve:\n inputSignal?.addEventListener('abort', () => {\n dispose();\n resolve(); // don't waste time windconstructing/logging errors\n });\n\n const outputFetch = inputFetch ?? fetch;\n const onopen = inputOnOpen ?? defaultOnOpen;\n async function create(): Promise<void> {\n curRequestController = AbortController ? new AbortController() : null;\n try {\n const response = await outputFetch(input, {\n ...rest,\n headers,\n signal: curRequestController?.signal,\n });\n\n await onopen(response);\n\n await getBytes(\n response.body!,\n getLines(\n getMessages(\n (id) => {\n if (id) {\n // store the id and send it back on the next retry:\n headers[LastEventId] = id;\n } else {\n // don't send the last-event-id header anymore:\n delete headers[LastEventId];\n }\n },\n (retry) => {\n retryInterval = retry;\n },\n onmessage\n )\n )\n );\n\n onclose?.();\n dispose();\n resolve();\n } catch (err) {\n if (!curRequestController?.signal?.aborted) {\n // if we haven't aborted the request ourselves:\n try {\n // check if we need to retry:\n const interval: number = onerror?.(err) ?? retryInterval;\n clearTimeout(retryTimer);\n retryTimer = setTimeout(create, interval);\n } catch (innerErr) {\n // we should not retry anymore:\n dispose();\n reject(innerErr);\n }\n }\n }\n }\n\n create();\n });\n}\n\nfunction defaultOnOpen(response: Response) {\n const contentType = response.headers.get('content-type');\n if (!contentType?.startsWith(EventStreamContentType)) {\n throw new Error(\n `Expected content-type to be ${EventStreamContentType}, Actual: ${contentType}`\n );\n }\n}\n", "/**\n * Represents a message sent in an event stream\n * https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format\n */\n/** biome-ignore-all lint/suspicious/noAssignInExpressions: <> */\nexport interface EventSourceMessage {\n /** The event ID to set the EventSource object's last event ID value. */\n id: string;\n /** A string identifying the type of event described. */\n event: string;\n /** The event data */\n data: string;\n /** The reconnection interval (in milliseconds) to wait before retrying the connection */\n retry?: number;\n}\n\n/**\n * Converts a ReadableStream into a callback pattern.\n * @param stream The input ReadableStream.\n * @param onChunk A function that will be called on each new byte chunk in the stream.\n * @returns {Promise<void>} A promise that will be resolved when the stream closes.\n */\nexport async function getBytes(\n stream: ReadableStream<Uint8Array>,\n onChunk: (arr: Uint8Array) => void\n) {\n const reader = stream.getReader();\n let result: ReadableStreamReadResult<Uint8Array>;\n while (!(result = await reader.read()).done) {\n onChunk(result.value);\n }\n}\n\nenum ControlChars {\n NewLine = 10,\n CarriageReturn = 13,\n Space = 32,\n Colon = 58,\n}\n\n/**\n * Parses arbitrary byte chunks into EventSource line buffers.\n * Each line should be of the format \"field: value\" and ends with \\r, \\n, or \\r\\n.\n * @param onLine A function that will be called on each new EventSource line.\n * @returns A function that should be called for each incoming byte chunk.\n */\nexport function getLines(\n onLine: (line: Uint8Array, fieldLength: number) => void\n) {\n let buffer: Uint8Array | undefined;\n let position: number; // current read position\n let fieldLength: number; // length of the `field` portion of the line\n let discardTrailingNewline = false;\n\n // return a function that can process each incoming byte chunk:\n return function onChunk(arr: Uint8Array) {\n if (buffer === undefined) {\n buffer = arr;\n position = 0;\n fieldLength = -1;\n } else {\n // we're still parsing the old line. Append the new bytes into buffer:\n buffer = concat(buffer, arr);\n }\n\n const bufLength = buffer.length;\n let lineStart = 0; // index where the current line starts\n while (position < bufLength) {\n if (discardTrailingNewline) {\n if (buffer[position] === ControlChars.NewLine) {\n lineStart = ++position; // skip to next char\n }\n\n discardTrailingNewline = false;\n }\n\n // start looking forward till the end of line:\n let lineEnd = -1; // index of the \\r or \\n char\n for (; position < bufLength && lineEnd === -1; ++position) {\n switch (buffer[position]) {\n case ControlChars.Colon:\n if (fieldLength === -1) {\n // first colon in line\n fieldLength = position - lineStart;\n }\n break;\n case ControlChars.CarriageReturn:\n discardTrailingNewline = true;\n lineEnd = position;\n break;\n case ControlChars.NewLine:\n lineEnd = position;\n break;\n }\n }\n\n if (lineEnd === -1) {\n // We reached the end of the buffer but the line hasn't ended.\n // Wait for the next arr and then continue parsing:\n break;\n }\n\n // we've reached the line end, send it out:\n onLine(buffer.subarray(lineStart, lineEnd), fieldLength);\n lineStart = position; // we're now on the next line\n fieldLength = -1;\n }\n\n if (lineStart === bufLength) {\n buffer = undefined; // we've finished reading it\n } else if (lineStart !== 0) {\n // Create a new view into buffer beginning at lineStart so we don't\n // need to copy over the previous lines when we get the new arr:\n buffer = buffer.subarray(lineStart);\n position -= lineStart;\n }\n };\n}\n\n/**\n * Parses line buffers into EventSourceMessages.\n * @param onId A function that will be called on each `id` field.\n * @param onRetry A function that will be called on each `retry` field.\n * @param onMessage A function that will be called on each message.\n * @returns A function that should be called for each incoming line buffer.\n */\nexport function getMessages(\n onId: (id: string) => void,\n onRetry: (retry: number) => void,\n onMessage?: (msg: EventSourceMessage) => void\n) {\n let message = newMessage();\n const decoder = new TextDecoder();\n\n // return a function that can process each incoming line buffer:\n return function onLine(line: Uint8Array, fieldLength: number) {\n if (line.length === 0) {\n // empty line denotes end of message. Trigger the callback and start a new message:\n onMessage?.(message);\n message = newMessage();\n } else if (fieldLength > 0) {\n // exclude comments and lines with no values\n // line is of format \"<field>:<value>\" or \"<field>: <value>\"\n // https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation\n const field = decoder.decode(line.subarray(0, fieldLength));\n const valueOffset =\n fieldLength + (line[fieldLength + 1] === ControlChars.Space ? 2 : 1);\n const value = decoder.decode(line.subarray(valueOffset));\n\n switch (field) {\n case 'data':\n // if this message already has data, append the new value to the old.\n // otherwise, just set to the new value:\n message.data = message.data ? `${message.data}\\n${value}` : value; // otherwise,\n break;\n case 'event':\n message.event = value;\n break;\n case 'id':\n onId((message.id = value));\n break;\n case 'retry':\n retry(value, message, onRetry);\n break;\n }\n }\n };\n}\n\nfunction retry(\n value: string,\n message: EventSourceMessage,\n onRetry: {(retry: number): void; (arg0: number): void}\n) {\n const retry = parseInt(value, 10);\n if (!Number.isNaN(retry)) {\n // per spec, ignore non-integers\n onRetry((message.retry = retry));\n }\n}\n\nfunction concat(a: Uint8Array, b: Uint8Array) {\n const res = new Uint8Array(a.length + b.length);\n res.set(a);\n res.set(b, a.length);\n return res;\n}\n\nfunction newMessage(): EventSourceMessage {\n // data, event, and id must be initialized to empty strings:\n // https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation\n // retry should be initialized to undefined so we return a consistent shape\n // to the js engine all the time: https://mathiasbynens.be/notes/shapes-ics#takeaways\n return {\n data: '',\n event: '',\n id: '',\n retry: undefined,\n };\n}\n", "import {\n type BaseQueryFn,\n createApi,\n type FetchArgs,\n type FetchBaseQueryError,\n fetchBaseQuery,\n retry,\n} from '@reduxjs/toolkit/query';\nimport type {\n ConfigurationSection,\n GeneratedAnswerSection,\n} from '../../state/state-sections.js';\nimport {getOrganizationEndpoint} from '../platform-client.js';\n\ntype StateNeededByAnswerSlice = ConfigurationSection & GeneratedAnswerSection;\n\n/**\n * `dynamicBaseQuery` is passed to the baseQuery of the createApi,\n * but note that the baseQuery will not be used if a queryFn is provided in the createApi endpoint\n */\nconst dynamicBaseQuery: BaseQueryFn<\n string | FetchArgs,\n unknown,\n FetchBaseQueryError\n> = async (args, api, extraOptions) => {\n const state = api.getState() as StateNeededByAnswerSlice;\n const {accessToken, environment, organizationId} = state.configuration;\n const answerConfigurationId = state.generatedAnswer.answerConfigurationId;\n const updatedArgs = {\n ...(args as FetchArgs),\n headers: {\n ...((args as FetchArgs)?.headers || {}),\n Authorization: `Bearer ${accessToken}`,\n },\n };\n try {\n const platformEndpoint = getOrganizationEndpoint(\n organizationId,\n environment\n );\n const data = fetchBaseQuery({\n baseUrl: `${platformEndpoint}/rest/organizations/${organizationId}/answer/v1/configs/${answerConfigurationId}`,\n \n fetchFn: async (request: Request | String) => {\n if (request instanceof String) {\n throw new Error(\"The provided 'request' must be a Request object.\");\n }\n const url = request.url;\n const options: { [key: string]: any } = {};\n [\n 'method',\n 'headers',\n 'mode',\n 'credentials',\n 'cache',\n 'redirect',\n 'referrer',\n 'referrerPolicy',\n 'integrity',\n 'keepalive',\n 'signal',\n ].forEach((key) => {\n options[key] = request[key as keyof Request];\n });\n options.duplex = 'half';\n options.body = await request.text();\n\n return fetch(url, options);\n },\n})(updatedArgs,{...api, signal: null},extraOptions);\n\n return {data};\n } catch (error) {\n return {error: error as FetchBaseQueryError};\n }\n};\n\nexport const answerSlice = createApi({\n reducerPath: 'answer',\n baseQuery: retry(dynamicBaseQuery, {maxRetries: 3}),\n endpoints: () => ({}),\n});\n", "import type { SerializedError } from '@reduxjs/toolkit';\nimport type { BaseQueryError } from '../baseQueryTypes';\nimport type { BaseEndpointDefinition, EndpointDefinitions, InfiniteQueryDefinition, MutationDefinition, PageParamFrom, QueryArgFrom, QueryDefinition, ResultTypeFrom } from '../endpointDefinitions';\nimport type { Id, WithRequiredProp } from '../tsHelpers';\nexport type QueryCacheKey = string & {\n _type: 'queryCacheKey';\n};\nexport type QuerySubstateIdentifier = {\n queryCacheKey: QueryCacheKey;\n};\nexport type MutationSubstateIdentifier = {\n requestId: string;\n fixedCacheKey?: string;\n} | {\n requestId?: string;\n fixedCacheKey: string;\n};\nexport type RefetchConfigOptions = {\n refetchOnMountOrArgChange: boolean | number;\n refetchOnReconnect: boolean;\n refetchOnFocus: boolean;\n};\nexport type PageParamFunction<DataType, PageParam> = (firstPage: DataType, allPages: Array<DataType>, firstPageParam: PageParam, allPageParams: Array<PageParam>) => PageParam | undefined | null;\nexport type InfiniteQueryConfigOptions<DataType, PageParam> = {\n /**\n * The initial page parameter to use for the first page fetch.\n */\n initialPageParam: PageParam;\n /**\n * This function is required to automatically get the next cursor for infinite queries.\n * The result will also be used to determine the value of `hasNextPage`.\n */\n getNextPageParam: PageParamFunction<DataType, PageParam>;\n /**\n * This function can be set to automatically get the previous cursor for infinite queries.\n * The result will also be used to determine the value of `hasPreviousPage`.\n */\n getPreviousPageParam?: PageParamFunction<DataType, PageParam>;\n /**\n * If specified, only keep this many pages in cache at once.\n * If additional pages are fetched, older pages in the other\n * direction will be dropped from the cache.\n */\n maxPages?: number;\n};\nexport interface InfiniteData<DataType, PageParam> {\n pages: Array<DataType>;\n pageParams: Array<PageParam>;\n}\n\n/**\n * Strings describing the query state at any given time.\n */\nexport enum QueryStatus {\n uninitialized = 'uninitialized',\n pending = 'pending',\n fulfilled = 'fulfilled',\n rejected = 'rejected',\n}\nexport type RequestStatusFlags = {\n status: QueryStatus.uninitialized;\n isUninitialized: true;\n isLoading: false;\n isSuccess: false;\n isError: false;\n} | {\n status: QueryStatus.pending;\n isUninitialized: false;\n isLoading: true;\n isSuccess: false;\n isError: false;\n} | {\n status: QueryStatus.fulfilled;\n isUninitialized: false;\n isLoading: false;\n isSuccess: true;\n isError: false;\n} | {\n status: QueryStatus.rejected;\n isUninitialized: false;\n isLoading: false;\n isSuccess: false;\n isError: true;\n};\nexport function getRequestStatusFlags(status: QueryStatus): RequestStatusFlags {\n return {\n status,\n isUninitialized: status === QueryStatus.uninitialized,\n isLoading: status === QueryStatus.pending,\n isSuccess: status === QueryStatus.fulfilled,\n isError: status === QueryStatus.rejected\n } as any;\n}\n\n/**\n * @public\n */\nexport type SubscriptionOptions = {\n /**\n * How frequently to automatically re-fetch data (in milliseconds). Defaults to `0` (off).\n */\n pollingInterval?: number;\n /**\n * Defaults to 'false'. This setting allows you to control whether RTK Query will continue polling if the window is not focused.\n *\n * If pollingInterval is not set or set to 0, this **will not be evaluated** until pollingInterval is greater than 0.\n *\n * Note: requires [`setupListeners`](./setupListeners) to have been called.\n */\n skipPollingIfUnfocused?: boolean;\n /**\n * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.\n *\n * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n *\n * Note: requires [`setupListeners`](./setupListeners) to have been called.\n */\n refetchOnReconnect?: boolean;\n /**\n * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.\n *\n * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n *\n * Note: requires [`setupListeners`](./setupListeners) to have been called.\n */\n refetchOnFocus?: boolean;\n};\nexport type Subscribers = {\n [requestId: string]: SubscriptionOptions;\n};\nexport type QueryKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any> ? K : never }[keyof Definitions];\nexport type InfiniteQueryKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? K : never }[keyof Definitions];\nexport type MutationKeys<Definitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends MutationDefinition<any, any, any, any> ? K : never }[keyof Definitions];\ntype BaseQuerySubState<D extends BaseEndpointDefinition<any, any, any>, DataType = ResultTypeFrom<D>> = {\n /**\n * The argument originally passed into the hook or `initiate` action call\n */\n originalArgs: QueryArgFrom<D>;\n /**\n * A unique ID associated with the request\n */\n requestId: string;\n /**\n * The received data from the query\n */\n data?: DataType;\n /**\n * The received error if applicable\n */\n error?: SerializedError | (D extends QueryDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);\n /**\n * The name of the endpoint associated with the query\n */\n endpointName: string;\n /**\n * Time that the latest query started\n */\n startedTimeStamp: number;\n /**\n * Time that the latest query was fulfilled\n */\n fulfilledTimeStamp?: number;\n};\nexport type QuerySubState<D extends BaseEndpointDefinition<any, any, any>, DataType = ResultTypeFrom<D>> = Id<({\n status: QueryStatus.fulfilled;\n} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'data' | 'fulfilledTimeStamp'> & {\n error: undefined;\n}) | ({\n status: QueryStatus.pending;\n} & BaseQuerySubState<D, DataType>) | ({\n status: QueryStatus.rejected;\n} & WithRequiredProp<BaseQuerySubState<D, DataType>, 'error'>) | {\n status: QueryStatus.uninitialized;\n originalArgs?: undefined;\n data?: undefined;\n error?: undefined;\n requestId?: undefined;\n endpointName?: string;\n startedTimeStamp?: undefined;\n fulfilledTimeStamp?: undefined;\n}>;\nexport type InfiniteQueryDirection = 'forward' | 'backward';\nexport type InfiniteQuerySubState<D extends BaseEndpointDefinition<any, any, any>> = D extends InfiniteQueryDefinition<any, any, any, any, any> ? QuerySubState<D, InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>> & {\n direction?: InfiniteQueryDirection;\n} : never;\ntype BaseMutationSubState<D extends BaseEndpointDefinition<any, any, any>> = {\n requestId: string;\n data?: ResultTypeFrom<D>;\n error?: SerializedError | (D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQueryError<BaseQuery> : never);\n endpointName: string;\n startedTimeStamp: number;\n fulfilledTimeStamp?: number;\n};\nexport type MutationSubState<D extends BaseEndpointDefinition<any, any, any>> = (({\n status: QueryStatus.fulfilled;\n} & WithRequiredProp<BaseMutationSubState<D>, 'data' | 'fulfilledTimeStamp'>) & {\n error: undefined;\n}) | (({\n status: QueryStatus.pending;\n} & BaseMutationSubState<D>) & {\n data?: undefined;\n}) | ({\n status: QueryStatus.rejected;\n} & WithRequiredProp<BaseMutationSubState<D>, 'error'>) | {\n requestId?: undefined;\n status: QueryStatus.uninitialized;\n data?: undefined;\n error?: undefined;\n endpointName?: string;\n startedTimeStamp?: undefined;\n fulfilledTimeStamp?: undefined;\n};\nexport type CombinedState<D extends EndpointDefinitions, E extends string, ReducerPath extends string> = {\n queries: QueryState<D>;\n mutations: MutationState<D>;\n provided: InvalidationState<E>;\n subscriptions: SubscriptionState;\n config: ConfigState<ReducerPath>;\n};\nexport type InvalidationState<TagTypes extends string> = { [_ in TagTypes]: {\n [id: string]: Array<QueryCacheKey>;\n [id: number]: Array<QueryCacheKey>;\n} };\nexport type QueryState<D extends EndpointDefinitions> = {\n [queryCacheKey: string]: QuerySubState<D[string]> | InfiniteQuerySubState<D[string]> | undefined;\n};\nexport type SubscriptionState = {\n [queryCacheKey: string]: Subscribers | undefined;\n};\nexport type ConfigState<ReducerPath> = RefetchConfigOptions & {\n reducerPath: ReducerPath;\n online: boolean;\n focused: boolean;\n middlewareRegistered: boolean | 'conflict';\n} & ModifiableConfigState;\nexport type ModifiableConfigState = {\n keepUnusedDataFor: number;\n invalidationBehavior: 'delayed' | 'immediately';\n} & RefetchConfigOptions;\nexport type MutationState<D extends EndpointDefinitions> = {\n [requestId: string]: MutationSubState<D[string]> | undefined;\n};\nexport type RootState<Definitions extends EndpointDefinitions, TagTypes extends string, ReducerPath extends string> = { [P in ReducerPath]: CombinedState<Definitions, TagTypes, P> };", "// This file exists to consolidate all of the imports from the `@reduxjs/toolkit` package.\n// ESBuild does not de-duplicate imports, so this file is used to ensure that each method\n// imported is only listed once, and there's only one mention of the `@reduxjs/toolkit` package.\n\nexport { createAction, createSlice, createSelector, createAsyncThunk, combineReducers, createNextState, isAnyOf, isAllOf, isAction, isPending, isRejected, isFulfilled, isRejectedWithValue, isAsyncThunkAction, prepareAutoBatched, SHOULD_AUTOBATCH, isPlainObject, nanoid } from '@reduxjs/toolkit';", "import { isPlainObject as _iPO } from '../core/rtkImports';\n\n// remove type guard\nconst isPlainObject: (_: any) => boolean = _iPO;\nexport function copyWithStructuralSharing<T>(oldObj: any, newObj: T): T;\nexport function copyWithStructuralSharing(oldObj: any, newObj: any): any {\n if (oldObj === newObj || !(isPlainObject(oldObj) && isPlainObject(newObj) || Array.isArray(oldObj) && Array.isArray(newObj))) {\n return newObj;\n }\n const newKeys = Object.keys(newObj);\n const oldKeys = Object.keys(oldObj);\n let isSameObject = newKeys.length === oldKeys.length;\n const mergeObj: any = Array.isArray(newObj) ? [] : {};\n for (const key of newKeys) {\n mergeObj[key] = copyWithStructuralSharing(oldObj[key], newObj[key]);\n if (isSameObject) isSameObject = oldObj[key] === mergeObj[key];\n }\n return isSameObject ? oldObj : mergeObj;\n}", "// Fast method for counting an object's keys\n// without resorting to `Object.keys(obj).length\n// Will this make a big difference in perf? Probably not\n// But we can save a few allocations.\n\nexport function countObjectKeys(obj: Record<any, any>) {\n let count = 0;\n for (const _key in obj) {\n count++;\n }\n return count;\n}", "/**\r\n * Alternative to `Array.flat(1)`\r\n * @param arr An array like [1,2,3,[1,2]]\r\n * @link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat\r\n */\nexport const flatten = (arr: readonly any[]) => [].concat(...arr);", "/**\r\n * If either :// or // is present consider it to be an absolute url\r\n *\r\n * @param url string\r\n */\n\nexport function isAbsoluteUrl(url: string) {\n return new RegExp(`(^|:)//`).test(url);\n}", "/**\r\n * Assumes true for a non-browser env, otherwise makes a best effort\r\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilityState\r\n */\nexport function isDocumentVisible(): boolean {\n // `document` may not exist in non-browser envs (like RN)\n if (typeof document === 'undefined') {\n return true;\n }\n // Match true for visible, prerender, undefined\n return document.visibilityState !== 'hidden';\n}", "export function isNotNullish<T>(v: T | null | undefined): v is T {\n return v != null;\n}", "/**\n * Assumes a browser is online if `undefined`, otherwise makes a best effort\n * @link https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine\n */\nexport function isOnline() {\n // We set the default config value in the store, so we'd need to check for this in a SSR env\n return typeof navigator === 'undefined' ? true : navigator.onLine === undefined ? true : navigator.onLine;\n}", "import { isAbsoluteUrl } from './isAbsoluteUrl';\nconst withoutTrailingSlash = (url: string) => url.replace(/\\/$/, '');\nconst withoutLeadingSlash = (url: string) => url.replace(/^\\//, '');\nexport function joinUrls(base: string | undefined, url: string | undefined): string {\n if (!base) {\n return url!;\n }\n if (!url) {\n return base;\n }\n if (isAbsoluteUrl(url)) {\n return url;\n }\n const delimiter = base.endsWith('/') || !url.startsWith('?') ? '/' : '';\n base = withoutTrailingSlash(base);\n url = withoutLeadingSlash(url);\n return `${base}${delimiter}${url}`;\n}", "export function getOrInsert<K extends object, V>(map: WeakMap<K, V>, key: K, value: V): V;\nexport function getOrInsert<K, V>(map: Map<K, V>, key: K, value: V): V;\nexport function getOrInsert<K extends object, V>(map: Map<K, V> | WeakMap<K, V>, key: K, value: V): V {\n if (map.has(key)) return map.get(key) as V;\n return map.set(key, value).get(key) as V;\n}", "import { joinUrls } from './utils';\nimport { isPlainObject } from './core/rtkImports';\nimport type { BaseQueryApi, BaseQueryFn } from './baseQueryTypes';\nimport type { MaybePromise, Override } from './tsHelpers';\nexport type ResponseHandler = 'content-type' | 'json' | 'text' | ((response: Response) => Promise<any>);\ntype CustomRequestInit = Override<RequestInit, {\n headers?: Headers | string[][] | Record<string, string | undefined> | undefined;\n}>;\nexport interface FetchArgs extends CustomRequestInit {\n url: string;\n params?: Record<string, any>;\n body?: any;\n responseHandler?: ResponseHandler;\n validateStatus?: (response: Response, body: any) => boolean;\n /**\n * A number in milliseconds that represents that maximum time a request can take before timing out.\n */\n timeout?: number;\n}\n\n/**\n * A mini-wrapper that passes arguments straight through to\n * {@link [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)}.\n * Avoids storing `fetch` in a closure, in order to permit mocking/monkey-patching.\n */\nconst defaultFetchFn: typeof fetch = (...args) => fetch(...args);\nconst defaultValidateStatus = (response: Response) => response.status >= 200 && response.status <= 299;\nconst defaultIsJsonContentType = (headers: Headers) => /*applicat*//ion\\/(vnd\\.api\\+)?json/.test(headers.get('content-type') || '');\nexport type FetchBaseQueryError = {\n /**\n * * `number`:\n * HTTP status code\n */\n status: number;\n data: unknown;\n} | {\n /**\n * * `\"FETCH_ERROR\"`:\n * An error that occurred during execution of `fetch` or the `fetchFn` callback option\n **/\n status: 'FETCH_ERROR';\n data?: undefined;\n error: string;\n} | {\n /**\n * * `\"PARSING_ERROR\"`:\n * An error happened during parsing.\n * Most likely a non-JSON-response was returned with the default `responseHandler` \"JSON\",\n * or an error occurred while executing a custom `responseHandler`.\n **/\n status: 'PARSING_ERROR';\n originalStatus: number;\n data: string;\n error: string;\n} | {\n /**\n * * `\"TIMEOUT_ERROR\"`:\n * Request timed out\n **/\n status: 'TIMEOUT_ERROR';\n data?: undefined;\n error: string;\n} | {\n /**\n * * `\"CUSTOM_ERROR\"`:\n * A custom error type that you can return from your `queryFn` where another error might not make sense.\n **/\n status: 'CUSTOM_ERROR';\n data?: unknown;\n error: string;\n};\nfunction stripUndefined(obj: any) {\n if (!isPlainObject(obj)) {\n return obj;\n }\n const copy: Record<string, any> = {\n ...obj\n };\n for (const [k, v] of Object.entries(copy)) {\n if (v === undefined) delete copy[k];\n }\n return copy;\n}\nexport type FetchBaseQueryArgs = {\n baseUrl?: string;\n prepareHeaders?: (headers: Headers, api: Pick<BaseQueryApi, 'getState' | 'extra' | 'endpoint' | 'type' | 'forced'> & {\n arg: string | FetchArgs;\n extraOptions: unknown;\n }) => MaybePromise<Headers | void>;\n fetchFn?: (input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>;\n paramsSerializer?: (params: Record<string, any>) => string;\n /**\n * By default, we only check for 'application/json' and 'application/vnd.api+json' as the content-types for json. If you need to support another format, you can pass\n * in a predicate function for your given api to get the same automatic stringifying behavior\n * @example\n * ```ts\n * const isJsonContentType = (headers: Headers) => [\"application/vnd.api+json\", \"application/json\", \"application/vnd.hal+json\"].includes(headers.get(\"content-type\")?.trim());\n * ```\n */\n isJsonContentType?: (headers: Headers) => boolean;\n /**\n * Defaults to `application/json`;\n */\n jsonContentType?: string;\n\n /**\n * Custom replacer function used when calling `JSON.stringify()`;\n */\n jsonReplacer?: (this: any, key: string, value: any) => any;\n} & RequestInit & Pick<FetchArgs, 'responseHandler' | 'validateStatus' | 'timeout'>;\nexport type FetchBaseQueryMeta = {\n request: Request;\n response?: Response;\n};\n\n/**\n * This is a very small wrapper around fetch that aims to simplify requests.\n *\n * @example\n * ```ts\n * const baseQuery = fetchBaseQuery({\n * baseUrl: 'https://api.your-really-great-app.com/v1/',\n * prepareHeaders: (headers, { getState }) => {\n * const token = (getState() as RootState).auth.token;\n * // If we have a token set in state, let's assume that we should be passing it.\n * if (token) {\n * headers.set('authorization', `Bearer ${token}`);\n * }\n * return headers;\n * },\n * })\n * ```\n *\n * @param {string} baseUrl\n * The base URL for an API service.\n * Typically in the format of https://example.com/\n *\n * @param {(headers: Headers, api: { getState: () => unknown; arg: string | FetchArgs; extra: unknown; endpoint: string; type: 'query' | 'mutation'; forced: boolean; }) => Headers} prepareHeaders\n * An optional function that can be used to inject headers on requests.\n * Provides a Headers object, most of the `BaseQueryApi` (`dispatch` is not available), and the arg passed into the query function.\n * Useful for setting authentication or headers that need to be set conditionally.\n *\n * @link https://developer.mozilla.org/en-US/docs/Web/API/Headers\n *\n * @param {(input: RequestInfo, init?: RequestInit | undefined) => Promise<Response>} fetchFn\n * Accepts a custom `fetch` function if you do not want to use the default on the window.\n * Useful in SSR environments if you need to use a library such as `isomorphic-fetch` or `cross-fetch`\n *\n * @param {(params: Record<string, unknown>) => string} paramsSerializer\n * An optional function that can be used to stringify querystring parameters.\n *\n * @param {(headers: Headers) => boolean} isJsonContentType\n * An optional predicate function to determine if `JSON.stringify()` should be called on the `body` arg of `FetchArgs`\n *\n * @param {string} jsonContentType Used when automatically setting the content-type header for a request with a jsonifiable body that does not have an explicit content-type header. Defaults to `application/json`.\n *\n * @param {(this: any, key: string, value: any) => any} jsonReplacer Custom replacer function used when calling `JSON.stringify()`.\n *\n * @param {number} timeout\n * A number in milliseconds that represents the maximum time a request can take before timing out.\n */\n\nexport function fetchBaseQuery({\n baseUrl,\n prepareHeaders = x => x,\n fetchFn = defaultFetchFn,\n paramsSerializer,\n isJsonContentType = defaultIsJsonContentType,\n jsonContentType = 'application/json',\n jsonReplacer,\n timeout: defaultTimeout,\n responseHandler: globalResponseHandler,\n validateStatus: globalValidateStatus,\n ...baseFetchOptions\n}: FetchBaseQueryArgs = {}): BaseQueryFn<string | FetchArgs, unknown, FetchBaseQueryError, {}, FetchBaseQueryMeta> {\n if (typeof fetch === 'undefined' && fetchFn === defaultFetchFn) {\n console.warn('Warning: `fetch` is not available. Please supply a custom `fetchFn` property to use `fetchBaseQuery` on SSR environments.');\n }\n return async (arg, api, extraOptions) => {\n const {\n getState,\n extra,\n endpoint,\n forced,\n type\n } = api;\n let meta: FetchBaseQueryMeta | undefined;\n let {\n url,\n headers = new Headers(baseFetchOptions.headers),\n params = undefined,\n responseHandler = globalResponseHandler ?? 'json' as const,\n validateStatus = globalValidateStatus ?? defaultValidateStatus,\n timeout = defaultTimeout,\n ...rest\n } = typeof arg == 'string' ? {\n url: arg\n } : arg;\n let abortController: AbortController | undefined,\n signal = api.signal;\n if (timeout) {\n abortController = new AbortController();\n api.signal.addEventListener('abort', abortController.abort);\n signal = abortController.signal;\n }\n let config: RequestInit = {\n ...baseFetchOptions,\n signal,\n ...rest\n };\n headers = new Headers(stripUndefined(headers));\n config.headers = (await prepareHeaders(headers, {\n getState,\n arg,\n extra,\n endpoint,\n forced,\n type,\n extraOptions\n })) || headers;\n\n // Only set the content-type to json if appropriate. Will not be true for FormData, ArrayBuffer, Blob, etc.\n const isJsonifiable = (body: any) => typeof body === 'object' && (isPlainObject(body) || Array.isArray(body) || typeof body.toJSON === 'function');\n if (!config.headers.has('content-type') && isJsonifiable(config.body)) {\n config.headers.set('content-type', jsonContentType);\n }\n if (isJsonifiable(config.body) && isJsonContentType(config.headers)) {\n config.body = JSON.stringify(config.body, jsonReplacer);\n }\n if (params) {\n const divider = ~url.indexOf('?') ? '&' : '?';\n const query = paramsSerializer ? paramsSerializer(params) : new URLSearchParams(stripUndefined(params));\n url += divider + query;\n }\n url = joinUrls(baseUrl, url);\n const request = new Request(url, config);\n const requestClone = new Request(url, config);\n meta = {\n request: requestClone\n };\n let response,\n timedOut = false,\n timeoutId = abortController && setTimeout(() => {\n timedOut = true;\n abortController!.abort();\n }, timeout);\n try {\n response = await fetchFn(request);\n } catch (e) {\n return {\n error: {\n status: timedOut ? 'TIMEOUT_ERROR' : 'FETCH_ERROR',\n error: String(e)\n },\n meta\n };\n } finally {\n if (timeoutId) clearTimeout(timeoutId);\n abortController?.signal.removeEventListener('abort', abortController.abort);\n }\n const responseClone = response.clone();\n meta.response = responseClone;\n let resultData: any;\n let responseText: string = '';\n try {\n let handleResponseError;\n await Promise.all([handleResponse(response, responseHandler).then(r => resultData = r, e => handleResponseError = e),\n // see https://github.com/node-fetch/node-fetch/issues/665#issuecomment-538995182\n // we *have* to \"use up\" both streams at the same time or they will stop running in node-fetch scenarios\n responseClone.text().then(r => responseText = r, () => {})]);\n if (handleResponseError) throw handleResponseError;\n } catch (e) {\n return {\n error: {\n status: 'PARSING_ERROR',\n originalStatus: response.status,\n data: responseText,\n error: String(e)\n },\n meta\n };\n }\n return validateStatus(response, resultData) ? {\n data: resultData,\n meta\n } : {\n error: {\n status: response.status,\n data: resultData\n },\n meta\n };\n };\n async function handleResponse(response: Response, responseHandler: ResponseHandler) {\n if (typeof responseHandler === 'function') {\n return responseHandler(response);\n }\n if (responseHandler === 'content-type') {\n responseHandler = isJsonContentType(response.headers) ? 'json' : 'text';\n }\n if (responseHandler === 'json') {\n const text = await response.text();\n return text.length ? JSON.parse(text) : null;\n }\n return response.text();\n }\n}", "export class HandledError {\n constructor(public readonly value: any, public readonly meta: any = undefined) {}\n}", "import type { BaseQueryApi, BaseQueryArg, BaseQueryEnhancer, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta } from './baseQueryTypes';\nimport type { FetchBaseQueryError } from './fetchBaseQuery';\nimport { HandledError } from './HandledError';\n\n/**\n * Exponential backoff based on the attempt number.\n *\n * @remarks\n * 1. 600ms * random(0.4, 1.4)\n * 2. 1200ms * random(0.4, 1.4)\n * 3. 2400ms * random(0.4, 1.4)\n * 4. 4800ms * random(0.4, 1.4)\n * 5. 9600ms * random(0.4, 1.4)\n *\n * @param attempt - Current attempt\n * @param maxRetries - Maximum number of retries\n */\nasync function defaultBackoff(attempt: number = 0, maxRetries: number = 5) {\n const attempts = Math.min(attempt, maxRetries);\n const timeout = ~~((Math.random() + 0.4) * (300 << attempts)); // Force a positive int in the case we make this an option\n await new Promise(resolve => setTimeout((res: any) => resolve(res), timeout));\n}\ntype RetryConditionFunction = (error: BaseQueryError<BaseQueryFn>, args: BaseQueryArg<BaseQueryFn>, extraArgs: {\n attempt: number;\n baseQueryApi: BaseQueryApi;\n extraOptions: BaseQueryExtraOptions<BaseQueryFn> & RetryOptions;\n}) => boolean;\nexport type RetryOptions = {\n /**\n * Function used to determine delay between retries\n */\n backoff?: (attempt: number, maxRetries: number) => Promise<void>;\n} & ({\n /**\n * How many times the query will be retried (default: 5)\n */\n maxRetries?: number;\n retryCondition?: undefined;\n} | {\n /**\n * Callback to determine if a retry should be attempted.\n * Return `true` for another retry and `false` to quit trying prematurely.\n */\n retryCondition?: RetryConditionFunction;\n maxRetries?: undefined;\n});\nfunction fail<BaseQuery extends BaseQueryFn = BaseQueryFn>(error: BaseQueryError<BaseQuery>, meta?: BaseQueryMeta<BaseQuery>): never {\n throw Object.assign(new HandledError({\n error,\n meta\n }), {\n throwImmediately: true\n });\n}\nconst EMPTY_OPTIONS = {};\nconst retryWithBackoff: BaseQueryEnhancer<unknown, RetryOptions, RetryOptions | void> = (baseQuery, defaultOptions) => async (args, api, extraOptions) => {\n // We need to figure out `maxRetries` before we define `defaultRetryCondition.\n // This is probably goofy, but ought to work.\n // Put our defaults in one array, filter out undefineds, grab the last value.\n const possibleMaxRetries: number[] = [5, (defaultOptions as any || EMPTY_OPTIONS).maxRetries, (extraOptions as any || EMPTY_OPTIONS).maxRetries].filter(x => x !== undefined);\n const [maxRetries] = possibleMaxRetries.slice(-1);\n const defaultRetryCondition: RetryConditionFunction = (_, __, {\n attempt\n }) => attempt <= maxRetries;\n const options: {\n maxRetries: number;\n backoff: typeof defaultBackoff;\n retryCondition: typeof defaultRetryCondition;\n } = {\n maxRetries,\n backoff: defaultBackoff,\n retryCondition: defaultRetryCondition,\n ...defaultOptions,\n ...extraOptions\n };\n let retry = 0;\n while (true) {\n try {\n const result = await baseQuery(args, api, extraOptions);\n // baseQueries _should_ return an error property, so we should check for that and throw it to continue retrying\n if (result.error) {\n throw new HandledError(result);\n }\n return result;\n } catch (e: any) {\n retry++;\n if (e.throwImmediately) {\n if (e instanceof HandledError) {\n return e.value;\n }\n\n // We don't know what this is, so we have to rethrow it\n throw e;\n }\n if (e instanceof HandledError && !options.retryCondition(e.value.error as FetchBaseQueryError, args, {\n attempt: retry,\n baseQueryApi: api,\n extraOptions\n })) {\n return e.value;\n }\n await options.backoff(retry, options.maxRetries);\n }\n }\n};\n\n/**\n * A utility that can wrap `baseQuery` in the API definition to provide retries with a basic exponential backoff.\n *\n * @example\n *\n * ```ts\n * // codeblock-meta title=\"Retry every request 5 times by default\"\n * import { createApi, fetchBaseQuery, retry } from '@reduxjs/toolkit/query/react'\n * interface Post {\n * id: number\n * name: string\n * }\n * type PostsResponse = Post[]\n *\n * // maxRetries: 5 is the default, and can be omitted. Shown for documentation purposes.\n * const staggeredBaseQuery = retry(fetchBaseQuery({ baseUrl: '/' }), { maxRetries: 5 });\n * export const api = createApi({\n * baseQuery: staggeredBaseQuery,\n * endpoints: (build) => ({\n * getPosts: build.query<PostsResponse, void>({\n * query: () => ({ url: 'posts' }),\n * }),\n * getPost: build.query<PostsResponse, string>({\n * query: (id) => ({ url: `post/${id}` }),\n * extraOptions: { maxRetries: 8 }, // You can override the retry behavior on each endpoint\n * }),\n * }),\n * });\n *\n * export const { useGetPostsQuery, useGetPostQuery } = api;\n * ```\n */\nexport const retry = /* @__PURE__ */Object.assign(retryWithBackoff, {\n fail\n});", "import type { ThunkDispatch, ActionCreatorWithoutPayload // Workaround for API-Extractor\n} from '@reduxjs/toolkit';\nimport { createAction } from './rtkImports';\nexport const onFocus = /* @__PURE__ */createAction('__rtkq/focused');\nexport const onFocusLost = /* @__PURE__ */createAction('__rtkq/unfocused');\nexport const onOnline = /* @__PURE__ */createAction('__rtkq/online');\nexport const onOffline = /* @__PURE__ */createAction('__rtkq/offline');\nlet initialized = false;\n\n/**\n * A utility used to enable `refetchOnMount` and `refetchOnReconnect` behaviors.\n * It requires the dispatch method from your store.\n * Calling `setupListeners(store.dispatch)` will configure listeners with the recommended defaults,\n * but you have the option of providing a callback for more granular control.\n *\n * @example\n * ```ts\n * setupListeners(store.dispatch)\n * ```\n *\n * @param dispatch - The dispatch method from your store\n * @param customHandler - An optional callback for more granular control over listener behavior\n * @returns Return value of the handler.\n * The default handler returns an `unsubscribe` method that can be called to remove the listeners.\n */\nexport function setupListeners(dispatch: ThunkDispatch<any, any, any>, customHandler?: (dispatch: ThunkDispatch<any, any, any>, actions: {\n onFocus: typeof onFocus;\n onFocusLost: typeof onFocusLost;\n onOnline: typeof onOnline;\n onOffline: typeof onOffline;\n}) => () => void) {\n function defaultHandler() {\n const handleFocus = () => dispatch(onFocus());\n const handleFocusLost = () => dispatch(onFocusLost());\n const handleOnline = () => dispatch(onOnline());\n const handleOffline = () => dispatch(onOffline());\n const handleVisibilityChange = () => {\n if (window.document.visibilityState === 'visible') {\n handleFocus();\n } else {\n handleFocusLost();\n }\n };\n if (!initialized) {\n if (typeof window !== 'undefined' && window.addEventListener) {\n // Handle focus events\n window.addEventListener('visibilitychange', handleVisibilityChange, false);\n window.addEventListener('focus', handleFocus, false);\n\n // Handle connection events\n window.addEventListener('online', handleOnline, false);\n window.addEventListener('offline', handleOffline, false);\n initialized = true;\n }\n }\n const unsubscribe = () => {\n window.removeEventListener('focus', handleFocus);\n window.removeEventListener('visibilitychange', handleVisibilityChange);\n window.removeEventListener('online', handleOnline);\n window.removeEventListener('offline', handleOffline);\n initialized = false;\n };\n return unsubscribe;\n }\n return customHandler ? customHandler(dispatch, {\n onFocus,\n onFocusLost,\n onOffline,\n onOnline\n }) : defaultHandler();\n}", "import type { Api } from '@reduxjs/toolkit/query';\nimport type { BaseQueryApi, BaseQueryArg, BaseQueryError, BaseQueryExtraOptions, BaseQueryFn, BaseQueryMeta, BaseQueryResult, QueryReturnValue } from './baseQueryTypes';\nimport type { CacheCollectionQueryExtraOptions } from './core/buildMiddleware/cacheCollection';\nimport type { CacheLifecycleInfiniteQueryExtraOptions, CacheLifecycleMutationExtraOptions, CacheLifecycleQueryExtraOptions } from './core/buildMiddleware/cacheLifecycle';\nimport type { QueryLifecycleInfiniteQueryExtraOptions, QueryLifecycleMutationExtraOptions, QueryLifecycleQueryExtraOptions } from './core/buildMiddleware/queryLifecycle';\nimport type { InfiniteData, InfiniteQueryConfigOptions, QuerySubState, RootState } from './core/index';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { NEVER } from './fakeBaseQuery';\nimport type { CastAny, HasRequiredProps, MaybePromise, NonUndefined, OmitFromUnion, UnwrapPromise } from './tsHelpers';\nimport { isNotNullish } from './utils';\nconst resultType = /* @__PURE__ */Symbol();\nconst baseQuery = /* @__PURE__ */Symbol();\ntype EndpointDefinitionWithQuery<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n /**\n * `query` can be a function that returns either a `string` or an `object` which is passed to your `baseQuery`. If you are using [fetchBaseQuery](./fetchBaseQuery), this can return either a `string` or an `object` of properties in `FetchArgs`. If you use your own custom [`baseQuery`](../../rtk-query/usage/customizing-queries), you can customize this behavior to your liking.\n *\n * @example\n *\n * ```ts\n * // codeblock-meta title=\"query example\"\n *\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n * interface Post {\n * id: number\n * name: string\n * }\n * type PostsResponse = Post[]\n *\n * const api = createApi({\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n * tagTypes: ['Post'],\n * endpoints: (build) => ({\n * getPosts: build.query<PostsResponse, void>({\n * // highlight-start\n * query: () => 'posts',\n * // highlight-end\n * }),\n * addPost: build.mutation<Post, Partial<Post>>({\n * // highlight-start\n * query: (body) => ({\n * url: `posts`,\n * method: 'POST',\n * body,\n * }),\n * // highlight-end\n * invalidatesTags: [{ type: 'Post', id: 'LIST' }],\n * }),\n * })\n * })\n * ```\n */\n query(arg: QueryArg): BaseQueryArg<BaseQuery>;\n queryFn?: never;\n /**\n * A function to manipulate the data returned by a query or mutation.\n */\n transformResponse?(baseQueryReturnValue: BaseQueryResult<BaseQuery>, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): ResultType | Promise<ResultType>;\n /**\n * A function to manipulate the data returned by a failed query or mutation.\n */\n transformErrorResponse?(baseQueryReturnValue: BaseQueryError<BaseQuery>, meta: BaseQueryMeta<BaseQuery>, arg: QueryArg): unknown;\n /**\n * Defaults to `true`.\n *\n * Most apps should leave this setting on. The only time it can be a performance issue\n * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and\n * you're unable to paginate it.\n *\n * For details of how this works, please see the below. When it is set to `false`,\n * every request will cause subscribed components to rerender, even when the data has not changed.\n *\n * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing\n */\n structuralSharing?: boolean;\n};\ntype EndpointDefinitionWithQueryFn<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n /**\n * Can be used in place of `query` as an inline function that bypasses `baseQuery` completely for the endpoint.\n *\n * @example\n * ```ts\n * // codeblock-meta title=\"Basic queryFn example\"\n *\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n * interface Post {\n * id: number\n * name: string\n * }\n * type PostsResponse = Post[]\n *\n * const api = createApi({\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n * endpoints: (build) => ({\n * getPosts: build.query<PostsResponse, void>({\n * query: () => 'posts',\n * }),\n * flipCoin: build.query<'heads' | 'tails', void>({\n * // highlight-start\n * queryFn(arg, queryApi, extraOptions, baseQuery) {\n * const randomVal = Math.random()\n * if (randomVal < 0.45) {\n * return { data: 'heads' }\n * }\n * if (randomVal < 0.9) {\n * return { data: 'tails' }\n * }\n * return { error: { status: 500, statusText: 'Internal Server Error', data: \"Coin landed on its edge!\" } }\n * }\n * // highlight-end\n * })\n * })\n * })\n * ```\n */\n queryFn(arg: QueryArg, api: BaseQueryApi, extraOptions: BaseQueryExtraOptions<BaseQuery>, baseQuery: (arg: Parameters<BaseQuery>[0]) => ReturnType<BaseQuery>): MaybePromise<QueryReturnValue<ResultType, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>>;\n query?: never;\n transformResponse?: never;\n transformErrorResponse?: never;\n /**\n * Defaults to `true`.\n *\n * Most apps should leave this setting on. The only time it can be a performance issue\n * is if an API returns extremely large amounts of data (e.g. 10,000 rows per request) and\n * you're unable to paginate it.\n *\n * For details of how this works, please see the below. When it is set to `false`,\n * every request will cause subscribed components to rerender, even when the data has not changed.\n *\n * @see https://redux-toolkit.js.org/api/other-exports#copywithstructuralsharing\n */\n structuralSharing?: boolean;\n};\ntype BaseEndpointTypes<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = {\n QueryArg: QueryArg;\n BaseQuery: BaseQuery;\n ResultType: ResultType;\n};\nexport type BaseEndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, ResultType> = (([CastAny<BaseQueryResult<BaseQuery>, {}>] extends [NEVER] ? never : EndpointDefinitionWithQuery<QueryArg, BaseQuery, ResultType>) | EndpointDefinitionWithQueryFn<QueryArg, BaseQuery, ResultType>) & {\n /* phantom type */\n [resultType]?: ResultType;\n /* phantom type */\n [baseQuery]?: BaseQuery;\n} & HasRequiredProps<BaseQueryExtraOptions<BaseQuery>, {\n extraOptions: BaseQueryExtraOptions<BaseQuery>;\n}, {\n extraOptions?: BaseQueryExtraOptions<BaseQuery>;\n}>;\nexport enum DefinitionType {\n query = 'query',\n mutation = 'mutation',\n infinitequery = 'infinitequery',\n}\nexport type GetResultDescriptionFn<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = (result: ResultType | undefined, error: ErrorType | undefined, arg: QueryArg, meta: MetaType) => ReadonlyArray<TagDescription<TagTypes> | undefined | null>;\nexport type FullTagDescription<TagType> = {\n type: TagType;\n id?: number | string;\n};\nexport type TagDescription<TagType> = TagType | FullTagDescription<TagType>;\n\n/**\n * @public\n */\nexport type ResultDescription<TagTypes extends string, ResultType, QueryArg, ErrorType, MetaType> = ReadonlyArray<TagDescription<TagTypes> | undefined | null> | GetResultDescriptionFn<TagTypes, ResultType, QueryArg, ErrorType, MetaType>;\ntype QueryTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n /**\n * The endpoint definition type. To be used with some internal generic types.\n * @example\n * ```ts\n * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n * ```\n */\n QueryDefinition: QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n TagTypes: TagTypes;\n ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface QueryExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n type: DefinitionType.query;\n\n /**\n * Used by `query` endpoints. Determines which 'tag' is attached to the cached data returned by the query.\n * Expects an array of tag type strings, an array of objects of tag types with ids, or a function that returns such an array.\n * 1. `['Post']` - equivalent to `2`\n * 2. `[{ type: 'Post' }]` - equivalent to `1`\n * 3. `[{ type: 'Post', id: 1 }]`\n * 4. `(result, error, arg) => ['Post']` - equivalent to `5`\n * 5. `(result, error, arg) => [{ type: 'Post' }]` - equivalent to `4`\n * 6. `(result, error, arg) => [{ type: 'Post', id: 1 }]`\n *\n * @example\n *\n * ```ts\n * // codeblock-meta title=\"providesTags example\"\n *\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n * interface Post {\n * id: number\n * name: string\n * }\n * type PostsResponse = Post[]\n *\n * const api = createApi({\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n * tagTypes: ['Posts'],\n * endpoints: (build) => ({\n * getPosts: build.query<PostsResponse, void>({\n * query: () => 'posts',\n * // highlight-start\n * providesTags: (result) =>\n * result\n * ? [\n * ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n * { type: 'Posts', id: 'LIST' },\n * ]\n * : [{ type: 'Posts', id: 'LIST' }],\n * // highlight-end\n * })\n * })\n * })\n * ```\n */\n providesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n /**\n * Not to be used. A query should not invalidate tags in the cache.\n */\n invalidatesTags?: never;\n\n /**\n * Can be provided to return a custom cache key value based on the query arguments.\n *\n * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key. It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n *\n * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean. If it returns a string, that value will be used as the cache key directly. If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`. This simplifies the use case of stripping out args you don't want included in the cache key.\n *\n *\n * @example\n *\n * ```ts\n * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n *\n * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n * interface Post {\n * id: number\n * name: string\n * }\n *\n * interface MyApiClient {\n * fetchPost: (id: string) => Promise<Post>\n * }\n *\n * createApi({\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n * endpoints: (build) => ({\n * // Example: an endpoint with an API client passed in as an argument,\n * // but only the item ID should be used as the cache key\n * getPost: build.query<Post, { id: string; client: MyApiClient }>({\n * queryFn: async ({ id, client }) => {\n * const post = await client.fetchPost(id)\n * return { data: post }\n * },\n * // highlight-start\n * serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n * const { id } = queryArgs\n * // This can return a string, an object, a number, or a boolean.\n * // If it returns an object, number or boolean, that value\n * // will be serialized automatically via `defaultSerializeQueryArgs`\n * return { id } // omit `client` from the cache key\n *\n * // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n * // return defaultSerializeQueryArgs({\n * // endpointName,\n * // queryArgs: { id },\n * // endpointDefinition\n * // })\n * // Or create and return a string yourself:\n * // return `getPost(${id})`\n * },\n * // highlight-end\n * }),\n * }),\n *})\n * ```\n */\n serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n /**\n * Can be provided to merge an incoming response value into the current cache data.\n * If supplied, no automatic structural sharing will be applied - it's up to\n * you to update the cache appropriately.\n *\n * Since RTKQ normally replaces cache entries with the new response, you will usually\n * need to use this with the `serializeQueryArgs` or `forceRefetch` options to keep\n * an existing cache entry so that it can be updated.\n *\n * Since this is wrapped with Immer, you may either mutate the `currentCacheValue` directly,\n * or return a new value, but _not_ both at once.\n *\n * Will only be called if the existing `currentCacheData` is _not_ `undefined` - on first response,\n * the cache entry will just save the response data directly.\n *\n * Useful if you don't want a new request to completely override the current cache value,\n * maybe because you have manually updated it from another source and don't want those\n * updates to get lost.\n *\n *\n * @example\n *\n * ```ts\n * // codeblock-meta title=\"merge: pagination\"\n *\n * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n * interface Post {\n * id: number\n * name: string\n * }\n *\n * createApi({\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n * endpoints: (build) => ({\n * listItems: build.query<string[], number>({\n * query: (pageNumber) => `/listItems?page=${pageNumber}`,\n * // Only have one cache entry because the arg always maps to one string\n * serializeQueryArgs: ({ endpointName }) => {\n * return endpointName\n * },\n * // Always merge incoming data to the cache entry\n * merge: (currentCache, newItems) => {\n * currentCache.push(...newItems)\n * },\n * // Refetch when the page arg changes\n * forceRefetch({ currentArg, previousArg }) {\n * return currentArg !== previousArg\n * },\n * }),\n * }),\n *})\n * ```\n */\n merge?(currentCacheData: ResultType, responseData: ResultType, otherArgs: {\n arg: QueryArg;\n baseQueryMeta: BaseQueryMeta<BaseQuery>;\n requestId: string;\n fulfilledTimeStamp: number;\n }): ResultType | void;\n\n /**\n * Check to see if the endpoint should force a refetch in cases where it normally wouldn't.\n * This is primarily useful for \"infinite scroll\" / pagination use cases where\n * RTKQ is keeping a single cache entry that is added to over time, in combination\n * with `serializeQueryArgs` returning a fixed cache key and a `merge` callback\n * set to add incoming data to the cache entry each time.\n *\n * @example\n *\n * ```ts\n * // codeblock-meta title=\"forceRefresh: pagination\"\n *\n * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n * interface Post {\n * id: number\n * name: string\n * }\n *\n * createApi({\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n * endpoints: (build) => ({\n * listItems: build.query<string[], number>({\n * query: (pageNumber) => `/listItems?page=${pageNumber}`,\n * // Only have one cache entry because the arg always maps to one string\n * serializeQueryArgs: ({ endpointName }) => {\n * return endpointName\n * },\n * // Always merge incoming data to the cache entry\n * merge: (currentCache, newItems) => {\n * currentCache.push(...newItems)\n * },\n * // Refetch when the page arg changes\n * forceRefetch({ currentArg, previousArg }) {\n * return currentArg !== previousArg\n * },\n * }),\n * }),\n *})\n * ```\n */\n forceRefetch?(params: {\n currentArg: QueryArg | undefined;\n previousArg: QueryArg | undefined;\n state: RootState<any, any, string>;\n endpointState?: QuerySubState<any>;\n }): boolean;\n\n /**\n * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n */\n Types?: QueryTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type QueryDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType> & QueryExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport interface InfiniteQueryTypes<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> extends BaseEndpointTypes<QueryArg, BaseQuery, ResultType> {\n /**\n * The endpoint definition type. To be used with some internal generic types.\n * @example\n * ```ts\n * const useMyWrappedHook: UseQuery<typeof api.endpoints.query.Types.QueryDefinition> = ...\n * ```\n */\n InfiniteQueryDefinition: InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n TagTypes: TagTypes;\n ReducerPath: ReducerPath;\n}\nexport interface InfiniteQueryExtraOptions<TagTypes extends string, ResultType, QueryArg, PageParam, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleInfiniteQueryExtraOptions<InfiniteData<ResultType, PageParam>, QueryArg, BaseQuery, ReducerPath>, CacheCollectionQueryExtraOptions {\n type: DefinitionType.infinitequery;\n providesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n /**\n * Not to be used. A query should not invalidate tags in the cache.\n */\n invalidatesTags?: never;\n\n /**\n * Required options to configure the infinite query behavior.\n * `initialPageParam` and `getNextPageParam` are required, to\n * ensure the infinite query can properly fetch the next page of data.\n * `initialPageParam` may be specified when using the\n * endpoint, to override the default value.\n * `maxPages` and `getPreviousPageParam` are both optional.\n * \n * @example\n * \n * ```ts\n * // codeblock-meta title=\"infiniteQueryOptions example\"\n * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n * \n * type Pokemon = {\n * id: string\n * name: string\n * }\n * \n * const pokemonApi = createApi({\n * baseQuery: fetchBaseQuery({ baseUrl: 'https://pokeapi.co/api/v2/' }),\n * endpoints: (build) => ({\n * getInfinitePokemonWithMax: build.infiniteQuery<Pokemon[], string, number>({\n * infiniteQueryOptions: {\n * initialPageParam: 0,\n * maxPages: 3,\n * getNextPageParam: (lastPage, allPages, lastPageParam, allPageParams) =>\n * lastPageParam + 1,\n * getPreviousPageParam: (\n * firstPage,\n * allPages,\n * firstPageParam,\n * allPageParams,\n * ) => {\n * return firstPageParam > 0 ? firstPageParam - 1 : undefined\n * },\n * },\n * query({pageParam}) {\n * return `https://example.com/listItems?page=${pageParam}`\n * },\n * }),\n * }),\n * })\n \n * ```\n */\n infiniteQueryOptions: InfiniteQueryConfigOptions<ResultType, PageParam>;\n\n /**\n * Can be provided to return a custom cache key value based on the query arguments.\n *\n * This is primarily intended for cases where a non-serializable value is passed as part of the query arg object and should be excluded from the cache key. It may also be used for cases where an endpoint should only have a single cache entry, such as an infinite loading / pagination implementation.\n *\n * Unlike the `createApi` version which can _only_ return a string, this per-endpoint option can also return an an object, number, or boolean. If it returns a string, that value will be used as the cache key directly. If it returns an object / number / boolean, that value will be passed to the built-in `defaultSerializeQueryArgs`. This simplifies the use case of stripping out args you don't want included in the cache key.\n *\n *\n * @example\n *\n * ```ts\n * // codeblock-meta title=\"serializeQueryArgs : exclude value\"\n *\n * import { createApi, fetchBaseQuery, defaultSerializeQueryArgs } from '@reduxjs/toolkit/query/react'\n * interface Post {\n * id: number\n * name: string\n * }\n *\n * interface MyApiClient {\n * fetchPost: (id: string) => Promise<Post>\n * }\n *\n * createApi({\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n * endpoints: (build) => ({\n * // Example: an endpoint with an API client passed in as an argument,\n * // but only the item ID should be used as the cache key\n * getPost: build.query<Post, { id: string; client: MyApiClient }>({\n * queryFn: async ({ id, client }) => {\n * const post = await client.fetchPost(id)\n * return { data: post }\n * },\n * // highlight-start\n * serializeQueryArgs: ({ queryArgs, endpointDefinition, endpointName }) => {\n * const { id } = queryArgs\n * // This can return a string, an object, a number, or a boolean.\n * // If it returns an object, number or boolean, that value\n * // will be serialized automatically via `defaultSerializeQueryArgs`\n * return { id } // omit `client` from the cache key\n *\n * // Alternately, you can use `defaultSerializeQueryArgs` yourself:\n * // return defaultSerializeQueryArgs({\n * // endpointName,\n * // queryArgs: { id },\n * // endpointDefinition\n * // })\n * // Or create and return a string yourself:\n * // return `getPost(${id})`\n * },\n * // highlight-end\n * }),\n * }),\n *})\n * ```\n */\n serializeQueryArgs?: SerializeQueryArgs<QueryArg, string | number | boolean | Record<any, any>>;\n\n /**\n * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n */\n Types?: InfiniteQueryTypes<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> =\n// Infinite query endpoints receive `{queryArg, pageParam}`\nBaseEndpointDefinition<InfiniteQueryCombinedArg<QueryArg, PageParam>, BaseQuery, ResultType> & InfiniteQueryExtraOptions<TagTypes, ResultType, QueryArg, PageParam, BaseQuery, ReducerPath>;\ntype MutationTypes<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointTypes<QueryArg, BaseQuery, ResultType> & {\n /**\n * The endpoint definition type. To be used with some internal generic types.\n * @example\n * ```ts\n * const useMyWrappedHook: UseMutation<typeof api.endpoints.query.Types.MutationDefinition> = ...\n * ```\n */\n MutationDefinition: MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n TagTypes: TagTypes;\n ReducerPath: ReducerPath;\n};\n\n/**\n * @public\n */\nexport interface MutationExtraOptions<TagTypes extends string, ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> extends CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>, QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath> {\n type: DefinitionType.mutation;\n\n /**\n * Used by `mutation` endpoints. Determines which cached data should be either re-fetched or removed from the cache.\n * Expects the same shapes as `providesTags`.\n *\n * @example\n *\n * ```ts\n * // codeblock-meta title=\"invalidatesTags example\"\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n * interface Post {\n * id: number\n * name: string\n * }\n * type PostsResponse = Post[]\n *\n * const api = createApi({\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n * tagTypes: ['Posts'],\n * endpoints: (build) => ({\n * getPosts: build.query<PostsResponse, void>({\n * query: () => 'posts',\n * providesTags: (result) =>\n * result\n * ? [\n * ...result.map(({ id }) => ({ type: 'Posts' as const, id })),\n * { type: 'Posts', id: 'LIST' },\n * ]\n * : [{ type: 'Posts', id: 'LIST' }],\n * }),\n * addPost: build.mutation<Post, Partial<Post>>({\n * query(body) {\n * return {\n * url: `posts`,\n * method: 'POST',\n * body,\n * }\n * },\n * // highlight-start\n * invalidatesTags: [{ type: 'Posts', id: 'LIST' }],\n * // highlight-end\n * }),\n * })\n * })\n * ```\n */\n invalidatesTags?: ResultDescription<TagTypes, ResultType, QueryArg, BaseQueryError<BaseQuery>, BaseQueryMeta<BaseQuery>>;\n /**\n * Not to be used. A mutation should not provide tags to the cache.\n */\n providesTags?: never;\n\n /**\n * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n */\n Types?: MutationTypes<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n}\nexport type MutationDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string> = BaseEndpointDefinition<QueryArg, BaseQuery, ResultType> & MutationExtraOptions<TagTypes, ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type EndpointDefinition<QueryArg, BaseQuery extends BaseQueryFn, TagTypes extends string, ResultType, ReducerPath extends string = string, PageParam = any> = QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath> | MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath> | InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\nexport type EndpointDefinitions = Record<string, EndpointDefinition<any, any, any, any>>;\nexport function isQueryDefinition(e: EndpointDefinition<any, any, any, any>): e is QueryDefinition<any, any, any, any> {\n return e.type === DefinitionType.query;\n}\nexport function isMutationDefinition(e: EndpointDefinition<any, any, any, any>): e is MutationDefinition<any, any, any, any> {\n return e.type === DefinitionType.mutation;\n}\nexport function isInfiniteQueryDefinition(e: EndpointDefinition<any, any, any, any>): e is InfiniteQueryDefinition<any, any, any, any, any> {\n return e.type === DefinitionType.infinitequery;\n}\nexport type EndpointBuilder<BaseQuery extends BaseQueryFn, TagTypes extends string, ReducerPath extends string> = {\n /**\n * An endpoint definition that retrieves data, and may provide tags to the cache.\n *\n * @example\n * ```js\n * // codeblock-meta title=\"Example of all query endpoint options\"\n * const api = createApi({\n * baseQuery,\n * endpoints: (build) => ({\n * getPost: build.query({\n * query: (id) => ({ url: `post/${id}` }),\n * // Pick out data and prevent nested properties in a hook or selector\n * transformResponse: (response) => response.data,\n * // Pick out error and prevent nested properties in a hook or selector\n * transformErrorResponse: (response) => response.error,\n * // `result` is the server response\n * providesTags: (result, error, id) => [{ type: 'Post', id }],\n * // trigger side effects or optimistic updates\n * onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry, updateCachedData }) {},\n * // handle subscriptions etc\n * onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry, updateCachedData }) {},\n * }),\n * }),\n *});\n *```\n */\n query<ResultType, QueryArg>(definition: OmitFromUnion<QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>, 'type'>): QueryDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n /**\n * An endpoint definition that alters data on the server or will possibly invalidate the cache.\n *\n * @example\n * ```js\n * // codeblock-meta title=\"Example of all mutation endpoint options\"\n * const api = createApi({\n * baseQuery,\n * endpoints: (build) => ({\n * updatePost: build.mutation({\n * query: ({ id, ...patch }) => ({ url: `post/${id}`, method: 'PATCH', body: patch }),\n * // Pick out data and prevent nested properties in a hook or selector\n * transformResponse: (response) => response.data,\n * // Pick out error and prevent nested properties in a hook or selector\n * transformErrorResponse: (response) => response.error,\n * // `result` is the server response\n * invalidatesTags: (result, error, id) => [{ type: 'Post', id }],\n * // trigger side effects or optimistic updates\n * onQueryStarted(id, { dispatch, getState, extra, requestId, queryFulfilled, getCacheEntry }) {},\n * // handle subscriptions etc\n * onCacheEntryAdded(id, { dispatch, getState, extra, requestId, cacheEntryRemoved, cacheDataLoaded, getCacheEntry }) {},\n * }),\n * }),\n * });\n * ```\n */\n mutation<ResultType, QueryArg>(definition: OmitFromUnion<MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>, 'type'>): MutationDefinition<QueryArg, BaseQuery, TagTypes, ResultType, ReducerPath>;\n infiniteQuery<ResultType, QueryArg, PageParam>(definition: OmitFromUnion<InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>, 'type'>): InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, ResultType, ReducerPath>;\n};\nexport type AssertTagTypes = <T extends FullTagDescription<string>>(t: T) => T;\nexport function calculateProvidedBy<ResultType, QueryArg, ErrorType, MetaType>(description: ResultDescription<string, ResultType, QueryArg, ErrorType, MetaType> | undefined, result: ResultType | undefined, error: ErrorType | undefined, queryArg: QueryArg, meta: MetaType | undefined, assertTagTypes: AssertTagTypes): readonly FullTagDescription<string>[] {\n if (isFunction(description)) {\n return description(result as ResultType, error as undefined, queryArg, meta as MetaType).filter(isNotNullish).map(expandTagDescription).map(assertTagTypes);\n }\n if (Array.isArray(description)) {\n return description.map(expandTagDescription).map(assertTagTypes);\n }\n return [];\n}\nfunction isFunction<T>(t: T): t is Extract<T, Function> {\n return typeof t === 'function';\n}\nexport function expandTagDescription(description: TagDescription<string>): FullTagDescription<string> {\n return typeof description === 'string' ? {\n type: description\n } : description;\n}\nexport type QueryArgFrom<D extends BaseEndpointDefinition<any, any, any>> = D extends BaseEndpointDefinition<infer QA, any, any> ? QA : never;\n\n// Just extracting `QueryArg` from `BaseEndpointDefinition`\n// doesn't sufficiently match here.\n// We need to explicitly match against `InfiniteQueryDefinition`\nexport type InfiniteQueryArgFrom<D extends BaseEndpointDefinition<any, any, any>> = D extends InfiniteQueryDefinition<infer QA, any, any, any, any> ? QA : never;\nexport type ResultTypeFrom<D extends BaseEndpointDefinition<any, any, any>> = D extends BaseEndpointDefinition<any, any, infer RT> ? RT : unknown;\nexport type ReducerPathFrom<D extends EndpointDefinition<any, any, any, any, any>> = D extends EndpointDefinition<any, any, any, any, infer RP> ? RP : unknown;\nexport type TagTypesFrom<D extends EndpointDefinition<any, any, any, any>> = D extends EndpointDefinition<any, any, infer RP, any> ? RP : unknown;\nexport type PageParamFrom<D extends InfiniteQueryDefinition<any, any, any, any, any>> = D extends InfiniteQueryDefinition<any, infer PP, any, any, any> ? PP : unknown;\nexport type InfiniteQueryCombinedArg<QueryArg, PageParam> = {\n queryArg: QueryArg;\n pageParam: PageParam;\n};\nexport type TagTypesFromApi<T> = T extends Api<any, any, any, infer TagTypes> ? TagTypes : never;\nexport type DefinitionsFromApi<T> = T extends Api<any, infer Definitions, any, any> ? Definitions : never;\nexport type TransformedResponse<NewDefinitions extends EndpointDefinitions, K, ResultType> = K extends keyof NewDefinitions ? NewDefinitions[K]['transformResponse'] extends undefined ? ResultType : UnwrapPromise<ReturnType<NonUndefined<NewDefinitions[K]['transformResponse']>>> : ResultType;\nexport type OverrideResultType<Definition, NewResultType> = Definition extends QueryDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends MutationDefinition<infer QueryArg, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, TagTypes, NewResultType, ReducerPath> : Definition extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, infer TagTypes, any, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, TagTypes, NewResultType, ReducerPath> : never;\nexport type UpdateDefinitions<Definitions extends EndpointDefinitions, NewTagTypes extends string, NewDefinitions extends EndpointDefinitions> = { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? QueryDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends MutationDefinition<infer QueryArg, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? MutationDefinition<QueryArg, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : Definitions[K] extends InfiniteQueryDefinition<infer QueryArg, infer PageParam, infer BaseQuery, any, infer ResultType, infer ReducerPath> ? InfiniteQueryDefinition<QueryArg, PageParam, BaseQuery, NewTagTypes, TransformedResponse<NewDefinitions, K, ResultType>, ReducerPath> : never };", "import type { AsyncThunk, AsyncThunkPayloadCreator, Draft, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { Patch } from 'immer';\nimport { isDraftable, produceWithPatches } from 'immer';\nimport type { Api, ApiContext } from '../apiTypes';\nimport type { BaseQueryError, BaseQueryFn, QueryReturnValue } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { AssertTagTypes, EndpointDefinition, EndpointDefinitions, InfiniteQueryArgFrom, InfiniteQueryCombinedArg, InfiniteQueryDefinition, MutationDefinition, PageParamFrom, QueryArgFrom, QueryDefinition, ResultTypeFrom } from '../endpointDefinitions';\nimport { calculateProvidedBy, isInfiniteQueryDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { HandledError } from '../HandledError';\nimport type { UnwrapPromise } from '../tsHelpers';\nimport type { RootState, QueryKeys, QuerySubstateIdentifier, InfiniteData, InfiniteQueryConfigOptions, QueryCacheKey, InfiniteQueryDirection, InfiniteQueryKeys } from './apiState';\nimport { QueryStatus } from './apiState';\nimport type { InfiniteQueryActionCreatorResult, QueryActionCreatorResult, StartInfiniteQueryActionCreatorOptions, StartQueryActionCreatorOptions } from './buildInitiate';\nimport { forceQueryFnSymbol, isUpsertQuery } from './buildInitiate';\nimport type { AllSelectors } from './buildSelectors';\nimport type { ApiEndpointQuery, PrefetchOptions } from './module';\nimport { createAsyncThunk, isAllOf, isFulfilled, isPending, isRejected, isRejectedWithValue, SHOULD_AUTOBATCH } from './rtkImports';\nexport type BuildThunksApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = Matchers<QueryThunk, Definition>;\nexport type BuildThunksApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = Matchers<QueryThunk, Definition>;\nexport type BuildThunksApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = Matchers<MutationThunk, Definition>;\ntype EndpointThunk<Thunk extends QueryThunk | MutationThunk, Definition extends EndpointDefinition<any, any, any, any>> = Definition extends EndpointDefinition<infer QueryArg, infer BaseQueryFn, any, infer ResultType> ? Thunk extends AsyncThunk<unknown, infer ATArg, infer ATConfig> ? AsyncThunk<ResultType, ATArg & {\n originalArgs: QueryArg;\n}, ATConfig & {\n rejectValue: BaseQueryError<BaseQueryFn>;\n}> : never : never;\nexport type PendingAction<Thunk extends QueryThunk | MutationThunk, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['pending']>;\nexport type FulfilledAction<Thunk extends QueryThunk | MutationThunk, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['fulfilled']>;\nexport type RejectedAction<Thunk extends QueryThunk | MutationThunk, Definition extends EndpointDefinition<any, any, any, any>> = ReturnType<EndpointThunk<Thunk, Definition>['rejected']>;\nexport type Matcher<M> = (value: any) => value is M;\nexport interface Matchers<Thunk extends QueryThunk | MutationThunk, Definition extends EndpointDefinition<any, any, any, any>> {\n matchPending: Matcher<PendingAction<Thunk, Definition>>;\n matchFulfilled: Matcher<FulfilledAction<Thunk, Definition>>;\n matchRejected: Matcher<RejectedAction<Thunk, Definition>>;\n}\nexport type QueryThunkArg = QuerySubstateIdentifier & StartQueryActionCreatorOptions & {\n type: 'query';\n originalArgs: unknown;\n endpointName: string;\n};\nexport type InfiniteQueryThunkArg<D extends InfiniteQueryDefinition<any, any, any, any, any>> = QuerySubstateIdentifier & StartInfiniteQueryActionCreatorOptions<D> & {\n type: `query`;\n originalArgs: unknown;\n endpointName: string;\n param: unknown;\n direction?: InfiniteQueryDirection;\n};\ntype MutationThunkArg = {\n type: 'mutation';\n originalArgs: unknown;\n endpointName: string;\n track?: boolean;\n fixedCacheKey?: string;\n};\nexport type ThunkResult = unknown;\nexport type ThunkApiMetaConfig = {\n pendingMeta: {\n startedTimeStamp: number;\n [SHOULD_AUTOBATCH]: true;\n };\n fulfilledMeta: {\n fulfilledTimeStamp: number;\n baseQueryMeta: unknown;\n [SHOULD_AUTOBATCH]: true;\n };\n rejectedMeta: {\n baseQueryMeta: unknown;\n [SHOULD_AUTOBATCH]: true;\n };\n};\nexport type QueryThunk = AsyncThunk<ThunkResult, QueryThunkArg, ThunkApiMetaConfig>;\nexport type InfiniteQueryThunk<D extends InfiniteQueryDefinition<any, any, any, any, any>> = AsyncThunk<ThunkResult, InfiniteQueryThunkArg<D>, ThunkApiMetaConfig>;\nexport type MutationThunk = AsyncThunk<ThunkResult, MutationThunkArg, ThunkApiMetaConfig>;\nfunction defaultTransformResponse(baseQueryReturnValue: unknown) {\n return baseQueryReturnValue;\n}\nexport type MaybeDrafted<T> = T | Draft<T>;\nexport type Recipe<T> = (data: MaybeDrafted<T>) => void | MaybeDrafted<T>;\nexport type UpsertRecipe<T> = (data: MaybeDrafted<T> | undefined) => void | MaybeDrafted<T>;\nexport type PatchQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, patches: readonly Patch[], updateProvided?: boolean) => ThunkAction<void, PartialState, any, UnknownAction>;\nexport type AllQueryKeys<Definitions extends EndpointDefinitions> = QueryKeys<Definitions> | InfiniteQueryKeys<Definitions>;\nexport type QueryArgFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryArgFrom<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryArgFrom<Definitions[EndpointName]> : never;\nexport type DataFromAnyQueryDefinition<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteData<ResultTypeFrom<Definitions[EndpointName]>, PageParamFrom<Definitions[EndpointName]>> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? ResultTypeFrom<Definitions[EndpointName]> : unknown;\nexport type UpsertThunkResult<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = Definitions[EndpointName] extends InfiniteQueryDefinition<any, any, any, any, any> ? InfiniteQueryActionCreatorResult<Definitions[EndpointName]> : Definitions[EndpointName] extends QueryDefinition<any, any, any, any> ? QueryActionCreatorResult<Definitions[EndpointName]> : QueryActionCreatorResult<never>;\nexport type UpdateQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, updateRecipe: Recipe<DataFromAnyQueryDefinition<Definitions, EndpointName>>, updateProvided?: boolean) => ThunkAction<PatchCollection, PartialState, any, UnknownAction>;\nexport type UpsertQueryDataThunk<Definitions extends EndpointDefinitions, PartialState> = <EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>, value: DataFromAnyQueryDefinition<Definitions, EndpointName>) => ThunkAction<UpsertThunkResult<Definitions, EndpointName>, PartialState, any, UnknownAction>;\n\n/**\n * An object returned from dispatching a `api.util.updateQueryData` call.\n */\nexport type PatchCollection = {\n /**\n * An `immer` Patch describing the cache update.\n */\n patches: Patch[];\n /**\n * An `immer` Patch to revert the cache update.\n */\n inversePatches: Patch[];\n /**\n * A function that will undo the cache update.\n */\n undo: () => void;\n};\ntype TransformCallback = (baseQueryReturnValue: unknown, meta: unknown, arg: unknown) => any;\nexport const addShouldAutoBatch = <T extends Record<string, any>,>(arg: T = {} as T): T & {\n [SHOULD_AUTOBATCH]: true;\n} => {\n return {\n ...arg,\n [SHOULD_AUTOBATCH]: true\n };\n};\nexport function buildThunks<BaseQuery extends BaseQueryFn, ReducerPath extends string, Definitions extends EndpointDefinitions>({\n reducerPath,\n baseQuery,\n context: {\n endpointDefinitions\n },\n serializeQueryArgs,\n api,\n assertTagType,\n selectors\n}: {\n baseQuery: BaseQuery;\n reducerPath: ReducerPath;\n context: ApiContext<Definitions>;\n serializeQueryArgs: InternalSerializeQueryArgs;\n api: Api<BaseQuery, Definitions, ReducerPath, any>;\n assertTagType: AssertTagTypes;\n selectors: AllSelectors;\n}) {\n type State = RootState<any, string, ReducerPath>;\n const patchQueryData: PatchQueryDataThunk<EndpointDefinitions, State> = (endpointName, arg, patches, updateProvided) => (dispatch, getState) => {\n const endpointDefinition = endpointDefinitions[endpointName];\n const queryCacheKey = serializeQueryArgs({\n queryArgs: arg,\n endpointDefinition,\n endpointName\n });\n dispatch(api.internalActions.queryResultPatched({\n queryCacheKey,\n patches\n }));\n if (!updateProvided) {\n return;\n }\n const newValue = api.endpoints[endpointName].select(arg)(\n // Work around TS 4.1 mismatch\n getState() as RootState<any, any, any>);\n const providedTags = calculateProvidedBy(endpointDefinition.providesTags, newValue.data, undefined, arg, {}, assertTagType);\n dispatch(api.internalActions.updateProvidedBy({\n queryCacheKey,\n providedTags\n }));\n };\n function addToStart<T>(items: Array<T>, item: T, max = 0): Array<T> {\n const newItems = [item, ...items];\n return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n }\n function addToEnd<T>(items: Array<T>, item: T, max = 0): Array<T> {\n const newItems = [...items, item];\n return max && newItems.length > max ? newItems.slice(1) : newItems;\n }\n const updateQueryData: UpdateQueryDataThunk<EndpointDefinitions, State> = (endpointName, arg, updateRecipe, updateProvided = true) => (dispatch, getState) => {\n const endpointDefinition = api.endpoints[endpointName];\n const currentState = endpointDefinition.select(arg)(\n // Work around TS 4.1 mismatch\n getState() as RootState<any, any, any>);\n const ret: PatchCollection = {\n patches: [],\n inversePatches: [],\n undo: () => dispatch(api.util.patchQueryData(endpointName, arg, ret.inversePatches, updateProvided))\n };\n if (currentState.status === QueryStatus.uninitialized) {\n return ret;\n }\n let newValue;\n if ('data' in currentState) {\n if (isDraftable(currentState.data)) {\n const [value, patches, inversePatches] = produceWithPatches(currentState.data, updateRecipe);\n ret.patches.push(...patches);\n ret.inversePatches.push(...inversePatches);\n newValue = value;\n } else {\n newValue = updateRecipe(currentState.data);\n ret.patches.push({\n op: 'replace',\n path: [],\n value: newValue\n });\n ret.inversePatches.push({\n op: 'replace',\n path: [],\n value: currentState.data\n });\n }\n }\n if (ret.patches.length === 0) {\n return ret;\n }\n dispatch(api.util.patchQueryData(endpointName, arg, ret.patches, updateProvided));\n return ret;\n };\n const upsertQueryData: UpsertQueryDataThunk<Definitions, State> = (endpointName, arg, value) => dispatch => {\n type EndpointName = typeof endpointName;\n const res = dispatch((api.endpoints[endpointName] as ApiEndpointQuery<QueryDefinition<any, any, any, any, any>, Definitions>).initiate(arg, {\n subscribe: false,\n forceRefetch: true,\n [forceQueryFnSymbol]: () => ({\n data: value\n })\n })) as UpsertThunkResult<Definitions, EndpointName>;\n return res;\n };\n const getTransformCallbackForEndpoint = (endpointDefinition: EndpointDefinition<any, any, any, any>, transformFieldName: 'transformResponse' | 'transformErrorResponse'): TransformCallback => {\n return endpointDefinition.query && endpointDefinition[transformFieldName] ? endpointDefinition[transformFieldName]! as TransformCallback : defaultTransformResponse;\n };\n\n // The generic async payload function for all of our thunks\n const executeEndpoint: AsyncThunkPayloadCreator<ThunkResult, QueryThunkArg | MutationThunkArg | InfiniteQueryThunkArg<any>, ThunkApiMetaConfig & {\n state: RootState<any, string, ReducerPath>;\n }> = async (arg, {\n signal,\n abort,\n rejectWithValue,\n fulfillWithValue,\n dispatch,\n getState,\n extra\n }) => {\n const endpointDefinition = endpointDefinitions[arg.endpointName];\n try {\n let transformResponse: TransformCallback = getTransformCallbackForEndpoint(endpointDefinition, 'transformResponse');\n const baseQueryApi = {\n signal,\n abort,\n dispatch,\n getState,\n extra,\n endpoint: arg.endpointName,\n type: arg.type,\n forced: arg.type === 'query' ? isForcedQuery(arg, getState()) : undefined,\n queryCacheKey: arg.type === 'query' ? arg.queryCacheKey : undefined\n };\n const forceQueryFn = arg.type === 'query' ? arg[forceQueryFnSymbol] : undefined;\n let finalQueryReturnValue: QueryReturnValue;\n\n // Infinite query wrapper, which executes the request and returns\n // the InfiniteData `{pages, pageParams}` structure\n const fetchPage = async (data: InfiniteData<unknown, unknown>, param: unknown, maxPages: number, previous?: boolean): Promise<QueryReturnValue> => {\n // This should handle cases where there is no `getPrevPageParam`,\n // or `getPPP` returned nullish\n if (param == null && data.pages.length) {\n return Promise.resolve({\n data\n });\n }\n const finalQueryArg: InfiniteQueryCombinedArg<any, any> = {\n queryArg: arg.originalArgs,\n pageParam: param\n };\n const pageResponse = await executeRequest(finalQueryArg);\n const addTo = previous ? addToStart : addToEnd;\n return {\n data: {\n pages: addTo(data.pages, pageResponse.data, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n }\n };\n };\n\n // Wrapper for executing either `query` or `queryFn`,\n // and handling any errors\n async function executeRequest(finalQueryArg: unknown): Promise<QueryReturnValue> {\n let result: QueryReturnValue;\n const {\n extraOptions\n } = endpointDefinition;\n if (forceQueryFn) {\n // upsertQueryData relies on this to pass in the user-provided value\n result = forceQueryFn();\n } else if (endpointDefinition.query) {\n result = await baseQuery(endpointDefinition.query(finalQueryArg as any), baseQueryApi, extraOptions as any);\n } else {\n result = await endpointDefinition.queryFn(finalQueryArg as any, baseQueryApi, extraOptions as any, arg => baseQuery(arg, baseQueryApi, extraOptions as any));\n }\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n const what = endpointDefinition.query ? '`baseQuery`' : '`queryFn`';\n let err: undefined | string;\n if (!result) {\n err = `${what} did not return anything.`;\n } else if (typeof result !== 'object') {\n err = `${what} did not return an object.`;\n } else if (result.error && result.data) {\n err = `${what} returned an object containing both \\`error\\` and \\`result\\`.`;\n } else if (result.error === undefined && result.data === undefined) {\n err = `${what} returned an object containing neither a valid \\`error\\` and \\`result\\`. At least one of them should not be \\`undefined\\``;\n } else {\n for (const key of Object.keys(result)) {\n if (key !== 'error' && key !== 'data' && key !== 'meta') {\n err = `The object returned by ${what} has the unknown property ${key}.`;\n break;\n }\n }\n }\n if (err) {\n console.error(`Error encountered handling the endpoint ${arg.endpointName}.\n ${err}\n It needs to return an object with either the shape \\`{ data: <value> }\\` or \\`{ error: <value> }\\` that may contain an optional \\`meta\\` property.\n Object returned was:`, result);\n }\n }\n if (result.error) throw new HandledError(result.error, result.meta);\n const transformedResponse = await transformResponse(result.data, result.meta, finalQueryArg);\n return {\n ...result,\n data: transformedResponse\n };\n }\n if (arg.type === 'query' && 'infiniteQueryOptions' in endpointDefinition) {\n // This is an infinite query endpoint\n const {\n infiniteQueryOptions\n } = endpointDefinition;\n\n // Runtime checks should guarantee this is a positive number if provided\n const {\n maxPages = Infinity\n } = infiniteQueryOptions;\n let result: QueryReturnValue;\n\n // Start by looking up the existing InfiniteData value from state,\n // falling back to an empty value if it doesn't exist yet\n const blankData = {\n pages: [],\n pageParams: []\n };\n const cachedData = selectors.selectQueryEntry(getState(), arg.queryCacheKey)?.data as InfiniteData<unknown, unknown> | undefined;\n\n // When the arg changes or the user forces a refetch,\n // we don't include the `direction` flag. This lets us distinguish\n // between actually refetching with a forced query, vs just fetching\n // the next page.\n const isForcedQueryNeedingRefetch =\n // arg.forceRefetch\n isForcedQuery(arg, getState()) && !(arg as InfiniteQueryThunkArg<any>).direction;\n const existingData = (isForcedQueryNeedingRefetch || !cachedData ? blankData : cachedData) as InfiniteData<unknown, unknown>;\n\n // If the thunk specified a direction and we do have at least one page,\n // fetch the next or previous page\n if ('direction' in arg && arg.direction && existingData.pages.length) {\n const previous = arg.direction === 'backward';\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const param = pageParamFn(infiniteQueryOptions, existingData);\n result = await fetchPage(existingData, param, maxPages, previous);\n } else {\n // Otherwise, fetch the first page and then any remaining pages\n\n const {\n initialPageParam = infiniteQueryOptions.initialPageParam\n } = arg as InfiniteQueryThunkArg<any>;\n\n // If we're doing a refetch, we should start from\n // the first page we have cached.\n // Otherwise, we should start from the initialPageParam\n const cachedPageParams = cachedData?.pageParams ?? [];\n const firstPageParam = cachedPageParams[0] ?? initialPageParam;\n const totalPages = cachedPageParams.length;\n\n // Fetch first page\n result = await fetchPage(existingData, firstPageParam, maxPages);\n if (forceQueryFn) {\n // HACK `upsertQueryData` expects the user to pass in the `{pages, pageParams}` structure,\n // but `fetchPage` treats that as `pages[0]`. We have to manually un-nest it.\n result = {\n data: (result.data as InfiniteData<unknown, unknown>).pages[0]\n } as QueryReturnValue;\n }\n\n // Fetch remaining pages\n for (let i = 1; i < totalPages; i++) {\n const param = getNextPageParam(infiniteQueryOptions, result.data as InfiniteData<unknown, unknown>);\n result = await fetchPage(result.data as InfiniteData<unknown, unknown>, param, maxPages);\n }\n }\n finalQueryReturnValue = result;\n } else {\n // Non-infinite endpoint. Just run the one request.\n finalQueryReturnValue = await executeRequest(arg.originalArgs);\n }\n\n // console.log('Final result: ', transformedData)\n return fulfillWithValue(finalQueryReturnValue.data, addShouldAutoBatch({\n fulfilledTimeStamp: Date.now(),\n baseQueryMeta: finalQueryReturnValue.meta\n }));\n } catch (error) {\n let catchedError = error;\n if (catchedError instanceof HandledError) {\n let transformErrorResponse: TransformCallback = getTransformCallbackForEndpoint(endpointDefinition, 'transformErrorResponse');\n try {\n return rejectWithValue(await transformErrorResponse(catchedError.value, catchedError.meta, arg.originalArgs), addShouldAutoBatch({\n baseQueryMeta: catchedError.meta\n }));\n } catch (e) {\n catchedError = e;\n }\n }\n if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\n console.error(`An unhandled error occurred processing a request for the endpoint \"${arg.endpointName}\".\nIn the case of an unhandled error, no tags will be \"provided\" or \"invalidated\".`, catchedError);\n } else {\n console.error(catchedError);\n }\n throw catchedError;\n }\n };\n function isForcedQuery(arg: QueryThunkArg, state: RootState<any, string, ReducerPath>) {\n const requestState = selectors.selectQueryEntry(state, arg.queryCacheKey);\n const baseFetchOnMountOrArgChange = selectors.selectConfig(state).refetchOnMountOrArgChange;\n const fulfilledVal = requestState?.fulfilledTimeStamp;\n const refetchVal = arg.forceRefetch ?? (arg.subscribe && baseFetchOnMountOrArgChange);\n if (refetchVal) {\n // Return if it's true or compare the dates because it must be a number\n return refetchVal === true || (Number(new Date()) - Number(fulfilledVal)) / 1000 >= refetchVal;\n }\n return false;\n }\n const createQueryThunk = <ThunkArgType extends QueryThunkArg | InfiniteQueryThunkArg<any>,>() => {\n const generatedQueryThunk = createAsyncThunk<ThunkResult, ThunkArgType, ThunkApiMetaConfig & {\n state: RootState<any, string, ReducerPath>;\n }>(`${reducerPath}/executeQuery`, executeEndpoint, {\n getPendingMeta({\n arg\n }) {\n const endpointDefinition = endpointDefinitions[arg.endpointName];\n return addShouldAutoBatch({\n startedTimeStamp: Date.now(),\n ...(isInfiniteQueryDefinition(endpointDefinition) ? {\n direction: (arg as InfiniteQueryThunkArg<any>).direction\n } : {})\n });\n },\n condition(queryThunkArg, {\n getState\n }) {\n const state = getState();\n const requestState = selectors.selectQueryEntry(state, queryThunkArg.queryCacheKey);\n const fulfilledVal = requestState?.fulfilledTimeStamp;\n const currentArg = queryThunkArg.originalArgs;\n const previousArg = requestState?.originalArgs;\n const endpointDefinition = endpointDefinitions[queryThunkArg.endpointName];\n const direction = (queryThunkArg as InfiniteQueryThunkArg<any>).direction;\n\n // Order of these checks matters.\n // In order for `upsertQueryData` to successfully run while an existing request is in flight,\n /// we have to check for that first, otherwise `queryThunk` will bail out and not run at all.\n if (isUpsertQuery(queryThunkArg)) {\n return true;\n }\n\n // Don't retry a request that's currently in-flight\n if (requestState?.status === 'pending') {\n return false;\n }\n\n // if this is forced, continue\n if (isForcedQuery(queryThunkArg, state)) {\n return true;\n }\n if (isQueryDefinition(endpointDefinition) && endpointDefinition?.forceRefetch?.({\n currentArg,\n previousArg,\n endpointState: requestState,\n state\n })) {\n return true;\n }\n\n // Pull from the cache unless we explicitly force refetch or qualify based on time\n if (fulfilledVal && !direction) {\n // Value is cached and we didn't specify to refresh, skip it.\n return false;\n }\n return true;\n },\n dispatchConditionRejection: true\n });\n return generatedQueryThunk;\n };\n const queryThunk = createQueryThunk<QueryThunkArg>();\n const infiniteQueryThunk = createQueryThunk<InfiniteQueryThunkArg<any>>();\n const mutationThunk = createAsyncThunk<ThunkResult, MutationThunkArg, ThunkApiMetaConfig & {\n state: RootState<any, string, ReducerPath>;\n }>(`${reducerPath}/executeMutation`, executeEndpoint, {\n getPendingMeta() {\n return addShouldAutoBatch({\n startedTimeStamp: Date.now()\n });\n }\n });\n const hasTheForce = (options: any): options is {\n force: boolean;\n } => 'force' in options;\n const hasMaxAge = (options: any): options is {\n ifOlderThan: false | number;\n } => 'ifOlderThan' in options;\n const prefetch = <EndpointName extends QueryKeys<Definitions>,>(endpointName: EndpointName, arg: any, options: PrefetchOptions): ThunkAction<void, any, any, UnknownAction> => (dispatch: ThunkDispatch<any, any, any>, getState: () => any) => {\n const force = hasTheForce(options) && options.force;\n const maxAge = hasMaxAge(options) && options.ifOlderThan;\n const queryAction = (force: boolean = true) => {\n const options = {\n forceRefetch: force,\n isPrefetch: true\n };\n return (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).initiate(arg, options);\n };\n const latestStateValue = (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).select(arg)(getState());\n if (force) {\n dispatch(queryAction());\n } else if (maxAge) {\n const lastFulfilledTs = latestStateValue?.fulfilledTimeStamp;\n if (!lastFulfilledTs) {\n dispatch(queryAction());\n return;\n }\n const shouldRetrigger = (Number(new Date()) - Number(new Date(lastFulfilledTs))) / 1000 >= maxAge;\n if (shouldRetrigger) {\n dispatch(queryAction());\n }\n } else {\n // If prefetching with no options, just let it try\n dispatch(queryAction(false));\n }\n };\n function matchesEndpoint(endpointName: string) {\n return (action: any): action is UnknownAction => action?.meta?.arg?.endpointName === endpointName;\n }\n function buildMatchThunkActions<Thunk extends AsyncThunk<any, QueryThunkArg, ThunkApiMetaConfig> | AsyncThunk<any, MutationThunkArg, ThunkApiMetaConfig>>(thunk: Thunk, endpointName: string) {\n return {\n matchPending: isAllOf(isPending(thunk), matchesEndpoint(endpointName)),\n matchFulfilled: isAllOf(isFulfilled(thunk), matchesEndpoint(endpointName)),\n matchRejected: isAllOf(isRejected(thunk), matchesEndpoint(endpointName))\n } as Matchers<Thunk, any>;\n }\n return {\n queryThunk,\n mutationThunk,\n infiniteQueryThunk,\n prefetch,\n updateQueryData,\n upsertQueryData,\n patchQueryData,\n buildMatchThunkActions\n };\n}\nexport function getNextPageParam(options: InfiniteQueryConfigOptions<unknown, unknown>, {\n pages,\n pageParams\n}: InfiniteData<unknown, unknown>): unknown | undefined {\n const lastIndex = pages.length - 1;\n return options.getNextPageParam(pages[lastIndex], pages, pageParams[lastIndex], pageParams);\n}\nexport function getPreviousPageParam(options: InfiniteQueryConfigOptions<unknown, unknown>, {\n pages,\n pageParams\n}: InfiniteData<unknown, unknown>): unknown | undefined {\n return options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams);\n}\nexport function calculateProvidedByThunk(action: UnwrapPromise<ReturnType<ReturnType<QueryThunk>> | ReturnType<ReturnType<MutationThunk>>>, type: 'providesTags' | 'invalidatesTags', endpointDefinitions: EndpointDefinitions, assertTagType: AssertTagTypes) {\n return calculateProvidedBy(endpointDefinitions[action.meta.arg.endpointName][type], isFulfilled(action) ? action.payload : undefined, isRejectedWithValue(action) ? action.payload : undefined, action.meta.arg.originalArgs, 'baseQueryMeta' in action.meta ? action.meta.baseQueryMeta : undefined, assertTagType);\n}", "import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { AsyncThunkAction, SafePromise, SerializedError, ThunkAction, UnknownAction } from '@reduxjs/toolkit';\nimport type { Dispatch } from 'redux';\nimport { asSafePromise } from '../../tsHelpers';\nimport type { Api, ApiContext } from '../apiTypes';\nimport type { BaseQueryError, QueryReturnValue } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport { isQueryDefinition, type EndpointDefinition, type EndpointDefinitions, type InfiniteQueryArgFrom, type InfiniteQueryDefinition, type MutationDefinition, type PageParamFrom, type QueryArgFrom, type QueryDefinition, type ResultTypeFrom } from '../endpointDefinitions';\nimport { countObjectKeys, getOrInsert, isNotNullish } from '../utils';\nimport type { InfiniteData, InfiniteQueryConfigOptions, InfiniteQueryDirection, SubscriptionOptions } from './apiState';\nimport type { InfiniteQueryResultSelectorResult, QueryResultSelectorResult } from './buildSelectors';\nimport type { InfiniteQueryThunk, InfiniteQueryThunkArg, MutationThunk, QueryThunk, QueryThunkArg, ThunkApiMetaConfig } from './buildThunks';\nimport type { ApiEndpointQuery } from './module';\nexport type BuildInitiateApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>> = {\n initiate: StartQueryActionCreator<Definition>;\n};\nexport type BuildInitiateApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = {\n initiate: StartInfiniteQueryActionCreator<Definition>;\n};\nexport type BuildInitiateApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>> = {\n initiate: StartMutationActionCreator<Definition>;\n};\nexport const forceQueryFnSymbol = Symbol('forceQueryFn');\nexport const isUpsertQuery = (arg: QueryThunkArg) => typeof arg[forceQueryFnSymbol] === 'function';\nexport type StartQueryActionCreatorOptions = {\n subscribe?: boolean;\n forceRefetch?: boolean | number;\n subscriptionOptions?: SubscriptionOptions;\n [forceQueryFnSymbol]?: () => QueryReturnValue;\n};\nexport type StartInfiniteQueryActionCreatorOptions<D extends InfiniteQueryDefinition<any, any, any, any, any>> = StartQueryActionCreatorOptions & {\n direction?: InfiniteQueryDirection;\n param?: unknown;\n} & Partial<Pick<Partial<InfiniteQueryConfigOptions<ResultTypeFrom<D>, PageParamFrom<D>>>, 'initialPageParam'>>;\ntype AnyQueryActionCreator<D extends EndpointDefinition<any, any, any, any>> = (arg: any, options?: StartQueryActionCreatorOptions) => ThunkAction<AnyActionCreatorResult, any, any, UnknownAction>;\ntype StartQueryActionCreator<D extends QueryDefinition<any, any, any, any, any>> = (arg: QueryArgFrom<D>, options?: StartQueryActionCreatorOptions) => ThunkAction<QueryActionCreatorResult<D>, any, any, UnknownAction>;\nexport type StartInfiniteQueryActionCreator<D extends InfiniteQueryDefinition<any, any, any, any, any>> = (arg: InfiniteQueryArgFrom<D>, options?: StartInfiniteQueryActionCreatorOptions<D>) => ThunkAction<InfiniteQueryActionCreatorResult<D>, any, any, UnknownAction>;\ntype QueryActionCreatorFields = {\n requestId: string;\n subscriptionOptions: SubscriptionOptions | undefined;\n abort(): void;\n unsubscribe(): void;\n updateSubscriptionOptions(options: SubscriptionOptions): void;\n queryCacheKey: string;\n};\ntype AnyActionCreatorResult = SafePromise<any> & QueryActionCreatorFields & {\n arg: any;\n unwrap(): Promise<any>;\n refetch(): AnyActionCreatorResult;\n};\nexport type QueryActionCreatorResult<D extends QueryDefinition<any, any, any, any>> = SafePromise<QueryResultSelectorResult<D>> & QueryActionCreatorFields & {\n arg: QueryArgFrom<D>;\n unwrap(): Promise<ResultTypeFrom<D>>;\n refetch(): QueryActionCreatorResult<D>;\n};\nexport type InfiniteQueryActionCreatorResult<D extends InfiniteQueryDefinition<any, any, any, any, any>> = SafePromise<InfiniteQueryResultSelectorResult<D>> & QueryActionCreatorFields & {\n arg: InfiniteQueryArgFrom<D>;\n unwrap(): Promise<InfiniteData<ResultTypeFrom<D>, PageParamFrom<D>>>;\n refetch(): InfiniteQueryActionCreatorResult<D>;\n};\ntype StartMutationActionCreator<D extends MutationDefinition<any, any, any, any>> = (arg: QueryArgFrom<D>, options?: {\n /**\n * If this mutation should be tracked in the store.\n * If you just want to manually trigger this mutation using `dispatch` and don't care about the\n * result, state & potential errors being held in store, you can set this to false.\n * (defaults to `true`)\n */\n track?: boolean;\n fixedCacheKey?: string;\n}) => ThunkAction<MutationActionCreatorResult<D>, any, any, UnknownAction>;\nexport type MutationActionCreatorResult<D extends MutationDefinition<any, any, any, any>> = SafePromise<{\n data: ResultTypeFrom<D>;\n error?: undefined;\n} | {\n data?: undefined;\n error: Exclude<BaseQueryError<D extends MutationDefinition<any, infer BaseQuery, any, any> ? BaseQuery : never>, undefined> | SerializedError;\n}> & {\n /** @internal */\n arg: {\n /**\n * The name of the given endpoint for the mutation\n */\n endpointName: string;\n /**\n * The original arguments supplied to the mutation call\n */\n originalArgs: QueryArgFrom<D>;\n /**\n * Whether the mutation is being tracked in the store.\n */\n track?: boolean;\n fixedCacheKey?: string;\n };\n /**\n * A unique string generated for the request sequence\n */\n requestId: string;\n\n /**\n * A method to cancel the mutation promise. Note that this is not intended to prevent the mutation\n * that was fired off from reaching the server, but only to assist in handling the response.\n *\n * Calling `abort()` prior to the promise resolving will force it to reach the error state with\n * the serialized error:\n * `{ name: 'AbortError', message: 'Aborted' }`\n *\n * @example\n * ```ts\n * const [updateUser] = useUpdateUserMutation();\n *\n * useEffect(() => {\n * const promise = updateUser(id);\n * promise\n * .unwrap()\n * .catch((err) => {\n * if (err.name === 'AbortError') return;\n * // else handle the unexpected error\n * })\n *\n * return () => {\n * promise.abort();\n * }\n * }, [id, updateUser])\n * ```\n */\n abort(): void;\n /**\n * Unwraps a mutation call to provide the raw response/error.\n *\n * @remarks\n * If you need to access the error or success payload immediately after a mutation, you can chain .unwrap().\n *\n * @example\n * ```ts\n * // codeblock-meta title=\"Using .unwrap\"\n * addPost({ id: 1, name: 'Example' })\n * .unwrap()\n * .then((payload) => console.log('fulfilled', payload))\n * .catch((error) => console.error('rejected', error));\n * ```\n *\n * @example\n * ```ts\n * // codeblock-meta title=\"Using .unwrap with async await\"\n * try {\n * const payload = await addPost({ id: 1, name: 'Example' }).unwrap();\n * console.log('fulfilled', payload)\n * } catch (error) {\n * console.error('rejected', error);\n * }\n * ```\n */\n unwrap(): Promise<ResultTypeFrom<D>>;\n /**\n * A method to manually unsubscribe from the mutation call, meaning it will be removed from cache after the usual caching grace period.\n The value returned by the hook will reset to `isUninitialized` afterwards.\n */\n reset(): void;\n};\nexport function buildInitiate({\n serializeQueryArgs,\n queryThunk,\n infiniteQueryThunk,\n mutationThunk,\n api,\n context\n}: {\n serializeQueryArgs: InternalSerializeQueryArgs;\n queryThunk: QueryThunk;\n infiniteQueryThunk: InfiniteQueryThunk<any>;\n mutationThunk: MutationThunk;\n api: Api<any, EndpointDefinitions, any, any>;\n context: ApiContext<EndpointDefinitions>;\n}) {\n const runningQueries: Map<Dispatch, Record<string, QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any> | undefined>> = new Map();\n const runningMutations: Map<Dispatch, Record<string, MutationActionCreatorResult<any> | undefined>> = new Map();\n const {\n unsubscribeQueryResult,\n removeMutationResult,\n updateSubscriptionOptions\n } = api.internalActions;\n return {\n buildInitiateQuery,\n buildInitiateInfiniteQuery,\n buildInitiateMutation,\n getRunningQueryThunk,\n getRunningMutationThunk,\n getRunningQueriesThunk,\n getRunningMutationsThunk\n };\n function getRunningQueryThunk(endpointName: string, queryArgs: any) {\n return (dispatch: Dispatch) => {\n const endpointDefinition = context.endpointDefinitions[endpointName];\n const queryCacheKey = serializeQueryArgs({\n queryArgs,\n endpointDefinition,\n endpointName\n });\n return runningQueries.get(dispatch)?.[queryCacheKey] as QueryActionCreatorResult<never> | InfiniteQueryActionCreatorResult<never> | undefined;\n };\n }\n function getRunningMutationThunk(\n /**\n * this is only here to allow TS to infer the result type by input value\n * we could use it to validate the result, but it's probably not necessary\n */\n _endpointName: string, fixedCacheKeyOrRequestId: string) {\n return (dispatch: Dispatch) => {\n return runningMutations.get(dispatch)?.[fixedCacheKeyOrRequestId] as MutationActionCreatorResult<never> | undefined;\n };\n }\n function getRunningQueriesThunk() {\n return (dispatch: Dispatch) => Object.values(runningQueries.get(dispatch) || {}).filter(isNotNullish);\n }\n function getRunningMutationsThunk() {\n return (dispatch: Dispatch) => Object.values(runningMutations.get(dispatch) || {}).filter(isNotNullish);\n }\n function middlewareWarning(dispatch: Dispatch) {\n if (process.env.NODE_ENV !== 'production') {\n if ((middlewareWarning as any).triggered) return;\n const returnedValue = dispatch(api.internalActions.internal_getRTKQSubscriptions());\n (middlewareWarning as any).triggered = true;\n\n // The RTKQ middleware should return the internal state object,\n // but it should _not_ be the action object.\n if (typeof returnedValue !== 'object' || typeof returnedValue?.type === 'string') {\n // Otherwise, must not have been added\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(34) : `Warning: Middleware for RTK-Query API at reducerPath \"${api.reducerPath}\" has not been added to the store.\nYou must add the middleware for RTK-Query to function correctly!`);\n }\n }\n }\n function buildInitiateAnyQuery<T extends 'query' | 'infiniteQuery'>(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any> | InfiniteQueryDefinition<any, any, any, any, any>) {\n const queryAction: AnyQueryActionCreator<any> = (arg, {\n subscribe = true,\n forceRefetch,\n subscriptionOptions,\n [forceQueryFnSymbol]: forceQueryFn,\n ...rest\n } = {}) => (dispatch, getState) => {\n const queryCacheKey = serializeQueryArgs({\n queryArgs: arg,\n endpointDefinition,\n endpointName\n });\n let thunk: AsyncThunkAction<unknown, QueryThunkArg, ThunkApiMetaConfig>;\n const commonThunkArgs = {\n ...rest,\n type: 'query' as const,\n subscribe,\n forceRefetch: forceRefetch,\n subscriptionOptions,\n endpointName,\n originalArgs: arg,\n queryCacheKey,\n [forceQueryFnSymbol]: forceQueryFn\n };\n if (isQueryDefinition(endpointDefinition)) {\n thunk = queryThunk(commonThunkArgs);\n } else {\n const {\n direction,\n initialPageParam\n } = rest as Pick<InfiniteQueryThunkArg<any>, 'direction' | 'initialPageParam'>;\n thunk = infiniteQueryThunk({\n ...(commonThunkArgs as InfiniteQueryThunkArg<any>),\n // Supply these even if undefined. This helps with a field existence\n // check over in `buildSlice.ts`\n direction,\n initialPageParam\n });\n }\n const selector = (api.endpoints[endpointName] as ApiEndpointQuery<any, any>).select(arg);\n const thunkResult = dispatch(thunk);\n const stateAfter = selector(getState());\n middlewareWarning(dispatch);\n const {\n requestId,\n abort\n } = thunkResult;\n const skippedSynchronously = stateAfter.requestId !== requestId;\n const runningQuery = runningQueries.get(dispatch)?.[queryCacheKey];\n const selectFromState = () => selector(getState());\n const statePromise: AnyActionCreatorResult = Object.assign((forceQueryFn ?\n // a query has been forced (upsertQueryData)\n // -> we want to resolve it once data has been written with the data that will be written\n thunkResult.then(selectFromState) : skippedSynchronously && !runningQuery ?\n // a query has been skipped due to a condition and we do not have any currently running query\n // -> we want to resolve it immediately with the current data\n Promise.resolve(stateAfter) :\n // query just started or one is already in flight\n // -> wait for the running query, then resolve with data from after that\n Promise.all([runningQuery, thunkResult]).then(selectFromState)) as SafePromise<any>, {\n arg,\n requestId,\n subscriptionOptions,\n queryCacheKey,\n abort,\n async unwrap() {\n const result = await statePromise;\n if (result.isError) {\n throw result.error;\n }\n return result.data;\n },\n refetch: () => dispatch(queryAction(arg, {\n subscribe: false,\n forceRefetch: true\n })),\n unsubscribe() {\n if (subscribe) dispatch(unsubscribeQueryResult({\n queryCacheKey,\n requestId\n }));\n },\n updateSubscriptionOptions(options: SubscriptionOptions) {\n statePromise.subscriptionOptions = options;\n dispatch(updateSubscriptionOptions({\n endpointName,\n requestId,\n queryCacheKey,\n options\n }));\n }\n });\n if (!runningQuery && !skippedSynchronously && !forceQueryFn) {\n const running = getOrInsert(runningQueries, dispatch, {});\n running[queryCacheKey] = statePromise;\n statePromise.then(() => {\n delete running[queryCacheKey];\n if (!countObjectKeys(running)) {\n runningQueries.delete(dispatch);\n }\n });\n }\n return statePromise;\n };\n return queryAction;\n }\n function buildInitiateQuery(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any>) {\n const queryAction: StartQueryActionCreator<any> = buildInitiateAnyQuery(endpointName, endpointDefinition);\n return queryAction;\n }\n function buildInitiateInfiniteQuery(endpointName: string, endpointDefinition: InfiniteQueryDefinition<any, any, any, any, any>) {\n const infiniteQueryAction: StartInfiniteQueryActionCreator<any> = buildInitiateAnyQuery(endpointName, endpointDefinition);\n return infiniteQueryAction;\n }\n function buildInitiateMutation(endpointName: string): StartMutationActionCreator<any> {\n return (arg, {\n track = true,\n fixedCacheKey\n } = {}) => (dispatch, getState) => {\n const thunk = mutationThunk({\n type: 'mutation',\n endpointName,\n originalArgs: arg,\n track,\n fixedCacheKey\n });\n const thunkResult = dispatch(thunk);\n middlewareWarning(dispatch);\n const {\n requestId,\n abort,\n unwrap\n } = thunkResult;\n const returnValuePromise = asSafePromise(thunkResult.unwrap().then(data => ({\n data\n })), error => ({\n error\n }));\n const reset = () => {\n dispatch(removeMutationResult({\n requestId,\n fixedCacheKey\n }));\n };\n const ret = Object.assign(returnValuePromise, {\n arg: thunkResult.arg,\n requestId,\n abort,\n unwrap,\n reset\n });\n const running = runningMutations.get(dispatch) || {};\n runningMutations.set(dispatch, running);\n running[requestId] = ret;\n ret.then(() => {\n delete running[requestId];\n if (!countObjectKeys(running)) {\n runningMutations.delete(dispatch);\n }\n });\n if (fixedCacheKey) {\n running[fixedCacheKey] = ret;\n ret.then(() => {\n if (running[fixedCacheKey] === ret) {\n delete running[fixedCacheKey];\n if (!countObjectKeys(running)) {\n runningMutations.delete(dispatch);\n }\n }\n });\n }\n return ret;\n };\n }\n}", "import type { Middleware, StoreEnhancer } from 'redux';\nimport type { Tuple } from './utils';\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>) {\n Object.assign(target, ...args);\n}\n\n/**\n * return True if T is `any`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsAny<T, True, False = never> =\n// test if we are going the left AND right path in the condition\ntrue | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;\n\n/**\n * return True if T is `unknown`, otherwise return False\n * taken from https://github.com/joonhocho/tsdef\n *\n * @internal\n */\nexport type IsUnknown<T, True, False = never> = unknown extends T ? IsAny<T, False, True> : False;\nexport type FallbackIfUnknown<T, Fallback> = IsUnknown<T, Fallback, T>;\n\n/**\n * @internal\n */\nexport type IfMaybeUndefined<P, True, False> = [undefined] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IfVoid<P, True, False> = [void] extends [P] ? True : False;\n\n/**\n * @internal\n */\nexport type IsEmptyObj<T, True, False = never> = T extends any ? keyof T extends never ? IsUnknown<T, False, IfMaybeUndefined<T, False, IfVoid<T, False, True>>> : False : never;\n\n/**\n * returns True if TS version is above 3.5, False if below.\n * uses feature detection to detect TS version >= 3.5\n * * versions below 3.5 will return `{}` for unresolvable interference\n * * versions above will return `unknown`\n *\n * @internal\n */\nexport type AtLeastTS35<True, False> = [True, False][IsUnknown<ReturnType<<T>() => T>, 0, 1>];\n\n/**\n * @internal\n */\nexport type IsUnknownOrNonInferrable<T, True, False> = AtLeastTS35<IsUnknown<T, True, False>, IsEmptyObj<T, True, IsUnknown<T, True, False>>>;\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\n\n// Appears to have a convenient side effect of ignoring `never` even if that's not what you specified\nexport type ExcludeFromTuple<T, E, Acc extends unknown[] = []> = T extends [infer Head, ...infer Tail] ? ExcludeFromTuple<Tail, E, [...Acc, ...([Head] extends [E] ? [] : [Head])]> : Acc;\ntype ExtractDispatchFromMiddlewareTuple<MiddlewareTuple extends readonly any[], Acc extends {}> = MiddlewareTuple extends [infer Head, ...infer Tail] ? ExtractDispatchFromMiddlewareTuple<Tail, Acc & (Head extends Middleware<infer D> ? IsAny<D, {}, D> : {})> : Acc;\nexport type ExtractDispatchExtensions<M> = M extends Tuple<infer MiddlewareTuple> ? ExtractDispatchFromMiddlewareTuple<MiddlewareTuple, {}> : M extends ReadonlyArray<Middleware> ? ExtractDispatchFromMiddlewareTuple<[...M], {}> : never;\ntype ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStoreExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<infer Ext> ? IsAny<Ext, {}, Ext> : {})> : Acc;\nexport type ExtractStoreExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStoreExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<infer Ext> ? Ext extends {} ? IsAny<Ext, {}, Ext> : {} : {}> : never;\ntype ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple extends readonly any[], Acc extends {}> = EnhancerTuple extends [infer Head, ...infer Tail] ? ExtractStateExtensionsFromEnhancerTuple<Tail, Acc & (Head extends StoreEnhancer<any, infer StateExt> ? IsAny<StateExt, {}, StateExt> : {})> : Acc;\nexport type ExtractStateExtensions<E> = E extends Tuple<infer EnhancerTuple> ? ExtractStateExtensionsFromEnhancerTuple<EnhancerTuple, {}> : E extends ReadonlyArray<StoreEnhancer> ? UnionToIntersection<E[number] extends StoreEnhancer<any, infer StateExt> ? StateExt extends {} ? IsAny<StateExt, {}, StateExt> : {} : {}> : never;\n\n/**\n * Helper type. Passes T out again, but boxes it in a way that it cannot\n * \"widen\" the type by accident if it is a generic that should be inferred\n * from elsewhere.\n *\n * @internal\n */\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type WithOptionalProp<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport interface TypeGuard<T> {\n (value: any): value is T;\n}\nexport interface HasMatchFunction<T> {\n match: TypeGuard<T>;\n}\nexport const hasMatchFunction = <T,>(v: Matcher<T>): v is HasMatchFunction<T> => {\n return v && typeof (v as HasMatchFunction<T>).match === 'function';\n};\n\n/** @public */\nexport type Matcher<T> = HasMatchFunction<T> | TypeGuard<T>;\n\n/** @public */\nexport type ActionFromMatcher<M extends Matcher<any>> = M extends Matcher<infer T> ? T : never;\nexport type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type Tail<T extends any[]> = T extends [any, ...infer Tail] ? Tail : never;\nexport type UnknownIfNonSpecific<T> = {} extends T ? unknown : T;\n\n/**\n * A Promise that will never reject.\n * @see https://github.com/reduxjs/redux-toolkit/issues/4101\n */\nexport type SafePromise<T> = Promise<T> & {\n __linterBrands: 'SafePromise';\n};\n\n/**\n * Properly wraps a Promise as a {@link SafePromise} with .catch(fallback).\n */\nexport function asSafePromise<Resolved, Rejected>(promise: Promise<Resolved>, fallback: (error: unknown) => Rejected) {\n return promise.catch(fallback) as SafePromise<Resolved | Rejected>;\n}", "import type { Action, PayloadAction, UnknownAction } from '@reduxjs/toolkit';\nimport { combineReducers, createAction, createSlice, isAnyOf, isFulfilled, isRejectedWithValue, createNextState, prepareAutoBatched, SHOULD_AUTOBATCH, nanoid } from './rtkImports';\nimport type { QuerySubstateIdentifier, QuerySubState, MutationSubstateIdentifier, MutationSubState, MutationState, QueryState, InvalidationState, Subscribers, QueryCacheKey, SubscriptionState, ConfigState, QueryKeys, InfiniteQuerySubState, InfiniteQueryDirection } from './apiState';\nimport { QueryStatus } from './apiState';\nimport type { AllQueryKeys, QueryArgFromAnyQueryDefinition, DataFromAnyQueryDefinition, InfiniteQueryThunk, MutationThunk, QueryThunk, QueryThunkArg, RejectedAction } from './buildThunks';\nimport { calculateProvidedByThunk } from './buildThunks';\nimport { isInfiniteQueryDefinition, type AssertTagTypes, type DefinitionType, type EndpointDefinitions, type FullTagDescription, type QueryArgFrom, type QueryDefinition, type ResultTypeFrom } from '../endpointDefinitions';\nimport type { Patch } from 'immer';\nimport { isDraft } from 'immer';\nimport { applyPatches, original } from 'immer';\nimport { onFocus, onFocusLost, onOffline, onOnline } from './setupListeners';\nimport { isDocumentVisible, isOnline, copyWithStructuralSharing } from '../utils';\nimport type { ApiContext } from '../apiTypes';\nimport { isUpsertQuery } from './buildInitiate';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\n\n/**\n * A typesafe single entry to be upserted into the cache\n */\nexport type NormalizedQueryUpsertEntry<Definitions extends EndpointDefinitions, EndpointName extends AllQueryKeys<Definitions>> = {\n endpointName: EndpointName;\n arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>;\n value: DataFromAnyQueryDefinition<Definitions, EndpointName>;\n};\n\n/**\n * The internal version that is not typesafe since we can't carry the generics through `createSlice`\n */\ntype NormalizedQueryUpsertEntryPayload = {\n endpointName: string;\n arg: unknown;\n value: unknown;\n};\nexport type ProcessedQueryUpsertEntry = {\n queryDescription: QueryThunkArg;\n value: unknown;\n};\n\n/**\n * A typesafe representation of a util action creator that accepts cache entry descriptions to upsert\n */\nexport type UpsertEntries<Definitions extends EndpointDefinitions> = (<EndpointNames extends Array<AllQueryKeys<Definitions>>>(entries: [...{ [I in keyof EndpointNames]: NormalizedQueryUpsertEntry<Definitions, EndpointNames[I]> }]) => PayloadAction<NormalizedQueryUpsertEntryPayload[]>) & {\n match: (action: unknown) => action is PayloadAction<NormalizedQueryUpsertEntryPayload[]>;\n};\nfunction updateQuerySubstateIfExists(state: QueryState<any>, queryCacheKey: QueryCacheKey, update: (substate: QuerySubState<any> | InfiniteQuerySubState<any>) => void) {\n const substate = state[queryCacheKey];\n if (substate) {\n update(substate);\n }\n}\nexport function getMutationCacheKey(id: MutationSubstateIdentifier | {\n requestId: string;\n arg: {\n fixedCacheKey?: string | undefined;\n };\n}): string;\nexport function getMutationCacheKey(id: {\n fixedCacheKey?: string;\n requestId?: string;\n}): string | undefined;\nexport function getMutationCacheKey(id: {\n fixedCacheKey?: string;\n requestId?: string;\n} | MutationSubstateIdentifier | {\n requestId: string;\n arg: {\n fixedCacheKey?: string | undefined;\n };\n}): string | undefined {\n return ('arg' in id ? id.arg.fixedCacheKey : id.fixedCacheKey) ?? id.requestId;\n}\nfunction updateMutationSubstateIfExists(state: MutationState<any>, id: MutationSubstateIdentifier | {\n requestId: string;\n arg: {\n fixedCacheKey?: string | undefined;\n };\n}, update: (substate: MutationSubState<any>) => void) {\n const substate = state[getMutationCacheKey(id)];\n if (substate) {\n update(substate);\n }\n}\nconst initialState = {} as any;\nexport function buildSlice({\n reducerPath,\n queryThunk,\n mutationThunk,\n serializeQueryArgs,\n context: {\n endpointDefinitions: definitions,\n apiUid,\n extractRehydrationInfo,\n hasRehydrationInfo\n },\n assertTagType,\n config\n}: {\n reducerPath: string;\n queryThunk: QueryThunk;\n infiniteQueryThunk: InfiniteQueryThunk<any>;\n mutationThunk: MutationThunk;\n serializeQueryArgs: InternalSerializeQueryArgs;\n context: ApiContext<EndpointDefinitions>;\n assertTagType: AssertTagTypes;\n config: Omit<ConfigState<string>, 'online' | 'focused' | 'middlewareRegistered'>;\n}) {\n const resetApiState = createAction(`${reducerPath}/resetApiState`);\n function writePendingCacheEntry(draft: QueryState<any>, arg: QueryThunkArg, upserting: boolean, meta: {\n arg: QueryThunkArg;\n requestId: string;\n // requestStatus: 'pending'\n } & {\n startedTimeStamp: number;\n }) {\n draft[arg.queryCacheKey] ??= {\n status: QueryStatus.uninitialized,\n endpointName: arg.endpointName\n };\n updateQuerySubstateIfExists(draft, arg.queryCacheKey, substate => {\n substate.status = QueryStatus.pending;\n substate.requestId = upserting && substate.requestId ?\n // for `upsertQuery` **updates**, keep the current `requestId`\n substate.requestId :\n // for normal queries or `upsertQuery` **inserts** always update the `requestId`\n meta.requestId;\n if (arg.originalArgs !== undefined) {\n substate.originalArgs = arg.originalArgs;\n }\n substate.startedTimeStamp = meta.startedTimeStamp;\n const endpointDefinition = definitions[meta.arg.endpointName];\n if (isInfiniteQueryDefinition(endpointDefinition) && 'direction' in arg) {\n ;\n (substate as InfiniteQuerySubState<any>).direction = arg.direction as InfiniteQueryDirection;\n }\n });\n }\n function writeFulfilledCacheEntry(draft: QueryState<any>, meta: {\n arg: QueryThunkArg;\n requestId: string;\n } & {\n fulfilledTimeStamp: number;\n baseQueryMeta: unknown;\n }, payload: unknown, upserting: boolean) {\n updateQuerySubstateIfExists(draft, meta.arg.queryCacheKey, substate => {\n if (substate.requestId !== meta.requestId && !upserting) return;\n const {\n merge\n } = definitions[meta.arg.endpointName] as QueryDefinition<any, any, any, any>;\n substate.status = QueryStatus.fulfilled;\n if (merge) {\n if (substate.data !== undefined) {\n const {\n fulfilledTimeStamp,\n arg,\n baseQueryMeta,\n requestId\n } = meta;\n // There's existing cache data. Let the user merge it in themselves.\n // We're already inside an Immer-powered reducer, and the user could just mutate `substate.data`\n // themselves inside of `merge()`. But, they might also want to return a new value.\n // Try to let Immer figure that part out, save the result, and assign it to `substate.data`.\n let newData = createNextState(substate.data, draftSubstateData => {\n // As usual with Immer, you can mutate _or_ return inside here, but not both\n return merge(draftSubstateData, payload, {\n arg: arg.originalArgs,\n baseQueryMeta,\n fulfilledTimeStamp,\n requestId\n });\n });\n substate.data = newData;\n } else {\n // Presumably a fresh request. Just cache the response data.\n substate.data = payload;\n }\n } else {\n // Assign or safely update the cache data.\n substate.data = definitions[meta.arg.endpointName].structuralSharing ?? true ? copyWithStructuralSharing(isDraft(substate.data) ? original(substate.data) : substate.data, payload) : payload;\n }\n delete substate.error;\n substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;\n });\n }\n const querySlice = createSlice({\n name: `${reducerPath}/queries`,\n initialState: initialState as QueryState<any>,\n reducers: {\n removeQueryResult: {\n reducer(draft, {\n payload: {\n queryCacheKey\n }\n }: PayloadAction<QuerySubstateIdentifier>) {\n delete draft[queryCacheKey];\n },\n prepare: prepareAutoBatched<QuerySubstateIdentifier>()\n },\n cacheEntriesUpserted: {\n reducer(draft, action: PayloadAction<ProcessedQueryUpsertEntry[], string, {\n RTK_autoBatch: boolean;\n requestId: string;\n timestamp: number;\n }>) {\n for (const entry of action.payload) {\n const {\n queryDescription: arg,\n value\n } = entry;\n writePendingCacheEntry(draft, arg, true, {\n arg,\n requestId: action.meta.requestId,\n startedTimeStamp: action.meta.timestamp\n });\n writeFulfilledCacheEntry(draft, {\n arg,\n requestId: action.meta.requestId,\n fulfilledTimeStamp: action.meta.timestamp,\n baseQueryMeta: {}\n }, value,\n // We know we're upserting here\n true);\n }\n },\n prepare: (payload: NormalizedQueryUpsertEntryPayload[]) => {\n const queryDescriptions: ProcessedQueryUpsertEntry[] = payload.map(entry => {\n const {\n endpointName,\n arg,\n value\n } = entry;\n const endpointDefinition = definitions[endpointName];\n const queryDescription: QueryThunkArg = {\n type: 'query',\n endpointName: endpointName,\n originalArgs: entry.arg,\n queryCacheKey: serializeQueryArgs({\n queryArgs: arg,\n endpointDefinition,\n endpointName\n })\n };\n return {\n queryDescription,\n value\n };\n });\n const result = {\n payload: queryDescriptions,\n meta: {\n [SHOULD_AUTOBATCH]: true,\n requestId: nanoid(),\n timestamp: Date.now()\n }\n };\n return result;\n }\n },\n queryResultPatched: {\n reducer(draft, {\n payload: {\n queryCacheKey,\n patches\n }\n }: PayloadAction<QuerySubstateIdentifier & {\n patches: readonly Patch[];\n }>) {\n updateQuerySubstateIfExists(draft, queryCacheKey, substate => {\n substate.data = applyPatches(substate.data as any, patches.concat());\n });\n },\n prepare: prepareAutoBatched<QuerySubstateIdentifier & {\n patches: readonly Patch[];\n }>()\n }\n },\n extraReducers(builder) {\n builder.addCase(queryThunk.pending, (draft, {\n meta,\n meta: {\n arg\n }\n }) => {\n const upserting = isUpsertQuery(arg);\n writePendingCacheEntry(draft, arg, upserting, meta);\n }).addCase(queryThunk.fulfilled, (draft, {\n meta,\n payload\n }) => {\n const upserting = isUpsertQuery(meta.arg);\n writeFulfilledCacheEntry(draft, meta, payload, upserting);\n }).addCase(queryThunk.rejected, (draft, {\n meta: {\n condition,\n arg,\n requestId\n },\n error,\n payload\n }) => {\n updateQuerySubstateIfExists(draft, arg.queryCacheKey, substate => {\n if (condition) {\n // request was aborted due to condition (another query already running)\n } else {\n // request failed\n if (substate.requestId !== requestId) return;\n substate.status = QueryStatus.rejected;\n substate.error = (payload ?? error) as any;\n }\n });\n }).addMatcher(hasRehydrationInfo, (draft, action) => {\n const {\n queries\n } = extractRehydrationInfo(action)!;\n for (const [key, entry] of Object.entries(queries)) {\n if (\n // do not rehydrate entries that were currently in flight.\n entry?.status === QueryStatus.fulfilled || entry?.status === QueryStatus.rejected) {\n draft[key] = entry;\n }\n }\n });\n }\n });\n const mutationSlice = createSlice({\n name: `${reducerPath}/mutations`,\n initialState: initialState as MutationState<any>,\n reducers: {\n removeMutationResult: {\n reducer(draft, {\n payload\n }: PayloadAction<MutationSubstateIdentifier>) {\n const cacheKey = getMutationCacheKey(payload);\n if (cacheKey in draft) {\n delete draft[cacheKey];\n }\n },\n prepare: prepareAutoBatched<MutationSubstateIdentifier>()\n }\n },\n extraReducers(builder) {\n builder.addCase(mutationThunk.pending, (draft, {\n meta,\n meta: {\n requestId,\n arg,\n startedTimeStamp\n }\n }) => {\n if (!arg.track) return;\n draft[getMutationCacheKey(meta)] = {\n requestId,\n status: QueryStatus.pending,\n endpointName: arg.endpointName,\n startedTimeStamp\n };\n }).addCase(mutationThunk.fulfilled, (draft, {\n payload,\n meta\n }) => {\n if (!meta.arg.track) return;\n updateMutationSubstateIfExists(draft, meta, substate => {\n if (substate.requestId !== meta.requestId) return;\n substate.status = QueryStatus.fulfilled;\n substate.data = payload;\n substate.fulfilledTimeStamp = meta.fulfilledTimeStamp;\n });\n }).addCase(mutationThunk.rejected, (draft, {\n payload,\n error,\n meta\n }) => {\n if (!meta.arg.track) return;\n updateMutationSubstateIfExists(draft, meta, substate => {\n if (substate.requestId !== meta.requestId) return;\n substate.status = QueryStatus.rejected;\n substate.error = (payload ?? error) as any;\n });\n }).addMatcher(hasRehydrationInfo, (draft, action) => {\n const {\n mutations\n } = extractRehydrationInfo(action)!;\n for (const [key, entry] of Object.entries(mutations)) {\n if (\n // do not rehydrate entries that were currently in flight.\n (entry?.status === QueryStatus.fulfilled || entry?.status === QueryStatus.rejected) &&\n // only rehydrate endpoints that were persisted using a `fixedCacheKey`\n key !== entry?.requestId) {\n draft[key] = entry;\n }\n }\n });\n }\n });\n const invalidationSlice = createSlice({\n name: `${reducerPath}/invalidation`,\n initialState: initialState as InvalidationState<string>,\n reducers: {\n updateProvidedBy: {\n reducer(draft, action: PayloadAction<{\n queryCacheKey: QueryCacheKey;\n providedTags: readonly FullTagDescription<string>[];\n }>) {\n const {\n queryCacheKey,\n providedTags\n } = action.payload;\n for (const tagTypeSubscriptions of Object.values(draft)) {\n for (const idSubscriptions of Object.values(tagTypeSubscriptions)) {\n const foundAt = idSubscriptions.indexOf(queryCacheKey);\n if (foundAt !== -1) {\n idSubscriptions.splice(foundAt, 1);\n }\n }\n }\n for (const {\n type,\n id\n } of providedTags) {\n const subscribedQueries = (draft[type] ??= {})[id || '__internal_without_id'] ??= [];\n const alreadySubscribed = subscribedQueries.includes(queryCacheKey);\n if (!alreadySubscribed) {\n subscribedQueries.push(queryCacheKey);\n }\n }\n },\n prepare: prepareAutoBatched<{\n queryCacheKey: QueryCacheKey;\n providedTags: readonly FullTagDescription<string>[];\n }>()\n }\n },\n extraReducers(builder) {\n builder.addCase(querySlice.actions.removeQueryResult, (draft, {\n payload: {\n queryCacheKey\n }\n }) => {\n for (const tagTypeSubscriptions of Object.values(draft)) {\n for (const idSubscriptions of Object.values(tagTypeSubscriptions)) {\n const foundAt = idSubscriptions.indexOf(queryCacheKey);\n if (foundAt !== -1) {\n idSubscriptions.splice(foundAt, 1);\n }\n }\n }\n }).addMatcher(hasRehydrationInfo, (draft, action) => {\n const {\n provided\n } = extractRehydrationInfo(action)!;\n for (const [type, incomingTags] of Object.entries(provided)) {\n for (const [id, cacheKeys] of Object.entries(incomingTags)) {\n const subscribedQueries = (draft[type] ??= {})[id || '__internal_without_id'] ??= [];\n for (const queryCacheKey of cacheKeys) {\n const alreadySubscribed = subscribedQueries.includes(queryCacheKey);\n if (!alreadySubscribed) {\n subscribedQueries.push(queryCacheKey);\n }\n }\n }\n }\n }).addMatcher(isAnyOf(isFulfilled(queryThunk), isRejectedWithValue(queryThunk)), (draft, action) => {\n const providedTags = calculateProvidedByThunk(action, 'providesTags', definitions, assertTagType);\n const {\n queryCacheKey\n } = action.meta.arg;\n invalidationSlice.caseReducers.updateProvidedBy(draft, invalidationSlice.actions.updateProvidedBy({\n queryCacheKey,\n providedTags\n }));\n });\n }\n });\n\n // Dummy slice to generate actions\n const subscriptionSlice = createSlice({\n name: `${reducerPath}/subscriptions`,\n initialState: initialState as SubscriptionState,\n reducers: {\n updateSubscriptionOptions(d, a: PayloadAction<{\n endpointName: string;\n requestId: string;\n options: Subscribers[number];\n } & QuerySubstateIdentifier>) {\n // Dummy\n },\n unsubscribeQueryResult(d, a: PayloadAction<{\n requestId: string;\n } & QuerySubstateIdentifier>) {\n // Dummy\n },\n internal_getRTKQSubscriptions() {}\n }\n });\n const internalSubscriptionsSlice = createSlice({\n name: `${reducerPath}/internalSubscriptions`,\n initialState: initialState as SubscriptionState,\n reducers: {\n subscriptionsUpdated: {\n reducer(state, action: PayloadAction<Patch[]>) {\n return applyPatches(state, action.payload);\n },\n prepare: prepareAutoBatched<Patch[]>()\n }\n }\n });\n const configSlice = createSlice({\n name: `${reducerPath}/config`,\n initialState: {\n online: isOnline(),\n focused: isDocumentVisible(),\n middlewareRegistered: false,\n ...config\n } as ConfigState<string>,\n reducers: {\n middlewareRegistered(state, {\n payload\n }: PayloadAction<string>) {\n state.middlewareRegistered = state.middlewareRegistered === 'conflict' || apiUid !== payload ? 'conflict' : true;\n }\n },\n extraReducers: builder => {\n builder.addCase(onOnline, state => {\n state.online = true;\n }).addCase(onOffline, state => {\n state.online = false;\n }).addCase(onFocus, state => {\n state.focused = true;\n }).addCase(onFocusLost, state => {\n state.focused = false;\n })\n // update the state to be a new object to be picked up as a \"state change\"\n // by redux-persist's `autoMergeLevel2`\n .addMatcher(hasRehydrationInfo, draft => ({\n ...draft\n }));\n }\n });\n const combinedReducer = combineReducers({\n queries: querySlice.reducer,\n mutations: mutationSlice.reducer,\n provided: invalidationSlice.reducer,\n subscriptions: internalSubscriptionsSlice.reducer,\n config: configSlice.reducer\n });\n const reducer: typeof combinedReducer = (state, action) => combinedReducer(resetApiState.match(action) ? undefined : state, action);\n const actions = {\n ...configSlice.actions,\n ...querySlice.actions,\n ...subscriptionSlice.actions,\n ...internalSubscriptionsSlice.actions,\n ...mutationSlice.actions,\n ...invalidationSlice.actions,\n resetApiState\n };\n return {\n reducer,\n actions\n };\n}\nexport type SliceActions = ReturnType<typeof buildSlice>['actions'];", "import type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { EndpointDefinition, EndpointDefinitions, InfiniteQueryArgFrom, InfiniteQueryDefinition, MutationDefinition, QueryArgFrom, QueryDefinition, ReducerPathFrom, TagDescription, TagTypesFrom } from '../endpointDefinitions';\nimport { expandTagDescription } from '../endpointDefinitions';\nimport { flatten, isNotNullish } from '../utils';\nimport type { InfiniteData, InfiniteQueryConfigOptions, InfiniteQuerySubState, MutationSubState, QueryCacheKey, QueryKeys, QueryState, QuerySubState, RequestStatusFlags, RootState as _RootState } from './apiState';\nimport { QueryStatus, getRequestStatusFlags } from './apiState';\nimport { getMutationCacheKey } from './buildSlice';\nimport type { createSelector as _createSelector } from './rtkImports';\nimport { createNextState } from './rtkImports';\nimport { getNextPageParam, getPreviousPageParam } from './buildThunks';\nexport type SkipToken = typeof skipToken;\n/**\n * Can be passed into `useQuery`, `useQueryState` or `useQuerySubscription`\n * instead of the query argument to get the same effect as if setting\n * `skip: true` in the query options.\n *\n * Useful for scenarios where a query should be skipped when `arg` is `undefined`\n * and TypeScript complains about it because `arg` is not allowed to be passed\n * in as `undefined`, such as\n *\n * ```ts\n * // codeblock-meta title=\"will error if the query argument is not allowed to be undefined\" no-transpile\n * useSomeQuery(arg, { skip: !!arg })\n * ```\n *\n * ```ts\n * // codeblock-meta title=\"using skipToken instead\" no-transpile\n * useSomeQuery(arg ?? skipToken)\n * ```\n *\n * If passed directly into a query or mutation selector, that selector will always\n * return an uninitialized state.\n */\nexport const skipToken = /* @__PURE__ */Symbol.for('RTKQ/skipToken');\nexport type BuildSelectorsApiEndpointQuery<Definition extends QueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n select: QueryResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\nexport type BuildSelectorsApiEndpointInfiniteQuery<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n select: InfiniteQueryResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\nexport type BuildSelectorsApiEndpointMutation<Definition extends MutationDefinition<any, any, any, any, any>, Definitions extends EndpointDefinitions> = {\n select: MutationResultSelectorFactory<Definition, _RootState<Definitions, TagTypesFrom<Definition>, ReducerPathFrom<Definition>>>;\n};\ntype QueryResultSelectorFactory<Definition extends QueryDefinition<any, any, any, any>, RootState> = (queryArg: QueryArgFrom<Definition> | SkipToken) => (state: RootState) => QueryResultSelectorResult<Definition>;\nexport type QueryResultSelectorResult<Definition extends QueryDefinition<any, any, any, any>> = QuerySubState<Definition> & RequestStatusFlags;\ntype InfiniteQueryResultSelectorFactory<Definition extends InfiniteQueryDefinition<any, any, any, any, any>, RootState> = (queryArg: InfiniteQueryArgFrom<Definition> | SkipToken) => (state: RootState) => InfiniteQueryResultSelectorResult<Definition>;\nexport type InfiniteQueryResultFlags = {\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n isFetchingNextPage: boolean;\n isFetchingPreviousPage: boolean;\n isFetchNextPageError: boolean;\n isFetchPreviousPageError: boolean;\n};\nexport type InfiniteQueryResultSelectorResult<Definition extends InfiniteQueryDefinition<any, any, any, any, any>> = InfiniteQuerySubState<Definition> & RequestStatusFlags & InfiniteQueryResultFlags;\ntype MutationResultSelectorFactory<Definition extends MutationDefinition<any, any, any, any>, RootState> = (requestId: string | {\n requestId: string | undefined;\n fixedCacheKey: string | undefined;\n} | SkipToken) => (state: RootState) => MutationResultSelectorResult<Definition>;\nexport type MutationResultSelectorResult<Definition extends MutationDefinition<any, any, any, any>> = MutationSubState<Definition> & RequestStatusFlags;\nconst initialSubState: QuerySubState<any> = {\n status: QueryStatus.uninitialized as const\n};\n\n// abuse immer to freeze default states\nconst defaultQuerySubState = /* @__PURE__ */createNextState(initialSubState, () => {});\nconst defaultMutationSubState = /* @__PURE__ */createNextState(initialSubState as MutationSubState<any>, () => {});\nexport type AllSelectors = ReturnType<typeof buildSelectors>;\nexport function buildSelectors<Definitions extends EndpointDefinitions, ReducerPath extends string>({\n serializeQueryArgs,\n reducerPath,\n createSelector\n}: {\n serializeQueryArgs: InternalSerializeQueryArgs;\n reducerPath: ReducerPath;\n createSelector: typeof _createSelector;\n}) {\n type RootState = _RootState<Definitions, string, string>;\n const selectSkippedQuery = (state: RootState) => defaultQuerySubState;\n const selectSkippedMutation = (state: RootState) => defaultMutationSubState;\n return {\n buildQuerySelector,\n buildInfiniteQuerySelector,\n buildMutationSelector,\n selectInvalidatedBy,\n selectCachedArgsForQuery,\n selectApiState,\n selectQueries,\n selectMutations,\n selectQueryEntry,\n selectConfig\n };\n function withRequestFlags<T extends {\n status: QueryStatus;\n }>(substate: T): T & RequestStatusFlags {\n return {\n ...substate,\n ...getRequestStatusFlags(substate.status)\n };\n }\n function selectApiState(rootState: RootState) {\n const state = rootState[reducerPath];\n if (process.env.NODE_ENV !== 'production') {\n if (!state) {\n if ((selectApiState as any).triggered) return state;\n (selectApiState as any).triggered = true;\n console.error(`Error: No data found at \\`state.${reducerPath}\\`. Did you forget to add the reducer to the store?`);\n }\n }\n return state;\n }\n function selectQueries(rootState: RootState) {\n return selectApiState(rootState)?.queries;\n }\n function selectQueryEntry(rootState: RootState, cacheKey: QueryCacheKey) {\n return selectQueries(rootState)?.[cacheKey];\n }\n function selectMutations(rootState: RootState) {\n return selectApiState(rootState)?.mutations;\n }\n function selectConfig(rootState: RootState) {\n return selectApiState(rootState)?.config;\n }\n function buildAnyQuerySelector(endpointName: string, endpointDefinition: EndpointDefinition<any, any, any, any>, combiner: <T extends {\n status: QueryStatus;\n }>(substate: T) => T & RequestStatusFlags) {\n return (queryArgs: any) => {\n // Avoid calling serializeQueryArgs if the arg is skipToken\n if (queryArgs === skipToken) {\n return createSelector(selectSkippedQuery, combiner);\n }\n const serializedArgs = serializeQueryArgs({\n queryArgs,\n endpointDefinition,\n endpointName\n });\n const selectQuerySubstate = (state: RootState) => selectQueryEntry(state, serializedArgs) ?? defaultQuerySubState;\n return createSelector(selectQuerySubstate, combiner);\n };\n }\n function buildQuerySelector(endpointName: string, endpointDefinition: QueryDefinition<any, any, any, any>) {\n return buildAnyQuerySelector(endpointName, endpointDefinition, withRequestFlags) as QueryResultSelectorFactory<any, RootState>;\n }\n function buildInfiniteQuerySelector(endpointName: string, endpointDefinition: InfiniteQueryDefinition<any, any, any, any, any>) {\n const {\n infiniteQueryOptions\n } = endpointDefinition;\n function withInfiniteQueryResultFlags<T extends {\n status: QueryStatus;\n }>(substate: T): T & RequestStatusFlags & InfiniteQueryResultFlags {\n const stateWithRequestFlags = {\n ...(substate as InfiniteQuerySubState<any>),\n ...getRequestStatusFlags(substate.status)\n };\n const {\n isLoading,\n isError,\n direction\n } = stateWithRequestFlags;\n const isForward = direction === 'forward';\n const isBackward = direction === 'backward';\n return {\n ...stateWithRequestFlags,\n hasNextPage: getHasNextPage(infiniteQueryOptions, stateWithRequestFlags.data),\n hasPreviousPage: getHasPreviousPage(infiniteQueryOptions, stateWithRequestFlags.data),\n isFetchingNextPage: isLoading && isForward,\n isFetchingPreviousPage: isLoading && isBackward,\n isFetchNextPageError: isError && isForward,\n isFetchPreviousPageError: isError && isBackward\n };\n }\n return buildAnyQuerySelector(endpointName, endpointDefinition, withInfiniteQueryResultFlags) as unknown as InfiniteQueryResultSelectorFactory<any, RootState>;\n }\n function buildMutationSelector() {\n return (id => {\n let mutationId: string | typeof skipToken;\n if (typeof id === 'object') {\n mutationId = getMutationCacheKey(id) ?? skipToken;\n } else {\n mutationId = id;\n }\n const selectMutationSubstate = (state: RootState) => selectApiState(state)?.mutations?.[mutationId as string] ?? defaultMutationSubState;\n const finalSelectMutationSubstate = mutationId === skipToken ? selectSkippedMutation : selectMutationSubstate;\n return createSelector(finalSelectMutationSubstate, withRequestFlags);\n }) as MutationResultSelectorFactory<any, RootState>;\n }\n function selectInvalidatedBy(state: RootState, tags: ReadonlyArray<TagDescription<string> | null | undefined>): Array<{\n endpointName: string;\n originalArgs: any;\n queryCacheKey: QueryCacheKey;\n }> {\n const apiState = state[reducerPath];\n const toInvalidate = new Set<QueryCacheKey>();\n for (const tag of tags.filter(isNotNullish).map(expandTagDescription)) {\n const provided = apiState.provided[tag.type];\n if (!provided) {\n continue;\n }\n let invalidateSubscriptions = (tag.id !== undefined ?\n // id given: invalidate all queries that provide this type & id\n provided[tag.id] :\n // no id: invalidate all queries that provide this type\n flatten(Object.values(provided))) ?? [];\n for (const invalidate of invalidateSubscriptions) {\n toInvalidate.add(invalidate);\n }\n }\n return flatten(Array.from(toInvalidate.values()).map(queryCacheKey => {\n const querySubState = apiState.queries[queryCacheKey];\n return querySubState ? [{\n queryCacheKey,\n endpointName: querySubState.endpointName!,\n originalArgs: querySubState.originalArgs\n }] : [];\n }));\n }\n function selectCachedArgsForQuery<QueryName extends QueryKeys<Definitions>>(state: RootState, queryName: QueryName): Array<QueryArgFrom<Definitions[QueryName]>> {\n return Object.values(selectQueries(state) as QueryState<any>).filter((entry): entry is Exclude<QuerySubState<Definitions[QueryName]>, {\n status: QueryStatus.uninitialized;\n }> => entry?.endpointName === queryName && entry.status !== QueryStatus.uninitialized).map(entry => entry.originalArgs);\n }\n function getHasNextPage(options: InfiniteQueryConfigOptions<any, any>, data?: InfiniteData<unknown, unknown>): boolean {\n if (!data) return false;\n return getNextPageParam(options, data) != null;\n }\n function getHasPreviousPage(options: InfiniteQueryConfigOptions<any, any>, data?: InfiniteData<unknown, unknown>): boolean {\n if (!data || !options.getPreviousPageParam) return false;\n return getPreviousPageParam(options, data) != null;\n }\n}", "import { formatProdErrorMessage as _formatProdErrorMessage, formatProdErrorMessage as _formatProdErrorMessage2, formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport type { Api, ApiContext, Module, ModuleName } from './apiTypes';\nimport type { CombinedState } from './core/apiState';\nimport type { BaseQueryArg, BaseQueryFn } from './baseQueryTypes';\nimport type { SerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport { defaultSerializeQueryArgs } from './defaultSerializeQueryArgs';\nimport type { EndpointBuilder, EndpointDefinitions } from './endpointDefinitions';\nimport { DefinitionType, isInfiniteQueryDefinition, isQueryDefinition } from './endpointDefinitions';\nimport { nanoid } from './core/rtkImports';\nimport type { UnknownAction } from '@reduxjs/toolkit';\nimport type { NoInfer } from './tsHelpers';\nimport { weakMapMemoize } from 'reselect';\nexport interface CreateApiOptions<BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never> {\n /**\n * The base query used by each endpoint if no `queryFn` option is specified. RTK Query exports a utility called [fetchBaseQuery](./fetchBaseQuery) as a lightweight wrapper around `fetch` for common use-cases. See [Customizing Queries](../../rtk-query/usage/customizing-queries) if `fetchBaseQuery` does not handle your requirements.\n *\n * @example\n *\n * ```ts\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n *\n * const api = createApi({\n * // highlight-start\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n * // highlight-end\n * endpoints: (build) => ({\n * // ...endpoints\n * }),\n * })\n * ```\n */\n baseQuery: BaseQuery;\n /**\n * An array of string tag type names. Specifying tag types is optional, but you should define them so that they can be used for caching and invalidation. When defining a tag type, you will be able to [provide](../../rtk-query/usage/automated-refetching#providing-tags) them with `providesTags` and [invalidate](../../rtk-query/usage/automated-refetching#invalidating-tags) them with `invalidatesTags` when configuring [endpoints](#endpoints).\n *\n * @example\n *\n * ```ts\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n *\n * const api = createApi({\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n * // highlight-start\n * tagTypes: ['Post', 'User'],\n * // highlight-end\n * endpoints: (build) => ({\n * // ...endpoints\n * }),\n * })\n * ```\n */\n tagTypes?: readonly TagTypes[];\n /**\n * The `reducerPath` is a _unique_ key that your service will be mounted to in your store. If you call `createApi` more than once in your application, you will need to provide a unique value each time. Defaults to `'api'`.\n *\n * @example\n *\n * ```ts\n * // codeblock-meta title=\"apis.js\"\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query';\n *\n * const apiOne = createApi({\n * // highlight-start\n * reducerPath: 'apiOne',\n * // highlight-end\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n * endpoints: (builder) => ({\n * // ...endpoints\n * }),\n * });\n *\n * const apiTwo = createApi({\n * // highlight-start\n * reducerPath: 'apiTwo',\n * // highlight-end\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n * endpoints: (builder) => ({\n * // ...endpoints\n * }),\n * });\n * ```\n */\n reducerPath?: ReducerPath;\n /**\n * Accepts a custom function if you have a need to change the creation of cache keys for any reason.\n */\n serializeQueryArgs?: SerializeQueryArgs<unknown>;\n /**\n * Endpoints are a set of operations that you want to perform against your server. You define them as an object using the builder syntax. There are three endpoint types: [`query`](../../rtk-query/usage/queries), [`infiniteQuery`](../../rtk-query/usage/infinite-queries) and [`mutation`](../../rtk-query/usage/mutations).\n */\n endpoints(build: EndpointBuilder<BaseQuery, TagTypes, ReducerPath>): Definitions;\n /**\n * Defaults to `60` _(this value is in seconds)_. This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.\n *\n * ```ts\n * // codeblock-meta title=\"keepUnusedDataFor example\"\n *\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n * interface Post {\n * id: number\n * name: string\n * }\n * type PostsResponse = Post[]\n *\n * const api = createApi({\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n * endpoints: (build) => ({\n * getPosts: build.query<PostsResponse, void>({\n * query: () => 'posts',\n * // highlight-start\n * keepUnusedDataFor: 5\n * // highlight-end\n * })\n * })\n * })\n * ```\n */\n keepUnusedDataFor?: number;\n /**\n * Defaults to `false`. This setting allows you to control whether if a cached result is already available RTK Query will only serve a cached result, or if it should `refetch` when set to `true` or if an adequate amount of time has passed since the last successful query result.\n * - `false` - Will not cause a query to be performed _unless_ it does not exist yet.\n * - `true` - Will always refetch when a new subscriber to a query is added. Behaves the same as calling the `refetch` callback or passing `forceRefetch: true` in the action creator.\n * - `number` - **Value is in seconds**. If a number is provided and there is an existing query in the cache, it will compare the current time vs the last fulfilled timestamp, and only refetch if enough time has elapsed.\n *\n * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n */\n refetchOnMountOrArgChange?: boolean | number;\n /**\n * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after the application window regains focus.\n *\n * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n *\n * Note: requires [`setupListeners`](./setupListeners) to have been called.\n */\n refetchOnFocus?: boolean;\n /**\n * Defaults to `false`. This setting allows you to control whether RTK Query will try to refetch all subscribed queries after regaining a network connection.\n *\n * If you specify this option alongside `skip: true`, this **will not be evaluated** until `skip` is false.\n *\n * Note: requires [`setupListeners`](./setupListeners) to have been called.\n */\n refetchOnReconnect?: boolean;\n /**\n * Defaults to `'delayed'`. This setting allows you to control when tags are invalidated after a mutation.\n *\n * - `'immediately'`: Queries are invalidated instantly after the mutation finished, even if they are running.\n * If the query provides tags that were invalidated while it ran, it won't be re-fetched.\n * - `'delayed'`: Invalidation only happens after all queries and mutations are settled.\n * This ensures that queries are always invalidated correctly and automatically \"batches\" invalidations of concurrent mutations.\n * Note that if you constantly have some queries (or mutations) running, this can delay tag invalidations indefinitely.\n */\n invalidationBehavior?: 'delayed' | 'immediately';\n /**\n * A function that is passed every dispatched action. If this returns something other than `undefined`,\n * that return value will be used to rehydrate fulfilled & errored queries.\n *\n * @example\n *\n * ```ts\n * // codeblock-meta title=\"next-redux-wrapper rehydration example\"\n * import type { Action, PayloadAction } from '@reduxjs/toolkit'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'\n * import { HYDRATE } from 'next-redux-wrapper'\n *\n * type RootState = any; // normally inferred from state\n *\n * function isHydrateAction(action: Action): action is PayloadAction<RootState> {\n * return action.type === HYDRATE\n * }\n *\n * export const api = createApi({\n * baseQuery: fetchBaseQuery({ baseUrl: '/' }),\n * // highlight-start\n * extractRehydrationInfo(action, { reducerPath }): any {\n * if (isHydrateAction(action)) {\n * return action.payload[reducerPath]\n * }\n * },\n * // highlight-end\n * endpoints: (build) => ({\n * // omitted\n * }),\n * })\n * ```\n */\n extractRehydrationInfo?: (action: UnknownAction, {\n reducerPath\n }: {\n reducerPath: ReducerPath;\n }) => undefined | CombinedState<NoInfer<Definitions>, NoInfer<TagTypes>, NoInfer<ReducerPath>>;\n}\nexport type CreateApi<Modules extends ModuleName> = {\n /**\n * Creates a service to use in your application. Contains only the basic redux logic (the core module).\n *\n * @link https://rtk-query-docs.netlify.app/api/createApi\n */\n <BaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string = 'api', TagTypes extends string = never>(options: CreateApiOptions<BaseQuery, Definitions, ReducerPath, TagTypes>): Api<BaseQuery, Definitions, ReducerPath, TagTypes, Modules>;\n};\n\n/**\n * Builds a `createApi` method based on the provided `modules`.\n *\n * @link https://rtk-query-docs.netlify.app/concepts/customizing-create-api\n *\n * @example\n * ```ts\n * const MyContext = React.createContext<ReactReduxContextValue | null>(null);\n * const customCreateApi = buildCreateApi(\n * coreModule(),\n * reactHooksModule({\n * hooks: {\n * useDispatch: createDispatchHook(MyContext),\n * useSelector: createSelectorHook(MyContext),\n * useStore: createStoreHook(MyContext)\n * }\n * })\n * );\n * ```\n *\n * @param modules - A variable number of modules that customize how the `createApi` method handles endpoints\n * @returns A `createApi` method using the provided `modules`.\n */\nexport function buildCreateApi<Modules extends [Module<any>, ...Module<any>[]]>(...modules: Modules): CreateApi<Modules[number]['name']> {\n return function baseCreateApi(options) {\n const extractRehydrationInfo = weakMapMemoize((action: UnknownAction) => options.extractRehydrationInfo?.(action, {\n reducerPath: (options.reducerPath ?? 'api') as any\n }));\n const optionsWithDefaults: CreateApiOptions<any, any, any, any> = {\n reducerPath: 'api',\n keepUnusedDataFor: 60,\n refetchOnMountOrArgChange: false,\n refetchOnFocus: false,\n refetchOnReconnect: false,\n invalidationBehavior: 'delayed',\n ...options,\n extractRehydrationInfo,\n serializeQueryArgs(queryArgsApi) {\n let finalSerializeQueryArgs = defaultSerializeQueryArgs;\n if ('serializeQueryArgs' in queryArgsApi.endpointDefinition) {\n const endpointSQA = queryArgsApi.endpointDefinition.serializeQueryArgs!;\n finalSerializeQueryArgs = queryArgsApi => {\n const initialResult = endpointSQA(queryArgsApi);\n if (typeof initialResult === 'string') {\n // If the user function returned a string, use it as-is\n return initialResult;\n } else {\n // Assume they returned an object (such as a subset of the original\n // query args) or a primitive, and serialize it ourselves\n return defaultSerializeQueryArgs({\n ...queryArgsApi,\n queryArgs: initialResult\n });\n }\n };\n } else if (options.serializeQueryArgs) {\n finalSerializeQueryArgs = options.serializeQueryArgs;\n }\n return finalSerializeQueryArgs(queryArgsApi);\n },\n tagTypes: [...(options.tagTypes || [])]\n };\n const context: ApiContext<EndpointDefinitions> = {\n endpointDefinitions: {},\n batch(fn) {\n // placeholder \"batch\" method to be overridden by plugins, for example with React.unstable_batchedUpdate\n fn();\n },\n apiUid: nanoid(),\n extractRehydrationInfo,\n hasRehydrationInfo: weakMapMemoize(action => extractRehydrationInfo(action) != null)\n };\n const api = {\n injectEndpoints,\n enhanceEndpoints({\n addTagTypes,\n endpoints\n }) {\n if (addTagTypes) {\n for (const eT of addTagTypes) {\n if (!optionsWithDefaults.tagTypes!.includes(eT as any)) {\n ;\n (optionsWithDefaults.tagTypes as any[]).push(eT);\n }\n }\n }\n if (endpoints) {\n for (const [endpointName, partialDefinition] of Object.entries(endpoints)) {\n if (typeof partialDefinition === 'function') {\n partialDefinition(context.endpointDefinitions[endpointName]);\n } else {\n Object.assign(context.endpointDefinitions[endpointName] || {}, partialDefinition);\n }\n }\n }\n return api;\n }\n } as Api<BaseQueryFn, {}, string, string, Modules[number]['name']>;\n const initializedModules = modules.map(m => m.init(api as any, optionsWithDefaults as any, context));\n function injectEndpoints(inject: Parameters<typeof api.injectEndpoints>[0]) {\n const evaluatedEndpoints = inject.endpoints({\n query: x => ({\n ...x,\n type: DefinitionType.query\n }) as any,\n mutation: x => ({\n ...x,\n type: DefinitionType.mutation\n }) as any,\n infiniteQuery: x => ({\n ...x,\n type: DefinitionType.infinitequery\n }) as any\n });\n for (const [endpointName, definition] of Object.entries(evaluatedEndpoints)) {\n if (inject.overrideExisting !== true && endpointName in context.endpointDefinitions) {\n if (inject.overrideExisting === 'throw') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(39) : `called \\`injectEndpoints\\` to override already-existing endpointName ${endpointName} without specifying \\`overrideExisting: true\\``);\n } else if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n console.error(`called \\`injectEndpoints\\` to override already-existing endpointName ${endpointName} without specifying \\`overrideExisting: true\\``);\n }\n continue;\n }\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n if (isInfiniteQueryDefinition(definition)) {\n const {\n infiniteQueryOptions\n } = definition;\n const {\n maxPages,\n getPreviousPageParam\n } = infiniteQueryOptions;\n if (typeof maxPages === 'number') {\n if (maxPages < 1) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(40) : `maxPages for endpoint '${endpointName}' must be a number greater than 0`);\n }\n if (typeof getPreviousPageParam !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(41) : `getPreviousPageParam for endpoint '${endpointName}' must be a function if maxPages is used`);\n }\n }\n }\n }\n context.endpointDefinitions[endpointName] = definition;\n for (const m of initializedModules) {\n m.injectEndpoint(endpointName, definition);\n }\n }\n return api as any;\n }\n return api.injectEndpoints({\n endpoints: options.endpoints as any\n });\n };\n}", "import type { QueryCacheKey } from './core/apiState';\nimport type { EndpointDefinition } from './endpointDefinitions';\nimport { isPlainObject } from './core/rtkImports';\nconst cache: WeakMap<any, string> | undefined = WeakMap ? new WeakMap() : undefined;\nexport const defaultSerializeQueryArgs: SerializeQueryArgs<any> = ({\n endpointName,\n queryArgs\n}) => {\n let serialized = '';\n const cached = cache?.get(queryArgs);\n if (typeof cached === 'string') {\n serialized = cached;\n } else {\n const stringified = JSON.stringify(queryArgs, (key, value) => {\n // Handle bigints\n value = typeof value === 'bigint' ? {\n $bigint: value.toString()\n } : value;\n // Sort the object keys before stringifying, to prevent useQuery({ a: 1, b: 2 }) having a different cache key than useQuery({ b: 2, a: 1 })\n value = isPlainObject(value) ? Object.keys(value).sort().reduce<any>((acc, key) => {\n acc[key] = (value as any)[key];\n return acc;\n }, {}) : value;\n return value;\n });\n if (isPlainObject(queryArgs)) {\n cache?.set(queryArgs, stringified);\n }\n serialized = stringified;\n }\n return `${endpointName}(${serialized})`;\n};\nexport type SerializeQueryArgs<QueryArgs, ReturnType = string> = (_: {\n queryArgs: QueryArgs;\n endpointDefinition: EndpointDefinition<any, any, any, any>;\n endpointName: string;\n}) => ReturnType;\nexport type InternalSerializeQueryArgs = (_: {\n queryArgs: any;\n endpointDefinition: EndpointDefinition<any, any, any, any>;\n endpointName: string;\n}) => QueryCacheKey;", "import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { BaseQueryFn } from './baseQueryTypes';\nexport const _NEVER = /* @__PURE__ */Symbol();\nexport type NEVER = typeof _NEVER;\n\n/**\n * Creates a \"fake\" baseQuery to be used if your api *only* uses the `queryFn` definition syntax.\n * This also allows you to specify a specific error type to be shared by all your `queryFn` definitions.\n */\nexport function fakeBaseQuery<ErrorType>(): BaseQueryFn<void, NEVER, ErrorType, {}> {\n return function () {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(33) : 'When using `fakeBaseQuery`, all queries & mutations must use the `queryFn` definition syntax.');\n };\n}", "/**\n * Note: this file should import all other files for type discovery and declaration merging\n */\nimport type { ActionCreatorWithPayload, Middleware, Reducer, ThunkAction, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport { enablePatches } from 'immer';\nimport type { Api, Module } from '../apiTypes';\nimport type { BaseQueryFn } from '../baseQueryTypes';\nimport type { InternalSerializeQueryArgs } from '../defaultSerializeQueryArgs';\nimport type { AssertTagTypes, EndpointDefinitions, InfiniteQueryDefinition, MutationDefinition, QueryArgFrom, QueryDefinition, TagDescription } from '../endpointDefinitions';\nimport { isInfiniteQueryDefinition, isMutationDefinition, isQueryDefinition } from '../endpointDefinitions';\nimport { assertCast, safeAssign } from '../tsHelpers';\nimport type { CombinedState, MutationKeys, QueryKeys, RootState } from './apiState';\nimport type { BuildInitiateApiEndpointMutation, BuildInitiateApiEndpointQuery, MutationActionCreatorResult, QueryActionCreatorResult, InfiniteQueryActionCreatorResult, BuildInitiateApiEndpointInfiniteQuery } from './buildInitiate';\nimport { buildInitiate } from './buildInitiate';\nimport type { ReferenceCacheCollection, ReferenceCacheLifecycle, ReferenceQueryLifecycle } from './buildMiddleware';\nimport { buildMiddleware } from './buildMiddleware';\nimport type { BuildSelectorsApiEndpointInfiniteQuery, BuildSelectorsApiEndpointMutation, BuildSelectorsApiEndpointQuery } from './buildSelectors';\nimport { buildSelectors } from './buildSelectors';\nimport type { SliceActions, UpsertEntries } from './buildSlice';\nimport { buildSlice } from './buildSlice';\nimport type { AllQueryKeys, BuildThunksApiEndpointInfiniteQuery, BuildThunksApiEndpointMutation, BuildThunksApiEndpointQuery, PatchQueryDataThunk, QueryArgFromAnyQueryDefinition, UpdateQueryDataThunk, UpsertQueryDataThunk } from './buildThunks';\nimport { buildThunks } from './buildThunks';\nimport { createSelector as _createSelector } from './rtkImports';\nimport { onFocus, onFocusLost, onOffline, onOnline } from './setupListeners';\n\n/**\n * `ifOlderThan` - (default: `false` | `number`) - _number is value in seconds_\n * - If specified, it will only run the query if the difference between `new Date()` and the last `fulfilledTimeStamp` is greater than the given value\n *\n * @overloadSummary\n * `force`\n * - If `force: true`, it will ignore the `ifOlderThan` value if it is set and the query will be run even if it exists in the cache.\n */\nexport type PrefetchOptions = {\n ifOlderThan?: false | number;\n} | {\n force?: boolean;\n};\nexport const coreModuleName = /* @__PURE__ */Symbol();\nexport type CoreModule = typeof coreModuleName | ReferenceCacheLifecycle | ReferenceQueryLifecycle | ReferenceCacheCollection;\nexport type ThunkWithReturnValue<T> = ThunkAction<T, any, any, UnknownAction>;\nexport interface ApiModules<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nBaseQuery extends BaseQueryFn, Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string> {\n [coreModuleName]: {\n /**\n * This api's reducer should be mounted at `store[api.reducerPath]`.\n *\n * @example\n * ```ts\n * configureStore({\n * reducer: {\n * [api.reducerPath]: api.reducer,\n * },\n * middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n * })\n * ```\n */\n reducerPath: ReducerPath;\n /**\n * Internal actions not part of the public API. Note: These are subject to change at any given time.\n */\n internalActions: InternalActions;\n /**\n * A standard redux reducer that enables core functionality. Make sure it's included in your store.\n *\n * @example\n * ```ts\n * configureStore({\n * reducer: {\n * [api.reducerPath]: api.reducer,\n * },\n * middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n * })\n * ```\n */\n reducer: Reducer<CombinedState<Definitions, TagTypes, ReducerPath>, UnknownAction>;\n /**\n * This is a standard redux middleware and is responsible for things like polling, garbage collection and a handful of other things. Make sure it's included in your store.\n *\n * @example\n * ```ts\n * configureStore({\n * reducer: {\n * [api.reducerPath]: api.reducer,\n * },\n * middleware: (getDefaultMiddleware) => getDefaultMiddleware().concat(api.middleware),\n * })\n * ```\n */\n middleware: Middleware<{}, RootState<Definitions, string, ReducerPath>, ThunkDispatch<any, any, UnknownAction>>;\n /**\n * A collection of utility thunks for various situations.\n */\n util: {\n /**\n * A thunk that (if dispatched) will return a specific running query, identified\n * by `endpointName` and `arg`.\n * If that query is not running, dispatching the thunk will result in `undefined`.\n *\n * Can be used to await a specific query triggered in any way,\n * including via hook calls or manually dispatching `initiate` actions.\n *\n * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n */\n getRunningQueryThunk<EndpointName extends AllQueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFromAnyQueryDefinition<Definitions, EndpointName>): ThunkWithReturnValue<QueryActionCreatorResult<Definitions[EndpointName] & {\n type: 'query';\n }> | InfiniteQueryActionCreatorResult<Definitions[EndpointName] & {\n type: 'infinitequery';\n }> | undefined>;\n\n /**\n * A thunk that (if dispatched) will return a specific running mutation, identified\n * by `endpointName` and `fixedCacheKey` or `requestId`.\n * If that mutation is not running, dispatching the thunk will result in `undefined`.\n *\n * Can be used to await a specific mutation triggered in any way,\n * including via hook trigger functions or manually dispatching `initiate` actions.\n *\n * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n */\n getRunningMutationThunk<EndpointName extends MutationKeys<Definitions>>(endpointName: EndpointName, fixedCacheKeyOrRequestId: string): ThunkWithReturnValue<MutationActionCreatorResult<Definitions[EndpointName] & {\n type: 'mutation';\n }> | undefined>;\n\n /**\n * A thunk that (if dispatched) will return all running queries.\n *\n * Useful for SSR scenarios to await all running queries triggered in any way,\n * including via hook calls or manually dispatching `initiate` actions.\n *\n * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n */\n getRunningQueriesThunk(): ThunkWithReturnValue<Array<QueryActionCreatorResult<any> | InfiniteQueryActionCreatorResult<any>>>;\n\n /**\n * A thunk that (if dispatched) will return all running mutations.\n *\n * Useful for SSR scenarios to await all running mutations triggered in any way,\n * including via hook calls or manually dispatching `initiate` actions.\n *\n * See https://redux-toolkit.js.org/rtk-query/usage/server-side-rendering for details.\n */\n getRunningMutationsThunk(): ThunkWithReturnValue<Array<MutationActionCreatorResult<any>>>;\n\n /**\n * A Redux thunk that can be used to manually trigger pre-fetching of data.\n *\n * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a set of options used to determine if the data actually should be re-fetched based on cache staleness.\n *\n * React Hooks users will most likely never need to use this directly, as the `usePrefetch` hook will dispatch this thunk internally as needed when you call the prefetching function supplied by the hook.\n *\n * @example\n *\n * ```ts no-transpile\n * dispatch(api.util.prefetch('getPosts', undefined, { force: true }))\n * ```\n */\n prefetch<EndpointName extends QueryKeys<Definitions>>(endpointName: EndpointName, arg: QueryArgFrom<Definitions[EndpointName]>, options: PrefetchOptions): ThunkAction<void, any, any, UnknownAction>;\n /**\n * A Redux thunk action creator that, when dispatched, creates and applies a set of JSON diff/patch objects to the current state. This immediately updates the Redux state with those changes.\n *\n * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and an `updateRecipe` callback function. The callback receives an Immer-wrapped `draft` of the current state, and may modify the draft to match the expected results after the mutation completes successfully.\n *\n * The thunk executes _synchronously_, and returns an object containing `{patches: Patch[], inversePatches: Patch[], undo: () => void}`. The `patches` and `inversePatches` are generated using Immer's [`produceWithPatches` method](https://immerjs.github.io/immer/patches).\n *\n * This is typically used as the first step in implementing optimistic updates. The generated `inversePatches` can be used to revert the updates by calling `dispatch(patchQueryData(endpointName, arg, inversePatches))`. Alternatively, the `undo` method can be called directly to achieve the same effect.\n *\n * Note that the first two arguments (`endpointName` and `arg`) are used to determine which existing cache entry to update. If no existing cache entry is found, the `updateRecipe` callback will not run.\n *\n * @example\n *\n * ```ts\n * const patchCollection = dispatch(\n * api.util.updateQueryData('getPosts', undefined, (draftPosts) => {\n * draftPosts.push({ id: 1, name: 'Teddy' })\n * })\n * )\n * ```\n */\n updateQueryData: UpdateQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n\n /**\n * A Redux thunk action creator that, when dispatched, acts as an artificial API request to upsert a value into the cache.\n *\n * The thunk action creator accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and the data to upsert.\n *\n * If no cache entry for that cache key exists, a cache entry will be created and the data added. If a cache entry already exists, this will _overwrite_ the existing cache entry data.\n *\n * The thunk executes _asynchronously_, and returns a promise that resolves when the store has been updated.\n *\n * If dispatched while an actual request is in progress, both the upsert and request will be handled as soon as they resolve, resulting in a \"last result wins\" update behavior.\n *\n * @example\n *\n * ```ts\n * await dispatch(\n * api.util.upsertQueryData('getPost', {id: 1}, {id: 1, text: \"Hello!\"})\n * )\n * ```\n */\n upsertQueryData: UpsertQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n /**\n * A Redux thunk that applies a JSON diff/patch array to the cached data for a given query result. This immediately updates the Redux state with those changes.\n *\n * The thunk accepts three arguments: the name of the endpoint we are updating (such as `'getPost'`), the appropriate query arg values to construct the desired cache key, and a JSON diff/patch array as produced by Immer's `produceWithPatches`.\n *\n * This is typically used as the second step in implementing optimistic updates. If a request fails, the optimistically-applied changes can be reverted by dispatching `patchQueryData` with the `inversePatches` that were generated by `updateQueryData` earlier.\n *\n * In cases where it is desired to simply revert the previous changes, it may be preferable to call the `undo` method returned from dispatching `updateQueryData` instead.\n *\n * @example\n * ```ts\n * const patchCollection = dispatch(\n * api.util.updateQueryData('getPosts', undefined, (draftPosts) => {\n * draftPosts.push({ id: 1, name: 'Teddy' })\n * })\n * )\n *\n * // later\n * dispatch(\n * api.util.patchQueryData('getPosts', undefined, patchCollection.inversePatches)\n * )\n *\n * // or\n * patchCollection.undo()\n * ```\n */\n patchQueryData: PatchQueryDataThunk<Definitions, RootState<Definitions, string, ReducerPath>>;\n\n /**\n * A Redux action creator that can be dispatched to manually reset the api state completely. This will immediately remove all existing cache entries, and all queries will be considered 'uninitialized'.\n *\n * @example\n *\n * ```ts\n * dispatch(api.util.resetApiState())\n * ```\n */\n resetApiState: SliceActions['resetApiState'];\n upsertQueryEntries: UpsertEntries<Definitions>;\n\n /**\n * A Redux action creator that can be used to manually invalidate cache tags for [automated re-fetching](../../usage/automated-refetching.mdx).\n *\n * The action creator accepts one argument: the cache tags to be invalidated. It returns an action with those tags as a payload, and the corresponding `invalidateTags` action type for the api.\n *\n * Dispatching the result of this action creator will [invalidate](../../usage/automated-refetching.mdx#invalidating-cache-data) the given tags, causing queries to automatically re-fetch if they are subscribed to cache data that [provides](../../usage/automated-refetching.mdx#providing-cache-data) the corresponding tags.\n *\n * The array of tags provided to the action creator should be in one of the following formats, where `TagType` is equal to a string provided to the [`tagTypes`](../createApi.mdx#tagtypes) property of the api:\n *\n * - `[TagType]`\n * - `[{ type: TagType }]`\n * - `[{ type: TagType, id: number | string }]`\n *\n * @example\n *\n * ```ts\n * dispatch(api.util.invalidateTags(['Post']))\n * dispatch(api.util.invalidateTags([{ type: 'Post', id: 1 }]))\n * dispatch(\n * api.util.invalidateTags([\n * { type: 'Post', id: 1 },\n * { type: 'Post', id: 'LIST' },\n * ])\n * )\n * ```\n */\n invalidateTags: ActionCreatorWithPayload<Array<TagDescription<TagTypes> | null | undefined>, string>;\n\n /**\n * A function to select all `{ endpointName, originalArgs, queryCacheKey }` combinations that would be invalidated by a specific set of tags.\n *\n * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.\n */\n selectInvalidatedBy: (state: RootState<Definitions, string, ReducerPath>, tags: ReadonlyArray<TagDescription<TagTypes> | null | undefined>) => Array<{\n endpointName: string;\n originalArgs: any;\n queryCacheKey: string;\n }>;\n\n /**\n * A function to select all arguments currently cached for a given endpoint.\n *\n * Can be used for mutations that want to do optimistic updates instead of invalidating a set of tags, but don't know exactly what they need to update.\n */\n selectCachedArgsForQuery: <QueryName extends QueryKeys<Definitions>>(state: RootState<Definitions, string, ReducerPath>, queryName: QueryName) => Array<QueryArgFrom<Definitions[QueryName]>>;\n };\n /**\n * Endpoints based on the input endpoints provided to `createApi`, containing `select` and `action matchers`.\n */\n endpoints: { [K in keyof Definitions]: Definitions[K] extends QueryDefinition<any, any, any, any, any> ? ApiEndpointQuery<Definitions[K], Definitions> : Definitions[K] extends MutationDefinition<any, any, any, any, any> ? ApiEndpointMutation<Definitions[K], Definitions> : Definitions[K] extends InfiniteQueryDefinition<any, any, any, any, any> ? ApiEndpointInfiniteQuery<Definitions[K], Definitions> : never };\n };\n}\nexport interface ApiEndpointQuery<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends QueryDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointQuery<Definition>, BuildInitiateApiEndpointQuery<Definition>, BuildSelectorsApiEndpointQuery<Definition, Definitions> {\n name: string;\n /**\n * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n */\n Types: NonNullable<Definition['Types']>;\n}\nexport interface ApiEndpointInfiniteQuery<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends InfiniteQueryDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointInfiniteQuery<Definition>, BuildInitiateApiEndpointInfiniteQuery<Definition>, BuildSelectorsApiEndpointInfiniteQuery<Definition, Definitions> {\n name: string;\n /**\n * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n */\n Types: NonNullable<Definition['Types']>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport interface ApiEndpointMutation<\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinition extends MutationDefinition<any, any, any, any, any>,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nDefinitions extends EndpointDefinitions> extends BuildThunksApiEndpointMutation<Definition>, BuildInitiateApiEndpointMutation<Definition>, BuildSelectorsApiEndpointMutation<Definition, Definitions> {\n name: string;\n /**\n * All of these are `undefined` at runtime, purely to be used in TypeScript declarations!\n */\n Types: NonNullable<Definition['Types']>;\n}\nexport type ListenerActions = {\n /**\n * Will cause the RTK Query middleware to trigger any refetchOnReconnect-related behavior\n * @link https://rtk-query-docs.netlify.app/api/setupListeners\n */\n onOnline: typeof onOnline;\n onOffline: typeof onOffline;\n /**\n * Will cause the RTK Query middleware to trigger any refetchOnFocus-related behavior\n * @link https://rtk-query-docs.netlify.app/api/setupListeners\n */\n onFocus: typeof onFocus;\n onFocusLost: typeof onFocusLost;\n};\nexport type InternalActions = SliceActions & ListenerActions;\nexport interface CoreModuleOptions {\n /**\n * A selector creator (usually from `reselect`, or matching the same signature)\n */\n createSelector?: typeof _createSelector;\n}\n\n/**\n * Creates a module containing the basic redux logic for use with `buildCreateApi`.\n *\n * @example\n * ```ts\n * const createBaseApi = buildCreateApi(coreModule());\n * ```\n */\nexport const coreModule = ({\n createSelector = _createSelector\n}: CoreModuleOptions = {}): Module<CoreModule> => ({\n name: coreModuleName,\n init(api, {\n baseQuery,\n tagTypes,\n reducerPath,\n serializeQueryArgs,\n keepUnusedDataFor,\n refetchOnMountOrArgChange,\n refetchOnFocus,\n refetchOnReconnect,\n invalidationBehavior\n }, context) {\n enablePatches();\n assertCast<InternalSerializeQueryArgs>(serializeQueryArgs);\n const assertTagType: AssertTagTypes = tag => {\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n if (!tagTypes.includes(tag.type as any)) {\n console.error(`Tag type '${tag.type}' was used, but not specified in \\`tagTypes\\`!`);\n }\n }\n return tag;\n };\n Object.assign(api, {\n reducerPath,\n endpoints: {},\n internalActions: {\n onOnline,\n onOffline,\n onFocus,\n onFocusLost\n },\n util: {}\n });\n const selectors = buildSelectors({\n serializeQueryArgs: serializeQueryArgs as any,\n reducerPath,\n createSelector\n });\n const {\n selectInvalidatedBy,\n selectCachedArgsForQuery,\n buildQuerySelector,\n buildInfiniteQuerySelector,\n buildMutationSelector\n } = selectors;\n safeAssign(api.util, {\n selectInvalidatedBy,\n selectCachedArgsForQuery\n });\n const {\n queryThunk,\n infiniteQueryThunk,\n mutationThunk,\n patchQueryData,\n updateQueryData,\n upsertQueryData,\n prefetch,\n buildMatchThunkActions\n } = buildThunks({\n baseQuery,\n reducerPath,\n context,\n api,\n serializeQueryArgs,\n assertTagType,\n selectors\n });\n const {\n reducer,\n actions: sliceActions\n } = buildSlice({\n context,\n queryThunk,\n infiniteQueryThunk,\n mutationThunk,\n serializeQueryArgs,\n reducerPath,\n assertTagType,\n config: {\n refetchOnFocus,\n refetchOnReconnect,\n refetchOnMountOrArgChange,\n keepUnusedDataFor,\n reducerPath,\n invalidationBehavior\n }\n });\n safeAssign(api.util, {\n patchQueryData,\n updateQueryData,\n upsertQueryData,\n prefetch,\n resetApiState: sliceActions.resetApiState,\n upsertQueryEntries: sliceActions.cacheEntriesUpserted as any\n });\n safeAssign(api.internalActions, sliceActions);\n const {\n middleware,\n actions: middlewareActions\n } = buildMiddleware({\n reducerPath,\n context,\n queryThunk,\n mutationThunk,\n infiniteQueryThunk,\n api,\n assertTagType,\n selectors\n });\n safeAssign(api.util, middlewareActions);\n safeAssign(api, {\n reducer: reducer as any,\n middleware\n });\n const {\n buildInitiateQuery,\n buildInitiateInfiniteQuery,\n buildInitiateMutation,\n getRunningMutationThunk,\n getRunningMutationsThunk,\n getRunningQueriesThunk,\n getRunningQueryThunk\n } = buildInitiate({\n queryThunk,\n mutationThunk,\n infiniteQueryThunk,\n api,\n serializeQueryArgs: serializeQueryArgs as any,\n context\n });\n safeAssign(api.util, {\n getRunningMutationThunk,\n getRunningMutationsThunk,\n getRunningQueryThunk,\n getRunningQueriesThunk\n });\n return {\n name: coreModuleName,\n injectEndpoint(endpointName, definition) {\n const anyApi = api as any as Api<any, Record<string, any>, string, string, CoreModule>;\n const endpoint = anyApi.endpoints[endpointName] ??= {} as any;\n if (isQueryDefinition(definition)) {\n safeAssign(endpoint, {\n name: endpointName,\n select: buildQuerySelector(endpointName, definition),\n initiate: buildInitiateQuery(endpointName, definition)\n }, buildMatchThunkActions(queryThunk, endpointName));\n }\n if (isMutationDefinition(definition)) {\n safeAssign(endpoint, {\n name: endpointName,\n select: buildMutationSelector(),\n initiate: buildInitiateMutation(endpointName)\n }, buildMatchThunkActions(mutationThunk, endpointName));\n }\n if (isInfiniteQueryDefinition(definition)) {\n safeAssign(endpoint, {\n name: endpointName,\n select: buildInfiniteQuerySelector(endpointName, definition),\n initiate: buildInitiateInfiniteQuery(endpointName, definition)\n }, buildMatchThunkActions(queryThunk, endpointName));\n }\n }\n };\n }\n});", "export type Id<T> = { [K in keyof T]: T[K] } & {};\nexport type WithRequiredProp<T, K extends keyof T> = Omit<T, K> & Required<Pick<T, K>>;\nexport type Override<T1, T2> = T2 extends any ? Omit<T1, keyof T2> & T2 : never;\nexport function assertCast<T>(v: any): asserts v is T {}\nexport function safeAssign<T extends object>(target: T, ...args: Array<Partial<NoInfer<T>>>): T {\n return Object.assign(target, ...args);\n}\n\n/**\n * Convert a Union type `(A|B)` to an intersection type `(A&B)`\n */\nexport type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\nexport type NonOptionalKeys<T> = { [K in keyof T]-?: undefined extends T[K] ? never : K }[keyof T];\nexport type HasRequiredProps<T, True, False> = NonOptionalKeys<T> extends never ? False : True;\nexport type OptionalIfAllPropsOptional<T> = HasRequiredProps<T, T, T | never>;\nexport type NoInfer<T> = [T][T extends any ? 0 : never];\nexport type NonUndefined<T> = T extends undefined ? never : T;\nexport type UnwrapPromise<T> = T extends PromiseLike<infer V> ? V : T;\nexport type MaybePromise<T> = T | PromiseLike<T>;\nexport type OmitFromUnion<T, K extends keyof T> = T extends any ? Omit<T, K> : never;\nexport type IsAny<T, True, False = never> = true | false extends (T extends never ? true : false) ? True : False;\nexport type CastAny<T, CastTo> = IsAny<T, CastTo, T>;", "import type { InternalHandlerBuilder, SubscriptionSelectors } from './types';\nimport type { SubscriptionState } from '../apiState';\nimport { produceWithPatches } from 'immer';\nimport type { Action } from '@reduxjs/toolkit';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildBatchedActionsHandler: InternalHandlerBuilder<[actionShouldContinue: boolean, returnValue: SubscriptionSelectors | boolean]> = ({\n api,\n queryThunk,\n internalState\n}) => {\n const subscriptionsPrefix = `${api.reducerPath}/subscriptions`;\n let previousSubscriptions: SubscriptionState = null as unknown as SubscriptionState;\n let updateSyncTimer: ReturnType<typeof window.setTimeout> | null = null;\n const {\n updateSubscriptionOptions,\n unsubscribeQueryResult\n } = api.internalActions;\n\n // Actually intentionally mutate the subscriptions state used in the middleware\n // This is done to speed up perf when loading many components\n const actuallyMutateSubscriptions = (mutableState: SubscriptionState, action: Action) => {\n if (updateSubscriptionOptions.match(action)) {\n const {\n queryCacheKey,\n requestId,\n options\n } = action.payload;\n if (mutableState?.[queryCacheKey]?.[requestId]) {\n mutableState[queryCacheKey]![requestId] = options;\n }\n return true;\n }\n if (unsubscribeQueryResult.match(action)) {\n const {\n queryCacheKey,\n requestId\n } = action.payload;\n if (mutableState[queryCacheKey]) {\n delete mutableState[queryCacheKey]![requestId];\n }\n return true;\n }\n if (api.internalActions.removeQueryResult.match(action)) {\n delete mutableState[action.payload.queryCacheKey];\n return true;\n }\n if (queryThunk.pending.match(action)) {\n const {\n meta: {\n arg,\n requestId\n }\n } = action;\n const substate = mutableState[arg.queryCacheKey] ??= {};\n substate[`${requestId}_running`] = {};\n if (arg.subscribe) {\n substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};\n }\n return true;\n }\n let mutated = false;\n if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action)) {\n const state = mutableState[action.meta.arg.queryCacheKey] || {};\n const key = `${action.meta.requestId}_running`;\n mutated ||= !!state[key];\n delete state[key];\n }\n if (queryThunk.rejected.match(action)) {\n const {\n meta: {\n condition,\n arg,\n requestId\n }\n } = action;\n if (condition && arg.subscribe) {\n const substate = mutableState[arg.queryCacheKey] ??= {};\n substate[requestId] = arg.subscriptionOptions ?? substate[requestId] ?? {};\n mutated = true;\n }\n }\n return mutated;\n };\n const getSubscriptions = () => internalState.currentSubscriptions;\n const getSubscriptionCount = (queryCacheKey: string) => {\n const subscriptions = getSubscriptions();\n const subscriptionsForQueryArg = subscriptions[queryCacheKey] ?? {};\n return countObjectKeys(subscriptionsForQueryArg);\n };\n const isRequestSubscribed = (queryCacheKey: string, requestId: string) => {\n const subscriptions = getSubscriptions();\n return !!subscriptions?.[queryCacheKey]?.[requestId];\n };\n const subscriptionSelectors: SubscriptionSelectors = {\n getSubscriptions,\n getSubscriptionCount,\n isRequestSubscribed\n };\n return (action, mwApi): [actionShouldContinue: boolean, result: SubscriptionSelectors | boolean] => {\n if (!previousSubscriptions) {\n // Initialize it the first time this handler runs\n previousSubscriptions = JSON.parse(JSON.stringify(internalState.currentSubscriptions));\n }\n if (api.util.resetApiState.match(action)) {\n previousSubscriptions = internalState.currentSubscriptions = {};\n updateSyncTimer = null;\n return [true, false];\n }\n\n // Intercept requests by hooks to see if they're subscribed\n // We return the internal state reference so that hooks\n // can do their own checks to see if they're still active.\n // It's stupid and hacky, but it does cut down on some dispatch calls.\n if (api.internalActions.internal_getRTKQSubscriptions.match(action)) {\n return [false, subscriptionSelectors];\n }\n\n // Update subscription data based on this action\n const didMutate = actuallyMutateSubscriptions(internalState.currentSubscriptions, action);\n let actionShouldContinue = true;\n if (didMutate) {\n if (!updateSyncTimer) {\n // We only use the subscription state for the Redux DevTools at this point,\n // as the real data is kept here in the middleware.\n // Given that, we can throttle synchronizing this state significantly to\n // save on overall perf.\n // In 1.9, it was updated in a microtask, but now we do it at most every 500ms.\n updateSyncTimer = setTimeout(() => {\n // Deep clone the current subscription data\n const newSubscriptions: SubscriptionState = JSON.parse(JSON.stringify(internalState.currentSubscriptions));\n // Figure out a smaller diff between original and current\n const [, patches] = produceWithPatches(previousSubscriptions, () => newSubscriptions);\n\n // Sync the store state for visibility\n mwApi.next(api.internalActions.subscriptionsUpdated(patches));\n // Save the cloned state for later reference\n previousSubscriptions = newSubscriptions;\n updateSyncTimer = null;\n }, 500);\n }\n const isSubscriptionSliceAction = typeof action.type == 'string' && !!action.type.startsWith(subscriptionsPrefix);\n const isAdditionalSubscriptionAction = queryThunk.rejected.match(action) && action.meta.condition && !!action.meta.arg.subscribe;\n actionShouldContinue = !isSubscriptionSliceAction && !isAdditionalSubscriptionAction;\n }\n return [actionShouldContinue, false];\n };\n};", "import type { QueryDefinition } from '../../endpointDefinitions';\nimport type { ConfigState, QueryCacheKey } from '../apiState';\nimport { isAnyOf } from '../rtkImports';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, QueryStateMeta, SubMiddlewareApi, TimeoutId } from './types';\nexport type ReferenceCacheCollection = never;\nfunction isObjectEmpty(obj: Record<any, any>) {\n // Apparently a for..in loop is faster than `Object.keys()` here:\n // https://stackoverflow.com/a/59787784/62937\n for (const k in obj) {\n // If there is at least one key, it's not empty\n return false;\n }\n return true;\n}\nexport type CacheCollectionQueryExtraOptions = {\n /**\n * Overrides the api-wide definition of `keepUnusedDataFor` for this endpoint only. _(This value is in seconds.)_\n *\n * This is how long RTK Query will keep your data cached for **after** the last component unsubscribes. For example, if you query an endpoint, then unmount the component, then mount another component that makes the same request within the given time frame, the most recent value will be served from the cache.\n */\n keepUnusedDataFor?: number;\n};\n\n// Per https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value , browsers store\n// `setTimeout()` timer values in a 32-bit int. If we pass a value in that's larger than that,\n// it wraps and ends up executing immediately.\n// Our `keepUnusedDataFor` values are in seconds, so adjust the numbers here accordingly.\nexport const THIRTY_TWO_BIT_MAX_INT = 2_147_483_647;\nexport const THIRTY_TWO_BIT_MAX_TIMER_SECONDS = 2_147_483_647 / 1_000 - 1;\nexport const buildCacheCollectionHandler: InternalHandlerBuilder = ({\n reducerPath,\n api,\n queryThunk,\n context,\n internalState,\n selectors: {\n selectQueryEntry,\n selectConfig\n }\n}) => {\n const {\n removeQueryResult,\n unsubscribeQueryResult,\n cacheEntriesUpserted\n } = api.internalActions;\n const canTriggerUnsubscribe = isAnyOf(unsubscribeQueryResult.match, queryThunk.fulfilled, queryThunk.rejected, cacheEntriesUpserted.match);\n function anySubscriptionsRemainingForKey(queryCacheKey: string) {\n const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n return !!subscriptions && !isObjectEmpty(subscriptions);\n }\n const currentRemovalTimeouts: QueryStateMeta<TimeoutId> = {};\n const handler: ApiMiddlewareInternalHandler = (action, mwApi, internalState) => {\n const state = mwApi.getState();\n const config = selectConfig(state);\n if (canTriggerUnsubscribe(action)) {\n let queryCacheKeys: QueryCacheKey[];\n if (cacheEntriesUpserted.match(action)) {\n queryCacheKeys = action.payload.map(entry => entry.queryDescription.queryCacheKey);\n } else {\n const {\n queryCacheKey\n } = unsubscribeQueryResult.match(action) ? action.payload : action.meta.arg;\n queryCacheKeys = [queryCacheKey];\n }\n handleUnsubscribeMany(queryCacheKeys, mwApi, config);\n }\n if (api.util.resetApiState.match(action)) {\n for (const [key, timeout] of Object.entries(currentRemovalTimeouts)) {\n if (timeout) clearTimeout(timeout);\n delete currentRemovalTimeouts[key];\n }\n }\n if (context.hasRehydrationInfo(action)) {\n const {\n queries\n } = context.extractRehydrationInfo(action)!;\n // Gotcha:\n // If rehydrating before the endpoint has been injected,the global `keepUnusedDataFor`\n // will be used instead of the endpoint-specific one.\n handleUnsubscribeMany(Object.keys(queries) as QueryCacheKey[], mwApi, config);\n }\n };\n function handleUnsubscribeMany(cacheKeys: QueryCacheKey[], api: SubMiddlewareApi, config: ConfigState<string>) {\n const state = api.getState();\n for (const queryCacheKey of cacheKeys) {\n const entry = selectQueryEntry(state, queryCacheKey);\n handleUnsubscribe(queryCacheKey, entry?.endpointName, api, config);\n }\n }\n function handleUnsubscribe(queryCacheKey: QueryCacheKey, endpointName: string | undefined, api: SubMiddlewareApi, config: ConfigState<string>) {\n const endpointDefinition = context.endpointDefinitions[endpointName!] as QueryDefinition<any, any, any, any>;\n const keepUnusedDataFor = endpointDefinition?.keepUnusedDataFor ?? config.keepUnusedDataFor;\n if (keepUnusedDataFor === Infinity) {\n // Hey, user said keep this forever!\n return;\n }\n // Prevent `setTimeout` timers from overflowing a 32-bit internal int, by\n // clamping the max value to be at most 1000ms less than the 32-bit max.\n // Look, a 24.8-day keepalive ought to be enough for anybody, right? :)\n // Also avoid negative values too.\n const finalKeepUnusedDataFor = Math.max(0, Math.min(keepUnusedDataFor, THIRTY_TWO_BIT_MAX_TIMER_SECONDS));\n if (!anySubscriptionsRemainingForKey(queryCacheKey)) {\n const currentTimeout = currentRemovalTimeouts[queryCacheKey];\n if (currentTimeout) {\n clearTimeout(currentTimeout);\n }\n currentRemovalTimeouts[queryCacheKey] = setTimeout(() => {\n if (!anySubscriptionsRemainingForKey(queryCacheKey)) {\n api.dispatch(removeQueryResult({\n queryCacheKey\n }));\n }\n delete currentRemovalTimeouts![queryCacheKey];\n }, finalKeepUnusedDataFor * 1000);\n }\n }\n return handler;\n};", "import type { ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { BaseQueryFn, BaseQueryMeta } from '../../baseQueryTypes';\nimport type { BaseEndpointDefinition } from '../../endpointDefinitions';\nimport { DefinitionType } from '../../endpointDefinitions';\nimport type { QueryCacheKey, RootState } from '../apiState';\nimport type { MutationResultSelectorResult, QueryResultSelectorResult } from '../buildSelectors';\nimport { getMutationCacheKey } from '../buildSlice';\nimport type { PatchCollection, Recipe } from '../buildThunks';\nimport { isAsyncThunkAction, isFulfilled } from '../rtkImports';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, PromiseWithKnownReason, SubMiddlewareApi } from './types';\nexport type ReferenceCacheLifecycle = never;\nexport interface QueryBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends LifecycleApi<ReducerPath> {\n /**\n * Gets the current value of this cache entry.\n */\n getCacheEntry(): QueryResultSelectorResult<{\n type: DefinitionType.query;\n } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType>>;\n /**\n * Updates the current cache entry value.\n * For documentation see `api.util.updateQueryData`.\n */\n updateCachedData(updateRecipe: Recipe<ResultType>): PatchCollection;\n}\nexport type MutationBaseLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = LifecycleApi<ReducerPath> & {\n /**\n * Gets the current value of this cache entry.\n */\n getCacheEntry(): MutationResultSelectorResult<{\n type: DefinitionType.mutation;\n } & BaseEndpointDefinition<QueryArg, BaseQuery, ResultType>>;\n};\ntype LifecycleApi<ReducerPath extends string = string> = {\n /**\n * The dispatch method for the store\n */\n dispatch: ThunkDispatch<any, any, UnknownAction>;\n /**\n * A method to get the current state\n */\n getState(): RootState<any, any, ReducerPath>;\n /**\n * `extra` as provided as `thunk.extraArgument` to the `configureStore` `getDefaultMiddleware` option.\n */\n extra: unknown;\n /**\n * A unique ID generated for the mutation\n */\n requestId: string;\n};\ntype CacheLifecyclePromises<ResultType = unknown, MetaType = unknown> = {\n /**\n * Promise that will resolve with the first value for this cache key.\n * This allows you to `await` until an actual value is in cache.\n *\n * If the cache entry is removed from the cache before any value has ever\n * been resolved, this Promise will reject with\n * `new Error('Promise never resolved before cacheEntryRemoved.')`\n * to prevent memory leaks.\n * You can just re-throw that error (or not handle it at all) -\n * it will be caught outside of `cacheEntryAdded`.\n *\n * If you don't interact with this promise, it will not throw.\n */\n cacheDataLoaded: PromiseWithKnownReason<{\n /**\n * The (transformed) query result.\n */\n data: ResultType;\n /**\n * The `meta` returned by the `baseQuery`\n */\n meta: MetaType;\n }, typeof neverResolvedError>;\n /**\n * Promise that allows you to wait for the point in time when the cache entry\n * has been removed from the cache, by not being used/subscribed to any more\n * in the application for too long or by dispatching `api.util.resetApiState`.\n */\n cacheEntryRemoved: Promise<void>;\n};\nexport interface QueryCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>> {}\nexport type MutationCacheLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & CacheLifecyclePromises<ResultType, BaseQueryMeta<BaseQuery>>;\nexport type CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n onCacheEntryAdded?(arg: QueryArg, api: QueryCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport type CacheLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = CacheLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type CacheLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n onCacheEntryAdded?(arg: QueryArg, api: MutationCacheLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nconst neverResolvedError = new Error('Promise never resolved before cacheEntryRemoved.') as Error & {\n message: 'Promise never resolved before cacheEntryRemoved.';\n};\nexport const buildCacheLifecycleHandler: InternalHandlerBuilder = ({\n api,\n reducerPath,\n context,\n queryThunk,\n mutationThunk,\n internalState,\n selectors: {\n selectQueryEntry,\n selectApiState\n }\n}) => {\n const isQueryThunk = isAsyncThunkAction(queryThunk);\n const isMutationThunk = isAsyncThunkAction(mutationThunk);\n const isFulfilledThunk = isFulfilled(queryThunk, mutationThunk);\n type CacheLifecycle = {\n valueResolved?(value: {\n data: unknown;\n meta: unknown;\n }): unknown;\n cacheEntryRemoved(): void;\n };\n const lifecycleMap: Record<string, CacheLifecycle> = {};\n function resolveLifecycleEntry(cacheKey: string, data: unknown, meta: unknown) {\n const lifecycle = lifecycleMap[cacheKey];\n if (lifecycle?.valueResolved) {\n lifecycle.valueResolved({\n data,\n meta\n });\n delete lifecycle.valueResolved;\n }\n }\n function removeLifecycleEntry(cacheKey: string) {\n const lifecycle = lifecycleMap[cacheKey];\n if (lifecycle) {\n delete lifecycleMap[cacheKey];\n lifecycle.cacheEntryRemoved();\n }\n }\n const handler: ApiMiddlewareInternalHandler = (action, mwApi, stateBefore) => {\n const cacheKey = getCacheKey(action) as QueryCacheKey;\n function checkForNewCacheKey(endpointName: string, cacheKey: QueryCacheKey, requestId: string, originalArgs: unknown) {\n const oldEntry = selectQueryEntry(stateBefore, cacheKey);\n const newEntry = selectQueryEntry(mwApi.getState(), cacheKey);\n if (!oldEntry && newEntry) {\n handleNewKey(endpointName, originalArgs, cacheKey, mwApi, requestId);\n }\n }\n if (queryThunk.pending.match(action)) {\n checkForNewCacheKey(action.meta.arg.endpointName, cacheKey, action.meta.requestId, action.meta.arg.originalArgs);\n } else if (api.internalActions.cacheEntriesUpserted.match(action)) {\n for (const {\n queryDescription,\n value\n } of action.payload) {\n const {\n endpointName,\n originalArgs,\n queryCacheKey\n } = queryDescription;\n checkForNewCacheKey(endpointName, queryCacheKey, action.meta.requestId, originalArgs);\n resolveLifecycleEntry(queryCacheKey, value, {});\n }\n } else if (mutationThunk.pending.match(action)) {\n const state = mwApi.getState()[reducerPath].mutations[cacheKey];\n if (state) {\n handleNewKey(action.meta.arg.endpointName, action.meta.arg.originalArgs, cacheKey, mwApi, action.meta.requestId);\n }\n } else if (isFulfilledThunk(action)) {\n resolveLifecycleEntry(cacheKey, action.payload, action.meta.baseQueryMeta);\n } else if (api.internalActions.removeQueryResult.match(action) || api.internalActions.removeMutationResult.match(action)) {\n removeLifecycleEntry(cacheKey);\n } else if (api.util.resetApiState.match(action)) {\n for (const cacheKey of Object.keys(lifecycleMap)) {\n removeLifecycleEntry(cacheKey);\n }\n }\n };\n function getCacheKey(action: any) {\n if (isQueryThunk(action)) return action.meta.arg.queryCacheKey;\n if (isMutationThunk(action)) {\n return action.meta.arg.fixedCacheKey ?? action.meta.requestId;\n }\n if (api.internalActions.removeQueryResult.match(action)) return action.payload.queryCacheKey;\n if (api.internalActions.removeMutationResult.match(action)) return getMutationCacheKey(action.payload);\n return '';\n }\n function handleNewKey(endpointName: string, originalArgs: any, queryCacheKey: string, mwApi: SubMiddlewareApi, requestId: string) {\n const endpointDefinition = context.endpointDefinitions[endpointName];\n const onCacheEntryAdded = endpointDefinition?.onCacheEntryAdded;\n if (!onCacheEntryAdded) return;\n const lifecycle = {} as CacheLifecycle;\n const cacheEntryRemoved = new Promise<void>(resolve => {\n lifecycle.cacheEntryRemoved = resolve;\n });\n const cacheDataLoaded: PromiseWithKnownReason<{\n data: unknown;\n meta: unknown;\n }, typeof neverResolvedError> = Promise.race([new Promise<{\n data: unknown;\n meta: unknown;\n }>(resolve => {\n lifecycle.valueResolved = resolve;\n }), cacheEntryRemoved.then(() => {\n throw neverResolvedError;\n })]);\n // prevent uncaught promise rejections from happening.\n // if the original promise is used in any way, that will create a new promise that will throw again\n cacheDataLoaded.catch(() => {});\n lifecycleMap[queryCacheKey] = lifecycle;\n const selector = (api.endpoints[endpointName] as any).select(endpointDefinition.type === DefinitionType.query ? originalArgs : queryCacheKey);\n const extra = mwApi.dispatch((_, __, extra) => extra);\n const lifecycleApi = {\n ...mwApi,\n getCacheEntry: () => selector(mwApi.getState()),\n requestId,\n extra,\n updateCachedData: (endpointDefinition.type === DefinitionType.query ? (updateRecipe: Recipe<any>) => mwApi.dispatch(api.util.updateQueryData(endpointName as never, originalArgs as never, updateRecipe)) : undefined) as any,\n cacheDataLoaded,\n cacheEntryRemoved\n };\n const runningHandler = onCacheEntryAdded(originalArgs, lifecycleApi as any);\n // if a `neverResolvedError` was thrown, but not handled in the running handler, do not let it leak out further\n Promise.resolve(runningHandler).catch(e => {\n if (e === neverResolvedError) return;\n throw e;\n });\n }\n return handler;\n};", "import type { InternalHandlerBuilder } from './types';\nexport const buildDevCheckHandler: InternalHandlerBuilder = ({\n api,\n context: {\n apiUid\n },\n reducerPath\n}) => {\n return (action, mwApi) => {\n if (api.util.resetApiState.match(action)) {\n // dispatch after api reset\n mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));\n }\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n if (api.internalActions.middlewareRegistered.match(action) && action.payload === apiUid && mwApi.getState()[reducerPath]?.config?.middlewareRegistered === 'conflict') {\n console.warn(`There is a mismatch between slice and middleware for the reducerPath \"${reducerPath}\".\nYou can only have one api per reducer path, this will lead to crashes in various situations!${reducerPath === 'api' ? `\nIf you have multiple apis, you *have* to specify the reducerPath option when using createApi!` : ''}`);\n }\n }\n };\n};", "import { isAnyOf, isFulfilled, isRejected, isRejectedWithValue } from '../rtkImports';\nimport type { EndpointDefinitions, FullTagDescription } from '../../endpointDefinitions';\nimport { calculateProvidedBy } from '../../endpointDefinitions';\nimport type { CombinedState, QueryCacheKey } from '../apiState';\nimport { QueryStatus } from '../apiState';\nimport { calculateProvidedByThunk } from '../buildThunks';\nimport type { SubMiddlewareApi, InternalHandlerBuilder, ApiMiddlewareInternalHandler, InternalMiddlewareState } from './types';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildInvalidationByTagsHandler: InternalHandlerBuilder = ({\n reducerPath,\n context,\n context: {\n endpointDefinitions\n },\n mutationThunk,\n queryThunk,\n api,\n assertTagType,\n refetchQuery,\n internalState\n}) => {\n const {\n removeQueryResult\n } = api.internalActions;\n const isThunkActionWithTags = isAnyOf(isFulfilled(mutationThunk), isRejectedWithValue(mutationThunk));\n const isQueryEnd = isAnyOf(isFulfilled(mutationThunk, queryThunk), isRejected(mutationThunk, queryThunk));\n let pendingTagInvalidations: FullTagDescription<string>[] = [];\n const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n if (isThunkActionWithTags(action)) {\n invalidateTags(calculateProvidedByThunk(action, 'invalidatesTags', endpointDefinitions, assertTagType), mwApi);\n } else if (isQueryEnd(action)) {\n invalidateTags([], mwApi);\n } else if (api.util.invalidateTags.match(action)) {\n invalidateTags(calculateProvidedBy(action.payload, undefined, undefined, undefined, undefined, assertTagType), mwApi);\n }\n };\n function hasPendingRequests(state: CombinedState<EndpointDefinitions, string, string>) {\n const {\n queries,\n mutations\n } = state;\n for (const cacheRecord of [queries, mutations]) {\n for (const key in cacheRecord) {\n if (cacheRecord[key]?.status === QueryStatus.pending) return true;\n }\n }\n return false;\n }\n function invalidateTags(newTags: readonly FullTagDescription<string>[], mwApi: SubMiddlewareApi) {\n const rootState = mwApi.getState();\n const state = rootState[reducerPath];\n pendingTagInvalidations.push(...newTags);\n if (state.config.invalidationBehavior === 'delayed' && hasPendingRequests(state)) {\n return;\n }\n const tags = pendingTagInvalidations;\n pendingTagInvalidations = [];\n if (tags.length === 0) return;\n const toInvalidate = api.util.selectInvalidatedBy(rootState, tags);\n context.batch(() => {\n const valuesArray = Array.from(toInvalidate.values());\n for (const {\n queryCacheKey\n } of valuesArray) {\n const querySubState = state.queries[queryCacheKey];\n const subscriptionSubState = internalState.currentSubscriptions[queryCacheKey] ?? {};\n if (querySubState) {\n if (countObjectKeys(subscriptionSubState) === 0) {\n mwApi.dispatch(removeQueryResult({\n queryCacheKey: queryCacheKey as QueryCacheKey\n }));\n } else if (querySubState.status !== QueryStatus.uninitialized) {\n mwApi.dispatch(refetchQuery(querySubState));\n }\n }\n }\n });\n }\n return handler;\n};", "import type { QueryCacheKey, QuerySubstateIdentifier, Subscribers } from '../apiState';\nimport { QueryStatus } from '../apiState';\nimport type { QueryStateMeta, SubMiddlewareApi, TimeoutId, InternalHandlerBuilder, ApiMiddlewareInternalHandler, InternalMiddlewareState } from './types';\nexport const buildPollingHandler: InternalHandlerBuilder = ({\n reducerPath,\n queryThunk,\n api,\n refetchQuery,\n internalState\n}) => {\n const currentPolls: QueryStateMeta<{\n nextPollTimestamp: number;\n timeout?: TimeoutId;\n pollingInterval: number;\n }> = {};\n const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n if (api.internalActions.updateSubscriptionOptions.match(action) || api.internalActions.unsubscribeQueryResult.match(action)) {\n updatePollingInterval(action.payload, mwApi);\n }\n if (queryThunk.pending.match(action) || queryThunk.rejected.match(action) && action.meta.condition) {\n updatePollingInterval(action.meta.arg, mwApi);\n }\n if (queryThunk.fulfilled.match(action) || queryThunk.rejected.match(action) && !action.meta.condition) {\n startNextPoll(action.meta.arg, mwApi);\n }\n if (api.util.resetApiState.match(action)) {\n clearPolls();\n }\n };\n function getCacheEntrySubscriptions(queryCacheKey: QueryCacheKey, api: SubMiddlewareApi) {\n const state = api.getState()[reducerPath];\n const querySubState = state.queries[queryCacheKey];\n const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n if (!querySubState || querySubState.status === QueryStatus.uninitialized) return;\n return subscriptions;\n }\n function startNextPoll({\n queryCacheKey\n }: QuerySubstateIdentifier, api: SubMiddlewareApi) {\n const state = api.getState()[reducerPath];\n const querySubState = state.queries[queryCacheKey];\n const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n if (!querySubState || querySubState.status === QueryStatus.uninitialized) return;\n const {\n lowestPollingInterval,\n skipPollingIfUnfocused\n } = findLowestPollingInterval(subscriptions);\n if (!Number.isFinite(lowestPollingInterval)) return;\n const currentPoll = currentPolls[queryCacheKey];\n if (currentPoll?.timeout) {\n clearTimeout(currentPoll.timeout);\n currentPoll.timeout = undefined;\n }\n const nextPollTimestamp = Date.now() + lowestPollingInterval;\n currentPolls[queryCacheKey] = {\n nextPollTimestamp,\n pollingInterval: lowestPollingInterval,\n timeout: setTimeout(() => {\n if (state.config.focused || !skipPollingIfUnfocused) {\n api.dispatch(refetchQuery(querySubState));\n }\n startNextPoll({\n queryCacheKey\n }, api);\n }, lowestPollingInterval)\n };\n }\n function updatePollingInterval({\n queryCacheKey\n }: QuerySubstateIdentifier, api: SubMiddlewareApi) {\n const state = api.getState()[reducerPath];\n const querySubState = state.queries[queryCacheKey];\n const subscriptions = internalState.currentSubscriptions[queryCacheKey];\n if (!querySubState || querySubState.status === QueryStatus.uninitialized) {\n return;\n }\n const {\n lowestPollingInterval\n } = findLowestPollingInterval(subscriptions);\n if (!Number.isFinite(lowestPollingInterval)) {\n cleanupPollForKey(queryCacheKey);\n return;\n }\n const currentPoll = currentPolls[queryCacheKey];\n const nextPollTimestamp = Date.now() + lowestPollingInterval;\n if (!currentPoll || nextPollTimestamp < currentPoll.nextPollTimestamp) {\n startNextPoll({\n queryCacheKey\n }, api);\n }\n }\n function cleanupPollForKey(key: string) {\n const existingPoll = currentPolls[key];\n if (existingPoll?.timeout) {\n clearTimeout(existingPoll.timeout);\n }\n delete currentPolls[key];\n }\n function clearPolls() {\n for (const key of Object.keys(currentPolls)) {\n cleanupPollForKey(key);\n }\n }\n function findLowestPollingInterval(subscribers: Subscribers = {}) {\n let skipPollingIfUnfocused: boolean | undefined = false;\n let lowestPollingInterval = Number.POSITIVE_INFINITY;\n for (let key in subscribers) {\n if (!!subscribers[key].pollingInterval) {\n lowestPollingInterval = Math.min(subscribers[key].pollingInterval!, lowestPollingInterval);\n skipPollingIfUnfocused = subscribers[key].skipPollingIfUnfocused || skipPollingIfUnfocused;\n }\n }\n return {\n lowestPollingInterval,\n skipPollingIfUnfocused\n };\n }\n return handler;\n};", "import type { BaseQueryError, BaseQueryFn, BaseQueryMeta } from '../../baseQueryTypes';\nimport { DefinitionType } from '../../endpointDefinitions';\nimport type { Recipe } from '../buildThunks';\nimport { isFulfilled, isPending, isRejected } from '../rtkImports';\nimport type { MutationBaseLifecycleApi, QueryBaseLifecycleApi } from './cacheLifecycle';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, PromiseConstructorWithKnownReason, PromiseWithKnownReason } from './types';\nexport type ReferenceQueryLifecycle = never;\ntype QueryLifecyclePromises<ResultType, BaseQuery extends BaseQueryFn> = {\n /**\n * Promise that will resolve with the (transformed) query result.\n *\n * If the query fails, this promise will reject with the error.\n *\n * This allows you to `await` for the query to finish.\n *\n * If you don't interact with this promise, it will not throw.\n */\n queryFulfilled: PromiseWithKnownReason<{\n /**\n * The (transformed) query result.\n */\n data: ResultType;\n /**\n * The `meta` returned by the `baseQuery`\n */\n meta: BaseQueryMeta<BaseQuery>;\n }, QueryFulfilledRejectionReason<BaseQuery>>;\n};\ntype QueryFulfilledRejectionReason<BaseQuery extends BaseQueryFn> = {\n error: BaseQueryError<BaseQuery>;\n /**\n * If this is `false`, that means this error was returned from the `baseQuery` or `queryFn` in a controlled manner.\n */\n isUnhandledError: false;\n /**\n * The `meta` returned by the `baseQuery`\n */\n meta: BaseQueryMeta<BaseQuery>;\n} | {\n error: unknown;\n meta?: undefined;\n /**\n * If this is `true`, that means that this error is the result of `baseQueryFn`, `queryFn`, `transformResponse` or `transformErrorResponse` throwing an error instead of handling it properly.\n * There can not be made any assumption about the shape of `error`.\n */\n isUnhandledError: true;\n};\nexport type QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n /**\n * A function that is called when the individual query is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).\n *\n * Can be used to perform side-effects throughout the lifecycle of the query.\n *\n * @example\n * ```ts\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n * import { messageCreated } from './notificationsSlice\n * export interface Post {\n * id: number\n * name: string\n * }\n *\n * const api = createApi({\n * baseQuery: fetchBaseQuery({\n * baseUrl: '/',\n * }),\n * endpoints: (build) => ({\n * getPost: build.query<Post, number>({\n * query: (id) => `post/${id}`,\n * async onQueryStarted(id, { dispatch, queryFulfilled }) {\n * // `onStart` side-effect\n * dispatch(messageCreated('Fetching posts...'))\n * try {\n * const { data } = await queryFulfilled\n * // `onSuccess` side-effect\n * dispatch(messageCreated('Posts received!'))\n * } catch (err) {\n * // `onError` side-effect\n * dispatch(messageCreated('Error fetching posts!'))\n * }\n * }\n * }),\n * }),\n * })\n * ```\n */\n onQueryStarted?(queryArgument: QueryArg, queryLifeCycleApi: QueryLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport type QueryLifecycleInfiniteQueryExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArg, BaseQuery, ReducerPath>;\nexport type QueryLifecycleMutationExtraOptions<ResultType, QueryArg, BaseQuery extends BaseQueryFn, ReducerPath extends string = string> = {\n /**\n * A function that is called when the individual mutation is started. The function is called with a lifecycle api object containing properties such as `queryFulfilled`, allowing code to be run when a query is started, when it succeeds, and when it fails (i.e. throughout the lifecycle of an individual query/mutation call).\n *\n * Can be used for `optimistic updates`.\n *\n * @example\n *\n * ```ts\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n * export interface Post {\n * id: number\n * name: string\n * }\n *\n * const api = createApi({\n * baseQuery: fetchBaseQuery({\n * baseUrl: '/',\n * }),\n * tagTypes: ['Post'],\n * endpoints: (build) => ({\n * getPost: build.query<Post, number>({\n * query: (id) => `post/${id}`,\n * providesTags: ['Post'],\n * }),\n * updatePost: build.mutation<void, Pick<Post, 'id'> & Partial<Post>>({\n * query: ({ id, ...patch }) => ({\n * url: `post/${id}`,\n * method: 'PATCH',\n * body: patch,\n * }),\n * invalidatesTags: ['Post'],\n * async onQueryStarted({ id, ...patch }, { dispatch, queryFulfilled }) {\n * const patchResult = dispatch(\n * api.util.updateQueryData('getPost', id, (draft) => {\n * Object.assign(draft, patch)\n * })\n * )\n * try {\n * await queryFulfilled\n * } catch {\n * patchResult.undo()\n * }\n * },\n * }),\n * }),\n * })\n * ```\n */\n onQueryStarted?(queryArgument: QueryArg, mutationLifeCycleApi: MutationLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>): Promise<void> | void;\n};\nexport interface QueryLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> extends QueryBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath>, QueryLifecyclePromises<ResultType, BaseQuery> {}\nexport type MutationLifecycleApi<QueryArg, BaseQuery extends BaseQueryFn, ResultType, ReducerPath extends string = string> = MutationBaseLifecycleApi<QueryArg, BaseQuery, ResultType, ReducerPath> & QueryLifecyclePromises<ResultType, BaseQuery>;\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryLifecycleQueryExtraOptions.onQueryStarted | onQueryStarted}\n * for a specific query.\n *\n * @example\n * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>\n *\n * ```ts\n * import type { TypedQueryOnQueryStarted } from '@reduxjs/toolkit/query'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n *\n * type Post = {\n * id: number\n * title: string\n * userId: number\n * }\n *\n * type PostsApiResponse = {\n * posts: Post[]\n * total: number\n * skip: number\n * limit: number\n * }\n *\n * type QueryArgument = number | undefined\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * const baseApiSlice = createApi({\n * baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),\n * reducerPath: 'postsApi',\n * tagTypes: ['Posts'],\n * endpoints: (build) => ({\n * getPosts: build.query<PostsApiResponse, void>({\n * query: () => `/posts`,\n * }),\n *\n * getPostById: build.query<Post, QueryArgument>({\n * query: (postId) => `/posts/${postId}`,\n * }),\n * }),\n * })\n *\n * const updatePostOnFulfilled: TypedQueryOnQueryStarted<\n * PostsApiResponse,\n * QueryArgument,\n * BaseQueryFunction,\n * 'postsApi'\n * > = async (queryArgument, { dispatch, queryFulfilled }) => {\n * const result = await queryFulfilled\n *\n * const { posts } = result.data\n *\n * // Pre-fill the individual post entries with the results\n * // from the list endpoint query\n * dispatch(\n * baseApiSlice.util.upsertQueryEntries(\n * posts.map((post) => ({\n * endpointName: 'getPostById',\n * arg: post.id,\n * value: post,\n * })),\n * ),\n * )\n * }\n *\n * export const extendedApiSlice = baseApiSlice.injectEndpoints({\n * endpoints: (build) => ({\n * getPostsByUserId: build.query<PostsApiResponse, QueryArgument>({\n * query: (userId) => `/posts/user/${userId}`,\n *\n * onQueryStarted: updatePostOnFulfilled,\n * }),\n * }),\n * })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template ReducerPath - The type representing the `reducerPath` for the API slice.\n *\n * @since 2.4.0\n * @public\n */\nexport type TypedQueryOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleQueryExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];\n\n/**\n * Provides a way to define a strongly-typed version of\n * {@linkcode QueryLifecycleMutationExtraOptions.onQueryStarted | onQueryStarted}\n * for a specific mutation.\n *\n * @example\n * <caption>#### __Create and reuse a strongly-typed `onQueryStarted` function__</caption>\n *\n * ```ts\n * import type { TypedMutationOnQueryStarted } from '@reduxjs/toolkit/query'\n * import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query'\n *\n * type Post = {\n * id: number\n * title: string\n * userId: number\n * }\n *\n * type PostsApiResponse = {\n * posts: Post[]\n * total: number\n * skip: number\n * limit: number\n * }\n *\n * type QueryArgument = Pick<Post, 'id'> & Partial<Post>\n *\n * type BaseQueryFunction = ReturnType<typeof fetchBaseQuery>\n *\n * const baseApiSlice = createApi({\n * baseQuery: fetchBaseQuery({ baseUrl: 'https://dummyjson.com' }),\n * reducerPath: 'postsApi',\n * tagTypes: ['Posts'],\n * endpoints: (build) => ({\n * getPosts: build.query<PostsApiResponse, void>({\n * query: () => `/posts`,\n * }),\n *\n * getPostById: build.query<Post, number>({\n * query: (postId) => `/posts/${postId}`,\n * }),\n * }),\n * })\n *\n * const updatePostOnFulfilled: TypedMutationOnQueryStarted<\n * Post,\n * QueryArgument,\n * BaseQueryFunction,\n * 'postsApi'\n * > = async ({ id, ...patch }, { dispatch, queryFulfilled }) => {\n * const patchCollection = dispatch(\n * baseApiSlice.util.updateQueryData('getPostById', id, (draftPost) => {\n * Object.assign(draftPost, patch)\n * }),\n * )\n *\n * try {\n * await queryFulfilled\n * } catch {\n * patchCollection.undo()\n * }\n * }\n *\n * export const extendedApiSlice = baseApiSlice.injectEndpoints({\n * endpoints: (build) => ({\n * addPost: build.mutation<Post, Omit<QueryArgument, 'id'>>({\n * query: (body) => ({\n * url: `posts/add`,\n * method: 'POST',\n * body,\n * }),\n *\n * onQueryStarted: updatePostOnFulfilled,\n * }),\n *\n * updatePost: build.mutation<Post, QueryArgument>({\n * query: ({ id, ...patch }) => ({\n * url: `post/${id}`,\n * method: 'PATCH',\n * body: patch,\n * }),\n *\n * onQueryStarted: updatePostOnFulfilled,\n * }),\n * }),\n * })\n * ```\n *\n * @template ResultType - The type of the result `data` returned by the query.\n * @template QueryArgumentType - The type of the argument passed into the query.\n * @template BaseQueryFunctionType - The type of the base query function being used.\n * @template ReducerPath - The type representing the `reducerPath` for the API slice.\n *\n * @since 2.4.0\n * @public\n */\nexport type TypedMutationOnQueryStarted<ResultType, QueryArgumentType, BaseQueryFunctionType extends BaseQueryFn, ReducerPath extends string = string> = QueryLifecycleMutationExtraOptions<ResultType, QueryArgumentType, BaseQueryFunctionType, ReducerPath>['onQueryStarted'];\nexport const buildQueryLifecycleHandler: InternalHandlerBuilder = ({\n api,\n context,\n queryThunk,\n mutationThunk\n}) => {\n const isPendingThunk = isPending(queryThunk, mutationThunk);\n const isRejectedThunk = isRejected(queryThunk, mutationThunk);\n const isFullfilledThunk = isFulfilled(queryThunk, mutationThunk);\n type CacheLifecycle = {\n resolve(value: {\n data: unknown;\n meta: unknown;\n }): unknown;\n reject(value: QueryFulfilledRejectionReason<any>): unknown;\n };\n const lifecycleMap: Record<string, CacheLifecycle> = {};\n const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n if (isPendingThunk(action)) {\n const {\n requestId,\n arg: {\n endpointName,\n originalArgs\n }\n } = action.meta;\n const endpointDefinition = context.endpointDefinitions[endpointName];\n const onQueryStarted = endpointDefinition?.onQueryStarted;\n if (onQueryStarted) {\n const lifecycle = {} as CacheLifecycle;\n const queryFulfilled = new (Promise as PromiseConstructorWithKnownReason)<{\n data: unknown;\n meta: unknown;\n }, QueryFulfilledRejectionReason<any>>((resolve, reject) => {\n lifecycle.resolve = resolve;\n lifecycle.reject = reject;\n });\n // prevent uncaught promise rejections from happening.\n // if the original promise is used in any way, that will create a new promise that will throw again\n queryFulfilled.catch(() => {});\n lifecycleMap[requestId] = lifecycle;\n const selector = (api.endpoints[endpointName] as any).select(endpointDefinition.type === DefinitionType.query ? originalArgs : requestId);\n const extra = mwApi.dispatch((_, __, extra) => extra);\n const lifecycleApi = {\n ...mwApi,\n getCacheEntry: () => selector(mwApi.getState()),\n requestId,\n extra,\n updateCachedData: (endpointDefinition.type === DefinitionType.query ? (updateRecipe: Recipe<any>) => mwApi.dispatch(api.util.updateQueryData(endpointName as never, originalArgs as never, updateRecipe)) : undefined) as any,\n queryFulfilled\n };\n onQueryStarted(originalArgs, lifecycleApi as any);\n }\n } else if (isFullfilledThunk(action)) {\n const {\n requestId,\n baseQueryMeta\n } = action.meta;\n lifecycleMap[requestId]?.resolve({\n data: action.payload,\n meta: baseQueryMeta\n });\n delete lifecycleMap[requestId];\n } else if (isRejectedThunk(action)) {\n const {\n requestId,\n rejectedWithValue,\n baseQueryMeta\n } = action.meta;\n lifecycleMap[requestId]?.reject({\n error: action.payload ?? action.error,\n isUnhandledError: !rejectedWithValue,\n meta: baseQueryMeta as any\n });\n delete lifecycleMap[requestId];\n }\n };\n return handler;\n};", "import { QueryStatus } from '../apiState';\nimport type { QueryCacheKey } from '../apiState';\nimport { onFocus, onOnline } from '../setupListeners';\nimport type { ApiMiddlewareInternalHandler, InternalHandlerBuilder, SubMiddlewareApi } from './types';\nimport { countObjectKeys } from '../../utils/countObjectKeys';\nexport const buildWindowEventHandler: InternalHandlerBuilder = ({\n reducerPath,\n context,\n api,\n refetchQuery,\n internalState\n}) => {\n const {\n removeQueryResult\n } = api.internalActions;\n const handler: ApiMiddlewareInternalHandler = (action, mwApi) => {\n if (onFocus.match(action)) {\n refetchValidQueries(mwApi, 'refetchOnFocus');\n }\n if (onOnline.match(action)) {\n refetchValidQueries(mwApi, 'refetchOnReconnect');\n }\n };\n function refetchValidQueries(api: SubMiddlewareApi, type: 'refetchOnFocus' | 'refetchOnReconnect') {\n const state = api.getState()[reducerPath];\n const queries = state.queries;\n const subscriptions = internalState.currentSubscriptions;\n context.batch(() => {\n for (const queryCacheKey of Object.keys(subscriptions)) {\n const querySubState = queries[queryCacheKey];\n const subscriptionSubState = subscriptions[queryCacheKey];\n if (!subscriptionSubState || !querySubState) continue;\n const shouldRefetch = Object.values(subscriptionSubState).some(sub => sub[type] === true) || Object.values(subscriptionSubState).every(sub => sub[type] === undefined) && state.config[type];\n if (shouldRefetch) {\n if (countObjectKeys(subscriptionSubState) === 0) {\n api.dispatch(removeQueryResult({\n queryCacheKey: queryCacheKey as QueryCacheKey\n }));\n } else if (querySubState.status !== QueryStatus.uninitialized) {\n api.dispatch(refetchQuery(querySubState));\n }\n }\n }\n });\n }\n return handler;\n};", "import type { Action, Middleware, ThunkDispatch, UnknownAction } from '@reduxjs/toolkit';\nimport type { EndpointDefinitions, FullTagDescription } from '../../endpointDefinitions';\nimport type { QueryStatus, QuerySubState, RootState } from '../apiState';\nimport type { QueryThunkArg } from '../buildThunks';\nimport { createAction, isAction } from '../rtkImports';\nimport { buildBatchedActionsHandler } from './batchActions';\nimport { buildCacheCollectionHandler } from './cacheCollection';\nimport { buildCacheLifecycleHandler } from './cacheLifecycle';\nimport { buildDevCheckHandler } from './devMiddleware';\nimport { buildInvalidationByTagsHandler } from './invalidationByTags';\nimport { buildPollingHandler } from './polling';\nimport { buildQueryLifecycleHandler } from './queryLifecycle';\nimport type { BuildMiddlewareInput, InternalHandlerBuilder, InternalMiddlewareState } from './types';\nimport { buildWindowEventHandler } from './windowEventHandling';\nimport type { ApiEndpointQuery } from '../module';\nexport type { ReferenceCacheCollection } from './cacheCollection';\nexport type { MutationCacheLifecycleApi, QueryCacheLifecycleApi, ReferenceCacheLifecycle } from './cacheLifecycle';\nexport type { MutationLifecycleApi, QueryLifecycleApi, ReferenceQueryLifecycle, TypedMutationOnQueryStarted, TypedQueryOnQueryStarted } from './queryLifecycle';\nexport type { SubscriptionSelectors } from './types';\nexport function buildMiddleware<Definitions extends EndpointDefinitions, ReducerPath extends string, TagTypes extends string>(input: BuildMiddlewareInput<Definitions, ReducerPath, TagTypes>) {\n const {\n reducerPath,\n queryThunk,\n api,\n context\n } = input;\n const {\n apiUid\n } = context;\n const actions = {\n invalidateTags: createAction<Array<TagTypes | FullTagDescription<TagTypes> | null | undefined>>(`${reducerPath}/invalidateTags`)\n };\n const isThisApiSliceAction = (action: Action) => action.type.startsWith(`${reducerPath}/`);\n const handlerBuilders: InternalHandlerBuilder[] = [buildDevCheckHandler, buildCacheCollectionHandler, buildInvalidationByTagsHandler, buildPollingHandler, buildCacheLifecycleHandler, buildQueryLifecycleHandler];\n const middleware: Middleware<{}, RootState<Definitions, string, ReducerPath>, ThunkDispatch<any, any, UnknownAction>> = mwApi => {\n let initialized = false;\n const internalState: InternalMiddlewareState = {\n currentSubscriptions: {}\n };\n const builderArgs = {\n ...(input as any as BuildMiddlewareInput<EndpointDefinitions, string, string>),\n internalState,\n refetchQuery,\n isThisApiSliceAction\n };\n const handlers = handlerBuilders.map(build => build(builderArgs));\n const batchedActionsHandler = buildBatchedActionsHandler(builderArgs);\n const windowEventsHandler = buildWindowEventHandler(builderArgs);\n return next => {\n return action => {\n if (!isAction(action)) {\n return next(action);\n }\n if (!initialized) {\n initialized = true;\n // dispatch before any other action\n mwApi.dispatch(api.internalActions.middlewareRegistered(apiUid));\n }\n const mwApiWithNext = {\n ...mwApi,\n next\n };\n const stateBefore = mwApi.getState();\n const [actionShouldContinue, internalProbeResult] = batchedActionsHandler(action, mwApiWithNext, stateBefore);\n let res: any;\n if (actionShouldContinue) {\n res = next(action);\n } else {\n res = internalProbeResult;\n }\n if (!!mwApi.getState()[reducerPath]) {\n // Only run these checks if the middleware is registered okay\n\n // This looks for actions that aren't specific to the API slice\n windowEventsHandler(action, mwApiWithNext, stateBefore);\n if (isThisApiSliceAction(action) || context.hasRehydrationInfo(action)) {\n // Only run these additional checks if the actions are part of the API slice,\n // or the action has hydration-related data\n for (const handler of handlers) {\n handler(action, mwApiWithNext, stateBefore);\n }\n }\n }\n return res;\n };\n };\n };\n return {\n middleware,\n actions\n };\n function refetchQuery(querySubState: Exclude<QuerySubState<any>, {\n status: QueryStatus.uninitialized;\n }>) {\n return (input.api.endpoints[querySubState.endpointName] as ApiEndpointQuery<any, any>).initiate(querySubState.originalArgs as any, {\n subscribe: false,\n forceRefetch: true\n });\n }\n}", "import { buildCreateApi } from '../createApi';\nimport { coreModule } from './module';\nexport const createApi = /* @__PURE__ */buildCreateApi(coreModule());\nexport { QueryStatus } from './apiState';\nexport type { CombinedState, InfiniteData, InfiniteQueryConfigOptions, InfiniteQuerySubState, MutationKeys, QueryCacheKey, QueryKeys, QuerySubState, RootState, SubscriptionOptions } from './apiState';\nexport type { InfiniteQueryActionCreatorResult, MutationActionCreatorResult, QueryActionCreatorResult, StartQueryActionCreatorOptions } from './buildInitiate';\nexport type { MutationCacheLifecycleApi, MutationLifecycleApi, QueryCacheLifecycleApi, QueryLifecycleApi, SubscriptionSelectors, TypedMutationOnQueryStarted, TypedQueryOnQueryStarted } from './buildMiddleware/index';\nexport { skipToken } from './buildSelectors';\nexport type { InfiniteQueryResultSelectorResult, MutationResultSelectorResult, QueryResultSelectorResult, SkipToken } from './buildSelectors';\nexport type { SliceActions } from './buildSlice';\nexport type { PatchQueryDataThunk, UpdateQueryDataThunk, UpsertQueryDataThunk } from './buildThunks';\nexport { coreModuleName } from './module';\nexport type { ApiEndpointInfiniteQuery, ApiEndpointMutation, ApiEndpointQuery, CoreModule, InternalActions, PrefetchOptions, ThunkWithReturnValue } from './module';\nexport { setupListeners } from './setupListeners';\nexport { buildCreateApi, coreModule };", "import {createReducer} from '@reduxjs/toolkit';\nimport {VERSION} from '../../utils/version.js';\n\nexport const versionReducer = createReducer(VERSION, (builder) => builder);\n", "import {isNullOrUndefined} from '@coveo/bueno';\nimport type {Middleware, UnknownAction} from '@reduxjs/toolkit';\n\ntype UnknownActionWithAnalyticsPayload = UnknownAction & {\n payload: {analyticsAction?: UnknownAction};\n};\n\nfunction isAnalyticsAction(\n action: unknown\n): action is UnknownActionWithAnalyticsPayload {\n const analytics = (action as UnknownActionWithAnalyticsPayload).payload\n ?.analyticsAction;\n\n return isActionWithType(action) && !isNullOrUndefined(analytics);\n}\n\nfunction isActionWithType(action: unknown): action is UnknownAction {\n return 'type' in (action as UnknownAction);\n}\n\nexport const analyticsMiddleware: Middleware = (api) => (next) => (action) => {\n // Why all these shenanigans ?\n // https://redux.js.org/style-guide/style-guide#do-not-put-non-serializable-values-in-state-or-actions\n // analyticsAction is returned as a function in some action payload. A function is non serializable.\n // This is not recommended, with one exception: It has to be handled before any reducer has the chance to do it's job, and should not stored in the state.\n // To meet those conditions, we ensure the analyticsMiddleware is always the first executed (in store.ts/configureStore) and that it is removed from the payload.\n // We only keep a reference to the function in order to dispatch it correctly after the reducer (next) has the chance of processing the action/state change\n\n let analytics: UnknownAction | undefined;\n\n if (isAnalyticsAction(action)) {\n analytics = action.payload.analyticsAction;\n delete action.payload.analyticsAction;\n }\n\n const ret = next(action);\n\n if (isActionWithType(action)) {\n if (\n action.type === 'search/executeSearch/fullfilled' &&\n analytics === undefined\n ) {\n console.error('No analytics action associated with search:', action);\n }\n\n if (\n action.type === 'recommendation/get/fullfilled' &&\n analytics === undefined\n ) {\n console.error(\n 'No analytics action associated with recommendation:',\n action\n );\n }\n\n if (\n action.type === 'productRecommendations/get/fullfilled' &&\n analytics === undefined\n ) {\n console.error(\n 'No analytics action associated with product recommendation:',\n action\n );\n }\n }\n\n if (analytics !== undefined) {\n api.dispatch(analytics);\n }\n\n return ret;\n};\n", "import {configurationReducer} from '../features/configuration/configuration-slice.js';\n\nexport const configuration = configurationReducer;\n", "import {isNullOrUndefined} from '@coveo/bueno';\nimport {createReducer} from '@reduxjs/toolkit';\nimport {\n restoreSearchParameters,\n restoreTab,\n} from '../search-parameters/search-parameter-actions.js';\nimport {updateActiveTab} from '../tab-set/tab-set-actions.js';\nimport {\n disableAnalytics,\n enableAnalytics,\n setOriginLevel2,\n setOriginLevel3,\n type UpdateAnalyticsConfigurationActionCreatorPayload,\n type UpdateBasicConfigurationActionCreatorPayload,\n type UpdateSearchConfigurationActionCreatorPayload,\n updateAnalyticsConfiguration,\n updateBasicConfiguration,\n updateSearchConfiguration,\n} from './configuration-actions.js';\nimport {\n type ConfigurationState,\n getConfigurationInitialState,\n} from './configuration-state.js';\nimport getMagicCookie from './magic-cookie.js';\n\nexport const configurationReducer = createReducer(\n getConfigurationInitialState(),\n (builder) =>\n builder\n .addCase(updateBasicConfiguration, (state, action) => {\n handleUpdateBasicConfiguration(state, action.payload);\n })\n .addCase(updateSearchConfiguration, (state, action) => {\n handleUpdateSearchConfiguration(state, action.payload);\n })\n .addCase(updateAnalyticsConfiguration, (state, action) => {\n handleUpdateAnalyticsConfiguration(state, action.payload);\n })\n .addCase(disableAnalytics, (state) => {\n state.analytics.enabled = false;\n })\n .addCase(enableAnalytics, (state) => {\n state.analytics.enabled = true;\n })\n .addCase(setOriginLevel2, (state, action) => {\n state.analytics.originLevel2 = action.payload.originLevel2;\n })\n .addCase(setOriginLevel3, (state, action) => {\n state.analytics.originLevel3 = action.payload.originLevel3;\n })\n .addCase(updateActiveTab, (state, action) => {\n state.analytics.originLevel2 = action.payload;\n })\n .addCase(restoreTab, (state, action) => {\n state.analytics.originLevel2 = action.payload;\n })\n .addCase(restoreSearchParameters, (state, action) => {\n if (!isNullOrUndefined(action.payload.tab)) {\n state.analytics.originLevel2 = action.payload.tab;\n }\n })\n);\n\nfunction handleUpdateBasicConfiguration(\n state: ConfigurationState,\n payload: UpdateBasicConfigurationActionCreatorPayload\n) {\n if (!isNullOrUndefined(payload.accessToken)) {\n state.accessToken = payload.accessToken;\n }\n\n state.environment = payload.environment ?? 'prod';\n\n if (!isNullOrUndefined(payload.organizationId)) {\n state.organizationId = payload.organizationId;\n }\n}\n\nfunction handleUpdateSearchConfiguration(\n state: ConfigurationState,\n payload: UpdateSearchConfigurationActionCreatorPayload\n) {\n if (!isNullOrUndefined(payload.proxyBaseUrl)) {\n state.search.apiBaseUrl = payload.proxyBaseUrl;\n }\n if (!isNullOrUndefined(payload.locale)) {\n state.search.locale = payload.locale;\n }\n if (!isNullOrUndefined(payload.timezone)) {\n state.search.timezone = payload.timezone;\n }\n if (!isNullOrUndefined(payload.authenticationProviders)) {\n state.search.authenticationProviders = payload.authenticationProviders;\n }\n}\n\nfunction handleUpdateAnalyticsConfiguration(\n state: ConfigurationState,\n payload: UpdateAnalyticsConfigurationActionCreatorPayload\n) {\n if (!isNullOrUndefined(payload.enabled)) {\n state.analytics.enabled = payload.enabled;\n }\n if (!isNullOrUndefined(payload.originContext)) {\n state.analytics.originContext = payload.originContext;\n }\n if (!isNullOrUndefined(payload.originLevel2)) {\n state.analytics.originLevel2 = payload.originLevel2;\n }\n if (!isNullOrUndefined(payload.originLevel3)) {\n state.analytics.originLevel3 = payload.originLevel3;\n }\n if (!isNullOrUndefined(payload.proxyBaseUrl)) {\n state.analytics.apiBaseUrl = payload.proxyBaseUrl;\n }\n if (!isNullOrUndefined(payload.trackingId)) {\n state.analytics.trackingId = payload.trackingId;\n }\n if (!isNullOrUndefined(payload.analyticsMode)) {\n state.analytics.analyticsMode = payload.analyticsMode;\n }\n if (!isNullOrUndefined(payload.source)) {\n state.analytics.source = payload.source;\n }\n\n try {\n const magicCookie = getMagicCookie();\n if (magicCookie) {\n state.analytics.analyticsMode = 'next';\n state.analytics.trackingId = magicCookie;\n }\n } catch (_) {}\n\n if (!isNullOrUndefined(payload.runtimeEnvironment)) {\n state.analytics.runtimeEnvironment = payload.runtimeEnvironment;\n }\n if (!isNullOrUndefined(payload.anonymous)) {\n state.analytics.anonymous = payload.anonymous;\n }\n if (!isNullOrUndefined(payload.deviceId)) {\n state.analytics.deviceId = payload.deviceId;\n }\n if (!isNullOrUndefined(payload.userDisplayName)) {\n state.analytics.userDisplayName = payload.userDisplayName;\n }\n if (!isNullOrUndefined(payload.documentLocation)) {\n state.analytics.documentLocation = payload.documentLocation;\n }\n}\n", "import {RecordValue} from '@coveo/bueno';\nimport {createAction} from '@reduxjs/toolkit';\nimport {\n requiredEmptyAllowedString,\n requiredNonEmptyString,\n validatePayload,\n} from '../../utils/validate-payload.js';\n\nexport interface RegisterTabActionCreatorPayload {\n /**\n * A unique identifier for the tab (e.g., `\"abc\"`).\n */\n id: string;\n\n /**\n * The tab filter expression.\n */\n expression: string;\n}\n\nexport const registerTab = createAction(\n 'tab/register',\n (payload: RegisterTabActionCreatorPayload) => {\n const schema = new RecordValue({\n values: {\n id: requiredNonEmptyString,\n expression: requiredEmptyAllowedString,\n },\n });\n\n return validatePayload<RegisterTabActionCreatorPayload>(payload, schema);\n }\n);\n\nexport const updateActiveTab = createAction(\n 'tab/updateActiveTab',\n (id: string) => {\n return validatePayload(id, requiredNonEmptyString);\n }\n);\n", "import type {IRuntimeEnvironment} from 'coveo.analytics';\nimport dayjs from 'dayjs';\nimport timezone from 'dayjs/plugin/timezone.js';\nimport utc from 'dayjs/plugin/utc.js';\nimport type {PlatformEnvironment} from '../../utils/url-utils.js';\nimport type {CoveoFramework} from '../../utils/version.js';\n\ndayjs.extend(utc);\ndayjs.extend(timezone);\n\nexport interface CoreConfigurationState<\n Analytics extends CoreAnalyticsState = CoreAnalyticsState,\n> {\n /**\n * The access token to use to authenticate requests against the Coveo Cloud endpoints. Typically, this will be an API key or search token that grants the privileges to execute queries and push usage analytics data in the target Coveo Cloud organization.\n */\n accessToken: string;\n\n /**\n * The global headless engine Usage Analytics API configuration.\n */\n analytics: Analytics;\n\n /**\n * The environment in which the Coveo cloud organization is hosted.\n *\n * The `dev` and `stg` environments are only available internally for Coveo employees (e.g., Professional Services).\n *\n * Defaults to `prod`.\n */\n environment: PlatformEnvironment;\n\n /**\n * The unique identifier of the target Coveo Cloud organization (e.g., `mycoveocloudorganizationg8tp8wu3`)\n */\n organizationId: string;\n}\n\nexport interface ConfigurationState\n extends CoreConfigurationState<AnalyticsState> {\n /**\n * The global headless engine Search API configuration.\n */\n search: SearchState;\n /**\n * The global headless engine Knowledge configuration.\n */\n knowledge: KnowledgeState;\n}\n\ninterface SearchState {\n /**\n * The Search API base URL to use.\n *\n * By default, will append `/rest/search/v2` to the automatically resolved\n * platform [organization endpoint](https://docs.coveo.com/en/mcc80216)\n * (i.e., `https;://<ORG_ID>.org<hipaa|dev|stg|>.coveo.com`)\n *\n * If necessary, you can override this value by specifying a `proxyBaseUrl` in the `search` object of your engine\n * configuration, or when manually dispatching the `updateSearchConfiguration` action.\n */\n apiBaseUrl?: string;\n /**\n * The locale of the current user. Must comply with IETF\u2019s BCP 47 definition: https://www.rfc-editor.org/rfc/bcp/bcp47.txt.\n */\n locale: string;\n /**\n * The [tz database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) identifier of the time zone to use to correctly interpret dates in the query expression, facets, and result items.\n * By default, the timezone will be [guessed](https://day.js.org/docs/en/timezone/guessing-user-timezone).\n */\n timezone: string;\n /**\n * Specifies the name of the authentication providers to use to perform queries.\n *\n * See [SAML Authentication](https://docs.coveo.com/en/91/).\n */\n authenticationProviders: string[];\n}\n\nexport interface AnalyticsState extends CoreAnalyticsState {\n /**\n * Sets the Origin Context dimension on the analytics events.\n *\n * You can use this dimension to specify the context of your application.\n * Suggested values are \"Search\", \"InternalSearch\" and \"CommunitySearch\"\n *\n * By default, `Search`.\n */\n originContext: string;\n\n /**\n * Sets the value of the Origin Level 2 dimension on the analytics events.\n *\n * Origin level 2 is a usage analytics event metadata whose value should typically be the name/identifier of the tab from which the usage analytics event originates.\n *\n * In the context of product listing, the value should match the breadcrumb of the product listing page from which the usage analytics event originates (for example, `canoes-kayaks/kayaks/sea-kayaks`).\n *\n * When logging a usage analytics event, originLevel2 should always be set to the same value as the corresponding `tab` (parameter) Search API query parameter so Coveo Machine Learning models function properly, and usage analytics reports and dashboards are coherent.\n *\n * If left unspecified, this value will automatically try to resolve itself from the `tab` Search API query parameter.\n */\n originLevel2: string;\n\n /**\n * Origin level 3 is a usage analytics event metadata whose value should typically be the URL of the page that linked to the search interface that\u2019s making the request.\n *\n * When logging a Search usage analytics event, originLevel3 should always be set to the same value as the corresponding referrer Search API query parameter so usage analytics reports and dashboards are coherent.\n *\n * This value is optional, and will automatically try to resolve itself from the referrer search parameter.\n */\n originLevel3: string;\n\n /**\n * Optional analytics runtime environment, this is needed for analytics to work correctly if you're running outside of a browser.\n * See https://github.com/coveo/coveo.analytics.js for more info\n */\n runtimeEnvironment?: IRuntimeEnvironment;\n\n /**\n * Whether analytics events should be logged anonymously.\n * If set to true, the Usage Analytics Write API will not extract the name and userDisplayName, if present, from the search token\n */\n anonymous: boolean;\n\n /**\n * The name of the device that the end user is using. It should be explicitly configured in the context of a native mobile app.\n */\n deviceId: string;\n\n /**\n * Specifies the user display name for the usage analytics logs.\n */\n userDisplayName: string;\n\n /**\n * Specifies the URL of the current page or component.\n */\n documentLocation: string;\n\n /**\n * Specifies the analytics mode to use.\n *\n * By default, `next`.\n * @internal\n */\n analyticsMode: 'legacy' | 'next';\n}\n\nexport interface CoreAnalyticsState {\n /**\n * The Analytics API base URL to use.\n *\n * By default, will append `/rest/organizations/${organizationId}/events/v1` (or `/rest/v15/analytics` if\n * `analyticsMode`is set to `legacy`) to the automatically resolved analytics\n * [organization endpoint](https://docs.coveo.com/en/mcc80216)\n * (i.e., `https;://<ORG_ID>.analytics.org<hipaa|dev|stg|>.coveo.com`)\n *\n * If necessary, you can override this value by specifying a `proxyBaseUrl` in the `analytics` object of your engine\n * configuration, or when manually dispatching the `updateAnalyticsConfiguration` action.\n */\n apiBaseUrl?: string;\n\n /**\n * Specifies if analytics tracking should be enabled. By default analytics events are tracked.\n */\n enabled: boolean;\n\n /**\n * Specifies the frameworks and version used around Headless (e.g. @coveo/atomic)\n * @internal\n */\n source: Partial<Record<CoveoFramework, string>>;\n\n /**\n * The unique identifier of the tracking target.\n * @internal\n */\n trackingId?: string;\n}\n\ninterface KnowledgeState {\n answerConfigurationId: string;\n}\n\nexport const getConfigurationInitialState: () => ConfigurationState = () => ({\n organizationId: '',\n accessToken: '',\n search: {\n locale: 'en-US',\n timezone: dayjs.tz.guess(),\n authenticationProviders: [],\n },\n analytics: {\n enabled: true,\n originContext: 'Search',\n originLevel2: 'default',\n originLevel3: 'default',\n anonymous: false,\n deviceId: '',\n userDisplayName: '',\n documentLocation: '',\n analyticsMode: 'next',\n source: {},\n },\n knowledge: {\n answerConfigurationId: '',\n },\n environment: 'prod',\n});\n", "const pendragonCookieValueMatcher = /(^|; )Coveo-Pendragon=([^;]*)/;\nexport default function getMagicCookie() {\n if (typeof window === 'undefined') {\n return false;\n } else {\n return pendragonCookieValueMatcher.exec(document.cookie)?.pop() || null;\n }\n}\n", "import type {Middleware} from '@reduxjs/toolkit';\n\nfunction isInstantlyCallableThunkAction(action: unknown): action is () => void {\n return (action as {instantlyCallable: boolean}).instantlyCallable;\n}\n\n/**\n * Makes instantly callable thunk actions dispatchable directly.\n */\nexport const instantlyCallableThunkActionMiddleware: Middleware =\n () => (next) => (action) =>\n next(isInstantlyCallableThunkAction(action) ? action() : action);\n", "import type {\n Action,\n Middleware,\n SerializedError,\n UnknownAction,\n} from '@reduxjs/toolkit';\nimport type {Logger} from 'pino';\n\ntype UnknownActionWithPossibleErrorPayload = UnknownAction & {\n payload?: {ignored?: boolean; message?: string; errorCode?: string};\n error?: SerializedError;\n};\n\nexport const logActionErrorMiddleware: (logger: Logger) => Middleware =\n (logger) => () => (next) => (action) => {\n const unknownAction = action as UnknownActionWithPossibleErrorPayload;\n if (!unknownAction.error) {\n return next(action);\n }\n\n const error: SerializedError = unknownAction.error;\n\n const errorPayloadMessage = [\n unknownAction.payload?.errorCode,\n unknownAction.payload?.message,\n ]\n .filter(Boolean)\n .join(' - ');\n\n if (!unknownAction.payload?.ignored) {\n logger.error(\n errorPayloadMessage ||\n error.stack ||\n error.message ||\n error.name ||\n 'Error',\n `Action dispatch error ${unknownAction.type}`,\n action\n );\n }\n\n // Validation errors should prevent further dispatching\n if (unknownAction.error.name === 'SchemaValidationError') {\n return;\n }\n\n return next(action);\n };\n\nexport const logActionMiddleware: (logger: Logger) => Middleware =\n (logger) => (api) => (next) => (action) => {\n logger.debug(\n {\n action,\n nextState: api.getState(),\n },\n `Action dispatched: ${(action as Action).type}`\n );\n\n return next(action);\n };\n", "import {\n type AnyAction,\n combineReducers,\n type Reducer,\n type ReducersMapObject,\n type StateFromReducersMapObject,\n} from '@reduxjs/toolkit';\nimport {fromEntries} from '../utils/utils.js';\n\nexport interface ReducerManager {\n combinedReducer: Reducer;\n add(newReducers: ReducersMapObject): void;\n containsAll(newReducers: ReducersMapObject): boolean;\n addCrossReducer(reducer: Reducer): void;\n}\n\nexport function createReducerManager(\n initialReducers: ReducersMapObject,\n preloadedState: object\n): ReducerManager {\n const reducers = {...initialReducers};\n let crossReducer: Reducer;\n\n const rootReducer: (\n combined: Reducer<StateFromReducersMapObject<ReducersMapObject>, AnyAction>\n ) => Reducer = (combined) => {\n return (state, action) => {\n const intermediate = combined(state, action);\n const final = crossReducer\n ? crossReducer(intermediate, action)\n : intermediate;\n return final;\n };\n };\n\n return {\n get combinedReducer() {\n const placeholderReducers = fromEntries(\n Object.entries(preloadedState)\n .filter(([key]) => !(key in reducers))\n .map(([key, value]) => [key, <Reducer>(() => value)])\n );\n return rootReducer(\n combineReducers({...placeholderReducers, ...reducers})\n );\n },\n\n containsAll(newReducers: ReducersMapObject) {\n const keys = Object.keys(newReducers);\n return keys.every((key) => key in reducers);\n },\n\n add(newReducers: ReducersMapObject) {\n Object.keys(newReducers)\n .filter((key) => !(key in reducers))\n .forEach((key) => {\n reducers[key] = newReducers[key];\n });\n },\n\n addCrossReducer(reducer: Reducer) {\n crossReducer = reducer;\n },\n };\n}\n", "import type {\n Dispatch,\n Middleware,\n MiddlewareAPI,\n UnknownAction,\n} from '@reduxjs/toolkit';\nimport type {Logger} from 'pino';\nimport {debounce} from 'ts-debounce';\nimport {updateBasicConfiguration} from '../features/configuration/configuration-actions.js';\nimport {setError} from '../features/error/error-actions.js';\nimport {UnauthorizedTokenError} from '../utils/errors.js';\n\nexport function createRenewAccessTokenMiddleware(\n logger: Logger,\n renewToken?: () => Promise<string>\n): Middleware {\n let accessTokenRenewalsAttempts = 0;\n const resetRenewalTriesAfterDelay = debounce(() => {\n accessTokenRenewalsAttempts = 0;\n }, 500);\n\n return (store) => (next) => async (action) => {\n const isThunk = typeof action === 'function';\n\n if (!isThunk) {\n return next(action);\n }\n\n const payload = await next(action);\n\n if (!isExpiredTokenError(payload)) {\n return payload;\n }\n\n if (typeof renewToken !== 'function') {\n logger.warn(\n 'Unable to renew the expired token because a renew function was not provided. Please specify the #renewAccessToken option when initializing the engine.'\n );\n dispatchError(store, payload.error);\n return payload;\n }\n\n if (accessTokenRenewalsAttempts >= 5) {\n logger.warn(\n 'Attempted to renew the token but was not successful. Please check the #renewAccessToken function.'\n );\n dispatchError(store, payload.error);\n return payload;\n }\n\n accessTokenRenewalsAttempts++;\n resetRenewalTriesAfterDelay();\n\n const accessToken = await attempt(renewToken);\n store.dispatch(updateBasicConfiguration({accessToken}));\n store.dispatch(action as unknown as UnknownAction);\n return;\n };\n}\n\nfunction isExpiredTokenError(\n action: unknown\n): action is {error: UnauthorizedTokenError} {\n return (\n typeof action === 'object' &&\n action !== null &&\n 'error' in action &&\n // biome-ignore lint/suspicious/noExplicitAny: any action is possible here.\n (action as any).error?.name === new UnauthorizedTokenError().name\n );\n}\n\nfunction dispatchError(\n // biome-ignore lint/suspicious/noExplicitAny: any action is possible here.\n store: MiddlewareAPI<Dispatch<UnknownAction>, any>,\n error: UnauthorizedTokenError\n) {\n store.dispatch(\n setError({\n status: 401,\n statusCode: 401,\n message: error.message,\n type: error.name,\n })\n );\n}\n\nasync function attempt(fn: () => Promise<string>) {\n try {\n return await fn();\n } catch (_) {\n return '';\n }\n}\n", "export type Options<Result> = {\n isImmediate?: boolean;\n maxWait?: number;\n callback?: (data: Result) => void;\n};\n\nexport interface DebouncedFunction<\n Args extends any[],\n F extends (...args: Args) => any\n> {\n (this: ThisParameterType<F>, ...args: Args): Promise<ReturnType<F>>;\n cancel: (reason?: any) => void;\n}\n\ninterface DebouncedPromise<FunctionReturn> {\n resolve: (result: FunctionReturn) => void;\n reject: (reason?: any) => void;\n}\n\nexport function debounce<Args extends any[], F extends (...args: Args) => any>(\n func: F,\n waitMilliseconds = 50,\n options: Options<ReturnType<F>> = {}\n): {\n (this: ThisParameterType<F>, ...args: Parameters<F> & Args): Promise<\n ReturnType<F>\n >;\n cancel: (reason?: any) => void;\n} {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n const isImmediate = options.isImmediate ?? false;\n const callback = options.callback ?? false;\n const maxWait = options.maxWait;\n let lastInvokeTime = Date.now();\n\n let promises: DebouncedPromise<ReturnType<F>>[] = [];\n\n function nextInvokeTimeout() {\n if (maxWait !== undefined) {\n const timeSinceLastInvocation = Date.now() - lastInvokeTime;\n\n if (timeSinceLastInvocation + waitMilliseconds >= maxWait) {\n return maxWait - timeSinceLastInvocation;\n }\n }\n\n return waitMilliseconds;\n }\n\n const debouncedFunction = function (\n this: ThisParameterType<F>,\n ...args: Parameters<F>\n ) {\n const context = this;\n return new Promise<ReturnType<F>>((resolve, reject) => {\n const invokeFunction = function () {\n timeoutId = undefined;\n lastInvokeTime = Date.now();\n if (!isImmediate) {\n const result = func.apply(context, args);\n callback && callback(result);\n promises.forEach(({ resolve }) => resolve(result));\n promises = [];\n }\n };\n\n const shouldCallNow = isImmediate && timeoutId === undefined;\n\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(invokeFunction, nextInvokeTimeout());\n\n if (shouldCallNow) {\n const result = func.apply(context, args);\n callback && callback(result);\n return resolve(result);\n }\n promises.push({ resolve, reject });\n });\n };\n\n debouncedFunction.cancel = function (reason?: any) {\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n }\n promises.forEach(({ reject }) => reject(reason));\n promises = [];\n };\n\n return debouncedFunction;\n}\n", "import {createAction} from '@reduxjs/toolkit';\n\ninterface GenericAPIError {\n status: number;\n statusCode: number;\n message: string;\n type: string;\n ignored?: boolean;\n}\n\n/**\n * Action creator for setting a generic API error in the application state.\n *\n * This action is used by the renew access token middleware to handle\n * authentication-related errors. It should be added to any Redux slice that may\n * receive a 401 (Unauthorized) or 419 (Authentication Timeout) error from an API call.\n */\nexport const setError = createAction<GenericAPIError>('app/setError');\n", "import type {Relay} from '@coveo/relay';\nimport {\n configureStore as configureStoreToolkit,\n type Middleware,\n type Reducer,\n type ReducersMapObject,\n type StateFromReducersMapObject,\n} from '@reduxjs/toolkit';\nimport {logActionMiddleware} from './logger-middlewares.js';\nimport type {NavigatorContext} from './navigator-context-provider.js';\nimport type {ThunkExtraArguments} from './thunk-extra-arguments.js';\n\nexport interface CoreExtraArguments\n extends ThunkExtraArguments,\n AdditionalCoreExtraArguments {}\n\nexport interface AdditionalCoreExtraArguments {\n relay: Relay;\n navigatorContext: NavigatorContext;\n}\n\ninterface ConfigureStoreOptions<Reducers extends ReducersMapObject> {\n reducer: Reducer;\n preloadedState?: StateFromReducersMapObject<Reducers>;\n middlewares?: Middleware[];\n thunkExtraArguments: CoreExtraArguments;\n name: string;\n}\n\nexport function configureStore<Reducers extends ReducersMapObject>({\n reducer,\n preloadedState,\n middlewares = [],\n thunkExtraArguments,\n name,\n}: ConfigureStoreOptions<Reducers>) {\n return configureStoreToolkit({\n reducer,\n preloadedState,\n devTools: {\n stateSanitizer: (state) =>\n (state as {history?: unknown}).history\n ? {...state, history: '<<OMIT>>'}\n : state,\n name,\n shouldHotReload: false, // KIT-961 -> Redux dev tool + hot reloading interacts badly with replaceReducers mechanism.\n },\n middleware: (getDefaultMiddleware) =>\n getDefaultMiddleware({thunk: {extraArgument: thunkExtraArguments}})\n .prepend(...middlewares)\n .concat(logActionMiddleware(thunkExtraArguments.logger)),\n });\n}\n\nexport type Store = ReturnType<typeof configureStore>;\n", "import {type LevelWithSilent, pino} from 'pino';\n\nexport type LogLevel = LevelWithSilent;\n\nexport interface LoggerOptions {\n /**\n * By default, is set to `warn`.\n */\n level?: LogLevel;\n /**\n * Changes the shape of the log object. This function will be called every time one of the log methods (such as `.info`) is called.\n * All arguments passed to the log method, except the message, will be pass to this function. By default it does not change the shape of the log object.\n */\n logFormatter?: (object: {}) => {};\n}\n\nexport function buildLogger(options: LoggerOptions | undefined) {\n return pino({\n name: '@coveo/headless',\n level: options?.level || 'warn',\n formatters: {\n log: options?.logFormatter,\n },\n });\n}\n", "import type {Relay} from '@coveo/relay';\nimport type {AnalyticsClientSendEventHook} from 'coveo.analytics';\nimport type {Logger} from 'pino';\nimport type {GeneratedAnswerAPIClient} from '../api/generated-answer/generated-answer-client.js';\nimport {\n NoopPreprocessRequest,\n type PreprocessRequest,\n} from '../api/preprocess-request.js';\nimport {validatePayloadAndThrow} from '../utils/validate-payload.js';\nimport type {EngineConfiguration} from './engine-configuration.js';\nimport type {NavigatorContext} from './navigator-context-provider.js';\n\nexport interface ClientThunkExtraArguments<T, K = GeneratedAnswerAPIClient>\n extends ThunkExtraArguments {\n apiClient: T;\n streamingClient?: K;\n relay: Relay;\n navigatorContext: NavigatorContext;\n}\n\nexport interface ThunkExtraArguments {\n preprocessRequest?: PreprocessRequest;\n analyticsClientMiddleware: AnalyticsClientSendEventHook;\n logger: Logger;\n validatePayload: typeof validatePayloadAndThrow;\n}\n\nexport function buildThunkExtraArguments(\n configuration: EngineConfiguration,\n logger: Logger\n): ThunkExtraArguments {\n const analyticsClientMiddleware = getAnalyticsClientMiddleware(configuration);\n const validatePayload = validatePayloadAndThrow;\n const preprocessRequest = getPreprocessRequest(configuration);\n\n return {\n analyticsClientMiddleware,\n validatePayload,\n preprocessRequest,\n logger,\n };\n}\n\nfunction getAnalyticsClientMiddleware(\n configuration: EngineConfiguration\n): AnalyticsClientSendEventHook {\n const {analytics} = configuration;\n // biome-ignore lint/suspicious/noExplicitAny: required for compatibility\n const NoopAnalyticsMiddleware = (_: string, p: any) => p;\n return analytics?.analyticsClientMiddleware || NoopAnalyticsMiddleware;\n}\n\nfunction getPreprocessRequest(configuration: EngineConfiguration) {\n return configuration.preprocessRequest || NoopPreprocessRequest;\n}\n", "import {Schema} from '@coveo/bueno';\nimport {\n nonEmptyString,\n requiredNonEmptyString,\n} from '../../utils/validate-payload.js';\nimport {\n type EngineConfiguration,\n engineConfigurationDefinitions,\n} from '../engine-configuration.js';\n\n/**\n * The case assist engine configuration.\n */\nexport interface CaseAssistEngineConfiguration extends EngineConfiguration {\n /**\n * Specifies the unique identifier of the target case assist configuration. See [Retrieving a Case Assist ID](https://docs.coveo.com/en/3328/service/manage-case-assist-configurations#retrieving-a-case-assist-id).\n */\n caseAssistId: string;\n /**\n * The locale of the current user. Must comply with IETF\u2019s [BCP 47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) definition.\n *\n * Notes:\n * Coveo Machine Learning models use this information to provide contextually relevant output.\n * Moreover, this information can be referred to in query expressions and QPL statements by using the $locale object.\n */\n locale?: string;\n /**\n * The first level of origin of the request, typically the identifier of the graphical case assist interface from which the request originates.\n * This value is used for analytics reporting purposes.\n */\n searchHub?: string;\n /**\n * The base URL to use to proxy Coveo case assist requests (e.g., `https://example.com/case-assist`).\n *\n * This is an advanced option that you only set if you proxy Coveo case assist requests through your own\n * server. In most cases, you should not set this option.\n *\n * See [Headless proxy: Case Assist](https://docs.coveo.com/en/headless/latest/usage/proxy#case-assist).\n */\n proxyBaseUrl?: string;\n}\n\nexport const caseAssistEngineConfigurationSchema =\n new Schema<CaseAssistEngineConfiguration>({\n ...engineConfigurationDefinitions,\n caseAssistId: requiredNonEmptyString,\n locale: nonEmptyString,\n });\n", "import {\n BooleanValue,\n RecordValue,\n type SchemaDefinition,\n StringValue,\n} from '@coveo/bueno';\nimport type {\n AnalyticsClientSendEventHook,\n IRuntimeEnvironment,\n} from 'coveo.analytics';\nimport type {PreprocessRequest} from '../api/preprocess-request.js';\nimport type {PlatformEnvironment} from '../utils/url-utils.js';\nimport {requiredNonEmptyString} from '../utils/validate-payload.js';\nimport type {CoveoFramework} from '../utils/version.js';\n\n/**\n * The global headless engine configuration options.\n */\nexport interface EngineConfiguration {\n /**\n * The unique identifier of the target Coveo Cloud organization (e.g., `mycoveocloudorganizationg8tp8wu3`)\n */\n organizationId: string;\n /**\n * The access token to use to authenticate requests against the Coveo Cloud endpoints. Typically, this will be an API key or search token that grants the privileges to execute queries and push usage analytics data in the target Coveo Cloud organization.\n */\n accessToken: string;\n /**\n * A function that fetches a new access token. The function must return a Promise that resolves to a string (the new access token).\n */\n renewAccessToken?: () => Promise<string>;\n /**\n * Allows for augmenting a Platform request before it is sent.\n * @param request Request to be augmented\n * @param clientOrigin The origin of the client, can be \"analyticsFetch\", \"analyticsBeacon\" or \"searchApiFetch\"\n *\n * @returns Augmented request\n */\n preprocessRequest?: PreprocessRequest;\n /**\n * The Engine name (e.g., myEngine). Specifying your Engine name will help in debugging when using an application with multiple Redux stores.\n * @defaultValue 'coveo-headless'\n */\n name?: string;\n /**\n * Allows configuring options related to analytics.\n */\n analytics?: AnalyticsConfiguration;\n /**\n * The environment in which the organization is hosted.\n *\n * The `dev` and `stg` environments are only available internally for Coveo employees (e.g., Professional Services).\n *\n * Defaults to `prod`.\n */\n environment?: PlatformEnvironment;\n}\n\n/**\n * The analytics configuration options.\n */\nexport interface AnalyticsConfiguration {\n /**\n * Specifies if usage analytics tracking should be enabled.\n *\n * By default, all analytics events will be logged.\n */\n enabled?: boolean;\n /**\n * Sets the Origin Context dimension on the analytics events.\n *\n * You can use this dimension to specify the context of your application.\n * The possible values are \"Search\", \"InternalSearch\", and \"CommunitySearch\".\n *\n * The default value is `Search`.\n */\n originContext?: string;\n /**\n * Sets the value of the Origin Level 2 dimension on the analytics events.\n *\n * Origin level 2 is a usage analytics event metadata whose value should typically be the name/identifier of the tab from which the usage analytics event originates.\n *\n * In the context of product listing, the value should match the breadcrumb of the product listing page from which the usage analytics event originates (for example, `canoes-kayaks/kayaks/sea-kayaks`).\n *\n * When logging a usage analytics event, originLevel2 should always be set to the same value as the corresponding `tab` (parameter) Search API query parameter so Coveo Machine Learning models function properly, and usage analytics reports and dashboards are coherent.\n *\n * If left unspecified, this value will automatically try to resolve itself from the `tab` Search API query parameter.\n */\n originLevel2?: string;\n /**\n * Origin level 3 is a usage analytics event metadata whose value should typically be the URL of the page that linked to the search interface that\u2019s making the request.\n *\n * When logging a Search usage analytics event, originLevel3 should always be set to the same value as the corresponding referrer Search API query parameter so usage analytics reports and dashboards are coherent.\n *\n * This value is optional, and will automatically try to resolve itself from the referrer search parameter.\n */\n originLevel3?: string;\n /**\n * analyticsClientMiddleware allows to hook into an analytics event payload before it is sent to the Coveo platform.\n */\n analyticsClientMiddleware?: AnalyticsClientSendEventHook;\n /**\n * Optional analytics runtime environment, this is needed for analytics to work correctly if you're running outside of a browser.\n * See https://github.com/coveo/coveo.analytics.js for more info.\n */\n runtimeEnvironment?: AnalyticsRuntimeEnvironment;\n /**\n * Whether analytics events should be logged anonymously.\n * If set to true, the Usage Analytics Write API will not extract the name and userDisplayName, if present, from the search token\n */\n anonymous?: boolean;\n /**\n * The name of the device that the end user is using. It should be explicitly configured in the context of a native mobile app.\n */\n deviceId?: string;\n /**\n * Specifies the user display name for the usage analytics logs.\n */\n userDisplayName?: string;\n /**\n * Specifies the URL of the current page or component.\n */\n documentLocation?: string;\n /**\n * The unique identifier of the tracking target.\n */\n trackingId?: string;\n /**\n * The analytics client to use.\n * - `legacy`: The legacy analytics client, i.e., the Coveo Analytics.js library.\n * - `next`: The next analytics client, i.e., the Coveo Event Protocol with the Relay library.\n *\n * The default value is `next`.\n *\n * @default 'next'\n */\n analyticsMode?: 'legacy' | 'next';\n /**\n * Specifies the frameworks and version used around Headless (e.g. @coveo/atomic).\n * @internal\n */\n source?: Partial<Record<CoveoFramework, string>>;\n /**\n * The base URL to use to proxy Coveo analytics requests (e.g., `https://example.com/analytics`).\n *\n * This is an advanced option that you only set if you proxy Coveo analytics requests through your own\n * server. In most cases, you should not set this option.\n *\n * See [Headless proxy: Analytics](https://docs.coveo.com/en/headless/latest/usage/proxy#analytics).\n */\n proxyBaseUrl?: string;\n}\n\nexport type AnalyticsRuntimeEnvironment = IRuntimeEnvironment;\n\nexport const engineConfigurationDefinitions: SchemaDefinition<EngineConfiguration> =\n {\n organizationId: requiredNonEmptyString,\n accessToken: requiredNonEmptyString,\n name: new StringValue({\n required: false,\n emptyAllowed: false,\n }),\n analytics: new RecordValue({\n options: {\n required: false,\n },\n values: {\n enabled: new BooleanValue({\n required: false,\n }),\n originContext: new StringValue({\n required: false,\n }),\n originLevel2: new StringValue({\n required: false,\n }),\n originLevel3: new StringValue({\n required: false,\n }),\n analyticsMode: new StringValue<'legacy' | 'next'>({\n constrainTo: ['legacy', 'next'],\n required: false,\n default: 'next',\n }),\n proxyBaseUrl: new StringValue({\n required: false,\n url: true,\n }),\n trackingId: new StringValue({\n required: false,\n emptyAllowed: false,\n regex: /^[a-zA-Z0-9_\\-.]{1,100}$/,\n }),\n },\n }),\n environment: new StringValue<PlatformEnvironment>({\n required: false,\n default: 'prod',\n constrainTo: ['prod', 'hipaa', 'stg', 'dev'],\n }),\n };\n\nexport function getSampleEngineConfiguration(): EngineConfiguration {\n return {\n organizationId: 'searchuisamples',\n // deepcode ignore HardcodedNonCryptoSecret: Public key freely available for our documentation\n accessToken: 'xx564559b1-0045-48e1-953c-3addd1ee4457',\n };\n}\n", "import {Schema} from '@coveo/bueno';\nimport type {CaseAssistAPIErrorStatusResponse} from '../../api/service/case-assist/case-assist-api-client.js';\nimport type {CaseAssistEngine} from '../../app/case-assist-engine/case-assist-engine.js';\nimport {configuration} from '../../app/common-reducers.js';\nimport {\n logAutoSelectCaseField,\n logClassificationClick,\n logUpdateCaseField,\n} from '../../features/case-assist/case-assist-analytics-actions.js';\nimport {caseAssistConfigurationReducer as caseAssistConfiguration} from '../../features/case-assist-configuration/case-assist-configuration-slice.js';\nimport {\n fetchCaseClassifications,\n registerCaseField,\n updateCaseField,\n} from '../../features/case-field/case-field-actions.js';\nimport {caseFieldReducer as caseField} from '../../features/case-field/case-field-slice.js';\nimport type {CaseFieldSuggestion} from '../../features/case-field/case-field-state.js';\nimport {caseInputReducer as caseInput} from '../../features/case-input/case-input-slice.js';\nimport {fetchDocumentSuggestions} from '../../features/document-suggestion/document-suggestion-actions.js';\nimport {documentSuggestionReducer as documentSuggestion} from '../../features/document-suggestion/document-suggestion-slice.js';\nimport type {\n CaseAssistConfigurationSection,\n CaseFieldSection,\n CaseInputSection,\n ConfigurationSection,\n DocumentSuggestionSection,\n} from '../../state/state-sections.js';\nimport {loadReducerError} from '../../utils/errors.js';\nimport {\n requiredNonEmptyString,\n validateOptions,\n} from '../../utils/validate-payload.js';\nimport {\n buildController,\n type Controller,\n} from '../controller/headless-controller.js';\n\nexport interface CaseFieldProps {\n options?: CaseFieldOptions;\n}\n\nconst optionsSchema = new Schema({\n field: requiredNonEmptyString,\n});\n\nexport interface CaseFieldOptions {\n field: string;\n}\n\n/**\n * A scoped and simplified part of the headless state that is relevant to the `CaseField` controller.\n *\n * @group Controllers\n * @category CaseField\n */\nexport interface CaseFieldState {\n /**\n * Whether suggestions are being retrieved for the field.\n */\n loading: boolean;\n /**\n * The error that occurred while fetching suggestions, if any.\n */\n error: CaseAssistAPIErrorStatusResponse | null;\n /**\n * The current field value.\n */\n value: string;\n /**\n * The field suggestions.\n */\n suggestions: CaseFieldSuggestion[];\n}\n\n/**\n * The `CaseField` controller is responsible for setting the value and retrieving suggestions for a field from the case creation form and optionally trigger Case Assist API requests.\n *\n * For example implementations, see the following [Coveo Quantic Case Assist components](https://docs.coveo.com/en/quantic/latest/reference/case-assist-components/):\n * * [quanticCaseClassification.js](https://github.com/coveo/ui-kit/blob/main/packages/quantic/force-app/main/default/lwc/quanticCaseClassification/quanticCaseClassification.js)\n * * [quanticDocumentSuggestion](https://github.com/coveo/ui-kit/blob/main/packages/quantic/force-app/main/default/lwc/quanticDocumentSuggestion/quanticDocumentSuggestion.js)\n *\n * @group Controllers\n * @category CaseField\n */\nexport interface CaseField extends Controller {\n /**\n * Sets the value of the specified field.\n *\n * @param value - The field value to set.\n * @param updatesToFetch - A set of flags dictating whether to fetch case assist data after updating the field value.\n * @param autoSelection - A flag indicating whether the update was triggered by an automatic selection.\n */\n update(\n value: string,\n updatesToFetch?: UpdateCaseFieldFetchOptions,\n autoSelection?: boolean\n ): void;\n\n /**\n * A scoped and simplified part of the headless state that is relevant to the `CaseField` controller.\n */\n state: CaseFieldState;\n}\n\nexport interface UpdateCaseFieldFetchOptions {\n caseClassifications?: boolean;\n documentSuggestions?: boolean;\n}\n\n/**\n * Creates a `CaseField` controller instance.\n *\n * @param engine - The headless engine.\n * @param props - The configurable `CaseField` controller properties.\n * @returns A `CaseField` controller instance.\n *\n * @group Controllers\n * @category CaseField\n */\nexport function buildCaseField(\n engine: CaseAssistEngine,\n props: CaseFieldProps = {}\n): CaseField {\n if (!loadCaseFieldReducers(engine)) {\n throw loadReducerError;\n }\n\n const controller = buildController(engine);\n const {dispatch} = engine;\n\n const options = validateOptions(\n engine,\n optionsSchema,\n props.options,\n 'buildCaseField'\n ) as Required<CaseFieldOptions>;\n\n const getState = () => {\n return engine.state;\n };\n\n const isRegistered = getState().caseField?.fields?.[options.field];\n\n if (!isRegistered) {\n dispatch(\n registerCaseField({\n fieldName: options.field,\n fieldValue: '',\n })\n );\n }\n\n return {\n ...controller,\n\n get state() {\n const loading = getState().caseField?.status?.loading ?? false;\n const error = getState().caseField?.status?.error ?? null;\n\n const field = getState().caseField?.fields?.[options.field];\n const value = field?.value ?? '';\n const suggestions = field?.suggestions ?? [];\n\n return {\n loading,\n error,\n value,\n suggestions,\n };\n },\n\n update(\n value: string,\n updatesToFetch?: UpdateCaseFieldFetchOptions,\n autoSelection?: boolean\n ) {\n const suggestionId = getState().caseField?.fields?.[\n options.field\n ]?.suggestions?.find((s) => s.value === value)?.id;\n\n if (suggestionId) {\n autoSelection\n ? dispatch(logAutoSelectCaseField(suggestionId))\n : dispatch(logClassificationClick(suggestionId));\n }\n\n dispatch(\n updateCaseField({\n fieldName: options.field,\n fieldValue: value,\n })\n );\n\n !autoSelection && dispatch(logUpdateCaseField(options.field));\n\n updatesToFetch?.caseClassifications &&\n dispatch(fetchCaseClassifications());\n updatesToFetch?.documentSuggestions &&\n dispatch(fetchDocumentSuggestions());\n },\n };\n}\n\nfunction loadCaseFieldReducers(\n engine: CaseAssistEngine\n): engine is CaseAssistEngine<\n ConfigurationSection &\n CaseAssistConfigurationSection &\n CaseInputSection &\n CaseFieldSection &\n DocumentSuggestionSection\n> {\n engine.addReducers({\n configuration,\n caseAssistConfiguration,\n caseInput,\n caseField,\n documentSuggestion,\n });\n return true;\n}\n", "import type {CaseAssist} from '@coveo/relay-event-types';\nimport {\n type CaseAssistAction,\n makeCaseAssistAnalyticsAction,\n} from '../analytics/analytics-utils.js';\nimport type {NextStageOptions} from './case-assist-analytics-actions-loader.js';\nimport {\n caseAssistCaseClassificationSelector,\n caseAssistCaseSelector,\n caseAssistDocumentSuggestionSelector,\n} from './case-assist-analytics-selectors.js';\n\nexport const logCaseStart = (): CaseAssistAction =>\n makeCaseAssistAnalyticsAction({\n prefix: 'analytics/caseAssist/case/start',\n __legacy__getBuilder: (client, state) => {\n return client.logEnterInterface({\n ticket: caseAssistCaseSelector(state),\n });\n },\n analyticsType: 'CaseAssist.Start',\n analyticsPayloadBuilder: (): CaseAssist.Start => ({}),\n });\n\n//TODO: SFINT-5435\nexport const logCaseNextStage = (\n options?: NextStageOptions\n): CaseAssistAction =>\n makeCaseAssistAnalyticsAction(\n 'analytics/caseAssist/case/nextStage',\n (client, state) =>\n client.logMoveToNextCaseStep({\n ticket: caseAssistCaseSelector(state),\n stage: options?.stageName,\n })\n );\n\nexport const logCreateCase = (): CaseAssistAction =>\n makeCaseAssistAnalyticsAction({\n prefix: 'analytics/caseAssist/case/create',\n __legacy__getBuilder: (client, state) => {\n return client.logCaseCreated({\n ticket: caseAssistCaseSelector(state),\n });\n },\n analyticsType: 'CaseAssist.CreateTicket',\n analyticsPayloadBuilder: (state): CaseAssist.CreateTicket => {\n const {id, category, subject, description, productId} =\n caseAssistCaseSelector(state);\n return {\n ticket: {\n id: id!,\n category,\n subject,\n description,\n system: productId,\n },\n };\n },\n });\n\nexport const logSolveCase = (): CaseAssistAction =>\n makeCaseAssistAnalyticsAction({\n prefix: 'analytics/caseAssist/case/solve',\n __legacy__getBuilder: (client, state) => {\n return client.logCaseSolved({\n ticket: caseAssistCaseSelector(state),\n });\n },\n analyticsType: 'CaseAssist.Cancel',\n analyticsPayloadBuilder: (): CaseAssist.Cancel => ({\n reason: 'solved',\n }),\n });\n\nexport const logAbandonCase = (): CaseAssistAction =>\n makeCaseAssistAnalyticsAction({\n prefix: 'analytics/caseAssist/case/abandon',\n __legacy__getBuilder: (client, state) => {\n return client.logCaseCancelled({\n ticket: caseAssistCaseSelector(state),\n });\n },\n analyticsType: 'CaseAssist.Cancel',\n analyticsPayloadBuilder: (): CaseAssist.Cancel => ({\n reason: 'quit',\n }),\n });\n\nexport const logUpdateCaseField = (fieldName: string): CaseAssistAction =>\n makeCaseAssistAnalyticsAction({\n prefix: 'analytics/caseAssist/case/field/update',\n __legacy__getBuilder: (client, state) => {\n return client.logUpdateCaseField({\n fieldName,\n ticket: caseAssistCaseSelector(state),\n });\n },\n analyticsType: 'CaseAssist.UpdateField',\n analyticsPayloadBuilder: (state): CaseAssist.UpdateField => {\n const fieldValue =\n state.caseField?.fields?.[fieldName]?.value ||\n state.caseInput?.[fieldName]?.value ||\n '';\n return {\n fieldName,\n fieldValue,\n };\n },\n });\n\nexport const logAutoSelectCaseField = (\n classificationId: string\n): CaseAssistAction =>\n makeCaseAssistAnalyticsAction({\n prefix: 'analytics/caseAssist/classification/click',\n __legacy__getBuilder: (client, state) => {\n return client.logSelectFieldSuggestion({\n suggestion: caseAssistCaseClassificationSelector(\n state,\n classificationId,\n true\n ),\n ticket: caseAssistCaseSelector(state),\n });\n },\n analyticsType: 'CaseAssist.SelectFieldClassification',\n analyticsPayloadBuilder: (\n state\n ): CaseAssist.SelectFieldClassification | undefined => {\n const responseId = state.caseField?.status?.lastResponseId;\n if (responseId) {\n return {\n autoselected: true,\n classificationId,\n responseId,\n };\n }\n },\n });\n\nexport const logClassificationClick = (\n classificationId: string\n): CaseAssistAction =>\n makeCaseAssistAnalyticsAction({\n prefix: 'analytics/caseAssist/classification/click',\n __legacy__getBuilder: (client, state) => {\n return client.logSelectFieldSuggestion({\n suggestion: caseAssistCaseClassificationSelector(\n state,\n classificationId\n ),\n ticket: caseAssistCaseSelector(state),\n });\n },\n analyticsType: 'CaseAssist.SelectFieldClassification',\n analyticsPayloadBuilder: (\n state\n ): CaseAssist.SelectFieldClassification | undefined => {\n const responseId = state.caseField?.status?.lastResponseId;\n if (responseId) {\n return {\n autoselected: false,\n classificationId,\n responseId,\n };\n }\n },\n });\n\nexport const logDocumentSuggestionClick = (\n suggestionId: string\n): CaseAssistAction =>\n makeCaseAssistAnalyticsAction({\n prefix: 'analytics/caseAssist/documentSuggestion/click',\n __legacy__getBuilder: (client, state) => {\n return client.logSelectDocumentSuggestion({\n suggestion: caseAssistDocumentSuggestionSelector(state, suggestionId),\n ticket: caseAssistCaseSelector(state),\n });\n },\n analyticsType: 'CaseAssist.DocumentSuggestionClick',\n analyticsPayloadBuilder: (\n state\n ): CaseAssist.DocumentSuggestionClick | undefined => {\n const responseId = state.documentSuggestion?.status?.lastResponseId;\n const documentSuggestion = caseAssistDocumentSuggestionSelector(\n state,\n suggestionId\n );\n if (responseId) {\n return {\n responseId,\n position: documentSuggestion.suggestion.documentPosition,\n itemMetadata: {\n uniqueFieldName: 'uniqueId',\n uniqueFieldValue: documentSuggestion.suggestionId,\n url: documentSuggestion.suggestion.documentUri,\n title: documentSuggestion.suggestion.documentTitle,\n },\n };\n }\n },\n });\n\nexport const logQuickviewDocumentSuggestionClick = (\n suggestionId: string\n): CaseAssistAction =>\n makeCaseAssistAnalyticsAction({\n prefix: 'analytics/caseAssist/documentSuggestion/click',\n __legacy__getBuilder: (client, state) => {\n return client.logQuickviewDocumentSuggestion({\n suggestion: caseAssistDocumentSuggestionSelector(state, suggestionId),\n ticket: caseAssistCaseSelector(state),\n });\n },\n analyticsType: 'CaseAssist.DocumentSuggestionClick',\n analyticsPayloadBuilder: (\n state\n ): CaseAssist.DocumentSuggestionClick | undefined => {\n const responseId = state.documentSuggestion?.status?.lastResponseId;\n const documentSuggestion = caseAssistDocumentSuggestionSelector(\n state,\n suggestionId\n );\n if (responseId) {\n return {\n responseId,\n position: documentSuggestion.suggestion.documentPosition,\n itemMetadata: {\n uniqueFieldName: 'uniqueId',\n uniqueFieldValue: documentSuggestion.suggestionId,\n url: documentSuggestion.suggestion.documentUri,\n title: documentSuggestion.suggestion.documentTitle,\n },\n };\n }\n },\n });\n\nexport const logDocumentSuggestionOpen = (\n suggestionId: string\n): CaseAssistAction =>\n makeCaseAssistAnalyticsAction({\n prefix: 'analytics/caseAssist/documentSuggestion/click',\n __legacy__getBuilder: (client, state) => {\n return client.logSelectDocumentSuggestion({\n suggestion: caseAssistDocumentSuggestionSelector(\n state,\n suggestionId,\n false,\n true\n ),\n ticket: caseAssistCaseSelector(state),\n });\n },\n analyticsType: 'CaseAssist.DocumentSuggestionClick',\n analyticsPayloadBuilder: (\n state\n ): CaseAssist.DocumentSuggestionClick | undefined => {\n const responseId = state.documentSuggestion?.status?.lastResponseId;\n const documentSuggestion = caseAssistDocumentSuggestionSelector(\n state,\n suggestionId\n );\n if (responseId) {\n return {\n responseId,\n position: documentSuggestion.suggestion.documentPosition,\n itemMetadata: {\n uniqueFieldName: 'uniqueId',\n uniqueFieldValue: documentSuggestion.suggestionId,\n url: documentSuggestion.suggestion.documentUri,\n title: documentSuggestion.suggestion.documentTitle,\n },\n };\n }\n },\n });\n\n//TODO: SFINT-5471\nexport const logDocumentSuggestionRating = (\n suggestionId: string,\n rating: number\n): CaseAssistAction =>\n makeCaseAssistAnalyticsAction({\n prefix: 'analytics/caseAssist/documentSuggestion/rate',\n __legacy__getBuilder: (client, state) => {\n return client.logRateDocumentSuggestion({\n rating,\n suggestion: caseAssistDocumentSuggestionSelector(state, suggestionId),\n ticket: caseAssistCaseSelector(state),\n });\n },\n analyticsType: 'CaseAssist.DocumentSuggestionFeedback',\n analyticsPayloadBuilder: (\n state\n ): CaseAssist.DocumentSuggestionFeedback | undefined => {\n const responseId = state.documentSuggestion?.status?.lastResponseId;\n const documentSuggestion = caseAssistDocumentSuggestionSelector(\n state,\n suggestionId\n );\n if (responseId) {\n return {\n responseId,\n itemMetadata: {\n uniqueFieldName: 'uniqueId',\n uniqueFieldValue: documentSuggestion.suggestionId,\n url: documentSuggestion.suggestion.documentUri,\n title: documentSuggestion.suggestion.documentTitle,\n },\n liked: !!rating,\n };\n }\n },\n });\n", "import type {CaseAssistAppState} from '../../state/case-assist-app-state.js';\n\nexport enum KnownCaseFields {\n id = 'id',\n subject = 'subject',\n description = 'description',\n category = 'category',\n productId = 'productId',\n}\n\nconst isCustomFieldName = (fieldName: string) =>\n !(Object.values(KnownCaseFields) as string[]).includes(fieldName);\n\nexport const caseAssistCaseSelector = (state: Partial<CaseAssistAppState>) => {\n const selectFieldValue = (fieldName: string) =>\n caseAssistCaseInputValueSelector(state, fieldName) ??\n caseAssistCaseFieldValueSelector(state, fieldName);\n\n return {\n id: selectFieldValue(KnownCaseFields.id),\n subject: selectFieldValue(KnownCaseFields.subject),\n description: selectFieldValue(KnownCaseFields.description),\n category: selectFieldValue(KnownCaseFields.category),\n productId: selectFieldValue(KnownCaseFields.productId),\n custom: {\n ...caseAssistCustomCaseInputValuesSelector(state),\n ...caseAssistCustomCaseFieldValuesSelector(state),\n },\n };\n};\n\nexport const caseAssistCaseInputValueSelector = (\n state: Partial<CaseAssistAppState>,\n fieldName: string\n) => state?.caseInput?.[fieldName]?.value;\n\nexport const caseAssistCustomCaseInputValuesSelector = (\n state: Partial<CaseAssistAppState>\n) =>\n Object.keys(state?.caseInput ?? []).reduce((customFields, fieldName) => {\n if (isCustomFieldName(fieldName)) {\n const value = state?.caseInput?.[fieldName]?.value;\n if (value) {\n // biome-ignore lint/performance/noAccumulatingSpread: <>\n return {...customFields, [fieldName]: value};\n }\n }\n\n return customFields;\n }, {});\n\nexport const caseAssistCaseFieldValueSelector = (\n state: Partial<CaseAssistAppState>,\n fieldName: string\n) => state?.caseField?.fields[fieldName]?.value;\n\nexport const caseAssistCustomCaseFieldValuesSelector = (\n state: Partial<CaseAssistAppState>\n) =>\n Object.keys(state?.caseField?.fields ?? []).reduce(\n (customFields, fieldName) => {\n if (isCustomFieldName(fieldName)) {\n const value = state?.caseField?.fields?.[fieldName]?.value;\n if (value) {\n // biome-ignore lint/performance/noAccumulatingSpread: <>\n return {...customFields, [fieldName]: value};\n }\n }\n\n return customFields;\n },\n {}\n );\n\nexport const caseAssistCaseClassificationSelector = (\n state: Partial<CaseAssistAppState>,\n classificationId: string,\n autoSelection = false\n) => {\n const classificationFieldName = Object.keys(\n state?.caseField?.fields ?? {}\n ).find((fieldName) =>\n state?.caseField?.fields[fieldName].suggestions.some(\n (suggestion) => suggestion.id === classificationId\n )\n );\n\n if (!classificationFieldName) {\n throw new Error(\n `Classification with ID '${classificationId}' could not be found.`\n );\n }\n\n const classificationField = state?.caseField?.fields[classificationFieldName];\n\n const classification = classificationField?.suggestions.find(\n (suggestion) => suggestion.id === classificationId\n );\n\n const result = {\n classificationId: classification?.id ?? '',\n responseId: state.caseField?.status.lastResponseId ?? '',\n fieldName: classificationFieldName,\n classification: {\n value: classification?.value ?? '',\n confidence: classification?.confidence ?? 0,\n },\n };\n\n if (autoSelection) {\n return {...result, autoSelection};\n }\n return result;\n};\n\nexport const caseAssistDocumentSuggestionSelector = (\n state: Partial<CaseAssistAppState>,\n suggestionId: string,\n fromQuickview = false,\n openDocument = false\n) => {\n let suggestionIdx: number | undefined;\n const suggestion = state.documentSuggestion?.documents.find((s, idx) => {\n const isFound = s.uniqueId === suggestionId;\n if (isFound) {\n suggestionIdx = idx + 1;\n }\n return isFound;\n });\n\n if (!suggestion) {\n throw new Error(\n `Document Suggestion with ID '${suggestionId}' could not be found.`\n );\n }\n\n const result = {\n suggestionId: suggestion.uniqueId,\n permanentId: suggestion.fields.permanentid,\n responseId: state.documentSuggestion?.status.lastResponseId ?? '',\n suggestion: {\n documentUri: suggestion.fields.uri,\n documentUriHash: suggestion.fields.urihash,\n documentTitle: suggestion.title,\n documentUrl: suggestion.clickUri,\n documentPosition: suggestionIdx ?? 0,\n sourceName: suggestion.fields.source,\n },\n };\n\n if (fromQuickview) {\n return {...result, fromQuickview};\n }\n if (openDocument) {\n return {...result, openDocument};\n }\n return result;\n};\n", "import {createAction, createAsyncThunk} from '@reduxjs/toolkit';\nimport {getVisitorID} from '../../api/analytics/coveo-analytics-utils.js';\nimport {getOrganizationEndpoint} from '../../api/platform-client.js';\nimport {isErrorResponse} from '../../api/search/search-api-client.js';\nimport type {AsyncThunkCaseAssistOptions} from '../../api/service/case-assist/case-assist-api-client.js';\nimport {prepareContextFromFields} from '../../api/service/case-assist/case-assist-params.js';\nimport type {GetCaseClassificationsRequest} from '../../api/service/case-assist/get-case-classifications/get-case-classifications-request.js';\nimport type {GetCaseClassificationsResponse} from '../../api/service/case-assist/get-case-classifications/get-case-classifications-response.js';\nimport type {\n CaseAssistConfigurationSection,\n CaseFieldSection,\n CaseInputSection,\n ConfigurationSection,\n DebugSection,\n} from '../../state/state-sections.js';\nimport {\n requiredEmptyAllowedString,\n requiredNonEmptyString,\n validatePayload,\n} from '../../utils/validate-payload.js';\n\nexport interface SetCaseFieldActionCreatorPayload {\n /**\n * The name of the field whose value is being updated (e.g., product, category, model)\n */\n fieldName: string;\n /**\n * The value to set in the state.\n */\n fieldValue: string;\n}\n\nexport const registerCaseField = createAction(\n 'caseAssist/caseField/register',\n (payload: SetCaseFieldActionCreatorPayload) =>\n validatePayload(payload, {\n fieldName: requiredNonEmptyString,\n fieldValue: requiredEmptyAllowedString,\n })\n);\n\nexport const updateCaseField = createAction(\n 'caseAssist/caseField/update',\n (payload: SetCaseFieldActionCreatorPayload) =>\n validatePayload(payload, {\n fieldName: requiredNonEmptyString,\n fieldValue: requiredEmptyAllowedString,\n })\n);\n\nexport interface FetchClassificationsThunkReturn {\n /** The successful classifications response. */\n response: GetCaseClassificationsResponse;\n}\n\nexport type StateNeededByFetchClassifications = ConfigurationSection &\n CaseAssistConfigurationSection &\n CaseFieldSection &\n CaseInputSection &\n DebugSection;\n\nexport const fetchCaseClassifications = createAsyncThunk<\n FetchClassificationsThunkReturn,\n void,\n AsyncThunkCaseAssistOptions<StateNeededByFetchClassifications>\n>(\n 'caseAssist/classifications/fetch',\n async (_, {getState, rejectWithValue, extra: {apiClient}}) => {\n const state = getState();\n\n const fetched = await apiClient.getCaseClassifications(\n await buildFetchClassificationRequest(state)\n );\n\n if (isErrorResponse(fetched)) {\n return rejectWithValue(fetched.error);\n }\n\n return {\n response: fetched.success,\n };\n }\n);\nconst buildFetchClassificationRequest = async (\n state: StateNeededByFetchClassifications\n): Promise<GetCaseClassificationsRequest> => ({\n accessToken: state.configuration.accessToken,\n organizationId: state.configuration.organizationId,\n url:\n state.caseAssistConfiguration.apiBaseUrl ??\n getOrganizationEndpoint(\n state.configuration.organizationId,\n state.configuration.environment\n ),\n caseAssistId: state.caseAssistConfiguration.caseAssistId,\n ...(state.configuration.analytics.enabled && {\n clientId: await getVisitorID(state.configuration.analytics),\n }),\n fields: state.caseInput,\n context: state.caseField\n ? prepareContextFromFields(state.caseField.fields)\n : undefined,\n locale: state.caseAssistConfiguration.locale,\n debug: state.debug,\n});\n", "import {isNullOrUndefined} from '@coveo/bueno';\nimport type {AsyncThunkOptions} from '../../app/async-thunk-options.js';\nimport type {ClientThunkExtraArguments} from '../../app/thunk-extra-arguments.js';\nimport {emptyQuestionAnswer} from '../../features/search/search-state.js';\nimport type {SearchAppState} from '../../state/search-app-state.js';\nimport {pickNonBaseParams, unwrapError} from '../api-client-utils.js';\nimport {PlatformClient} from '../platform-client.js';\nimport type {BaseParam} from '../platform-service-params.js';\nimport {APICallsQueue} from './api-calls-queue.js';\nimport type {FacetSearchRequest} from './facet-search/facet-search-request.js';\nimport type {FacetSearchResponse} from './facet-search/facet-search-response.js';\nimport type {\n FieldDescription,\n FieldDescriptionsResponseSuccess,\n} from './fields/fields-response.js';\nimport {getHtml, type HtmlAPIClientOptions} from './html/html-api-client.js';\nimport type {HtmlRequest} from './html/html-request.js';\nimport type {PlanRequest} from './plan/plan-request.js';\nimport type {Plan, PlanResponseSuccess} from './plan/plan-response.js';\nimport type {QuerySuggestRequest} from './query-suggest/query-suggest-request.js';\nimport type {\n QuerySuggest,\n QuerySuggestSuccessResponse,\n} from './query-suggest/query-suggest-response.js';\nimport type {RecommendationRequest} from './recommendation/recommendation-request.js';\nimport type {SearchRequest} from './search/search-request.js';\nimport type {Search, SearchResponseSuccess} from './search/search-response.js';\nimport type {\n PostprocessFacetSearchResponseMiddleware,\n PostprocessQuerySuggestResponseMiddleware,\n PostprocessSearchResponseMiddleware,\n} from './search-api-client-middleware.js';\nimport {\n buildAPIResponseFromErrorOrThrow,\n type SearchAPIErrorWithStatusCode,\n} from './search-api-error-response.js';\nimport {baseSearchRequest} from './search-api-params.js';\nimport type {SearchOrigin} from './search-metadata.js';\n\nexport interface FacetSearchAPIClient {\n facetSearch(req: FacetSearchRequest): Promise<FacetSearchResponse>;\n}\n\nexport interface SearchOptions {\n disableAbortWarning?: boolean;\n origin: SearchOrigin;\n}\n\nexport type AllSearchAPIResponse =\n | Plan\n | Search\n | QuerySuggest\n | FieldDescription;\n\nexport interface AsyncThunkSearchOptions<T extends Partial<SearchAppState>>\n extends AsyncThunkOptions<T, ClientThunkExtraArguments<SearchAPIClient>> {\n rejectValue: SearchAPIErrorWithStatusCode;\n}\n\nexport interface SearchAPIClientOptions extends HtmlAPIClientOptions {\n postprocessSearchResponseMiddleware: PostprocessSearchResponseMiddleware;\n postprocessQuerySuggestResponseMiddleware: PostprocessQuerySuggestResponseMiddleware;\n postprocessFacetSearchResponseMiddleware: PostprocessFacetSearchResponseMiddleware;\n}\n\nexport type SearchAPIClientResponse<T> =\n | {success: T}\n | {error: SearchAPIErrorWithStatusCode};\n\nexport class SearchAPIClient implements FacetSearchAPIClient {\n constructor(private options: SearchAPIClientOptions) {}\n\n async plan(\n req: PlanRequest\n ): Promise<SearchAPIClientResponse<PlanResponseSuccess>> {\n const response = await PlatformClient.call({\n ...baseSearchRequest(req, 'POST', 'application/json', '/plan'),\n requestParams: pickNonBaseParams(req),\n requestMetadata: {method: 'plan'},\n ...this.options,\n });\n\n if (response instanceof Error) {\n return buildAPIResponseFromErrorOrThrow(response);\n }\n\n const body = await response.json();\n\n if (isSuccessPlanResponse(body)) {\n return {success: body};\n }\n\n return {\n error: unwrapError({response, body}),\n };\n }\n\n async querySuggest(\n req: QuerySuggestRequest\n ): Promise<SearchAPIClientResponse<QuerySuggestSuccessResponse>> {\n const response = await PlatformClient.call({\n ...baseSearchRequest(req, 'POST', 'application/json', '/querySuggest'),\n requestMetadata: {method: 'querySuggest'},\n requestParams: pickNonBaseParams(req),\n ...this.options,\n });\n\n if (response instanceof Error) {\n return buildAPIResponseFromErrorOrThrow(response);\n }\n\n const body = await response.json();\n const payload = {response, body};\n\n if (isSuccessQuerySuggestionsResponse(body)) {\n const processedResponse =\n await this.options.postprocessQuerySuggestResponseMiddleware(payload);\n return {\n success: processedResponse.body,\n };\n }\n return {\n error: unwrapError(payload),\n };\n }\n\n private apiCallsQueues: Record<SearchOrigin | 'unknown', APICallsQueue> = {\n unknown: new APICallsQueue(),\n mainSearch: new APICallsQueue(),\n facetValues: new APICallsQueue(),\n foldingCollection: new APICallsQueue(),\n instantResults: new APICallsQueue(),\n };\n\n async search(\n req: SearchRequest,\n options?: SearchOptions\n ): Promise<SearchAPIClientResponse<SearchResponseSuccess>> {\n const origin = options?.origin ?? 'unknown';\n\n const response = await this.apiCallsQueues[origin].enqueue(\n (signal) =>\n PlatformClient.call({\n ...baseSearchRequest(req, 'POST', 'application/json', ''),\n requestParams: pickNonBaseParams(req),\n requestMetadata: {method: 'search', origin: options?.origin},\n ...this.options,\n signal: signal ?? undefined,\n }),\n {logger: this.options.logger, warnOnAbort: !options?.disableAbortWarning}\n );\n\n if (response instanceof Error) {\n return buildAPIResponseFromErrorOrThrow(\n response,\n options?.disableAbortWarning\n );\n }\n\n const body = await response.json();\n const payload = {response, body};\n\n if (isSuccessSearchResponse(body)) {\n payload.body = shimResponse(body);\n const processedResponse =\n await this.options.postprocessSearchResponseMiddleware(payload);\n return {\n success: processedResponse.body,\n };\n }\n\n return {\n error: unwrapError(payload),\n };\n }\n\n async facetSearch(req: FacetSearchRequest) {\n const response = await PlatformClient.call({\n ...baseSearchRequest(req, 'POST', 'application/json', '/facet'),\n requestParams: pickNonBaseParams(req),\n requestMetadata: {method: 'facetSearch'},\n ...this.options,\n });\n\n if (response instanceof Error) {\n throw response;\n }\n\n const body = await response.json();\n const payload = {response, body};\n\n const processedResponse =\n await this.options.postprocessFacetSearchResponseMiddleware(payload);\n\n return processedResponse.body;\n }\n\n async recommendations(req: RecommendationRequest) {\n const response = await PlatformClient.call({\n ...baseSearchRequest(req, 'POST', 'application/json', ''),\n requestParams: pickNonBaseParams(req),\n requestMetadata: {method: 'recommendations'},\n ...this.options,\n });\n\n if (response instanceof Error) {\n throw response;\n }\n\n const body = await response.json();\n\n if (isSuccessSearchResponse(body)) {\n const payload = {response, body};\n payload.body = shimResponse(body);\n const processedResponse =\n await this.options.postprocessSearchResponseMiddleware(payload);\n return {\n success: processedResponse.body,\n };\n }\n\n return {\n error: unwrapError({response, body}),\n };\n }\n\n async html(req: HtmlRequest) {\n return getHtml(req, {...this.options});\n }\n\n async fieldDescriptions(req: BaseParam) {\n const response = await PlatformClient.call({\n ...baseSearchRequest(req, 'GET', 'application/json', '/fields'),\n requestParams: {},\n requestMetadata: {method: 'fieldDescriptions'},\n ...this.options,\n });\n if (response instanceof Error) {\n throw response;\n }\n const body = await response.json();\n\n if (isSuccessFieldsDescriptionResponse(body)) {\n return {success: body};\n }\n\n return {\n error: unwrapError({response, body}),\n };\n }\n}\n\nexport const isSuccessResponse = <T>(\n r: SearchAPIClientResponse<T>\n): r is {success: T} => {\n return (r as {success: T}).success !== undefined;\n};\n\nexport const isErrorResponse = <T>(\n r: SearchAPIClientResponse<T>\n): r is {error: SearchAPIErrorWithStatusCode} => {\n return (r as {error: SearchAPIErrorWithStatusCode}).error !== undefined;\n};\n\nexport function isSuccessSearchResponse(\n body: unknown\n): body is SearchResponseSuccess {\n return (body as SearchResponseSuccess).results !== undefined;\n}\n\nexport function shimResponse(response: SearchResponseSuccess) {\n const empty = emptyQuestionAnswer();\n if (isNullOrUndefined(response.questionAnswer)) {\n response.questionAnswer = empty;\n return response;\n }\n\n response.questionAnswer = {...empty, ...response.questionAnswer};\n return response;\n}\n\nfunction isSuccessQuerySuggestionsResponse(\n body: unknown\n): body is QuerySuggestSuccessResponse {\n return (body as QuerySuggestSuccessResponse).completions !== undefined;\n}\n\nfunction isSuccessPlanResponse(body: unknown): body is PlanResponseSuccess {\n return (body as PlanResponseSuccess).preprocessingOutput !== undefined;\n}\n\nfunction isSuccessFieldsDescriptionResponse(\n body: unknown\n): body is FieldDescriptionsResponseSuccess {\n return (body as FieldDescriptionsResponseSuccess).fields !== undefined;\n}\n", "import type {Logger} from 'pino';\n\nexport class APICallsQueue {\n private currentAbortController: AbortController | null = null;\n\n /**\n * Enqueue an API call so that it can get cancelled if another call is enqueued before it finishes.\n */\n public async enqueue<T>(\n call: (signal: AbortSignal | null) => Promise<T>,\n options: {logger: Logger; warnOnAbort: boolean}\n ) {\n const lastAbortController = this.currentAbortController;\n this.currentAbortController = new AbortController();\n const abortController = this.currentAbortController;\n if (lastAbortController) {\n if (options.warnOnAbort) {\n options.logger.warn('Cancelling current pending search query');\n }\n lastAbortController.abort();\n }\n try {\n return await call(abortController?.signal ?? null);\n } finally {\n if (this.currentAbortController === abortController) {\n this.currentAbortController = null;\n }\n }\n }\n}\n", "import {createReducer} from '@reduxjs/toolkit';\nimport {setError} from '../error/error-actions.js';\nimport {\n fetchCaseClassifications,\n registerCaseField,\n updateCaseField,\n} from './case-field-actions.js';\nimport {getCaseFieldInitialState} from './case-field-state.js';\n\nexport const caseFieldReducer = createReducer(\n getCaseFieldInitialState(),\n\n (builder) => {\n builder\n .addCase(registerCaseField, (state, action) => {\n const {fieldName, fieldValue} = action.payload;\n state.fields[fieldName] = {\n value: fieldValue,\n suggestions: [],\n };\n })\n .addCase(updateCaseField, (state, action) => {\n const {fieldName, fieldValue} = action.payload;\n state.fields[fieldName].value = fieldValue;\n })\n .addCase(fetchCaseClassifications.rejected, (state, action) => {\n state.status.error = action.payload ?? null;\n state.status.loading = false;\n })\n .addCase(fetchCaseClassifications.fulfilled, (state, action) => {\n const defaultField = {value: '', suggestions: []};\n Object.entries(action.payload.response.fields).forEach(\n ([fieldName, content]) => {\n if (!state.fields[fieldName]) {\n state.fields[fieldName] = {...defaultField};\n }\n\n state.fields[fieldName].suggestions = content.predictions;\n }\n );\n state.status.lastResponseId = action.payload.response.responseId;\n state.status.error = null;\n state.status.loading = false;\n })\n .addCase(fetchCaseClassifications.pending, (state) => {\n state.status.loading = true;\n })\n .addCase(setError, (state, action) => {\n state.status.error = action.payload;\n state.status.loading = false;\n });\n }\n);\n", "import type {CaseAssistAPIErrorStatusResponse} from '../../api/service/case-assist/case-assist-api-client.js';\n\nexport const getCaseFieldInitialState = (): CaseFieldState => ({\n status: {\n loading: false,\n error: null,\n lastResponseId: '',\n },\n fields: {},\n});\n\ninterface CaseFieldStatus {\n /**\n * `true` if a request is in progress and `false` otherwise.\n */\n loading: boolean;\n /**\n * The Case Assist API error response.\n */\n error: CaseAssistAPIErrorStatusResponse | null;\n /**\n * The ID of the response.\n */\n lastResponseId: string;\n}\n\nexport interface CaseFieldSuggestion {\n /**\n * The ID of the suggestion.\n */\n id: string;\n /**\n * The suggested field value.\n */\n value: string;\n /**\n * The confidence value of the suggestion in decimal.\n */\n confidence: number;\n}\n\ninterface CaseField {\n /**\n * The field to predict.\n */\n value: string;\n /**\n * The field value suggestions returned from the Coveo Customer Service API.\n */\n suggestions: CaseFieldSuggestion[];\n}\n\nexport interface CaseFieldState {\n /**\n * The status of the case fields classification request.\n */\n status: CaseFieldStatus;\n /**\n * The case fields for which classifications are retrieved.\n */\n fields: {\n [fieldName: string]: CaseField;\n };\n}\n", "import {createReducer} from '@reduxjs/toolkit';\nimport {updateCaseInput} from './case-input-actions.js';\nimport {getCaseInputInitialState} from './case-input-state.js';\n\nexport const caseInputReducer = createReducer(\n getCaseInputInitialState(),\n\n (builder) => {\n builder.addCase(updateCaseInput, (state, action) => {\n state[action.payload.fieldName] = {\n value: action.payload.fieldValue,\n };\n });\n }\n);\n", "import {createAction} from '@reduxjs/toolkit';\nimport {\n requiredEmptyAllowedString,\n requiredNonEmptyString,\n validatePayload,\n} from '../../utils/validate-payload.js';\n\nexport interface SetCaseInputActionCreatorPayload {\n /**\n * The name of the field whose value is being updated (e.g., subject, description, product, category).\n */\n fieldName: string;\n /**\n * The value to set in the state.\n */\n fieldValue: string;\n}\n\nexport const updateCaseInput = createAction(\n 'caseAssist/caseInput/update',\n (payload: SetCaseInputActionCreatorPayload) =>\n validatePayload(payload, {\n fieldName: requiredNonEmptyString,\n fieldValue: requiredEmptyAllowedString,\n })\n);\n", "export const getCaseInputInitialState = (): CaseInputState => ({});\n\ninterface CaseInput {\n value: string;\n}\n\nexport interface CaseInputState {\n [fieldName: string]: CaseInput;\n}\n", "import {createAsyncThunk} from '@reduxjs/toolkit';\nimport {getVisitorID} from '../../api/analytics/coveo-analytics-utils.js';\nimport {getOrganizationEndpoint} from '../../api/platform-client.js';\nimport {isErrorResponse} from '../../api/search/search-api-client.js';\nimport type {AsyncThunkCaseAssistOptions} from '../../api/service/case-assist/case-assist-api-client.js';\nimport {prepareContextFromFields} from '../../api/service/case-assist/case-assist-params.js';\nimport type {GetDocumentSuggestionsRequest} from '../../api/service/case-assist/get-document-suggestions/get-document-suggestions-request.js';\nimport type {GetDocumentSuggestionsResponse} from '../../api/service/case-assist/get-document-suggestions/get-document-suggestions-response.js';\nimport type {NavigatorContext} from '../../app/navigator-context-provider.js';\nimport type {\n CaseAssistConfigurationSection,\n CaseFieldSection,\n CaseInputSection,\n ConfigurationSection,\n DebugSection,\n DocumentSuggestionSection,\n} from '../../state/state-sections.js';\nimport {SearchPageEvents} from '../analytics/search-action-cause.js';\nimport {fromAnalyticsStateToAnalyticsParams} from '../configuration/analytics-params.js';\n\nexport interface FetchDocumentSuggestionsThunkReturn {\n /** The successful document suggestions response. */\n response: GetDocumentSuggestionsResponse;\n}\n\nexport type StateNeededByFetchDocumentSuggestions = ConfigurationSection &\n CaseAssistConfigurationSection &\n DocumentSuggestionSection &\n CaseInputSection &\n CaseFieldSection &\n DebugSection;\n\nexport const fetchDocumentSuggestions = createAsyncThunk<\n FetchDocumentSuggestionsThunkReturn,\n void,\n AsyncThunkCaseAssistOptions<StateNeededByFetchDocumentSuggestions>\n>(\n 'caseAssist/documentSuggestions/fetch',\n async (\n _,\n {getState, rejectWithValue, extra: {apiClient, navigatorContext}}\n ) => {\n const state = getState();\n\n const fetched = await apiClient.getDocumentSuggestions(\n await buildFetchDocumentSuggestionsRequest(state, navigatorContext)\n );\n\n if (isErrorResponse(fetched)) {\n return rejectWithValue(fetched.error);\n }\n\n return {\n response: fetched.success,\n };\n }\n);\n\nexport const buildFetchDocumentSuggestionsRequest = async (\n state: StateNeededByFetchDocumentSuggestions,\n navigatorContext: NavigatorContext\n): Promise<GetDocumentSuggestionsRequest> => ({\n accessToken: state.configuration.accessToken,\n organizationId: state.configuration.organizationId,\n url:\n state.caseAssistConfiguration.apiBaseUrl ??\n getOrganizationEndpoint(\n state.configuration.organizationId,\n state.configuration.environment\n ),\n caseAssistId: state.caseAssistConfiguration.caseAssistId,\n ...(state.configuration.analytics.enabled && {\n clientId: await getVisitorID(state.configuration.analytics),\n }),\n ...(state.configuration.analytics.enabled &&\n fromAnalyticsStateToAnalyticsParams(\n state.configuration.analytics,\n navigatorContext,\n {\n actionCause: SearchPageEvents.documentSuggestion,\n }\n )),\n fields: state.caseInput,\n context: state.caseField\n ? prepareContextFromFields(state.caseField.fields)\n : undefined,\n locale: state.caseAssistConfiguration.locale,\n debug: state.debug,\n});\n", "import {createReducer} from '@reduxjs/toolkit';\nimport {setError} from '../error/error-actions.js';\nimport {fetchDocumentSuggestions} from './document-suggestion-actions.js';\nimport {getDocumentSuggestionInitialState} from './document-suggestion-state.js';\n\nexport const documentSuggestionReducer = createReducer(\n getDocumentSuggestionInitialState(),\n\n (builder) => {\n builder\n .addCase(fetchDocumentSuggestions.rejected, (state, action) => {\n state.status.error = action.payload ?? null;\n state.status.loading = false;\n })\n .addCase(fetchDocumentSuggestions.fulfilled, (state, action) => {\n state.documents = action.payload.response.documents;\n state.status.lastResponseId = action.payload.response.responseId;\n state.status.error = null;\n state.status.loading = false;\n })\n .addCase(fetchDocumentSuggestions.pending, (state) => {\n state.status.loading = true;\n })\n .addCase(setError, (state, action) => {\n state.status.error = action.payload;\n state.status.loading = false;\n });\n }\n);\n", "import type {CaseAssistAPIErrorStatusResponse} from '../../api/service/case-assist/case-assist-api-client.js';\nimport type {DocumentSuggestionResponse} from '../../api/service/case-assist/get-document-suggestions/get-document-suggestions-response.js';\n\nexport const getDocumentSuggestionInitialState =\n (): DocumentSuggestionState => ({\n status: {\n loading: false,\n error: null,\n lastResponseId: '',\n },\n documents: [],\n });\n\ninterface DocumentSuggestionStatus {\n /**\n * `true` if a request is in progress and `false` otherwise.\n */\n loading: boolean;\n /**\n * The Case Assist API error response.\n */\n error: CaseAssistAPIErrorStatusResponse | null;\n /**\n * The ID of the response.\n */\n lastResponseId: string;\n}\n\nexport interface DocumentSuggestionState {\n /**\n * The status of the document suggestions request.\n */\n status: DocumentSuggestionStatus;\n /**\n * The retrieved document suggestions.\n */\n documents: DocumentSuggestionResponse[];\n}\n", "import type {Unsubscribe} from '@reduxjs/toolkit';\nimport type {CoreEngine, CoreEngineNext} from '../../app/engine.js';\n\nexport interface Subscribable {\n /**\n * Adds a callback that's invoked on state change.\n *\n * @param listener A callback that's invoked on state change.\n * @returns A function to remove the listener.\n */\n subscribe(listener: () => void): Unsubscribe;\n}\n\nexport interface Controller extends Subscribable {\n readonly state: {};\n}\n\nexport function buildController<T extends object>(\n engine: CoreEngine<T> | CoreEngineNext<T>\n): Controller {\n let prevState: string;\n const listeners: Map<Symbol, () => void> = new Map();\n const hasNoListeners = () => listeners.size === 0;\n\n const hasStateChanged = (currentState: Record<string, unknown>): boolean => {\n try {\n const stringifiedState = JSON.stringify(currentState);\n const hasChanged = prevState !== stringifiedState;\n prevState = stringifiedState;\n return hasChanged;\n } catch (e) {\n console.warn(\n 'Could not detect if state has changed, check the controller \"get state method\"',\n e\n );\n return true;\n }\n };\n\n return {\n subscribe(listener: () => void) {\n listener();\n const symbol = Symbol();\n let unsubscribe: () => void;\n\n if (hasNoListeners()) {\n prevState = JSON.stringify(this.state);\n unsubscribe = engine.subscribe(() => {\n if (hasStateChanged(this.state)) {\n listeners.forEach((listener) => listener());\n }\n });\n }\n listeners.set(symbol, listener);\n\n return () => {\n listeners.delete(symbol);\n if (hasNoListeners()) {\n unsubscribe?.();\n }\n };\n },\n\n get state() {\n return {};\n },\n };\n}\n", "import {Schema} from '@coveo/bueno';\nimport type {CaseAssistEngine} from '../../app/case-assist-engine/case-assist-engine.js';\nimport {configuration} from '../../app/common-reducers.js';\nimport {logUpdateCaseField} from '../../features/case-assist/case-assist-analytics-actions.js';\nimport {caseAssistConfigurationReducer as caseAssistConfiguration} from '../../features/case-assist-configuration/case-assist-configuration-slice.js';\nimport {fetchCaseClassifications} from '../../features/case-field/case-field-actions.js';\nimport {caseFieldReducer as caseField} from '../../features/case-field/case-field-slice.js';\nimport {updateCaseInput} from '../../features/case-input/case-input-actions.js';\nimport {caseInputReducer as caseInput} from '../../features/case-input/case-input-slice.js';\nimport {fetchDocumentSuggestions} from '../../features/document-suggestion/document-suggestion-actions.js';\nimport {documentSuggestionReducer as documentSuggestion} from '../../features/document-suggestion/document-suggestion-slice.js';\nimport type {\n CaseAssistConfigurationSection,\n CaseFieldSection,\n CaseInputSection,\n ConfigurationSection,\n DocumentSuggestionSection,\n} from '../../state/state-sections.js';\nimport {loadReducerError} from '../../utils/errors.js';\nimport {\n requiredNonEmptyString,\n validateOptions,\n} from '../../utils/validate-payload.js';\nimport {\n buildController,\n type Controller,\n} from '../controller/headless-controller.js';\n\nexport interface CaseInputOptions {\n field: string;\n}\n\nexport interface CaseInputProps {\n options: CaseInputOptions;\n}\n\nfunction validateCaseInputOptions(\n engine: CaseAssistEngine,\n options: Partial<CaseInputOptions> | undefined\n) {\n const schema = new Schema<CaseInputOptions>({\n field: requiredNonEmptyString,\n });\n validateOptions(engine, schema, options, 'buildCaseInput');\n}\n\nexport interface UpdateFetchOptions {\n caseClassifications?: boolean;\n documentSuggestions?: boolean;\n}\n\n/**\n * The `CaseInput` controller is responsible for setting and retrieving the value of a single field from the case creation form and optionally trigger Case Assist API requests.\n *\n * For example implementations, see the following [Coveo Quantic Case Assist components](https://docs.coveo.com/en/quantic/latest/reference/case-assist-components/):\n * * [quanticCaseClassification.js](https://github.com/coveo/ui-kit/blob/main/packages/quantic/force-app/main/default/lwc/quanticCaseClassification/quanticCaseClassification.js)\n * * [quanticDocumentSuggestion](https://github.com/coveo/ui-kit/blob/main/packages/quantic/force-app/main/default/lwc/quanticDocumentSuggestion/quanticDocumentSuggestion.js)\n *\n * @group Controllers\n * @category CaseInput\n */\nexport interface CaseInput extends Controller {\n /**\n * Sets the value of the specified field.\n *\n * @param value - The case input value to set.\n * @param updatesToFetch - A set of flags dictating whether to fetch case assist data after updating the input value.\n */\n update(value: string, updatesToFetch?: UpdateFetchOptions): void;\n /**\n * A scoped and simplified part of the headless state that is relevant to the `CaseInput` controller.\n */\n state: CaseInputState;\n}\n\n/**\n * A scoped and simplified part of the headless state that is relevant to the `CaseInput` controller.\n *\n * @group Controllers\n * @category CaseInput\n */\nexport interface CaseInputState {\n /**\n * The value of the case input.\n */\n value: string;\n}\n\n/**\n * Creates a `Case Input` controller instance.\n *\n * @param engine - The headless engine.\n * @param props - The configurable `CaseInput` controller properties.\n * @returns A `CaseInput` controller instance.\n *\n * @group Controllers\n * @category CaseInput\n */\nexport function buildCaseInput(\n engine: CaseAssistEngine,\n props: CaseInputProps\n): CaseInput {\n if (!loadCaseInputReducers(engine)) {\n throw loadReducerError;\n }\n\n const controller = buildController(engine);\n const {dispatch} = engine;\n const getState = () => engine.state;\n\n validateCaseInputOptions(engine, props.options);\n\n const fieldName = props.options.field;\n const isRegistered = getState().caseInput?.[fieldName];\n\n if (!isRegistered) {\n dispatch(\n updateCaseInput({\n fieldName: fieldName,\n fieldValue: '',\n })\n );\n }\n\n return {\n ...controller,\n\n update(\n value: string,\n updatesToFetch?: {\n caseClassifications?: boolean;\n documentSuggestions?: boolean;\n }\n ) {\n dispatch(\n updateCaseInput({\n fieldName: fieldName,\n fieldValue: value,\n })\n );\n dispatch(logUpdateCaseField(fieldName));\n\n updatesToFetch?.caseClassifications &&\n dispatch(fetchCaseClassifications());\n updatesToFetch?.documentSuggestions &&\n dispatch(fetchDocumentSuggestions());\n },\n\n get state() {\n return getState().caseInput[fieldName];\n },\n };\n}\n\nfunction loadCaseInputReducers(\n engine: CaseAssistEngine\n): engine is CaseAssistEngine<\n ConfigurationSection &\n CaseAssistConfigurationSection &\n CaseInputSection &\n CaseFieldSection &\n DocumentSuggestionSection\n> {\n engine.addReducers({\n configuration,\n caseAssistConfiguration,\n caseInput,\n caseField,\n documentSuggestion,\n });\n return true;\n}\n", "import type {Result} from '../../api/search/search/result.js';\nimport type {CaseAssistEngine} from '../../app/case-assist-engine/case-assist-engine.js';\nimport {logDocumentSuggestionOpen} from '../../features/case-assist/case-assist-analytics-actions.js';\nimport {\n buildInteractiveResultCore,\n type InteractiveResultCore,\n type InteractiveResultCoreOptions,\n type InteractiveResultCoreProps,\n} from '../core/interactive-result/headless-core-interactive-result.js';\n\nexport type {\n InteractiveResultCore,\n InteractiveResultCoreOptions,\n InteractiveResultCoreProps,\n};\nexport interface CaseAssistInteractiveResultOptions\n extends InteractiveResultCoreOptions {\n /**\n * The query result.\n */\n result: Result;\n}\n\nexport interface CaseAssistInteractiveResultProps\n extends InteractiveResultCoreProps {\n /**\n * The options for the `CaseAssistInteractiveResult` controller.\n * */\n options: CaseAssistInteractiveResultOptions;\n}\n\n/**\n * The `CaseAssistInteractiveResult` controller provides an interface for triggering desirable side effects, such as logging UA events to the Coveo Platform, when a user selects a query result.\n *\n * For example implementations, see the following [Coveo Quantic Case Assist components](https://docs.coveo.com/en/quantic/latest/reference/case-assist-components/):\n * * [quanticCaseClassification.js](https://github.com/coveo/ui-kit/blob/main/packages/quantic/force-app/main/default/lwc/quanticCaseClassification/quanticCaseClassification.js)\n * * [quanticDocumentSuggestion](https://github.com/coveo/ui-kit/blob/main/packages/quantic/force-app/main/default/lwc/quanticDocumentSuggestion/quanticDocumentSuggestion.js)\n *\n * @group Controllers\n * @category CaseAssistInteractiveResult\n */\nexport interface CaseAssistInteractiveResult extends InteractiveResultCore {}\n\n/**\n * Creates a `CaseAssistInteractiveResult` controller instance.\n *\n * @param engine - The headless engine.\n * @param props - The configurable `CaseAssistInteractiveResult` properties.\n * @returns A `CaseAssistInteractiveResult` controller instance.\n *\n * @group Controllers\n * @category CaseAssistInteractiveResult\n */\nexport function buildCaseAssistInteractiveResult(\n engine: CaseAssistEngine,\n props: CaseAssistInteractiveResultProps\n): CaseAssistInteractiveResult {\n let wasOpened = false;\n\n const logAnalyticsIfNeverOpened = () => {\n if (wasOpened) {\n return;\n }\n wasOpened = true;\n engine.dispatch(logDocumentSuggestionOpen(props.options.result.uniqueId));\n };\n\n return buildInteractiveResultCore(engine, props, logAnalyticsIfNeverOpened);\n}\n", "import {debounce} from 'ts-debounce';\nimport {configuration} from '../../../app/common-reducers.js';\nimport type {CoreEngine, CoreEngineNext} from '../../../app/engine.js';\nimport type {ConfigurationSection} from '../../../state/state-sections.js';\nimport {loadReducerError} from '../../../utils/errors.js';\n\nexport interface InteractiveResultCoreOptions {\n /**\n * The amount of time to wait before selecting the result after calling `beginDelayedSelect`.\n *\n * @defaultValue `1000`\n */\n selectionDelay?: number;\n\n /**\n * The number of seconds for which the debounced function should continue catching subsequent calls.\n *\n * @defaultValue `1000`\n */\n debounceWait?: number;\n}\n\nexport interface InteractiveResultCoreProps {\n /**\n * The options for the result controller core.\n */\n options: InteractiveResultCoreOptions;\n}\n\n/**\n * The `InteractiveResultCore` manages common functionality for interactive result controllers.\n */\nexport interface InteractiveResultCore {\n /**\n * Selects the result, logging an analytics event to the Coveo Platform if the result wasn't selected before.\n *\n * In a DOM context, it's recommended to call this method on all of the following events:\n *\n * * `contextmenu`\n * * `click`\n * * `mouseup`\n * * `mousedown`\n */\n select(): void;\n\n /**\n * Prepares to select the result after a certain delay, logging an analytics event if the result wasn't selected before.\n *\n * In a DOM context, it's recommended to call this method on the `touchstart` event.\n */\n beginDelayedSelect(): void;\n\n /**\n * Cancels the pending selection caused by `beginDelayedSelect`.\n *\n * In a DOM context, it's recommended to call this method on the `touchend` event.\n */\n cancelPendingSelect(): void;\n}\n\n/**\n * Creates the result controller core.\n *\n * @param engine - The headless engine.\n * @param props - The configurable controller properties.\n * @param action - The action to be triggered on select.\n * @returns A controller core instance.\n */\nexport function buildInteractiveResultCore(\n engine: CoreEngine | CoreEngineNext,\n props: InteractiveResultCoreProps,\n action: () => void\n): InteractiveResultCore {\n if (!loadInteractiveResultCoreReducers(engine)) {\n throw loadReducerError;\n }\n\n // 1 second is a reasonable amount of time to catch most longpress actions.\n const defaultDelay = 1000;\n const options: Required<InteractiveResultCoreOptions> = {\n selectionDelay: defaultDelay,\n debounceWait: defaultDelay,\n ...props.options,\n };\n\n let longPressTimer: NodeJS.Timeout;\n\n return {\n select: debounce(action, options.debounceWait, {isImmediate: true}),\n\n beginDelayedSelect() {\n longPressTimer = setTimeout(action, options.selectionDelay);\n },\n\n cancelPendingSelect() {\n longPressTimer && clearTimeout(longPressTimer);\n },\n };\n}\n\nfunction loadInteractiveResultCoreReducers(\n engine: CoreEngine | CoreEngineNext\n): engine is\n | CoreEngine<ConfigurationSection>\n | CoreEngineNext<ConfigurationSection> {\n engine.addReducers({configuration});\n return true;\n}\n", "import type {CaseAssistAPIErrorStatusResponse} from '../../api/service/case-assist/case-assist-api-client.js';\nimport type {DocumentSuggestionResponse} from '../../api/service/case-assist/get-document-suggestions/get-document-suggestions-response.js';\nimport type {CaseAssistEngine} from '../../app/case-assist-engine/case-assist-engine.js';\nimport {configuration} from '../../app/common-reducers.js';\nimport {caseAssistConfigurationReducer as caseAssistConfiguration} from '../../features/case-assist-configuration/case-assist-configuration-slice.js';\nimport {caseFieldReducer as caseField} from '../../features/case-field/case-field-slice.js';\nimport {caseInputReducer as caseInput} from '../../features/case-input/case-input-slice.js';\nimport {fetchDocumentSuggestions} from '../../features/document-suggestion/document-suggestion-actions.js';\nimport {documentSuggestionReducer as documentSuggestion} from '../../features/document-suggestion/document-suggestion-slice.js';\nimport type {\n CaseAssistConfigurationSection,\n CaseFieldSection,\n CaseInputSection,\n ConfigurationSection,\n DocumentSuggestionSection,\n} from '../../state/state-sections.js';\nimport {loadReducerError} from '../../utils/errors.js';\nimport {\n buildController,\n type Controller,\n} from '../controller/headless-controller.js';\n\n/**\n * The `DocumentSuggestion` controller is responsible for getting document suggestions using case information present in the state.\n *\n * For example implementations, see the following [Coveo Quantic Case Assist components](https://docs.coveo.com/en/quantic/latest/reference/case-assist-components/):\n * * [quanticCaseClassification.js](https://github.com/coveo/ui-kit/blob/main/packages/quantic/force-app/main/default/lwc/quanticCaseClassification/quanticCaseClassification.js)\n * * [quanticDocumentSuggestion](https://github.com/coveo/ui-kit/blob/main/packages/quantic/force-app/main/default/lwc/quanticDocumentSuggestion/quanticDocumentSuggestion.js)\n *\n * @group Controllers\n * @category DocumentSuggestionList\n */\nexport interface DocumentSuggestionList extends Controller {\n /**\n * Fetches document suggestions using case information present in the state.\n */\n fetch(): void;\n /**\n * A scoped and simplified part of the headless state that is relevant to the `DocumentSuggestionList` controller.\n */\n state: DocumentSuggestionListState;\n}\n\n/**\n * A scoped and simplified part of the headless state that is relevant to the `DocumentSuggestionList` controller.\n *\n * @group Controllers\n * @category DocumentSuggestionList\n */\nexport interface DocumentSuggestionListState {\n /**\n * Whether document suggestions are being retrieved.\n */\n loading: boolean;\n /**\n * The Case Assist API error response.\n */\n error: CaseAssistAPIErrorStatusResponse | null;\n /**\n * The retrieved document suggestions.\n */\n documents: DocumentSuggestionResponse[];\n}\n\n/**\n * Creates a `Document Suggestion List` controller instance.\n *\n * @param engine - The headless engine.\n * @returns A `DocumentSuggestionList` controller instance.\n *\n * @group Controllers\n * @category DocumentSuggestionList\n */\nexport function buildDocumentSuggestionList(\n engine: CaseAssistEngine\n): DocumentSuggestionList {\n if (!loadDocumentSuggestionListReducers(engine)) {\n throw loadReducerError;\n }\n\n const controller = buildController(engine);\n const {dispatch} = engine;\n const getState = () => engine.state;\n\n return {\n ...controller,\n\n fetch() {\n dispatch(fetchDocumentSuggestions());\n },\n\n get state() {\n const state = getState().documentSuggestion;\n return {\n loading: state.status.loading,\n error: state.status.error,\n documents: state.documents,\n };\n },\n };\n}\n\nfunction loadDocumentSuggestionListReducers(\n engine: CaseAssistEngine\n): engine is CaseAssistEngine<\n ConfigurationSection &\n CaseAssistConfigurationSection &\n CaseInputSection &\n CaseFieldSection &\n DocumentSuggestionSection\n> {\n engine.addReducers({\n configuration,\n caseAssistConfiguration,\n caseInput,\n caseField,\n documentSuggestion,\n });\n return true;\n}\n", "import type {CaseAssistAPIClient} from '../../api/service/case-assist/case-assist-api-client.js';\nimport type {CaseAssistEngine} from '../../app/case-assist-engine/case-assist-engine.js';\nimport type {CoreEngine} from '../../app/engine.js';\nimport type {ClientThunkExtraArguments} from '../../app/thunk-extra-arguments.js';\nimport {logQuickviewDocumentSuggestionClick} from '../../features/case-assist/case-assist-analytics-actions.js';\nimport {documentSuggestionReducer as documentSuggestion} from '../../features/document-suggestion/document-suggestion-slice.js';\nimport {preparePreviewPagination} from '../../features/result-preview/result-preview-actions.js';\nimport {buildResultPreviewRequest} from '../../features/result-preview/result-preview-request-builder.js';\nimport type {DocumentSuggestionSection} from '../../state/state-sections.js';\nimport {loadReducerError} from '../../utils/errors.js';\nimport {\n buildCoreQuickview,\n type Quickview,\n type QuickviewOptions,\n type QuickviewProps,\n type QuickviewState,\n} from '../core/quickview/headless-core-quickview.js';\n\nexport interface CaseAssistQuickviewProps extends QuickviewProps {}\n\nexport interface CaseAssistQuickviewOptions extends QuickviewOptions {}\n\n/**\n * The `CaseAssistQuickview` controller provides an interface for triggering desirable side effects, such as logging UA events to the Coveo Platform, when a user interacts with a quickview.\n *\n * For example implementations, see the following [Coveo Quantic Case Assist components](https://docs.coveo.com/en/quantic/latest/reference/case-assist-components/):\n * * [quanticCaseClassification.js](https://github.com/coveo/ui-kit/blob/main/packages/quantic/force-app/main/default/lwc/quanticCaseClassification/quanticCaseClassification.js)\n * * [quanticDocumentSuggestion](https://github.com/coveo/ui-kit/blob/main/packages/quantic/force-app/main/default/lwc/quanticDocumentSuggestion/quanticDocumentSuggestion.js)\n *\n * @group Controllers\n * @category CaseAssistQuickview\n */\nexport interface CaseAssistQuickview extends Quickview {\n state: CaseAssistQuickviewState;\n}\n\n/**\n * A scoped and simplified part of the headless state that is relevant to the `CaseAssistQuickview` controller.\n *\n * @group Controllers\n * @category CaseAssistQuickview\n */\nexport interface CaseAssistQuickviewState extends QuickviewState {\n /**\n * The number of available document for the current document set.\n *\n * Can be used for quickview pagination purpose.\n */\n totalDocuments: number;\n /**\n * The position of the document in the current document set.\n *\n * Can be used for quickview pagination purpose.\n */\n currentDocument: number;\n}\n\n/**\n * Creates a `CaseAssistQuickview` controller instance.\n *\n * @param engine - The headless engine.\n * @param props - The configurable `CaseAssistQuickview` properties.\n * @returns A `CaseAssistQuickview` controller instance.\n *\n * @group Controllers\n * @category CaseAssistQuickview\n */\nexport function buildCaseAssistQuickview(\n engine: CaseAssistEngine,\n props: CaseAssistQuickviewProps\n): CaseAssistQuickview {\n if (!loadSearchQuickviewReducers(engine)) {\n throw loadReducerError;\n }\n\n const {dispatch} = engine;\n const getState = () => engine.state;\n const getDocuments = () => getState().documentSuggestion.documents;\n\n const fetchResultContentCallback = () => {\n engine.dispatch(\n logQuickviewDocumentSuggestionClick(props.options.result.uniqueId)\n );\n };\n const path = '/html';\n\n const core = buildCoreQuickview(\n engine,\n props,\n buildResultPreviewRequest,\n path,\n fetchResultContentCallback\n );\n\n dispatch(\n preparePreviewPagination({\n results: getDocuments(),\n })\n );\n\n return {\n ...core,\n get state() {\n return {\n ...core.state,\n currentDocument:\n getDocuments().findIndex(\n (r) => r.uniqueId === core.state.currentResultUniqueId\n ) + 1,\n totalDocuments: getDocuments().length,\n };\n },\n };\n}\n\nfunction loadSearchQuickviewReducers(\n engine: CoreEngine\n): engine is CoreEngine<\n DocumentSuggestionSection,\n ClientThunkExtraArguments<CaseAssistAPIClient>\n> {\n engine.addReducers({documentSuggestion});\n return true;\n}\n", "import {ArrayValue} from '@coveo/bueno';\nimport {createAction, createAsyncThunk} from '@reduxjs/toolkit';\nimport {\n buildContentURL,\n type HtmlApiClient,\n} from '../../api/search/html/html-api-client.js';\nimport type {\n HtmlRequest,\n HtmlRequestOptions,\n} from '../../api/search/html/html-request.js';\nimport type {Result} from '../../api/search/search/result.js';\nimport {isErrorResponse} from '../../api/search/search-api-client.js';\nimport type {SearchAPIErrorWithStatusCode} from '../../api/search/search-api-error-response.js';\nimport type {AsyncThunkOptions} from '../../app/async-thunk-options.js';\nimport type {ClientThunkExtraArguments} from '../../app/thunk-extra-arguments.js';\nimport {validatePayload} from '../../utils/validate-payload.js';\nimport {\n buildResultPreviewRequest,\n type StateNeededByHtmlEndpoint,\n} from './result-preview-request-builder.js';\n\nexport interface FetchResultContentThunkReturn {\n content: string;\n uniqueId: string;\n}\n\nexport interface UpdateContentURLThunkReturn {\n /**\n * The path to retrieve result quickview content.\n */\n contentURL?: string;\n}\n\nexport interface PreparePreviewPaginationActionPayload {\n results: Pick<Result, 'hasHtmlVersion' | 'uniqueId'>[];\n}\n\nexport interface AsyncThunkGlobalOptions<T>\n extends AsyncThunkOptions<T, ClientThunkExtraArguments<HtmlApiClient>> {\n rejectValue: SearchAPIErrorWithStatusCode;\n}\n\nexport const fetchResultContent = createAsyncThunk<\n FetchResultContentThunkReturn,\n HtmlRequestOptions,\n AsyncThunkGlobalOptions<StateNeededByHtmlEndpoint>\n>(\n 'resultPreview/fetchResultContent',\n async (options: HtmlRequestOptions, {extra, getState, rejectWithValue}) => {\n const state = getState();\n const req = await buildResultPreviewRequest(state, options);\n const res = await extra.apiClient.html(req);\n\n if (isErrorResponse(res)) {\n return rejectWithValue(res.error);\n }\n\n return {\n content: res.success,\n uniqueId: options.uniqueId,\n };\n }\n);\n\nexport const nextPreview = createAction('resultPreview/next');\nexport const previousPreview = createAction('resultPreview/previous');\nexport const preparePreviewPagination = createAction(\n 'resultPreview/prepare',\n (payload: PreparePreviewPaginationActionPayload) =>\n validatePayload(payload, {results: new ArrayValue({required: true})})\n);\n\nexport type UpdateContentURLOptions = HtmlRequestOptions & {\n path: string;\n buildResultPreviewRequest: (\n state: StateNeededByHtmlEndpoint,\n options: HtmlRequestOptions\n ) => Promise<HtmlRequest>;\n};\n\nconst MAX_GET_LENGTH = 2048;\n\nexport const updateContentURL = createAsyncThunk<\n UpdateContentURLThunkReturn,\n UpdateContentURLOptions,\n AsyncThunkGlobalOptions<StateNeededByHtmlEndpoint>\n>(\n 'resultPreview/updateContentURL',\n async (options: UpdateContentURLOptions, {getState, extra}) => {\n const state = getState();\n const contentURL = buildContentURL(\n await options.buildResultPreviewRequest(state, {\n uniqueId: options.uniqueId,\n requestedOutputSize: options.requestedOutputSize,\n }),\n options.path\n );\n\n if (contentURL?.length > MAX_GET_LENGTH) {\n extra.logger.error(\n `The content URL was truncated as it exceeds the maximum allowed length of ${MAX_GET_LENGTH} characters.`\n );\n }\n\n return {\n contentURL: contentURL,\n };\n }\n);\n", "import {getSearchApiBaseUrl} from '../../api/platform-client.js';\nimport type {\n HtmlRequest,\n HtmlRequestOptions,\n} from '../../api/search/html/html-request.js';\nimport type {\n ConfigurationSection,\n QuerySection,\n ResultPreviewSection,\n} from '../../state/state-sections.js';\n\nexport type StateNeededByHtmlEndpoint = ConfigurationSection &\n ResultPreviewSection &\n Partial<QuerySection>;\n\nexport async function buildResultPreviewRequest(\n state: StateNeededByHtmlEndpoint,\n options: HtmlRequestOptions\n): Promise<HtmlRequest> {\n const {search, accessToken, organizationId} = state.configuration;\n const q = state.query?.q || '';\n\n return {\n url:\n search.apiBaseUrl ??\n getSearchApiBaseUrl(\n state.configuration.organizationId,\n state.configuration.environment\n ),\n accessToken,\n organizationId,\n enableNavigation: false,\n q,\n ...options,\n requestedOutputSize: options.requestedOutputSize || 0,\n ...(search.authenticationProviders.length && {\n authentication: search.authenticationProviders.join(','),\n }),\n };\n}\n", "import type {HtmlApiClient} from '../../../api/search/html/html-api-client.js';\nimport type {\n HtmlRequest,\n HtmlRequestOptions,\n} from '../../../api/search/html/html-request.js';\nimport type {Result} from '../../../api/search/search/result.js';\nimport {configuration} from '../../../app/common-reducers.js';\nimport type {CoreEngine} from '../../../app/engine.js';\nimport type {ClientThunkExtraArguments} from '../../../app/thunk-extra-arguments.js';\nimport {\n fetchResultContent,\n nextPreview,\n previousPreview,\n updateContentURL,\n} from '../../../features/result-preview/result-preview-actions.js';\nimport type {StateNeededByHtmlEndpoint} from '../../../features/result-preview/result-preview-request-builder.js';\nimport {resultPreviewReducer as resultPreview} from '../../../features/result-preview/result-preview-slice.js';\nimport type {\n ConfigurationSection,\n ResultPreviewSection,\n} from '../../../state/state-sections.js';\nimport {loadReducerError} from '../../../utils/errors.js';\nimport {\n buildController,\n type Controller,\n} from '../../controller/headless-controller.js';\n\nexport interface QuickviewProps {\n /**\n * The options for the `Quickview` controller.\n */\n options: QuickviewOptions;\n}\n\nexport interface QuickviewOptions {\n /**\n * The result to retrieve a quickview for.\n */\n result: Result;\n\n /**\n * The maximum preview size to retrieve, in bytes. By default, the full preview is retrieved.\n */\n maximumPreviewSize?: number;\n\n /**\n * Whether to only update the `contentURL` attribute when using `fetchResultContent` rather than updating `content`.\n * Use this if you are using an iframe with `state.contentURL` as the source url.\n */\n onlyContentURL?: boolean;\n}\n\nexport interface Quickview extends Controller {\n /**\n * Retrieves the preview content for the configured result.\n * If `options.onlyContentURL` is `true` this will update the `contentURL` state property rather than `content`.\n */\n fetchResultContent(): void;\n\n /**\n * Retrieves the preview content for the next available result in the current result set.\n *\n * If it reaches the last available result in the current result set, it will not perform an additional query to fetch new results.\n *\n * Instead, it will loop back to the first available result.\n *\n * If `options.onlyContentURL` is `true` this will update the `contentURL` state property rather than `content`.\n */\n next(): void;\n /**\n * Retrieves the preview content for the previous available result in the current result set.\n *\n * If it reaches the first available result in the current result set, it will not perform an additional query to fetch new results.\n *\n * Instead, it will loop back to the last available result.\n *\n * If `options.onlyContentURL` is `true` this will update the `contentURL` state property rather than `content`.\n */\n previous(): void;\n\n /**\n * The state for the `Quickview` controller.\n */\n state: QuickviewState;\n}\n\nexport interface QuickviewState {\n /**\n * The result preview HTML content.\n *\n * @default \"\"\n */\n content: string;\n\n /**\n * `true` if the configured result has a preview, and `false` otherwise.\n */\n resultHasPreview: boolean;\n\n /**\n * `true` if content is being fetched, and `false` otherwise.\n */\n isLoading: boolean;\n\n /**\n * The `src` path to use if rendering the quickview in an iframe.\n */\n contentURL?: string;\n\n /**\n * The current result unique ID,\n */\n currentResultUniqueId: string;\n}\n\n/**\n * Creates a `Quickview` controller instance.\n *\n * @param engine - The headless engine.\n * @param props - The configurable `Quickview` properties.\n * @param fetchResultContentCallback - The callback to be triggered after executing fetchResultContent.\n * @returns A `Quickview` controller instance.\n */\nexport function buildCoreQuickview(\n engine: CoreEngine,\n props: QuickviewProps,\n buildResultPreviewRequest: (\n state: StateNeededByHtmlEndpoint,\n options: HtmlRequestOptions\n ) => Promise<HtmlRequest>,\n path: string,\n fetchResultContentCallback?: () => void\n): Quickview {\n if (!loadQuickviewReducers(engine)) {\n throw loadReducerError;\n }\n\n const {dispatch} = engine;\n const getState = () => engine.state;\n const controller = buildController(engine);\n const {result, maximumPreviewSize} = props.options;\n\n const getUniqueIdFromPosition = () => {\n const {resultsWithPreview, position} = getState().resultPreview;\n return resultsWithPreview[position];\n };\n\n const onFetchContent = (uniqueId: string) => {\n dispatch(\n updateContentURL({\n uniqueId,\n requestedOutputSize: maximumPreviewSize,\n buildResultPreviewRequest,\n path,\n })\n );\n\n if (!props.options.onlyContentURL) {\n dispatch(\n fetchResultContent({\n uniqueId,\n requestedOutputSize: maximumPreviewSize,\n })\n );\n }\n\n if (fetchResultContentCallback) {\n fetchResultContentCallback();\n }\n };\n\n return {\n ...controller,\n\n fetchResultContent() {\n onFetchContent(result.uniqueId);\n },\n\n next() {\n dispatch(nextPreview());\n onFetchContent(getUniqueIdFromPosition());\n },\n\n previous() {\n dispatch(previousPreview());\n onFetchContent(getUniqueIdFromPosition());\n },\n\n get state() {\n const state = getState();\n const resultHasPreview = result.hasHtmlVersion;\n const preview = state.resultPreview;\n const content =\n result.uniqueId === preview.uniqueId ? preview.content : '';\n const isLoading = preview.isLoading;\n const contentURL = preview.contentURL;\n const currentResultUniqueId = getUniqueIdFromPosition();\n\n return {\n content,\n resultHasPreview,\n isLoading,\n contentURL,\n currentResultUniqueId,\n };\n },\n };\n}\n\nfunction loadQuickviewReducers(\n engine: CoreEngine\n): engine is CoreEngine<\n ConfigurationSection & ResultPreviewSection,\n ClientThunkExtraArguments<HtmlApiClient>\n> {\n engine.addReducers({configuration, resultPreview});\n return true;\n}\n", "import {createReducer} from '@reduxjs/toolkit';\nimport type {Result} from '../../api/search/search/result.js';\nimport {\n executeSearch,\n fetchMoreResults,\n fetchPage,\n} from '../search/search-actions.js';\nimport {\n fetchResultContent,\n nextPreview,\n preparePreviewPagination,\n previousPreview,\n updateContentURL,\n} from './result-preview-actions.js';\nimport {\n getResultPreviewInitialState,\n type ResultPreviewState,\n} from './result-preview-state.js';\n\nconst resetPreviewContentState = (state: ResultPreviewState) => {\n const {content, isLoading, uniqueId, contentURL} =\n getResultPreviewInitialState();\n state.content = content;\n state.isLoading = isLoading;\n state.uniqueId = uniqueId;\n state.contentURL = contentURL;\n};\n\nconst getUniqueIdsOfResultsWithHTMLVersion = (\n results: Pick<Result, 'hasHtmlVersion' | 'uniqueId'>[]\n) => results.filter((r) => r.hasHtmlVersion).map((r) => r.uniqueId);\n\nexport const resultPreviewReducer = createReducer(\n getResultPreviewInitialState(),\n (builder) => {\n builder\n .addCase(fetchResultContent.pending, (state) => {\n state.isLoading = true;\n })\n .addCase(fetchResultContent.fulfilled, (state, action) => {\n const {content, uniqueId} = action.payload;\n\n state.position = state.resultsWithPreview.indexOf(uniqueId);\n state.content = content;\n state.uniqueId = uniqueId;\n state.isLoading = false;\n })\n .addCase(executeSearch.fulfilled, (state, action) => {\n resetPreviewContentState(state);\n state.resultsWithPreview = getUniqueIdsOfResultsWithHTMLVersion(\n action.payload.response.results\n );\n })\n .addCase(fetchMoreResults.fulfilled, (state, action) => {\n resetPreviewContentState(state);\n state.resultsWithPreview = state.resultsWithPreview.concat(\n getUniqueIdsOfResultsWithHTMLVersion(action.payload.response.results)\n );\n })\n .addCase(fetchPage.fulfilled, resetPreviewContentState)\n .addCase(preparePreviewPagination, (state, action) => {\n state.resultsWithPreview = getUniqueIdsOfResultsWithHTMLVersion(\n action.payload.results\n );\n })\n .addCase(nextPreview, (state) => {\n if (state.isLoading) {\n return;\n }\n let newPos = state.position + 1;\n if (newPos > state.resultsWithPreview.length - 1) {\n newPos = 0;\n }\n state.position = newPos;\n })\n .addCase(previousPreview, (state) => {\n if (state.isLoading) {\n return;\n }\n\n let newPos = state.position - 1;\n if (newPos < 0) {\n newPos = state.resultsWithPreview.length - 1;\n }\n state.position = newPos;\n })\n .addCase(updateContentURL.fulfilled, (state, action) => {\n state.contentURL = action.payload.contentURL;\n });\n }\n);\n", "import {BooleanValue, NumberValue, StringValue} from '@coveo/bueno';\nimport {createAction, createAsyncThunk} from '@reduxjs/toolkit';\nimport type {EventDescription} from 'coveo.analytics';\nimport HistoryStore from '../../api/analytics/coveo.analytics/history-store.js';\nimport type {SearchResponseSuccess} from '../../api/search/search/search-response.js';\nimport type {AsyncThunkSearchOptions} from '../../api/search/search-api-client.js';\nimport type {AsyncThunkOptions} from '../../app/async-thunk-options.js';\nimport type {NavigatorContext} from '../../app/navigator-context-provider.js';\nimport type {InstantResultSection} from '../../state/state-sections.js';\nimport {\n requiredNonEmptyString,\n validatePayload,\n} from '../../utils/validate-payload.js';\nimport {\n type LegacySearchAction,\n makeBasicNewSearchAnalyticsAction,\n} from '../analytics/analytics-utils.js';\nimport {SearchPageEvents} from '../analytics/search-action-cause.js';\nimport {\n deselectAllBreadcrumbs,\n deselectAllNonBreadcrumbs,\n} from '../breadcrumb/breadcrumb-actions.js';\nimport {updateFacetAutoSelection} from '../facets/generic/facet-actions.js';\nimport {searchboxAsYouType} from '../instant-results/instant-result-analytics-actions.js';\nimport {\n type FetchInstantResultsActionCreatorPayload,\n type FetchInstantResultsThunkReturn,\n updateInstantResultsQuery,\n} from '../instant-results/instant-results-actions.js';\nimport {updatePage} from '../pagination/pagination-actions.js';\nimport {\n type UpdateQueryActionCreatorPayload,\n updateQuery,\n} from '../query/query-actions.js';\nimport {buildSearchAndFoldingLoadCollectionRequest} from '../search-and-folding/search-and-folding-request.js';\nimport {\n legacyExecuteSearch,\n legacyFetchInstantResults,\n legacyFetchMoreResults,\n legacyFetchPage,\n} from './legacy/search-actions.js';\nimport {\n AsyncSearchThunkProcessor,\n type StateNeededByExecuteSearch,\n} from './search-actions-thunk-processor.js';\nimport {type MappedSearchRequest, mapSearchRequest} from './search-mappings.js';\nimport {buildSearchRequest} from './search-request.js';\n\nexport interface SearchAction {\n actionCause: string;\n}\n\nexport interface ExecuteSearchThunkReturn {\n /** The successful search response. */\n response: SearchResponseSuccess;\n /** The number of milliseconds it took to receive the response. */\n duration: number;\n /** The query that was executed. */\n queryExecuted: string;\n /** Whether the query was automatically corrected. */\n automaticallyCorrected: boolean;\n /** The original query that was performed when an automatic correction is executed.*/\n originalQuery: string;\n}\n\nexport interface PrepareForSearchWithQueryOptions {\n /**\n * Whether to clear all active query filters when the end user submits a new query from the search box.\n * Setting this option to \"false\" is not recommended & can lead to an increasing number of queries returning no results.\n */\n clearFilters: boolean;\n}\n\nexport const prepareForSearchWithQuery = createAsyncThunk<\n void,\n UpdateQueryActionCreatorPayload & PrepareForSearchWithQueryOptions,\n AsyncThunkOptions<StateNeededByExecuteSearch>\n>('search/prepareForSearchWithQuery', (payload, thunk) => {\n const {dispatch} = thunk;\n validatePayload(payload, {\n q: new StringValue(),\n enableQuerySyntax: new BooleanValue(),\n clearFilters: new BooleanValue(),\n });\n\n if (payload.clearFilters) {\n dispatch(deselectAllBreadcrumbs());\n dispatch(deselectAllNonBreadcrumbs());\n }\n\n dispatch(updateFacetAutoSelection({allow: true}));\n dispatch(\n updateQuery({q: payload.q, enableQuerySyntax: payload.enableQuerySyntax})\n );\n dispatch(updatePage(1));\n});\n\nexport interface TransitiveSearchAction {\n legacy: LegacySearchAction;\n next?: SearchAction;\n}\n\nexport const updateSearchAction = createAction<SearchAction | undefined>(\n 'search/updateSearchAction'\n);\n\nexport const executeSearch = createAsyncThunk<\n ExecuteSearchThunkReturn,\n TransitiveSearchAction,\n AsyncThunkSearchOptions<StateNeededByExecuteSearch>\n>(\n 'search/executeSearch',\n async (searchAction: TransitiveSearchAction, config) => {\n const state = config.getState();\n if (state.configuration.analytics.analyticsMode === 'legacy') {\n return legacyExecuteSearch(state, config, searchAction.legacy);\n }\n addEntryInActionsHistory(state);\n const analyticsAction = searchAction.next\n ? buildSearchReduxAction(searchAction.next)\n : undefined;\n\n config.dispatch(updateSearchAction(searchAction.next));\n\n const request = await buildSearchRequest(\n state,\n config.extra.navigatorContext,\n analyticsAction\n );\n\n const processor = new AsyncSearchThunkProcessor<\n ReturnType<typeof config.rejectWithValue>\n >({...config, analyticsAction: analyticsAction ?? {}});\n\n const fetched = await processor.fetchFromAPI(request, {\n origin: 'mainSearch',\n });\n\n return await processor.process(fetched);\n }\n);\n\nexport const fetchPage = createAsyncThunk<\n ExecuteSearchThunkReturn,\n TransitiveSearchAction,\n AsyncThunkSearchOptions<StateNeededByExecuteSearch>\n>('search/fetchPage', async (searchAction: TransitiveSearchAction, config) => {\n const state = config.getState();\n addEntryInActionsHistory(state);\n\n if (\n state.configuration.analytics.analyticsMode === 'legacy' ||\n !searchAction.next\n ) {\n return legacyFetchPage(state, config, searchAction.legacy);\n }\n\n const processor = new AsyncSearchThunkProcessor<\n ReturnType<typeof config.rejectWithValue>\n >({\n ...config,\n analyticsAction: searchAction.next,\n });\n\n const request = await buildSearchRequest(\n state,\n config.extra.navigatorContext,\n searchAction.next\n );\n const fetched = await processor.fetchFromAPI(request, {origin: 'mainSearch'});\n\n return await processor.process(fetched);\n});\n\nexport const fetchMoreResults = createAsyncThunk<\n ExecuteSearchThunkReturn,\n void,\n AsyncThunkSearchOptions<StateNeededByExecuteSearch>\n>('search/fetchMoreResults', async (_, config) => {\n const state = config.getState();\n if (state.configuration.analytics.analyticsMode === 'legacy') {\n return legacyFetchMoreResults(config, state);\n }\n\n const analyticsAction = makeBasicNewSearchAnalyticsAction(\n SearchPageEvents.browseResults,\n config.getState\n );\n\n const processor = new AsyncSearchThunkProcessor<\n ReturnType<typeof config.rejectWithValue>\n >({\n ...config,\n analyticsAction,\n });\n\n const request = await buildFetchMoreRequest(\n state,\n config.extra.navigatorContext,\n analyticsAction\n );\n const fetched = await processor.fetchFromAPI(request, {origin: 'mainSearch'});\n\n return await processor.process(fetched);\n});\n\nexport const fetchFacetValues = createAsyncThunk<\n ExecuteSearchThunkReturn,\n TransitiveSearchAction,\n AsyncThunkSearchOptions<StateNeededByExecuteSearch>\n>(\n 'search/fetchFacetValues',\n async (searchAction: TransitiveSearchAction, config) => {\n const state = config.getState();\n if (state.configuration.analytics.analyticsMode === 'legacy') {\n return legacyExecuteSearch(state, config, searchAction.legacy);\n }\n\n const processor = new AsyncSearchThunkProcessor<\n ReturnType<typeof config.rejectWithValue>\n >({...config, analyticsAction: {}});\n\n const request = await buildFetchFacetValuesRequest(\n state,\n config.extra.navigatorContext\n );\n const fetched = await processor.fetchFromAPI(request, {\n origin: 'facetValues',\n });\n\n return await processor.process(fetched);\n }\n);\n\nexport const fetchInstantResults = createAsyncThunk<\n FetchInstantResultsThunkReturn,\n FetchInstantResultsActionCreatorPayload,\n AsyncThunkSearchOptions<StateNeededByExecuteSearch & InstantResultSection>\n>(\n 'search/fetchInstantResults',\n async (payload: FetchInstantResultsActionCreatorPayload, config) => {\n const state = config.getState();\n if (state.configuration.analytics.analyticsMode === 'legacy') {\n return legacyFetchInstantResults(payload, config);\n }\n validatePayload(payload, {\n id: requiredNonEmptyString,\n q: requiredNonEmptyString,\n maxResultsPerQuery: new NumberValue({\n required: true,\n min: 1,\n }),\n cacheTimeout: new NumberValue(),\n });\n const {q, maxResultsPerQuery} = payload;\n\n const analyticsAction = buildSearchReduxAction(searchboxAsYouType());\n\n const request = await buildInstantResultSearchRequest(\n state,\n config.extra.navigatorContext,\n q,\n maxResultsPerQuery,\n analyticsAction\n );\n\n const processor = new AsyncSearchThunkProcessor<\n ReturnType<typeof config.rejectWithValue>\n >({...config, analyticsAction}, (modification) => {\n config.dispatch(\n updateInstantResultsQuery({q: modification, id: payload.id})\n );\n });\n const fetched = await processor.fetchFromAPI(request, {\n origin: 'instantResults',\n disableAbortWarning: true,\n });\n\n const processed = await processor.process(fetched);\n if ('response' in processed) {\n return {\n results: processed.response.results,\n searchUid: processed.response.searchUid,\n totalCountFiltered: processed.response.totalCountFiltered,\n duration: processed.duration,\n };\n }\n return processed as ReturnType<typeof config.rejectWithValue>;\n }\n);\n\nconst buildFetchMoreRequest = async (\n state: StateNeededByExecuteSearch,\n navigatorContext: NavigatorContext,\n eventDescription?: EventDescription\n): Promise<MappedSearchRequest> => {\n const mappedRequest = await buildSearchRequest(\n state,\n navigatorContext,\n eventDescription\n );\n mappedRequest.request = {\n ...mappedRequest.request,\n firstResult:\n (state.pagination?.firstResult ?? 0) +\n (state.search?.results.length ?? 0),\n };\n return mappedRequest;\n};\n\nconst buildInstantResultSearchRequest = async (\n state: StateNeededByExecuteSearch,\n navigatorContext: NavigatorContext,\n q: string,\n numberOfResults: number,\n eventDescription: EventDescription\n) => {\n const sharedWithFoldingRequest = buildSearchAndFoldingLoadCollectionRequest(\n state,\n navigatorContext,\n eventDescription\n );\n\n return mapSearchRequest({\n ...sharedWithFoldingRequest,\n ...(state.didYouMean && {\n enableDidYouMean: state.didYouMean.enableDidYouMean,\n }),\n numberOfResults,\n q,\n });\n};\n\nconst buildFetchFacetValuesRequest = async (\n state: StateNeededByExecuteSearch,\n navigatorContext: NavigatorContext,\n eventDescription?: EventDescription\n): Promise<MappedSearchRequest> => {\n const mappedRequest = await buildSearchRequest(\n state,\n navigatorContext,\n eventDescription\n );\n // Specifying a numberOfResults of 0 will not log the query as a full fledged query in the API\n // it will also alleviate the load on the index\n mappedRequest.request.numberOfResults = 0;\n return mappedRequest;\n};\n\nconst addEntryInActionsHistory = (state: StateNeededByExecuteSearch) => {\n if (state.configuration.analytics.enabled) {\n HistoryStore.getInstance().addElement({\n name: 'Query',\n ...(state.query?.q && {\n value: state.query.q,\n }),\n time: JSON.stringify(new Date()),\n });\n }\n};\n\nconst buildSearchReduxAction = (action: SearchAction) => ({\n actionCause: action.actionCause,\n type: action.actionCause,\n});\n", "import {createAction} from '@reduxjs/toolkit';\n\nexport const deselectAllBreadcrumbs = createAction('breadcrumb/deselectAll');\nexport const deselectAllNonBreadcrumbs = createAction(\n 'breadcrumb/deselectAllNonBreadcrumbs'\n);\n", "import {BooleanValue} from '@coveo/bueno';\nimport {createAction} from '@reduxjs/toolkit';\nimport {validatePayload} from '../../../utils/validate-payload.js';\n\nexport interface UpdateFacetAutoSelectionActionCreatorPayload {\n /**\n * Whether to allow or prevent automatic selection in all facets.\n */\n allow: boolean;\n}\n\nexport const updateFacetAutoSelection = createAction(\n 'facet/updateFacetAutoSelection',\n (payload: UpdateFacetAutoSelectionActionCreatorPayload) =>\n validatePayload(payload, {\n allow: new BooleanValue({required: true}),\n })\n);\n", "import type {ItemClick} from '@coveo/relay-event-types';\nimport {\n InstantResultsAnalyticsProvider,\n type StateNeededByInstantResultsAnalyticsProvider,\n} from '../../api/analytics/instant-result-analytics.js';\nimport type {Result} from '../../api/search/search/result.js';\nimport {\n documentIdentifier,\n type InstantResultsClickAction,\n type InstantResultsSearchAction,\n makeAnalyticsAction,\n partialDocumentInformation,\n validateResultPayload,\n} from '../analytics/analytics-utils.js';\nimport {SearchPageEvents} from '../analytics/search-action-cause.js';\nimport type {SearchAction} from '../search/search-actions.js';\n\nexport const logInstantResultOpen = (\n result: Result\n): InstantResultsClickAction =>\n makeAnalyticsAction({\n prefix: 'analytics/instantResult/open',\n __legacy__getBuilder: (client, state) => {\n validateResultPayload(result);\n return client.makeDocumentOpen(\n partialDocumentInformation(result, state),\n documentIdentifier(result)\n );\n },\n __legacy__provider: (\n getState: () => StateNeededByInstantResultsAnalyticsProvider\n ) => new InstantResultsAnalyticsProvider(getState),\n\n analyticsType: 'itemClick',\n analyticsPayloadBuilder: (state): ItemClick => {\n const docInfo = partialDocumentInformation(result, state);\n const docId = documentIdentifier(result);\n return {\n responseId: result.searchUid ?? '',\n position: docInfo.documentPosition,\n itemMetadata: {\n uniqueFieldName: docId.contentIDKey,\n uniqueFieldValue: docId.contentIDValue,\n title: docInfo.documentTitle,\n author: docInfo.documentAuthor,\n url: docInfo.documentUrl,\n },\n };\n },\n });\n\n//TODO: KIT-2859\nexport const logInstantResultsSearch = (): InstantResultsSearchAction =>\n makeAnalyticsAction(\n 'analytics/instantResult/searchboxAsYouType',\n (client) => client.makeSearchboxAsYouType(),\n (getState) => new InstantResultsAnalyticsProvider(getState)\n );\n\nexport const searchboxAsYouType = (): SearchAction => ({\n actionCause: SearchPageEvents.searchboxAsYouType,\n});\n", "import {getQueryInitialState} from '../../features/query/query-state.js';\nimport {getSearchInitialState} from '../../features/search/search-state.js';\nimport type {InstantResultSection} from '../../state/state-sections.js';\nimport {\n SearchAnalyticsProvider,\n type StateNeededBySearchAnalyticsProvider,\n} from './search-analytics.js';\n\nexport type StateNeededByInstantResultsAnalyticsProvider =\n StateNeededBySearchAnalyticsProvider & InstantResultSection;\n\nexport class InstantResultsAnalyticsProvider extends SearchAnalyticsProvider {\n constructor(\n protected getState: () => StateNeededByInstantResultsAnalyticsProvider\n ) {\n super(getState);\n }\n\n private get activeInstantResultQuery() {\n const state = this.getState().instantResults;\n for (const id in state) {\n for (const query in state[id].cache) {\n if (state[id].cache[query].isActive) {\n return state[id].q;\n }\n }\n }\n\n return null;\n }\n\n private get activeInstantResultCache() {\n const state = this.getState().instantResults;\n for (const id in state) {\n for (const query in state[id].cache) {\n if (state[id].cache[query].isActive) {\n return state[id].cache[query];\n }\n }\n }\n\n return null;\n }\n\n protected get results() {\n return this.activeInstantResultCache?.results;\n }\n\n protected get queryText() {\n return this.activeInstantResultQuery ?? getQueryInitialState().q;\n }\n\n protected get responseTime() {\n return (\n this.activeInstantResultCache?.duration ??\n getSearchInitialState().duration\n );\n }\n\n protected get numberOfResults() {\n return (\n this.activeInstantResultCache?.totalCountFiltered ??\n getSearchInitialState().response.totalCountFiltered\n );\n }\n\n public getSearchUID(): string {\n const searchUid = this.activeInstantResultCache?.searchUid;\n return searchUid || super.getSearchUID();\n }\n}\n", "import {createAction} from '@reduxjs/toolkit';\nimport type {Result} from '../../api/search/search/result.js';\nimport {\n requiredEmptyAllowedString,\n requiredNonEmptyString,\n validatePayload,\n} from '../../utils/validate-payload.js';\n\nexport interface RegisterInstantResultActionCreatorPayload {\n /**\n * The search box ID.\n */\n id: string;\n}\n\nexport interface UpdateInstantResultQueryActionCreatorPayload {\n /**\n * The search box ID.\n */\n id: string;\n /**\n * The initial basic query expression for instant results.\n */\n q: string;\n}\n\nexport interface ClearExpiredInstantResultsActionCreatorPayload {\n /**\n * The search box id.\n */\n id: string;\n}\n\nconst instantResultsRegisterDefinition = {\n id: requiredNonEmptyString,\n};\n\nconst instantResultsQueryDefinition = {\n ...instantResultsRegisterDefinition,\n q: requiredEmptyAllowedString,\n};\n\nexport const registerInstantResults = createAction(\n 'instantResults/register',\n (payload: RegisterInstantResultActionCreatorPayload) =>\n validatePayload(payload, instantResultsRegisterDefinition)\n);\n\nexport const updateInstantResultsQuery = createAction(\n 'instantResults/updateQuery',\n (payload: UpdateInstantResultQueryActionCreatorPayload) =>\n validatePayload(payload, instantResultsQueryDefinition)\n);\n\nexport const clearExpiredResults = createAction(\n 'instantResults/clearExpired',\n (payload: ClearExpiredInstantResultsActionCreatorPayload) =>\n validatePayload(payload, instantResultsRegisterDefinition)\n);\n\nexport interface FetchInstantResultsActionCreatorPayload {\n /**\n * The search box ID.\n */\n id: string;\n /**\n * The query for which instant results are retrieved.\n */\n q: string;\n /**\n * The maximum items to be stored in the instant result list for each query.\n */\n maxResultsPerQuery: number;\n /**\n * Number in milliseconds that cached results will be valid for. Set to 0 so that results never expire.\n */\n cacheTimeout?: number;\n}\n\nexport interface FetchInstantResultsThunkReturn {\n results: Result[];\n searchUid: string;\n totalCountFiltered: number;\n duration: number;\n}\n", "import {NumberValue} from '@coveo/bueno';\nimport {createAction} from '@reduxjs/toolkit';\nimport {validatePayload} from '../../utils/validate-payload.js';\n\nconst numberValue = new NumberValue({required: true, min: 0});\n\nexport const registerNumberOfResults = createAction(\n 'pagination/registerNumberOfResults',\n (payload: number) => validatePayload(payload, numberValue)\n);\n\nexport const updateNumberOfResults = createAction(\n 'pagination/updateNumberOfResults',\n (payload: number) => validatePayload(payload, numberValue)\n);\n\nexport const registerPage = createAction(\n 'pagination/registerPage',\n (payload: number) => validatePayload(payload, numberValue)\n);\n\nexport const updatePage = createAction(\n 'pagination/updatePage',\n (payload: number) => validatePayload(payload, numberValue)\n);\n\nexport const nextPage = createAction('pagination/nextPage');\n\nexport const previousPage = createAction('pagination/previousPage');\n", "import {BooleanValue, StringValue} from '@coveo/bueno';\nimport {createAction} from '@reduxjs/toolkit';\nimport {validatePayload} from '../../utils/validate-payload.js';\n\nexport interface UpdateQueryActionCreatorPayload {\n /**\n * The basic query expression (e.g., `acme tornado seeds`).\n */\n q?: string;\n\n /**\n * Whether to interpret advanced [Coveo Cloud query syntax](https://docs.coveo.com/en/1814/) in the query.\n */\n enableQuerySyntax?: boolean;\n}\n\nexport const updateQuery = createAction(\n 'query/updateQuery',\n (payload: UpdateQueryActionCreatorPayload) =>\n validatePayload(payload, {\n q: new StringValue(),\n enableQuerySyntax: new BooleanValue(),\n })\n);\n", "import {isNullOrUndefined} from '@coveo/bueno';\nimport type {EventDescription} from 'coveo.analytics';\nimport {getSearchApiBaseUrl} from '../../api/platform-client.js';\nimport type {SearchRequest} from '../../api/search/search/search-request.js';\nimport type {NavigatorContext} from '../../app/navigator-context-provider.js';\nimport type {SearchAppState} from '../../state/search-app-state.js';\nimport type {ConfigurationSection} from '../../state/state-sections.js';\nimport {fromAnalyticsStateToAnalyticsParams} from '../configuration/analytics-params.js';\n\ntype StateNeededByExecuteSearchAndFolding = ConfigurationSection &\n Partial<SearchAppState>;\n\nexport const buildSearchAndFoldingLoadCollectionRequest = (\n state: StateNeededByExecuteSearchAndFolding,\n navigatorContext: NavigatorContext,\n eventDescription?: EventDescription\n): SearchRequest => {\n return {\n accessToken: state.configuration.accessToken,\n organizationId: state.configuration.organizationId,\n url:\n state.configuration.search.apiBaseUrl ??\n getSearchApiBaseUrl(\n state.configuration.organizationId,\n state.configuration.environment\n ),\n locale: state.configuration.search.locale,\n debug: state.debug,\n tab: state.configuration.analytics.originLevel2,\n referrer: navigatorContext.referrer,\n timezone: state.configuration.search.timezone,\n ...(state.advancedSearchQueries?.aq && {\n aq: state.advancedSearchQueries.aq,\n }),\n ...(state.advancedSearchQueries?.cq && {\n cq: state.advancedSearchQueries.cq,\n }),\n ...(state.advancedSearchQueries?.lq && {\n lq: state.advancedSearchQueries.lq,\n }),\n ...(state.advancedSearchQueries?.dq && {\n dq: state.advancedSearchQueries.dq,\n }),\n ...(state.context && {\n context: state.context.contextValues,\n }),\n ...(state.fields &&\n !state.fields.fetchAllFields && {\n fieldsToInclude: state.fields.fieldsToInclude,\n }),\n ...(state.dictionaryFieldContext && {\n dictionaryFieldContext: state.dictionaryFieldContext.contextValues,\n }),\n ...(state.pipeline && {\n pipeline: state.pipeline,\n }),\n ...(state.query && {\n q: state.query.q,\n enableQuerySyntax: state.query.enableQuerySyntax,\n }),\n ...(state.searchHub && {\n searchHub: state.searchHub,\n }),\n ...(state.sortCriteria && {\n sortCriteria: state.sortCriteria,\n }),\n ...(state.configuration.analytics.enabled &&\n fromAnalyticsStateToAnalyticsParams(\n state.configuration.analytics,\n navigatorContext,\n eventDescription\n )),\n ...(state.excerptLength &&\n !isNullOrUndefined(state.excerptLength.length) && {\n excerptLength: state.excerptLength.length,\n }),\n ...(state.configuration.search.authenticationProviders.length && {\n authentication:\n state.configuration.search.authenticationProviders.join(','),\n }),\n };\n};\n", "import {NumberValue} from '@coveo/bueno';\nimport {createAsyncThunk} from '@reduxjs/toolkit';\nimport type {EventDescription} from 'coveo.analytics';\nimport HistoryStore from '../../../api/analytics/coveo.analytics/history-store.js';\nimport type {SearchResponseSuccess} from '../../../api/search/search/search-response.js';\nimport type {AsyncThunkSearchOptions} from '../../../api/search/search-api-client.js';\nimport type {InstantResultSection} from '../../../state/state-sections.js';\nimport {\n requiredNonEmptyString,\n validatePayload,\n} from '../../../utils/validate-payload.js';\nimport type {\n AnalyticsAsyncThunk,\n LegacySearchAction,\n} from '../../analytics/analytics-utils.js';\nimport {logInstantResultsSearch} from '../../instant-results/instant-result-analytics-actions.js';\nimport {\n type FetchInstantResultsActionCreatorPayload,\n type FetchInstantResultsThunkReturn,\n updateInstantResultsQuery,\n} from '../../instant-results/instant-results-actions.js';\nimport {buildSearchAndFoldingLoadCollectionRequest} from '../../search-and-folding/legacy/search-and-folding-request.js';\nimport {updateSearchAction} from '../search-actions.js';\nimport {logFetchMoreResults} from '../search-analytics-actions.js';\nimport {\n type MappedSearchRequest,\n mapSearchRequest,\n} from '../search-mappings.js';\nimport {\n AsyncSearchThunkProcessor,\n type StateNeededByExecuteSearch,\n} from './search-actions-thunk-processor.js';\nimport {buildSearchRequest} from './search-request.js';\n\nexport interface ExecuteSearchThunkReturn {\n /** The successful search response. */\n response: SearchResponseSuccess;\n /** The number of milliseconds it took to receive the response. */\n duration: number;\n /** The query that was executed. */\n queryExecuted: string;\n /** Whether the query was automatically corrected. */\n automaticallyCorrected: boolean;\n /** The original query that was performed when an automatic correction is executed.*/\n originalQuery: string;\n /** The analytics action to log after the query. */\n analyticsAction: AnalyticsAsyncThunk;\n}\n\nexport const executeSearch = createAsyncThunk<\n ExecuteSearchThunkReturn,\n LegacySearchAction,\n AsyncThunkSearchOptions<StateNeededByExecuteSearch>\n>('search/executeSearch', async (searchAction: LegacySearchAction, config) => {\n const state = config.getState();\n return await legacyExecuteSearch(state, config, searchAction);\n});\n\nexport const fetchPage = createAsyncThunk<\n ExecuteSearchThunkReturn,\n LegacySearchAction,\n AsyncThunkSearchOptions<StateNeededByExecuteSearch>\n>('search/fetchPage', async (searchAction: LegacySearchAction, config) => {\n const state = config.getState();\n return await legacyFetchPage(state, config, searchAction);\n});\n\nexport const fetchMoreResults = createAsyncThunk<\n ExecuteSearchThunkReturn,\n void,\n AsyncThunkSearchOptions<StateNeededByExecuteSearch>\n>('search/fetchMoreResults', async (_, config) => {\n const state = config.getState();\n\n return await legacyFetchMoreResults(config, state);\n});\n\nexport const fetchFacetValues = createAsyncThunk<\n ExecuteSearchThunkReturn,\n LegacySearchAction,\n AsyncThunkSearchOptions<StateNeededByExecuteSearch>\n>(\n 'search/fetchFacetValues',\n async (searchAction: LegacySearchAction, config) => {\n const state = config.getState();\n\n return await legacyFetchFacetValues(config, searchAction, state);\n }\n);\n\nexport const fetchInstantResults = createAsyncThunk<\n FetchInstantResultsThunkReturn,\n FetchInstantResultsActionCreatorPayload,\n AsyncThunkSearchOptions<StateNeededByExecuteSearch & InstantResultSection>\n>(\n 'search/fetchInstantResults',\n async (payload: FetchInstantResultsActionCreatorPayload, config) => {\n return legacyFetchInstantResults(payload, config);\n }\n);\n\nconst buildFetchMoreRequest = async (\n state: StateNeededByExecuteSearch,\n eventDescription?: EventDescription\n): Promise<MappedSearchRequest> => {\n const mappedRequest = await buildSearchRequest(state, eventDescription);\n mappedRequest.request = {\n ...mappedRequest.request,\n firstResult:\n (state.pagination?.firstResult ?? 0) +\n (state.search?.results.length ?? 0),\n };\n return mappedRequest;\n};\n\nconst buildInstantResultSearchRequest = async (\n state: StateNeededByExecuteSearch,\n q: string,\n numberOfResults: number\n) => {\n const sharedWithFoldingRequest =\n await buildSearchAndFoldingLoadCollectionRequest(state);\n\n return mapSearchRequest({\n ...sharedWithFoldingRequest,\n ...(state.didYouMean && {\n enableDidYouMean: state.didYouMean.enableDidYouMean,\n }),\n numberOfResults,\n q,\n });\n};\n\nconst buildFetchFacetValuesRequest = async (\n state: StateNeededByExecuteSearch,\n eventDescription?: EventDescription\n): Promise<MappedSearchRequest> => {\n const mappedRequest = await buildSearchRequest(state, eventDescription);\n // Specifying a numberOfResults of 0 will not log the query as a full fledged query in the API\n // it will also alleviate the load on the index\n mappedRequest.request.numberOfResults = 0;\n return mappedRequest;\n};\n\nconst addEntryInActionsHistory = (state: StateNeededByExecuteSearch) => {\n if (state.configuration.analytics.enabled) {\n HistoryStore.getInstance().addElement({\n name: 'Query',\n ...(state.query?.q && {\n value: state.query.q,\n }),\n time: JSON.stringify(new Date()),\n });\n }\n};\n\nexport async function legacyFetchInstantResults(\n payload: FetchInstantResultsActionCreatorPayload,\n // biome-ignore lint/suspicious/noExplicitAny: <>\n config: any\n) {\n validatePayload(payload, {\n id: requiredNonEmptyString,\n q: requiredNonEmptyString,\n maxResultsPerQuery: new NumberValue({\n required: true,\n min: 1,\n }),\n cacheTimeout: new NumberValue(),\n });\n const {q, maxResultsPerQuery} = payload;\n const state = config.getState();\n\n const processor = new AsyncSearchThunkProcessor<\n ReturnType<typeof config.rejectWithValue>\n >({...config, analyticsAction: logInstantResultsSearch()}, (modification) => {\n config.dispatch(\n updateInstantResultsQuery({q: modification, id: payload.id})\n );\n });\n\n const request = await buildInstantResultSearchRequest(\n state,\n q,\n maxResultsPerQuery\n );\n\n const fetched = await processor.fetchFromAPI(request, {\n origin: 'instantResults',\n disableAbortWarning: true,\n });\n const processed = await processor.process(fetched);\n if ('response' in processed) {\n return {\n results: processed.response.results,\n searchUid: processed.response.searchUid,\n analyticsAction: processed.analyticsAction,\n totalCountFiltered: processed.response.totalCountFiltered,\n duration: processed.duration,\n };\n }\n return processed as ReturnType<typeof config.rejectWithValue>;\n}\n\nexport async function legacyFetchPage(\n state: StateNeededByExecuteSearch,\n // biome-ignore lint/suspicious/noExplicitAny: <>\n config: any,\n searchAction: LegacySearchAction\n) {\n addEntryInActionsHistory(state);\n\n const {analyticsClientMiddleware, preprocessRequest, logger} = config.extra;\n const {description: eventDescription} = await searchAction.prepare({\n getState: () => config.getState(),\n analyticsClientMiddleware,\n preprocessRequest,\n logger,\n });\n\n const processor = new AsyncSearchThunkProcessor<\n ReturnType<typeof config.rejectWithValue>\n >({\n ...config,\n analyticsAction: searchAction,\n });\n\n const request = await buildSearchRequest(state, eventDescription);\n const fetched = await processor.fetchFromAPI(request, {origin: 'mainSearch'});\n\n return await processor.process(fetched);\n}\n\nexport async function legacyFetchMoreResults(\n // biome-ignore lint/suspicious/noExplicitAny: <>\n config: any,\n state: StateNeededByExecuteSearch\n) {\n const {analyticsClientMiddleware, preprocessRequest, logger} = config.extra;\n const {description: eventDescription} = await logFetchMoreResults().prepare({\n getState: () => config.getState(),\n analyticsClientMiddleware,\n preprocessRequest,\n logger,\n });\n\n const processor = new AsyncSearchThunkProcessor<\n ReturnType<typeof config.rejectWithValue>\n >({\n ...config,\n analyticsAction: logFetchMoreResults(),\n });\n\n const request = await buildFetchMoreRequest(state, eventDescription);\n const fetched = await processor.fetchFromAPI(request, {origin: 'mainSearch'});\n\n return await processor.process(fetched);\n}\n\nasync function legacyFetchFacetValues(\n // biome-ignore lint/suspicious/noExplicitAny: <>\n config: any,\n searchAction: LegacySearchAction,\n state: StateNeededByExecuteSearch\n) {\n const {analyticsClientMiddleware, preprocessRequest, logger} = config.extra;\n const {description: eventDescription} = await searchAction.prepare({\n getState: () => config.getState(),\n analyticsClientMiddleware,\n preprocessRequest,\n logger,\n });\n\n const processor = new AsyncSearchThunkProcessor<\n ReturnType<typeof config.rejectWithValue>\n >({...config, analyticsAction: searchAction});\n\n const request = await buildFetchFacetValuesRequest(state, eventDescription);\n const fetched = await processor.fetchFromAPI(request, {\n origin: 'facetValues',\n });\n\n return await processor.process(fetched);\n}\n\nexport async function legacyExecuteSearch(\n state: StateNeededByExecuteSearch,\n // biome-ignore lint/suspicious/noExplicitAny: <>\n config: any,\n searchAction: LegacySearchAction\n) {\n addEntryInActionsHistory(state);\n\n const {analyticsClientMiddleware, preprocessRequest, logger} = config.extra;\n const {description: eventDescription} = await searchAction.prepare({\n getState: () => config.getState(),\n analyticsClientMiddleware,\n preprocessRequest,\n logger,\n });\n\n if (eventDescription?.actionCause) {\n config.dispatch(\n updateSearchAction({\n actionCause: eventDescription.actionCause,\n })\n );\n }\n\n const request = await buildSearchRequest(state, eventDescription);\n\n const processor = new AsyncSearchThunkProcessor<\n ReturnType<typeof config.rejectWithValue>\n >({...config, analyticsAction: searchAction});\n\n const fetched = await processor.fetchFromAPI(request, {origin: 'mainSearch'});\n\n return await processor.process(fetched);\n}\n", "import {isNullOrUndefined} from '@coveo/bueno';\nimport type {EventDescription} from 'coveo.analytics';\nimport HistoryStore from '../../../api/analytics/coveo.analytics/history-store.js';\nimport {getSearchApiBaseUrl} from '../../../api/platform-client.js';\nimport type {SearchRequest} from '../../../api/search/search/search-request.js';\nimport type {SearchAppState} from '../../../state/search-app-state.js';\nimport type {ConfigurationSection} from '../../../state/state-sections.js';\nimport {fromAnalyticsStateToAnalyticsParams} from '../../configuration/legacy-analytics-params.js';\n\ntype StateNeededByExecuteSearchAndFolding = ConfigurationSection &\n Partial<SearchAppState>;\n\nexport const buildSearchAndFoldingLoadCollectionRequest = async (\n state: StateNeededByExecuteSearchAndFolding,\n eventDescription?: EventDescription\n): Promise<SearchRequest> => {\n return {\n accessToken: state.configuration.accessToken,\n organizationId: state.configuration.organizationId,\n url:\n state.configuration.search.apiBaseUrl ??\n getSearchApiBaseUrl(\n state.configuration.organizationId,\n state.configuration.environment\n ),\n locale: state.configuration.search.locale,\n debug: state.debug,\n tab: state.configuration.analytics.originLevel2,\n referrer: state.configuration.analytics.originLevel3,\n timezone: state.configuration.search.timezone,\n ...(state.configuration.analytics.enabled && {\n actionsHistory: HistoryStore.getInstance().getHistory(),\n }),\n ...(state.advancedSearchQueries?.aq && {\n aq: state.advancedSearchQueries.aq,\n }),\n ...(state.advancedSearchQueries?.cq && {\n cq: state.advancedSearchQueries.cq,\n }),\n ...(state.advancedSearchQueries?.lq && {\n lq: state.advancedSearchQueries.lq,\n }),\n ...(state.advancedSearchQueries?.dq && {\n dq: state.advancedSearchQueries.dq,\n }),\n ...(state.context && {\n context: state.context.contextValues,\n }),\n ...(state.fields &&\n !state.fields.fetchAllFields && {\n fieldsToInclude: state.fields.fieldsToInclude,\n }),\n ...(state.dictionaryFieldContext && {\n dictionaryFieldContext: state.dictionaryFieldContext.contextValues,\n }),\n ...(state.pipeline && {\n pipeline: state.pipeline,\n }),\n ...(state.query && {\n q: state.query.q,\n enableQuerySyntax: state.query.enableQuerySyntax,\n }),\n ...(state.searchHub && {\n searchHub: state.searchHub,\n }),\n ...(state.sortCriteria && {\n sortCriteria: state.sortCriteria,\n }),\n ...(state.configuration.analytics.enabled &&\n (await fromAnalyticsStateToAnalyticsParams(\n state.configuration.analytics,\n eventDescription\n ))),\n ...(state.excerptLength &&\n !isNullOrUndefined(state.excerptLength.length) && {\n excerptLength: state.excerptLength.length,\n }),\n ...(state.configuration.search.authenticationProviders.length && {\n authentication:\n state.configuration.search.authenticationProviders.join(','),\n }),\n };\n};\n", "import type {EventDescription} from 'coveo.analytics';\nimport {getAnalyticsSource} from '../../api/analytics/analytics-selectors.js';\nimport {getVisitorID} from '../../api/analytics/coveo-analytics-utils.js';\nimport {getPageID} from '../../api/analytics/search-analytics.js';\nimport type {AnalyticsParam} from '../../api/search/search-api-params.js';\nimport type {AnalyticsState} from './configuration-state.js';\n\nexport const fromAnalyticsStateToAnalyticsParams = async (\n s: AnalyticsState,\n eventDescription?: EventDescription\n): Promise<AnalyticsParam> => {\n const isNextAnalytics = s.analyticsMode === 'next';\n return {\n analytics: {\n clientId: await getVisitorID(s),\n clientTimestamp: new Date().toISOString(),\n documentReferrer: s.originLevel3,\n originContext: s.originContext,\n ...(eventDescription && {\n actionCause: eventDescription.actionCause,\n customData: eventDescription.customData,\n }),\n ...(eventDescription &&\n !isNextAnalytics && {\n customData: eventDescription.customData,\n }),\n ...(s.userDisplayName && {userDisplayName: s.userDisplayName}),\n ...(s.documentLocation && {documentLocation: s.documentLocation}),\n ...(s.deviceId && {deviceId: s.deviceId}),\n ...(getPageID() && {pageId: getPageID()}),\n ...(isNextAnalytics && s.trackingId && {trackingId: s.trackingId}),\n ...{capture: isNextAnalytics},\n ...(isNextAnalytics && {source: getAnalyticsSource(s)}),\n },\n };\n};\n", "import type {SearchAPIErrorWithStatusCode} from '../../api/search/search-api-error-response.js';\nimport {getAdvancedSearchQueriesInitialState} from '../advanced-search-queries/advanced-search-queries-state.js';\nimport {\n type LegacySearchAction,\n makeAnalyticsAction,\n} from '../analytics/analytics-utils.js';\nimport {getQueryInitialState} from '../query/query-state.js';\n\nexport const logFetchMoreResults = (): LegacySearchAction =>\n makeAnalyticsAction('search/logFetchMoreResults', (client) =>\n client.makeFetchMoreResults()\n );\n\nexport const logQueryError = (\n error: SearchAPIErrorWithStatusCode\n): LegacySearchAction =>\n makeAnalyticsAction('search/queryError', (client, state) =>\n client.makeQueryError({\n query: state.query?.q || getQueryInitialState().q,\n aq:\n state.advancedSearchQueries?.aq ||\n getAdvancedSearchQueriesInitialState().aq,\n cq:\n state.advancedSearchQueries?.cq ||\n getAdvancedSearchQueriesInitialState().cq,\n dq:\n state.advancedSearchQueries?.dq ||\n getAdvancedSearchQueriesInitialState().dq,\n errorType: error.type,\n errorMessage: error.message,\n })\n );\n", "type AdvancedSearchQueriesDefaultFiltersState = {\n /**\n * The initial cq filter (e.g., `((q AND aq) OR dq) AND cq).\n */\n cq: string;\n\n /**\n * The initial aq filter (e.g., `((q AND aq) OR dq) AND cq).\n */\n aq: string;\n\n /**\n * The initial lq filter, or large query expression filter\n */\n lq: string;\n\n /**\n * The initial dq filter, or disjunction query expression filter (e.g., `((q AND aq) OR dq) AND cq).\n */\n dq: string;\n};\n\nexport interface AdvancedSearchQueriesState {\n /**\n * The cq filter (e.g., `((q AND aq) OR dq) AND cq).\n */\n cq: string;\n\n /**\n * Whether the cq filter was manually set.\n *\n * If the cq was manually set and the cq is registered, the cq will not be overridden by the default filter.\n */\n cqWasSet: boolean;\n\n /**\n * The aq filter (e.g., `((q AND aq) OR dq) AND cq).\n */\n aq: string;\n\n /**\n * Whether the aq filter was manually set.\n *\n * If the aq was manually set and the aq is registered, the aq will not be overridden by the default filter.\n */\n aqWasSet: boolean;\n\n /**\n * The lq filter, or large query expression filter.\n *\n * The large query expression (lq) is a part of the combined query expression which typically contains a case\n * description, a long textual query, or any other form of text that can help refine a query.\n */\n lq: string;\n\n /**\n * Whether the lq filter was manually set.\n *\n * If the lq was manually set and the lq is registered, the lq will not be overridden by the default filter.\n */\n lqWasSet: boolean;\n\n /**\n * The dq filter, or disjunction query expression.\n *\n * This is the disjunctive part of the query expression that is merged with the other expression parts using an OR boolean operator (e.g., `((q AND aq) OR dq) AND cq).\n */\n dq: string;\n /**\n * Whether the dq filter was manually set.\n *\n * If the dq was manually set and the dq is registered, the dq will not be overridden by the default filter.\n */\n dqWasSet: boolean;\n\n /**\n * The initial filters meant to be used as default values for the cq filter and aq filter.\n */\n defaultFilters: AdvancedSearchQueriesDefaultFiltersState;\n}\n\nexport const getAdvancedSearchQueriesInitialState: () => AdvancedSearchQueriesState =\n () => ({\n cq: '',\n cqWasSet: false,\n aq: '',\n aqWasSet: false,\n lq: '',\n lqWasSet: false,\n dq: '',\n dqWasSet: false,\n defaultFilters: {\n cq: '',\n aq: '',\n lq: '',\n dq: '',\n },\n });\n", "import {isNullOrUndefined} from '@coveo/bueno';\nimport type {AnyAction} from '@reduxjs/toolkit';\nimport type {ThunkDispatch} from 'redux-thunk';\nimport type {StateNeededBySearchAnalyticsProvider} from '../../../api/analytics/search-analytics.js';\nimport type {SearchRequest} from '../../../api/search/search/search-request.js';\nimport type {SearchResponseSuccess} from '../../../api/search/search/search-response.js';\nimport {\n isErrorResponse,\n isSuccessResponse,\n type SearchAPIClient,\n} from '../../../api/search/search-api-client.js';\nimport type {SearchAPIErrorWithStatusCode} from '../../../api/search/search-api-error-response.js';\nimport type {SearchOrigin} from '../../../api/search/search-metadata.js';\nimport type {ClientThunkExtraArguments} from '../../../app/thunk-extra-arguments.js';\nimport type {\n AdvancedSearchQueriesSection,\n CategoryFacetSection,\n ConfigurationSection,\n ContextSection,\n DateFacetSection,\n DebugSection,\n DidYouMeanSection,\n FacetOptionsSection,\n FacetOrderSection,\n FacetSection,\n FieldsSection,\n FoldingSection,\n NumericFacetSection,\n PaginationSection,\n PipelineSection,\n QuerySection,\n QuerySetSection,\n SearchHubSection,\n SearchSection,\n SortSection,\n TriggerSection,\n} from '../../../state/state-sections.js';\nimport type {AnalyticsAsyncThunk} from '../../analytics/analytics-utils.js';\nimport {applyDidYouMeanCorrection} from '../../did-you-mean/did-you-mean-actions.js';\nimport {logDidYouMeanAutomatic} from '../../did-you-mean/did-you-mean-analytics-actions.js';\nimport {snapshot} from '../../history/history-actions.js';\nimport {extractHistory} from '../../history/history-state.js';\nimport {updateQuery} from '../../query/query-actions.js';\nimport {getQueryInitialState} from '../../query/query-state.js';\nimport {logTriggerQuery} from '../../triggers/trigger-analytics-actions.js';\nimport {\n applyQueryTriggerModification,\n updateIgnoreQueryTrigger,\n} from '../../triggers/triggers-actions.js';\nimport {logQueryError} from '../search-analytics-actions.js';\nimport {\n type ErrorResponse,\n type MappedSearchRequest,\n mapSearchResponse,\n type SuccessResponse,\n} from '../search-mappings.js';\nimport {getSearchInitialState} from '../search-state.js';\nimport type {ExecuteSearchThunkReturn} from './search-actions.js';\nimport {buildSearchRequest} from './search-request.js';\n\nexport type StateNeededByExecuteSearch = ConfigurationSection &\n Partial<\n QuerySection &\n AdvancedSearchQueriesSection &\n PaginationSection &\n SortSection &\n FacetSection &\n NumericFacetSection &\n CategoryFacetSection &\n DateFacetSection &\n ContextSection &\n DidYouMeanSection &\n FieldsSection &\n PipelineSection &\n SearchHubSection &\n QuerySetSection &\n FacetOptionsSection &\n FacetOrderSection &\n DebugSection &\n SearchSection &\n FoldingSection &\n TriggerSection\n >;\n\ninterface FetchedResponse {\n response: SuccessResponse | ErrorResponse;\n duration: number;\n queryExecuted: string;\n requestExecuted: SearchRequest;\n}\n\ntype ValidReturnTypeFromProcessingStep<RejectionType> =\n | ExecuteSearchThunkReturn\n | RejectionType;\n\nexport interface AsyncThunkConfig {\n getState: () => StateNeededByExecuteSearch;\n dispatch: ThunkDispatch<\n StateNeededByExecuteSearch,\n ClientThunkExtraArguments<SearchAPIClient> & {\n searchAPIClient?: SearchAPIClient | undefined;\n },\n AnyAction\n >;\n\n rejectWithValue: (err: SearchAPIErrorWithStatusCode) => unknown;\n analyticsAction: AnalyticsAsyncThunk | null;\n extra: ClientThunkExtraArguments<SearchAPIClient>;\n}\n\ntype QueryCorrectionCallback = (modification: string) => void;\n\ninterface FetchFromAPIOptions {\n origin: SearchOrigin;\n disableAbortWarning?: boolean;\n}\n\nexport class AsyncSearchThunkProcessor<RejectionType> {\n constructor(\n private config: AsyncThunkConfig,\n private onUpdateQueryForCorrection: QueryCorrectionCallback = (\n modification\n ) => {\n this.dispatch(updateQuery({q: modification}));\n }\n ) {}\n\n public async fetchFromAPI(\n {mappings, request}: MappedSearchRequest,\n options: FetchFromAPIOptions\n ) {\n const startedAt = Date.now();\n const response = mapSearchResponse(\n await this.extra.apiClient.search(request, options),\n mappings\n );\n const duration = Date.now() - startedAt;\n const queryExecuted = this.getState().query?.q || '';\n return {response, duration, queryExecuted, requestExecuted: request};\n }\n\n public async process(\n fetched: FetchedResponse\n ): Promise<ValidReturnTypeFromProcessingStep<RejectionType>> {\n return (\n this.processQueryErrorOrContinue(fetched) ??\n (await this.processQueryCorrectionsOrContinue(fetched)) ??\n (await this.processQueryTriggersOrContinue(fetched)) ??\n this.processSuccessResponse(fetched)\n );\n }\n\n private processQueryErrorOrContinue(\n fetched: FetchedResponse\n ): ValidReturnTypeFromProcessingStep<RejectionType> | null {\n if (isErrorResponse(fetched.response)) {\n this.dispatch(logQueryError(fetched.response.error));\n return this.rejectWithValue(fetched.response.error) as RejectionType;\n }\n\n return null;\n }\n\n private async processQueryCorrectionsOrContinue(\n fetched: FetchedResponse\n ): Promise<ValidReturnTypeFromProcessingStep<RejectionType> | null> {\n const state = this.getState();\n const successResponse = this.getSuccessResponse(fetched);\n\n if (!successResponse || !state.didYouMean) {\n return null;\n }\n\n const {enableDidYouMean, automaticallyCorrectQuery} = state.didYouMean;\n const {results, queryCorrections, queryCorrection} = successResponse;\n\n if (!enableDidYouMean || !automaticallyCorrectQuery) {\n return null;\n }\n\n const shouldExecuteClassicDidYouMeanAutoCorrection =\n results.length === 0 && queryCorrections && queryCorrections.length !== 0;\n\n const shouldExecuteModernDidYouMeanAutoCorrection =\n !isNullOrUndefined(queryCorrection) &&\n !isNullOrUndefined(queryCorrection.correctedQuery);\n\n const shouldExitWithNoAutoCorrection =\n !shouldExecuteClassicDidYouMeanAutoCorrection &&\n !shouldExecuteModernDidYouMeanAutoCorrection;\n\n if (shouldExitWithNoAutoCorrection) {\n return null;\n }\n\n const ret = shouldExecuteClassicDidYouMeanAutoCorrection\n ? await this.processLegacyDidYouMeanAutoCorrection(fetched)\n : this.processModernDidYouMeanAutoCorrection(fetched);\n\n this.dispatch(snapshot(extractHistory(this.getState())));\n\n return ret;\n }\n\n private async processLegacyDidYouMeanAutoCorrection(\n originalFetchedResponse: FetchedResponse\n ): Promise<ExecuteSearchThunkReturn | RejectionType | null> {\n const originalQuery = this.getCurrentQuery();\n const originalSearchSuccessResponse = this.getSuccessResponse(\n originalFetchedResponse\n )!;\n if (!originalSearchSuccessResponse.queryCorrections) {\n return null;\n }\n\n const {correctedQuery} = originalSearchSuccessResponse.queryCorrections[0];\n\n const retried =\n await this.automaticallyRetryQueryWithCorrection(correctedQuery);\n\n if (isErrorResponse(retried.response)) {\n this.dispatch(logQueryError(retried.response.error));\n return this.rejectWithValue(retried.response.error) as RejectionType;\n }\n\n this.logOriginalAnalyticsQueryBeforeAutoCorrection(originalFetchedResponse);\n this.dispatch(snapshot(extractHistory(this.getState())));\n\n return {\n ...retried,\n response: {\n ...retried.response.success,\n queryCorrections: originalSearchSuccessResponse.queryCorrections,\n },\n automaticallyCorrected: true,\n originalQuery,\n analyticsAction: logDidYouMeanAutomatic(),\n };\n }\n\n private processModernDidYouMeanAutoCorrection(\n originalFetchedResponse: FetchedResponse\n ): ExecuteSearchThunkReturn {\n const successResponse = this.getSuccessResponse(originalFetchedResponse)!;\n const {correctedQuery, originalQuery} = successResponse.queryCorrection!;\n\n this.onUpdateQueryForCorrection(correctedQuery);\n\n return {\n ...originalFetchedResponse,\n response: {\n ...successResponse,\n },\n queryExecuted: correctedQuery,\n automaticallyCorrected: true,\n originalQuery,\n analyticsAction: logDidYouMeanAutomatic(),\n };\n }\n\n private logOriginalAnalyticsQueryBeforeAutoCorrection(\n originalFetchedResponse: FetchedResponse\n ) {\n const state = this.getState();\n const successResponse = this.getSuccessResponse(originalFetchedResponse)!;\n this.analyticsAction?.()(\n this.dispatch,\n () =>\n this.getStateAfterResponse(\n originalFetchedResponse.queryExecuted,\n originalFetchedResponse.duration,\n state,\n successResponse\n ),\n this.extra\n );\n }\n\n private async processQueryTriggersOrContinue(\n fetched: FetchedResponse\n ): Promise<ValidReturnTypeFromProcessingStep<RejectionType> | null> {\n const successResponse = this.getSuccessResponse(fetched);\n if (!successResponse) {\n return null;\n }\n const correctedQuery =\n (successResponse.triggers.find((trigger) => trigger.type === 'query')\n ?.content as string) || '';\n\n if (!correctedQuery) {\n return null;\n }\n\n const ignored = this.getState().triggers?.queryModification.queryToIgnore;\n\n if (ignored === correctedQuery) {\n this.dispatch(updateIgnoreQueryTrigger(''));\n return null;\n }\n\n if (this.analyticsAction) {\n await this.dispatch(this.analyticsAction);\n }\n\n const originalQuery = this.getCurrentQuery();\n const retried =\n await this.automaticallyRetryQueryWithTriggerModification(correctedQuery);\n\n if (isErrorResponse(retried.response)) {\n this.dispatch(logQueryError(retried.response.error));\n return this.rejectWithValue(retried.response.error) as RejectionType;\n }\n\n this.dispatch(snapshot(extractHistory(this.getState())));\n return {\n ...retried,\n response: {\n ...retried.response.success,\n },\n automaticallyCorrected: false,\n originalQuery,\n analyticsAction: logTriggerQuery(),\n };\n }\n\n private getStateAfterResponse(\n query: string,\n duration: number,\n previousState: StateNeededByExecuteSearch,\n response: SearchResponseSuccess\n ): StateNeededBySearchAnalyticsProvider {\n return {\n ...previousState,\n query: {\n q: query,\n enableQuerySyntax:\n previousState.query?.enableQuerySyntax ??\n getQueryInitialState().enableQuerySyntax,\n },\n search: {\n ...getSearchInitialState(),\n duration,\n response,\n results: response.results,\n },\n };\n }\n\n private processSuccessResponse(\n fetched: FetchedResponse\n ): ValidReturnTypeFromProcessingStep<RejectionType> {\n this.dispatch(snapshot(extractHistory(this.getState())));\n return {\n ...fetched,\n response: this.getSuccessResponse(fetched)!,\n automaticallyCorrected: false,\n originalQuery: this.getCurrentQuery(),\n analyticsAction: this.analyticsAction!,\n };\n }\n\n private getSuccessResponse(fetched: FetchedResponse) {\n if (isSuccessResponse(fetched.response)) {\n return fetched.response.success;\n }\n return null;\n }\n\n private async automaticallyRetryQueryWithCorrection(correction: string) {\n this.onUpdateQueryForCorrection(correction);\n const fetched = await this.fetchFromAPI(\n await buildSearchRequest(this.getState()),\n {origin: 'mainSearch'}\n );\n this.dispatch(applyDidYouMeanCorrection(correction));\n return fetched;\n }\n\n private async automaticallyRetryQueryWithTriggerModification(\n modified: string\n ) {\n this.dispatch(\n applyQueryTriggerModification({\n newQuery: modified,\n originalQuery: this.getCurrentQuery(),\n })\n );\n this.onUpdateQueryForCorrection(modified);\n const fetched = await this.fetchFromAPI(\n await buildSearchRequest(this.getState()),\n {origin: 'mainSearch'}\n );\n\n return fetched;\n }\n\n private getCurrentQuery() {\n const state = this.getState();\n return state.query?.q !== undefined ? state.query.q : '';\n }\n\n private get extra() {\n return this.config.extra;\n }\n\n private getState() {\n return this.config.getState();\n }\n\n private get dispatch() {\n return this.config.dispatch;\n }\n\n private get analyticsAction() {\n return this.config.analyticsAction;\n }\n\n private get rejectWithValue() {\n return this.config.rejectWithValue;\n }\n}\n", "import {StringValue} from '@coveo/bueno';\nimport {createAction} from '@reduxjs/toolkit';\nimport {\n requiredNonEmptyString,\n validatePayload,\n} from '../../utils/validate-payload.js';\nimport type {CorrectionMode} from './did-you-mean-state.js';\n\nexport const enableDidYouMean = createAction('didYouMean/enable');\n\nexport const disableDidYouMean = createAction('didYouMean/disable');\n\nexport const disableAutomaticQueryCorrection = createAction(\n 'didYouMean/automaticCorrections/disable'\n);\n\nexport const enableAutomaticQueryCorrection = createAction(\n 'didYouMean/automaticCorrections/enable'\n);\n\nexport const applyDidYouMeanCorrection = createAction(\n 'didYouMean/correction',\n (payload: string) => validatePayload(payload, requiredNonEmptyString)\n);\n\nexport const setCorrectionMode = createAction(\n 'didYouMean/automaticCorrections/mode',\n (payload: CorrectionMode) =>\n validatePayload(\n payload,\n new StringValue<CorrectionMode>({\n constrainTo: ['next', 'legacy'],\n emptyAllowed: false,\n required: true,\n })\n )\n);\n", "import {\n type LegacySearchAction,\n makeAnalyticsAction,\n} from '../analytics/analytics-utils.js';\nimport {SearchPageEvents} from '../analytics/search-action-cause.js';\nimport type {SearchAction} from '../search/search-actions.js';\n\n//TODO: KIT-2859\nexport const logDidYouMeanClick = (): LegacySearchAction =>\n makeAnalyticsAction('analytics/didyoumean/click', (client) =>\n client.makeDidYouMeanClick()\n );\n\n//TODO: KIT-2859\nexport const logDidYouMeanAutomatic = (): LegacySearchAction =>\n makeAnalyticsAction('analytics/didyoumean/automatic', (client) =>\n client.makeDidYouMeanAutomatic()\n );\n\nexport const didYouMeanClick = (): SearchAction => ({\n actionCause: SearchPageEvents.didYouMeanClick,\n});\n\nexport const didYouMeanAutomatic = (): SearchAction => ({\n actionCause: SearchPageEvents.didYouMeanAutomatic,\n});\n", "import type {SearchParametersState} from '../../state/search-app-state.js';\nimport {getAdvancedSearchQueriesInitialState} from '../advanced-search-queries/advanced-search-queries-state.js';\nimport {getContextInitialState} from '../context/context-state.js';\nimport {getDebugInitialState} from '../debug/debug-state.js';\nimport {getDictionaryFieldContextInitialState} from '../dictionary-field-context/dictionary-field-context-state.js';\nimport {getFacetOptionsInitialState} from '../facet-options/facet-options-state.js';\nimport {getAutomaticFacetSetInitialState} from '../facets/automatic-facet-set/automatic-facet-set-state.js';\nimport {getCategoryFacetSetInitialState} from '../facets/category-facet-set/category-facet-set-state.js';\nimport {getFacetOrderInitialState} from '../facets/facet-order/facet-order-state.js';\nimport {getFacetSetInitialState} from '../facets/facet-set/facet-set-state.js';\nimport {getDateFacetSetInitialState} from '../facets/range-facets/date-facet-set/date-facet-set-state.js';\nimport {getNumericFacetSetInitialState} from '../facets/range-facets/numeric-facet-set/numeric-facet-set-state.js';\nimport {getPaginationInitialState} from '../pagination/pagination-state.js';\nimport {getPipelineInitialState} from '../pipeline/pipeline-state.js';\nimport {getQueryInitialState} from '../query/query-state.js';\nimport {getQuerySetInitialState} from '../query-set/query-set-state.js';\nimport {getSearchHubInitialState} from '../search-hub/search-hub-state.js';\nimport {getSortCriteriaInitialState} from '../sort-criteria/sort-criteria-state.js';\nimport {getStaticFilterSetInitialState} from '../static-filter-set/static-filter-set-state.js';\nimport {getTabSetInitialState} from '../tab-set/tab-set-state.js';\n\nexport interface HistoryState extends SearchParametersState {\n facetOrder: string[];\n}\n\nexport function getHistoryInitialState(): HistoryState {\n return extractHistory({});\n}\n\nexport function extractHistory(state: Partial<HistoryState>): HistoryState {\n return {\n context: state.context || getContextInitialState(),\n dictionaryFieldContext:\n state.dictionaryFieldContext || getDictionaryFieldContextInitialState(),\n facetSet: state.facetSet || getFacetSetInitialState(),\n numericFacetSet: state.numericFacetSet || getNumericFacetSetInitialState(),\n dateFacetSet: state.dateFacetSet || getDateFacetSetInitialState(),\n categoryFacetSet:\n state.categoryFacetSet || getCategoryFacetSetInitialState(),\n automaticFacetSet:\n state.automaticFacetSet ?? getAutomaticFacetSetInitialState(),\n pagination: state.pagination || getPaginationInitialState(),\n query: state.query || getQueryInitialState(),\n tabSet: state.tabSet || getTabSetInitialState(),\n advancedSearchQueries:\n state.advancedSearchQueries || getAdvancedSearchQueriesInitialState(),\n staticFilterSet: state.staticFilterSet || getStaticFilterSetInitialState(),\n querySet: state.querySet || getQuerySetInitialState(),\n sortCriteria: state.sortCriteria || getSortCriteriaInitialState(),\n pipeline: state.pipeline || getPipelineInitialState(),\n searchHub: state.searchHub || getSearchHubInitialState(),\n facetOptions: state.facetOptions || getFacetOptionsInitialState(),\n facetOrder: state.facetOrder ?? getFacetOrderInitialState(),\n debug: state.debug ?? getDebugInitialState(),\n };\n}\n", "/**\n * Represents a contextual value, which can be a string or an array of string.\n */\nexport type ContextValue = string | string[];\n/**\n * Represents a key/value pair of contextual information.\n */\nexport type ContextPayload = Record<string, ContextValue>;\nexport type ContextState = {\n /**\n * Hold the contextual information that can be [leveraged by the Coveo platform to provide relevant results](https://docs.coveo.com/en/2081/coveo-machine-learning/understanding-custom-context).\n */\n contextValues: ContextPayload;\n};\n\nexport function getContextInitialState(): ContextState {\n return {\n contextValues: {},\n };\n}\n", "export type DictionaryFieldContextPayload = Record<string, string>;\nexport type DictionaryFieldContextState = {\n /**\n * Holds the [dictionary field context](https://docs.coveo.com/en/2036/) information.\n */\n contextValues: DictionaryFieldContextPayload;\n};\n\nexport function getDictionaryFieldContextInitialState(): DictionaryFieldContextState {\n return {\n contextValues: {},\n };\n}\n", "export type FacetOptionsSlice = {\n enabled: boolean;\n tabs?: {included?: string[]; excluded?: string[]};\n};\n\nexport type FacetOptionsState = {\n freezeFacetOrder: boolean;\n facets: Record<string, FacetOptionsSlice>;\n};\n\nexport function getFacetOptionsSliceInitialState(): FacetOptionsSlice {\n return {enabled: true, tabs: {}};\n}\n\nexport function getFacetOptionsInitialState(): FacetOptionsState {\n return {\n freezeFacetOrder: false,\n facets: {},\n };\n}\n", "export type FacetOrderState = string[];\n\nexport function getFacetOrderInitialState(): FacetOrderState {\n return [];\n}\n", "export interface PaginationState {\n firstResult: number;\n defaultNumberOfResults: number;\n numberOfResults: number;\n totalCountFiltered: number;\n}\n\nexport function getPaginationInitialState(): PaginationState {\n return {\n firstResult: 0,\n defaultNumberOfResults: 10,\n numberOfResults: 10,\n totalCountFiltered: 0,\n };\n}\n", "export type QuerySetState = Record<string, string>;\n\nexport function getQuerySetInitialState(): QuerySetState {\n return {};\n}\n", "import type {FacetValueState} from '../facets/facet-api/value.js';\n\nexport type StaticFilterSetState = Record<string, StaticFilterSlice>;\n\nexport interface StaticFilterSlice {\n id: string;\n values: StaticFilterValue[];\n}\n\nexport interface StaticFilterValue {\n /**\n * A human-readable caption for the expression (e.g., `Youtube`).\n */\n caption: string;\n\n /**\n * The query filter expression to apply when the value is selected (e.g., `@filetype==\"youtubevideo\"`).\n */\n expression: string;\n\n /**\n * The state of the static filter value. The possible values are `idle`, `selected`, `excluded`.\n */\n state: StaticFilterValueState;\n}\n\nexport type StaticFilterValueState = FacetValueState;\n\nexport function getStaticFilterSetInitialState(): StaticFilterSetState {\n return {};\n}\n", "export type TabSetState = Record<string, TabSlice>;\n\nexport type TabSlice = {\n id: string;\n expression: string;\n isActive: boolean;\n};\n\nexport function getTabSetInitialState(): TabSetState {\n return {};\n}\n", "import {RecordValue} from '@coveo/bueno';\nimport {\n requiredEmptyAllowedString,\n validatePayload,\n} from '../../utils/validate-payload.js';\nimport {\n type LegacySearchAction,\n makeAnalyticsAction,\n} from '../analytics/analytics-utils.js';\n\nexport interface LogUndoTriggerQueryActionCreatorPayload {\n /**\n * The query that was undone.\n */\n undoneQuery: string;\n}\n\nconst logUndoTriggerQueryPayloadDefinition = new RecordValue({\n values: {\n undoneQuery: requiredEmptyAllowedString,\n },\n options: {required: true},\n});\n\nexport const logTriggerQuery = (): LegacySearchAction =>\n makeAnalyticsAction('analytics/trigger/query', (client, state) => {\n if (state.triggers?.queryModification.newQuery) {\n return client.makeTriggerQuery();\n }\n return null;\n });\n\n//TODO: KIT-2859\nexport const logUndoTriggerQuery = (\n payload: LogUndoTriggerQueryActionCreatorPayload\n): LegacySearchAction =>\n makeAnalyticsAction('analytics/trigger/query/undo', (client) => {\n validatePayload(payload, logUndoTriggerQueryPayloadDefinition);\n return client.makeUndoTriggerQuery(payload);\n });\n\nexport const logNotifyTrigger = (): LegacySearchAction =>\n makeAnalyticsAction('analytics/trigger/notify', (client, state) => {\n if (!state.triggers?.notifications.length) {\n return null;\n }\n return client.makeTriggerNotify({\n notifications: state.triggers.notifications,\n });\n });\n\nexport const logTriggerRedirect = (): LegacySearchAction =>\n makeAnalyticsAction('analytics/trigger/redirect', (client, state) => {\n if (state.triggers?.redirectTo) {\n return client.makeTriggerRedirect({\n redirectedTo: state.triggers.redirectTo,\n });\n }\n return null;\n });\n\nexport const logTriggerExecute = (): LegacySearchAction =>\n makeAnalyticsAction('analytics/trigger/execute', (client, state) => {\n if (!state.triggers?.executions.length) {\n return null;\n }\n return client.makeTriggerExecute({\n executions: state.triggers.executions,\n });\n });\n\n// --------------------- KIT-2859 : Everything above this will get deleted ! :) ---------------------\n", "import {RecordValue, StringValue} from '@coveo/bueno';\nimport {createAction} from '@reduxjs/toolkit';\nimport {nonEmptyString, validatePayload} from '../../utils/validate-payload.js';\n\nexport interface ApplyQueryTriggerModificationPayload {\n originalQuery: string;\n newQuery: string;\n}\n\nexport const updateIgnoreQueryTrigger = createAction(\n 'trigger/query/ignore',\n (q: string) =>\n validatePayload(q, new StringValue({emptyAllowed: true, required: true}))\n);\n\nexport const applyQueryTriggerModification = createAction(\n 'trigger/query/modification',\n (payload: ApplyQueryTriggerModificationPayload) =>\n validatePayload<ApplyQueryTriggerModificationPayload>(\n payload,\n new RecordValue({\n values: {originalQuery: nonEmptyString, modification: nonEmptyString},\n })\n )\n);\n", "import type {EventDescription} from 'coveo.analytics';\nimport type {SearchAppState} from '../../../state/search-app-state.js';\nimport type {ConfigurationSection} from '../../../state/state-sections.js';\nimport {getFacets} from '../../../utils/facet-utils.js';\nimport type {AutomaticFacetRequest} from '../../facets/automatic-facet-set/interfaces/request.js';\nimport type {AutomaticFacetResponse} from '../../facets/automatic-facet-set/interfaces/response.js';\nimport {maximumNumberOfResultsFromIndex} from '../../pagination/pagination-constants.js';\nimport {buildSearchAndFoldingLoadCollectionRequest} from '../../search-and-folding/legacy/search-and-folding-request.js';\nimport {mapSearchRequest} from '../search-mappings.js';\n\ntype StateNeededBySearchRequest = ConfigurationSection &\n Partial<SearchAppState>;\n\nexport const buildSearchRequest = async (\n state: StateNeededBySearchRequest,\n eventDescription?: EventDescription\n) => {\n const cq = buildConstantQuery(state);\n const facets = getFacets(state);\n const automaticFacets = getAutomaticFacets(state);\n const sharedWithFoldingRequest =\n await buildSearchAndFoldingLoadCollectionRequest(state, eventDescription);\n\n // Corner case:\n // If the number of results requested would go over the index limit (maximumNumberOfResultsFromIndex)\n // we need to request fewer results in order to ensure we do not receive an exception from the index\n const getNumberOfResultsWithinIndexLimit = () => {\n if (!state.pagination) {\n return undefined;\n }\n\n const isOverIndexLimit =\n state.pagination.firstResult + state.pagination.numberOfResults >\n maximumNumberOfResultsFromIndex;\n\n if (isOverIndexLimit) {\n return maximumNumberOfResultsFromIndex - state.pagination.firstResult;\n }\n return state.pagination.numberOfResults;\n };\n\n return mapSearchRequest({\n ...sharedWithFoldingRequest,\n ...(state.didYouMean && {\n queryCorrection: {\n enabled:\n state.didYouMean.enableDidYouMean &&\n state.didYouMean.queryCorrectionMode === 'next',\n options: {\n automaticallyCorrect: state.didYouMean.automaticallyCorrectQuery\n ? ('whenNoResults' as const)\n : ('never' as const),\n },\n },\n enableDidYouMean:\n state.didYouMean.enableDidYouMean &&\n state.didYouMean.queryCorrectionMode === 'legacy',\n }),\n ...(cq && {cq}),\n ...(facets.length && {facets}),\n ...(state.pagination && {\n numberOfResults: getNumberOfResultsWithinIndexLimit(),\n firstResult: state.pagination.firstResult,\n }),\n ...(state.facetOptions && {\n facetOptions: {freezeFacetOrder: state.facetOptions.freezeFacetOrder},\n }),\n ...(state.folding?.enabled && {\n filterField: state.folding.fields.collection,\n childField: state.folding.fields.parent,\n parentField: state.folding.fields.child,\n filterFieldRange: state.folding.filterFieldRange,\n }),\n ...(state.automaticFacetSet && {\n generateAutomaticFacets: {\n desiredCount: state.automaticFacetSet.desiredCount,\n numberOfValues: state.automaticFacetSet.numberOfValues,\n currentFacets: automaticFacets,\n },\n }),\n ...(state.generatedAnswer && {\n pipelineRuleParameters: {\n mlGenerativeQuestionAnswering: {\n responseFormat: state.generatedAnswer.responseFormat,\n citationsFieldToInclude:\n state.generatedAnswer.fieldsToIncludeInCitations,\n },\n },\n }),\n });\n};\n\nfunction getAutomaticFacets(state: StateNeededBySearchRequest) {\n const facets = state.automaticFacetSet?.set;\n\n return facets\n ? Object.values(facets)\n .map((facet) => facet.response)\n .map(responseToAutomaticFacetRequest)\n .filter((facetRequest) => facetRequest.currentValues.length > 0)\n : undefined;\n}\nfunction responseToAutomaticFacetRequest(\n response: AutomaticFacetResponse\n): AutomaticFacetRequest {\n const {field, label, values} = response;\n\n const selectedValues = values.filter((value) => value.state === 'selected');\n return {\n field,\n label,\n currentValues: selectedValues,\n };\n}\n\nfunction buildConstantQuery(state: StateNeededBySearchRequest) {\n const cq = state.advancedSearchQueries?.cq.trim() || '';\n const activeTab = Object.values(state.tabSet || {}).find(\n (tab) => tab.isActive\n );\n const tabExpression = activeTab?.expression.trim() || '';\n const filterExpressions = getStaticFilterExpressions(state);\n\n return [cq, tabExpression, ...filterExpressions]\n .filter((expression) => !!expression)\n .join(' AND ');\n}\n\nfunction getStaticFilterExpressions(state: StateNeededBySearchRequest) {\n const filters = Object.values(state.staticFilterSet || {});\n return filters.map((filter) => {\n const selected = filter.values.filter(\n (value) => value.state === 'selected' && !!value.expression.trim()\n );\n\n const expression = selected.map((value) => value.expression).join(' OR ');\n return selected.length > 1 ? `(${expression})` : expression;\n });\n}\n", "import {isNullOrUndefined} from '@coveo/bueno';\nimport type {AnyAction} from '@reduxjs/toolkit';\nimport type {ThunkDispatch} from 'redux-thunk';\nimport type {SearchRequest} from '../../api/search/search/search-request.js';\nimport {\n isErrorResponse,\n isSuccessResponse,\n type SearchAPIClient,\n} from '../../api/search/search-api-client.js';\nimport type {SearchAPIErrorWithStatusCode} from '../../api/search/search-api-error-response.js';\nimport type {SearchOrigin} from '../../api/search/search-metadata.js';\nimport type {ClientThunkExtraArguments} from '../../app/thunk-extra-arguments.js';\nimport type {\n AdvancedSearchQueriesSection,\n CategoryFacetSection,\n ConfigurationSection,\n ContextSection,\n DateFacetSection,\n DebugSection,\n DidYouMeanSection,\n FacetOptionsSection,\n FacetOrderSection,\n FacetSection,\n FieldsSection,\n FoldingSection,\n NumericFacetSection,\n PaginationSection,\n PipelineSection,\n QuerySection,\n QuerySetSection,\n SearchHubSection,\n SearchSection,\n SortSection,\n TriggerSection,\n} from '../../state/state-sections.js';\nimport {applyDidYouMeanCorrection} from '../did-you-mean/did-you-mean-actions.js';\nimport {didYouMeanAutomatic} from '../did-you-mean/did-you-mean-analytics-actions.js';\nimport {snapshot} from '../history/history-actions.js';\nimport {extractHistory} from '../history/history-state.js';\nimport {updateQuery} from '../query/query-actions.js';\nimport {\n applyQueryTriggerModification,\n updateIgnoreQueryTrigger,\n} from '../triggers/triggers-actions.js';\nimport type {ExecuteSearchThunkReturn} from './search-actions.js';\nimport {logQueryError} from './search-analytics-actions.js';\nimport {\n type ErrorResponse,\n type MappedSearchRequest,\n mapSearchResponse,\n type SuccessResponse,\n} from './search-mappings.js';\nimport {buildSearchRequest} from './search-request.js';\n\ninterface AnalyticsAction {\n actionCause?: string;\n}\n\nexport type StateNeededByExecuteSearch = ConfigurationSection &\n Partial<\n QuerySection &\n AdvancedSearchQueriesSection &\n PaginationSection &\n SortSection &\n FacetSection &\n NumericFacetSection &\n CategoryFacetSection &\n DateFacetSection &\n ContextSection &\n DidYouMeanSection &\n FieldsSection &\n PipelineSection &\n SearchHubSection &\n QuerySetSection &\n FacetOptionsSection &\n FacetOrderSection &\n DebugSection &\n SearchSection &\n FoldingSection &\n TriggerSection\n >;\n\ninterface FetchedResponse {\n response: SuccessResponse | ErrorResponse;\n duration: number;\n queryExecuted: string;\n requestExecuted: SearchRequest;\n}\n\ntype ValidReturnTypeFromProcessingStep<RejectionType> =\n | ExecuteSearchThunkReturn\n | RejectionType;\n\ninterface AsyncThunkConfig {\n getState: () => StateNeededByExecuteSearch;\n dispatch: ThunkDispatch<\n StateNeededByExecuteSearch,\n ClientThunkExtraArguments<SearchAPIClient> & {\n searchAPIClient?: SearchAPIClient | undefined;\n },\n AnyAction\n >;\n\n rejectWithValue: (err: SearchAPIErrorWithStatusCode) => unknown;\n analyticsAction: AnalyticsAction;\n extra: ClientThunkExtraArguments<SearchAPIClient>;\n}\n\ntype QueryCorrectionCallback = (modification: string) => void;\n\ninterface FetchFromAPIOptions {\n origin: SearchOrigin;\n disableAbortWarning?: boolean;\n}\n\nexport class AsyncSearchThunkProcessor<RejectionType> {\n constructor(\n private config: AsyncThunkConfig,\n private onUpdateQueryForCorrection: QueryCorrectionCallback = (\n modification\n ) => {\n this.dispatch(updateQuery({q: modification}));\n }\n ) {}\n\n public async fetchFromAPI(\n {mappings, request}: MappedSearchRequest,\n options: FetchFromAPIOptions\n ) {\n const startedAt = Date.now();\n const response = mapSearchResponse(\n await this.extra.apiClient.search(request, options),\n mappings\n );\n const duration = Date.now() - startedAt;\n const queryExecuted = this.getState().query?.q || '';\n return {response, duration, queryExecuted, requestExecuted: request};\n }\n\n public async process(\n fetched: FetchedResponse\n ): Promise<ValidReturnTypeFromProcessingStep<RejectionType>> {\n return (\n this.processQueryErrorOrContinue(fetched) ??\n (await this.processQueryCorrectionsOrContinue(fetched)) ??\n (await this.processQueryTriggersOrContinue(fetched)) ??\n this.processSuccessResponse(fetched)\n );\n }\n\n private processQueryErrorOrContinue(\n fetched: FetchedResponse\n ): ValidReturnTypeFromProcessingStep<RejectionType> | null {\n if (isErrorResponse(fetched.response)) {\n this.dispatch(logQueryError(fetched.response.error));\n return this.rejectWithValue(fetched.response.error) as RejectionType;\n }\n\n return null;\n }\n\n private async processQueryCorrectionsOrContinue(\n fetched: FetchedResponse\n ): Promise<ValidReturnTypeFromProcessingStep<RejectionType> | null> {\n const state = this.getState();\n const successResponse = this.getSuccessResponse(fetched);\n\n if (!successResponse || !state.didYouMean) {\n return null;\n }\n\n const {enableDidYouMean, automaticallyCorrectQuery} = state.didYouMean;\n const {results, queryCorrections, queryCorrection} = successResponse;\n\n if (!enableDidYouMean || !automaticallyCorrectQuery) {\n return null;\n }\n\n const shouldExecuteClassicDidYouMeanAutoCorrection =\n results.length === 0 && queryCorrections && queryCorrections.length !== 0;\n\n const shouldExecuteModernDidYouMeanAutoCorrection =\n !isNullOrUndefined(queryCorrection) &&\n !isNullOrUndefined(queryCorrection.correctedQuery);\n\n const shouldExitWithNoAutoCorrection =\n !shouldExecuteClassicDidYouMeanAutoCorrection &&\n !shouldExecuteModernDidYouMeanAutoCorrection;\n\n if (shouldExitWithNoAutoCorrection) {\n return null;\n }\n\n const ret = shouldExecuteClassicDidYouMeanAutoCorrection\n ? await this.processLegacyDidYouMeanAutoCorrection(fetched)\n : this.processModernDidYouMeanAutoCorrection(fetched);\n\n this.dispatch(snapshot(extractHistory(this.getState())));\n\n return ret;\n }\n\n private async processLegacyDidYouMeanAutoCorrection(\n originalFetchedResponse: FetchedResponse\n ): Promise<ExecuteSearchThunkReturn | RejectionType | null> {\n const originalQuery = this.getCurrentQuery();\n const originalSearchSuccessResponse = this.getSuccessResponse(\n originalFetchedResponse\n )!;\n if (!originalSearchSuccessResponse.queryCorrections) {\n return null;\n }\n\n const {correctedQuery} = originalSearchSuccessResponse.queryCorrections[0];\n\n const retried =\n await this.automaticallyRetryQueryWithCorrection(correctedQuery);\n\n if (isErrorResponse(retried.response)) {\n this.dispatch(logQueryError(retried.response.error));\n return this.rejectWithValue(retried.response.error) as RejectionType;\n }\n\n this.dispatch(snapshot(extractHistory(this.getState())));\n\n return {\n ...retried,\n response: {\n ...retried.response.success,\n queryCorrections: originalSearchSuccessResponse.queryCorrections,\n },\n automaticallyCorrected: true,\n originalQuery,\n };\n }\n\n private processModernDidYouMeanAutoCorrection(\n originalFetchedResponse: FetchedResponse\n ): ExecuteSearchThunkReturn {\n const successResponse = this.getSuccessResponse(originalFetchedResponse)!;\n const {correctedQuery, originalQuery} = successResponse.queryCorrection!;\n\n this.onUpdateQueryForCorrection(correctedQuery);\n\n return {\n ...originalFetchedResponse,\n response: {\n ...successResponse,\n },\n queryExecuted: correctedQuery,\n automaticallyCorrected: true,\n originalQuery,\n };\n }\n\n private async processQueryTriggersOrContinue(\n fetched: FetchedResponse\n ): Promise<ValidReturnTypeFromProcessingStep<RejectionType> | null> {\n const successResponse = this.getSuccessResponse(fetched);\n if (!successResponse) {\n return null;\n }\n const correctedQuery =\n (successResponse.triggers.find((trigger) => trigger.type === 'query')\n ?.content as string) || '';\n\n if (!correctedQuery) {\n return null;\n }\n\n const ignored = this.getState().triggers?.queryModification.queryToIgnore;\n\n if (ignored === correctedQuery) {\n this.dispatch(updateIgnoreQueryTrigger(''));\n return null;\n }\n\n const originalQuery = this.getCurrentQuery();\n const retried =\n await this.automaticallyRetryQueryWithTriggerModification(correctedQuery);\n\n if (isErrorResponse(retried.response)) {\n this.dispatch(logQueryError(retried.response.error));\n return this.rejectWithValue(retried.response.error) as RejectionType;\n }\n\n this.dispatch(snapshot(extractHistory(this.getState())));\n return {\n ...retried,\n response: {\n ...retried.response.success,\n },\n automaticallyCorrected: false,\n originalQuery,\n };\n }\n\n private processSuccessResponse(\n fetched: FetchedResponse\n ): ValidReturnTypeFromProcessingStep<RejectionType> {\n this.dispatch(snapshot(extractHistory(this.getState())));\n return {\n ...fetched,\n response: this.getSuccessResponse(fetched)!,\n automaticallyCorrected: false,\n originalQuery: this.getCurrentQuery(),\n };\n }\n\n private getSuccessResponse(fetched: FetchedResponse) {\n if (isSuccessResponse(fetched.response)) {\n return fetched.response.success;\n }\n return null;\n }\n\n private async automaticallyRetryQueryWithCorrection(correction: string) {\n this.onUpdateQueryForCorrection(correction);\n const state = this.getState();\n const {actionCause} = didYouMeanAutomatic();\n const fetched = await this.fetchFromAPI(\n await buildSearchRequest(state, this.extra.navigatorContext, {\n actionCause,\n }),\n {origin: 'mainSearch'}\n );\n this.dispatch(applyDidYouMeanCorrection(correction));\n return fetched;\n }\n\n private async automaticallyRetryQueryWithTriggerModification(\n modified: string\n ) {\n this.dispatch(\n applyQueryTriggerModification({\n newQuery: modified,\n originalQuery: this.getCurrentQuery(),\n })\n );\n this.onUpdateQueryForCorrection(modified);\n const fetched = await this.fetchFromAPI(\n await buildSearchRequest(this.getState(), this.extra.navigatorContext),\n {origin: 'mainSearch'}\n );\n\n return fetched;\n }\n\n private getCurrentQuery() {\n const state = this.getState();\n return state.query?.q !== undefined ? state.query.q : '';\n }\n\n private get extra() {\n return this.config.extra;\n }\n\n private getState() {\n return this.config.getState();\n }\n\n private get dispatch() {\n return this.config.dispatch;\n }\n\n private get rejectWithValue() {\n return this.config.rejectWithValue;\n }\n}\n", "import type {EventDescription} from 'coveo.analytics';\nimport type {NavigatorContext} from '../../app/navigator-context-provider.js';\nimport type {SearchAppState} from '../../state/search-app-state.js';\nimport type {ConfigurationSection} from '../../state/state-sections.js';\nimport {sortCriteriaMap, sortFacets} from '../../utils/facet-utils.js';\nimport type {AutomaticFacetRequest} from '../facets/automatic-facet-set/interfaces/request.js';\nimport type {AutomaticFacetResponse} from '../facets/automatic-facet-set/interfaces/response.js';\nimport type {FacetSetState} from '../facets/facet-set/facet-set-state.js';\nimport {\n type AnyFacetRequest,\n getFacetRequests,\n} from '../facets/generic/interfaces/generic-facet-request.js';\nimport type {RangeFacetSetState} from '../facets/range-facets/generic/interfaces/range-facet.js';\nimport {maximumNumberOfResultsFromIndex} from '../pagination/pagination-constants.js';\nimport {buildSearchAndFoldingLoadCollectionRequest as legacyBuildSearchAndFoldingLoadCollectionRequest} from '../search-and-folding/legacy/search-and-folding-request.js';\nimport {buildSearchAndFoldingLoadCollectionRequest} from '../search-and-folding/search-and-folding-request.js';\nimport {selectStaticFilterExpressions} from '../static-filter-set/static-filter-set-selectors.js';\nimport {mapSearchRequest} from './search-mappings.js';\n\ntype StateNeededBySearchRequest = ConfigurationSection &\n Partial<SearchAppState>;\n\nexport const buildSearchRequest = async (\n state: StateNeededBySearchRequest,\n navigatorContext: NavigatorContext,\n eventDescription?: EventDescription\n) => {\n const cq = buildConstantQuery(state);\n const facets = getFacets(state);\n const automaticFacets = getAutomaticFacets(state);\n const sharedWithFoldingRequest =\n state.configuration.analytics.analyticsMode === 'legacy'\n ? await legacyBuildSearchAndFoldingLoadCollectionRequest(\n state,\n eventDescription\n )\n : buildSearchAndFoldingLoadCollectionRequest(\n state,\n navigatorContext,\n eventDescription\n );\n\n // Corner case:\n // If the number of results requested would go over the index limit (maximumNumberOfResultsFromIndex)\n // we need to request fewer results in order to ensure we do not receive an exception from the index\n const getNumberOfResultsWithinIndexLimit = () => {\n if (!state.pagination) {\n return undefined;\n }\n\n const isOverIndexLimit =\n state.pagination.firstResult + state.pagination.numberOfResults >\n maximumNumberOfResultsFromIndex;\n\n if (isOverIndexLimit) {\n return maximumNumberOfResultsFromIndex - state.pagination.firstResult;\n }\n return state.pagination.numberOfResults;\n };\n\n return mapSearchRequest({\n ...sharedWithFoldingRequest,\n ...(state.didYouMean && {\n queryCorrection: {\n enabled:\n state.didYouMean.enableDidYouMean &&\n state.didYouMean.queryCorrectionMode === 'next',\n options: {\n automaticallyCorrect: state.didYouMean.automaticallyCorrectQuery\n ? ('whenNoResults' as const)\n : ('never' as const),\n },\n },\n enableDidYouMean:\n state.didYouMean.enableDidYouMean &&\n state.didYouMean.queryCorrectionMode === 'legacy',\n }),\n ...(cq && {cq}),\n ...(facets.length && {facets}),\n ...(state.pagination && {\n numberOfResults: getNumberOfResultsWithinIndexLimit(),\n firstResult: state.pagination.firstResult,\n }),\n ...(state.facetOptions && {\n facetOptions: {freezeFacetOrder: state.facetOptions.freezeFacetOrder},\n }),\n ...(state.folding?.enabled && {\n filterField: state.folding.fields.collection,\n childField: state.folding.fields.parent,\n parentField: state.folding.fields.child,\n filterFieldRange: state.folding.filterFieldRange,\n }),\n ...(state.automaticFacetSet && {\n generateAutomaticFacets: {\n desiredCount: state.automaticFacetSet.desiredCount,\n numberOfValues: state.automaticFacetSet.numberOfValues,\n currentFacets: automaticFacets,\n },\n }),\n ...(state.generatedAnswer && {\n pipelineRuleParameters: {\n mlGenerativeQuestionAnswering: {\n responseFormat: state.generatedAnswer.responseFormat,\n citationsFieldToInclude:\n state.generatedAnswer.fieldsToIncludeInCitations,\n },\n },\n }),\n });\n};\n\nfunction getFacets(state: StateNeededBySearchRequest) {\n return sortFacets(getAllEnabledFacets(state), state.facetOrder ?? []);\n}\n\nfunction getAutomaticFacets(state: StateNeededBySearchRequest) {\n const facets = state.automaticFacetSet?.set;\n\n return facets\n ? Object.values(facets)\n .map((facet) => facet.response)\n .map(responseToAutomaticFacetRequest)\n .filter((facetRequest) => facetRequest.currentValues.length > 0)\n : undefined;\n}\nfunction responseToAutomaticFacetRequest(\n response: AutomaticFacetResponse\n): AutomaticFacetRequest {\n const {field, label, values} = response;\n\n const selectedValues = values.filter((value) => value.state === 'selected');\n return {\n field,\n label,\n currentValues: selectedValues,\n };\n}\nfunction getAllEnabledFacets(state: StateNeededBySearchRequest) {\n return getAllFacets(state).filter(\n ({facetId}) => state.facetOptions?.facets[facetId]?.enabled ?? true\n );\n}\n\nfunction getAllFacets(state: StateNeededBySearchRequest) {\n return [\n ...getSpecificFacetRequests(state.facetSet ?? {}),\n ...getRangeFacetRequests(state.numericFacetSet ?? {}),\n ...getRangeFacetRequests(state.dateFacetSet ?? {}),\n ...getFacetRequests(state.categoryFacetSet ?? {}),\n ];\n}\n\nfunction getSpecificFacetRequests<T extends FacetSetState>(state: T) {\n return getFacetRequests(state).map((request) => {\n /* The Search API does not support 'alphanumericDescending' as a string value and instead relies on a new sort mechanism to specify sort order.\n At the moment, this is only supported for alphanumeric sorting, but will likely transition to this pattern for other types in the future. */\n const sortCriteria =\n sortCriteriaMap[request.sortCriteria as keyof typeof sortCriteriaMap];\n if (sortCriteria) {\n return {\n ...request,\n sortCriteria,\n };\n }\n return request;\n });\n}\n\nfunction getRangeFacetRequests<T extends RangeFacetSetState>(state: T) {\n return getFacetRequests(state).map((request) => {\n const currentValues =\n request.currentValues as AnyFacetRequest['currentValues'];\n const hasActiveValues = currentValues.some(({state}) => state !== 'idle');\n const hasPreviousStateValues = currentValues.some(\n (value) => value.previousState\n );\n\n if (\n request.generateAutomaticRanges &&\n !hasActiveValues &&\n !hasPreviousStateValues\n ) {\n return {...request, currentValues: []};\n }\n\n return request;\n });\n}\n\nfunction buildConstantQuery(state: StateNeededBySearchRequest) {\n const cq = state.advancedSearchQueries?.cq.trim() || '';\n const activeTab = Object.values(state.tabSet || {}).find(\n (tab) => tab.isActive\n );\n const tabExpression = activeTab?.expression.trim() || '';\n const filterExpressions = selectStaticFilterExpressions(state);\n\n return [cq, tabExpression, ...filterExpressions]\n .filter((expression) => !!expression)\n .join(' AND ');\n}\n", "export interface ResultPreviewState {\n uniqueId: string;\n content: string;\n isLoading: boolean;\n contentURL?: string;\n position: number;\n resultsWithPreview: string[];\n}\n\nexport function getResultPreviewInitialState(): ResultPreviewState {\n return {\n uniqueId: '',\n content: '',\n isLoading: false,\n position: -1,\n resultsWithPreview: [],\n };\n}\n", "import type {SearchEngine} from '../../app/search-engine/search-engine.js';\nimport {\n type LogClickEventActionCreatorPayload,\n type LogCustomEventActionCreatorPayload,\n type LogSearchEventActionCreatorPayload,\n logClickEvent,\n logCustomEvent,\n logSearchEvent,\n} from './analytics-actions.js';\nimport type {\n ClickAction,\n CustomAction,\n LegacySearchAction,\n} from './analytics-utils.js';\n\nexport type {\n LogSearchEventActionCreatorPayload,\n LogClickEventActionCreatorPayload,\n LogCustomEventActionCreatorPayload,\n};\n\n/**\n * The generic analytics action creators.\n *\n * @group Actions\n * @category GenericAnalytics\n */\nexport interface GenericAnalyticsActionCreators {\n /**\n * Creates a search analytics event.\n *\n * @param payload - The action creator payload.\n * @returns A dispatchable action.\n */\n logSearchEvent(\n payload: LogSearchEventActionCreatorPayload\n ): LegacySearchAction;\n\n /**\n * Creates a click analytics event.\n *\n * @param payload - The action creator payload.\n * @returns A dispatchable action.\n */\n logClickEvent(payload: LogClickEventActionCreatorPayload): ClickAction;\n\n /**\n * Creates a custom analytics event.\n *\n * @param payload - The action creator payload.\n * @returns A dispatchable action.\n */\n logCustomEvent(payload: LogCustomEventActionCreatorPayload): CustomAction;\n}\n\n/**\n * Returns possible generic analytics action creators.\n *\n * @param engine - The headless engine.\n * @returns An object holding the action creators.\n *\n * @group Actions\n * @category GenericAnalytics\n */\nexport function loadGenericAnalyticsActions(\n engine: SearchEngine\n): GenericAnalyticsActionCreators {\n engine.addReducers({});\n\n return {\n logSearchEvent,\n logClickEvent,\n logCustomEvent,\n };\n}\n", "import type {SearchPageEvents as LegacySearchPageEvents} from 'coveo.analytics/dist/definitions/searchPage/searchPageEvents.js';\nimport type {Result} from '../../api/search/search/result.js';\nimport {\n nonEmptyString,\n requiredNonEmptyString,\n validatePayload,\n} from '../../utils/validate-payload.js';\nimport type {OmniboxSuggestionMetadata} from '../query-suggest/query-suggest-analytics-actions.js';\nimport type {SearchAction} from '../search/search-actions.js';\nimport {\n type ClickAction,\n type CustomAction,\n documentIdentifier,\n type LegacySearchAction,\n makeAnalyticsAction,\n partialDocumentInformation,\n validateResultPayload,\n} from './analytics-utils.js';\nimport {SearchPageEvents} from './search-action-cause.js';\n\nconst validateEvent = (p: {evt: string; type?: string}) =>\n validatePayload(p, {\n evt: requiredNonEmptyString,\n type: nonEmptyString,\n });\n\nexport interface LogSearchEventActionCreatorPayload {\n /**\n * The identifier of the search action (e.g., `interfaceLoad`).\n * */\n evt: string;\n /**\n * The event metadata.\n * */\n meta?: Record<string, unknown>;\n}\n\nexport const logSearchEvent = (\n p: LogSearchEventActionCreatorPayload\n): LegacySearchAction =>\n makeAnalyticsAction('analytics/generic/search', (client) => {\n validateEvent(p);\n const {evt, meta} = p;\n return client.makeSearchEvent(evt as LegacySearchPageEvents, meta);\n });\n\nexport interface LogClickEventActionCreatorPayload {\n /**\n * The identifier of the click action (e.g., `documentOpen`).\n * */\n evt: string;\n\n /**\n * The result associated with the click event.\n */\n result: Result;\n\n /**\n * The event metadata.\n * */\n meta?: Record<string, unknown>;\n}\n\nexport const logClickEvent = (\n p: LogClickEventActionCreatorPayload\n): ClickAction =>\n makeAnalyticsAction('analytics/generic/click', (client, state) => {\n validateResultPayload(p.result);\n validateEvent(p);\n\n return client.makeClickEvent(\n p.evt as LegacySearchPageEvents,\n partialDocumentInformation(p.result, state),\n documentIdentifier(p.result),\n p.meta\n );\n });\n\nexport interface LogCustomEventActionCreatorPayload {\n /**\n * The event cause identifier of the custom action\n */\n evt: string;\n /**\n * The event type identifier of the custom action\n */\n type: string;\n /**\n * The event metadata.\n * */\n meta?: Record<string, unknown>;\n}\n\nexport const logCustomEvent = (\n p: LogCustomEventActionCreatorPayload\n): CustomAction =>\n makeAnalyticsAction('analytics/generic/custom', (client) => {\n validateEvent(p);\n return client.makeCustomEventWithType(p.evt, p.type, p.meta);\n });\n\n//TODO: KIT-2859\nexport const logInterfaceLoad = (): LegacySearchAction =>\n makeAnalyticsAction('analytics/interface/load', (client) =>\n client.makeInterfaceLoad()\n );\n\n//TODO: KIT-2859\nexport const logInterfaceChange = (): LegacySearchAction =>\n makeAnalyticsAction('analytics/interface/change', (client, state) =>\n client.makeInterfaceChange({\n interfaceChangeTo: state.configuration.analytics.originLevel2,\n })\n );\n\n//TODO: KIT-2859\nexport const logSearchFromLink = (): LegacySearchAction =>\n makeAnalyticsAction('analytics/interface/searchFromLink', (client) =>\n client.makeSearchFromLink()\n );\n\n//TODO: KIT-2859\nexport const logOmniboxFromLink = (\n metadata: OmniboxSuggestionMetadata\n): LegacySearchAction =>\n makeAnalyticsAction('analytics/interface/omniboxFromLink', (client) =>\n client.makeOmniboxFromLink(metadata)\n );\n\n// --------------------- KIT-2859 : Everything above this will get deleted ! :) ---------------------\nexport const interfaceLoad = (): SearchAction => ({\n actionCause: SearchPageEvents.interfaceLoad,\n});\n\nexport const interfaceChange = (): SearchAction => ({\n actionCause: SearchPageEvents.interfaceChange,\n});\n\nexport const searchFromLink = (): SearchAction => ({\n actionCause: SearchPageEvents.searchFromLink,\n});\n\nexport const omniboxFromLink = (): SearchAction => ({\n actionCause: SearchPageEvents.omniboxFromLink,\n});\n", "import type {CaseAssistEngine} from '../../app/case-assist-engine/case-assist-engine.js';\nimport type {CaseAssistAction} from '../analytics/analytics-utils.js';\nimport {\n logAbandonCase,\n logCaseNextStage,\n logCaseStart,\n logClassificationClick,\n logCreateCase,\n logDocumentSuggestionClick,\n logDocumentSuggestionRating,\n logQuickviewDocumentSuggestionClick,\n logSolveCase,\n logUpdateCaseField,\n} from './case-assist-analytics-actions.js';\n\nexport interface NextStageOptions {\n stageName?: string;\n}\n\n/**\n * The Case Assist analytics action creators.\n *\n * @group Actions\n * @category Analytics\n */\nexport interface CaseAssistAnalyticsActionCreators {\n /**\n * Creates a Case Assist event for when the user enters the interface.\n *\n * @returns A dispatchable action.\n */\n logCaseStart(): CaseAssistAction;\n\n /**\n * Creates a Case Assist event for when the user moves to the next stage.\n *\n * @param options - Options of the event.\n * @returns A dispatchable action.\n */\n logCaseNextStage(options?: NextStageOptions): CaseAssistAction;\n\n /**\n * Creates a Case Assist event for when the user creates a case.\n *\n * @returns A dispatchable action.\n */\n logCreateCase(): CaseAssistAction;\n\n /**\n * Creates a Case Assist event for when the case is solved.\n *\n * @returns A dispatchable action.\n */\n logSolveCase(): CaseAssistAction;\n\n /**\n * Creates a Case Assist event for when the user leaves.\n *\n * @returns A dispatchable action.\n */\n logAbandonCase(): CaseAssistAction;\n\n /**\n * Creates a Case Assist event for when the user updates a field.\n *\n * @param fieldName - The target field name.\n * @returns A dispatchable action.\n */\n logUpdateCaseField(fieldName: string): CaseAssistAction;\n\n /**\n * Creates a Case Assist event for when the user selects a classification suggestion.\n *\n * @param classificationId - The unique identifier of the target classification.\n * @returns A dispatchable action.\n */\n logClassificationClick(classificationId: string): CaseAssistAction;\n\n /**\n * Creates a Case Assist event for when the user selects a document suggestion.\n *\n * @param suggestionId - The unique identifier of the target document.\n * @returns A dispatchable action.\n */\n logDocumentSuggestionClick(suggestionId: string): CaseAssistAction;\n\n /**\n * Creates a Case Assist event for when the user previews a document suggestion from the quickview.\n *\n * @param suggestionId - The unique identifier of the target document.\n * @returns A dispatchable action.\n */\n logQuickviewDocumentSuggestionClick(suggestionId: string): CaseAssistAction;\n\n /**\n * Creates a Case Assist event for when the user rates a document suggestion.\n *\n * @param suggestionId - The unique identifier of the target document.\n * @param rating - The rating.\n * @returns A dispatchable action.\n */\n logDocumentSuggestionRating(\n suggestionId: string,\n rating: number\n ): CaseAssistAction;\n}\n\n/**\n * Loads the case assist analytics actions.\n * @param engine The case assist engine.\n * @returns The available analytics actions.\n *\n * @group Actions\n * @category Analytics\n */\nexport function loadCaseAssistAnalyticsActions(\n engine: CaseAssistEngine\n): CaseAssistAnalyticsActionCreators {\n engine.addReducers({});\n return {\n logCaseStart,\n logCaseNextStage,\n logCreateCase,\n logSolveCase,\n logAbandonCase,\n logUpdateCaseField,\n logClassificationClick,\n logDocumentSuggestionClick,\n logDocumentSuggestionRating,\n logQuickviewDocumentSuggestionClick,\n };\n}\n", "import type {AsyncThunkAction, PayloadAction} from '@reduxjs/toolkit';\nimport type {AsyncThunkCaseAssistOptions} from '../../api/service/case-assist/case-assist-api-client.js';\nimport type {CaseAssistEngine} from '../../app/case-assist-engine/case-assist-engine.js';\nimport {caseFieldReducer as caseField} from '../../features/case-field/case-field-slice.js';\nimport {\n type FetchClassificationsThunkReturn,\n fetchCaseClassifications,\n registerCaseField,\n type SetCaseFieldActionCreatorPayload,\n type StateNeededByFetchClassifications,\n updateCaseField,\n} from './case-field-actions.js';\n\nexport type {SetCaseFieldActionCreatorPayload};\n\n/**\n * The case field action creators.\n *\n * @group Actions\n * @category CaseField\n */\nexport interface CaseFieldActionCreators {\n /**\n * Registers a case field with the specified field and value.\n *\n * @param payload - The action creator payload.\n * @returns A dispatchable action.\n */\n registerCaseField(\n payload: SetCaseFieldActionCreatorPayload\n ): PayloadAction<SetCaseFieldActionCreatorPayload>;\n\n /**\n * Updates the specified case field with the provided value.\n *\n * @param payload - The action creator payload.\n * @returns A dispatchable action.\n */\n updateCaseField(\n payload: SetCaseFieldActionCreatorPayload\n ): PayloadAction<SetCaseFieldActionCreatorPayload>;\n\n /**\n * Retrieves the case classifications from the platform.\n * A single call retrieves classifications for all fields specified in the Case Assist configuration.\n * Case classifications are retrieved based on the case information entered so far.\n *\n * @returns A dispatchable action.\n */\n fetchCaseClassifications(): AsyncThunkAction<\n FetchClassificationsThunkReturn,\n void,\n AsyncThunkCaseAssistOptions<StateNeededByFetchClassifications>\n >;\n}\n\n/**\n * Loads the `case fields` reducer and returns possible action creators.\n *\n * @param engine - The headless engine.\n * @returns An object holding the action creators.\n *\n * @group Actions\n * @category CaseField\n */\nexport function loadCaseFieldActions(\n engine: CaseAssistEngine\n): CaseFieldActionCreators {\n engine.addReducers({caseField});\n\n return {\n registerCaseField,\n updateCaseField,\n fetchCaseClassifications,\n };\n}\n", "import type {PayloadAction} from '@reduxjs/toolkit';\nimport type {CaseAssistEngine} from '../../app/case-assist-engine/case-assist-engine.js';\nimport {caseInputReducer as caseInput} from '../../features/case-input/case-input-slice.js';\nimport {\n type SetCaseInputActionCreatorPayload,\n updateCaseInput,\n} from './case-input-actions.js';\n\nexport type {SetCaseInputActionCreatorPayload};\n\n/**\n * The case inputs action creators.\n *\n * @group Actions\n * @category CaseInput\n */\nexport interface CaseInputActionCreators {\n /**\n * Adds or updates the state caseInputs with the specified field and value.\n *\n * @param payload - The action creator payload.\n * @returns A dispatchable action.\n */\n updateCaseInput(\n payload: SetCaseInputActionCreatorPayload\n ): PayloadAction<SetCaseInputActionCreatorPayload>;\n}\n\n/**\n * Loads the `case inputs` reducer and returns possible action creators.\n *\n * @param engine - The headless engine.\n * @returns An object holding the action creators.\n *\n * @group Actions\n * @category CaseInput\n */\nexport function loadCaseInputActions(\n engine: CaseAssistEngine\n): CaseInputActionCreators {\n engine.addReducers({caseInput});\n\n return {\n updateCaseInput,\n };\n}\n", "import type {AsyncThunkAction} from '@reduxjs/toolkit';\nimport type {AsyncThunkCaseAssistOptions} from '../../api/service/case-assist/case-assist-api-client.js';\nimport type {CaseAssistEngine} from '../../app/case-assist-engine/case-assist-engine.js';\nimport {documentSuggestionReducer as documentSuggestion} from '../../features/document-suggestion/document-suggestion-slice.js';\nimport {\n type FetchDocumentSuggestionsThunkReturn,\n fetchDocumentSuggestions,\n type StateNeededByFetchDocumentSuggestions,\n} from './document-suggestion-actions.js';\n\n/**\n * The document suggestion action creators.\n *\n * @group Actions\n * @category DocumentSuggestion\n */\nexport interface DocumentSuggestionActionCreators {\n /**\n * Retrieves the document suggestions from the platform.\n * Document suggestions are retrieved based on the case information entered so far.\n *\n * @returns A dispatchable action.\n */\n fetchDocumentSuggestions(): AsyncThunkAction<\n FetchDocumentSuggestionsThunkReturn,\n void,\n AsyncThunkCaseAssistOptions<StateNeededByFetchDocumentSuggestions>\n >;\n}\n\n/**\n * Loads the `document suggestion` reducer and returns possible action creators.\n *\n * @param engine - The headless engine.\n * @returns An object holding the action creators.\n *\n * @group Actions\n * @category DocumentSuggestion\n */\nexport function loadDocumentSuggestionActions(\n engine: CaseAssistEngine\n): DocumentSuggestionActionCreators {\n engine.addReducers({documentSuggestion});\n\n return {\n fetchDocumentSuggestions,\n };\n}\n"],
5
5
  "mappings": "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",
6
6
  "names": ["globalThisShim", "init_global_this_shim", "__esmMin", "_typeof", "obj", "polyfill", "sendBeacon", "url", "data", "event", "sync", "xhr", "isString", "isBlob", "init_navigator_sendbeacon_cjs", "__esmMin", "val", "require_cjs_ponyfill", "__commonJSMin", "exports", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "_arrayLikeToArray", "r", "a", "e", "_assertThisInitialized", "_callSuper", "t", "o", "_getPrototypeOf", "_possibleConstructorReturn", "_isNativeReflectConstruct", "_classCallCheck", "n", "_defineProperties", "_toPropertyKey", "_createClass", "_createForOfIteratorHelper", "_unsupportedIterableToArray", "F", "_get", "p", "_superPropBase", "_inherits", "_setPrototypeOf", "_superPropGet", "_toPrimitive", "i", "self", "createAbortEvent", "reason", "event", "normalizeAbortReason", "Emitter", "type", "callback", "options", "stack", "l", "_this", "stackToCall", "_loop", "listener", "AbortSignal", "_Emitter", "_this2", "aborted", "_this$reason", "time", "controller", "AbortController", "iterable", "abort", "clean", "_iterator", "_step", "signal", "err", "_iterator2", "_step2", "signalReason", "polyfillNeeded", "abortableFetchDecorator", "patchTargets", "_patchTargets", "fetch", "_patchTargets$Request", "NativeRequest", "NativeAbortController", "_patchTargets$__FORCE", "__FORCE_INSTALL_ABORTCONTROLLER_POLYFILL", "Request", "input", "init", "request", "realFetch", "abortableFetch", "abortError", "cancellation", "_", "reject", "import_cjs_ponyfill", "abortableFetch", "init_abortable_fetch_shim", "__esmMin", "abortableFetchFactory", "normalizeHeaderName", "name", "HEADERS_INVALID_CHARACTERS", "normalizeHeaderValue", "value", "HEADER_VALUE_REMOVE_REGEXP", "isValidHeaderName", "i", "character", "isToken", "isValidHeaderValue", "require_set_cookie", "import_set_cookie_parser", "charCodesToRemove", "NORMALIZED_HEADERS", "RAW_HEADER_NAMES", "HEADER_VALUE_DELIMITER", "_a", "_b", "_c", "Headers", "__commonJS", "exports", "module", "defaultParseOptions", "isNonEmptyString", "str", "parseString", "setCookieValue", "options", "parts", "nameValuePairStr", "parsed", "parseNameValuePair", "e", "cookie", "part", "sides", "key", "nameValueArr", "parse", "input", "sch", "cookies", "splitCookiesString", "cookiesString", "cookiesStrings", "pos", "start", "ch", "lastComma", "nextStart", "cookiesSeparatorFound", "skipWhitespace", "notSpecialChar", "__toESM", "_Headers", "init", "globalThisShim", "sortedKeys", "a", "b", "normalizedName", "normalizedValue", "resolvedValue", "callback", "thisArg", "setCookieHeader", "init_headers_shim", "__esmMin", "init_lib", "defaultOptions", "getSanitizedOptions", "options", "sanitized", "__assign", "exports", "fullJitter", "delay", "jitteredDelay", "exports", "noJitter", "delay", "exports", "full_jitter_1", "no_jitter_1", "JitterFactory", "options", "exports", "jitter_factory_1", "Delay", "options", "_this", "resolve", "attempt", "jitter", "constant", "base", "power", "delay", "exports", "delay_base_1", "SkipFirstDelay", "_super", "__extends", "exports", "delay_base_1", "AlwaysDelay", "_super", "__extends", "exports", "skip_first_delay_1", "always_delay_1", "DelayFactory", "options", "attempt", "delay", "initDelayClass", "exports", "options_1", "delay_factory_1", "backOff", "request", "options", "sanitizedOptions", "BackOff", "_a", "exports", "e_1", "shouldRetry", "delay", "require_dayjs_min", "__commonJSMin", "exports", "module", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "t", "e", "globalThisShim", "n", "r", "s", "u", "a", "o", "c", "f", "h", "d", "l", "$", "y", "M", "m", "v", "i", "g", "D", "p", "S", "_", "w", "b", "k", "require_quarterOfYear", "__commonJSMin", "exports", "module", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "t", "n", "globalThisShim", "e", "i", "r", "s", "u", "o", "require_customParseFormat", "__commonJSMin", "exports", "module", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "globalThisShim", "n", "r", "a", "e", "f", "t", "h", "u", "d", "i", "c", "l", "o", "s", "m", "M", "Y", "p", "v", "D", "w", "g", "y", "L", "require_timezone", "__commonJSMin", "exports", "module", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "t", "e", "globalThisShim", "n", "i", "o", "r", "a", "u", "f", "s", "m", "c", "d", "l", "h", "v", "require_utc", "__commonJSMin", "exports", "module", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "t", "i", "globalThisShim", "e", "s", "f", "n", "u", "o", "r", "l", "c", "require_quick_format_unescaped", "__commonJSMin", "exports", "module", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "tryStringify", "o", "format", "f", "args", "opts", "ss", "offset", "len", "objects", "index", "argLen", "str", "a", "lastPos", "flen", "i", "type", "require_browser", "__commonJSMin", "exports", "module", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "format", "pino", "_console", "pfGlobalThisOrFallback", "stdSerializers", "mock", "passthrough", "asErrValue", "levelToValue", "level", "logger", "baseLogFunctionSymbol", "hierarchySymbol", "logFallbackMap", "appendChildLogger", "parentLogger", "childLogger", "newEntry", "setupBaseLogFunctions", "levels", "proto", "logFunctions", "noop", "shouldSerialize", "serialize", "serializers", "k", "opts", "transmit", "stdErrSerialize", "customLevels", "getLevelVal", "getLevel", "setLevel", "setOpts", "getTimeFunction", "getLevels", "args", "child", "createLogEventShape", "set", "bindings", "childOptions", "childOptionsSerializers", "childSerializers", "childSerialize", "applySerializers", "Child", "parent", "newLogger", "values", "labels", "invertObject", "obj", "inverted", "key", "nullTime", "epochTime", "unixTime", "isoTime", "getBindingChain", "hierarchy", "self", "rootLogger", "transmitLevel", "transmitValue", "createWrap", "prependBindingsInArguments", "logFunc", "write", "ts", "i", "argsIsSerialized", "asObject", "methodValue", "levelFormatter", "logObjectFormatter", "argsCloned", "msg", "logObject", "lvl", "formattedLevel", "send", "methodLevel", "val", "arg", "err", "a", "defd", "o", "globalThisShim", "case_assist_index_exports", "__export", "ResultTemplatesHelpers", "buildCaseAssistEngine", "buildCaseField", "buildCaseInput", "buildController", "buildDocumentSuggestionList", "buildCaseAssistInteractiveResult", "buildCaseAssistQuickview", "getAnalyticsNextApiBaseUrl", "getOrganizationEndpoint", "loadCaseAssistAnalyticsActions", "loadCaseFieldActions", "loadCaseInputActions", "loadDocumentSuggestionActions", "loadGenericAnalyticsActions", "__toCommonJS", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "import_exponential_backoff", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "loadReducerError", "UnauthorizedTokenError", "DisconnectedError", "url", "statusCode", "__publicField", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "isArray", "value", "removeDuplicates", "arr", "predicate", "map", "item", "key", "doNotTrackValues", "doNotTrack", "nav", "win", "value", "fromEntries", "values", "newObject", "key", "clone", "value", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "encodeAsFormUrl", "obj", "body", "property", "key", "value", "canBeFormUrlEncoded", "isPrimitive", "val", "isThrottled", "status", "PlatformClient", "_PlatformClient", "options", "defaultRequestOptions", "buildDefaultRequestOptions", "logger", "requestInfo", "url", "requestData", "request", "response", "abortableFetch", "e", "shouldRetry", "UnauthorizedTokenError", "DisconnectedError", "error", "origin", "preprocessRequest", "requestMetadata", "_signal", "withoutSignal", "untaintedOutput", "clone", "processedRequest", "getOrganizationEndpoint", "organizationId", "environment", "endpointType", "environmentSuffix", "endpointTypePart", "getSearchApiBaseUrl", "getAnalyticsNextApiBaseUrl", "method", "requestParams", "contentType", "accessToken", "signal", "isMethodWithBody", "body", "encodeBody", "canBeFormUrlEncoded", "encodeAsFormUrl", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "buildSchemaValidationError", "errors", "context", "message", "SchemaValidationError", "Schema", "definition", "values", "mergedValues", "property", "error", "defaultValues", "defaultValue", "Value", "baseConfig", "value", "isNullOrUndefined", "isUndefined", "isNull", "BooleanValue", "config", "__publicField", "valueValidation", "isBooleanOrUndefined", "isBoolean", "NumberValue", "isNumberOrUndefined", "isNumber", "ISODateStringRegex", "StringValue", "emptyAllowed", "url", "regex", "constrainTo", "ISODate", "isString", "RecordValue", "input", "isRecord", "k", "v", "out", "key", "validator", "invalidValue", "ArrayValue", "invalid", "el", "isInvalid", "isArray", "EnumValue", "enumValue", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "NoopPreprocessRequest", "request", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "URLPath", "basePath", "__publicField", "name", "value", "key", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "pickNonBaseParams", "req", "_url", "_accessToken", "_organizationId", "_authentication", "nonBase", "unwrapError", "payload", "response", "unwrapSearchApiError", "unwrapClientError", "isSearchAPIException", "unwrapErrorByException", "isSearchAPIErrorWithStatusCode", "body", "r", "res", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "findEncoding", "response", "part", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "baseSearchRequest", "req", "method", "contentType", "path", "url", "URLPath", "buildContentURL", "req", "path", "url", "URLPath", "getHtml", "options", "response", "PlatformClient", "baseSearchRequest", "pickNonBaseParams", "encoding", "findEncoding", "buffer", "body", "isSuccessHtmlResponse", "unwrapError", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "buildDisconnectedError", "error", "buildIgnoredAbortedError", "buildAPIResponseFromErrorOrThrow", "disableAbortWarning", "DisconnectedError", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "baseCaseAssistRequest", "req", "method", "contentType", "path", "queryStringArguments", "validateCaseAssistRequestParams", "baseUrl", "queryString", "buildQueryString", "effectiveUrl", "prepareSuggestionRequestFields", "fields", "fieldName", "obj", "prepareContextFromFields", "args", "argName", "buildGetCaseClassificationsRequest", "req", "queryStringArguments", "baseCaseAssistRequest", "prepareRequestParams", "prepareSuggestionRequestFields", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "buildGetDocumentSuggestionsRequest", "req", "queryStringArguments", "baseCaseAssistRequest", "prepareRequestParams", "prepareSuggestionRequestFields", "CaseAssistAPIClient", "options", "req", "response", "PlatformClient", "buildGetCaseClassificationsRequest", "buildAPIResponseFromErrorOrThrow", "body", "buildGetDocumentSuggestionsRequest", "getHtml", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "formatProdErrorMessage", "code", "$$observable", "symbol_observable_default", "randomString", "ActionTypes", "actionTypes_default", "isPlainObject", "obj", "proto", "createStore", "reducer", "preloadedState", "enhancer", "formatProdErrorMessage", "currentReducer", "currentState", "currentListeners", "nextListeners", "listenerIdCounter", "isDispatching", "ensureCanMutateNextListeners", "listener", "key", "getState", "subscribe", "isSubscribed", "listenerId", "dispatch", "action", "isPlainObject", "replaceReducer", "nextReducer", "actionTypes_default", "observable", "outerSubscribe", "observer", "observeState", "observerAsObserver", "symbol_observable_default", "assertReducerShape", "reducers", "key", "reducer", "actionTypes_default", "formatProdErrorMessage", "combineReducers", "reducerKeys", "finalReducers", "i", "finalReducerKeys", "unexpectedKeyCache", "shapeAssertionError", "e", "state", "action", "hasChanged", "nextState", "previousStateForKey", "nextStateForKey", "actionType", "compose", "funcs", "arg", "a", "b", "args", "applyMiddleware", "middlewares", "createStore", "reducer", "preloadedState", "store", "dispatch", "formatProdErrorMessage", "middlewareAPI", "action", "chain", "middleware", "isAction", "isPlainObject", "NOTHING", "DRAFTABLE", "DRAFT_STATE", "die", "error", "args", "getPrototypeOf", "isDraft", "value", "DRAFT_STATE", "isDraftable", "isPlainObject", "DRAFTABLE", "isMap", "isSet", "objectCtorString", "proto", "Ctor", "original", "each", "obj", "iter", "getArchtype", "key", "entry", "index", "thing", "state", "has", "prop", "get", "set", "propOrOldValue", "t", "is", "x", "y", "target", "latest", "shallowCopy", "base", "strict", "isPlain", "descriptors", "keys", "i", "desc", "freeze", "deep", "isFrozen", "dontMutateFrozenCollections", "plugins", "getPlugin", "pluginKey", "plugin", "loadPlugin", "implementation", "currentScope", "getCurrentScope", "createScope", "parent_", "immer_", "usePatchesInScope", "scope", "patchListener", "revokeScope", "leaveScope", "revokeDraft", "enterScope", "immer", "draft", "processResult", "result", "baseDraft", "finalize", "maybeFreeze", "NOTHING", "rootScope", "path", "childValue", "finalizeProperty", "resultEach", "parentState", "targetObject", "rootPath", "targetIsSet", "res", "createProxyProxy", "parent", "isArray", "traps", "objectTraps", "arrayTraps", "revoke", "proxy", "source", "readPropFromProto", "peek", "prepareCopy", "createProxy", "getDescriptorFromProto", "current", "currentState", "markChanged", "owner", "fn", "Immer", "config", "recipe", "defaultBase", "self", "hasError", "p", "ip", "patches", "inversePatches", "patch", "applyPatchesImpl", "currentImpl", "copy", "enablePatches", "REPLACE", "ADD", "REMOVE", "generatePatches_", "basePath", "generatePatchesFromAssigned", "generateArrayPatches", "generateSetPatches", "base_", "assigned_", "copy_", "clonePatchValueIfNeeded", "assignedValue", "origValue", "op", "generateReplacementPatches_", "baseValue", "replacement", "applyPatches_", "parentType", "type", "deepClonePatchValue", "k", "v", "cloned", "immer", "Immer", "produce", "produceWithPatches", "setAutoFreeze", "setUseStrictShallowCopy", "applyPatches", "createDraft", "finishDraft", "assertIsFunction", "func", "errorMessage", "assertIsObject", "object", "assertIsArrayOfFunctions", "array", "item", "itemTypes", "ensureIsArray", "getDependencies", "createSelectorArgs", "dependencies", "collectInputSelectorResults", "inputSelectorArgs", "inputSelectorResults", "length", "REDUX_PROXY_LABEL", "proto", "StrongRef", "value", "Ref", "UNTERMINATED", "TERMINATED", "createCacheNode", "weakMapMemoize", "func", "options", "fnNode", "resultEqualityCheck", "lastResult", "resultsCount", "memoized", "cacheNode", "length", "i", "l", "arg", "objectCache", "objectNode", "primitiveCache", "primitiveNode", "terminatedNode", "result", "lastResultValue", "createSelectorCreator", "memoizeOrOptions", "memoizeOptionsFromArgs", "createSelectorCreatorOptions", "createSelector", "createSelectorArgs", "recomputations", "dependencyRecomputations", "directlyPassedOptions", "resultFunc", "assertIsFunction", "combinedOptions", "memoize", "memoizeOptions", "argsMemoize", "argsMemoizeOptions", "devModeChecks", "finalMemoizeOptions", "ensureIsArray", "finalArgsMemoizeOptions", "dependencies", "getDependencies", "memoizedResultFunc", "firstRun", "selector", "inputSelectorResults", "collectInputSelectorResults", "createStructuredSelector", "inputSelectorsObject", "selectorCreator", "assertIsObject", "inputSelectorKeys", "key", "composition", "index", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "createThunkMiddleware", "extraArgument", "dispatch", "getState", "next", "action", "thunk", "withExtraArgument", "composeWithDevTools", "compose", "devToolsEnhancer", "noop", "hasMatchFunction", "v", "createAction", "type", "prepareAction", "actionCreator", "args", "prepared", "formatProdErrorMessage", "action", "isAction", "Tuple", "_Tuple", "items", "arr", "freezeDraftable", "val", "isDraftable", "produce", "getOrInsertComputed", "map", "key", "compute", "isBoolean", "x", "buildGetDefaultMiddleware", "options", "thunk", "immutableCheck", "serializableCheck", "actionCreatorCheck", "middlewareArray", "Tuple", "withExtraArgument", "SHOULD_AUTOBATCH", "prepareAutoBatched", "payload", "createQueueWithTimer", "timeout", "notify", "autoBatchEnhancer", "next", "args", "store", "notifying", "shouldNotifyAtEndOfTick", "notificationQueued", "listeners", "queueCallback", "notifyListeners", "l", "listener", "wrappedListener", "unsubscribe", "action", "buildGetDefaultEnhancers", "middlewareEnhancer", "autoBatch", "enhancerArray", "configureStore", "getDefaultMiddleware", "reducer", "middleware", "devTools", "preloadedState", "enhancers", "rootReducer", "isPlainObject", "combineReducers", "formatProdErrorMessage", "finalMiddleware", "finalCompose", "compose", "composeWithDevTools", "applyMiddleware", "getDefaultEnhancers", "storeEnhancers", "composedEnhancer", "createStore", "executeReducerBuilderCallback", "builderCallback", "actionsMap", "actionMatchers", "defaultCaseReducer", "builder", "typeOrActionCreator", "type", "matcher", "isStateFunction", "createReducer", "initialState", "mapOrBuilderCallback", "finalActionMatchers", "finalDefaultCaseReducer", "getInitialState", "freezeDraftable", "frozenInitialState", "state", "caseReducers", "cr", "previousState", "caseReducer", "isDraft", "result", "isDraftable", "createNextState", "draft", "matches", "hasMatchFunction", "isAnyOf", "matchers", "isAllOf", "hasExpectedRequestMetadata", "validStatus", "hasValidRequestId", "hasValidRequestStatus", "isAsyncThunkArray", "a", "isPending", "asyncThunks", "asyncThunk", "isRejected", "isRejectedWithValue", "hasFlag", "isFulfilled", "isAsyncThunkAction", "urlAlphabet", "nanoid", "size", "id", "i", "commonProperties", "RejectWithValue", "meta", "__publicField", "FulfillWithMeta", "miniSerializeError", "value", "simpleError", "property", "createAsyncThunk", "typePrefix", "payloadCreator", "fulfilled", "createAction", "requestId", "arg", "pending", "rejected", "error", "actionCreator", "dispatch", "getState", "extra", "abortController", "abortHandler", "abortReason", "abort", "reason", "promise", "finalAction", "conditionResult", "isThenable", "abortedPromise", "_", "reject", "err", "unwrapResult", "asyncThunkSymbol", "asyncThunkCreator", "getType", "slice", "actionKey", "buildCreateSlice", "creators", "cAT", "asyncThunkSymbol", "options", "name", "reducerPath", "formatProdErrorMessage", "reducers", "buildReducerCreators", "reducerNames", "context", "contextMethods", "typeOrActionCreator", "reducer", "type", "matcher", "actionCreator", "reducerName", "reducerDefinition", "reducerDetails", "isAsyncThunkSliceReducerDefinition", "handleThunkCaseReducerDefinition", "handleNormalReducerDefinition", "buildReducer", "extraReducers", "actionMatchers", "defaultCaseReducer", "executeReducerBuilderCallback", "finalCaseReducers", "createReducer", "builder", "key", "sM", "m", "selectSelf", "state", "injectedSelectorCache", "_reducer", "action", "getInitialState", "makeSelectorProps", "injected", "selectSlice", "sliceState", "getSelectors", "selectState", "selectorCache", "getOrInsertComputed", "map", "selector", "wrapSelector", "injectable", "pathOpt", "config", "newReducerPath", "wrapper", "rootState", "args", "createSlice", "asyncThunk", "payloadCreator", "caseReducer", "prepare", "createNotation", "maybeReducerWithPrepare", "prepareCallback", "isCaseReducerWithPrepareDefinition", "createAction", "fulfilled", "pending", "rejected", "settled", "thunk", "noop", "listener", "completed", "cancelled", "taskCancelled", "taskCompleted", "listenerCancelled", "listenerCompleted", "assign", "alm", "addListener", "assign", "createAction", "alm", "clearAllListeners", "removeListener", "ORIGINAL_STATE", "formatProdErrorMessage", "code", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "requiredNonEmptyString", "StringValue", "nonEmptyString", "requiredEmptyAllowedString", "nonRequiredEmptyAllowedString", "nonEmptyStringArray", "ArrayValue", "optionalNonEmptyVersionString", "optionalTrackingId", "requiredTrackingId", "serializeSchemaValidationError", "message", "name", "stack", "validatePayloadAndThrow", "payload", "definition", "Schema", "isInvalid", "RecordValue", "SchemaValidationError", "validatePayload", "error", "validateOptions", "engine", "schema", "obj", "functionName", "message", "validateObject", "validationMessage", "errorMessage", "error", "setCaseAssistConfiguration", "createAction", "payload", "validatePayload", "requiredNonEmptyString", "nonEmptyString", "StringValue", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getCaseAssistConfigurationInitialState", "caseAssistConfigurationReducer", "createReducer", "getCaseAssistConfigurationInitialState", "builder", "setCaseAssistConfiguration", "state", "action", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "searchParametersDefinition", "StringValue", "BooleanValue", "NumberValue", "RecordValue", "restoreSearchParameters", "createAction", "payload", "validatePayload", "searchParametersDefinition", "restoreTab", "requiredNonEmptyString", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "enableDebug", "createAction", "disableDebug", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getDebugInitialState", "debugReducer", "createReducer", "getDebugInitialState", "builder", "enableDebug", "disableDebug", "restoreSearchParameters", "state", "action", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "setSearchHub", "createAction", "payload", "validatePayload", "StringValue", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "VERSION", "COVEO_FRAMEWORK", "originSchemaOnConfigUpdate", "nonEmptyString", "originSchemaOnUpdate", "requiredNonEmptyString", "updateBasicConfiguration", "createAction", "payload", "validatePayload", "StringValue", "updateSearchConfiguration", "ArrayValue", "analyticsConfigurationSchema", "BooleanValue", "Value", "optionalTrackingId", "RecordValue", "COVEO_FRAMEWORK", "acc", "framework", "optionalNonEmptyVersionString", "updateAnalyticsConfiguration", "disableAnalytics", "enableAnalytics", "setOriginLevel2", "setOriginLevel3", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "undo", "createAction", "redo", "snapshot", "back", "createAsyncThunk", "_", "dispatch", "change", "forward", "getState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getSearchHubInitialState", "searchHubReducer", "createReducer", "getSearchHubInitialState", "builder", "setSearchHub", "_", "action", "change", "state", "updateSearchConfiguration", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "regex_default", "validate", "uuid", "regex_default", "validate_default", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "byteToHex", "i", "unsafeStringify", "arr", "offset", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getRandomValues", "rnds8", "rng", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "randomUUID", "native_default", "v4", "options", "buf", "offset", "native_default", "rnds", "rng", "unsafeStringify", "v4_default", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "createExplorerMessenger", "isBrowser", "message", "emit", "config", "environment", "event", "listenerManager", "url", "token", "mode", "clientIdKey", "createClientIdManager", "environmentManager", "storage", "existingClientId", "clientId", "validate_default", "version", "UTF8_HIGH_BIT", "UTF8_HEADER_2", "UTF8_HEADER_3", "UTF8_HEADER_4", "UTF8_HEADER_4_MASK", "utf8ByteCountFromFirstByte", "firstByte", "truncateUrl", "input", "limit", "end", "peekByte", "getEventConfig", "trackingId", "getSource", "createMeta", "type", "clientIdManager", "getReferrer", "getLocation", "getUserAgent", "eventConfig", "truncate", "createRelayEvent", "payload", "ANY_EVENT_TYPE", "createListenerManager", "listeners", "getListenerIndex", "callback", "listener", "isMatchesType", "add", "remove", "call", "e", "removeMultiple", "i", "removeOne", "index", "pick", "rest", "createConfigManager", "initialConfig", "_config", "updatedConfig", "cookieManager", "createCookieManager", "prefix", "getDomain", "host", "parts", "key", "cookiePrefix", "cookieArray", "cookie", "prettifyCookie", "data", "expire", "domain", "expireSection", "domainSection", "createBrowserStorage", "referrer", "buildBrowserEnvironment", "response", "createExplorerMessenger", "v4_default", "localStorageAvailable", "x", "createNullStorage", "buildNullEnvironment", "buildEnvironment", "configManager", "active", "environmentFromConfig", "nullEnvironment", "isBrowser", "createEnvironmentManager", "createRelay", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getAnalyticsSource", "createSelector", "state", "source", "frameworkName", "frameworkVersion", "VERSION", "getRelayInstanceFromState", "createSelector", "state", "getAnalyticsSource", "_state", "navigatorContextProvider", "getEnvironment", "organizationId", "platformEnvironment", "token", "trackingId", "apiBaseUrl", "enabled", "source", "environment", "createRelay", "getAnalyticsNextApiBaseUrl", "customProvider", "customContext", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "defaultNodeJSNavigatorContextProvider", "getNavigatorContext", "relay", "customProvider", "referrer", "userAgent", "location", "clientId", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "selectAdvancedSearchQueries", "createSelector", "state", "advancedSearchQueries", "aq", "cq", "dq", "lq", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "fromAnalyticsStateToAnalyticsParams", "s", "navigatorContext", "eventDescription", "getAnalyticsSource", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "selectContext", "createSelector", "state", "context", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "__rest", "s", "e", "t", "p", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "reject", "fulfilled", "step", "rejected", "result", "EventType", "hasWindow", "hasNavigator", "hasDocument", "hasLocalStorage", "hasSessionStorage", "hasCookieStorage", "eventTypesForDefaultValues", "addDefaultValues", "eventType", "payload", "Cookie", "_Cookie", "name", "expire", "domain", "expirationDate", "domainParts", "host", "writeCookie", "cookiePrefix", "cookieArray", "cookie", "getAvailableStorage", "CookieStorage", "NullStorage", "_CookieStorage", "key", "data", "CookieAndLocalStorage", "STORE_KEY", "MAX_NUMBER_OF_HISTORY_ELEMENTS", "MIN_THRESHOLD_FOR_DUPLICATE_VALUE", "MAX_VALUE_SIZE", "HistoryStore", "store", "elem", "currentHistory", "history", "elements", "first", "second", "part", "lastEntry", "time", "enhanceViewEvent", "eventType", "payload", "__awaiter", "EventType", "addPageViewToHistory", "pageViewValue", "store", "HistoryStore", "historyElement", "getRandomValues", "rnds8", "rng", "REGEX", "validate", "uuid", "byteToHex", "i", "unsafeStringify", "arr", "offset", "parse", "v", "stringToBytes", "str", "bytes", "DNS", "URL$1", "v35", "name", "version", "hashfunc", "generateUUID", "value", "namespace", "buf", "_namespace", "randomUUID", "native", "v4", "options", "rnds", "f", "s", "x", "y", "z", "ROTL", "n", "sha1", "K", "H", "msg", "l", "N", "M", "j", "W", "t", "a", "b", "c", "d", "e", "T", "v5", "uuidv5", "libVersion", "getFormattedLocation", "location", "BasePluginEventTypes", "Plugin", "client", "uuidGenerator", "BasePlugin", "hasDocument", "action", "documentContext", "screenContext", "navigatorContext", "eventContext", "pageViewId", "referrer", "removeStartingSlash", "page", "CoveoLinkParam", "_CoveoLinkParam", "clientId", "timestamp", "age", "referrerString", "referrerList", "url", "input", "parts", "clientIdPart", "creationDate", "LinkPlugin", "urlString", "acceptedReferrers", "keysOf", "isObject", "o", "UTF8_HIGH_BIT", "UTF8_HEADER_2", "UTF8_HEADER_3", "UTF8_HEADER_4", "utf8ByteCountFromFirstByte", "firstByte", "truncateUrl", "limit", "end", "peekByte", "ticketKeysMapping", "ticketKeysMappingValues", "key", "ticketSubKeysMatchGroup", "ticketKeyRegex", "serviceActionsKeysMapping", "convertTicketToMeasurementProtocol", "ticket", "mappedTicket", "newKey", "isTicketKey", "isServiceKey", "productKeysMapping", "impressionKeysMapping", "productActionsKeysMapping", "transactionActionsKeysMapping", "coveoCommerceExtensionKeys", "quoteActionsKeysMapping", "reviewActionsKeysMapping", "commerceActionKeysMappingPerAction", "productKeysMappingValues", "impressionKeysMappingValues", "productActionsKeysMappingValues", "transactionActionsKeysMappingValues", "reviewKeysMappingValues", "quoteKeysMappingValues", "productSubKeysMatchGroup", "impressionSubKeysMatchGroup", "productPrefixMatchGroup", "impressionPrefixMatchGroup", "productKeyRegex", "impressionKeyRegex", "productActionsKeyRegex", "transactionActionsKeyRegex", "customProductKeyRegex", "customImpressionKeyRegex", "coveoCommerceExtensionKeysRegex", "isProductKey", "isImpressionKey", "isProductActionsKey", "isTransactionActionsKeyRegex", "isCoveoCommerceExtensionKey", "isCommerceKey", "isCustomCommerceKey", "globalParamKeysMapping", "eventKeysMapping", "contextInformationMapping", "coveoExtensionsKeys", "baseMeasurementProtocolKeysMapping", "all", "measurementProtocolKeysMapping", "convertKeysToMeasurementProtocol", "params", "keysMappingForAction", "mappedKeys", "measurementProtocolKeysMappingValues", "isKnownMeasurementProtocolKey", "isCustomKey", "isMeasurementProtocolKey", "test", "convertCustomMeasurementProtocolKeys", "data", "current", "match", "getFirstCustomMeasurementProtocolKeyMatch", "convertCustomObject", "matchedKey", "regex", "_a", "prefix", "customData", "allCustom", "currentCustomKey", "AnalyticsBeaconClient", "opts", "originalPayload", "baseUrl", "preprocessRequest", "paramsFragments", "parsedRequestData", "body", "originalURL", "returnedUrl", "returnedPayload", "processedRequest", "processedURL", "processedBody", "token", "visitorIdProvider", "visitorId", "p", "access_token", "encoded", "NoopAnalyticsClient", "_", "__", "fetch$1", "globalThisShim", "AnalyticsFetchClient", "visitorIdParam", "defaultOptions", "fetchData", "__rest", "response", "error", "visit", "BrowserRuntime", "clientOptions", "getUnprocessedRequests", "hasLocalStorage", "hasCookieStorage", "CookieAndLocalStorage", "NullStorage", "requests", "NodeJSRuntime", "storage", "NoopRuntime", "API_KEY_PREFIX", "isApiKey", "ReactNativeRuntimeWarning", "isReactNative", "doNotTrackValues", "doNotTrack", "checks", "hasWindow", "hasNavigator", "Version", "Endpoints", "buildBaseUrl", "endpoint", "apiVersion", "isCustomEndpoint", "hasUARestEndpoint", "COVEO_NAMESPACE", "CoveoAnalyticsClient", "addDefaultValues", "clientsOptions", "copy", "err", "id", "parametersToSend", "linkParam", "linker", "variableLengthArgumentsNames", "addVisitorIdParameter", "usesMeasurementProtocol", "addClientIdParameter", "currentPayload", "promisePayload", "payloadPromise", "step", "parameters", "eventTypeToSend", "payloadToSend", "remainingPayload", "hook", "resolve", "popped", "request", "searchQueryUid", "preparedRequest", "lastSearchQueryUid", "abortableFetch", "eventConfig", "hosts", "host", "fieldsOrder", "parsedArguments", "length", "currentArgument", "evtType", "isNotEmptyValue", "newPayload", "custom", "rest", "lowercasedCustom", "keys", "result", "anonymizeIp", "userId", "trackingId", "InsightEvents", "SearchPageEvents", "CustomEventsTypes", "NoopAnalytics", "filterConsecutiveRepeatedValues", "rawData", "prev", "isDifferent", "removeSemicolons", "getDataString", "formattedData", "formatArrayForCoveoCustomData", "dataWithoutSemicolons", "dataWithoutRepeatedValues", "formatOmniboxMetadata", "meta", "partialQueries", "suggestions", "CoveoSearchPageClient", "provider", "shouldDisableAnalytics", "info", "identifier", "metadata", "customEventBuilder", "reason", "details", "snippet", "identifierAndLink", "snippetAndLink", "preparedEvent", "actionCause", "event", "searchUID", "eventValue", "_b", "splitTestRunName", "splitTestRunVersion", "citation", "SVCPluginEventTypes", "allSVCEventTypes", "SVCPlugin", "superCall", "svcPayload", "ticketPayload", "CaseAssistEvents", "CaseAssistActions", "CaseCancelledReasons", "CaseAssistClient", "analyticsEnabled", "_c", "_d", "_e", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getLanguage", "state", "langKey", "BaseAnalyticsProvider", "getState", "__publicField", "context", "configuration", "contextValues", "formattedObject", "key", "value", "formattedKey", "VERSION", "getSearchHubInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getVisitorID", "options", "CoveoAnalyticsClient", "wrapPreprocessRequest", "logger", "preprocessRequest", "args", "untaintedOutput", "clone", "e", "wrapAnalyticsClientSendEventHook", "hook", "CaseAssistAnalyticsProvider", "BaseAnalyticsProvider", "configureCaseAssistAnalytics", "logger", "getState", "analyticsClientMiddleware", "_", "p", "preprocessRequest", "provider", "state", "token", "endpoint", "getOrganizationEndpoint", "runtimeEnvironment", "enableAnalytics", "client", "CaseAssistClient", "wrapPreprocessRequest", "wrapAnalyticsClientSendEventHook", "type", "payload", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getAutomaticFacetSetInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "findActiveValueAncestry", "valuesAsTree", "activeValue", "ancestryMap", "getActiveValueAndAncestryFromValueTree", "getActiveValueAncestry", "valuesAsTrees", "valueToVisit", "currentValue", "childValue", "valueToParentMap", "activeValueAncestry", "lastParent", "categoryFacetRequestSelector", "state", "id", "categoryFacetRequestSelectedValuesSelector", "state", "facetId", "facetRequest", "categoryFacetRequestSelector", "findActiveValueAncestry", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getCategoryFacetSetInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getDateFacetSetInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getNumericFacetSetInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getFacetSetInitialState", "getStateNeededForFacetMetadata", "s", "getFacetSetInitialState", "getCategoryFacetSetInitialState", "getDateFacetSetInitialState", "getNumericFacetSetInitialState", "getAutomaticFacetSetInitialState", "buildFacetStateMetadata", "state", "facetState", "getFacetRequests", "facetRequest", "facetIndex", "facetType", "getFacetType", "facetRequestAnalytics", "mapFacetRequestToAnalytics", "isCategoryFacetRequest", "categoryFacetRequestSelectedValuesSelector", "mapCategoryFacetValueToAnalytics", "facetValue", "facetValueIndex", "facetValueAnalytics", "mapFacetValueToAnalytics", "facetDisplayValueAnalytics", "isSpecificFacetRequest", "mapFacetDisplayValueToAnalytics", "mapRangeDisplayFacetValueToAnalytics", "getAutomaticFacets", "facet", "facetAnalytics", "mapAutomaticFacetToAnalytics", "request", "valuePosition", "getCategoryFacetSelectedValue", "facetId", "selectedCategoryFacetValue", "value", "facetPosition", "getFacetTitle", "field", "getFacetRequest", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getQueryInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "emptyQuestionAnswer", "getSearchInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "SortOrder", "SortBy", "buildCriterionExpression", "criterion", "isArray", "c", "buildRelevanceSortCriterion", "criterionDefinition", "RecordValue", "EnumValue", "SortBy", "SortOrder", "StringValue", "getSortCriteriaInitialState", "buildCriterionExpression", "buildRelevanceSortCriterion", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "Cookie", "_Cookie", "name", "value", "expire", "domain", "expirationDate", "domainParts", "host", "ipv4Regex", "ipv6Regex", "writeCookie", "cookiePrefix", "cookieArray", "cookie", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "hasNavigator", "hasLocalStorage", "hasSessionStorage", "hasCookieStorage", "hasNavigator", "preferredStorage", "getAvailableStorage", "hasLocalStorage", "hasCookieStorage", "CookieStorage", "hasSessionStorage", "NullStorage", "_CookieStorage", "key", "Cookie", "data", "expire", "__publicField", "NullStorage", "_key", "_data", "STORE_KEY", "MAX_NUMBER_OF_HISTORY_ELEMENTS", "MIN_THRESHOLD_FOR_DUPLICATE_VALUE", "MAX_VALUE_SIZE", "_HistoryStore", "store", "__publicField", "getAvailableStorage", "elem", "currentHistory", "history", "elements", "first", "second", "part", "lastEntry", "name", "time", "value", "HistoryStore", "history_store_default", "_SearchAnalyticsProvider", "BaseAnalyticsProvider", "__publicField", "id", "buildFacetStateMetadata", "getStateNeededForFacetMetadata", "newState", "getSearchInitialState", "hasSplitTestRun", "effectivePipelineWithSplitTestRun", "state", "baseObject", "generativeQuestionAnsweringId", "facetId", "facetValue", "facetField", "criteria", "getSortCriteriaInitialState", "staticFilterId", "staticFilterValue", "undoneQuery", "categoryFacetId", "categoryFacetPath", "categoryFacetField", "suggestion", "querySuggest", "suggestions", "completion", "lastIndex", "partialQuery", "querySuggestResponseId", "metadata", "formattedObject", "getQueryInitialState", "SearchAnalyticsProvider", "configureLegacyAnalytics", "logger", "getState", "analyticsClientMiddleware", "_", "p", "preprocessRequest", "provider", "token", "endpoint", "getOrganizationEndpoint", "runtimeEnvironment", "enableAnalytics", "client", "CoveoSearchPageClient", "wrapPreprocessRequest", "wrapAnalyticsClientSendEventHook", "type", "payload", "getPageID", "lastPageView", "history_store_default", "action", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getAllIncludedResultsFrom", "relevantResult", "foldedResults", "getChildResultsRecursively", "parentResults", "result", "removeDuplicates", "childResult", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getPipelineInitialState", "makeBasicNewSearchAnalyticsAction", "actionCause", "getState", "SearchAnalyticsProvider", "makeInstantlyCallable", "action", "makePreparableAnalyticsAction", "prefix", "buildEvent", "createAnalyticsAction", "body", "createAsyncThunk", "rootAction", "_", "extra", "analyticsClientMiddleware", "preprocessRequest", "logger", "description", "log", "getNewState", "newExtra", "makeAnalyticsActionFactory", "configurator", "legacyGetBuilderConverter", "providerClass", "makeAnalyticsAction", "params", "options", "internalMakeAnalyticsAction", "shouldSendLegacyEvent", "state", "shouldSendNextEvent", "__legacy__getBuilder", "__legacy__provider", "analyticsPayloadBuilder", "analyticsType", "analyticsConfigurator", "loggers", "analyticsAction", "client", "builder", "logLegacyEvent", "emit", "getRelayInstanceFromState", "payload", "logNextEvent", "response", "fromLogToLegacyBuilderFactory", "_metadata", "configureLegacyAnalytics", "original", "makeCaseAssistAnalyticsAction", "configureCaseAssistAnalytics", "CaseAssistAnalyticsProvider", "partialDocumentInformation", "result", "state", "paginationBasedIndex", "index", "resultIndex", "parentResults", "findPositionWithUniqueId", "findPositionInChildResults", "buildPartialDocumentInformation", "buildPartialDocumentInformation", "result", "resultIndex", "state", "collection", "getDocumentAuthor", "getSourceName", "getPipelineInitialState", "documentIdentifier", "rawPartialDefinition", "StringValue", "resultPartialDefinition", "requiredNonEmptyString", "RecordValue", "partialRawPayload", "raw", "key", "partialResultPayload", "author", "isNullOrUndefined", "source", "validateResultPayload", "Schema", "findPositionInChildResults", "targetResult", "parentResults", "i", "parent", "children", "getAllIncludedResultsFrom", "findPositionWithUniqueId", "results", "uniqueId", "logNextEvent", "emitEvent", "type", "payload", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "generativeQuestionAnsweringIdSelector", "state", "isGeneratedAnswerSection", "selectAnswer", "isSearchSection", "isNullOrUndefined", "selectFieldsToIncludeInCitation", "citationSourceSelector", "createSelector", "_state", "citationId", "citations", "citation", "logGeneratedAnswerStreamEnd", "answerGenerated", "makeAnalyticsAction", "client", "state", "rgaID", "answerAPIEnabled", "generativeQuestionAnsweringIdSelector", "answerTextIsEmpty", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "buildStreamingRequest", "state", "getOrganizationEndpoint", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "generatedContentFormat", "stringValue", "StringValue", "optionalStringValue", "booleanValue", "BooleanValue", "citationSchema", "answerContentFormatSchema", "generatedContentFormat", "setIsVisible", "createAction", "payload", "validatePayload", "setIsEnabled", "updateMessage", "updateCitations", "ArrayValue", "RecordValue", "updateError", "NumberValue", "resetAnswer", "likeGeneratedAnswer", "dislikeGeneratedAnswer", "openGeneratedAnswerFeedbackModal", "expandGeneratedAnswer", "collapseGeneratedAnswer", "setId", "closeGeneratedAnswerFeedbackModal", "sendGeneratedAnswerFeedback", "setIsLoading", "setIsStreaming", "setAnswerContentFormat", "updateResponseFormat", "updateAnswerConfigurationId", "registerFieldsToIncludeInCitations", "nonEmptyStringArray", "setIsAnswerGenerated", "setCannotAnswer", "streamAnswer", "createAsyncThunk", "params", "config", "state", "dispatch", "extra", "getState", "search", "queryExecuted", "setAbortControllerRef", "request", "buildStreamingRequest", "handleStreamPayload", "payloadType", "header", "isAnswerGenerated", "cannotAnswer", "logGeneratedAnswerStreamEnd", "currentStreamRequestMatchesOriginalStreamRequest", "abortController", "data", "error", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "selectPipeline", "createSelector", "state", "pipeline", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "selectQuery", "createSelector", "state", "query", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "import_dayjs", "import_quarterOfYear", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "import_dayjs", "import_customParseFormat", "dayjs", "customParseFormat", "API_DATE_FORMAT", "formatDateForSearchApi", "date", "API_DATE_FORMAT", "dayjs", "quarterOfYear", "validRelativeDatePeriods", "validRelativeDateUnits", "relativeToAbsoluteDate", "relativeDate", "period", "amount", "unit", "dayjs", "formatRelativeDateForSearchApi", "formatDateForSearchApi", "parseRelativeDate", "splitDate", "date", "isRelativeDateFormat", "validRelativeDatePeriods", "validRelativeDateUnits", "intAmount", "parseRelativeDate", "date", "period", "amount", "unit", "splitDate", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "isDateFacetRequest", "request", "formatStartFacetValue", "value", "formatEndFacetValue", "initialSearchMappings", "mapDateRangeRequest", "facetId", "mappings", "start", "end", "isRelativeDateFormat", "formatRelativeDateForSearchApi", "mapFacetRequest", "facetRequest", "isDateFacetRequest", "currentValues", "mapSearchRequest", "searchRequest", "mapDateRangeResponse", "isDateFacetResponse", "facetResponse", "mapFacetResponse", "mapSearchResponse", "response", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getResultProperty", "result", "property", "anyResult", "isNullOrUndefined", "fieldsMustBeDefined", "fieldNames", "fieldName", "fieldsMustNotBeDefined", "fieldMustMatch", "valuesToMatch", "fieldValues", "getFieldValuesFromResult", "valueToMatch", "fieldValue", "fieldMustNotMatch", "blacklistedValues", "blacklistedValue", "rawValue", "isArray", "ResultTemplatesHelpers", "selectSearchActionCause", "createSelector", "state", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "selectSearchHub", "createSelector", "state", "searchHub", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "selectStaticFilterExpressions", "createSelector", "state", "staticFilterSet", "filter", "selected", "value", "expression", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "selectActiveTab", "createSelector", "state", "tabSetState", "tabId", "selectActiveTabExpression", "activeTabId", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getFacetRequests", "state", "slice", "sortFacets", "facets", "sortOrder", "payloadMap", "f", "sortedFacets", "facetId", "remainingFacets", "getRangeFacetRequests", "state", "getFacetRequests", "request", "hasActiveValues", "sortCriteriaMap", "getSpecificFacetRequests", "sortCriteria", "getAllFacets", "getAllEnabledFacets", "getFacets", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getBytes", "stream", "onChunk", "reader", "result", "getLines", "onLine", "buffer", "position", "fieldLength", "discardTrailingNewline", "arr", "concat", "bufLength", "lineStart", "lineEnd", "getMessages", "onId", "onRetry", "onMessage", "message", "newMessage", "decoder", "line", "field", "valueOffset", "value", "retry", "a", "b", "res", "EventStreamContentType", "DefaultRetryInterval", "LastEventId", "isBrowser", "fetchEventSource", "input", "inputSignal", "inputHeaders", "inputOnOpen", "onmessage", "onclose", "onerror", "openWhenHidden", "inputFetch", "rest", "resolve", "reject", "headers", "curRequestController", "onVisibilityChange", "create", "retryInterval", "retryTimer", "dispose", "outputFetch", "abortableFetch", "onopen", "defaultOnOpen", "response", "getBytes", "getLines", "getMessages", "id", "retry", "err", "interval", "innerErr", "contentType", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getRequestStatusFlags", "status", "isPlainObject", "copyWithStructuralSharing", "oldObj", "newObj", "newKeys", "oldKeys", "isSameObject", "mergeObj", "key", "countObjectKeys", "obj", "count", "_key", "flatten", "arr", "isAbsoluteUrl", "url", "isDocumentVisible", "isNotNullish", "v", "isOnline", "withoutTrailingSlash", "withoutLeadingSlash", "joinUrls", "base", "delimiter", "getOrInsert", "map", "value", "defaultFetchFn", "args", "abortableFetch", "defaultValidateStatus", "response", "defaultIsJsonContentType", "headers", "stripUndefined", "copy", "k", "fetchBaseQuery", "baseUrl", "prepareHeaders", "x", "fetchFn", "paramsSerializer", "isJsonContentType", "jsonContentType", "jsonReplacer", "defaultTimeout", "globalResponseHandler", "globalValidateStatus", "baseFetchOptions", "arg", "api", "extraOptions", "getState", "extra", "endpoint", "forced", "type", "meta", "Headers", "params", "responseHandler", "validateStatus", "timeout", "rest", "abortController", "signal", "config", "isJsonifiable", "body", "divider", "query", "request", "timedOut", "timeoutId", "e", "responseClone", "resultData", "responseText", "handleResponseError", "handleResponse", "r", "text", "HandledError", "defaultBackoff", "attempt", "maxRetries", "attempts", "resolve", "res", "fail", "error", "EMPTY_OPTIONS", "retryWithBackoff", "baseQuery", "defaultOptions", "possibleMaxRetries", "options", "_", "__", "retry", "result", "onFocus", "createAction", "onFocusLost", "onOnline", "onOffline", "isQueryDefinition", "isMutationDefinition", "isInfiniteQueryDefinition", "calculateProvidedBy", "description", "result", "error", "queryArg", "meta", "assertTagTypes", "isFunction", "isNotNullish", "expandTagDescription", "t", "asSafePromise", "promise", "fallback", "forceQueryFnSymbol", "isUpsertQuery", "arg", "buildInitiate", "serializeQueryArgs", "queryThunk", "infiniteQueryThunk", "mutationThunk", "api", "context", "runningQueries", "runningMutations", "unsubscribeQueryResult", "removeMutationResult", "updateSubscriptionOptions", "buildInitiateQuery", "buildInitiateInfiniteQuery", "buildInitiateMutation", "getRunningQueryThunk", "getRunningMutationThunk", "getRunningQueriesThunk", "getRunningMutationsThunk", "endpointName", "queryArgs", "dispatch", "endpointDefinition", "queryCacheKey", "_endpointName", "fixedCacheKeyOrRequestId", "middlewareWarning", "buildInitiateAnyQuery", "queryAction", "subscribe", "forceRefetch", "subscriptionOptions", "forceQueryFn", "rest", "getState", "thunk", "commonThunkArgs", "direction", "initialPageParam", "selector", "thunkResult", "stateAfter", "requestId", "abort", "skippedSynchronously", "runningQuery", "selectFromState", "statePromise", "options", "running", "getOrInsert", "countObjectKeys", "track", "fixedCacheKey", "unwrap", "returnValuePromise", "data", "reset", "ret", "defaultTransformResponse", "baseQueryReturnValue", "addShouldAutoBatch", "SHOULD_AUTOBATCH", "buildThunks", "reducerPath", "baseQuery", "endpointDefinitions", "assertTagType", "selectors", "patchQueryData", "patches", "updateProvided", "newValue", "providedTags", "addToStart", "items", "item", "max", "newItems", "addToEnd", "updateQueryData", "updateRecipe", "currentState", "isDraftable", "value", "inversePatches", "produceWithPatches", "upsertQueryData", "getTransformCallbackForEndpoint", "transformFieldName", "executeEndpoint", "signal", "rejectWithValue", "fulfillWithValue", "extra", "transformResponse", "baseQueryApi", "isForcedQuery", "finalQueryReturnValue", "fetchPage", "param", "maxPages", "previous", "finalQueryArg", "pageResponse", "executeRequest", "addTo", "extraOptions", "HandledError", "transformedResponse", "infiniteQueryOptions", "blankData", "cachedData", "existingData", "getPreviousPageParam", "getNextPageParam", "cachedPageParams", "firstPageParam", "totalPages", "i", "catchedError", "transformErrorResponse", "e", "state", "requestState", "baseFetchOnMountOrArgChange", "fulfilledVal", "refetchVal", "createQueryThunk", "createAsyncThunk", "queryThunkArg", "currentArg", "previousArg", "hasTheForce", "hasMaxAge", "prefetch", "force", "maxAge", "latestStateValue", "lastFulfilledTs", "matchesEndpoint", "action", "buildMatchThunkActions", "isAllOf", "isPending", "isFulfilled", "isRejected", "pages", "pageParams", "lastIndex", "calculateProvidedByThunk", "type", "isRejectedWithValue", "updateQuerySubstateIfExists", "update", "substate", "getMutationCacheKey", "id", "updateMutationSubstateIfExists", "initialState", "buildSlice", "definitions", "apiUid", "extractRehydrationInfo", "hasRehydrationInfo", "config", "resetApiState", "createAction", "writePendingCacheEntry", "draft", "upserting", "_a", "writeFulfilledCacheEntry", "payload", "merge", "fulfilledTimeStamp", "baseQueryMeta", "newData", "produce", "draftSubstateData", "copyWithStructuralSharing", "isDraft", "original", "querySlice", "createSlice", "prepareAutoBatched", "entry", "nanoid", "applyPatches", "builder", "condition", "queries", "key", "mutationSlice", "cacheKey", "startedTimeStamp", "mutations", "invalidationSlice", "tagTypeSubscriptions", "idSubscriptions", "foundAt", "subscribedQueries", "_b", "provided", "incomingTags", "cacheKeys", "isAnyOf", "subscriptionSlice", "d", "a", "internalSubscriptionsSlice", "configSlice", "isOnline", "isDocumentVisible", "onOnline", "onOffline", "onFocus", "onFocusLost", "combinedReducer", "combineReducers", "reducer", "actions", "skipToken", "initialSubState", "defaultQuerySubState", "defaultMutationSubState", "buildSelectors", "createSelector", "selectSkippedQuery", "selectSkippedMutation", "buildQuerySelector", "buildInfiniteQuerySelector", "buildMutationSelector", "selectInvalidatedBy", "selectCachedArgsForQuery", "selectApiState", "selectQueries", "selectMutations", "selectQueryEntry", "selectConfig", "withRequestFlags", "getRequestStatusFlags", "rootState", "buildAnyQuerySelector", "combiner", "serializedArgs", "withInfiniteQueryResultFlags", "stateWithRequestFlags", "isLoading", "isError", "isForward", "isBackward", "getHasNextPage", "getHasPreviousPage", "mutationId", "tags", "apiState", "toInvalidate", "tag", "invalidateSubscriptions", "flatten", "invalidate", "querySubState", "queryName", "cache", "defaultSerializeQueryArgs", "serialized", "cached", "stringified", "isPlainObject", "acc", "buildCreateApi", "modules", "weakMapMemoize", "optionsWithDefaults", "queryArgsApi", "finalSerializeQueryArgs", "endpointSQA", "initialResult", "fn", "injectEndpoints", "addTagTypes", "endpoints", "eT", "partialDefinition", "initializedModules", "m", "inject", "evaluatedEndpoints", "x", "definition", "_formatProdErrorMessage", "safeAssign", "target", "args", "buildBatchedActionsHandler", "api", "queryThunk", "internalState", "subscriptionsPrefix", "previousSubscriptions", "updateSyncTimer", "updateSubscriptionOptions", "unsubscribeQueryResult", "actuallyMutateSubscriptions", "mutableState", "action", "queryCacheKey", "requestId", "options", "arg", "substate", "_a", "mutated", "state", "key", "condition", "_b", "getSubscriptions", "subscriptionSelectors", "subscriptionsForQueryArg", "countObjectKeys", "mwApi", "didMutate", "actionShouldContinue", "newSubscriptions", "patches", "produceWithPatches", "isSubscriptionSliceAction", "isAdditionalSubscriptionAction", "isObjectEmpty", "obj", "k", "THIRTY_TWO_BIT_MAX_TIMER_SECONDS", "buildCacheCollectionHandler", "reducerPath", "context", "selectQueryEntry", "selectConfig", "removeQueryResult", "cacheEntriesUpserted", "canTriggerUnsubscribe", "isAnyOf", "anySubscriptionsRemainingForKey", "subscriptions", "currentRemovalTimeouts", "handler", "config", "queryCacheKeys", "entry", "handleUnsubscribeMany", "timeout", "queries", "cacheKeys", "handleUnsubscribe", "endpointName", "keepUnusedDataFor", "finalKeepUnusedDataFor", "currentTimeout", "neverResolvedError", "buildCacheLifecycleHandler", "mutationThunk", "selectApiState", "isQueryThunk", "isAsyncThunkAction", "isMutationThunk", "isFulfilledThunk", "isFulfilled", "lifecycleMap", "resolveLifecycleEntry", "cacheKey", "data", "meta", "lifecycle", "removeLifecycleEntry", "stateBefore", "getCacheKey", "checkForNewCacheKey", "originalArgs", "oldEntry", "newEntry", "handleNewKey", "queryDescription", "value", "getMutationCacheKey", "endpointDefinition", "onCacheEntryAdded", "cacheEntryRemoved", "resolve", "cacheDataLoaded", "selector", "extra", "_", "__", "lifecycleApi", "updateRecipe", "runningHandler", "e", "buildDevCheckHandler", "apiUid", "buildInvalidationByTagsHandler", "endpointDefinitions", "assertTagType", "refetchQuery", "isThunkActionWithTags", "isRejectedWithValue", "isQueryEnd", "isRejected", "pendingTagInvalidations", "invalidateTags", "calculateProvidedByThunk", "calculateProvidedBy", "hasPendingRequests", "mutations", "cacheRecord", "newTags", "rootState", "tags", "toInvalidate", "valuesArray", "querySubState", "subscriptionSubState", "buildPollingHandler", "currentPolls", "updatePollingInterval", "startNextPoll", "clearPolls", "getCacheEntrySubscriptions", "lowestPollingInterval", "skipPollingIfUnfocused", "findLowestPollingInterval", "currentPoll", "nextPollTimestamp", "cleanupPollForKey", "existingPoll", "subscribers", "buildQueryLifecycleHandler", "isPendingThunk", "isPending", "isRejectedThunk", "isFullfilledThunk", "onQueryStarted", "queryFulfilled", "reject", "baseQueryMeta", "rejectedWithValue", "buildWindowEventHandler", "onFocus", "refetchValidQueries", "onOnline", "type", "sub", "buildMiddleware", "input", "actions", "createAction", "isThisApiSliceAction", "handlerBuilders", "initialized", "builderArgs", "handlers", "build", "batchedActionsHandler", "windowEventsHandler", "next", "isAction", "mwApiWithNext", "internalProbeResult", "res", "coreModuleName", "coreModule", "createSelector", "baseQuery", "tagTypes", "serializeQueryArgs", "refetchOnMountOrArgChange", "refetchOnFocus", "refetchOnReconnect", "invalidationBehavior", "enablePatches", "tag", "onOffline", "onFocusLost", "selectors", "buildSelectors", "selectInvalidatedBy", "selectCachedArgsForQuery", "buildQuerySelector", "buildInfiniteQuerySelector", "buildMutationSelector", "infiniteQueryThunk", "patchQueryData", "updateQueryData", "upsertQueryData", "prefetch", "buildMatchThunkActions", "buildThunks", "reducer", "sliceActions", "buildSlice", "middleware", "middlewareActions", "buildInitiateQuery", "buildInitiateInfiniteQuery", "buildInitiateMutation", "getRunningMutationThunk", "getRunningMutationsThunk", "getRunningQueriesThunk", "getRunningQueryThunk", "buildInitiate", "definition", "endpoint", "isQueryDefinition", "isMutationDefinition", "isInfiniteQueryDefinition", "createApi", "buildCreateApi", "dynamicBaseQuery", "args", "api", "extraOptions", "state", "accessToken", "environment", "organizationId", "answerConfigurationId", "updatedArgs", "platformEndpoint", "getOrganizationEndpoint", "fetchBaseQuery", "request", "url", "options", "key", "abortableFetch", "error", "answerSlice", "createApi", "retry", "handleHeaderMessage", "draft", "payload", "contentFormat", "handleMessage", "handleCitations", "handleEndOfStream", "handleError", "message", "updateCacheWithEvent", "event", "dispatch", "parsedPayload", "setAnswerContentFormat", "updateMessage", "updateCitations", "logGeneratedAnswerStreamEnd", "answerApi", "answerSlice", "builder", "endpointName", "queryArgs", "_analytics", "queryArgsWithoutAnalytics", "args", "getState", "cacheDataLoaded", "updateCachedData", "configuration", "generatedAnswer", "insightConfiguration", "organizationId", "environment", "accessToken", "platformEndpoint", "getOrganizationEndpoint", "insightGenerateEndpoint", "generateEndpoint", "fetchEventSource", "abortableFetch", "res", "answerId", "error", "setCannotAnswer", "selectAnswerTriggerParams", "createSelector", "state", "selectQuery", "q", "requestId", "cannotAnswer", "analyticsMode", "actionCause", "generateFacetParams", "getGeneratedFacetParams", "getFacets", "facetRequest", "mapFacetRequest", "initialSearchMappings", "a", "b", "getNumberOfResultsWithinIndexLimit", "buildAdvancedSearchQueryParams", "advancedSearchQueryParams", "selectAdvancedSearchQueries", "mergedCq", "mergeAdvancedCQParams", "activeTabExpression", "selectActiveTabExpression", "filterExpressions", "selectStaticFilterExpressions", "cq", "expression", "constructAnswerQueryParams", "usage", "navigatorContext", "aq", "dq", "lq", "context", "selectContext", "analyticsParams", "fromAnalyticsStateToAnalyticsParams", "selectSearchActionCause", "searchHub", "selectSearchHub", "pipeline", "selectPipeline", "citationsFieldToInclude", "selectFieldsToIncludeInCitation", "selectActiveTab", "selectAnswer", "state", "navigatorContext", "answerApi", "constructAnswerQueryParams", "defaultNodeJSNavigatorContextProvider", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "versionReducer", "createReducer", "VERSION", "builder", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "isAnalyticsAction", "action", "analytics", "isActionWithType", "isNullOrUndefined", "analyticsMiddleware", "api", "next", "ret", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "registerTab", "createAction", "payload", "schema", "RecordValue", "requiredNonEmptyString", "requiredEmptyAllowedString", "validatePayload", "updateActiveTab", "id", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "import_dayjs", "import_timezone", "import_utc", "dayjs", "utc", "timezone", "getConfigurationInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "pendragonCookieValueMatcher", "getMagicCookie", "configurationReducer", "createReducer", "getConfigurationInitialState", "builder", "updateBasicConfiguration", "state", "action", "handleUpdateBasicConfiguration", "updateSearchConfiguration", "handleUpdateSearchConfiguration", "updateAnalyticsConfiguration", "handleUpdateAnalyticsConfiguration", "disableAnalytics", "enableAnalytics", "setOriginLevel2", "setOriginLevel3", "updateActiveTab", "restoreTab", "restoreSearchParameters", "isNullOrUndefined", "payload", "magicCookie", "getMagicCookie", "configuration", "configurationReducer", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "isInstantlyCallableThunkAction", "action", "instantlyCallableThunkActionMiddleware", "next", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "logActionErrorMiddleware", "logger", "next", "action", "unknownAction", "error", "errorPayloadMessage", "logActionMiddleware", "api", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "createReducerManager", "initialReducers", "preloadedState", "reducers", "crossReducer", "rootReducer", "combined", "state", "action", "intermediate", "placeholderReducers", "fromEntries", "key", "value", "combineReducers", "newReducers", "reducer", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "debounce", "func", "waitMilliseconds", "options", "timeoutId", "isImmediate", "callback", "maxWait", "lastInvokeTime", "Date", "now", "promises", "nextInvokeTimeout", "timeSinceLastInvocation", "debouncedFunction", "args", "context", "this", "Promise", "resolve", "reject", "shouldCallNow", "clearTimeout", "setTimeout", "result", "apply", "forEach", "r", "push", "cancel", "reason", "e", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "setError", "createAction", "createRenewAccessTokenMiddleware", "logger", "renewToken", "accessTokenRenewalsAttempts", "resetRenewalTriesAfterDelay", "r", "store", "next", "action", "payload", "isExpiredTokenError", "dispatchError", "accessToken", "attempt", "updateBasicConfiguration", "UnauthorizedTokenError", "error", "setError", "fn", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "configureStore", "reducer", "preloadedState", "middlewares", "thunkExtraArguments", "name", "state", "getDefaultMiddleware", "logActionMiddleware", "getUpdateAnalyticsConfigurationPayload", "configuration", "logger", "analytics", "_", "payload", "payloadWithURL", "doNotTrack", "buildEngine", "options", "thunkExtraArguments", "reducers", "versionReducer", "engine", "buildCoreEngine", "accessToken", "environment", "organizationId", "updateBasicConfiguration", "analyticsPayload", "updateAnalyticsConfiguration", "configurationReducer", "navigatorContextProvider", "reducerManager", "createReducerManager", "thunkExtraArgumentsWithRelay", "getRelayInstanceFromState", "getNavigatorContext", "store", "createStore", "enableAnalytics", "disableAnalytics", "preloadedState", "name", "middlewares", "createMiddleware", "configureStore", "renewAccessToken", "renewTokenMiddleware", "createRenewAccessTokenMiddleware", "instantlyCallableThunkActionMiddleware", "logActionErrorMiddleware", "analyticsMiddleware", "answerApi", "nextAnalyticsUsageWithServiceFeatureWarning", "warnIfUsingNextAnalyticsModeForServiceFeature", "analyticsMode", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "import_pino", "buildLogger", "options", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "buildThunkExtraArguments", "configuration", "logger", "analyticsClientMiddleware", "getAnalyticsClientMiddleware", "validatePayload", "validatePayloadAndThrow", "preprocessRequest", "getPreprocessRequest", "analytics", "NoopAnalyticsMiddleware", "_", "p", "NoopPreprocessRequest", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "engineConfigurationDefinitions", "requiredNonEmptyString", "StringValue", "RecordValue", "BooleanValue", "caseAssistEngineConfigurationSchema", "Schema", "engineConfigurationDefinitions", "requiredNonEmptyString", "nonEmptyString", "caseassistEngineReducers", "debugReducer", "caseAssistConfigurationReducer", "searchHubReducer", "buildCaseAssistEngine", "options", "logger", "buildLogger", "validateConfiguration", "caseAssistAPIClient", "createCaseAssistAPIClient", "thunkArguments", "buildThunkExtraArguments", "augmentedOptions", "engine", "buildEngine", "warnIfUsingNextAnalyticsModeForServiceFeature", "caseAssistId", "locale", "searchHub", "proxyBaseUrl", "setCaseAssistConfiguration", "isNullOrUndefined", "setSearchHub", "configuration", "caseAssistEngineConfigurationSchema", "error", "CaseAssistAPIClient", "NoopPreprocessRequest", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "KnownCaseFields", "isCustomFieldName", "fieldName", "caseAssistCaseSelector", "state", "selectFieldValue", "caseAssistCaseInputValueSelector", "caseAssistCaseFieldValueSelector", "caseAssistCustomCaseInputValuesSelector", "caseAssistCustomCaseFieldValuesSelector", "customFields", "value", "caseAssistCaseClassificationSelector", "classificationId", "autoSelection", "classificationFieldName", "suggestion", "classification", "result", "caseAssistDocumentSuggestionSelector", "suggestionId", "fromQuickview", "openDocument", "suggestionIdx", "s", "idx", "isFound", "logCaseStart", "makeCaseAssistAnalyticsAction", "client", "state", "caseAssistCaseSelector", "logCaseNextStage", "options", "logCreateCase", "id", "category", "subject", "description", "productId", "logSolveCase", "logAbandonCase", "logUpdateCaseField", "fieldName", "fieldValue", "logAutoSelectCaseField", "classificationId", "caseAssistCaseClassificationSelector", "responseId", "logClassificationClick", "logDocumentSuggestionClick", "suggestionId", "caseAssistDocumentSuggestionSelector", "documentSuggestion", "logQuickviewDocumentSuggestionClick", "logDocumentSuggestionOpen", "logDocumentSuggestionRating", "rating", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "isSuccessResponse", "r", "isErrorResponse", "registerCaseField", "createAction", "payload", "validatePayload", "requiredNonEmptyString", "requiredEmptyAllowedString", "updateCaseField", "fetchCaseClassifications", "createAsyncThunk", "_", "getState", "rejectWithValue", "apiClient", "state", "fetched", "buildFetchClassificationRequest", "isErrorResponse", "getOrganizationEndpoint", "getVisitorID", "prepareContextFromFields", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getCaseFieldInitialState", "caseFieldReducer", "createReducer", "getCaseFieldInitialState", "builder", "registerCaseField", "state", "action", "fieldName", "fieldValue", "updateCaseField", "fetchCaseClassifications", "defaultField", "content", "setError", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "updateCaseInput", "createAction", "payload", "validatePayload", "requiredNonEmptyString", "requiredEmptyAllowedString", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getCaseInputInitialState", "caseInputReducer", "createReducer", "getCaseInputInitialState", "builder", "updateCaseInput", "state", "action", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "fetchDocumentSuggestions", "createAsyncThunk", "_", "getState", "rejectWithValue", "apiClient", "navigatorContext", "state", "fetched", "buildFetchDocumentSuggestionsRequest", "isErrorResponse", "getOrganizationEndpoint", "getVisitorID", "fromAnalyticsStateToAnalyticsParams", "prepareContextFromFields", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getDocumentSuggestionInitialState", "documentSuggestionReducer", "createReducer", "getDocumentSuggestionInitialState", "builder", "fetchDocumentSuggestions", "state", "action", "setError", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "buildController", "engine", "prevState", "listeners", "hasNoListeners", "hasStateChanged", "currentState", "stringifiedState", "hasChanged", "e", "listener", "symbol", "unsubscribe", "optionsSchema", "Schema", "requiredNonEmptyString", "buildCaseField", "engine", "props", "loadCaseFieldReducers", "loadReducerError", "controller", "buildController", "dispatch", "options", "validateOptions", "getState", "registerCaseField", "loading", "error", "field", "value", "suggestions", "updatesToFetch", "autoSelection", "suggestionId", "s", "logAutoSelectCaseField", "logClassificationClick", "updateCaseField", "logUpdateCaseField", "fetchCaseClassifications", "fetchDocumentSuggestions", "configuration", "caseAssistConfigurationReducer", "caseInputReducer", "caseFieldReducer", "documentSuggestionReducer", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "validateCaseInputOptions", "engine", "options", "schema", "Schema", "requiredNonEmptyString", "validateOptions", "buildCaseInput", "props", "loadCaseInputReducers", "loadReducerError", "controller", "buildController", "dispatch", "getState", "fieldName", "updateCaseInput", "value", "updatesToFetch", "logUpdateCaseField", "fetchCaseClassifications", "fetchDocumentSuggestions", "configuration", "caseAssistConfigurationReducer", "caseInputReducer", "caseFieldReducer", "documentSuggestionReducer", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "buildInteractiveResultCore", "engine", "props", "action", "loadInteractiveResultCoreReducers", "loadReducerError", "defaultDelay", "options", "longPressTimer", "r", "configuration", "buildCaseAssistInteractiveResult", "engine", "props", "wasOpened", "buildInteractiveResultCore", "logDocumentSuggestionOpen", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "buildDocumentSuggestionList", "engine", "loadDocumentSuggestionListReducers", "loadReducerError", "controller", "buildController", "dispatch", "getState", "fetchDocumentSuggestions", "state", "configuration", "caseAssistConfigurationReducer", "caseInputReducer", "caseFieldReducer", "documentSuggestionReducer", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "buildResultPreviewRequest", "state", "options", "search", "accessToken", "organizationId", "q", "getSearchApiBaseUrl", "fetchResultContent", "createAsyncThunk", "options", "extra", "getState", "rejectWithValue", "state", "req", "buildResultPreviewRequest", "res", "isErrorResponse", "nextPreview", "createAction", "previousPreview", "preparePreviewPagination", "payload", "validatePayload", "ArrayValue", "MAX_GET_LENGTH", "updateContentURL", "contentURL", "buildContentURL", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "deselectAllBreadcrumbs", "createAction", "deselectAllNonBreadcrumbs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "updateFacetAutoSelection", "createAction", "payload", "validatePayload", "BooleanValue", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "InstantResultsAnalyticsProvider", "SearchAnalyticsProvider", "getState", "state", "id", "query", "getQueryInitialState", "getSearchInitialState", "logInstantResultsSearch", "makeAnalyticsAction", "client", "getState", "InstantResultsAnalyticsProvider", "searchboxAsYouType", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "instantResultsRegisterDefinition", "requiredNonEmptyString", "instantResultsQueryDefinition", "requiredEmptyAllowedString", "registerInstantResults", "createAction", "payload", "validatePayload", "updateInstantResultsQuery", "clearExpiredResults", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "numberValue", "NumberValue", "registerNumberOfResults", "createAction", "payload", "validatePayload", "updateNumberOfResults", "registerPage", "updatePage", "nextPage", "previousPage", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "updateQuery", "createAction", "payload", "validatePayload", "StringValue", "BooleanValue", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "buildSearchAndFoldingLoadCollectionRequest", "state", "navigatorContext", "eventDescription", "getSearchApiBaseUrl", "fromAnalyticsStateToAnalyticsParams", "isNullOrUndefined", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "fromAnalyticsStateToAnalyticsParams", "s", "eventDescription", "isNextAnalytics", "getVisitorID", "getPageID", "getAnalyticsSource", "buildSearchAndFoldingLoadCollectionRequest", "state", "eventDescription", "getSearchApiBaseUrl", "history_store_default", "fromAnalyticsStateToAnalyticsParams", "isNullOrUndefined", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getAdvancedSearchQueriesInitialState", "logFetchMoreResults", "makeAnalyticsAction", "client", "logQueryError", "error", "state", "getQueryInitialState", "getAdvancedSearchQueriesInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "enableDidYouMean", "createAction", "disableDidYouMean", "disableAutomaticQueryCorrection", "enableAutomaticQueryCorrection", "applyDidYouMeanCorrection", "payload", "validatePayload", "requiredNonEmptyString", "setCorrectionMode", "StringValue", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "logDidYouMeanAutomatic", "makeAnalyticsAction", "client", "didYouMeanAutomatic", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getContextInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getDictionaryFieldContextInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getFacetOptionsInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getFacetOrderInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getPaginationInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getQuerySetInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getStaticFilterSetInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getTabSetInitialState", "extractHistory", "state", "getContextInitialState", "getDictionaryFieldContextInitialState", "getFacetSetInitialState", "getNumericFacetSetInitialState", "getDateFacetSetInitialState", "getCategoryFacetSetInitialState", "getAutomaticFacetSetInitialState", "getPaginationInitialState", "getQueryInitialState", "getTabSetInitialState", "getAdvancedSearchQueriesInitialState", "getStaticFilterSetInitialState", "getQuerySetInitialState", "getSortCriteriaInitialState", "getPipelineInitialState", "getSearchHubInitialState", "getFacetOptionsInitialState", "getFacetOrderInitialState", "getDebugInitialState", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "logUndoTriggerQueryPayloadDefinition", "RecordValue", "requiredEmptyAllowedString", "logTriggerQuery", "makeAnalyticsAction", "client", "state", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "updateIgnoreQueryTrigger", "createAction", "q", "validatePayload", "StringValue", "applyQueryTriggerModification", "payload", "RecordValue", "nonEmptyString", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "buildSearchRequest", "state", "eventDescription", "cq", "buildConstantQuery", "facets", "getFacets", "automaticFacets", "getAutomaticFacets", "sharedWithFoldingRequest", "buildSearchAndFoldingLoadCollectionRequest", "getNumberOfResultsWithinIndexLimit", "mapSearchRequest", "facet", "responseToAutomaticFacetRequest", "facetRequest", "response", "field", "label", "values", "selectedValues", "value", "tabExpression", "tab", "filterExpressions", "getStaticFilterExpressions", "expression", "filter", "selected", "AsyncSearchThunkProcessor", "config", "onUpdateQueryForCorrection", "modification", "updateQuery", "mappings", "request", "options", "startedAt", "response", "mapSearchResponse", "duration", "queryExecuted", "fetched", "isErrorResponse", "logQueryError", "state", "successResponse", "enableDidYouMean", "automaticallyCorrectQuery", "results", "queryCorrections", "queryCorrection", "shouldExecuteClassicDidYouMeanAutoCorrection", "shouldExecuteModernDidYouMeanAutoCorrection", "isNullOrUndefined", "ret", "snapshot", "extractHistory", "originalFetchedResponse", "originalQuery", "originalSearchSuccessResponse", "correctedQuery", "retried", "logDidYouMeanAutomatic", "trigger", "updateIgnoreQueryTrigger", "logTriggerQuery", "query", "previousState", "getQueryInitialState", "getSearchInitialState", "isSuccessResponse", "correction", "buildSearchRequest", "applyDidYouMeanCorrection", "modified", "applyQueryTriggerModification", "executeSearch", "createAsyncThunk", "searchAction", "config", "state", "legacyExecuteSearch", "fetchPage", "legacyFetchPage", "fetchMoreResults", "_", "legacyFetchMoreResults", "fetchFacetValues", "legacyFetchFacetValues", "fetchInstantResults", "payload", "legacyFetchInstantResults", "buildFetchMoreRequest", "eventDescription", "mappedRequest", "buildSearchRequest", "buildInstantResultSearchRequest", "q", "numberOfResults", "sharedWithFoldingRequest", "buildSearchAndFoldingLoadCollectionRequest", "mapSearchRequest", "buildFetchFacetValuesRequest", "addEntryInActionsHistory", "history_store_default", "validatePayload", "requiredNonEmptyString", "NumberValue", "maxResultsPerQuery", "processor", "AsyncSearchThunkProcessor", "logInstantResultsSearch", "modification", "updateInstantResultsQuery", "request", "fetched", "processed", "analyticsClientMiddleware", "preprocessRequest", "logger", "logFetchMoreResults", "updateSearchAction", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "buildSearchRequest", "state", "navigatorContext", "eventDescription", "cq", "buildConstantQuery", "facets", "getFacets", "automaticFacets", "getAutomaticFacets", "sharedWithFoldingRequest", "buildSearchAndFoldingLoadCollectionRequest", "getNumberOfResultsWithinIndexLimit", "mapSearchRequest", "sortFacets", "getAllEnabledFacets", "facet", "responseToAutomaticFacetRequest", "facetRequest", "response", "field", "label", "values", "selectedValues", "value", "getAllFacets", "facetId", "getSpecificFacetRequests", "getRangeFacetRequests", "getFacetRequests", "request", "sortCriteria", "sortCriteriaMap", "currentValues", "hasActiveValues", "hasPreviousStateValues", "tabExpression", "tab", "filterExpressions", "selectStaticFilterExpressions", "expression", "AsyncSearchThunkProcessor", "config", "onUpdateQueryForCorrection", "modification", "updateQuery", "mappings", "request", "options", "startedAt", "response", "mapSearchResponse", "duration", "queryExecuted", "fetched", "isErrorResponse", "logQueryError", "state", "successResponse", "enableDidYouMean", "automaticallyCorrectQuery", "results", "queryCorrections", "queryCorrection", "shouldExecuteClassicDidYouMeanAutoCorrection", "shouldExecuteModernDidYouMeanAutoCorrection", "isNullOrUndefined", "ret", "snapshot", "extractHistory", "originalFetchedResponse", "originalQuery", "originalSearchSuccessResponse", "correctedQuery", "retried", "trigger", "updateIgnoreQueryTrigger", "isSuccessResponse", "correction", "actionCause", "didYouMeanAutomatic", "buildSearchRequest", "applyDidYouMeanCorrection", "modified", "applyQueryTriggerModification", "prepareForSearchWithQuery", "createAsyncThunk", "payload", "thunk", "dispatch", "validatePayload", "StringValue", "BooleanValue", "deselectAllBreadcrumbs", "deselectAllNonBreadcrumbs", "updateFacetAutoSelection", "updateQuery", "updatePage", "updateSearchAction", "createAction", "executeSearch", "searchAction", "config", "state", "legacyExecuteSearch", "addEntryInActionsHistory", "analyticsAction", "buildSearchReduxAction", "request", "buildSearchRequest", "processor", "AsyncSearchThunkProcessor", "fetched", "fetchPage", "legacyFetchPage", "fetchMoreResults", "_", "legacyFetchMoreResults", "makeBasicNewSearchAnalyticsAction", "buildFetchMoreRequest", "fetchFacetValues", "buildFetchFacetValuesRequest", "fetchInstantResults", "legacyFetchInstantResults", "requiredNonEmptyString", "NumberValue", "q", "maxResultsPerQuery", "searchboxAsYouType", "buildInstantResultSearchRequest", "modification", "updateInstantResultsQuery", "processed", "navigatorContext", "eventDescription", "mappedRequest", "numberOfResults", "sharedWithFoldingRequest", "buildSearchAndFoldingLoadCollectionRequest", "mapSearchRequest", "history_store_default", "action", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "getResultPreviewInitialState", "resetPreviewContentState", "state", "content", "isLoading", "uniqueId", "contentURL", "getResultPreviewInitialState", "getUniqueIdsOfResultsWithHTMLVersion", "results", "r", "resultPreviewReducer", "createReducer", "builder", "fetchResultContent", "action", "executeSearch", "fetchMoreResults", "fetchPage", "preparePreviewPagination", "nextPreview", "newPos", "previousPreview", "updateContentURL", "buildCoreQuickview", "engine", "props", "buildResultPreviewRequest", "path", "fetchResultContentCallback", "loadQuickviewReducers", "loadReducerError", "dispatch", "getState", "controller", "buildController", "result", "maximumPreviewSize", "getUniqueIdFromPosition", "resultsWithPreview", "position", "onFetchContent", "uniqueId", "updateContentURL", "fetchResultContent", "nextPreview", "previousPreview", "state", "resultHasPreview", "preview", "content", "isLoading", "contentURL", "currentResultUniqueId", "configuration", "resultPreviewReducer", "buildCaseAssistQuickview", "engine", "props", "loadSearchQuickviewReducers", "loadReducerError", "dispatch", "getState", "getDocuments", "core", "buildCoreQuickview", "buildResultPreviewRequest", "logQuickviewDocumentSuggestionClick", "preparePreviewPagination", "r", "documentSuggestionReducer", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "validateEvent", "p", "validatePayload", "requiredNonEmptyString", "nonEmptyString", "logSearchEvent", "makeAnalyticsAction", "client", "evt", "meta", "logClickEvent", "state", "validateResultPayload", "partialDocumentInformation", "documentIdentifier", "logCustomEvent", "loadGenericAnalyticsActions", "engine", "logSearchEvent", "logClickEvent", "logCustomEvent", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "loadCaseAssistAnalyticsActions", "engine", "logCaseStart", "logCaseNextStage", "logCreateCase", "logSolveCase", "logAbandonCase", "logUpdateCaseField", "logClassificationClick", "logDocumentSuggestionClick", "logDocumentSuggestionRating", "logQuickviewDocumentSuggestionClick", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "loadCaseFieldActions", "engine", "caseFieldReducer", "registerCaseField", "updateCaseField", "fetchCaseClassifications", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "loadCaseInputActions", "engine", "caseInputReducer", "updateCaseInput", "init_headers_shim", "init_global_this_shim", "init_abortable_fetch_shim", "init_navigator_sendbeacon_cjs", "loadDocumentSuggestionActions", "engine", "documentSuggestionReducer", "fetchDocumentSuggestions"]