Architecture cleanup: remove duplication and tighten types#33
Conversation
performGitHubSearch/fetchUserItems in githubSearch.ts were never wired into any production path — the live fetching lives inline in useGitHubDataFetching. Delete the 624-line orphan module and its 35 tests, the dead test mock, and the now-unused UsernameCache type.
- Delete resultsUtils.ts and filterUtils.ts: their entire filter/classify API was unused in production (only parseSearchText and the ResultsFilter type were live). This removes a second, stale copy of the filtering logic that had already drifted (getItemType matched a 'Reviewed:' prefix no item ever has). - Move parseSearchText into viewFiltering.ts (the live filtering module) and simplify its repeated regex loops via an extractQualifier helper. - Move ResultsFilter + createDefaultFilter into urlState.ts, their only user. - Add a canonical isReviewItem() in summaryGrouping and use it everywhere review detection was duplicated (Summary view, categorizeItem, getEventType). - Rewrite utils/README.md to describe the actual modules.
The search-items store actually holds GitHubItem[] but was typed as GitHubEvent[] end-to-end, forcing 'as unknown as' casts at every read and write. Parameterize EventsData<T>, eventsStorage.store/retrieve, and useIndexedDBStorage<T> so events use GitHubEvent and search items use GitHubItem honestly; extract EventsMetadata. Removes all storage-layer casts.
FormContextType was defined both inline in App.tsx and in types.ts, and the two had drifted (searchText/setSearchText, rawEventsCount optionality, handleSearch signature). Make types.ts the single definition matching the value App actually provides, import it into App, and update the test mock.
Replace the ~500-line if/else-on-event.type chain with a Record<eventType, handler> map plus shared actorUserOf/buildBaseItem helpers that supply the repository/user/provenance fields every handler repeated. Behavior is identical (rawDataUtils tests unchanged); each event type is now an independently readable handler.
- Extract the ~130-line inline initial-loading JSX from App into a LoadingScreen component; App no longer doubles as a styled view. - Remove unreachable code after 'throw error' in fetchAllEvents. - Drop debug console.log calls from the enrichment and avatar-fetch paths. - Move root-level *_FIX.md / *_FEATURE.md process notes into docs/ so only README.md remains at the repo root.
|
Warning Review limit reached
Next review available in: 5 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (3)
📝 WalkthroughWalkthroughThis PR removes githubSearch.ts, resultsUtils.ts, and filterUtils.ts (with their tests), inlining search-text parsing into viewFiltering.ts and urlState.ts. It generalizes IndexedDB storage with generics, refactors rawDataUtils into a handler dispatch table, adds a LoadingScreen component, updates FormContextType, and adds review-grouping logic and build configs. ChangesUtility consolidation and typed data flow
Estimated code review effort: 4 (Complex) | ~60 minutes Sequence Diagram(s)sequenceDiagram
participant App
participant LoadingScreen
participant useIndexedDBStorage
participant eventsStorage
App->>useIndexedDBStorage: load typed events (GitHubEvent/GitHubItem)
useIndexedDBStorage->>eventsStorage: retrieve<T>(key)
eventsStorage-->>App: typed events + metadata
App->>LoadingScreen: render(loading, isDataLoadingComplete, progress)
LoadingScreen-->>App: onManualSpin() / onStart()
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 5
♻️ Duplicate comments (3)
vitest.config.js (1)
1-41: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winCompiled config output checked into repo.
Same generated-artifact concern: context snippet shows a
vitest.config.tswith matching alias/test setup, confirming this.jsis compiled output that duplicates the real source and will drift if only the.tsis edited going forward.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@vitest.config.js` around lines 1 - 41, This vitest.config.js appears to be compiled/generated output duplicating the real vitest.config.ts source, so keep only the source config in sync and remove this checked-in artifact or regenerate it as part of the build. Update the actual config definition in the canonical vitest.config.ts (including alias, test, coverage, and define settings) and ensure the repo no longer relies on maintaining both files separately.vitest.config.d.ts (1)
1-2: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winCompiled config output checked into repo.
Same generated-artifact concern as
vite.config.d.ts— this appears to be tsc output ofvitest.config.ts.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@vitest.config.d.ts` around lines 1 - 2, This file is generated TypeScript declaration output and should not be checked into the repo. Remove the compiled artifact for vitest.config.d.ts and, if needed, update the build/repo conventions so vitest.config.ts is the source of truth instead of committed tsc output. Keep the cleanup aligned with the same generated-artifact handling used for the related vite.config.d.ts file.vite.config.js (1)
1-86: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winCompiled config output checked into repo.
Same concern as
vite.config.d.ts: thisvar/ES5-transpiled file is tsc-compiled output of a.tssource, not hand-written. Committing generated build artifacts alongside their.tssource (if it still exists) duplicates the source of truth and will silently go stale if the.tsfile is edited without re-running the build.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@vite.config.js` around lines 1 - 86, The checked-in vite.config.js appears to be generated output rather than the source of truth, duplicating the TypeScript config and risking drift. Remove this compiled artifact from version control and keep only the original source config (or ensure the build pipeline generates it consistently); if the repo intentionally tracks generated files, document that explicitly and align it with the corresponding vite.config.ts source.
🧹 Nitpick comments (4)
src/App.tsx (1)
196-209: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚖️ Poor tradeoffConsider adding test coverage for the new
LoadingScreenwiring.
LoadingScreenextraction changes a previously inline-tested code path; adding a focused test (render withinitialLoadingCount === 1, verify Start button disabled/enabled states) would guard this refactor going forward.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/App.tsx` around lines 196 - 209, Add focused test coverage for the `LoadingScreen` branch in `App` that is taken when `initialLoadingCount === 1`; render `App` in that state and verify the `LoadingScreen` wiring, especially the Start button disabled/enabled behavior as `loading`, `isDataLoadingComplete`, and related props change. Use the `LoadingScreen` component and the `handleStartClick`/`handleManualSpin` path to confirm the extracted UI still behaves like the previous inline implementation.src/utils/rawDataUtils.ts (1)
90-220: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winConsider extracting the shared PR-resolution logic.
PullRequestEvent,PullRequestReviewEvent, andPullRequestReviewCommentEventeach repeat the sameprNumber→htmlUrl→prTitlederivation. Since this PR is a consolidation effort, a small shared helper would remove the triplicated logic and keep the fallbacks in sync.♻️ Sketch
const resolvePR = (event: GitHubEvent) => { const { payload, repo } = event; const pr = payload.pull_request!; const p = payload as { number?: number }; let number = pr.number || p.number; if (!number) number = extractPRNumber(pr.html_url, (pr as { url?: string }).url); const htmlUrl = pr.html_url || (number ? `https://github.com/${repo.name}/pull/${number}` : `https://github.com/${repo.name}/pulls`); const title = (pr.title && pr.title !== 'undefined') ? pr.title : (number ? `Pull Request #${number}` : 'Pull Request'); return { pr, number, htmlUrl, title }; };🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/utils/rawDataUtils.ts` around lines 90 - 220, The PR item builders in PullRequestEvent, PullRequestReviewEvent, and PullRequestReviewCommentEvent duplicate the same PR resolution flow for prNumber, htmlUrl, and prTitle. Extract that shared logic into a small helper such as resolvePR in rawDataUtils.ts, then update those handlers to use it so the fallback behavior stays consistent and easier to maintain.src/utils/viewFiltering.ts (1)
11-122: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueSolid inlined implementation; qualifier-order handling is correct.
Verified the negated-before-positive extraction order (lines 90-96) correctly avoids
\bword-boundary false matches on e.g.-label:being partially matched by\blabel:before it's stripped. TheString.replace(m, ' ')loop (lines 47-49) also correctly handles duplicate qualifier values since matches are collected and replaced in left-to-right order.One optional DRY improvement: the seven
extractQualifiercalls (lines 90-96) are structurally identical (regex + accumulator pairs) and could be driven by a small config array to reduce repetition and ease adding new qualifiers in the future.♻️ Optional refactor to a config-driven loop
- let cleanText = searchText; - cleanText = extractQualifier(cleanText, /-label:([^\s]+)/g, excludedLabels); - cleanText = extractQualifier(cleanText, /\blabel:([^\s]+)/g, includedLabels); - cleanText = extractQualifier(cleanText, /\buser:([^\s]+)/g, userFilters); - cleanText = extractQualifier(cleanText, /-repo:([^\s]+)/g, excludedRepos); - cleanText = extractQualifier(cleanText, /\brepo:([^\s]+)/g, includedRepos); - cleanText = extractQualifier(cleanText, /-org:([^\s]+)/g, excludedOrgs); - cleanText = extractQualifier(cleanText, /\borg:([^\s]+)/g, includedOrgs); + let cleanText = searchText; + const qualifierExtractions: [RegExp, string[]][] = [ + [/-label:([^\s]+)/g, excludedLabels], + [/\blabel:([^\s]+)/g, includedLabels], + [/\buser:([^\s]+)/g, userFilters], + [/-repo:([^\s]+)/g, excludedRepos], + [/\brepo:([^\s]+)/g, includedRepos], + [/-org:([^\s]+)/g, excludedOrgs], + [/\borg:([^\s]+)/g, includedOrgs], + ]; + for (const [regex, out] of qualifierExtractions) { + cleanText = extractQualifier(cleanText, regex, out); + }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/utils/viewFiltering.ts` around lines 11 - 122, Refactor parseSearchText to reduce the repeated qualifier extraction calls by driving the seven extractQualifier invocations from a small config array or similar mapping. Keep the current negated-before-positive ordering and preserve the existing accumulators in ParsedSearchText, but centralize the regex-to-target-array wiring so adding new qualifiers later is easier.vite.config.d.ts (1)
1-2: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueDrop the generated Vite config artifacts. These files are emitted from
vite.config.ts(tsconfig.node.jsonincludes it) and aren’t referenced directly, so keepingvite.config.js,vite.config.d.ts, andtsconfig.node.tsbuildinfochecked in just adds drift risk.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@vite.config.d.ts` around lines 1 - 2, Remove the generated Vite config artifacts from version control; the checked-in vite.config.d.ts is emitted by vite.config.ts through tsconfig.node.json and is not meant to be maintained manually. Delete the generated files alongside any other emitted config outputs such as vite.config.js and tsconfig.node.tsbuildinfo so the repository only keeps the source vite.config.ts and avoids drift.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/hooks/useGitHubDataFetching.ts`:
- Line 3: The `useGitHubDataFetching` module imports `EventsMetadata` as a value
import, which triggers a TS1484 error under `verbatimModuleSyntax`. Update the
import in `useGitHubDataFetching` to use a type-only import for
`EventsMetadata`, keeping the symbol reference intact while ensuring it is
erased from the emitted JavaScript.
In `@src/utils/rawDataUtils.ts`:
- Around line 352-367: The WatchEvent mapping is using the wrong default action,
which causes missing payload.action values to be treated as an unstarred event.
Update the WatchEvent handler in rawDataUtils so the fallback action is started,
and make sure the title/body logic in that mapper still uses the action value
consistently to render the starred variant when payload.action is absent.
In `@src/utils/README.md`:
- Around line 9-13: The README diagram block is missing a language identifier,
which causes markdownlint to flag it. Update the fenced block in the README so
the diagram uses an explicit language tag such as text, keeping the existing
content intact. Locate the markdown fence around the network → rawDataUtils →
viewFiltering / summaryGrouping → views diagram and add the language to that
fenced block only.
In `@tsconfig.node.tsbuildinfo`:
- Line 1: This change is a generated TypeScript incremental-build cache that
should not be versioned. Remove the committed tsbuildinfo artifact from the
repository, and update the project ignore rules to exclude all tsbuildinfo files
so future compiles do not reintroduce it. Locate and delete the incremental
cache entry named tsconfig.node.tsbuildinfo, and verify no other build-cache
artifacts are tracked.
In `@tsconfig.tsbuildinfo`:
- Line 1: Remove the generated tsbuildinfo artifact from version control and
keep it out of future commits by updating the repo’s ignore rules; the affected
file is the incremental build cache, so delete the tracked tsconfig.tsbuildinfo
entry and ensure the TypeScript build configuration continues to generate it
locally without committing it.
---
Duplicate comments:
In `@vite.config.js`:
- Around line 1-86: The checked-in vite.config.js appears to be generated output
rather than the source of truth, duplicating the TypeScript config and risking
drift. Remove this compiled artifact from version control and keep only the
original source config (or ensure the build pipeline generates it consistently);
if the repo intentionally tracks generated files, document that explicitly and
align it with the corresponding vite.config.ts source.
In `@vitest.config.d.ts`:
- Around line 1-2: This file is generated TypeScript declaration output and
should not be checked into the repo. Remove the compiled artifact for
vitest.config.d.ts and, if needed, update the build/repo conventions so
vitest.config.ts is the source of truth instead of committed tsc output. Keep
the cleanup aligned with the same generated-artifact handling used for the
related vite.config.d.ts file.
In `@vitest.config.js`:
- Around line 1-41: This vitest.config.js appears to be compiled/generated
output duplicating the real vitest.config.ts source, so keep only the source
config in sync and remove this checked-in artifact or regenerate it as part of
the build. Update the actual config definition in the canonical vitest.config.ts
(including alias, test, coverage, and define settings) and ensure the repo no
longer relies on maintaining both files separately.
---
Nitpick comments:
In `@src/App.tsx`:
- Around line 196-209: Add focused test coverage for the `LoadingScreen` branch
in `App` that is taken when `initialLoadingCount === 1`; render `App` in that
state and verify the `LoadingScreen` wiring, especially the Start button
disabled/enabled behavior as `loading`, `isDataLoadingComplete`, and related
props change. Use the `LoadingScreen` component and the
`handleStartClick`/`handleManualSpin` path to confirm the extracted UI still
behaves like the previous inline implementation.
In `@src/utils/rawDataUtils.ts`:
- Around line 90-220: The PR item builders in PullRequestEvent,
PullRequestReviewEvent, and PullRequestReviewCommentEvent duplicate the same PR
resolution flow for prNumber, htmlUrl, and prTitle. Extract that shared logic
into a small helper such as resolvePR in rawDataUtils.ts, then update those
handlers to use it so the fallback behavior stays consistent and easier to
maintain.
In `@src/utils/viewFiltering.ts`:
- Around line 11-122: Refactor parseSearchText to reduce the repeated qualifier
extraction calls by driving the seven extractQualifier invocations from a small
config array or similar mapping. Keep the current negated-before-positive
ordering and preserve the existing accumulators in ParsedSearchText, but
centralize the regex-to-target-array wiring so adding new qualifiers later is
easier.
In `@vite.config.d.ts`:
- Around line 1-2: Remove the generated Vite config artifacts from version
control; the checked-in vite.config.d.ts is emitted by vite.config.ts through
tsconfig.node.json and is not meant to be maintained manually. Delete the
generated files alongside any other emitted config outputs such as
vite.config.js and tsconfig.node.tsbuildinfo so the repository only keeps the
source vite.config.ts and avoids drift.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 513e291d-bbca-462a-8c77-f079930680ec
📒 Files selected for processing (42)
docs/BUTTON_WIDTH_FIX.mddocs/CUSTOM_SECTIONS_FEATURE.mddocs/GITHUB_API_FORMAT_CHANGE.mddocs/PAGINATION_LIMIT_FIX.mddocs/PR_ENRICHMENT_FEATURE.mddocs/PWA_FEATURES.mddocs/PWA_UPDATE_FEATURE.mddocs/RACE_CONDITION_FIX.mddocs/README_FILTERING_OPTIMIZATION.mddocs/SEARCH_DEBOUNCING.mddocs/SLOTMACHINE_OPTIMIZATION.mddocs/UNDEFINED_TITLE_FIX.mdsrc/App.tsxsrc/components/LoadingScreen.tsxsrc/hooks/useGitHubDataFetching.tssrc/hooks/useGitHubDataProcessing.tssrc/hooks/useGitHubFormState.tssrc/hooks/useIndexedDBStorage.tssrc/test/URLStateIntegration.test.tsxsrc/test/test-utils.tsxsrc/types.tssrc/utils/README.mdsrc/utils/__tests__/searchParsing.test.tssrc/utils/filterUtils.test.tssrc/utils/filterUtils.tssrc/utils/githubSearch.test.tssrc/utils/githubSearch.tssrc/utils/indexedDB.tssrc/utils/rawDataUtils.tssrc/utils/resultsUtils.test.tssrc/utils/resultsUtils.tssrc/utils/summaryGrouping.tssrc/utils/urlState.test.tssrc/utils/urlState.tssrc/utils/viewFiltering.tssrc/views/Summary.tsxtsconfig.node.tsbuildinfotsconfig.tsbuildinfovite.config.d.tsvite.config.jsvitest.config.d.tsvitest.config.js
💤 Files with no reviewable changes (7)
- src/utils/filterUtils.test.ts
- src/utils/filterUtils.ts
- src/utils/resultsUtils.ts
- src/utils/githubSearch.test.ts
- src/utils/resultsUtils.test.ts
- src/test/URLStateIntegration.test.tsx
- src/utils/githubSearch.ts
| @@ -0,0 +1 @@ | |||
| {"fileNames":["./node_modules/typescript/lib/lib.d.ts","./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.webworker.importscripts.d.ts","./node_modules/typescript/lib/lib.scripthost.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/dom-events.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/rollup/dist/rollup.d.ts","./node_modules/rollup/dist/parseAst.d.ts","./node_modules/vite/types/hmrPayload.d.ts","./node_modules/vite/types/customEvent.d.ts","./node_modules/vite/types/hot.d.ts","./node_modules/vite/dist/node/moduleRunnerTransport.d-DJ_mE5sf.d.ts","./node_modules/vite/dist/node/module-runner.d.ts","./node_modules/esbuild/lib/main.d.ts","./node_modules/source-map-js/source-map.d.ts","./node_modules/postcss/lib/previous-map.d.ts","./node_modules/postcss/lib/input.d.ts","./node_modules/postcss/lib/css-syntax-error.d.ts","./node_modules/postcss/lib/declaration.d.ts","./node_modules/postcss/lib/root.d.ts","./node_modules/postcss/lib/warning.d.ts","./node_modules/postcss/lib/lazy-result.d.ts","./node_modules/postcss/lib/no-work-result.d.ts","./node_modules/postcss/lib/processor.d.ts","./node_modules/postcss/lib/result.d.ts","./node_modules/postcss/lib/document.d.ts","./node_modules/postcss/lib/rule.d.ts","./node_modules/postcss/lib/node.d.ts","./node_modules/postcss/lib/comment.d.ts","./node_modules/postcss/lib/container.d.ts","./node_modules/postcss/lib/at-rule.d.ts","./node_modules/postcss/lib/list.d.ts","./node_modules/postcss/lib/postcss.d.ts","./node_modules/postcss/lib/postcss.d.mts","./node_modules/vite/types/internal/lightningcssOptions.d.ts","./node_modules/vite/types/internal/cssPreprocessorOptions.d.ts","./node_modules/vite/types/importGlob.d.ts","./node_modules/vite/types/metadata.d.ts","./node_modules/vite/dist/node/index.d.ts","./node_modules/@babel/types/lib/index.d.ts","./node_modules/@types/babel__generator/index.d.ts","./node_modules/@babel/parser/typings/babel-parser.d.ts","./node_modules/@types/babel__template/index.d.ts","./node_modules/@types/babel__traverse/index.d.ts","./node_modules/@types/babel__core/index.d.ts","./node_modules/@vitejs/plugin-react/dist/index.d.mts","./node_modules/workbox-build/build/lib/copy-workbox-libraries.d.ts","./node_modules/type-fest/source/basic.d.ts","./node_modules/type-fest/source/typed-array.d.ts","./node_modules/type-fest/source/except.d.ts","./node_modules/type-fest/source/simplify.d.ts","./node_modules/type-fest/source/mutable.d.ts","./node_modules/type-fest/source/merge.d.ts","./node_modules/type-fest/source/merge-exclusive.d.ts","./node_modules/type-fest/source/require-at-least-one.d.ts","./node_modules/type-fest/source/require-exactly-one.d.ts","./node_modules/type-fest/source/partial-deep.d.ts","./node_modules/type-fest/source/readonly-deep.d.ts","./node_modules/type-fest/source/literal-union.d.ts","./node_modules/type-fest/source/promisable.d.ts","./node_modules/type-fest/source/opaque.d.ts","./node_modules/type-fest/source/set-optional.d.ts","./node_modules/type-fest/source/set-required.d.ts","./node_modules/type-fest/source/value-of.d.ts","./node_modules/type-fest/source/promise-value.d.ts","./node_modules/type-fest/source/async-return-type.d.ts","./node_modules/type-fest/source/conditional-keys.d.ts","./node_modules/type-fest/source/conditional-except.d.ts","./node_modules/type-fest/source/conditional-pick.d.ts","./node_modules/type-fest/source/union-to-intersection.d.ts","./node_modules/type-fest/source/stringified.d.ts","./node_modules/type-fest/source/fixed-length-array.d.ts","./node_modules/type-fest/source/iterable-element.d.ts","./node_modules/type-fest/source/entry.d.ts","./node_modules/type-fest/source/entries.d.ts","./node_modules/type-fest/source/set-return-type.d.ts","./node_modules/type-fest/source/asyncify.d.ts","./node_modules/type-fest/source/package-json.d.ts","./node_modules/type-fest/source/tsconfig-json.d.ts","./node_modules/type-fest/base.d.ts","./node_modules/type-fest/source/utilities.d.ts","./node_modules/type-fest/ts41/utilities.d.ts","./node_modules/type-fest/ts41/camel-case.d.ts","./node_modules/type-fest/ts41/delimiter-case.d.ts","./node_modules/type-fest/ts41/kebab-case.d.ts","./node_modules/type-fest/ts41/pascal-case.d.ts","./node_modules/type-fest/ts41/snake-case.d.ts","./node_modules/type-fest/ts41/get.d.ts","./node_modules/type-fest/ts41/index.d.ts","./node_modules/workbox-core/_version.d.ts","./node_modules/workbox-core/types.d.ts","./node_modules/workbox-broadcast-update/_version.d.ts","./node_modules/workbox-broadcast-update/BroadcastCacheUpdate.d.ts","./node_modules/workbox-google-analytics/_version.d.ts","./node_modules/workbox-google-analytics/initialize.d.ts","./node_modules/workbox-routing/_version.d.ts","./node_modules/workbox-routing/utils/constants.d.ts","./node_modules/workbox-background-sync/_version.d.ts","./node_modules/workbox-background-sync/Queue.d.ts","./node_modules/workbox-cacheable-response/_version.d.ts","./node_modules/workbox-cacheable-response/CacheableResponse.d.ts","./node_modules/workbox-expiration/_version.d.ts","./node_modules/workbox-expiration/ExpirationPlugin.d.ts","./node_modules/workbox-build/build/types.d.ts","./node_modules/workbox-build/build/lib/cdn-utils.d.ts","./node_modules/workbox-build/build/generate-sw.d.ts","./node_modules/workbox-build/build/get-manifest.d.ts","./node_modules/workbox-build/build/inject-manifest.d.ts","./node_modules/workbox-build/build/index.d.ts","./node_modules/vite-plugin-pwa/dist/index.d.ts","./node_modules/@rollup/pluginutils/types/index.d.ts","./node_modules/prettier/doc.d.ts","./node_modules/prettier/index.d.ts","./node_modules/@svgr/babel-plugin-transform-svg-component/dist/index.d.ts","./node_modules/@svgr/babel-preset/dist/index.d.ts","./node_modules/@svgr/core/dist/index.d.ts","./node_modules/vite-plugin-svgr/dist/index.d.ts","./vite.config.ts","./node_modules/@vitest/pretty-format/dist/index.d.ts","./node_modules/@vitest/utils/dist/types.d.ts","./node_modules/@vitest/utils/dist/helpers.d.ts","./node_modules/tinyrainbow/dist/index-8b61d5bc.d.ts","./node_modules/tinyrainbow/dist/node.d.ts","./node_modules/@vitest/utils/dist/index.d.ts","./node_modules/@vitest/runner/dist/tasks.d-hsdzc98-.d.ts","./node_modules/@vitest/utils/dist/types.d-BCElaP-c.d.ts","./node_modules/@vitest/utils/dist/diff.d.ts","./node_modules/@vitest/runner/dist/types.d.ts","./node_modules/@vitest/utils/dist/error.d.ts","./node_modules/@vitest/runner/dist/index.d.ts","./node_modules/parse5/dist/common/html.d.ts","./node_modules/parse5/dist/common/token.d.ts","./node_modules/parse5/dist/common/error-codes.d.ts","./node_modules/parse5/dist/tokenizer/preprocessor.d.ts","./node_modules/entities/dist/esm/generated/decode-data-html.d.ts","./node_modules/entities/dist/esm/generated/decode-data-xml.d.ts","./node_modules/entities/dist/esm/decode-codepoint.d.ts","./node_modules/entities/dist/esm/decode.d.ts","./node_modules/parse5/dist/tokenizer/index.d.ts","./node_modules/parse5/dist/tree-adapters/interface.d.ts","./node_modules/parse5/dist/parser/open-element-stack.d.ts","./node_modules/parse5/dist/parser/formatting-element-list.d.ts","./node_modules/parse5/dist/parser/index.d.ts","./node_modules/parse5/dist/tree-adapters/default.d.ts","./node_modules/parse5/dist/serializer/index.d.ts","./node_modules/parse5/dist/common/foreign-content.d.ts","./node_modules/parse5/dist/index.d.ts","./node_modules/tough-cookie/dist/cookie/constants.d.ts","./node_modules/tough-cookie/dist/cookie/cookie.d.ts","./node_modules/tough-cookie/dist/utils.d.ts","./node_modules/tough-cookie/dist/store.d.ts","./node_modules/tough-cookie/dist/memstore.d.ts","./node_modules/tough-cookie/dist/pathMatch.d.ts","./node_modules/tough-cookie/dist/permuteDomain.d.ts","./node_modules/tough-cookie/dist/getPublicSuffix.d.ts","./node_modules/tough-cookie/dist/validators.d.ts","./node_modules/tough-cookie/dist/version.d.ts","./node_modules/tough-cookie/dist/cookie/canonicalDomain.d.ts","./node_modules/tough-cookie/dist/cookie/cookieCompare.d.ts","./node_modules/tough-cookie/dist/cookie/cookieJar.d.ts","./node_modules/tough-cookie/dist/cookie/defaultPath.d.ts","./node_modules/tough-cookie/dist/cookie/domainMatch.d.ts","./node_modules/tough-cookie/dist/cookie/formatDate.d.ts","./node_modules/tough-cookie/dist/cookie/parseDate.d.ts","./node_modules/tough-cookie/dist/cookie/permutePath.d.ts","./node_modules/tough-cookie/dist/cookie/index.d.ts","./node_modules/@types/jsdom/base.d.ts","./node_modules/@types/jsdom/index.d.ts","./node_modules/vitest/optional-types.d.ts","./node_modules/vitest/dist/chunks/environment.d.Dmw5ulng.d.ts","./node_modules/@vitest/mocker/dist/registry.d-D765pazg.d.ts","./node_modules/@vitest/mocker/dist/types.d-D_aRZRdy.d.ts","./node_modules/@vitest/mocker/dist/index.d.ts","./node_modules/@vitest/utils/dist/source-map.d.ts","./node_modules/vite-node/dist/trace-mapping.d-DLVdEqOp.d.ts","./node_modules/vite-node/dist/index.d-CWZbpOcv.d.ts","./node_modules/vite-node/dist/index.d.ts","./node_modules/@vitest/snapshot/dist/environment.d-DHdQ1Csl.d.ts","./node_modules/@vitest/snapshot/dist/rawSnapshot.d-lFsMJFUd.d.ts","./node_modules/@vitest/snapshot/dist/index.d.ts","./node_modules/@vitest/snapshot/dist/environment.d.ts","./node_modules/vitest/dist/chunks/config.d.UqE-KR0o.d.ts","./node_modules/vitest/dist/chunks/worker.d.CHGSOG0s.d.ts","./node_modules/@vitest/runner/dist/utils.d.ts","./node_modules/tinybench/dist/index.d.ts","./node_modules/vitest/dist/chunks/benchmark.d.BwvBVTda.d.ts","./node_modules/vite-node/dist/client.d.ts","./node_modules/vitest/dist/chunks/coverage.d.S9RMNXIe.d.ts","./node_modules/@vitest/snapshot/dist/manager.d.ts","./node_modules/vitest/dist/chunks/reporters.d.C-cu31ET.d.ts","./node_modules/vitest/dist/chunks/worker.d.C-KN07Ls.d.ts","./node_modules/@vitest/expect/dist/chai.d.cts","./node_modules/@vitest/spy/dist/index.d.ts","./node_modules/@vitest/expect/dist/index.d.ts","./node_modules/@vitest/expect/index.d.ts","./node_modules/vitest/dist/chunks/global.d.CXRAxnWc.d.ts","./node_modules/vitest/dist/chunks/vite.d.iXCEVtFP.d.ts","./node_modules/vitest/dist/chunks/mocker.d.BE_2ls6u.d.ts","./node_modules/vitest/dist/chunks/suite.d.FvehnV49.d.ts","./node_modules/expect-type/dist/utils.d.ts","./node_modules/expect-type/dist/overloads.d.ts","./node_modules/expect-type/dist/branding.d.ts","./node_modules/expect-type/dist/messages.d.ts","./node_modules/expect-type/dist/index.d.ts","./node_modules/vitest/dist/index.d.ts","./vitest.config.ts","./node_modules/@types/aria-query/index.d.ts","./node_modules/@types/ms/index.d.ts","./node_modules/@types/debug/index.d.ts","./node_modules/@types/estree-jsx/index.d.ts","./node_modules/@types/graceful-fs/index.d.ts","./node_modules/@types/unist/index.d.ts","./node_modules/@types/hast/index.d.ts","./node_modules/@types/istanbul-lib-coverage/index.d.ts","./node_modules/@types/istanbul-lib-report/index.d.ts","./node_modules/@types/istanbul-reports/index.d.ts","./node_modules/@jest/expect-utils/build/index.d.ts","./node_modules/chalk/index.d.ts","./node_modules/@sinclair/typebox/typebox.d.ts","./node_modules/@jest/schemas/build/index.d.ts","./node_modules/jest-diff/node_modules/pretty-format/build/index.d.ts","./node_modules/jest-diff/build/index.d.ts","./node_modules/jest-matcher-utils/build/index.d.ts","./node_modules/expect/build/index.d.ts","./node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts","./node_modules/@types/jest/index.d.ts","./node_modules/@types/json-schema/index.d.ts","./node_modules/@types/lodash/common/common.d.ts","./node_modules/@types/lodash/common/array.d.ts","./node_modules/@types/lodash/common/collection.d.ts","./node_modules/@types/lodash/common/date.d.ts","./node_modules/@types/lodash/common/function.d.ts","./node_modules/@types/lodash/common/lang.d.ts","./node_modules/@types/lodash/common/math.d.ts","./node_modules/@types/lodash/common/number.d.ts","./node_modules/@types/lodash/common/object.d.ts","./node_modules/@types/lodash/common/seq.d.ts","./node_modules/@types/lodash/common/string.d.ts","./node_modules/@types/lodash/common/util.d.ts","./node_modules/@types/lodash/index.d.ts","./node_modules/@types/mdast/index.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-is/node_modules/@types/react/global.d.ts","./node_modules/@types/react-is/node_modules/@types/react/index.d.ts","./node_modules/@types/react-is/index.d.ts","./node_modules/@types/resolve/index.d.ts","./node_modules/@types/stack-utils/index.d.ts","./node_modules/@types/styled-system/index.d.ts","./node_modules/@types/styled-system__css/index.d.ts","./node_modules/@types/styled-system__theme-get/index.d.ts","./node_modules/@types/tough-cookie/index.d.ts","./node_modules/@types/trusted-types/lib/index.d.ts","./node_modules/@types/trusted-types/index.d.ts","./node_modules/@types/yargs-parser/index.d.ts","./node_modules/@types/yargs/index.d.ts"],"fileIdsList":[[56,98,183],[56,98],[56,98,362],[56,98,149,150,353],[56,98,186,188],[56,98,188,257],[56,98,188,256,258],[56,98,183,184,185,186,187],[56,98,183,185],[56,98,351],[56,98,111,148],[56,98,355],[56,98,357],[56,98,358],[56,98,364,367],[56,98,363],[56,98,110,144,148,290,309,311],[56,98,310],[56,98,371,373,374,375,376,377,378,379,380,381,382,383],[56,98,371,372,374,375,376,377,378,379,380,381,382,383],[56,98,372,373,374,375,376,377,378,379,380,381,382,383],[56,98,371,372,373,375,376,377,378,379,380,381,382,383],[56,98,371,372,373,374,376,377,378,379,380,381,382,383],[56,98,371,372,373,374,375,377,378,379,380,381,382,383],[56,98,371,372,373,374,375,376,378,379,380,381,382,383],[56,98,371,372,373,374,375,376,377,379,380,381,382,383],[56,98,371,372,373,374,375,376,377,378,380,381,382,383],[56,98,371,372,373,374,375,376,377,378,379,381,382,383],[56,98,371,372,373,374,375,376,377,378,379,380,382,383],[56,98,371,372,373,374,375,376,377,378,379,380,381,383],[56,98,371,372,373,374,375,376,377,378,379,380,381,382],[56,95,98],[56,97,98],[98],[56,98,103,133],[56,98,99,104,110,111,118,130,141],[56,98,99,100,110,118],[51,52,53,56,98],[56,98,101,142],[56,98,102,103,111,119],[56,98,103,130,138],[56,98,104,106,110,118],[56,97,98,105],[56,98,106,107],[56,98,108,110],[56,97,98,110],[56,98,110,111,112,130,141],[56,98,110,111,112,125,130,133],[56,93,98],[56,93,98,106,110,113,118,130,141],[56,98,110,111,113,114,118,130,138,141],[56,98,113,115,130,138,141],[54,55,56,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147],[56,98,110,116],[56,98,117,141],[56,98,106,110,118,130],[56,98,119],[56,98,120],[56,97,98,121],[56,95,96,97,98,99,100,101,102,103,104,105,106,107,108,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147],[56,98,123],[56,98,124],[56,98,110,125,126],[56,98,125,127,142,144],[56,98,110,130,131,133],[56,98,132,133],[56,98,130,131],[56,98,133],[56,98,134],[56,95,98,130],[56,98,110,136,137],[56,98,136,137],[56,98,103,118,130,138],[56,98,139],[56,98,118,140],[56,98,113,124,141],[56,98,103,142],[56,98,130,143],[56,98,117,144],[56,98,145],[56,98,110,112,121,130,133,141,144,146],[56,98,130,147],[56,98,388],[56,98,391],[56,98,385,387,390],[56,98,386,387],[56,98,387],[56,98,399],[56,98,401],[56,98,182,188,340],[56,98,266,267,270,336],[56,98,337],[56,98,314,315],[56,98,267,268,270,271,272],[56,98,267],[56,98,267,268,270],[56,98,267,268],[56,98,321],[56,98,262,321,322],[56,98,262,321],[56,98,262,269],[56,98,263],[56,98,262,263,264,266],[56,98,262],[56,98,278,279,280],[56,98,343,344],[56,98,343,344,345,346],[56,98,343,345],[56,98,343],[56,98,360,366],[56,98,364],[56,98,361,365],[56,98,275],[56,98,274,275],[56,98,274],[56,98,274,275,276,282,283,286,287,288,289],[56,98,275,283],[56,98,274,275,276,282,283,284,285],[56,98,274,283],[56,98,283,287],[56,98,275,276,277,281],[56,98,276],[56,98,274,275,283],[56,98,173],[56,98,171,173],[56,98,162,170,171,172,174],[56,98,160],[56,98,163,168,173,176],[56,98,159,176],[56,98,163,164,167,168,169,176],[56,98,163,164,165,167,168,176],[56,98,160,161,162,163,164,168,169,170,172,173,174,176],[56,98,176],[56,98,158,160,161,162,163,164,165,167,168,169,170,171,172,173,174,175],[56,98,158,176],[56,98,163,165,166,168,169,176],[56,98,167,176],[56,98,168,169,173,176],[56,98,161,171],[56,98,255],[56,98,150,181,182],[56,98,265],[56,98,293],[56,98,291],[56,98,292],[56,98,291,292,293,294],[56,98,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308],[56,98,292,293,294],[56,98,293,309],[56,98,191,192,193,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222],[56,98,208],[56,98,208,219],[56,98,193,210],[56,98,210],[56,98,217],[56,98,191],[56,98,193,194],[56,98,202],[56,98,193],[56,98,224,225],[56,98,224],[56,98,223,226,227,228,229,230,231],[56,98,227],[56,98,226],[56,65,69,98,141],[56,65,98,130,141],[56,60,98],[56,62,65,98,138,141],[56,98,118,138],[56,98,148],[56,60,98,148],[56,62,65,98,118,141],[56,57,58,61,64,98,110,130,141],[56,65,72,98],[56,57,63,98],[56,65,86,87,98],[56,61,65,98,133,141,148],[56,86,98,148],[56,59,60,98,148],[56,65,98],[56,59,60,61,62,63,64,65,66,67,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,87,88,89,90,91,92,98],[56,65,80,98],[56,65,72,73,98],[56,63,65,73,74,98],[56,64,98],[56,57,60,65,98],[56,65,69,73,74,98],[56,69,98],[56,63,65,68,98,141],[56,57,62,65,72,98],[56,98,130],[56,60,65,86,98,146,148],[56,98,318,319],[56,98,318],[56,98,150,181,182,252,340],[56,98,182,254,259,340],[56,98,110,111,113,114,115,118,130,138,141,147,148,150,151,152,153,155,156,157,177,178,179,180,181,182],[56,98,152,153,154,155],[56,98,152],[56,98,153],[56,98,150,182],[56,98,273,327,328,339],[56,98,262,270,273,323,324,339],[56,98,330],[56,98,312],[56,98,262,273,313,323,329,338,339],[56,98,316],[56,98,101,111,130,182,262,267,270,273,313,316,317,320,323,325,326,329,331,332,335,339,340],[56,98,273,327,328,329,339],[56,98,182,333,340],[56,98,146,326],[56,98,273,313,320,323,325,339],[56,98,101,111,130,146,182,262,267,270,273,312,313,316,317,320,323,324,325,326,327,328,329,330,331,332,333,334,335,336,338,339,340,341,342,347],[56,98,310,311],[56,98,234],[56,98,247],[56,98,190,247,248,249,250,251],[56,98,232,234,236,238,240,242,244,246],[56,98,182,189,253,260,340],[56,98,182,189,340,348]],"fileInfos":[{"version":"a7297ff837fcdf174a9524925966429eb8e5feecc2cc55cc06574e6b092c1eaa","impliedFormat":1},{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"030e350db2525514580ed054f712ffb22d273e6bc7eddc1bb7eda1e0ba5d395e","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"d802f0e6b5188646d307f070d83512e8eb94651858de8a82d1e47f60fb6da4e2","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"a4ef5ccfd69b5bc2a2c29896aa07daaff7c5924a12e70cb3d9819145c06897db","affectsGlobalScope":true,"impliedFormat":1},{"version":"a38efe83ff77c34e0f418a806a01ca3910c02ee7d64212a59d59bca6c2c38fa1","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3fe4022ba1e738034e38ad9afacbf0f1f16b458ed516326f5bf9e4a31e9be1dc","impliedFormat":1},{"version":"a957197054b074bcdf5555d26286e8461680c7c878040d0f4e2d5509a7524944","affectsGlobalScope":true,"impliedFormat":1},{"version":"4314c7a11517e221f7296b46547dbc4df047115b182f544d072bdccffa57fc72","impliedFormat":1},{"version":"e9b97d69510658d2f4199b7d384326b7c4053b9e6645f5c19e1c2a54ede427fc","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"f478f6f5902dc144c0d6d7bdc919c5177cac4d17a8ca8653c2daf6d7dc94317f","affectsGlobalScope":true,"impliedFormat":1},{"version":"19d5f8d3930e9f99aa2c36258bf95abbe5adf7e889e6181872d1cdba7c9a7dd5","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"a6bf63d17324010ca1fbf0389cab83f93389bb0b9a01dc8a346d092f65b3605f","impliedFormat":1},{"version":"e009777bef4b023a999b2e5b9a136ff2cde37dc3f77c744a02840f05b18be8ff","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"71450bbc2d82821d24ca05699a533e72758964e9852062c53b30f31c36978ab8","affectsGlobalScope":true,"impliedFormat":1},{"version":"88bc59b32d0d5b4e5d9632ac38edea23454057e643684c3c0b94511296f2998c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a0a1dda070290b92da5a50113b73ecc4dd6bcbffad66e3c86503d483eafbadcf","impliedFormat":1},{"version":"59dcad36c4549175a25998f6a8b33c1df8e18df9c12ebad1dfb25af13fd4b1ce","impliedFormat":1},{"version":"206a70e72af3e24688397b81304358526ce70d020e4c2606c4acfd1fa1e81fb2","impliedFormat":1},{"version":"3f3edb8e44e3b9df3b7ca3219ab539710b6a7f4fe16bd884d441af207e03cd57","impliedFormat":1},{"version":"528b62e4272e3ddfb50e8eed9e359dedea0a4d171c3eb8f337f4892aac37b24b","impliedFormat":1},{"version":"d71535813e39c23baa113bc4a29a0e187b87d1105ccc8c5a6ebaca38d9a9bff2","impliedFormat":1},{"version":"4a1c5b43d4d408cb0df0a6cc82ca7be314553d37e432fc1fd801bae1a9ab2cb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"f72bc8fe16da67e4e3268599295797b202b95e54bd215a03f97e925dd1502a36","impliedFormat":1},{"version":"b1b6ee0d012aeebe11d776a155d8979730440082797695fc8e2a5c326285678f","impliedFormat":1},{"version":"45875bcae57270aeb3ebc73a5e3fb4c7b9d91d6b045f107c1d8513c28ece71c0","impliedFormat":1},{"version":"915e18c559321c0afaa8d34674d3eb77e1ded12c3e85bf2a9891ec48b07a1ca5","affectsGlobalScope":true,"impliedFormat":1},{"version":"636302a00dfd1f9fe6e8e91e4e9350c6518dcc8d51a474e4fc3a9ba07135100b","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"e1120271ebbc9952fdc7b2dd3e145560e52e06956345e6fdf91d70ca4886464f","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"e1ce1d622f1e561f6cdf246372ead3bbc07ce0342024d0e9c7caf3136f712698","impliedFormat":1},{"version":"199c8269497136f3a0f4da1d1d90ab033f899f070e0dd801946f2a241c8abba2","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"27e4532aaaa1665d0dd19023321e4dc12a35a741d6b8e1ca3517fcc2544e0efe","affectsGlobalScope":true,"impliedFormat":1},{"version":"2754d8221d77c7b382096651925eb476f1066b3348da4b73fe71ced7801edada","impliedFormat":1},{"version":"8c2ad42d5d1a2e8e6112625767f8794d9537f1247907378543106f7ba6c7df90","affectsGlobalScope":true,"impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"98ffdf93dfdd206516971d28e3e473f417a5cfd41172e46b4ce45008f640588e","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"7d6ff413e198d25639f9f01f16673e7df4e4bd2875a42455afd4ecc02ef156da","affectsGlobalScope":true,"impliedFormat":1},{"version":"12e8ce658dd17662d82fb0509d2057afc5e6ee30369a2e9e0957eff725b1f11d","affectsGlobalScope":true,"impliedFormat":1},{"version":"74736930d108365d7bbe740c7154706ccfb1b2a3855a897963ab3e5c07ecbf19","impliedFormat":1},{"version":"3a051941721a7f905544732b0eb819c8d88333a96576b13af08b82c4f17581e4","impliedFormat":1},{"version":"ac5ed35e649cdd8143131964336ab9076937fa91802ec760b3ea63b59175c10a","impliedFormat":1},{"version":"c6ab0dd29bf74b71a54ff2bbce509eb8ae3c4294d57cc54940f443c01cd1baae","affectsGlobalScope":true,"impliedFormat":1},{"version":"3797dd6f4ea3dc15f356f8cdd3128bfa18122213b38a80d6c1f05d8e13cbdad8","impliedFormat":1},{"version":"ad90122e1cb599b3bc06a11710eb5489101be678f2920f2322b0ac3e195af78d","impliedFormat":1},{"version":"e2b48abff5a8adc6bb1cd13a702b9ef05e6045a98e7cfa95a8779b53b6d0e69d","impliedFormat":1},{"version":"a02d26c056491b1ddfa53a671ad60ce852969b369f0e71993dbac8ddcf0d038b","affectsGlobalScope":true,"impliedFormat":1},{"version":"a660aa95476042d3fdcc1343cf6bb8fdf24772d31712b1db321c5a4dcc325434","impliedFormat":1},{"version":"a7ca8df4f2931bef2aa4118078584d84a0b16539598eaadf7dce9104dfaa381c","impliedFormat":1},{"version":"11443a1dcfaaa404c68d53368b5b818712b95dd19f188cab1669c39bee8b84b3","impliedFormat":1},{"version":"36977c14a7f7bfc8c0426ae4343875689949fb699f3f84ecbe5b300ebf9a2c55","impliedFormat":1},{"version":"035d0934d304483f07148427a5bd5b98ac265dae914a6b49749fe23fbd893ec7","impliedFormat":99},{"version":"e2ed5b81cbed3a511b21a18ab2539e79ac1f4bc1d1d28f8d35d8104caa3b429f","impliedFormat":99},{"version":"dd7ca4f0ef3661dac7043fb2cdf1b99e008d2b6bc5cd998dd1fa5a2968034984","affectsGlobalScope":true,"impliedFormat":1},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"8885cf05f3e2abf117590bbb951dcf6359e3e5ac462af1c901cfd24c6a6472e2","impliedFormat":1},{"version":"33f3718dababfc26dfd9832c150149ea4e934f255130f8c118a59ae69e5ed441","impliedFormat":1},{"version":"e61df3640a38d535fd4bc9f4a53aef17c296b58dc4b6394fd576b808dd2fe5e6","impliedFormat":1},{"version":"459920181700cec8cbdf2a5faca127f3f17fd8dd9d9e577ed3f5f3af5d12a2e4","impliedFormat":1},{"version":"4719c209b9c00b579553859407a7e5dcfaa1c472994bd62aa5dd3cc0757eb077","impliedFormat":1},{"version":"7ec359bbc29b69d4063fe7dad0baaf35f1856f914db16b3f4f6e3e1bca4099fa","impliedFormat":1},{"version":"70790a7f0040993ca66ab8a07a059a0f8256e7bb57d968ae945f696cbff4ac7a","impliedFormat":1},{"version":"d1b9a81e99a0050ca7f2d98d7eedc6cda768f0eb9fa90b602e7107433e64c04c","impliedFormat":1},{"version":"a022503e75d6953d0e82c2c564508a5c7f8556fad5d7f971372d2d40479e4034","impliedFormat":1},{"version":"b215c4f0096f108020f666ffcc1f072c81e9f2f95464e894a5d5f34c5ea2a8b1","impliedFormat":1},{"version":"644491cde678bd462bb922c1d0cfab8f17d626b195ccb7f008612dc31f445d2d","impliedFormat":1},{"version":"dfe54dab1fa4961a6bcfba68c4ca955f8b5bbeb5f2ab3c915aa7adaa2eabc03a","impliedFormat":1},{"version":"1bb61aa2f08ab4506d41dbe16c5f3f5010f014bbf46fa3d715c0cbe3b00f4e1c","impliedFormat":1},{"version":"47865c5e695a382a916b1eedda1b6523145426e48a2eae4647e96b3b5e52024f","impliedFormat":1},{"version":"e42820cd611b15910c204cd133f692dcd602532b39317d4f2a19389b27e6f03d","impliedFormat":1},{"version":"331b8f71bfae1df25d564f5ea9ee65a0d847c4a94baa45925b6f38c55c7039bf","impliedFormat":1},{"version":"2a771d907aebf9391ac1f50e4ad37952943515eeea0dcc7e78aa08f508294668","impliedFormat":1},{"version":"0146fd6262c3fd3da51cb0254bb6b9a4e42931eb2f56329edd4c199cb9aaf804","impliedFormat":1},{"version":"183f480885db5caa5a8acb833c2be04f98056bdcc5fb29e969ff86e07efe57ab","impliedFormat":99},{"version":"4ec16d7a4e366c06a4573d299e15fe6207fc080f41beac5da06f4af33ea9761e","impliedFormat":1},{"version":"7870becb94cbc11d2d01b77c4422589adcba4d8e59f726246d40cd0d129784d8","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f698624bbbb060ece7c0e51b7236520ebada74b747d7523c7df376453ed6fea","impliedFormat":1},{"version":"f70b8328a15ca1d10b1436b691e134a49bc30dcf3183a69bfaa7ba77e1b78ecd","impliedFormat":1},{"version":"ff3660e2664e6096196280deb4e176633b1bb1e58a7dcc9b021ec0e913a6f96f","impliedFormat":99},{"version":"d88b3dc8b7055665059ea06ffafce9467fc4bdfa7cb2d7a6f4262556bb482b0d","impliedFormat":1},{"version":"b6d03c9cfe2cf0ba4c673c209fcd7c46c815b2619fd2aad59fc4229aaef2ed43","impliedFormat":1},{"version":"32ddc6ad753ae79571bbf28cebff7a383bf7f562ac5ef5d25c94ef7f71609d49","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"81df92841a7a12d551fcbc7e4e83dbb7d54e0c73f33a82162d13e9ae89700079","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"50d0f9f7c895c02124a84433b94fde0298450138c893f620f66c9e832ccdf26a","impliedFormat":99},{"version":"cd21651ff2dc71a2d2386cecd16eca9eed55064b792564c2ff09e9465f974521","impliedFormat":1},{"version":"9bd8219f88db1339a2203f7fa18cf01aeeb60bca80aeda842a9fd9599d84d2eb","affectsGlobalScope":true,"impliedFormat":1},{"version":"234ada61fbdcac5d8303c5aef3c937251a7a860a72e2fbfd376af71b1f28485d","impliedFormat":1},{"version":"c58be3e560989a877531d3ff7c9e5db41c5dd9282480ccf197abfcc708a95b8d","impliedFormat":1},{"version":"941f4fd3e572742e7b3cf81fd8bef220a7ff70ea3a1a61a460405a4378923427","impliedFormat":1},{"version":"9945033867c3240435d1c1dd5eeba80c54c3a6be1063c71fc87b66ee32968f43","impliedFormat":1},{"version":"d41055c9b49f6a0bbc2ea53ccdea2514d41a3d2cd0317c4d0df664114cc103ec","impliedFormat":1},{"version":"d33782b82eea0ee17b99ca563bd19b38259a3aaf096d306ceaf59cd4422629be","impliedFormat":1},{"version":"55a84db1ca921c86709117fabae152ab802511dd395c26d6049e6d4fb1e78112","impliedFormat":1},{"version":"2d14198b25428b7b8010a895085add8edfaae476ab863c0c15fe2867fc214fe4","impliedFormat":1},{"version":"61046f12c3cfafd353d2d03febc96b441c1a0e3bb82a5a88de78cc1be9e10520","impliedFormat":1},{"version":"f4e7f5824ac7b35539efc3bef36b3e6be89603b88224cb5c0ad3526a454fc895","impliedFormat":1},{"version":"b29ef0a32e75e0d2a08762d6af502c0ffcd7a83fec07ed7a153e95329b89d761","impliedFormat":1},{"version":"537aff717746703d2157ec563b5de4f6393ce9f69a84ae62b49e9b6c80b6e587","impliedFormat":1},{"version":"d4220a16027ddf0cc7d105d80cbb01f5070ca7ddd8b2d007cfb024b27e22b912","impliedFormat":1},{"version":"cba6e0e0a6740738cf4911ef772456a988467ca11a168e803b294756c2dd5d18","impliedFormat":1},{"version":"55407b9eec75e0c87095afb0c7ec58a06463bb37075088e518565fe598b3b8c1","impliedFormat":1},{"version":"69630ad0e50189fb7a6b8f138c5492450394cb45424a903c8b53b2d5dd1dbce2","impliedFormat":1},{"version":"c585e44fdf120eba5f6b12c874966f152792af727115570b21cb23574f465ce1","impliedFormat":1},{"version":"8e067d3c170e56dfe3502fc8ebd092ae76a5235baad6f825726f3bbcc8a3836a","impliedFormat":1},{"version":"ae7f57067310d6c4acbc4862b91b5799e88831f4ab77f865443a9bc5057b540a","impliedFormat":1},{"version":"955d0c60502897e9735fcd08d2c1ad484b6166786328b89386074aebcd735776","impliedFormat":1},{"version":"2fa69d202a513f2a6553f263d473cba85d598ce250261715d78e8aab42df6b93","impliedFormat":1},{"version":"55480aa69f3984607fa60b3862b5cd24c2ee7bdd4edaed1eef6a8b46554e947f","impliedFormat":1},{"version":"3c19e77a05c092cab5f4fd57f6864aa2657f3ad524882f917a05fdb025905199","impliedFormat":1},{"version":"708350608d7483a4c585233b95d2dc86d992d36e7da312d5802e9a8837b5829d","impliedFormat":1},{"version":"41ceb13974711a87f182145196a641ad804125baf1fca181595f1be8cb0a2cc1","impliedFormat":1},{"version":"94588f9466081454cf518bd769f57f0f1db1356db2c4f6db924a7793b862bc96","impliedFormat":1},{"version":"4d2f7644abb97ec0d681d89b455170cf2bd0e72ee2a3e52d396074d0def264c4","impliedFormat":1},{"version":"671da85fc40086ce6f7309c428511bd77aebc0405b88700a26590a75cf37ff10","impliedFormat":1},{"version":"6e95aab5b3ba30cdbc9d4ad350ae7cbeb519a1eda30a214d2b1ec1f53eecdf9c","impliedFormat":1},{"version":"e11ff96a6e720e91e52ac54c53ee5bea99929bf096ae6b34bca2276e2b277ef8","impliedFormat":1},{"version":"08ce78e8c4c047bb08ccadc6587f6b45f025d85829854199db891cf1de7b209e","impliedFormat":1},{"version":"9984b42ce92e450fd7d9f016c65597f7da7c6f48a6e71784a232b4e1a3cb45d3","impliedFormat":1},{"version":"679a500b60fdb879af3ff20dab0bc5937098dd1ea5b75f786c672fde09faaeef","impliedFormat":1},{"version":"035c74cad659923dd64bf6d84038675b352adca39eb1db2c5fb2aaad706ddb06","impliedFormat":1},{"version":"1dac9649d09ffda3912dae3d77a2c94211da01c9b6ee203c4acef0bfaff94083","impliedFormat":1},{"version":"9b83354a819146569dfe74a2468b7c11e287286d58b5654555ed1fec10688649","impliedFormat":1},{"version":"e90e58ad52b0d25a238f6a794be594bf647280a6e8478b2337ff729dce62a63c","impliedFormat":1},{"version":"ea1393c82a0cd229de6915d3682db9571c9b65803b971a04f6042bd3b3826b60","impliedFormat":1},{"version":"d4978c3f743921aefd2609c001cf4a6baf74dd5e67337b5088bb29cb6d832ebb","impliedFormat":1},{"version":"830ac81811b6e1729d758e59c82d41ac1793d74928458d7a245d8493df5eb337","impliedFormat":1},{"version":"2d1ee16a0a8d47965719fb5bfe0ca19fdbce45adb0ca386c0cac9fbc238c301b","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"f0ae1ac99c66a4827469b8942101642ae65971e36db438afe67d4985caa31222","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"46b907ed13bd5023adeb5446ad96e9680b1a40d4e4288344d0d0e31d9034d20a","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"ea689c41691ac977c4cf2cfe7fc7de5136851730c9d4dbc97d76eb65df8ee461","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8d0f0aa989374cc6c7bc141649a9ca7d76b221a39375c8b98b844c3ad8c9b090","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"72c62b406af19eca8080ea63f90f4c907ee5b8348152b75ba106395cd7514f54","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"be3d53a4a6cc2e67e4b4b09c46bffce6282585fe504f77839863c53cb378a47f","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"3199d552cbbbac5a3c6e1499c09acf672ae8c8c8687cf2a3dbfa7c8902cc7054","impliedFormat":1},{"version":"ad5e92984ced4333aa01391f47fece9e6f61489c6c1f61e70df213c2acc82db6","impliedFormat":1},{"version":"e3bf0a5aa199a4fc9f478808c7ffc2aa01411944594c2b305a43ede96e4a521d","impliedFormat":1},{"version":"3b0951ca295694b8d7b8139c1d69c1e6c2085e65fd86c8968eae8224f3bf5bfe","impliedFormat":1},{"version":"f2393e9e894511d174544b3319d5ed107753cc76548e590454024ccf2dedc881","impliedFormat":1},{"version":"83af0534774218e8d8205fb55df878c77e2471708a9d1435778aa69dabc24839","impliedFormat":1},{"version":"0013a72eaf0d971739705e72d2334e90973516c348f3b42a070ea5ec5563f502","impliedFormat":1},{"version":"e4a7aaa55c5de2eb52e66cc343dfe460df0a2176cf6fd8d07ce49014c279cece","impliedFormat":99},{"version":"77b55f8bfab90aa408704132d98b72f8762e2fe955eeda093ace44120d6adc1a","impliedFormat":1},{"version":"f63cb353cd53da6be4a34f6fdece6316dac14fd62cccf9a4d2ce6bab2c37bc8c","impliedFormat":1},{"version":"54751c34f1e8c3bedd7a4501762c8a9567160ac76bd6bc35b73429d3e2cf2ec7","impliedFormat":1},{"version":"3d922ac35e7bd201c09c71d0a3be9cab0ac41bdd0d5115f2734c8555629e5414","impliedFormat":1},{"version":"ae18a824baa6829b4b687f4e678d97c2b3f0ee75a82e2cff792180002f1e2a82","impliedFormat":1},{"version":"fe1baccba85e2af0fdaca57b32b34f3fd602609bb0b29aeb0609000dbcd75446","impliedFormat":1},{"version":"ae04fe1adb6d10414645db0d9c264ae06a48cd73fbb043053afe9c72849e5e44","impliedFormat":99},{"version":"3e2cde4d5e13bbd8f1ccbd3a2dcd65b99003229495e56d89522e5a7ed1c56b11","signature":"f1a1b21a223c18a29308ebff0b002317e4bb8aa5e350164f8c8c3b8bde33a535"},{"version":"5c54a34e3d91727f7ae840bfe4d5d1c9a2f93c54cb7b6063d06ee4a6c3322656","impliedFormat":99},{"version":"07c0547e91d0c35c3d1bff1d2b7ffac3334b315e9eb5744a8440940e819ab13a","impliedFormat":99},{"version":"a6f223e9ef29edb1dc1ffa1a8507b9247589077081be99883ec5ac84d74e61d6","impliedFormat":99},{"version":"f9b028d3c3891dd817e24d53102132b8f696269309605e6ed4f0db2c113bbd82","impliedFormat":99},{"version":"fb7c8d90e52e2884509166f96f3d591020c7b7977ab473b746954b0c8d100960","impliedFormat":99},{"version":"373e16d44e57937558478c586396210e4eeac6c895787863381a6588185528e4","impliedFormat":99},{"version":"7c45fbd736e81fd9899cf4d75b242326ccda37eafdd9555e5b64a0ed59e8f6e9","impliedFormat":99},{"version":"ef13c73d6157a32933c612d476c1524dd674cf5b9a88571d7d6a0d147544d529","impliedFormat":99},{"version":"daf54402364627db51d8ccdcf98620ca7bd88dbd0036053bff51b87714a299b4","impliedFormat":99},{"version":"9c2fe4e4ddf257e9b40d4d9fca28f86a8653a98492239a5ba27790019570cb71","impliedFormat":99},{"version":"f8433f2a07ccab79429b2fd66d12731a13f18061d4e7f8dc8559796086b22bc4","impliedFormat":99},{"version":"e64b03ee2d4d53929ea13a1e2b52aaba0685c86185b0f6f3346fc548b75a2245","impliedFormat":99},{"version":"19990350fca066265b2c190c9b6cde1229f35002ea2d4df8c9e397e9942f6c89","impliedFormat":99},{"version":"8fb8fdda477cd7382477ffda92c2bb7d9f7ef583b1aa531eb6b2dc2f0a206c10","impliedFormat":99},{"version":"66995b0c991b5c5d42eff1d950733f85482c7419f7296ab8952e03718169e379","impliedFormat":99},{"version":"9863f888da357e35e013ca3465b794a490a198226bd8232c2f81fb44e16ff323","impliedFormat":99},{"version":"84bc2d80326a83ee4a6e7cba2fd480b86502660770c0e24da96535af597c9f1e","impliedFormat":99},{"version":"ea27768379b866ee3f5da2419650acdb01125479f7af73580a4bceb25b79e372","impliedFormat":99},{"version":"598931eeb4362542cae5845f95c5f0e45ac668925a40ce201e244d7fe808e965","impliedFormat":99},{"version":"da9ef88cde9f715756da642ad80c4cd87a987f465d325462d6bc2a0b11d202c8","impliedFormat":99},{"version":"b4c6184d78303b0816e779a48bef779b15aea4a66028eb819aac0abee8407dea","impliedFormat":99},{"version":"db085d2171d48938a99e851dafe0e486dce9859e5dfa73c21de5ed3d4d6fb0c5","impliedFormat":99},{"version":"62a3ad1ddd1f5974b3bf105680b3e09420f2230711d6520a521fab2be1a32838","impliedFormat":99},{"version":"a77be6fc44c876bc10c897107f84eaba10790913ebdcad40fcda7e47469b2160","impliedFormat":99},{"version":"06cf55b6da5cef54eaaf51cdc3d4e5ebf16adfdd9ebd20cec7fe719be9ced017","impliedFormat":99},{"version":"91f5dbcdb25d145a56cffe957ec665256827892d779ef108eb2f3864faff523b","impliedFormat":99},{"version":"052ba354bab8fb943e0bc05a0769f7b81d7c3b3c6cd0f5cfa53c7b2da2a525c5","impliedFormat":99},{"version":"927955a3de5857e0a1c575ced5a4245e74e6821d720ed213141347dd1870197f","impliedFormat":99},{"version":"fec804d54cd97dd77e956232fc37dc13f53e160d4bbeeb5489e86eeaa91f7ebd","impliedFormat":99},{"version":"c1d53a14aad7cda2cb0b91f5daccd06c8e3f25cb26c09e008f46ad2896c80bf1","impliedFormat":1},{"version":"c789127b81f23a44e7cd20eaff043bb8ddd8b75aca955504b81217d6347709d8","impliedFormat":1},{"version":"1e13bda0589d714493973ae87a135aadb8bdadc2b8ba412a62d6a8f05f13ae76","impliedFormat":1},{"version":"9e9217786bc4dced2d11b82eaf62c77f172a2b4671f1a6353835dcbf7eef0843","impliedFormat":1},{"version":"8c18473f354a9648fd8798196f520b3c3868181c315ab6a726177e5b5d2ada1c","impliedFormat":1},{"version":"067fe0fe11f79aa3eef819ee2f1d7beecc7a6d9e95ee1b2b84553495fb61b2fe","impliedFormat":1},{"version":"65e7aa0d38b9513dad1d66fa622ca0897efd8f6e11cb3887231451eb1dde719a","impliedFormat":1},{"version":"cf8d966c5b46aa3b4e2bc55aeaf5932253a734d2c09fc9e05867d47f7fc3fe31","impliedFormat":1},{"version":"e11fb3c6b0788cddcda16e472a173c03d8729201dc325beb1251f54d2630ebbb","impliedFormat":1},{"version":"9034c961e85ef73bdd4e07e2c56d7adfa4c00ee6cf568dcfc13d059575aac8a8","impliedFormat":1},{"version":"48676769d0f4904e916425f778ae25c140370fb90b33ad85151c7ebab166a0cc","impliedFormat":1},{"version":"b70a8d1c0d9628260158c2e96982f5ffb415ca87f97388ea743e52bd6ef37a9c","impliedFormat":1},{"version":"709bae51a9b0263a888c6adf48fb1380634e37267abcea46a52eb02a14b76292","impliedFormat":1},{"version":"7a625afe5721361715736bc3f9548206e1f173dcdc43eecaf7f70557f5151361","impliedFormat":1},{"version":"4d114e382693704d3792d2d6da45adc1aa2d8a86c1b8ebe5fc225dccd30aaf36","impliedFormat":1},{"version":"329760175a249a5e13e16f281ede4d8da4a4a72d511bf631bf7e5bd363146a80","impliedFormat":1},{"version":"9fbdb40eb68109a83dcc5f19c450556b20699b4fa19783dabdfc06a9937c9c30","impliedFormat":1},{"version":"afb75becf7075fc3673a6f1f7b669b5bb909ae67609284ce6548ec44d8038a61","impliedFormat":1},{"version":"4018b7fb337b14d2a40dd091208fbd39b3400136dfda00e9995b51cf64783a9f","impliedFormat":1},{"version":"fd0589ca571ad090b531d8c095e26caa53d4825c64d3ff2b2b1ab95d72294175","impliedFormat":1},{"version":"669843ecafb89ae1e944df06360e8966219e4c1c34c0d28aa2503272cdd444a7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8124828a11be7db984fcdab052fd4ff756b18edcfa8d71118b55388176210923","impliedFormat":99},{"version":"d06f9f2ba52c62a1d6cc63f4a015bc7ccd155f3bac2c07fbb979aec6013d966f","impliedFormat":99},{"version":"b34b5f6b506abb206b1ea73c6a332b9ee9c8c98be0f6d17cdbda9430ecc1efab","impliedFormat":99},{"version":"75d4c746c3d16af0df61e7b0afe9606475a23335d9f34fcc525d388c21e9058b","impliedFormat":99},{"version":"fa959bf357232201c32566f45d97e70538c75a093c940af594865d12f31d4912","impliedFormat":99},{"version":"7d0eecfbb8fd85a40b3f1218d7b53f193d4194543a4053d0b007fcc869bd2594","impliedFormat":99},{"version":"e6233e1c976265e85aa8ad76c3881febe6264cb06ae3136f0257e1eab4a6cc5a","impliedFormat":99},{"version":"cc99b45397f724c65ab5b16dd2b9add8e2f49513621ccba4e3a564b939bfe706","impliedFormat":99},{"version":"4734f2650122fed32bf168723cbc2e7b64f0c281fec9fc7c37a23d68ee4d4033","impliedFormat":99},{"version":"324ac98294dab54fbd580c7d0e707d94506d7b2c3d5efe981a8495f02cf9ad96","impliedFormat":99},{"version":"9ec72eb493ff209b470467e24264116b6a8616484bca438091433a545dfba17e","impliedFormat":99},{"version":"dd1e40affaae1edc4beefe3d9832e86a683dcfc66fdf8c93c851a47298b04276","impliedFormat":99},{"version":"49747416f08b3ba50500a215e7a55d75268b84e31e896a40313c8053e8dec908","impliedFormat":99},{"version":"bb14e4b17394d59bd9f08459ce36d460dca08bd885c1347cf4fa7166c5af80a3","impliedFormat":99},{"version":"b07c8a8ea750da9dea2d813f9d4f65d14c0090bb00c6dde9372ec1d38b74992e","impliedFormat":99},{"version":"77217723774e80cf137592086cb40cd7607e106155a4c4071773574057863635","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"971a2c327ff166c770c5fb35699575ba2d13bba1f6d2757309c9be4b30036c8e","impliedFormat":99},{"version":"3dc60aac181aa635ad323906cdb76d723376299f0f7a4264f2f3e2ae9b8ecc1b","impliedFormat":99},{"version":"7bd51996fb7717941cbe094b05adc0d80b9503b350a77b789bbb0fc786f28053","impliedFormat":99},{"version":"b62006bbc815fe8190c7aee262aad6bff993e3f9ade70d7057dfceab6de79d2f","impliedFormat":99},{"version":"33c8acef655f35aa0f44e13a1573488662755a99884292702262b97df6b9b473","impliedFormat":99},{"version":"cb0ec5ea8c0bb861262b62e0fbb899a85d86796de4caaadb53d747706fda82e3","impliedFormat":99},{"version":"3c1291fa957007538097ce38f7f0d65bf4c6ba6c2fad80ab806b71264fd296f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8d3c5051687a7454c8f54746ba62b86b91c1e77bce27fea8f86ffc2d0a1325","impliedFormat":99},{"version":"171c0308da0fc6251ea4184989d62c33dff3f277695ab1d556c421c0af59ddd3","affectsGlobalScope":true,"impliedFormat":99},{"version":"fe2d63fcfdde197391b6b70daf7be8c02a60afa90754a5f4a04bdc367f62793d","impliedFormat":99},{"version":"8f86cb232f12a7261a16b4afcd8222327255daac1620b00a734119baf2862fa5","affectsGlobalScope":true,"impliedFormat":99},{"version":"1cc7fab9dcb518f2081a84caf4802c99db543fddad7227bceb3c3c97ea04688b","impliedFormat":99},{"version":"5a88655bf852c8cc007d6bc874ab61d1d63fba97063020458177173c454e9b4a","impliedFormat":99},{"version":"7e4dfae2da12ec71ffd9f55f4641a6e05610ce0d6784838659490e259e4eb13c","impliedFormat":99},{"version":"c30a41267fc04c6518b17e55dcb2b810f267af4314b0b6d7df1c33a76ce1b330","impliedFormat":1},{"version":"72422d0bac4076912385d0c10911b82e4694fc106e2d70added091f88f0824ba","impliedFormat":1},{"version":"da251b82c25bee1d93f9fd80c5a61d945da4f708ca21285541d7aff83ecb8200","impliedFormat":1},{"version":"4c8ca51077f382498f47074cf304d654aba5d362416d4f809dfdd5d4f6b3aaca","impliedFormat":1},{"version":"c6bddf16578495abc8b5546850b047f30c4b5a2a2b7fecefc0e11a44a6e91399","impliedFormat":1},{"version":"58c3c65b66f856365ceaf4f7a8f311f298ea8e1c20080ee852e91be53c98ab1d","impliedFormat":99},{"version":"e4c1599b5db368848969da315b96fa605dd4180e49b5aa79a86e713ebf7c2869","signature":"4b96dd19fd2949d28ce80e913412b0026dc421e5bf6c31d87c7b5eb11b5753b4"},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","impliedFormat":1},{"version":"5d08a179b846f5ee674624b349ebebe2121c455e3a265dc93da4e8d9e89722b4","impliedFormat":1},{"version":"afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","impliedFormat":1},{"version":"89121c1bf2990f5219bfd802a3e7fc557de447c62058d6af68d6b6348d64499a","impliedFormat":1},{"version":"79b4369233a12c6fa4a07301ecb7085802c98f3a77cf9ab97eee27e1656f82e6","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"7220461ab7f6d600b313ce621346c315c3a0ebc65b5c6f268488c5c55b68d319","impliedFormat":1},{"version":"b14c272987c82d49f0f12184c9d8d07a7f71767be99cb76faa125b777c70e962","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"b88749bdb18fc1398370e33aa72bc4f88274118f4960e61ce26605f9b33c5ba2","impliedFormat":1},{"version":"0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"d4a22007b481fe2a2e6bfd3a42c00cd62d41edb36d30fc4697df2692e9891fc8","impliedFormat":1},{"version":"65ff5a0aefd7817a03c1ad04fee85c9cdd3ec415cc3c9efec85d8008d4d5e4ee","impliedFormat":1},{"version":"742d4b7b02ffc3ba3c4258a3d196457da2b3fec0125872fd0776c50302a11b9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"8a3fdc84d91c2c7321fd2f8dba2ea90249cfdc31427ac71b5735dd51bc25cf91","impliedFormat":1},{"version":"a0acca63c9e39580f32a10945df231815f0fe554c074da96ba6564010ffbd2d8","impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3c1869c8ed70306e756de0566c2d0c423c0e9c6e9fe7aebec141461f104dd49","affectsGlobalScope":true,"impliedFormat":1},{"version":"d93476b774279834b479a824430c296b5d2b913e534a9d163f2e20f6b5f7ae04","impliedFormat":1},{"version":"8baa5d0febc68db886c40bf341e5c90dc215a90cd64552e47e8184be6b7e3358","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"460b6dffbb74ef21d52934f7770a5f956d4ecf63b4949eceabf8466e4d28fe9b","impliedFormat":1},{"version":"83a1e6434a2be3ddb77790a91cea19467fcbeabd3ff8f93f7bb83535b3f02218","impliedFormat":1},{"version":"b124a5a1750b89d1d4e99df8456fefb88f77c355f7a31b36c47a69827f7b9151","impliedFormat":1},{"version":"03c258e060b7da220973f84b89615e4e9850e9b5d30b3a8e4840b3e3268ae8eb","impliedFormat":1},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1}],"root":[261,349],"options":{"allowSyntheticDefaultImports":true,"composite":true,"module":99,"skipLibCheck":true},"referencedMap":[[185,1],[183,2],[360,2],[363,3],[254,4],[362,2],[257,5],[258,6],[259,7],[350,2],[188,8],[184,1],[186,9],[187,1],[352,10],[353,4],[149,2],[354,11],[356,12],[357,2],[358,13],[359,14],[369,15],[368,16],[310,17],[311,18],[370,2],[372,19],[373,20],[371,21],[374,22],[375,23],[376,24],[377,25],[378,26],[379,27],[380,28],[381,29],[382,30],[383,31],[384,12],[351,2],[95,32],[96,32],[97,33],[56,34],[98,35],[99,36],[100,37],[51,2],[54,38],[52,2],[53,2],[101,39],[102,40],[103,41],[104,42],[105,43],[106,44],[107,44],[109,2],[108,45],[110,46],[111,47],[112,48],[94,49],[55,2],[113,50],[114,51],[115,52],[148,53],[116,54],[117,55],[118,56],[119,57],[120,58],[121,59],[122,60],[123,61],[124,62],[125,63],[126,63],[127,64],[128,2],[129,2],[130,65],[132,66],[131,67],[133,68],[134,69],[135,70],[136,71],[137,72],[138,73],[139,74],[140,75],[141,76],[142,77],[143,78],[144,79],[145,80],[146,81],[147,82],[385,2],[389,83],[392,84],[390,2],[391,85],[386,2],[388,86],[393,2],[394,2],[395,87],[396,87],[397,2],[398,2],[400,88],[399,2],[355,2],[401,2],[402,89],[189,90],[335,2],[337,91],[338,92],[316,93],[314,2],[315,2],[262,2],[273,94],[268,95],[271,96],[327,97],[321,2],[324,98],[323,99],[332,99],[322,100],[336,2],[270,101],[272,101],[264,102],[267,103],[317,102],[269,104],[263,2],[361,2],[387,2],[280,2],[281,105],[278,2],[279,2],[157,2],[345,106],[347,107],[346,108],[344,109],[343,2],[367,110],[365,111],[364,16],[366,112],[276,113],[289,114],[274,2],[275,115],[290,116],[285,117],[286,118],[284,119],[288,120],[282,121],[277,122],[287,123],[283,114],[174,124],[172,125],[173,126],[161,127],[162,125],[169,128],[160,129],[165,130],[175,2],[166,131],[171,132],[177,133],[176,134],[159,135],[167,136],[168,137],[163,138],[170,124],[164,139],[255,2],[256,140],[151,141],[150,4],[158,2],[328,2],[265,2],[266,142],[301,143],[291,2],[292,144],[302,145],[303,146],[304,143],[305,143],[306,2],[309,147],[307,143],[308,2],[298,2],[295,148],[296,2],[297,2],[294,149],[293,2],[299,143],[300,2],[223,150],[209,151],[220,152],[191,2],[211,153],[210,2],[212,154],[218,155],[217,2],[193,2],[215,2],[216,2],[202,156],[197,2],[196,157],[195,157],[204,2],[221,158],[200,156],[203,2],[208,2],[201,156],[198,159],[199,2],[205,157],[206,157],[219,2],[194,2],[214,2],[222,2],[192,2],[213,2],[224,2],[207,2],[226,160],[227,161],[231,160],[232,162],[228,163],[229,164],[230,163],[225,2],[1,2],[49,2],[50,2],[9,2],[10,2],[14,2],[13,2],[3,2],[15,2],[16,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[4,2],[23,2],[24,2],[5,2],[25,2],[29,2],[26,2],[27,2],[28,2],[30,2],[31,2],[32,2],[6,2],[33,2],[34,2],[35,2],[36,2],[7,2],[40,2],[37,2],[38,2],[39,2],[41,2],[8,2],[42,2],[47,2],[48,2],[43,2],[44,2],[45,2],[46,2],[2,2],[12,2],[11,2],[72,165],[82,166],[71,165],[92,167],[63,168],[62,169],[91,170],[85,171],[90,172],[65,173],[79,174],[64,175],[88,176],[60,177],[59,170],[89,178],[61,179],[66,180],[67,2],[70,180],[57,2],[93,181],[83,182],[74,183],[75,184],[77,185],[73,186],[76,187],[86,170],[68,188],[69,189],[78,190],[58,191],[81,182],[80,180],[84,2],[87,192],[330,193],[319,194],[320,193],[318,2],[253,195],[260,196],[182,197],[156,198],[155,199],[153,199],[152,2],[154,200],[180,2],[179,2],[178,2],[181,201],[329,202],[325,203],[331,204],[313,205],[339,206],[341,207],[333,208],[342,209],[340,210],[334,211],[326,212],[348,213],[312,214],[242,2],[241,2],[236,215],[235,2],[249,216],[250,216],[252,217],[251,216],[248,216],[190,2],[247,218],[244,2],[243,2],[233,2],[234,2],[246,215],[245,2],[237,2],[238,2],[239,2],[240,2],[261,219],[349,220]],"latestChangedDtsFile":"./vitest.config.d.ts","version":"5.8.3"} No newline at end of file | |||
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win
Don't commit generated .tsbuildinfo build cache.
This is a TypeScript incremental-build artifact regenerated on every compile. Committing it adds diff noise, becomes stale immediately, and risks merge conflicts. Add *.tsbuildinfo to .gitignore and remove this file from the repo.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@tsconfig.node.tsbuildinfo` at line 1, This change is a generated TypeScript
incremental-build cache that should not be versioned. Remove the committed
tsbuildinfo artifact from the repository, and update the project ignore rules to
exclude all tsbuildinfo files so future compiles do not reintroduce it. Locate
and delete the incremental cache entry named tsconfig.node.tsbuildinfo, and
verify no other build-cache artifacts are tracked.
There was a problem hiding this comment.
Pull request overview
Refactor-focused architecture cleanup to remove duplicated/unused fetching/filtering code, tighten TypeScript types (notably around IndexedDB storage), and consolidate item classification logic to reduce drift across views and utilities.
Changes:
- Removed unused utility modules (
githubSearch,resultsUtils,filterUtils) and moved the remaining “live” pieces (e.g.,parseSearchText,ResultsFilter) into their actual consumers. - Made IndexedDB storage APIs generic over stored item type to eliminate repeated casts and correct the Search-items store typing.
- Refactored event→item transformation into a dispatch-table style and extracted a full-screen
LoadingScreencomponent fromApp.tsx.
Reviewed changes
Copilot reviewed 28 out of 42 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| vitest.config.js | Added JS Vitest config (appears to duplicate existing TS config). |
| vitest.config.d.ts | Added generated type stub for JS Vitest config. |
| vite.config.js | Added JS Vite config (appears to duplicate existing TS config). |
| vite.config.d.ts | Added generated type stub for JS Vite config. |
| tsconfig.tsbuildinfo | Added TS incremental build artifact to the repo. |
| src/views/Summary.tsx | Switched ad-hoc review detection to shared isReviewItem() helper. |
| src/utils/viewFiltering.ts | Inlined and documented parseSearchText + memoization; kept advanced filtering/sorting utilities. |
| src/utils/urlState.ts | Moved ResultsFilter + createDefaultFilter into URL state owner module. |
| src/utils/urlState.test.ts | Updated imports to use createDefaultFilter from urlState. |
| src/utils/summaryGrouping.ts | Added isReviewItem() and reused it for consistent review detection. |
| src/utils/resultsUtils.ts | Removed unused/stale duplicate results utilities module. |
| src/utils/README.md | Rewrote utils documentation to match current module responsibilities and data flow. |
| src/utils/rawDataUtils.ts | Refactored transformEventToItem into a handler dispatch table with shared base builders. |
| src/utils/indexedDB.ts | Introduced EventsMetadata and made stored dataset shape generic over item type. |
| src/utils/githubSearch.ts | Removed orphaned search/fetch stack (unused in production). |
| src/utils/githubSearch.test.ts | Removed tests for deleted orphaned githubSearch module. |
| src/utils/filterUtils.ts | Removed unused filter-counting utilities module. |
| src/utils/filterUtils.test.ts | Removed tests for deleted filterUtils module. |
| src/utils/tests/searchParsing.test.ts | Added unit tests covering parseSearchText behavior in its new home. |
| src/types.ts | Consolidated FormContextType as the single source of truth; removed UsernameCache type. |
| src/test/URLStateIntegration.test.tsx | Removed now-dead mock for deleted githubSearch module. |
| src/test/test-utils.tsx | Updated FormContext test mock to include searchText / setSearchText. |
| src/hooks/useIndexedDBStorage.ts | Made hook generic over stored item type and aligned metadata typing. |
| src/hooks/useGitHubFormState.ts | Removed debug logging during avatar cache revalidation. |
| src/hooks/useGitHubDataProcessing.ts | Correctly typed Search-items store as GitHubItem[]; removed casts; simplified enrichment progress callback. |
| src/hooks/useGitHubDataFetching.ts | Correctly typed Search-items store as GitHubItem[]; removed casts; clarified error propagation. |
| src/components/LoadingScreen.tsx | New extracted component for the initial full-screen loading/start experience. |
| src/App.tsx | Adopted typed FormContextType, generic IndexedDB hooks, and extracted LoadingScreen; removed casts. |
| docs/UNDEFINED_TITLE_FIX.md | Moved prior process/tech note into docs/. |
| docs/SLOTMACHINE_OPTIMIZATION.md | Moved prior process/tech note into docs/. |
| docs/SEARCH_DEBOUNCING.md | Moved prior process/tech note into docs/. |
| docs/README_FILTERING_OPTIMIZATION.md | Moved prior process/tech note into docs/. |
| docs/RACE_CONDITION_FIX.md | Moved prior process/tech note into docs/. |
| docs/PWA_UPDATE_FEATURE.md | Moved prior process/tech note into docs/. |
| docs/PWA_FEATURES.md | Moved prior process/tech note into docs/. |
| docs/PR_ENRICHMENT_FEATURE.md | Moved prior process/tech note into docs/. |
| docs/PAGINATION_LIMIT_FIX.md | Moved prior process/tech note into docs/. |
| docs/GITHUB_API_FORMAT_CHANGE.md | Moved prior process/tech note into docs/. |
| docs/CUSTOM_SECTIONS_FEATURE.md | Moved prior process/tech note into docs/. |
| docs/BUTTON_WIDTH_FIX.md | Moved prior process/tech note into docs/. |
Comments suppressed due to low confidence (1)
src/utils/summaryGrouping.ts:56
getEventTypestill callsitem.title.startsWith(...)without guarding against missing titles. Elsewhere in this module you already use optional chaining ontitle, and the app has previously encountered items with missing titles (e.g., from corrupted/legacy cached Search API payloads). As written, a missingtitlewill throw at runtime here.
Consider normalizing title once (e.g., const title = item.title ?? '') and using that for all prefix checks.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| import { defineConfig, loadEnv } from 'vite'; | ||
| import react from '@vitejs/plugin-react'; | ||
| import { VitePWA } from 'vite-plugin-pwa'; | ||
| import svgr from 'vite-plugin-svgr'; | ||
| // https://vite.dev/config/ | ||
| export default defineConfig(function (_a) { | ||
| var mode = _a.mode; | ||
| // Load env file based on `mode` in the current directory |
| /// <reference types="vitest" /> | ||
| import { defineConfig } from 'vite'; | ||
| import react from '@vitejs/plugin-react'; | ||
| export default defineConfig({ | ||
| plugins: [react()], | ||
| resolve: { |
| @@ -0,0 +1 @@ | |||
| {"root":["./src/App.tsx","./src/main.tsx","./src/types.ts","./src/utils.ts","./src/vite-env.d.ts","./src/components/ActionButtonsRow.tsx","./src/components/BulkCopyButton.tsx","./src/components/BulkCopyButtons.tsx","./src/components/CopyToClipboardButton.tsx","./src/components/DescriptionDialog.tsx","./src/components/DismissibleBanner.tsx","./src/components/EmptyState.tsx","./src/components/HeaderSearch.tsx","./src/components/ItemRow.tsx","./src/components/LoadingIndicator.tsx","./src/components/LoadingScreen.tsx","./src/components/OfflineBanner.tsx","./src/components/PWAUpdateNotification.tsx","./src/components/ResultsContainer.tsx","./src/components/SearchForm.tsx","./src/components/SettingsDialog.tsx","./src/components/ShareButton.tsx","./src/components/SlotMachineLoader.tsx","./src/hooks/useCopyFeedback.ts","./src/hooks/useDebouncedSearch.ts","./src/hooks/useDialogNavigation.ts","./src/hooks/useDismissibleBanner.ts","./src/hooks/useGitHubDataFetching.ts","./src/hooks/useGitHubDataProcessing.ts","./src/hooks/useGitHubFormState.ts","./src/hooks/useIndexedDBStorage.ts","./src/hooks/useListSelection.ts","./src/hooks/useLocalStorage.ts","./src/hooks/useOnlineStatus.ts","./src/hooks/usePWAUpdate.ts","./src/types/pwa.d.ts","./src/utils/actionUtils.ts","./src/utils/clipboard.ts","./src/utils/environment.ts","./src/utils/indexedDB.ts","./src/utils/prEnrichment.ts","./src/utils/pwaUtils.ts","./src/utils/rawDataUtils.ts","./src/utils/settings.ts","./src/utils/storageUtils.ts","./src/utils/summaryConstants.ts","./src/utils/summaryGrouping.ts","./src/utils/summaryHelpers.ts","./src/utils/textUtils.ts","./src/utils/urlState.ts","./src/utils/usernameCache.ts","./src/utils/viewFiltering.ts","./src/views/EventView.tsx","./src/views/IssuesAndPRsList.tsx","./src/views/Summary.tsx"],"version":"5.8.3"} No newline at end of file | |||
…ME fence - Remove generated tsconfig*.tsbuildinfo and vite/vitest config .js/.d.ts that were accidentally committed (emitted by tsc -b), and gitignore them. - Default WatchEvent action to 'started' so a missing action renders as 'Starred' rather than 'Unstarred'. - Add 'text' language to the README data-flow code fence (markdownlint MD040).
Deploying git-vegas with
|
| Latest commit: |
424bd0a
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://ea639853.git-vegas.pages.dev |
| Branch Preview URL: | https://claude-code-architecture-rev.git-vegas.pages.dev |
Consolidation-focused architecture pass. The data-flow layering was already sound; the drag was duplication that had silently forked (two fetch stacks, two filter stacks, several item-type classifiers, two context-type definitions), with one fork already quietly wrong. Each change is its own commit, and the test suite (476 passing) plus a production build (
tsc && vite build) were green after every step.Changes
Remove orphaned
githubSearchfetch stack —performGitHubSearch/fetchUserItems(624 lines + 35 tests) were never wired into any production path; the live fetching lives inline inuseGitHubDataFetching. Deleted the module, its tests, the dead test mock, and the now-unusedUsernameCachetype.Consolidate filtering & classification into one module — Deleted
resultsUtils.tsandfilterUtils.ts, whose entire filter/classify API was unused in production (onlyparseSearchTextand theResultsFiltertype were live). This removed a second, stale copy of the filtering logic that had already drifted —getItemTypematched a'Reviewed:'title prefix no item ever has. MovedparseSearchTextinto the liveviewFiltering.tsandResultsFilter/createDefaultFilterintourlState.ts(their only consumers), and added a canonicalisReviewItem()used everywhere review detection was duplicated.Make IndexedDB storage generic over item type — The search-items store actually holds
GitHubItem[]but was typed asGitHubEvent[]end-to-end, forcingas unknown ascasts at every read/write. ParameterizedEventsData<T>,eventsStorage.store/retrieve, anduseIndexedDBStorage<T>so events and search items are typed honestly. Removes all storage-layer casts.Deduplicate
FormContextType— It was defined both inline inApp.tsxand intypes.ts, and the two had drifted. Madetypes.tsthe single definition matching the value App actually provides.Refactor
transformEventToIteminto a dispatch table — Replaced the ~500-lineif/else-on-event.typechain with aRecord<eventType, handler>map plus sharedbuildBaseItem/actorUserOfhelpers. Behavior is identical (event-transform tests unchanged).Smaller cleanups — Extracted a
LoadingScreencomponent (~130 lines) out ofApp.tsx; removed unreachable code after athrow; dropped debugconsole.logs; moved 12 root-level*_FIX.md/*_FEATURE.mdprocess notes intodocs/.Verification
npx vitest run→ 476 passing, 13 skippednpm run build(tsc && vite build) → successnpm run lintstill reports pre-existing problems in untouched test/e2e files (not introduced here).Notes
🤖 Generated with Claude Code
https://claude.ai/code/session_01UgXeFcjEWsdHPRgb2Whcxh
Generated by Claude Code